Initial commit
This commit is contained in:
387
checkpoint_mode_complet.py
Executable file
387
checkpoint_mode_complet.py
Executable file
@@ -0,0 +1,387 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user