Initial commit

This commit is contained in:
Dom
2026-03-05 00:20:25 +01:00
commit dcd4de9945
1954 changed files with 669380 additions and 0 deletions

View File

@@ -0,0 +1,230 @@
#!/usr/bin/env python3
"""
Test d'intégration des utilitaires d'entrée avec l'orchestrateur
"""
import sys
from pathlib import Path
from unittest.mock import Mock, patch, MagicMock
import tempfile
import shutil
# Ajouter le répertoire au path
sys.path.insert(0, str(Path(__file__).parent))
print("Test d'Intégration - InputUtils + Orchestrateur")
print("=" * 60)
# Créer des répertoires temporaires
temp_dir = tempfile.mkdtemp()
profiles_dir = Path(temp_dir) / "profiles"
logs_dir = Path(temp_dir) / "logs"
index_dir = Path(temp_dir) / "index"
keys_dir = Path(temp_dir) / "keys"
profiles_dir.mkdir(parents=True, exist_ok=True)
logs_dir.mkdir(parents=True, exist_ok=True)
index_dir.mkdir(parents=True, exist_ok=True)
keys_dir.mkdir(parents=True, exist_ok=True)
try:
# Test 1: Import des modules
print("\n1. Import des modules...")
with patch.dict('sys.modules', {'pyautogui': MagicMock()}):
from geniusia2.core.utils.input_utils import InputUtils, ActionType
from geniusia2.core.orchestrator import Orchestrator
from geniusia2.core.learning_manager import LearningManager
from geniusia2.core.utils.vision_utils import VisionUtils
from geniusia2.core.llm_manager import LLMManager
from geniusia2.core.logger import Logger
from geniusia2.core.embeddings_manager import EmbeddingsManager
from geniusia2.core.config import get_config
print(" ✓ Tous les modules importés")
# Test 2: Création des composants
print("\n2. Création des composants...")
logger = Logger(log_dir=str(logs_dir), key_path=str(keys_dir))
print(" ✓ Logger créé")
embeddings_manager = EmbeddingsManager(
model_name="ViT-B-32",
index_path=str(index_dir),
device="cpu"
)
print(" ✓ EmbeddingsManager créé")
config = get_config()
learning_manager = LearningManager(
embeddings_manager,
logger,
config,
profiles_path=str(profiles_dir)
)
print(" ✓ LearningManager créé")
vision_utils = VisionUtils(config)
print(" ✓ VisionUtils créé")
llm_manager = LLMManager(logger=logger, fallback_to_vision=True)
print(" ✓ LLMManager créé")
with patch.dict('sys.modules', {'pyautogui': MagicMock()}):
input_utils = InputUtils(logger, config)
print(" ✓ InputUtils créé")
# Test 3: Création de l'orchestrateur avec InputUtils
print("\n3. Création de l'orchestrateur...")
with patch.dict('sys.modules', {'pyautogui': MagicMock()}):
orchestrator = Orchestrator(
learning_manager=learning_manager,
vision_utils=vision_utils,
llm_manager=llm_manager,
logger=logger,
gui=None,
config=config,
input_utils=input_utils
)
print(" ✓ Orchestrateur créé avec InputUtils")
print(f" ✓ InputUtils intégré: {orchestrator.input_utils is not None}")
# Test 4: Vérifier les méthodes de l'orchestrateur
print("\n4. Vérification des méthodes de l'orchestrateur...")
methods = [
"execute_action",
"rollback_last_actions",
"get_status"
]
for method in methods:
if hasattr(orchestrator, method):
print(f"{method}()")
else:
print(f"{method}() - MANQUANT")
# Test 5: Test du statut avec historique d'actions
print("\n5. Test du statut avec historique...")
status = orchestrator.get_status()
print(f" ✓ Statut obtenu")
print(f" ✓ Mode: {status['mode']}")
print(f" ✓ Running: {status['running']}")
print(f" ✓ Action history size: {status.get('action_history_size', 0)}")
# Test 6: Simulation d'exécution d'action (avec mock)
print("\n6. Simulation d'exécution d'action...")
with patch.dict('sys.modules', {'pyautogui': MagicMock()}):
from geniusia2.core.models import Action
from datetime import datetime
import numpy as np
# Créer une action de test
test_action = Action(
action_type="click",
target_element="test_button",
bbox=(100, 100, 50, 30),
confidence=0.95,
embedding=np.random.rand(512).astype(np.float32),
timestamp=datetime.now(),
window_title="Test Window",
parameters={"button": "left"}
)
# Créer une décision
decision = {
"action": test_action,
"confidence": 0.95,
"task_id": "test_task"
}
# Mock de execute_action pour éviter l'exécution réelle
with patch.object(orchestrator.input_utils, 'execute_action', return_value=True):
orchestrator.execute_action(decision)
print(" ✓ Action exécutée (simulée)")
print(f" ✓ Actions exécutées: {orchestrator.metrics['actions_executed']}")
# Test 7: Test de rollback (avec mock)
print("\n7. Test de rollback...")
with patch.dict('sys.modules', {'pyautogui': MagicMock()}):
# Ajouter quelques actions à l'historique
with patch.object(orchestrator.input_utils, 'execute_action', return_value=True):
orchestrator.input_utils.action_history = [
{"type": "click", "x": 100, "y": 100},
{"type": "type", "text": "test", "length": 4},
{"type": "scroll", "direction": "down", "amount": 3}
]
print(f" ✓ Historique: {len(orchestrator.input_utils.action_history)} actions")
# Mock execute_inverse_action
with patch.object(orchestrator.input_utils, 'execute_inverse_action', return_value=True):
orchestrator.rollback_last_actions(count=3)
print(" ✓ Rollback exécuté (simulé)")
# Test 8: Vérifier l'intégration complète
print("\n8. Vérification de l'intégration complète...")
integration_checks = [
("InputUtils dans Orchestrator", orchestrator.input_utils is not None),
("Méthode execute_action", hasattr(orchestrator, 'execute_action')),
("Méthode rollback_last_actions", hasattr(orchestrator, 'rollback_last_actions')),
("Logger partagé", orchestrator.input_utils.logger is logger),
("Config partagée", orchestrator.input_utils.config is config),
]
all_checks_passed = True
for check_name, check_result in integration_checks:
status_icon = "" if check_result else ""
print(f" {status_icon} {check_name}")
if not check_result:
all_checks_passed = False
# Test 9: Test de la chaîne complète (mock)
print("\n9. Test de la chaîne complète...")
with patch.dict('sys.modules', {'pyautogui': MagicMock()}):
# Simuler une décision d'action
test_decision = {
"action": test_action,
"confidence": 0.95,
"task_id": "integration_test"
}
# Mock toutes les opérations
with patch.object(orchestrator.input_utils, 'execute_action', return_value=True):
with patch.object(orchestrator.learning_manager, 'record_execution'):
# Exécuter
orchestrator.execute_action(test_decision)
print(" ✓ Chaîne complète exécutée")
print(" ✓ Action → InputUtils → Logger → LearningManager")
print("\n" + "=" * 60)
if all_checks_passed:
print("✓ TOUS LES TESTS D'INTÉGRATION RÉUSSIS!")
print("✓ InputUtils est correctement intégré avec l'Orchestrateur.")
else:
print("⚠ Certains tests d'intégration ont échoué.")
print("\nRésumé de l'intégration:")
print(" - InputUtils créé et intégré")
print(" - Orchestrateur peut exécuter des actions")
print(" - Rollback fonctionnel")
print(" - Logging complet")
print(" - Chaîne complète validée")
print("\n✓ Tests d'intégration terminés!")
except Exception as e:
print(f"\n✗ ERREUR: {e}")
import traceback
traceback.print_exc()
finally:
# Nettoyer
shutil.rmtree(temp_dir)
print("\n✓ Fichiers temporaires nettoyés")