290 lines
9.1 KiB
Python
290 lines
9.1 KiB
Python
"""
|
|
Configuration globale pour RPA Vision V2
|
|
Contient tous les paramètres pour les modèles, seuils, performance et sécurité
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# Répertoire racine du projet
|
|
PROJECT_ROOT = Path(__file__).parent.parent
|
|
|
|
CONFIG = {
|
|
# Configuration des modèles IA
|
|
"models": {
|
|
# Modèle de vision pour détection d'éléments UI
|
|
# Options: "owl-v2", "dino", "yolo"
|
|
"vision": "owl-v2",
|
|
|
|
# Modèle LLM pour raisonnement visuel
|
|
"llm": "gemma3:12b", # Changé de qwen3-vl:8b à gemma3:12b (pas de thinking mode)
|
|
|
|
# Modèle OpenCLIP pour embeddings visuels
|
|
"clip": "ViT-B-32",
|
|
|
|
# Chemins des modèles
|
|
"paths": {
|
|
"openclip": str(PROJECT_ROOT / "models" / "openclip"),
|
|
"owl_v2": str(PROJECT_ROOT / "models" / "owl_v2"),
|
|
"qwen_vl": str(PROJECT_ROOT / "models" / "qwen2.5_vl"),
|
|
}
|
|
},
|
|
|
|
# Seuils pour transitions de mode et confiance
|
|
"thresholds": {
|
|
# Nombre minimum d'observations avant passage en Autopilot
|
|
"autopilot_observations": 20,
|
|
|
|
# Taux de concordance minimum pour passage en Autopilot (95%)
|
|
"autopilot_concordance": 0.95,
|
|
|
|
# Score de confiance minimum pour maintenir le mode Autopilot (90%)
|
|
"confidence_min": 0.90,
|
|
|
|
# Seuil de confiance pour rollback vers mode Assisté (85%)
|
|
"rollback_confidence": 0.85,
|
|
|
|
# Seuil de concordance pour rollback vers mode Assisté (85%)
|
|
"rollback_concordance": 0.85,
|
|
|
|
# Seuil de similarité d'embedding pour détection de changement UI (70%)
|
|
"ui_change_threshold": 0.70,
|
|
|
|
# Delta maximum en pixels avant déclenchement de ré-entraînement
|
|
"max_pixel_delta": 10,
|
|
},
|
|
|
|
# Pondérations pour calcul du score de confiance
|
|
"confidence_weights": {
|
|
"vision": 0.6, # 60% - Confiance du modèle de vision
|
|
"llm": 0.3, # 30% - Score du raisonnement LLM
|
|
"history": 0.1, # 10% - Performance historique de la tâche
|
|
},
|
|
|
|
# Paramètres de performance
|
|
"performance": {
|
|
# Latence maximale observation-vers-suggestion (ms)
|
|
"max_latency_ms": 400,
|
|
|
|
# Taux de correction maximum acceptable (3%)
|
|
"max_correction_rate": 0.03,
|
|
|
|
# Nombre d'exécutions récentes pour calcul de concordance
|
|
"concordance_window": 10,
|
|
|
|
# Nombre d'exécutions pour calcul du taux de correction
|
|
"correction_window": 20,
|
|
|
|
# Timeout pour opérations de rollback (secondes)
|
|
"rollback_timeout_s": 5,
|
|
},
|
|
|
|
# Configuration de sécurité
|
|
"security": {
|
|
# Algorithme de chiffrement pour les logs
|
|
"encryption_algorithm": "AES-256-CBC",
|
|
|
|
# Durée de rétention des logs (jours)
|
|
"log_retention_days": 90,
|
|
|
|
# Fréquence de rotation des clés de chiffrement (jours)
|
|
"key_rotation_days": 90,
|
|
|
|
# Liste blanche par défaut (vide - doit être configurée par l'utilisateur)
|
|
"default_whitelist": [],
|
|
|
|
# Activer la vérification de liste blanche
|
|
# True: Seules les fenêtres autorisées sont observées (sécurisé)
|
|
# False: Toutes les fenêtres sont observées (mode permissif)
|
|
"enforce_whitelist": False, # Changé à False pour plus de flexibilité
|
|
|
|
# Demander confirmation avant d'observer une nouvelle fenêtre (si enforce_whitelist=False)
|
|
"ask_before_new_window": True,
|
|
},
|
|
|
|
# Configuration Ollama
|
|
"ollama": {
|
|
"host": "localhost:11434",
|
|
"timeout": 30, # secondes
|
|
},
|
|
|
|
# Configuration FAISS
|
|
"faiss": {
|
|
# Dimension des embeddings OpenCLIP
|
|
"embedding_dim": 512,
|
|
|
|
# Type d'index FAISS ("Flat" pour petit dataset, "IVF" pour grand)
|
|
"index_type": "Flat",
|
|
|
|
# Nombre de clusters pour index IVF (si utilisé)
|
|
"n_clusters": 100,
|
|
|
|
# Nombre de voisins à retourner lors de la recherche
|
|
"k_neighbors": 5,
|
|
},
|
|
|
|
# Chemins des données
|
|
"data_paths": {
|
|
"user_profiles": str(PROJECT_ROOT / "data" / "user_profiles"),
|
|
"logs": str(PROJECT_ROOT / "data" / "logs"),
|
|
"faiss_index": str(PROJECT_ROOT / "data" / "faiss_index"),
|
|
"encryption_keys": str(PROJECT_ROOT / "data" / ".keys"),
|
|
},
|
|
|
|
# Configuration GUI
|
|
"gui": {
|
|
# Icônes pour les modes
|
|
"mode_icons": {
|
|
"shadow": "👀",
|
|
"assist": "🤝",
|
|
"auto": "🤖",
|
|
},
|
|
|
|
# Durée d'affichage des notifications (secondes)
|
|
"notification_timeout": 5,
|
|
|
|
# Raccourcis clavier
|
|
"shortcuts": {
|
|
"accept": "Return", # Entrée
|
|
"reject": "Escape", # Échap
|
|
"correct": "Alt+C", # Alt+C
|
|
"emergency_stop": "Ctrl+Pause", # Ctrl+Pause
|
|
},
|
|
},
|
|
|
|
# Configuration du logger
|
|
"logging": {
|
|
"level": "INFO",
|
|
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
"max_file_size_mb": 100,
|
|
"backup_count": 5,
|
|
},
|
|
|
|
# Configuration UI Element Detection (Phase 1-3)
|
|
"ui_detection": {
|
|
# Mode de détection: "light", "enriched", "complete"
|
|
# - light: Structures de données seulement (pas de détection)
|
|
# - enriched: Détection d'éléments UI activée
|
|
# - complete: Détection + embeddings multi-modaux + matching amélioré
|
|
"mode": "light", # Démarrer en mode light par défaut
|
|
|
|
# Activer la détection automatique d'éléments
|
|
"enabled": True,
|
|
|
|
# Détecter les éléments à chaque capture d'écran
|
|
"detect_on_capture": False, # False = détection manuelle uniquement
|
|
|
|
# Utiliser le VLM pour la détection (coûteux)
|
|
"vlm_enabled": False,
|
|
|
|
# Configuration du détecteur
|
|
"detector": {
|
|
"use_text_detection": True,
|
|
"use_rectangle_detection": True,
|
|
"use_vlm_detection": False,
|
|
"vlm_on_new_screens": False,
|
|
},
|
|
},
|
|
|
|
# Configuration Multi-Modal Embedding (Phase 3)
|
|
"multimodal_embedding": {
|
|
# Activer les embeddings multi-modaux
|
|
"enabled": False, # Activé automatiquement en mode "complete"
|
|
|
|
# Dimension des embeddings
|
|
"embedding_dim": 512,
|
|
|
|
# Méthode de fusion
|
|
"fusion_method": "weighted_average",
|
|
|
|
# Poids de fusion des modalités
|
|
"weights": {
|
|
"image": 0.5, # Screenshot complet
|
|
"text": 0.3, # Texte détecté
|
|
"title": 0.1, # Titre de fenêtre
|
|
"ui": 0.1, # Éléments UI
|
|
"context": 0.0, # Contexte workflow (à implémenter)
|
|
},
|
|
},
|
|
|
|
# Configuration Enhanced Workflow Matcher (Phase 3)
|
|
"enhanced_matcher": {
|
|
# Activer le matcher amélioré
|
|
"enabled": True,
|
|
|
|
# Poids pour le scoring composite
|
|
"screen_weight": 0.6, # Poids de la similarité d'écran
|
|
"elements_weight": 0.4, # Poids de la similarité d'éléments
|
|
|
|
# Seuils de matching
|
|
"min_similarity_threshold": 0.3,
|
|
"min_confidence_threshold": 0.5,
|
|
|
|
# Nombre maximum de candidats à évaluer
|
|
"max_candidates": 10,
|
|
},
|
|
}
|
|
|
|
|
|
def get_config():
|
|
"""Retourne la configuration globale"""
|
|
return CONFIG
|
|
|
|
|
|
def get_model_config():
|
|
"""Retourne la configuration des modèles"""
|
|
return CONFIG["models"]
|
|
|
|
|
|
def get_thresholds():
|
|
"""Retourne les seuils de confiance et transitions"""
|
|
return CONFIG["thresholds"]
|
|
|
|
|
|
def get_performance_config():
|
|
"""Retourne la configuration de performance"""
|
|
return CONFIG["performance"]
|
|
|
|
|
|
def get_security_config():
|
|
"""Retourne la configuration de sécurité"""
|
|
return CONFIG["security"]
|
|
|
|
|
|
def get_data_paths():
|
|
"""Retourne les chemins des données"""
|
|
return CONFIG["data_paths"]
|
|
|
|
|
|
def ensure_directories():
|
|
"""Crée tous les répertoires nécessaires s'ils n'existent pas"""
|
|
paths = get_data_paths()
|
|
for path in paths.values():
|
|
os.makedirs(path, exist_ok=True)
|
|
|
|
# Créer aussi les répertoires de modèles
|
|
model_paths = CONFIG["models"]["paths"]
|
|
for path in model_paths.values():
|
|
os.makedirs(path, exist_ok=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Test de la configuration
|
|
print("Configuration RPA Vision V2")
|
|
print("=" * 50)
|
|
print(f"Répertoire racine: {PROJECT_ROOT}")
|
|
print(f"\nModèles:")
|
|
for key, value in CONFIG["models"].items():
|
|
if key != "paths":
|
|
print(f" {key}: {value}")
|
|
print(f"\nSeuils:")
|
|
for key, value in CONFIG["thresholds"].items():
|
|
print(f" {key}: {value}")
|
|
print(f"\nPerformance:")
|
|
for key, value in CONFIG["performance"].items():
|
|
print(f" {key}: {value}")
|
|
print(f"\nSécurité:")
|
|
for key, value in CONFIG["security"].items():
|
|
if key != "default_whitelist":
|
|
print(f" {key}: {value}")
|