llm_ticket3/test_corrections/analyse_differences.md
2025-04-23 11:27:45 +02:00

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

  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 :

# 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.