Initial commit
This commit is contained in:
289
geniusia2/core/config.py
Normal file
289
geniusia2/core/config.py
Normal file
@@ -0,0 +1,289 @@
|
||||
"""
|
||||
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}")
|
||||
Reference in New Issue
Block a user