Files
Geniusia_v2/geniusia2/core/config.py
2026-03-05 00:20:25 +01:00

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}")