- 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>
9.4 KiB
🔍 Diagnostic - Workflows et Performance FAISS
Date: 8 janvier 2026 - 00:15 Problèmes rapportés par l'utilisateur :
- ❌ Workflows : 8 sessions traitées mais seulement 2 workflows (démo) visibles
- ❌ Performance : Onglet affiche 0 pour FAISS, embeddings, temps moyen
🎯 Problème 1 - FAISS Non Initialisé (Performance à 0)
Cause Racine
Fichier : /opt/rpa_vision_v3/server/processing_pipeline.py
Ligne : 86
Code actuel (incorrect) :
self.faiss = FAISSManager(dimension=512) # ← dimension au singulier
Code attendu par FAISSManager :
def __init__(self,
dimensions: int, # ← dimensions au pluriel
index_type: str = "Flat",
metric: str = "cosine",
...):
Erreur dans les Logs
2026-01-07 22:09:17 [WARNING] processing_pipeline: Erreur init embeddings:
FAISSManager.__init__() got an unexpected keyword argument 'dimension'
Impact
- L'initialisation de FAISSManager échoue
self.embeddings_availabledevientFalse- La méthode
_generate_embeddings()est sautée - Aucun embedding n'est généré ni indexé dans FAISS
- Le dashboard affiche 0 partout dans "Performance"
Solution
Corriger la typo :
# AVANT
self.faiss = FAISSManager(dimension=512)
# APRÈS
self.faiss = FAISSManager(dimensions=512)
Complexité : Triviale (1 caractère à ajouter) Impact : Les futures sessions auront leurs embeddings générés et indexés
🎯 Problème 2 - Workflows Non Sauvegardés
Cause Racine
Fichier : /opt/rpa_vision_v3/core/graph/graph_builder.py
Lignes : 539-545
Problème : Incompatibilité entre GraphBuilder et la nouvelle définition de ScreenTemplate
Code GraphBuilder (ancien, incompatible)
def _build_screen_template(self, states, prototype_embedding):
return ScreenTemplate(
embedding_prototype=prototype_embedding.tolist(), # ← N'existe plus
similarity_threshold=0.85, # ← N'existe plus
window_title_pattern=None, # ← N'existe plus
required_text_patterns=[], # ← N'existe plus
required_ui_elements=[], # ← N'existe plus
)
Définition Actuelle de ScreenTemplate
@dataclass
class ScreenTemplate:
window: WindowConstraint # ← Nouveau
text: TextConstraint # ← Nouveau
ui: UIConstraint # ← Nouveau
embedding: EmbeddingPrototype # ← Nouveau (pas embedding_prototype)
Définition de EmbeddingPrototype
@dataclass
class EmbeddingPrototype:
provider: str # e.g., "openclip_ViT-B-32"
vector_id: str # Chemin vers .npy du prototype
min_cosine_similarity: float # Seuil de similarité
sample_count: int # Nombre d'échantillons utilisés
Erreurs dans les Logs
2026-01-07 22:09:41 [ERROR] processing_pipeline:
Erreur construction workflow: ScreenTemplate.__init__() got an unexpected
keyword argument 'embedding_prototype'
2026-01-07 22:03:03 [ERROR] processing_pipeline:
Erreur construction workflow: 'str' object does not support item assignment
Impact
- GraphBuilder tente de construire un workflow
- Échoue à la création du ScreenTemplate (incompatibilité API)
workflow_createdreste àFalse- Aucun fichier workflow n'est sauvegardé
- L'utilisateur ne voit que les 2 workflows démo du 2 janvier
Solution
Réécrire _build_screen_template() pour utiliser la nouvelle API :
def _build_screen_template(self, states, prototype_embedding, cluster_id):
"""
Construire ScreenTemplate compatible avec nouvelle API
"""
# Sauvegarder le prototype embedding
prototype_path = f"data/training/prototypes/cluster_{cluster_id}.npy"
np.save(prototype_path, prototype_embedding)
# Créer EmbeddingPrototype
embedding_proto = EmbeddingPrototype(
provider="openclip_ViT-B-32",
vector_id=prototype_path,
min_cosine_similarity=0.85,
sample_count=len(states)
)
# Extraire contraintes depuis les états du cluster
# TODO: Analyser les states pour extraire window_title, textes, etc.
# Créer les contraintes (basiques pour l'instant)
window_constraint = WindowConstraint(
title_contains=None, # TODO: Extraire du cluster
process_name=None
)
text_constraint = TextConstraint(
required_texts=[], # TODO: Extraire patterns communs
forbidden_texts=[]
)
ui_constraint = UIConstraint(
required_roles=[],
required_types=[],
min_element_count=0
)
# Créer ScreenTemplate avec nouvelle API
return ScreenTemplate(
window=window_constraint,
text=text_constraint,
ui=ui_constraint,
embedding=embedding_proto
)
Complexité : Moyenne (refactoring complet de la méthode) Impact : Les futures sessions pourront créer de vrais workflows
📊 État Actuel du Système
Workflows
ls /opt/rpa_vision_v3/data/training/workflows/
# Output: demo_calculator.json demo_notepad.json
- ✅ 2 workflows démo (créés le 2 janvier)
- ❌ 0 workflows réels (GraphBuilder échoue)
Embeddings/FAISS
ls /opt/rpa_vision_v3/data/training/embeddings/
# Output: (vide)
ls /opt/rpa_vision_v3/data/training/faiss_index/
# Output: (vide)
- ❌ Aucun embedding généré (FAISS non initialisé)
- ❌ Aucun index FAISS créé
Screen States (OK)
find /opt/rpa_vision_v3/data/training/screen_states -name "*.json" | wc -l
# Output: 371
- ✅ 371 screen states créés et sauvegardés
🔧 Plan de Correction
Option 1 - Correction FAISS Seulement (RAPIDE)
Temps estimé : 5 minutes Complexité : Triviale
Actions :
- Corriger typo
dimension→dimensionsdans processing_pipeline.py - Redémarrer le worker
- Capturer une nouvelle session de test
- Vérifier que les embeddings sont générés
Résultat :
- ✅ Performance FAISS affichera le nombre réel d'embeddings
- ✅ Recherche par similarité fonctionnelle
- ❌ Workflows toujours non créés (nécessite Option 2)
Option 2 - Correction FAISS + Workflows (COMPLET)
Temps estimé : 30-45 minutes Complexité : Moyenne
Actions :
- Corriger typo FAISS (comme Option 1)
- Réécrire
_build_screen_template()dans graph_builder.py - Créer dossier pour prototypes :
data/training/prototypes/ - Redémarrer le worker
- Capturer une nouvelle session de test
- Vérifier création du workflow
Résultat :
- ✅ Performance FAISS fonctionnelle
- ✅ Workflows réels créés et visibles
- ✅ Système complet et production-ready
Option 3 - Reprocesser les Sessions Existantes (BONUS)
Prérequis : Option 1 ou 2 complétée Temps estimé : 5 minutes + temps de traitement (dépend du volume)
Actions :
- Relancer le processing_pipeline sur les 8 sessions déjà capturées
- Les screen_states existent déjà, seuls embeddings/workflows seront générés
Commande :
for session_id in sess_20260107T*; do
python3 /opt/rpa_vision_v3/server/processing_pipeline.py $session_id
done
Résultat :
- ✅ 371 embeddings générés rétroactivement
- ✅ 8 workflows créés depuis les sessions existantes
- ✅ Dashboard complet sans recapturer de nouvelles sessions
🎯 Recommandation
Pour Démo Imminente
Option 1 (FAISS seulement) + capturer 1-2 nouvelles sessions
- Rapide (10 minutes total)
- Affiche des vraies métriques Performance
- Workflows restent en démo mais c'est acceptable
Pour Production-Ready
Option 2 (FAISS + Workflows) + Option 3 (Reprocessing)
- Complet (45-60 minutes)
- Tous les bugs corrigés
- 371 embeddings + 8 workflows réels
- Système entièrement fonctionnel
📝 Fichiers à Modifier
Correction FAISS
/opt/rpa_vision_v3/server/processing_pipeline.py
Ligne 86 : dimension=512 → dimensions=512
Correction Workflows
/opt/rpa_vision_v3/core/graph/graph_builder.py
Lignes 539-545 : Réécrire _build_screen_template()
✅ Critères de Succès
Après Option 1 (FAISS)
- Logs montrent "Embeddings générés: X" (X > 0)
- Fichiers .npy créés dans
data/training/embeddings/ - Index FAISS créé dans
data/training/faiss_index/ - Dashboard Performance affiche nombre > 0
Après Option 2 (Workflows)
- Logs montrent "Workflow créé: True"
- Fichiers .json créés dans
data/training/workflows/ - Dashboard Workflows affiche > 2 workflows
- Aucune erreur "ScreenTemplate.init()"
💡 Notes Techniques
Pourquoi le Code Est Incompatible ?
Le projet a subi un refactoring architectural majeur entre :
- Version initiale : ScreenTemplate avec champs simples (embedding_prototype, similarity_threshold)
- Version actuelle : ScreenTemplate avec objets complexes (WindowConstraint, EmbeddingPrototype)
Le GraphBuilder n'a pas été mis à jour lors de ce refactoring.
Impact sur les Données Existantes
- ✅ Screen States : Format stable, pas d'impact
- ❌ Embeddings : Jamais générés, pas d'impact (rien à migrer)
- ❌ Workflows : Jamais créés, pas d'impact (rien à migrer)
Que veux-tu faire ?
- Option 1 (rapide, FAISS seulement)
- Option 2 (complet, FAISS + Workflows)
- Autre approche ?