Validé sur PC Windows (DESKTOP-58D5CAC, 2560x1600) : - 8 clics résolus visuellement (1 anchor_template, 1 som_text_match, 6 som_vlm) - Score moyen 0.75, temps moyen 1.6s - Texte tapé correctement (bonjour, test word, date, email) - 0 retries, 2 actions non vérifiées (OK) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7.5 KiB
Implementation Plan: FAISS Rebuild Propre
Auteur : Dom, Alice Kiro - 22 décembre 2025
Overview
Implémentation du système FAISS Rebuild Propre pour éliminer la pollution d'index et maintenir la cohérence des prototypes d'apprentissage. L'approche est "clear + reindex complet" depuis une source canonique.
Tasks
-
1. Améliorer FAISSManager.clear() pour reset complet de l'état IVF ✅
- Modifier
core/embedding/faiss_manager.py - Ajouter reset de
training_vectors.clear() - Définir
is_trainedselon le type d'index (Flat=True, IVF=False) - Reset
next_idà 0 - Requirements: 1.2, 1.3, 1.4, 1.5
- FAIT: Méthode clear() améliorée avec reset complet IVF training state
- Modifier
-
* 1.1 Écrire test property pour clear() reset complet
- Property 1: Clear Operation Completeness
- Validates: Requirements 1.2, 1.3, 1.4, 1.5
-
2. Implémenter FAISSManager.reindex() pour reconstruction propre ✅
-
2.1 Créer méthode
reindex(items, force_train_ivf=True)✅- Appeler
self.clear()au début - Itérer sur items et appeler
add_embedding()pour chaque vecteur valide - Compter les items traités
- Requirements: 2.1, 2.2, 2.4, 2.5
- FAIT: Méthode reindex() implémentée avec clear + add_embedding
- Appeler
-
2.2 Ajouter force training IVF pour petits volumes ✅
- Vérifier si
index_type == "IVF"etforce_train_ivf == True - Appeler
_train_ivf_index()sinot is_trainedettraining_vectorsnon vide - Requirements: 2.3
- FAIT: Force training IVF implémenté
- Vérifier si
-
2.3 Retourner le nombre d'items indexés ✅
- Return
countà la fin de la méthode - Requirements: 2.4
- FAIT: Retour du count d'items indexés
- Return
-
-
* 2.4 Écrire tests property pour reindex()
- Property 3: Reindex Consistency
- Property 4: Invalid Vector Handling
- Property 5: IVF Training Consistency
- Validates: Requirements 2.1, 2.2, 2.3, 2.4, 2.5
-
3. Implémenter extraction de vecteurs multi-version dans WorkflowPipeline ✅
- 3.1 Créer méthode
_extract_node_vector(node)✅- Vérifier
template.embedding_prototype(liste) - Fallback vers
embedding.vector_id(fichier) - Fallback vers
screen_template.embedding_prototype_path(legacy) - Retourner None si aucun vecteur trouvé
- Gérer exceptions avec try/catch
- Requirements: 3.1, 3.2, 3.3, 3.4, 3.5
- FAIT: Méthode _extract_node_vector() avec support multi-version
- Vérifier
- 3.1 Créer méthode
-
* 3.2 Écrire tests property pour extraction multi-version
- Property 6: Vector Extraction Multi-Format
- Property 7: Vector Extraction Graceful Failure
- Validates: Requirements 3.1, 3.2, 3.3, 3.4, 3.5
-
4. Refactoriser WorkflowPipeline._index_workflow_embeddings() ✅
-
4.1 Construire liste canonique d'items ✅
- Itérer sur
workflow.nodes - Appeler
_extract_node_vector()pour chaque node - Construire tuple
(node_id, vector, metadata)avec workflow_id et node_id - Requirements: 4.1, 4.2
- FAIT: Construction liste canonique avec métadonnées enrichies
- Itérer sur
-
4.2 Appeler reindex() avec force_train_ivf=True ✅
n = self.faiss_manager.reindex(items, force_train_ivf=True)- Logger le nombre d'items indexés avec workflow_id
- Requirements: 4.3, 4.4
- FAIT: Appel reindex() avec force training IVF
-
4.3 Gérer cas où aucun vecteur valide trouvé ✅
- Vérifier si
itemsest vide - Logger warning approprié
- Requirements: 4.5
- FAIT: Gestion gracieuse des cas sans vecteurs
- Vérifier si
-
-
* 4.4 Écrire tests property pour indexation workflow
- Property 8: Workflow Indexing Completeness
- Property 9: IVF Training Force in Pipeline
- Validates: Requirements 4.1, 4.2, 4.3
-
5. Checkpoint - Valider fonctionnalités de base
- Exécuter tous les tests unitaires et property
- Vérifier que clear() et reindex() fonctionnent correctement
- Valider extraction multi-version
- Demander feedback utilisateur si questions
-
6. Implémenter logique de déclenchement de rebuild
-
6.1 Ajouter trigger après validation de prototype
- Dans le code de validation post-conditions
- Appeler
trigger_faiss_rebuild()sipost_conditions_ok and prototype_updated - Requirements: 5.1
-
6.2 Ajouter trigger en fin de session batch
- Dans
end_learning_session() - Appeler
trigger_faiss_rebuild() - Requirements: 5.2
- Dans
-
6.3 Implémenter protection contre triggers excessifs
- Ajouter flag
_rebuild_pendingpour éviter rebuilds multiples - Ne pas trigger sur chaque frame update
- Requirements: 5.3
- Ajouter flag
-
6.4 Ajouter logging des opérations de rebuild
- Logger début de rebuild avec timestamp
- Logger fin de rebuild avec durée et nombre d'items
- Requirements: 5.4
-
6.5 Gérer échecs de rebuild gracieusement
- Try/catch autour de reindex()
- Maintenir index existant en cas d'échec
- Logger erreur avec détails
- Requirements: 5.5
-
-
* 6.6 Écrire tests property pour trigger logic
- Property 10: Trigger Logic Validation
- Property 11: Batch Session Trigger
- Property 12: Frame Update Restraint
- Property 13: Rebuild Failure Resilience
- Validates: Requirements 5.1, 5.2, 5.3, 5.5
-
7. Créer suite de tests complète ✅
- 7.1 Créer
tests/unit/test_faiss_reindex.py✅- Test
test_faiss_clear_resets_state() - Test
test_faiss_reindex_flat_removes_old_entries() - Test
test_faiss_reindex_ivf_trains_even_small() - Test
test_extract_node_vector_multi_version() - Requirements: 6.1, 6.2, 6.3, 6.4, 6.5
- FAIT: Suite de tests unitaires complète créée
- Test
- 7.1 Créer
-
* 7.2 Écrire tests property pour validation complète
- Property 14: Flat Index Reindex Cleanup
- Property 15: IVF Small Dataset Training
- Property 16: Metadata Consistency After Reindex
- Property 17: Search Accuracy After Reindex
- Property 18: Index State Validation
- Validates: Requirements 6.1, 6.2, 6.3, 6.4, 6.5
-
* 7.3 Créer tests d'intégration
- Test
test_workflow_pipeline_reindex_integration() - Test
test_reindex_performance_large_dataset() - Valider end-to-end avec workflow réel
- Test
-
8. Créer script utilitaire rebuild_faiss_simple.py ✅
- Créer script à la racine du projet
- Charger tous les prototypes depuis storage
- Appeler reindex() avec tous les prototypes
- Logger résultats et statistiques
- Ajouter options CLI (--dry-run, --verbose, --index-type)
- FAIT: Script utilitaire complet avec options CLI
-
9. Créer documentation utilisateur ✅
- Créer
docs/guides/FAISS_REBUILD_GUIDE.md - Documenter quand déclencher un rebuild
- Documenter comment utiliser rebuild_faiss_simple.py
- Ajouter exemples d'utilisation
- Documenter troubleshooting
- FAIT: Documentation complète créée
- Créer
-
10. Checkpoint Final - Validation complète
- Exécuter tous les tests (unitaires, property, intégration)
- Valider performance sur gros datasets
- Tester script rebuild_faiss_simple.py
- Valider documentation
- Demander validation utilisateur finale
Notes
- Les tâches marquées avec
*sont optionnelles et peuvent être sautées pour un MVP plus rapide - Chaque tâche référence les requirements spécifiques pour la traçabilité
- Les checkpoints assurent une validation incrémentale
- Les tests property valident les propriétés de correctness universelles
- Les tests unitaires valident des exemples spécifiques et cas limites