388 lines
11 KiB
Python
Executable File
388 lines
11 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Checkpoint - Validation du Mode Complet
|
|
Vérifie que tous les composants de la Phase 3 fonctionnent correctement.
|
|
"""
|
|
|
|
import sys
|
|
import numpy as np
|
|
from pathlib import Path
|
|
|
|
# Ajouter le répertoire parent au path
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
|
|
print("\n" + "="*70)
|
|
print("CHECKPOINT - MODE COMPLET")
|
|
print("Validation de la Phase 3 - Fusion Multi-Modale")
|
|
print("="*70)
|
|
|
|
# ============================================================================
|
|
# 1. Vérification des Imports
|
|
# ============================================================================
|
|
print("\n📦 1. Vérification des imports...")
|
|
|
|
try:
|
|
from geniusia2.core.enriched_screen_capture import EnrichedScreenCapture
|
|
print(" ✅ EnrichedScreenCapture")
|
|
except ImportError as e:
|
|
print(f" ❌ EnrichedScreenCapture: {e}")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
from geniusia2.core.multimodal_embedding_manager import (
|
|
MultiModalEmbeddingManager,
|
|
EmbeddingWeights
|
|
)
|
|
print(" ✅ MultiModalEmbeddingManager")
|
|
print(" ✅ EmbeddingWeights")
|
|
except ImportError as e:
|
|
print(f" ❌ MultiModalEmbeddingManager: {e}")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
from geniusia2.core.enhanced_workflow_matcher import (
|
|
EnhancedWorkflowMatcher,
|
|
WorkflowMatch,
|
|
ElementMatch
|
|
)
|
|
print(" ✅ EnhancedWorkflowMatcher")
|
|
print(" ✅ WorkflowMatch")
|
|
print(" ✅ ElementMatch")
|
|
except ImportError as e:
|
|
print(f" ❌ EnhancedWorkflowMatcher: {e}")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
from geniusia2.core.ui_element_models import (
|
|
EnrichedScreenState,
|
|
UIElement,
|
|
StateEmbedding
|
|
)
|
|
print(" ✅ EnrichedScreenState")
|
|
print(" ✅ UIElement")
|
|
print(" ✅ StateEmbedding")
|
|
except ImportError as e:
|
|
print(f" ❌ ui_element_models: {e}")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
from geniusia2.core.logger import Logger
|
|
print(" ✅ Logger")
|
|
except ImportError as e:
|
|
print(f" ❌ Logger: {e}")
|
|
sys.exit(1)
|
|
|
|
print("\n✅ Tous les imports sont OK")
|
|
|
|
# ============================================================================
|
|
# 2. Test des 3 Modes
|
|
# ============================================================================
|
|
print("\n🔧 2. Test des 3 modes...")
|
|
|
|
logger = Logger(log_dir="checkpoint_logs")
|
|
|
|
# Mode Light
|
|
print("\n Mode Light:")
|
|
try:
|
|
capture_light = EnrichedScreenCapture(
|
|
logger=logger,
|
|
data_dir="checkpoint_data",
|
|
mode="light"
|
|
)
|
|
assert capture_light.get_mode() == "light"
|
|
assert capture_light.ui_detector is None
|
|
assert capture_light.multimodal_manager is None
|
|
assert capture_light.enhanced_matcher is None
|
|
print(" ✅ Mode Light OK")
|
|
except Exception as e:
|
|
print(f" ❌ Mode Light: {e}")
|
|
sys.exit(1)
|
|
|
|
# Mode Enriched
|
|
print("\n Mode Enriched:")
|
|
try:
|
|
capture_enriched = EnrichedScreenCapture(
|
|
logger=logger,
|
|
data_dir="checkpoint_data",
|
|
mode="enriched"
|
|
)
|
|
assert capture_enriched.get_mode() == "enriched"
|
|
assert capture_enriched.ui_detector is not None
|
|
assert capture_enriched.multimodal_manager is None
|
|
assert capture_enriched.enhanced_matcher is None
|
|
print(" ✅ Mode Enriched OK")
|
|
except Exception as e:
|
|
print(f" ❌ Mode Enriched: {e}")
|
|
sys.exit(1)
|
|
|
|
# Mode Complete
|
|
print("\n Mode Complete:")
|
|
try:
|
|
capture_complete = EnrichedScreenCapture(
|
|
logger=logger,
|
|
data_dir="checkpoint_data",
|
|
mode="complete"
|
|
)
|
|
assert capture_complete.get_mode() == "complete"
|
|
assert capture_complete.ui_detector is not None
|
|
assert capture_complete.multimodal_manager is not None
|
|
assert capture_complete.enhanced_matcher is not None
|
|
print(" ✅ Mode Complete OK")
|
|
except Exception as e:
|
|
print(f" ❌ Mode Complete: {e}")
|
|
sys.exit(1)
|
|
|
|
print("\n✅ Les 3 modes fonctionnent correctement")
|
|
|
|
# ============================================================================
|
|
# 3. Test du Changement de Mode Dynamique
|
|
# ============================================================================
|
|
print("\n🔄 3. Test du changement de mode dynamique...")
|
|
|
|
try:
|
|
capture = EnrichedScreenCapture(
|
|
logger=logger,
|
|
data_dir="checkpoint_data",
|
|
mode="light"
|
|
)
|
|
|
|
# Light → Enriched
|
|
capture.set_mode("enriched")
|
|
assert capture.get_mode() == "enriched"
|
|
assert capture.ui_detector is not None
|
|
print(" ✅ Light → Enriched")
|
|
|
|
# Enriched → Complete
|
|
capture.set_mode("complete")
|
|
assert capture.get_mode() == "complete"
|
|
assert capture.multimodal_manager is not None
|
|
assert capture.enhanced_matcher is not None
|
|
print(" ✅ Enriched → Complete")
|
|
|
|
# Complete → Light
|
|
capture.set_mode("light")
|
|
assert capture.get_mode() == "light"
|
|
assert capture.ui_detector is None
|
|
assert capture.multimodal_manager is None
|
|
assert capture.enhanced_matcher is None
|
|
print(" ✅ Complete → Light")
|
|
|
|
print("\n✅ Changement de mode dynamique OK")
|
|
except Exception as e:
|
|
print(f"\n❌ Changement de mode: {e}")
|
|
sys.exit(1)
|
|
|
|
# ============================================================================
|
|
# 4. Test de MultiModalEmbeddingManager
|
|
# ============================================================================
|
|
print("\n🧠 4. Test de MultiModalEmbeddingManager...")
|
|
|
|
try:
|
|
manager = MultiModalEmbeddingManager(
|
|
logger=logger,
|
|
data_dir="checkpoint_data",
|
|
config={
|
|
"embedding_dim": 256,
|
|
"weights": {
|
|
"image": 0.4,
|
|
"text": 0.3,
|
|
"title": 0.1,
|
|
"ui": 0.1,
|
|
"context": 0.1
|
|
}
|
|
}
|
|
)
|
|
|
|
# Test poids
|
|
assert manager.embedding_dim == 256
|
|
assert abs(sum(manager.default_weights.to_dict().values()) - 1.0) < 0.001
|
|
print(" ✅ Configuration des poids OK")
|
|
|
|
# Test similarité
|
|
emb1 = np.random.rand(256)
|
|
emb2 = np.random.rand(256)
|
|
emb3 = emb1.copy()
|
|
|
|
sim_random = manager.compute_similarity(emb1, emb2)
|
|
sim_identical = manager.compute_similarity(emb1, emb3)
|
|
|
|
assert 0.0 <= sim_random <= 1.0
|
|
assert 0.95 <= sim_identical <= 1.05
|
|
print(" ✅ Calcul de similarité OK")
|
|
|
|
print("\n✅ MultiModalEmbeddingManager OK")
|
|
except Exception as e:
|
|
print(f"\n❌ MultiModalEmbeddingManager: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
# ============================================================================
|
|
# 5. Test de EnhancedWorkflowMatcher
|
|
# ============================================================================
|
|
print("\n🎯 5. Test de EnhancedWorkflowMatcher...")
|
|
|
|
try:
|
|
multimodal_manager = MultiModalEmbeddingManager(
|
|
logger=logger,
|
|
data_dir="checkpoint_data"
|
|
)
|
|
|
|
matcher = EnhancedWorkflowMatcher(
|
|
multimodal_manager=multimodal_manager,
|
|
logger=logger,
|
|
config={
|
|
"screen_weight": 0.6,
|
|
"elements_weight": 0.4
|
|
}
|
|
)
|
|
|
|
assert matcher.screen_weight == 0.6
|
|
assert matcher.elements_weight == 0.4
|
|
print(" ✅ Configuration du matcher OK")
|
|
|
|
# Test matching (sans workflows)
|
|
from geniusia2.core.screen_state_manager import ScreenStateManager
|
|
|
|
screen_manager = ScreenStateManager(
|
|
logger=logger,
|
|
data_dir="checkpoint_data"
|
|
)
|
|
|
|
screen_state = screen_manager.create_screen_state(
|
|
session_id="checkpoint_session",
|
|
window_title="Test Window",
|
|
app_name="TestApp",
|
|
screenshot_path="test.png",
|
|
screen_resolution=(1920, 1080)
|
|
)
|
|
|
|
matches = matcher.find_matching_workflows(
|
|
screen_state=screen_state,
|
|
screenshot=None,
|
|
workflows=[],
|
|
top_k=5
|
|
)
|
|
|
|
assert isinstance(matches, list)
|
|
print(" ✅ Matching de workflows OK")
|
|
|
|
print("\n✅ EnhancedWorkflowMatcher OK")
|
|
except Exception as e:
|
|
print(f"\n❌ EnhancedWorkflowMatcher: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
# ============================================================================
|
|
# 6. Test d'Intégration Complète
|
|
# ============================================================================
|
|
print("\n🔗 6. Test d'intégration complète...")
|
|
|
|
try:
|
|
# Créer le système complet
|
|
capture = EnrichedScreenCapture(
|
|
logger=logger,
|
|
data_dir="checkpoint_data",
|
|
mode="complete"
|
|
)
|
|
|
|
# Créer un screenshot simulé
|
|
screenshot = np.random.randint(0, 255, (1080, 1920, 3), dtype=np.uint8)
|
|
|
|
# Capturer et enrichir
|
|
screen_state = capture.capture_and_enrich(
|
|
screenshot=screenshot,
|
|
session_id="checkpoint_session",
|
|
window_title="Test Application",
|
|
app_name="TestApp",
|
|
screen_resolution=(1920, 1080),
|
|
detected_text=["Button", "Submit", "Cancel"],
|
|
context_tags=["form", "validation"],
|
|
workflow_candidate="test_workflow",
|
|
save=False
|
|
)
|
|
|
|
assert screen_state is not None
|
|
assert screen_state.mode == "complete"
|
|
assert screen_state.state_embedding is not None
|
|
print(" ✅ Capture et enrichissement OK")
|
|
|
|
# Test matching
|
|
matches = capture.find_matching_workflows(
|
|
screen_state=screen_state,
|
|
screenshot=screenshot,
|
|
workflows=[],
|
|
top_k=5
|
|
)
|
|
|
|
assert isinstance(matches, list)
|
|
print(" ✅ Matching intégré OK")
|
|
|
|
print("\n✅ Intégration complète OK")
|
|
except Exception as e:
|
|
print(f"\n❌ Intégration: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
# ============================================================================
|
|
# 7. Vérification des Tests Existants
|
|
# ============================================================================
|
|
print("\n🧪 7. Vérification des tests existants...")
|
|
|
|
test_files = [
|
|
"test_ui_element_phase1.py",
|
|
"test_ui_element_phase2.py",
|
|
"test_ui_element_phase3.py"
|
|
]
|
|
|
|
for test_file in test_files:
|
|
if Path(test_file).exists():
|
|
print(f" ✅ {test_file} existe")
|
|
else:
|
|
print(f" ⚠️ {test_file} manquant")
|
|
|
|
print("\n✅ Tests existants vérifiés")
|
|
|
|
# ============================================================================
|
|
# 8. Nettoyage
|
|
# ============================================================================
|
|
print("\n🧹 8. Nettoyage...")
|
|
|
|
import shutil
|
|
|
|
if Path("checkpoint_data").exists():
|
|
shutil.rmtree("checkpoint_data")
|
|
print(" ✅ checkpoint_data supprimé")
|
|
|
|
if Path("checkpoint_logs").exists():
|
|
shutil.rmtree("checkpoint_logs")
|
|
print(" ✅ checkpoint_logs supprimé")
|
|
|
|
# ============================================================================
|
|
# RÉSUMÉ FINAL
|
|
# ============================================================================
|
|
print("\n" + "="*70)
|
|
print("✅ CHECKPOINT RÉUSSI - MODE COMPLET VALIDÉ")
|
|
print("="*70)
|
|
|
|
print("\n📊 Résumé:")
|
|
print(" ✅ Imports: OK")
|
|
print(" ✅ 3 Modes: OK")
|
|
print(" ✅ Changement dynamique: OK")
|
|
print(" ✅ MultiModalEmbeddingManager: OK")
|
|
print(" ✅ EnhancedWorkflowMatcher: OK")
|
|
print(" ✅ Intégration complète: OK")
|
|
print(" ✅ Tests existants: OK")
|
|
|
|
print("\n🎉 Le Mode Complet est OPÉRATIONNEL!")
|
|
print("\n📝 Prochaines étapes recommandées:")
|
|
print(" 1. Tester avec des workflows réels")
|
|
print(" 2. Améliorer le matching (Phase 4)")
|
|
print(" 3. Optimiser les performances (Phase 5)")
|
|
print(" 4. Créer des outils utilisateur (Phase 6)")
|
|
|
|
print("\n" + "="*70)
|
|
sys.exit(0)
|