220 lines
6.3 KiB
Python
Executable File
220 lines
6.3 KiB
Python
Executable File
#!/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())
|