6.2 KiB
📊 État des Données et Solutions
🔍 Diagnostic Effectué
✅ Ce qui fonctionne
-
105 tâches créées dans
data/user_profiles/- Chaque tâche a un
metadata.json - Chaque tâche a un
signatures.pkl - Les embeddings CLIP sont présents dans les signatures
- Chaque tâche a un
-
Logs fonctionnels
- 6 fichiers de logs chiffrés (1 MB total)
- Logs quotidiens depuis le 13/11
-
Capture d'événements
- Screenshots capturés en mémoire
- Embeddings générés avec CLIP
- Patterns détectés correctement
❌ Ce qui manque
-
Index FAISS non créé
data/faiss_index/embeddings.index❌ Absentdata/faiss_index/metadata.pkl❌ Absent- Raison :
embeddings_manager.save_index()n'est jamais appelé
-
Screenshots non sauvegardés sur disque
- Pas de dossier
screenshots/dans les tâches - Raison : Les screenshots restent en mémoire uniquement
- Pas de dossier
🔧 Solutions
Solution 1 : Reconstruire l'index FAISS
Les embeddings existent dans les signatures.pkl, on peut reconstruire l'index :
python3 rebuild_faiss_index.py
Ce script va :
- ✅ Parcourir toutes les tâches
- ✅ Extraire les embeddings des signatures
- ✅ Créer l'index FAISS
- ✅ Sauvegarder
embeddings.indexetmetadata.pkl - ✅ Tester la recherche
Résultat attendu :
- Index FAISS créé avec ~315 embeddings (105 tâches × 3 actions)
- Recherche de similarité fonctionnelle
- Prêt pour le rejeu intelligent
Solution 2 : Sauvegarder les screenshots (optionnel)
Les screenshots ne sont pas strictement nécessaires car :
- ✅ Les embeddings CLIP capturent l'information visuelle
- ✅ Le rejeu utilise les embeddings, pas les images brutes
Mais si tu veux les sauvegarder pour debug/visualisation :
Modifier learning_manager.py :
def _save_task(self, task: TaskProfile):
"""Sauvegarde une tâche sur disque."""
import json
import pickle
from pathlib import Path
from PIL import Image
task_dir = self.profiles_path / task.task_id
task_dir.mkdir(parents=True, exist_ok=True)
# Créer le dossier screenshots
screenshots_dir = task_dir / "screenshots"
screenshots_dir.mkdir(exist_ok=True)
# Sauvegarder les métadonnées
metadata = {
"task_id": task.task_id,
"task_name": task.task_name,
"window_whitelist": task.window_whitelist,
"observation_count": task.observation_count,
"mode": task.mode,
"confidence_score": task.confidence_score
}
with open(task_dir / "metadata.json", "w") as f:
json.dump(metadata, f, indent=2)
# Sauvegarder les signatures ET screenshots
if "signatures" in task.metadata:
signatures = task.metadata["signatures"]
# Sauvegarder les screenshots séparément
for i, sig in enumerate(signatures):
if "screenshot" in sig and sig["screenshot"] is not None:
screenshot = sig["screenshot"]
screenshot_path = screenshots_dir / f"action_{i}.png"
# Convertir numpy array en image PIL si nécessaire
if isinstance(screenshot, np.ndarray):
screenshot = Image.fromarray(screenshot)
screenshot.save(screenshot_path)
# Remplacer le screenshot par le chemin dans la signature
sig["screenshot_path"] = str(screenshot_path)
del sig["screenshot"] # Libérer la mémoire
# Sauvegarder les signatures (sans les screenshots en mémoire)
with open(task_dir / "signatures.pkl", "wb") as f:
pickle.dump(signatures, f)
Solution 3 : Appeler save_index() automatiquement
Modifier orchestrator.py ou event_capture.py :
# Après la création d'une tâche
task = self.learning_manager.create_task_from_signatures(...)
# Sauvegarder l'index FAISS
self.embeddings_manager.save_index()
Ou ajouter dans learning_manager.py :
def _save_task(self, task: TaskProfile):
# ... code existant ...
# Sauvegarder l'index FAISS après chaque tâche
if hasattr(self, 'embeddings_manager'):
self.embeddings_manager.save_index()
📊 Impact sur le Système
Avec l'index FAISS reconstruit :
✅ Recherche de similarité fonctionnelle ✅ Suggestions d'actions possibles ✅ Rejeu intelligent amélioré ✅ Performance optimisée (recherche rapide)
Sans les screenshots sur disque :
⚠️ Pas d'impact majeur car :
- Les embeddings CLIP contiennent l'information visuelle
- Le rejeu utilise les embeddings pour localiser les éléments
- Les screenshots en mémoire suffisent pendant la capture
💡 Recommandation : Sauvegarder les screenshots uniquement pour :
- Debug et visualisation
- Ré-entraînement des modèles
- Audit et traçabilité
🚀 Actions Recommandées
Priorité 1 : Reconstruire l'index FAISS ⭐⭐⭐
python3 rebuild_faiss_index.py
Temps : ~30 secondes
Impact : Critique pour le rejeu intelligent
Priorité 2 : Ajouter save_index() automatique ⭐⭐
Modifier le code pour appeler save_index() après chaque tâche créée.
Temps : 5 minutes
Impact : Évite de devoir reconstruire l'index
Priorité 3 : Sauvegarder les screenshots ⭐
Optionnel, utile pour debug.
Temps : 15 minutes
Impact : Faible (nice to have)
📝 Résumé
| Élément | État | Solution | Priorité |
|---|---|---|---|
| Embeddings | ✅ Présents | Aucune | - |
| Index FAISS | ❌ Manquant | rebuild_faiss_index.py |
⭐⭐⭐ |
| Screenshots | ⚠️ En mémoire | Modifier _save_task() |
⭐ |
| Logs | ✅ Fonctionnels | Aucune | - |
| Tâches | ✅ Sauvegardées | Aucune | - |
🎯 Conclusion
Le système fonctionne mais l'index FAISS n'a jamais été créé. C'est facile à corriger :
- Court terme : Exécuter
rebuild_faiss_index.pypour créer l'index - Moyen terme : Modifier le code pour appeler
save_index()automatiquement - Long terme : Ajouter la sauvegarde des screenshots si nécessaire
Le rejeu intelligent fonctionnera mieux avec l'index FAISS ! 🚀