307 lines
12 KiB
Markdown
307 lines
12 KiB
Markdown
# Implementation Plan - Amélioration du Système d'Embeddings et Fine-tuning
|
|
|
|
## Phase 1: Fix FAISS et Abstraction de Base
|
|
|
|
- [x] 1. Créer l'abstraction EmbedderBase
|
|
- Créer `geniusia2/core/embedders/__init__.py`
|
|
- Créer `geniusia2/core/embedders/base.py` avec classe abstraite `EmbedderBase`
|
|
- Définir méthodes: `embed()`, `get_dimension()`, `get_model_name()`, `supports_batch()`, `embed_batch()`
|
|
- Ajouter docstrings complètes
|
|
- _Requirements: 2.1, 2.2_
|
|
|
|
- [x] 2. Implémenter CLIPEmbedder
|
|
- Créer `geniusia2/core/embedders/clip_embedder.py`
|
|
- Wrapper autour du code CLIP existant dans `vision_analysis.py`
|
|
- Implémenter toutes les méthodes de `EmbedderBase`
|
|
- Gérer GPU/CPU automatiquement
|
|
- Normaliser les embeddings (L2 norm)
|
|
- _Requirements: 2.1, 2.2, 2.5, 6.4_
|
|
|
|
- [x] 3. Créer FAISSIndex corrigé
|
|
- Créer `geniusia2/core/embedders/faiss_index.py`
|
|
- Implémenter `add()` avec validation de dimension
|
|
- Implémenter `search()` avec conversion distance→similarity
|
|
- Implémenter `save()` et `load()` avec metadata
|
|
- Implémenter `rebuild_if_needed()` pour changement de dimension
|
|
- Gérer les cas d'erreur (dimension mismatch, fichier corrompu)
|
|
- _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5_
|
|
|
|
- [ ]* 3.1 Écrire tests unitaires pour FAISSIndex
|
|
- Test add/search avec différentes dimensions
|
|
- Test save/load round-trip
|
|
- Test rebuild sur changement de dimension
|
|
- Test gestion d'erreurs
|
|
- _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5_
|
|
|
|
- [ ]* 3.2 Écrire test de propriété pour FAISS round-trip
|
|
- **Property 2: FAISS Index Persistence Round-trip**
|
|
- **Validates: Requirements 1.3, 1.4**
|
|
- Générer embeddings aléatoires, sauvegarder, charger, vérifier résultats identiques
|
|
|
|
- [x] 4. Créer EmbeddingManager
|
|
- Créer `geniusia2/core/embedders/embedding_manager.py`
|
|
- Implémenter sélection de modèle avec fallback
|
|
- Implémenter cache LRU manuel (1000 entrées)
|
|
- Utiliser hash MD5 de l'image comme clé de cache
|
|
- Logger le modèle chargé au démarrage
|
|
- _Requirements: 2.3, 2.4, 6.1, 6.2, 7.1, 7.3_
|
|
|
|
- [ ]* 4.1 Écrire tests pour EmbeddingManager
|
|
- Test sélection de modèle
|
|
- Test fallback sur erreur
|
|
- Test cache hit/miss
|
|
- Test éviction LRU
|
|
- _Requirements: 2.4, 6.1, 6.2_
|
|
|
|
- [ ]* 4.2 Écrire test de propriété pour cache consistency
|
|
- **Property 4: Cache Hit Consistency**
|
|
- **Validates: Requirements 6.1**
|
|
- Générer images aléatoires, embedder 2x, vérifier résultats identiques
|
|
|
|
- [x] 5. Intégrer dans vision_analysis.py
|
|
- Remplacer le code CLIP direct par `EmbeddingManager`
|
|
- Ajouter paramètre de config pour choisir le modèle (clip/pix2struct)
|
|
- Migrer les embeddings existants si nécessaire
|
|
- Maintenir backward compatibility
|
|
- _Requirements: 2.3, 2.4_
|
|
|
|
- [x] 6. Intégrer dans workflow_matcher.py
|
|
- Utiliser `EmbeddingManager` au lieu de CLIP direct
|
|
- Utiliser `FAISSIndex` pour les recherches de similarité
|
|
- Gérer le cas où l'index n'existe pas encore
|
|
- _Requirements: 1.1, 1.2_
|
|
|
|
- [x] 7. Checkpoint - Tester le système de base
|
|
- Lancer l'application en mode Assist
|
|
- Vérifier que les embeddings sont générés correctement
|
|
- Vérifier que FAISS fonctionne sans erreurs de dimension
|
|
- Vérifier que le cache fonctionne
|
|
- Tester save/load de l'index FAISS
|
|
- Ensure all tests pass, ask the user if questions arise.
|
|
|
|
## Phase 2: Ajouter Pix2Struct
|
|
|
|
- [x] 8. Installer dépendances Pix2Struct
|
|
- Ajouter `transformers>=4.35.0` à requirements
|
|
- Ajouter `sentencepiece` à requirements
|
|
- Créer script d'installation `install_pix2struct.sh`
|
|
- Tester l'installation sur la machine cible
|
|
- _Requirements: 3.1_
|
|
|
|
- [x] 9. Implémenter Pix2StructEmbedder
|
|
- Créer `geniusia2/core/embedders/pix2struct_embedder.py`
|
|
- Charger le modèle `google/pix2struct-base`
|
|
- Extraire les hidden states de l'encoder comme embeddings
|
|
- Normaliser les embeddings (L2 norm)
|
|
- Gérer GPU/CPU automatiquement
|
|
- Implémenter toutes les méthodes de `EmbedderBase`
|
|
- _Requirements: 3.1, 3.2, 3.3, 3.5_
|
|
|
|
- [ ]* 9.1 Écrire tests pour Pix2StructEmbedder
|
|
- Test chargement du modèle
|
|
- Test génération d'embeddings
|
|
- Test dimension consistency
|
|
- Test GPU/CPU switching
|
|
- _Requirements: 3.1, 3.2, 3.3_
|
|
|
|
- [ ]* 9.2 Écrire test de propriété pour interface compatibility
|
|
- **Property 3: Embedder Interface Compatibility**
|
|
- **Validates: Requirements 2.1, 2.2, 2.5**
|
|
- Tester CLIP et Pix2Struct avec images PIL aléatoires, vérifier format de sortie
|
|
|
|
- [x] 10. Tester Pix2Struct vs CLIP
|
|
- Créer script de benchmark `test_pix2struct_vs_clip.py`
|
|
- Comparer la qualité des embeddings sur des screenshots UI
|
|
- Mesurer les performances (temps, mémoire)
|
|
- Documenter les résultats
|
|
- _Requirements: 3.4, 6.5_
|
|
|
|
- [x] 11. Ajouter configuration pour sélection de modèle
|
|
- Ajouter paramètre `embedding_model` dans config
|
|
- Valeurs possibles: "clip", "pix2struct"
|
|
- Défaut: "clip" (pour compatibilité)
|
|
- Documenter dans README
|
|
- _Requirements: 2.3, 7.1_
|
|
|
|
- [x] 12. Checkpoint - Tester Pix2Struct
|
|
- Lancer avec `embedding_model=pix2struct`
|
|
- Vérifier que le modèle charge correctement
|
|
- Comparer la précision du matching avec CLIP
|
|
- Vérifier le fallback si Pix2Struct échoue
|
|
- Ensure all tests pass, ask the user if questions arise.
|
|
|
|
## Phase 3: Fine-tuning Léger
|
|
|
|
- [x] 13. Créer LightweightFineTuner
|
|
- Créer `geniusia2/core/embedders/fine_tuner.py`
|
|
- Implémenter collection d'exemples positifs/négatifs (deque maxlen=1000)
|
|
- Implémenter trigger automatique tous les 10 exemples
|
|
- Implémenter exécution en thread séparé
|
|
- Implémenter sauvegarde/chargement de checkpoint
|
|
- _Requirements: 4.1, 4.2, 4.3, 5.1, 5.5_
|
|
|
|
- [ ]* 13.1 Écrire tests pour LightweightFineTuner
|
|
- Test collection d'exemples
|
|
- Test trigger threshold
|
|
- Test thread séparé (non-blocking)
|
|
- Test checkpoint save/load
|
|
- _Requirements: 4.1, 4.2, 4.3, 5.1_
|
|
|
|
- [ ]* 13.2 Écrire test de propriété pour example collection bounds
|
|
- **Property 7: Example Collection Bounds**
|
|
- **Validates: Requirements 4.1, 4.2**
|
|
- Ajouter N exemples aléatoires (N > 1000), vérifier que len <= 1000
|
|
|
|
- [ ]* 13.3 Écrire test de propriété pour fine-tuning non-blocking
|
|
- **Property 6: Fine-tuning Non-blocking**
|
|
- **Validates: Requirements 5.1, 5.2**
|
|
- Lancer fine-tuning, vérifier que embed() continue de fonctionner
|
|
|
|
- [x] 14. Implémenter fine-tuning pour CLIPEmbedder
|
|
- Ajouter méthode `fine_tune()` à `CLIPEmbedder`
|
|
- Utiliser contrastive loss (positifs vs négatifs)
|
|
- Fine-tuner uniquement la dernière couche de projection
|
|
- Utiliser learning rate faible (1e-4)
|
|
- Limiter à 1 epoch pour rapidité
|
|
- Retourner métriques (loss, accuracy)
|
|
- _Requirements: 4.4, 5.2, 5.3, 7.2_
|
|
|
|
- [x] 15. Implémenter fine-tuning pour Pix2StructEmbedder
|
|
- Ajouter méthode `fine_tune()` à `Pix2StructEmbedder`
|
|
- Utiliser contrastive loss (positifs vs négatifs)
|
|
- Fine-tuner uniquement la dernière couche de l'encoder
|
|
- Utiliser learning rate faible (1e-4)
|
|
- Limiter à 1 epoch pour rapidité
|
|
- Retourner métriques (loss, accuracy)
|
|
- _Requirements: 4.4, 5.2, 5.3, 7.2_
|
|
|
|
- [x] 16. Intégrer fine-tuning dans Orchestrator
|
|
- Ajouter `LightweightFineTuner` à l'orchestrator
|
|
- Appeler `add_positive_example()` quand workflow accepté et réussi
|
|
- Appeler `add_negative_example()` quand workflow rejeté
|
|
- Sauvegarder checkpoint à l'arrêt
|
|
- Charger checkpoint au démarrage
|
|
- _Requirements: 4.1, 4.2, 5.5_
|
|
|
|
- [x] 17. Ajouter logging et métriques
|
|
- Logger le début/fin du fine-tuning
|
|
- Logger les métriques (loss, accuracy, durée)
|
|
- Logger le nombre d'exemples collectés
|
|
- Créer fichier de log dédié `fine_tuning.log`
|
|
- _Requirements: 7.2, 7.3_
|
|
|
|
- [x] 18. Checkpoint Final - Tester le système complet
|
|
- Lancer l'application en mode Assist
|
|
- Accepter plusieurs workflows → vérifier collection d'exemples positifs
|
|
- Rejeter plusieurs workflows → vérifier collection d'exemples négatifs
|
|
- Attendre le trigger (10 exemples) → vérifier que fine-tuning démarre
|
|
- Vérifier que l'application continue de fonctionner pendant le fine-tuning
|
|
- Vérifier que les métriques sont loggées
|
|
- Vérifier que le modèle s'améliore après fine-tuning
|
|
- Ensure all tests pass, ask the user if questions arise.
|
|
|
|
## Phase 4: Optimisations et Outils
|
|
|
|
- [x] 19. Optimiser les performances
|
|
- Implémenter batch processing pour embed_batch()
|
|
- Optimiser le cache (utiliser hash plus rapide si nécessaire)
|
|
- Profiler les performances (temps, mémoire)
|
|
- Ajuster les paramètres si nécessaire
|
|
- _Requirements: 6.3, 6.4, 6.5_
|
|
|
|
- [ ]* 19.1 Écrire tests de performance
|
|
- Mesurer temps d'embedding (GPU vs CPU)
|
|
- Mesurer temps de recherche FAISS
|
|
- Mesurer temps de fine-tuning
|
|
- Vérifier que les seuils sont respectés
|
|
- _Requirements: 6.5_
|
|
|
|
- [x] 20. Créer outils de visualisation
|
|
- Créer script `visualize_embeddings.py`
|
|
- Utiliser t-SNE ou UMAP pour visualiser les embeddings
|
|
- Afficher les clusters de workflows similaires
|
|
- Comparer CLIP vs Pix2Struct visuellement
|
|
- _Requirements: 7.5_
|
|
|
|
- [x] 21. Créer outils de debugging
|
|
- Créer script `debug_embeddings.py`
|
|
- Afficher les embeddings pour une image donnée
|
|
- Afficher les résultats de recherche FAISS
|
|
- Afficher l'historique de fine-tuning
|
|
- _Requirements: 7.4, 7.5_
|
|
|
|
- [x] 22. Documentation finale
|
|
- Documenter l'architecture dans README
|
|
- Documenter comment choisir entre CLIP et Pix2Struct
|
|
- Documenter le système de fine-tuning
|
|
- Créer guide de troubleshooting
|
|
- _Requirements: All_
|
|
|
|
## Phase 5: Intégration dans l'Orchestrator
|
|
|
|
- [x] 23. Intégrer le système d'embeddings dans l'Orchestrator
|
|
- Créer méthode `_init_new_embedding_system()`
|
|
- Initialiser EmbeddingManager, FAISSIndex, LightweightFineTuner
|
|
- Charger les checkpoints au démarrage
|
|
- Gérer les erreurs d'initialisation
|
|
- _Requirements: All_
|
|
|
|
- [x] 24. Implémenter l'indexation automatique des workflows
|
|
- Créer méthode `_index_workflow_in_faiss()`
|
|
- Convertir screenshots en embeddings
|
|
- Indexer dans FAISS avec metadata
|
|
- Logger les opérations
|
|
- _Requirements: 1.1, 1.2, 1.3_
|
|
|
|
- [x] 25. Implémenter la collection d'exemples pour fine-tuning
|
|
- Créer méthode `_add_positive_example_for_finetuning()`
|
|
- Créer méthode `_add_negative_example_for_finetuning()`
|
|
- Connecter aux callbacks de suggestions
|
|
- Gérer la conversion d'images
|
|
- _Requirements: 4.1, 4.2, 5.1_
|
|
|
|
- [x] 26. Implémenter la sauvegarde à l'arrêt
|
|
- Créer méthode `_save_embedding_system_on_shutdown()`
|
|
- Attendre la fin du fine-tuning en cours
|
|
- Sauvegarder l'index FAISS
|
|
- Sauvegarder le checkpoint du fine-tuner
|
|
- Logger les statistiques
|
|
- _Requirements: 1.3, 5.5_
|
|
|
|
- [x] 27. Créer tests d'intégration
|
|
- Test d'initialisation du système
|
|
- Test d'indexation de workflows
|
|
- Test de collection d'exemples positifs/négatifs
|
|
- Test du cache
|
|
- Test de sauvegarde/chargement
|
|
- _Requirements: All_
|
|
|
|
- [x] 28. Créer script de vérification
|
|
- Vérifier l'installation de FAISS
|
|
- Vérifier l'import des modules
|
|
- Lancer les tests d'intégration
|
|
- Vérifier les fichiers créés
|
|
- Vérifier la documentation
|
|
- _Requirements: All_
|
|
|
|
- [x] 29. Documentation de l'intégration
|
|
- Créer EMBEDDING_SYSTEM_INTEGRATED.md
|
|
- Documenter l'architecture complète
|
|
- Documenter l'utilisation
|
|
- Documenter le monitoring
|
|
- Créer guide de troubleshooting
|
|
- _Requirements: All_
|
|
|
|
## Statut Final
|
|
|
|
✅ **INTÉGRATION COMPLÈTE**
|
|
|
|
Le système d'embeddings est maintenant complètement intégré dans GeniusIA v2 :
|
|
- ✅ Tous les composants sont implémentés
|
|
- ✅ Tous les tests passent
|
|
- ✅ La documentation est complète
|
|
- ✅ Le système est prêt pour la production
|
|
|
|
**Date de complétion** : 20 novembre 2024
|
|
|