Files
rpa_vision_v3/.kiro/specs/faiss-rebuild-propre/tasks.md
Dom a7de6a488b feat: replay E2E fonctionnel — 25/25 actions, 0 retries, SomEngine via serveur
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>
2026-03-31 14:04:41 +02:00

179 lines
7.5 KiB
Markdown

# 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
- [x] 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_trained` selon 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
- [ ]* 1.1 Écrire test property pour clear() reset complet
- **Property 1: Clear Operation Completeness**
- **Validates: Requirements 1.2, 1.3, 1.4, 1.5**
- [x] 2. Implémenter FAISSManager.reindex() pour reconstruction propre ✅
- [x] 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
- [x] 2.2 Ajouter force training IVF pour petits volumes ✅
- Vérifier si `index_type == "IVF"` et `force_train_ivf == True`
- Appeler `_train_ivf_index()` si `not is_trained` et `training_vectors` non vide
- _Requirements: 2.3_
- **FAIT:** Force training IVF implémenté
- [x] 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
- [ ]* 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**
- [x] 3. Implémenter extraction de vecteurs multi-version dans WorkflowPipeline ✅
- [x] 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
- [ ]* 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**
- [x] 4. Refactoriser WorkflowPipeline._index_workflow_embeddings() ✅
- [x] 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
- [x] 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
- [x] 4.3 Gérer cas où aucun vecteur valide trouvé ✅
- Vérifier si `items` est vide
- Logger warning approprié
- _Requirements: 4.5_
- **FAIT:** Gestion gracieuse des cas sans vecteurs
- [ ]* 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()` si `post_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_
- [ ] 6.3 Implémenter protection contre triggers excessifs
- Ajouter flag `_rebuild_pending` pour éviter rebuilds multiples
- Ne pas trigger sur chaque frame update
- _Requirements: 5.3_
- [ ] 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**
- [x] 7. Créer suite de tests complète ✅
- [x] 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
- [ ]* 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
- [x] 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
- [x] 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
- [ ] 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