3.4 KiB
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
- Avec
main_llama.py, seulement 2 des 4 images uniques sont analysées, bien que toutes soient détectées au niveau du log. - 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 :
# 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
-
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.
-
Restructurer la fonction
sauvegarder_donnees()pour qu'elle gère mieux les sauvegardes successives. -
Améliorer la gestion du contexte pour s'assurer que les images en français sont correctement interprétées par Llama.
-
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.