# Analyse des différences entre main.py et main_llama.py Ce document analyse les raisons pour lesquelles le tri d'images fonctionne différemment entre les implémentations utilisant Mistral (via `main.py`) et Llama (via `main_llama.py`). ## Résumé du problème 1. Avec `main_llama.py`, seulement 2 des 4 images uniques sont analysées, bien que toutes soient détectées au niveau du log. 2. Avec `main.py` (orchestrateur standard), toutes les 4 images uniques sont correctement analysées. ## Différences identifiées ### 1. Sauvegarde des résultats et ordre des opérations **Problème principal :** Dans `main_llama.py`, la fonction de sauvegarde intercepte potentiellement les analyses avant qu'elles ne soient terminées en créant un nouveau fichier de résultats entre les traitements d'images. ``` # Dans main_llama.py (logs observés) AgentImageSorter: Évaluation de image.png Décision: Image image.png non pertinente Données sauvegardées dans [...] (1 entrées) # ← Sauvegarde intermédiaire Version texte générée AgentImageSorter: Évaluation de image_145435.png # ← Les analyses continuent ``` **Comparaison :** Dans l'implémentation de Mistral via `main.py`, la sauvegarde est réalisée à la fin, après toutes les analyses. ### 2. Comportement de `sauvegarder_donnees()` **Dans pipeline_logger.py :** ```python # Ajouter les nouvelles données if isinstance(data, list): existing_data.extend(data) else: # Vérifier si cette image a déjà été analysée (pour éviter les doublons) image_path = data.get("metadata", {}).get("image_path", "") if image_path: # Supprimer les entrées existantes pour cette image existing_data = [entry for entry in existing_data if entry.get("metadata", {}).get("image_path", "") != image_path] ``` Cette fonction supprime les entrées existantes pour une image avant d'ajouter la nouvelle, mais ne charge pas correctement l'état complet si le fichier est recréé à chaque appel. ### 3. Différence d'orchestration **Orchestrator.py (main.py) :** - Collecte toutes les images - Effectue la déduplication - Trie toutes les images dans une boucle unique - Sauvegarde les résultats une seule fois à la fin **OrchestratorLlamaVision.py (main_llama.py) :** - Collecte toutes les images - Effectue la déduplication - Traite chaque image individuellement avec sauvegarde immédiate - Ne semble pas gérer correctement l'accumulation des résultats entre les sauvegardes ### 4. Classification des images **Avec Pixtral (via main.py) :** - 2 images classées comme pertinentes (captures d'écran) - 2 images classées comme non pertinentes (logos) **Avec Llama (via main_llama.py) :** - Toutes les images sont classées comme non pertinentes - Même après modifications du prompt, Llama semble avoir une interprétation différente des images ## Solution recommandée 1. **Modifier l'orchestrateur de Llama** pour accumuler tous les résultats en mémoire avant de les sauvegarder une seule fois à la fin, comme dans l'implémentation standard. 2. **Restructurer la fonction `sauvegarder_donnees()`** pour qu'elle gère mieux les sauvegardes successives. 3. **Améliorer la gestion du contexte** pour s'assurer que les images en français sont correctement interprétées par Llama. 4. **Utiliser le modèle Pixtral** pour le tri d'images si possible, car il semble avoir une meilleure interprétation des captures d'écran techniques.