- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
105 lines
3.3 KiB
Python
Executable File
105 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Test rapide pour valider Phase A (tests) + Phase B (GraphBuilder/NodeMatcher)."""
|
|
import sys
|
|
sys.path.insert(0, '.')
|
|
|
|
print("=" * 70)
|
|
print("TEST PHASE A + B - RPA Vision V3")
|
|
print("=" * 70)
|
|
|
|
# Test 1: FusionEngine
|
|
print("\n[1/5] Test FusionEngine...")
|
|
try:
|
|
from core.embedding.fusion_engine import FusionEngine
|
|
import numpy as np
|
|
|
|
engine = FusionEngine()
|
|
embeddings = {
|
|
'image': np.random.randn(512),
|
|
'text': np.random.randn(512)
|
|
}
|
|
fused = engine.fuse(embeddings)
|
|
norm = np.linalg.norm(fused)
|
|
|
|
assert abs(norm - 1.0) < 1e-5, f"Norm should be 1.0, got {norm}"
|
|
assert sum(engine.config.weights.values()) >= 0.99, "Weights should sum to ~1.0"
|
|
print("✓ FusionEngine OK - Property 17 validated")
|
|
except Exception as e:
|
|
print(f"✗ FusionEngine FAILED: {e}")
|
|
sys.exit(1)
|
|
|
|
# Test 2: FAISSManager
|
|
print("\n[2/5] Test FAISSManager...")
|
|
try:
|
|
from core.embedding.faiss_manager import FAISSManager
|
|
|
|
manager = FAISSManager(dimensions=512)
|
|
|
|
# Ajouter des embeddings
|
|
for i in range(10):
|
|
vec = np.random.randn(512).astype(np.float32)
|
|
vec = vec / np.linalg.norm(vec)
|
|
manager.add_embedding(f'emb_{i}', vec, {'id': i})
|
|
|
|
assert manager.index.ntotal == 10, "Should have 10 embeddings"
|
|
assert len(manager.metadata_store) == 10, "Should have 10 metadata entries"
|
|
print("✓ FAISSManager OK - Property 11 validated")
|
|
except Exception as e:
|
|
print(f"✗ FAISSManager FAILED: {e}")
|
|
sys.exit(1)
|
|
|
|
# Test 3: GraphBuilder
|
|
print("\n[3/5] Test GraphBuilder...")
|
|
try:
|
|
from core.graph.graph_builder import GraphBuilder
|
|
|
|
builder = GraphBuilder(min_pattern_repetitions=2)
|
|
|
|
# Test simple d'initialisation
|
|
assert builder.min_pattern_repetitions == 2
|
|
assert builder.clustering_eps == 0.15
|
|
print("✓ GraphBuilder OK - Phase 5 started")
|
|
except Exception as e:
|
|
print(f"✗ GraphBuilder FAILED: {e}")
|
|
sys.exit(1)
|
|
|
|
# Test 4: NodeMatcher
|
|
print("\n[4/5] Test NodeMatcher...")
|
|
try:
|
|
from core.graph.node_matcher import NodeMatcher
|
|
|
|
matcher = NodeMatcher(similarity_threshold=0.85)
|
|
|
|
# Test simple d'initialisation
|
|
assert matcher.similarity_threshold == 0.85
|
|
print("✓ NodeMatcher OK - Phase 5 started")
|
|
except Exception as e:
|
|
print(f"✗ NodeMatcher FAILED: {e}")
|
|
sys.exit(1)
|
|
|
|
# Test 5: Intégration
|
|
print("\n[5/5] Test Intégration...")
|
|
try:
|
|
# Test que tous les composants peuvent travailler ensemble
|
|
from core.embedding.state_embedding_builder import StateEmbeddingBuilder
|
|
|
|
builder_emb = StateEmbeddingBuilder()
|
|
|
|
# Vérifier que le builder est initialisé avec CLIP
|
|
assert builder_emb.clip_embedder is not None
|
|
print("✓ Intégration OK - CLIP embedder disponible")
|
|
except Exception as e:
|
|
print(f"✗ Intégration FAILED: {e}")
|
|
sys.exit(1)
|
|
|
|
print("\n" + "=" * 70)
|
|
print("✓ TOUS LES TESTS PASSENT")
|
|
print("=" * 70)
|
|
print("\nRésumé:")
|
|
print(" ✓ Phase 2: Tests property-based (FusionEngine, FAISSManager)")
|
|
print(" ✓ Phase 5: GraphBuilder et NodeMatcher implémentés")
|
|
print("\nProchaines étapes:")
|
|
print(" - Compléter tests unitaires avec pytest")
|
|
print(" - Intégrer CLIP réel dans StateEmbeddingBuilder")
|
|
print(" - Implémenter construction d'edges dans GraphBuilder")
|