Initial commit
This commit is contained in:
206
test_learning_manager_simple.py
Normal file
206
test_learning_manager_simple.py
Normal file
@@ -0,0 +1,206 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test simple du gestionnaire d'apprentissage sans pytest
|
||||
"""
|
||||
|
||||
import sys
|
||||
import tempfile
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
import numpy as np
|
||||
|
||||
# Ajouter le répertoire au path
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from geniusia2.core.learning_manager import LearningManager
|
||||
from geniusia2.core.models import Action
|
||||
from geniusia2.core.embeddings_manager import EmbeddingsManager
|
||||
from geniusia2.core.logger import Logger
|
||||
|
||||
|
||||
def test_learning_manager():
|
||||
"""Test basique du gestionnaire d'apprentissage."""
|
||||
print("=" * 60)
|
||||
print("Test du Gestionnaire d'Apprentissage")
|
||||
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:
|
||||
# Créer les composants
|
||||
print("\n1. Initialisation des composants...")
|
||||
embeddings_manager = EmbeddingsManager(
|
||||
model_name="ViT-B-32",
|
||||
index_path=str(index_dir),
|
||||
device="cpu"
|
||||
)
|
||||
print(" ✓ EmbeddingsManager créé")
|
||||
|
||||
logger = Logger(
|
||||
log_dir=str(logs_dir),
|
||||
key_path=str(keys_dir)
|
||||
)
|
||||
print(" ✓ Logger créé")
|
||||
|
||||
config = {
|
||||
"thresholds": {
|
||||
"autopilot_observations": 20,
|
||||
"autopilot_concordance": 0.95,
|
||||
"confidence_min": 0.90,
|
||||
"rollback_confidence": 0.85
|
||||
}
|
||||
}
|
||||
|
||||
learning_manager = LearningManager(
|
||||
embeddings_manager=embeddings_manager,
|
||||
logger=logger,
|
||||
config=config,
|
||||
profiles_path=str(profiles_dir)
|
||||
)
|
||||
print(" ✓ LearningManager créé")
|
||||
print(f" Mode initial: {learning_manager.mode}")
|
||||
|
||||
# Test 2: Observer une action
|
||||
print("\n2. Test observation d'action...")
|
||||
action = Action(
|
||||
action_type="click",
|
||||
target_element="valider_button",
|
||||
bbox=(100, 100, 50, 30),
|
||||
confidence=0.9,
|
||||
embedding=np.random.rand(512).astype(np.float32),
|
||||
timestamp=datetime.now(),
|
||||
window_title="Test Window"
|
||||
)
|
||||
|
||||
learning_manager.observe(action)
|
||||
print(f" ✓ Action observée")
|
||||
print(f" Nombre de tâches: {len(learning_manager.tasks)}")
|
||||
|
||||
task_id = list(learning_manager.tasks.keys())[0]
|
||||
task = learning_manager.tasks[task_id]
|
||||
print(f" Task ID: {task_id}")
|
||||
print(f" Observations: {task.observation_count}")
|
||||
print(f" Mode: {task.mode}")
|
||||
|
||||
# Test 3: Transition Shadow → Assist
|
||||
print("\n3. Test transition Shadow → Assist...")
|
||||
for i in range(4):
|
||||
learning_manager.observe(action)
|
||||
|
||||
print(f" ✓ 5 observations effectuées")
|
||||
print(f" Mode actuel: {task.mode}")
|
||||
assert task.mode == "assist", "Devrait être en mode Assist"
|
||||
print(" ✓ Transition réussie vers mode Assist")
|
||||
|
||||
# Test 4: Calcul de confiance
|
||||
print("\n4. Test calcul de confiance...")
|
||||
confidence = learning_manager.calculate_confidence(
|
||||
vision_conf=0.9,
|
||||
llm_score=0.8,
|
||||
task_id=task_id
|
||||
)
|
||||
print(f" ✓ Confiance calculée: {confidence:.3f}")
|
||||
expected = 0.6 * 0.9 + 0.3 * 0.8 + 0.1 * 0.0
|
||||
print(f" Attendu: {expected:.3f}")
|
||||
assert abs(confidence - expected) < 0.01, "Calcul de confiance incorrect"
|
||||
print(" ✓ Formule correcte (0.6×vision + 0.3×llm + 0.1×historique)")
|
||||
|
||||
# Test 5: Confirmation d'action
|
||||
print("\n5. Test confirmation d'action...")
|
||||
learning_manager.confirm_action({
|
||||
"type": "accept",
|
||||
"task_id": task_id
|
||||
})
|
||||
print(f" ✓ Action acceptée")
|
||||
print(f" Taux de concordance: {task.concordance_rate:.2%}")
|
||||
assert task.concordance_rate == 1.0, "Concordance devrait être 100%"
|
||||
|
||||
# Test 6: Évaluation de tâche
|
||||
print("\n6. Test évaluation de tâche...")
|
||||
metrics = learning_manager.evaluate_task(task_id)
|
||||
print(f" ✓ Métriques obtenues:")
|
||||
print(f" - Observations: {metrics['observation_count']}")
|
||||
print(f" - Concordance: {metrics['concordance_rate']:.2%}")
|
||||
print(f" - Corrections: {metrics['correction_count']}")
|
||||
print(f" - Mode: {metrics['mode']}")
|
||||
|
||||
# Test 7: Statistiques globales
|
||||
print("\n7. Test statistiques globales...")
|
||||
stats = learning_manager.get_task_stats()
|
||||
print(f" ✓ Statistiques:")
|
||||
print(f" - Total tâches: {stats['total_tasks']}")
|
||||
print(f" - Shadow: {stats['shadow_tasks']}")
|
||||
print(f" - Assist: {stats['assist_tasks']}")
|
||||
print(f" - Auto: {stats['auto_tasks']}")
|
||||
|
||||
# Test 8: Vérification critères Autopilot
|
||||
print("\n8. Test critères Autopilot...")
|
||||
# Observer 15 fois de plus (total 20)
|
||||
for i in range(15):
|
||||
learning_manager.observe(action)
|
||||
learning_manager.confirm_action({
|
||||
"type": "accept",
|
||||
"task_id": task_id
|
||||
})
|
||||
|
||||
print(f" ✓ 20 observations avec 100% concordance")
|
||||
should_auto = learning_manager.should_transition_to_auto(task_id)
|
||||
print(f" Éligible pour Autopilot: {should_auto}")
|
||||
|
||||
if should_auto:
|
||||
print(" ✓ Critères Autopilot remplis (≥20 obs, ≥95% concordance)")
|
||||
|
||||
# Test 9: Sauvegarde et chargement
|
||||
print("\n9. Test sauvegarde et chargement...")
|
||||
learning_manager._save_profile(task_id)
|
||||
print(f" ✓ Profil sauvegardé")
|
||||
|
||||
# Créer un nouveau gestionnaire pour charger
|
||||
learning_manager2 = LearningManager(
|
||||
embeddings_manager=embeddings_manager,
|
||||
logger=logger,
|
||||
config=config,
|
||||
profiles_path=str(profiles_dir)
|
||||
)
|
||||
print(f" ✓ Nouveau gestionnaire créé")
|
||||
print(f" Tâches chargées: {len(learning_manager2.tasks)}")
|
||||
|
||||
if task_id in learning_manager2.tasks:
|
||||
loaded_task = learning_manager2.tasks[task_id]
|
||||
print(f" ✓ Tâche rechargée:")
|
||||
print(f" - Observations: {loaded_task.observation_count}")
|
||||
print(f" - Mode: {loaded_task.mode}")
|
||||
print(f" - Concordance: {loaded_task.concordance_rate:.2%}")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("✓ TOUS LES TESTS RÉUSSIS!")
|
||||
print("=" * 60)
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n✗ ERREUR: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
finally:
|
||||
# Nettoyer
|
||||
shutil.rmtree(temp_dir)
|
||||
print("\n✓ Fichiers temporaires nettoyés")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_learning_manager()
|
||||
sys.exit(0 if success else 1)
|
||||
Reference in New Issue
Block a user