Initial commit

This commit is contained in:
Dom
2026-03-05 00:20:25 +01:00
commit dcd4de9945
1954 changed files with 669380 additions and 0 deletions

387
checkpoint_mode_complet.py Executable file
View 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)