Initial commit
This commit is contained in:
219
test_task_replay.py
Executable file
219
test_task_replay.py
Executable file
@@ -0,0 +1,219 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test du système de rejeu de tâches.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Ajouter le chemin du projet
|
||||
sys.path.insert(0, str(Path(__file__).parent / "geniusia2"))
|
||||
|
||||
from core.task_replay import TaskReplayEngine
|
||||
from core.learning_manager import LearningManager
|
||||
from core.embeddings_manager import EmbeddingsManager
|
||||
from core.utils.vision_utils import VisionUtils
|
||||
from core.utils.input_utils import InputUtils
|
||||
from core.logger import Logger
|
||||
from core.config import get_config
|
||||
|
||||
|
||||
async def test_list_tasks():
|
||||
"""Test de listage des tâches disponibles."""
|
||||
print("=== Test: Liste des tâches disponibles ===\n")
|
||||
|
||||
# Charger la configuration
|
||||
config = get_config()
|
||||
|
||||
# Initialiser les composants
|
||||
logger = Logger()
|
||||
embeddings_manager = EmbeddingsManager(logger=logger)
|
||||
learning_manager = LearningManager(
|
||||
embeddings_manager,
|
||||
logger,
|
||||
config,
|
||||
profiles_path="geniusia2/data/user_profiles"
|
||||
)
|
||||
vision_utils = VisionUtils(config)
|
||||
input_utils = InputUtils(logger, config)
|
||||
|
||||
# Créer le moteur de rejeu
|
||||
replay_engine = TaskReplayEngine(
|
||||
learning_manager,
|
||||
embeddings_manager,
|
||||
vision_utils,
|
||||
input_utils,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
|
||||
# Lister les tâches
|
||||
tasks = replay_engine.list_available_tasks()
|
||||
|
||||
print(f"Tâches disponibles: {len(tasks)}\n")
|
||||
|
||||
for task in tasks:
|
||||
print(f"📋 {task['task_name']}")
|
||||
print(f" ID: {task['task_id']}")
|
||||
print(f" Observations: {task['observation_count']}")
|
||||
print(f" Confiance: {task['confidence']:.2%}")
|
||||
print()
|
||||
|
||||
return tasks
|
||||
|
||||
|
||||
async def test_replay_task(task_id: str):
|
||||
"""Test de rejeu d'une tâche."""
|
||||
print(f"\n=== Test: Rejeu de la tâche {task_id} ===\n")
|
||||
|
||||
# Charger la configuration
|
||||
config = get_config()
|
||||
|
||||
# Initialiser les composants
|
||||
logger = Logger()
|
||||
embeddings_manager = EmbeddingsManager(logger=logger)
|
||||
learning_manager = LearningManager(
|
||||
embeddings_manager,
|
||||
logger,
|
||||
config,
|
||||
profiles_path="geniusia2/data/user_profiles"
|
||||
)
|
||||
vision_utils = VisionUtils(config)
|
||||
input_utils = InputUtils(logger, config)
|
||||
|
||||
# Créer le moteur de rejeu
|
||||
replay_engine = TaskReplayEngine(
|
||||
learning_manager,
|
||||
embeddings_manager,
|
||||
vision_utils,
|
||||
input_utils,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
|
||||
print("⏳ Démarrage du rejeu dans 3 secondes...")
|
||||
print(" (Préparez l'interface si nécessaire)")
|
||||
await asyncio.sleep(3)
|
||||
|
||||
# Rejouer la tâche
|
||||
results = await replay_engine.replay_task(task_id, interactive=False)
|
||||
|
||||
print("\n📊 Résultats du rejeu:")
|
||||
print(f" Succès: {'✅' if results['success'] else '❌'}")
|
||||
print(f" Actions exécutées: {results['executed_actions']}/{results['total_actions']}")
|
||||
print(f" Actions échouées: {results['failed_actions']}")
|
||||
|
||||
print("\n📝 Détails des actions:")
|
||||
for action in results['actions']:
|
||||
status = "✅" if action['success'] else "❌"
|
||||
print(f" {status} Étape {action['step']}: {action.get('action_type', 'unknown')}")
|
||||
if 'location' in action:
|
||||
loc = action['location']
|
||||
print(f" Position: ({loc['x']}, {loc['y']}) - Confiance: {loc['confidence']:.2%}")
|
||||
if 'error' in action:
|
||||
print(f" Erreur: {action['error']}")
|
||||
|
||||
return results
|
||||
|
||||
|
||||
async def test_replay_with_monitoring(task_id: str):
|
||||
"""Test de rejeu avec monitoring en temps réel."""
|
||||
print(f"\n=== Test: Rejeu avec monitoring - {task_id} ===\n")
|
||||
|
||||
# Charger la configuration
|
||||
config = get_config()
|
||||
|
||||
# Initialiser les composants
|
||||
logger = Logger()
|
||||
embeddings_manager = EmbeddingsManager(logger=logger)
|
||||
learning_manager = LearningManager(
|
||||
embeddings_manager,
|
||||
logger,
|
||||
config,
|
||||
profiles_path="geniusia2/data/user_profiles"
|
||||
)
|
||||
vision_utils = VisionUtils(config)
|
||||
input_utils = InputUtils(logger, config)
|
||||
|
||||
# Créer le moteur de rejeu
|
||||
replay_engine = TaskReplayEngine(
|
||||
learning_manager,
|
||||
embeddings_manager,
|
||||
vision_utils,
|
||||
input_utils,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
|
||||
# Callback pour monitoring
|
||||
def on_step(step_result):
|
||||
status_icon = {
|
||||
"success": "✅",
|
||||
"failed": "❌",
|
||||
"not_found": "🔍",
|
||||
"pending": "⏳"
|
||||
}.get(step_result["status"], "❓")
|
||||
|
||||
print(f"{status_icon} Étape {step_result['step']}: {step_result['description']} - {step_result['status']}")
|
||||
|
||||
print("⏳ Démarrage du rejeu dans 3 secondes...")
|
||||
await asyncio.sleep(3)
|
||||
|
||||
# Rejouer avec monitoring
|
||||
results = await replay_engine.replay_task_with_monitoring(
|
||||
task_id,
|
||||
on_step_completed=on_step
|
||||
)
|
||||
|
||||
print(f"\n📊 Résultat final: {'✅ Succès' if results['success'] else '❌ Échec'}")
|
||||
|
||||
return results
|
||||
|
||||
|
||||
async def main():
|
||||
"""Fonction principale."""
|
||||
print("🎮 Test du système de rejeu de tâches\n")
|
||||
|
||||
# 1. Lister les tâches disponibles
|
||||
tasks = await test_list_tasks()
|
||||
|
||||
if not tasks:
|
||||
print("❌ Aucune tâche disponible pour le rejeu.")
|
||||
print(" Utilisez d'abord le système de capture pour apprendre des tâches.")
|
||||
return
|
||||
|
||||
# 2. Demander quelle tâche rejouer
|
||||
print("\n" + "="*60)
|
||||
print("Quelle tâche voulez-vous rejouer ?")
|
||||
for i, task in enumerate(tasks, 1):
|
||||
print(f"{i}. {task['task_name']} ({task['task_id']})")
|
||||
|
||||
try:
|
||||
choice = input("\nNuméro de la tâche (ou 'q' pour quitter): ").strip()
|
||||
|
||||
if choice.lower() == 'q':
|
||||
print("Au revoir!")
|
||||
return
|
||||
|
||||
task_index = int(choice) - 1
|
||||
if task_index < 0 or task_index >= len(tasks):
|
||||
print("❌ Choix invalide")
|
||||
return
|
||||
|
||||
selected_task = tasks[task_index]
|
||||
task_id = selected_task['task_id']
|
||||
|
||||
# 3. Rejouer la tâche avec monitoring
|
||||
await test_replay_with_monitoring(task_id)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n\n⚠️ Interruption par l'utilisateur")
|
||||
except Exception as e:
|
||||
print(f"\n❌ Erreur: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user