From f6611854f4e71a9ed0251f73427b4538346fdb58 Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Thu, 24 Apr 2025 14:50:30 +0200 Subject: [PATCH] 2404-14:50 --- ...3-2-vision-90b-instruct-q8-0_exchanges.csv | 4 +- .../T11143_mistral-large-latest_exchanges.csv | 4 + agents/llama_vision/agent_image_analyser.py | 86 ++++++++++++------- ...ort_final_mistral-large-latest_results.txt | 37 ++++++++ orchestrator_llama.py | 32 +++++-- ...a3-2-vision-90b-instruct-q8-0_results.json | 2 +- ...962ed21795c4e943fcb8cb84fd4d7465a.jpg.json | 2 +- ...20e0e112c46b4440cc938f74d10934e98.gif.json | 2 +- .../pipeline/ocr_traduction/image.png.json | 2 +- .../ocr_traduction/image_145435.png.json | 2 +- ...a3-2-vision-90b-instruct-q8-0_results.json | 10 +-- ...ma3-2-vision-90b-instruct-q8-0_results.txt | 20 +++-- ...ge_llama3-vision-90b-instruct_results.json | 8 +- reports/T11143/rapport_final_T11143.txt | 20 +++-- ...port_final_T11143_mistral-large-latest.txt | 33 +++++++ 15 files changed, 198 insertions(+), 66 deletions(-) create mode 100644 CSV/T11143/T11143_mistral-large-latest_exchanges.csv create mode 100644 csv_old/rapport_final_mistral-large-latest_results.txt create mode 100644 reports/T11143/rapport_final_T11143_mistral-large-latest.txt diff --git a/CSV/T11143/T11143_llama3-2-vision-90b-instruct-q8-0_exchanges.csv b/CSV/T11143/T11143_llama3-2-vision-90b-instruct-q8-0_exchanges.csv index a99a6b1..ad0ffb9 100644 --- a/CSV/T11143/T11143_llama3-2-vision-90b-instruct-q8-0_exchanges.csv +++ b/CSV/T11143/T11143_llama3-2-vision-90b-instruct-q8-0_exchanges.csv @@ -1,3 +1,3 @@ Émetteur,Type,Date,Contenu,Éléments visuels -Client (Victor Bollée),Question,2025-04-24,"Problème signalé avec l'accès à l'URL ""https://zk1.brg-lab.com/""",Capture d'écran de la page d'erreur (ID: 145435) -Support (Fabien Lay),Réponse,2025-04-24,"Les étapes de dépannage fournies, notamment la vérification de la connectivité réseau et du cache du navigateur","Image des paramètres réseau (image.png, id: 145453)" +Client (Victor Bollée),Question,2025-04-24,"URL d'accès au problème rapporté: ""https://zk1.brg-lab.com/""",Capture d'écran de la page d'erreur (ID: 145435) +Support (Fabien Lay),Réponse,2025-04-24,"Les étapes de dépannage fournies, notamment la vérification de la connectivité du réseau et la compensation du cache du navigateur","Image des paramètres réseau (image.png, id: 145453)" diff --git a/CSV/T11143/T11143_mistral-large-latest_exchanges.csv b/CSV/T11143/T11143_mistral-large-latest_exchanges.csv new file mode 100644 index 0000000..7167830 --- /dev/null +++ b/CSV/T11143/T11143_mistral-large-latest_exchanges.csv @@ -0,0 +1,4 @@ +ÉMETTEUR,TYPE,DATE,CONTENU,ÉLÉMENTS VISUELS +CLIENT,question,03/04/2025 08:34,"Bonjour, Je ne parviens pas à accéder à l’essai au bleu. Merci par avance pour votre. Cordialement","Essai au bleu de méthylène de méthylène (MB) - NF EN 933-9 (02-2022) - Message d'erreur : ""Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com""" +SUPPORT,réponse,03/04/2025 12:17,"Bonjour, Pouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur : https://zk1.brg-lab.com/ Voici ce que vous devriez voir affiché : Si ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché? Je reste à votre entière disposition pour toute information complémentaire. Cordialement, --- Support technique","Page d'accueil de Tomcat : ""It works!"" - Message principal : ""If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!""" +CLIENT,information,03/04/2025 12:21,"Bonjour, Le problème s’est résolu seul par la suite. Je vous remercie pour votre retour. Bonne journée PS : l’adresse fonctionne",L'adresse https://zk1.brg-lab.com/ fonctionne correctement diff --git a/agents/llama_vision/agent_image_analyser.py b/agents/llama_vision/agent_image_analyser.py index cc52fc2..67783df 100644 --- a/agents/llama_vision/agent_image_analyser.py +++ b/agents/llama_vision/agent_image_analyser.py @@ -15,14 +15,18 @@ class AgentImageAnalyser(BaseAgent): Agent for analyzing images and extracting relevant information. Works in English and translates to French for compatibility. """ - def __init__(self, llm): - super().__init__("AgentImageAnalyser", llm) - - # Configurable parameters - self.params = { + def __init__(self, llm, params: Optional[Dict[str, Any]] = None): + """Initialise l'agent d'analyse d'images. + + Args: + llm: Instance du modèle LLM à utiliser + params (Optional[Dict[str, Any]], optional): Paramètres de configuration. Defaults to None. + """ + super().__init__(llm, params) + self.params = params or { "temperature": 0.2, "top_p": 0.8, - "max_tokens": 3000 + "max_tokens": 1000 } self.instructions_analyse = ( @@ -184,7 +188,7 @@ class AgentImageAnalyser(BaseAgent): Args: image_path: Chemin vers l'image à analyser - contexte: Contexte d'analyse du ticket + contexte: Contexte d'analyse du ticket et OCR Returns: Prompt formaté avec instructions et contexte @@ -194,17 +198,21 @@ class AgentImageAnalyser(BaseAgent): # Extraire le contexte du ticket (résumé en anglais) ticket_content_en = "" if isinstance(contexte, dict): + # Vérifier les différentes structures possibles du contexte if "response_en" in contexte: ticket_content_en = contexte["response_en"] elif "response" in contexte: ticket_content_en = contexte["response"] - - # Extraire le texte OCR si disponible dans le contexte - ocr_text = "" - if isinstance(contexte, dict) and "ocr_text" in contexte: - ocr_text = contexte["ocr_text"] - elif isinstance(contexte, dict) and "ocr_info" in contexte: - ocr_text = contexte["ocr_info"].get("texte_en", "") + elif "analyse" in contexte: + # Structure de l'analyse de ticket + ticket_content_en = contexte["analyse"].get("en", "") or contexte["analyse"].get("analyse_en", "") + + # Ajouter le texte OCR s'il est disponible + ocr_text = "" + if "ocr_text" in contexte: + ocr_text = contexte["ocr_text"] + elif "ocr_info" in contexte and isinstance(contexte["ocr_info"], dict): + ocr_text = contexte["ocr_info"].get("texte_en", "") # Construire le prompt avec instructions précises prompt = f"""[ENGLISH RESPONSE REQUESTED] @@ -222,11 +230,14 @@ IMAGE: {image_name} """ - # Ajouter le contexte du ticket - prompt += f"""SUPPORT TICKET CONTEXT: + # Ajouter le contexte du ticket s'il est disponible + if ticket_content_en: + prompt += f"""SUPPORT TICKET CONTEXT: {ticket_content_en[:1500]} -INSTRUCTIONS: +""" + + prompt += """INSTRUCTIONS: 1. Describe what is shown in this image in detail 2. Identify any error messages, technical information, or interface elements 3. Explain how this image relates to the support ticket context provided @@ -237,6 +248,7 @@ If the image contains text, code, or error messages, transcribe all important pa Structure your analysis clearly with headers and bullet points. """ + logger.debug(f"Prompt construit pour {image_name} avec OCR: {bool(ocr_text)} et contexte ticket: {bool(ticket_content_en)}") return prompt def _extraire_ticket_id_depuis_path(self, path: str) -> str: @@ -265,46 +277,60 @@ Structure your analysis clearly with headers and bullet points. contexte (Optional[dict], optional): Contexte supplémentaire. Defaults to None. Returns: - dict: Résultat de l'analyse + dict: Résultat de l'analyse avec les champs suivants: + - timestamp: horodatage de l'analyse + - image: nom de l'image analysée + - ticket_id: identifiant du ticket + - analyse: dictionnaire contenant l'analyse en anglais et français + - model_info: informations sur le modèle utilisé """ if not self._verifier_image(image_path): - return self._erreur(message="Image invalide ou inaccessible", path=image_path) + return self._erreur("Image invalide ou inaccessible", path=image_path) if not self.llm.peut_analyser_images(): - return self._erreur(message="Le modèle ne supporte pas l'analyse d'images", path=image_path) + return self._erreur("Le modèle ne supporte pas l'analyse d'images", path=image_path) nom_image = os.path.basename(image_path) ticket_id = self._extraire_ticket_id_depuis_path(image_path) try: - reponse = self.llm.analyser_image(image_path) - if not reponse: - return self._erreur(message="Pas de réponse du modèle", path=image_path) + # Construction du prompt avec le contexte + prompt = self._construire_prompt(image_path, contexte or {}) + + # Analyse de l'image + reponse = self.llm.analyser_image(image_path, prompt) + if not reponse or self._verifier_reponse_invalide(reponse): + return self._erreur("Réponse invalide du modèle", path=image_path) + # Récupération du nom normalisé du modèle model_name = getattr(self.llm, "pipeline_normalized_name", "llama3-vision-90b-instruct") + # Construction du résultat resultat = { "timestamp": datetime.now().isoformat(), "image": nom_image, "ticket_id": ticket_id, "analyse": { "en": reponse, - "fr": self.llm.traduire(reponse) + "fr": self._corriger_termes_courants(en_to_fr(reponse)) }, "model_info": { "name": model_name, - "params": { - "temperature": 0.2, - "max_tokens": 1000 - } + "type": "vision", + "params": self.params } } + # Extraction et ajout des URLs si présentes + urls = self._extraire_urls(reponse) + if urls: + resultat["urls"] = urls + return resultat except Exception as e: - logger.error(f"Erreur lors de l'analyse de l'image {nom_image}: {str(e)}") - return self._erreur(message=f"Erreur lors de l'analyse: {str(e)}", path=image_path) + logger.error(f"Erreur lors de l'analyse de {image_path}: {str(e)}") + return self._erreur(f"Erreur lors de l'analyse: {str(e)}", path=image_path) def _corriger_termes_courants(self, texte: str) -> str: """ diff --git a/csv_old/rapport_final_mistral-large-latest_results.txt b/csv_old/rapport_final_mistral-large-latest_results.txt new file mode 100644 index 0000000..98c221a --- /dev/null +++ b/csv_old/rapport_final_mistral-large-latest_results.txt @@ -0,0 +1,37 @@ +RÉSULTATS DE L'ANALYSE RAPPORT_FINAL - TICKET T11143 +================================================================================ + +### Rapport Final + +#### 1. Contexte général +Le client ne parvient pas à accéder à l'essai au bleu, mais le problème s'est résolu de lui-même par la suite. + +#### 2. Problèmes ou questions identifiés +- Pourquoi l'essai au bleu est-il inaccessible ? +- Comment résoudre le problème d'accès à l'essai au bleu ? + +#### 3. Résumé croisé image/texte pour chaque question + +**Pourquoi l'essai au bleu est-il inaccessible ?** +- **Texte du ticket** : Le client mentionne un problème d'accès à l'essai au bleu. +- **Image** : L'image montre un message d'erreur indiquant un problème de connexion au serveur ("Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com"). + +**Comment résoudre le problème d'accès à l'essai au bleu ?** +- **Texte du ticket** : Le client indique que le problème s'est résolu de lui-même par la suite. +- **Image** : L'image montre que l'utilisateur a accès à l'interface de l'essai au bleu de méthylène, mais un message d'erreur indique un problème de connexion au serveur. + +#### 4. Liste d'observations supplémentaires pertinentes +- Le terme "essai au bleu" utilisé par le client correspond à "Essai au bleu de méthylène de méthylène (MB) - NF EN 933-9". +- L'adresse https://zk1.brg-lab.com/ fonctionne correctement, comme confirmé par le client et l'image montrant la page d'accueil de Tomcat. + +#### 5. Tableau chronologique d'échanges + +| ÉMETTEUR | TYPE | DATE | CONTENU | ÉLÉMENTS VISUELS | +| --- | --- | --- | --- | --- | +| CLIENT | question | 03/04/2025 08:34 | Bonjour, Je ne parviens pas à accéder à l’essai au bleu. Merci par avance pour votre. Cordialement | Essai au bleu de méthylène de méthylène (MB) - NF EN 933-9 (02-2022) - Message d'erreur : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com" | +| SUPPORT | réponse | 03/04/2025 12:17 | Bonjour, Pouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur : https://zk1.brg-lab.com/ Voici ce que vous devriez voir affiché : Si ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché? Je reste à votre entière disposition pour toute information complémentaire. Cordialement, --- Support technique | Page d'accueil de Tomcat : "It works!" - Message principal : "If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!" | +| CLIENT | information | 03/04/2025 12:21 | Bonjour, Le problème s’est résolu seul par la suite. Je vous remercie pour votre retour. Bonne journée PS : l’adresse fonctionne | L'adresse https://zk1.brg-lab.com/ fonctionne correctement | + + +================================================================================ +Fichier original: rapport_final_mistral-large-latest_results.json \ No newline at end of file diff --git a/orchestrator_llama.py b/orchestrator_llama.py index c430fae..ca193c7 100644 --- a/orchestrator_llama.py +++ b/orchestrator_llama.py @@ -245,25 +245,45 @@ class OrchestratorLlamaVision: } # Analyser les images pertinentes avec l'agent d'analyse d'images - if self.image_analyser and ticket_analysis: + if self.image_analyser: + logger.info(f"Début de l'analyse des images avec {len(relevant_images)} images pertinentes") analyses_resultats = [] # Pour accumuler les résultats + for img in relevant_images: try: # Intégrer les résultats de l'OCR dans le contexte ocr_info = ocr_results.get(img, {}) - contexte_enrichi = self._enrichir_contexte(ticket_analysis, ocr_info) + contexte_enrichi = self._enrichir_contexte( + ticket_analysis if ticket_analysis else {}, + ocr_info + ) + logger.info(f"Analyse de l'image: {os.path.basename(img)}") result = self.image_analyser.executer(img, contexte=contexte_enrichi) - images_analyses[img]["analysis"] = result + if result: + images_analyses[img]["analysis"] = result analyses_resultats.append(result) + logger.info(f"Analyse terminée pour {os.path.basename(img)}") + else: + logger.warning(f"Pas de résultat d'analyse pour {os.path.basename(img)}") + except Exception as e: logger.error(f"Erreur analyse image {os.path.basename(img)}: {e}") if self.config.get("debug_mode"): logger.error(traceback.format_exc()) - # Sauvegarder les résultats d'analyse d'images - if analyses_resultats: + # Sauvegarder les résultats via la méthode sauvegarder_resultats si disponible + if hasattr(self.image_analyser, "sauvegarder_resultats"): + try: + self.image_analyser.sauvegarder_resultats() + logger.info(f"Sauvegarde des résultats d'analyse d'images via sauvegarder_resultats") + except Exception as e: + logger.error(f"Erreur lors de la sauvegarde des résultats d'analyse d'images: {e}") + if self.config.get("debug_mode"): + logger.error(traceback.format_exc()) + else: + # Fallback vers sauvegarder_donnees si sauvegarder_resultats n'est pas disponible try: from agents.utils.pipeline_logger import sauvegarder_donnees sauvegarder_donnees( @@ -273,7 +293,7 @@ class OrchestratorLlamaVision: base_dir=rapport_dir, is_resultat=True ) - logger.info(f"Sauvegarde de {len(analyses_resultats)} analyses d'images effectuée") + logger.info(f"Sauvegarde de {len(analyses_resultats)} analyses d'images effectuée via sauvegarder_donnees") except Exception as e: logger.error(f"Erreur lors de la sauvegarde des analyses d'images: {e}") if self.config.get("debug_mode"): diff --git a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/analyse_ticket_llama3-2-vision-90b-instruct-q8-0_results.json b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/analyse_ticket_llama3-2-vision-90b-instruct-q8-0_results.json index ab817fc..d759245 100644 --- a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/analyse_ticket_llama3-2-vision-90b-instruct-q8-0_results.json +++ b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/analyse_ticket_llama3-2-vision-90b-instruct-q8-0_results.json @@ -10,7 +10,7 @@ "https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-8ec-06ff5046ebf3" ], "metadata": { - "timestamp": "20250424_140742", + "timestamp": "20250424_144635", "source_agent": "AgentTicketAnalyser", "ticket_id": "T11143", "model_info": { diff --git a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg.json b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg.json index 0ba1b39..f77b68d 100644 --- a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg.json +++ b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg.json @@ -5,7 +5,7 @@ "translation_en_back_fr": "", "metadata": { "ticket_id": "T11143", - "timestamp": "20250424_140752", + "timestamp": "20250424_144644", "source_module": "ocr_utils + translate_utils", "lang_detected": "fr" } diff --git a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif.json b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif.json index 34bbaa8..a2f82a4 100644 --- a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif.json +++ b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif.json @@ -5,7 +5,7 @@ "translation_en_back_fr": "", "metadata": { "ticket_id": "T11143", - "timestamp": "20250424_140752", + "timestamp": "20250424_144644", "source_module": "ocr_utils + translate_utils", "lang_detected": "fr" } diff --git a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image.png.json b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image.png.json index 368ea5f..e6bbb18 100644 --- a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image.png.json +++ b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image.png.json @@ -5,7 +5,7 @@ "translation_en_back_fr": "Apache Tomcat x +\n\nGc @ 2 zk1.brg-b.com\n\n@ Andre Demo Devmat @ Modèle de base\n\nÇa marche!\n\nSi vous voyez cette page via un navigateur Web, cela signifie que vous avez configuré Tomcat avec succès. Félicitations!\n\nIl s'agit de la page d'accueil par défaut de Tomcat. Il peut être trouvé sur le système de fichiers local à: /var/lib/tomcat7/webapps/root/index.html\n\nMatou? Les vétérans pourraient être ravis de lire cette instance système de Tomcat est installé avec cataina_home dans / usr / tomcat7 et cataina_base dans / var / 1ib / tomcat7, en suivant les règles de / usr / share / doc / tomcat7-commun / running. SMS. GZ.\nVous pourriez envisager d'installer les packages suivants, si vous avez fait Alreni:\n\nTomcat7-Docs: Ce package installe une application Web qui permet de parcourir la documentation Tomcat 7 localement. Une fois installé, vous pouvez y accéder en cliquant\n\nTomcat7-Exemple: Ce package installe une application Web qui permet d'accéder aux exemples de servlet Tomcat 7 et JSP. Une fois installé, vous pouvez y accéder en cliquant\n\nTomcat7-admin: Ce package installe deux applications Web qui peuvent aider à gérer cette instance Tomcat. Une fois installé, vous pouvez accéder au et le et le et\n\nRemarque: Pour des raisons de sécurité, l'utilisation du gestionnaire WebApp est limitée aux utilisateurs avec le rôle \"Manager-Gui\". Le manager host-manager est limité aux utilisateurs avec un rôle \"Admin-Gui\". Les utilisateurs sont définis dans / et / tomcat7 / tomcta-users.xml.", "metadata": { "ticket_id": "T11143", - "timestamp": "20250424_140746", + "timestamp": "20250424_144639", "source_module": "ocr_utils + translate_utils", "lang_detected": "fr" } diff --git a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image_145435.png.json b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image_145435.png.json index 5c543fb..7bee125 100644 --- a/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image_145435.png.json +++ b/output/ticket_T11143/T11143_20250422_084617/T11143_rapports/pipeline/ocr_traduction/image_145435.png.json @@ -5,7 +5,7 @@ "translation_en_back_fr": "C3 Giraudbrg-Lobicom / Brg-Lab / Page Progratsai / Zeaaahevngoaaaa\n\n Brglas cd béton cd foumasew tubo © masse\n\nECHANTILLION N ° 25-0007 ECEPTIAN le 02/04/2025 PR Bollé Victor prévu le 04/04/2025 Por Bollee Victor N ° Pédéwment 25-00078\nMatériau de sable 0/20 Carriere adceg\n\n[Fai Jemmarme | [M Porrouo || onservanons] [