25004-14:49

This commit is contained in:
Ladebeze66 2025-04-25 14:49:10 +02:00
parent f790512ebb
commit ed8a8f4cbf
10 changed files with 628 additions and 180 deletions

View File

@ -1,5 +1,5 @@
Émetteur,Type,Date,Contenu,Éléments visuels
Fabien Lafay (client),Question,[Date non spécifiée],Problème signalé avec l'accès au «test bleu»,-
Fabien Lafay (client),Contexte supplémentaire,[Date non spécifiée],Image fournie avec URL https://zk1.brg-lob.com/,"Image: Rapport ou document généré par une application ou un système basé sur le Web, éventuellement à partir d'une planification des ressources de l'entreprise (ERP) ou d'un système de gestion des informations de laboratoire (LIMS)."
Équipe de soutien,Réponse,[Date non spécifiée],A répondu à la question du client,-
Victor Bollée (soutien),Mise à jour,[Date non spécifiée],Mentionné que le problème a été résolu seul,-
Client (Fabien Lafay),Question,[Date initiale],Rapport de problème Accès au test bleu,-
Support,Demande d'informations,[Date],Demande de détails techniques et de captures d'écran,-
Client (Fabien Lafay),Réponse,[Date],"Capture d'écran envoyée avec des informations techniques, y compris les spécifications de l'URL et de l'équipement","Capture d'écran avec table contenant ""Pedéwment"", ""Sand Material"" Colonnes et URL"
Support,Analyse,[Date],Examen des détails techniques fournis pour identifier les causes potentielles de problème,-

1 Émetteur Type Date Contenu Éléments visuels
2 Fabien Lafay (client) Client (Fabien Lafay) Question [Date non spécifiée] [Date initiale] Problème signalé avec l'accès au «test bleu» Rapport de problème Accès au test bleu -
3 Fabien Lafay (client) Support Contexte supplémentaire Demande d'informations [Date non spécifiée] [Date] Image fournie avec URL https://zk1.brg-lob.com/ Demande de détails techniques et de captures d'écran Image: Rapport ou document généré par une application ou un système basé sur le Web, éventuellement à partir d'une planification des ressources de l'entreprise (ERP) ou d'un système de gestion des informations de laboratoire (LIMS). -
4 Équipe de soutien Client (Fabien Lafay) Réponse [Date non spécifiée] [Date] A répondu à la question du client Capture d'écran envoyée avec des informations techniques, y compris les spécifications de l'URL et de l'équipement - Capture d'écran avec table contenant "Pedéwment", "Sand Material" Colonnes et URL
5 Victor Bollée (soutien) Support Mise à jour Analyse [Date non spécifiée] [Date] Mentionné que le problème a été résolu seul Examen des détails techniques fournis pour identifier les causes potentielles de problème -

View File

@ -273,88 +273,73 @@ Structure your analysis clearly with headers and bullet points.
return "unknown"
def executer(self, image_path: str, contexte: Optional[dict] = None) -> dict:
"""Exécute l'analyse d'une image.
Args:
image_path (str): Chemin vers l'image à analyser
contexte (Optional[dict], optional): Contexte supplémentaire. Defaults to None.
Returns:
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é
"""
image_name = os.path.basename(image_path)
print(f" AgentImageAnalyser: Analyse de {image_name}")
Analyse une image et extrait les informations pertinentes.
Args:
image_path: Chemin vers l'image à analyser
contexte: Contexte optionnel (texte OCR, analyse ticket, etc)
Returns:
Dictionnaire contenant les résultats d'analyse
"""
logger.info(f"Analyzing image: {image_path}")
try:
if not self._verifier_image(image_path):
result = self._erreur("Image invalide ou inaccessible", path=image_path)
self.resultats.append(result)
print(f" Erreur: Image {image_name} invalide ou inaccessible")
return result
# Vérifier si le modèle supporte l'analyse d'images (comme dans AgentImageSorter)
if not hasattr(self.llm, "interroger_avec_image"):
result = self._erreur("Le modèle ne supporte pas l'analyse d'images", path=image_path)
self.resultats.append(result)
print(f" Erreur: Le modèle ne supporte pas l'analyse d'images")
return result
ticket_id = self._extraire_ticket_id_depuis_path(image_path)
# Construction du prompt avec le contexte
return self._erreur("Image inaccessible ou invalide", image_path)
# Construire le prompt avec le contexte
prompt = self._construire_prompt(image_path, contexte or {})
# Analyse de l'image (utiliser interroger_avec_image au lieu de analyser_image)
reponse = self.llm.interroger_avec_image(image_path, prompt)
if not reponse or self._verifier_reponse_invalide(reponse):
result = self._erreur("Réponse invalide du modèle", path=image_path)
self.resultats.append(result)
print(f" Erreur: Réponse invalide du modèle pour {image_name}")
return result
# Analyser l'image avec le LLM
if not hasattr(self.llm, "interroger_avec_image"):
return self._erreur("Le modèle ne supporte pas l'analyse d'images", image_path)
response = self.llm.interroger_avec_image(image_path, prompt)
if self._verifier_reponse_invalide(response):
return self._erreur("Réponse du modèle invalide", image_path, response)
# Extraire le ticket_id
ticket_id = self._extraire_ticket_id(image_path, contexte or {})
# Nettoyer le nom du modèle pour éviter les doublons
model_name = getattr(self.llm, "modele", str(type(self.llm)))
if model_name.startswith("image_"):
model_name = model_name[6:] # Supprimer le préfixe redondant
# Construction du résultat
resultat = {
# Traduire la réponse en français
response_fr = en_to_fr(response)
# Construire le résultat
result = {
"timestamp": datetime.now().isoformat(),
"image": image_name,
"image": os.path.basename(image_path),
"ticket_id": ticket_id,
"analyse": {
"en": reponse,
"fr": self._corriger_termes_courants(en_to_fr(reponse))
"en": response,
"fr": response_fr
},
"model_info": {
"name": model_name,
"type": "vision",
"params": self.params
"model": model_name,
**self.params
}
}
# Extraction et ajout des URLs si présentes
urls = self._extraire_urls(reponse)
if urls:
resultat["urls"] = urls
# Ajouter au collecteur de résultats
self.resultats.append(resultat)
print(f" Analyse terminée pour {image_name}: {len(reponse)} caractères")
return resultat
except Exception as e:
logger.error(f"Erreur lors de l'analyse de {image_path}: {str(e)}")
result = self._erreur(f"Erreur lors de l'analyse: {str(e)}", path=image_path)
# Extraire les URLs trouvées dans la réponse
urls = self._extraire_urls(response)
if urls:
result["urls"] = urls
# Ajouter au collecteur de résultats
self.resultats.append(result)
print(f" Erreur inattendue pour {image_name}: {str(e)}")
return result
except Exception as e:
logger.error(f"Error analyzing image {image_path}: {e}")
return self._erreur(f"Erreur inattendue: {str(e)}", image_path)
def _corriger_termes_courants(self, texte: str) -> str:
"""

View File

@ -19,7 +19,7 @@ class AgentVisionOCR(BaseAgent):
self.params = {
"temperature": 0.1,
"top_p": 0.85,
"max_tokens": 15000
"max_tokens": 1500
}
self.system_prompt = """You are a multilingual OCR visual assistant.

View File

@ -1,22 +1,22 @@
2025-04-25 11:49:02,780 - MainLlamaVision - INFO - Initialisation du modèle LlamaVision: llama3.2-vision:90b-instruct-q8_0
2025-04-25 11:49:02,780 - LlamaVision - INFO - Initializing LlamaVision with model llama3.2-vision:90b-instruct-q8_0 (English-only mode)
2025-04-25 11:49:02,780 - MainLlamaVision - INFO - Nom normalisé du modèle: llama3-2-vision-90b-instruct-q8-0
2025-04-25 11:49:02,780 - MainLlamaVision - INFO - Création des agents avec LlamaVision
2025-04-25 11:49:02,780 - AgentFactoryLlamaVision - INFO - Création de tous les agents avec instances LLM indépendantes (modèle: llama3.2-vision:90b-instruct-q8_0)
2025-04-25 11:49:02,780 - AgentFactoryLlamaVision - INFO - Initialisation du modèle llama_vision (modèle: llama3.2-vision:90b-instruct-q8_0)
2025-04-25 11:49:02,780 - LlamaVision - INFO - Initializing LlamaVision with model llama3.2-vision:90b-instruct-q8_0 (English-only mode)
2025-04-25 11:49:02,780 - AgentFactoryLlamaVision - INFO - Création de l'agent de tickets (llama_vision)
2025-04-25 11:49:02,780 - AgentTicketAnalyser - INFO - AgentTicketAnalyser initialisé
2025-04-25 11:49:02,780 - AgentFactoryLlamaVision - INFO - Création de l'agent de tri des images (llama_vision)
2025-04-25 11:49:02,780 - AgentImageSorter - INFO - AgentImageSorter (llama_vision) initialisé
2025-04-25 11:49:02,781 - AgentFactoryLlamaVision - INFO - Création de l'agent d'analyse des images (llama_vision)
2025-04-25 11:49:02,781 - AgentImageAnalyser - INFO - AgentImageAnalyser initialized
2025-04-25 11:49:02,781 - AgentFactoryLlamaVision - INFO - Création de l'agent de génération de rapports (llama_vision)
2025-04-25 11:49:02,781 - AgentReportGenerator - INFO - LlamaVision mode detected: using English system prompt
2025-04-25 11:49:02,781 - AgentReportGenerator - INFO - AgentReportGenerator initialized
2025-04-25 11:49:02,781 - AgentFactoryLlamaVision - INFO - Création de l'agent d'OCR visuel (llama_vision)
2025-04-25 11:49:02,781 - AgentVisionOCR - INFO - AgentVisionOCR initialisé
2025-04-25 11:49:02,781 - MainLlamaVision - INFO - Configuration: {
2025-04-25 14:37:18,533 - MainLlamaVision - INFO - Initialisation du modèle LlamaVision: llama3.2-vision:90b-instruct-q8_0
2025-04-25 14:37:18,533 - LlamaVision - INFO - Initializing LlamaVision with model llama3.2-vision:90b-instruct-q8_0 (English-only mode)
2025-04-25 14:37:18,533 - MainLlamaVision - INFO - Nom normalisé du modèle: llama3-2-vision-90b-instruct-q8-0
2025-04-25 14:37:18,533 - MainLlamaVision - INFO - Création des agents avec LlamaVision
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Création de tous les agents avec instances LLM indépendantes (modèle: llama3.2-vision:90b-instruct-q8_0)
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Initialisation du modèle llama_vision (modèle: llama3.2-vision:90b-instruct-q8_0)
2025-04-25 14:37:18,533 - LlamaVision - INFO - Initializing LlamaVision with model llama3.2-vision:90b-instruct-q8_0 (English-only mode)
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Création de l'agent de tickets (llama_vision)
2025-04-25 14:37:18,533 - AgentTicketAnalyser - INFO - AgentTicketAnalyser initialisé
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Création de l'agent de tri des images (llama_vision)
2025-04-25 14:37:18,533 - AgentImageSorter - INFO - AgentImageSorter (llama_vision) initialisé
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Création de l'agent d'analyse des images (llama_vision)
2025-04-25 14:37:18,533 - AgentImageAnalyser - INFO - AgentImageAnalyser initialized
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Création de l'agent de génération de rapports (llama_vision)
2025-04-25 14:37:18,533 - AgentReportGenerator - INFO - LlamaVision mode detected: using English system prompt
2025-04-25 14:37:18,533 - AgentReportGenerator - INFO - AgentReportGenerator initialized
2025-04-25 14:37:18,533 - AgentFactoryLlamaVision - INFO - Création de l'agent d'OCR visuel (llama_vision)
2025-04-25 14:37:18,533 - AgentVisionOCR - INFO - AgentVisionOCR initialisé
2025-04-25 14:37:18,533 - MainLlamaVision - INFO - Configuration: {
"dedup_enabled": true,
"dedup_threshold": 5,
"save_results": false,
@ -26,23 +26,23 @@
"english_only": true,
"model_name": "llama3-2-vision-90b-instruct-q8-0"
}
2025-04-25 11:49:02,781 - MainLlamaVision - INFO - Création de l'orchestrateur pour le ticket T11143
2025-04-25 11:49:02,781 - OrchestratorLlamaVision - INFO - OrchestratorLlamaVision initialisé avec les paramètres: {'dedup_enabled': True, 'dedup_threshold': 5, 'save_results': False, 'debug_mode': False, 'reports_dir': 'reports', 'ocr_enabled': True, 'english_only': True, 'model_name': 'llama3-2-vision-90b-instruct-q8-0'}
2025-04-25 11:49:02,781 - MainLlamaVision - INFO - Démarrage de l'analyse du ticket T11143
2025-04-25 11:49:02,781 - OrchestratorLlamaVision - INFO - Traitement du ticket T11143
2025-04-25 11:49:02,781 - OrchestratorLlamaVision - INFO - Utilisation du modèle: llama3-2-vision-90b-instruct-q8-0
2025-04-25 11:49:02,781 - OrchestratorLlamaVision - INFO - Données du ticket chargées depuis output/ticket_T11143/T11143_20250422_084617/T11143_rapports/T11143_rapport.json avec 3 messages
2025-04-25 11:49:02,781 - OrchestratorLlamaVision - INFO - Traduction du contenu du ticket T11143 en anglais
2025-04-25 11:49:02,978 - OrchestratorLlamaVision - INFO - Traduction terminée: 984 caractères
2025-04-25 11:49:02,978 - OrchestratorLlamaVision - INFO - Exécution de l'agent d'analyse de ticket pour T11143
2025-04-25 11:49:02,978 - AgentTicketAnalyser - INFO - Utilisation du contenu déjà traduit pour le ticket T11143
2025-04-25 11:50:24,993 - OrchestratorLlamaVision - INFO - Analyse du ticket terminée: 1293 caractères
2025-04-25 11:50:25,005 - OrchestratorLlamaVision - INFO - 6 images trouvées dans output/ticket_T11143/T11143_20250422_084617/attachments
2025-04-25 11:50:25,232 - OrchestratorLlamaVision - INFO - Traitement OCR de 4 images
2025-04-25 11:50:25,232 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/image.png (langue: auto)
2025-04-25 11:50:27,874 - OCR - INFO - Langue détectée: eng
2025-04-25 11:50:28,496 - OCR - WARNING - Impossible de sauvegarder les fichiers de débogage: cannot write mode RGBA as JPEG
2025-04-25 11:50:28,496 - OCR - INFO - OCR réussi [output/ticket_T11143/T11143_20250422_084617/attachments/image.png] — 1347 caractères: Apache Tomcat x +
2025-04-25 14:37:18,533 - MainLlamaVision - INFO - Création de l'orchestrateur pour le ticket T11143
2025-04-25 14:37:18,533 - OrchestratorLlamaVision - INFO - OrchestratorLlamaVision initialisé avec les paramètres: {'dedup_enabled': True, 'dedup_threshold': 5, 'save_results': False, 'debug_mode': False, 'reports_dir': 'reports', 'ocr_enabled': True, 'english_only': True, 'model_name': 'llama3-2-vision-90b-instruct-q8-0'}
2025-04-25 14:37:18,533 - MainLlamaVision - INFO - Démarrage de l'analyse du ticket T11143
2025-04-25 14:37:18,533 - OrchestratorLlamaVision - INFO - Traitement du ticket T11143
2025-04-25 14:37:18,534 - OrchestratorLlamaVision - INFO - Utilisation du modèle: llama3-2-vision-90b-instruct-q8-0
2025-04-25 14:37:18,534 - OrchestratorLlamaVision - INFO - Données du ticket chargées depuis output/ticket_T11143/T11143_20250422_084617/T11143_rapports/T11143_rapport.json avec 3 messages
2025-04-25 14:37:18,534 - OrchestratorLlamaVision - INFO - Traduction du contenu du ticket T11143 en anglais
2025-04-25 14:37:18,730 - OrchestratorLlamaVision - INFO - Traduction terminée: 984 caractères
2025-04-25 14:37:18,730 - OrchestratorLlamaVision - INFO - Exécution de l'agent d'analyse de ticket pour T11143
2025-04-25 14:37:18,730 - AgentTicketAnalyser - INFO - Utilisation du contenu déjà traduit pour le ticket T11143
2025-04-25 14:38:28,456 - OrchestratorLlamaVision - INFO - Analyse du ticket terminée: 1307 caractères
2025-04-25 14:38:28,466 - OrchestratorLlamaVision - INFO - 6 images trouvées dans output/ticket_T11143/T11143_20250422_084617/attachments
2025-04-25 14:38:28,734 - OrchestratorLlamaVision - INFO - Traitement OCR de 4 images
2025-04-25 14:38:28,735 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/image.png (langue: auto)
2025-04-25 14:38:31,505 - OCR - INFO - Langue détectée: eng
2025-04-25 14:38:32,169 - OCR - WARNING - Impossible de sauvegarder les fichiers de débogage: cannot write mode RGBA as JPEG
2025-04-25 14:38:32,169 - OCR - INFO - OCR réussi [output/ticket_T11143/T11143_20250422_084617/attachments/image.png] — 1347 caractères: Apache Tomcat x +
GC @ 2 zk1.brg-lab.com
@ -51,71 +51,74 @@ GC @ 2 zk1.brg-lab.com
It works !
If you're ...
2025-04-25 11:50:28,851 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour image.png
2025-04-25 11:50:28,851 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour image.png
2025-04-25 11:50:28,851 - OrchestratorLlamaVision - INFO - OCR terminé pour image.png: 1347 caractères (en)
2025-04-25 11:50:28,851 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/image_145435.png (langue: auto)
2025-04-25 11:50:29,909 - OCR - INFO - Langue détectée: fra
2025-04-25 11:50:30,176 - OCR - INFO - Images prétraitées et résultat OCR sauvegardés dans debug_ocr
2025-04-25 11:50:30,176 - OCR - INFO - OCR réussi [output/ticket_T11143/T11143_20250422_084617/attachments/image_145435.png] — 373 caractères: C3 giraudbrg-lobicom/BRG-LAB/PAGE programmetssai/zEAAAHEVNGOAA
2025-04-25 14:38:32,507 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour image.png
2025-04-25 14:38:32,507 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour image.png
2025-04-25 14:38:32,507 - OrchestratorLlamaVision - INFO - OCR terminé pour image.png: 1347 caractères (en)
2025-04-25 14:38:32,507 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/image_145435.png (langue: auto)
2025-04-25 14:38:33,628 - OCR - INFO - Langue détectée: fra
2025-04-25 14:38:33,909 - OCR - INFO - Images prétraitées et résultat OCR sauvegardés dans debug_ocr
2025-04-25 14:38:33,909 - OCR - INFO - OCR réussi [output/ticket_T11143/T11143_20250422_084617/attachments/image_145435.png] — 373 caractères: C3 giraudbrg-lobicom/BRG-LAB/PAGE programmetssai/zEAAAHEVNGOAA
BRGLAS CD Béton CD Foumasew tubo © ...
2025-04-25 11:50:30,701 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour image_145435.png
2025-04-25 11:50:30,702 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour image_145435.png
2025-04-25 11:50:30,702 - OrchestratorLlamaVision - INFO - OCR terminé pour image_145435.png: 373 caractères (fr)
2025-04-25 11:50:30,702 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg (langue: auto)
2025-04-25 11:50:32,495 - OCR - INFO - Langue détectée: fra
2025-04-25 11:50:33,590 - OCR - WARNING - OCR vide (aucun texte détecté) pour output/ticket_T11143/T11143_20250422_084617/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg
2025-04-25 11:50:33,591 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg
2025-04-25 11:50:33,591 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg
2025-04-25 11:50:33,591 - OrchestratorLlamaVision - INFO - OCR terminé pour 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg: 0 caractères (unknown)
2025-04-25 11:50:33,591 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif (langue: auto)
2025-04-25 11:50:33,591 - OCR - ERROR - Erreur lors du prétraitement de l'image output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif: image has wrong mode
2025-04-25 11:50:33,814 - OCR - INFO - Langue détectée: fra
2025-04-25 11:50:33,926 - OCR - WARNING - OCR vide (aucun texte détecté) pour output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif
2025-04-25 11:50:33,926 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif
2025-04-25 11:50:33,926 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif
2025-04-25 11:50:33,926 - OrchestratorLlamaVision - INFO - OCR terminé pour a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif: 0 caractères (unknown)
2025-04-25 11:50:33,926 - OrchestratorLlamaVision - INFO - Traitement de 4 images uniques avec l'agent de tri
2025-04-25 11:51:21,441 - AgentImageSorter - WARNING - Image trop petite: output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif (1x1)
2025-04-25 11:51:21,441 - AgentImageSorter - INFO - Sauvegarde de 4 résultats de tri d'images
2025-04-25 11:51:21,442 - OrchestratorLlamaVision - INFO - Sauvegarde groupée de 4 résultats de tri d'images effectuée
2025-04-25 11:51:21,442 - OrchestratorLlamaVision - INFO - Début de l'analyse des images avec 2 images pertinentes
2025-04-25 11:51:21,442 - OrchestratorLlamaVision - INFO - Analyse de l'image: image.png
2025-04-25 11:53:06,818 - OrchestratorLlamaVision - INFO - Analyse terminée pour image.png
2025-04-25 11:53:06,819 - OrchestratorLlamaVision - INFO - Analyse de l'image: image_145435.png
2025-04-25 11:55:18,578 - OrchestratorLlamaVision - INFO - Analyse terminée pour image_145435.png
2025-04-25 11:55:18,578 - AgentImageAnalyser - INFO - Sauvegarde de 2 résultats d'analyse d'images
2025-04-25 11:55:18,579 - OrchestratorLlamaVision - INFO - Sauvegarde des résultats d'analyse d'images via sauvegarder_resultats
2025-04-25 11:55:18,579 - AgentReportGenerator - DEBUG - Data received for T11143: {"ticket_id": "T11143", "ticket_data": {"id": "11122", "code": "T11143", "name": "BRGLAB - Essai inaccessible", "description": "*Contenu non extractible*", "project_name": "Demandes", "stage_name": "Cl\u00f4tur\u00e9", "user_id": "", "partner_id_email_from": "GIRAUD TP (JCG), Victor BOLL\u00c9E, v.bollee@labojcg.fr", "create_date": "03/04/2025 08:34:43", "write_date_last_modification": "03/04/2025 12:23:31", "date_deadline": "18/04/2025 00:00:00", "messages": [{"author_id": "Fabien LAFAY", "date...
2025-04-25 11:55:18,579 - AgentReportGenerator - INFO - Validation for T11143: OK, 2 images analyzed out of 4 images
2025-04-25 11:55:18,579 - AgentReportGenerator - INFO - Number of images to analyze: 4
2025-04-25 11:55:18,579 - AgentReportGenerator - INFO - Adding analysis of image image.png (2 characters)
2025-04-25 11:55:18,579 - AgentReportGenerator - INFO - Adding analysis of image image_145435.png (2 characters)
2025-04-25 11:55:18,579 - AgentReportGenerator - WARNING - Image 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg without analysis
2025-04-25 11:55:18,579 - AgentReportGenerator - WARNING - Image a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif without analysis
2025-04-25 11:55:18,579 - AgentReportGenerator - INFO - Size of ticket analysis: 6 characters
2025-04-25 11:55:18,579 - AgentReportGenerator - INFO - Size of image block: 11239 characters
2025-04-25 11:55:18,579 - AgentReportGenerator - DEBUG - Generated prompt (17201 characters): Voici les données d'analyse pour un ticket de support :
2025-04-25 14:38:34,251 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour image_145435.png
2025-04-25 14:38:34,251 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour image_145435.png
2025-04-25 14:38:34,251 - OrchestratorLlamaVision - INFO - OCR terminé pour image_145435.png: 373 caractères (fr)
2025-04-25 14:38:34,251 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg (langue: auto)
2025-04-25 14:38:36,197 - OCR - INFO - Langue détectée: fra
2025-04-25 14:38:37,358 - OCR - WARNING - OCR vide (aucun texte détecté) pour output/ticket_T11143/T11143_20250422_084617/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg
2025-04-25 14:38:37,358 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg
2025-04-25 14:38:37,359 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg
2025-04-25 14:38:37,359 - OrchestratorLlamaVision - INFO - OCR terminé pour 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg: 0 caractères (unknown)
2025-04-25 14:38:37,359 - OCR - INFO - Traitement OCR pour output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif (langue: auto)
2025-04-25 14:38:37,359 - OCR - ERROR - Erreur lors du prétraitement de l'image output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif: image has wrong mode
2025-04-25 14:38:37,611 - OCR - INFO - Langue détectée: fra
2025-04-25 14:38:37,726 - OCR - WARNING - OCR vide (aucun texte détecté) pour output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif
2025-04-25 14:38:37,726 - Translate - INFO - Sauvegarde JSON OCR/TRAD réussie pour a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif
2025-04-25 14:38:37,726 - Translate - INFO - Ligne ajoutée dans ocr_traduction.txt pour a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif
2025-04-25 14:38:37,726 - OrchestratorLlamaVision - INFO - OCR terminé pour a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif: 0 caractères (unknown)
2025-04-25 14:38:37,726 - OrchestratorLlamaVision - INFO - Traitement de 4 images uniques avec l'agent de tri
2025-04-25 14:39:24,722 - AgentImageSorter - WARNING - Image trop petite: output/ticket_T11143/T11143_20250422_084617/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif (1x1)
2025-04-25 14:39:24,724 - AgentImageSorter - INFO - Sauvegarde de 4 résultats de tri d'images
2025-04-25 14:39:24,726 - OrchestratorLlamaVision - INFO - Sauvegarde groupée de 4 résultats de tri d'images effectuée
2025-04-25 14:39:24,726 - OrchestratorLlamaVision - INFO - Début de l'analyse des images avec 2 images pertinentes
2025-04-25 14:39:24,726 - OrchestratorLlamaVision - INFO - Analyse de l'image: image.png
2025-04-25 14:39:24,726 - AgentImageAnalyser - INFO - Analyzing image: output/ticket_T11143/T11143_20250422_084617/attachments/image.png
2025-04-25 14:41:00,539 - OrchestratorLlamaVision - INFO - Analyse terminée pour image.png
2025-04-25 14:41:00,539 - OrchestratorLlamaVision - INFO - Analyse de l'image: image_145435.png
2025-04-25 14:41:00,539 - AgentImageAnalyser - INFO - Analyzing image: output/ticket_T11143/T11143_20250422_084617/attachments/image_145435.png
2025-04-25 14:42:53,411 - OrchestratorLlamaVision - INFO - Analyse terminée pour image_145435.png
2025-04-25 14:42:53,411 - AgentImageAnalyser - INFO - Sauvegarde de 2 résultats d'analyse d'images
2025-04-25 14:42:53,412 - OrchestratorLlamaVision - INFO - Sauvegarde des résultats d'analyse d'images via sauvegarder_resultats
2025-04-25 14:42:53,413 - AgentReportGenerator - DEBUG - Data received for T11143: {"ticket_id": "T11143", "ticket_data": {"id": "11122", "code": "T11143", "name": "BRGLAB - Essai inaccessible", "description": "*Contenu non extractible*", "project_name": "Demandes", "stage_name": "Cl\u00f4tur\u00e9", "user_id": "", "partner_id_email_from": "GIRAUD TP (JCG), Victor BOLL\u00c9E, v.bollee@labojcg.fr", "create_date": "03/04/2025 08:34:43", "write_date_last_modification": "03/04/2025 12:23:31", "date_deadline": "18/04/2025 00:00:00", "messages": [{"author_id": "Fabien LAFAY", "date...
2025-04-25 14:42:53,413 - AgentReportGenerator - INFO - Validation for T11143: OK, 2 images analyzed out of 4 images
2025-04-25 14:42:53,413 - AgentReportGenerator - INFO - Number of images to analyze: 4
2025-04-25 14:42:53,413 - AgentReportGenerator - INFO - Adding analysis of image image.png (2 characters)
2025-04-25 14:42:53,413 - AgentReportGenerator - INFO - Adding analysis of image image_145435.png (2 characters)
2025-04-25 14:42:53,413 - AgentReportGenerator - WARNING - Image 543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg without analysis
2025-04-25 14:42:53,413 - AgentReportGenerator - WARNING - Image a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif without analysis
2025-04-25 14:42:53,413 - AgentReportGenerator - INFO - Size of ticket analysis: 6 characters
2025-04-25 14:42:53,413 - AgentReportGenerator - INFO - Size of image block: 9231 characters
2025-04-25 14:42:53,413 - AgentReportGenerator - DEBUG - Generated prompt (15233 characters): Voici les données d'analyse pour un ticket de support :
=== ANALYSE DU TICKET ===
{'prompt': "TITRE: BRGLAB - Essai inaccessible\n\n[03/04/2025 08:35:20] Fabien LAFAY (Système):\nGIRAUD TP (JCG), Victor BOLLÉE\n-\nil y a 9 minutes\n;\nFabien LAFAY\n;\nRomuald GRUSON\n;\nsupport\n;\nsupport\n-\nQuentin FAIVRE\n-\nFabien LAFAY\n-\nRomuald GRUSON\nBonjour,\nJe ne parviens pas à accéder au lessai au bleu\xa0:\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/1454...
2025-04-25 11:55:21,435 - AgentReportGenerator - INFO - Translating prompt to English for LlamaVision (16531 characters)
2025-04-25 11:57:20,103 - AgentReportGenerator - INFO - Translating response to French (2753 characters)
2025-04-25 11:57:20,103 - AgentReportGenerator - DEBUG - Response received (2753 characters): ** Rapport croisé **
2025-04-25 14:42:55,383 - AgentReportGenerator - INFO - Translating prompt to English for LlamaVision (14857 characters)
2025-04-25 14:44:13,501 - AgentReportGenerator - INFO - Translating response to French (1724 characters)
2025-04-25 14:44:13,502 - AgentReportGenerator - DEBUG - Response received (1724 characters): ** Rapport croisé **
**Résumé:**
Le client, Fabien Lafay, a signalé un problème avec l'accès au "test bleu" et a fourni un contexte supplémentaire via une image. L'équipe de soutien a répondu et Victor Bollée a mentionné que le problème avait été résolu seul.
Le client, Fabien Lafay, a signalé un problème avec l'accès à un test bleu. L'équipe d'assistance a demandé des informations supplémentaires pour dépanner le problème.
** Tableau chronologique des échanges: **
| Émetteur | Type | Date | Contenu | Éléments visuels |
| --- | --- | --- | --- | --- |
| Fabien Lafay (client) | Question | [Date non spécifiée] | Problème signalé avec l'accès au «test bleu» | ...
2025-04-25 11:57:20,105 - OrchestratorLlamaVision - INFO - Traitement terminé pour le ticket T11143
2025-04-25 11:57:20,106 - MainLlamaVision - INFO - Analyse du ticket T11143 terminée
2025-04-25 11:57:20,106 - MainLlamaVision - INFO - Génération des fichiers CSV pour le ticket T11143
2025-04-25 11:57:20,106 - ReportCSVExporter - INFO - Traitement du rapport: rapport_final_llama3-2-vision-90b-instruct-q8-0_results.json
2025-04-25 11:57:20,107 - ReportCSVExporter - INFO - CSV échanges généré: /home/fgras-ca/llm-ticket3/CSV/T11143/T11143_llama3-2-vision-90b-instruct-q8-0_exchanges.csv
2025-04-25 11:57:20,107 - ReportCSVExporter - INFO - Traitement terminé. 1 modèles traités: llama3-2-vision-90b-instruct-q8-0
2025-04-25 11:57:20,107 - MainLlamaVision - INFO - Fichiers CSV générés avec succès
| Client (Fabien Lafay) | Question | [Date initiale] | Rapport de problème Accès au test bleu | - |
| Support | Demande d'informations | [Date] | Demande de détails t...
2025-04-25 14:44:13,504 - OrchestratorLlamaVision - INFO - Traitement terminé pour le ticket T11143
2025-04-25 14:44:13,504 - MainLlamaVision - INFO - Analyse du ticket T11143 terminée
2025-04-25 14:44:13,505 - MainLlamaVision - INFO - Génération des fichiers CSV pour le ticket T11143
2025-04-25 14:44:13,505 - ReportCSVExporter - INFO - Traitement du rapport: rapport_final_llama3-2-vision-90b-instruct-q8-0_results.json
2025-04-25 14:44:13,506 - ReportCSVExporter - INFO - CSV échanges généré: /home/fgras-ca/llm-ticket3/CSV/T11143/T11143_llama3-2-vision-90b-instruct-q8-0_exchanges.csv
2025-04-25 14:44:13,506 - ReportCSVExporter - INFO - Traitement terminé. 1 modèles traités: llama3-2-vision-90b-instruct-q8-0
2025-04-25 14:44:13,506 - MainLlamaVision - INFO - Fichiers CSV générés avec succès

459
orchestrator_llama2.py Normal file
View File

@ -0,0 +1,459 @@
import os
import json
import logging
import time
import traceback
from typing import List, Dict, Any, Optional, Tuple, cast
from agents.base_agent import BaseAgent
from agents.llama_vision.agent_image_sorter import AgentImageSorter
from loaders.ticket_data_loader import TicketDataLoader
from utils.image_dedup import filtrer_images_uniques
from utils.ocr_utils import extraire_texte
from utils.translate_utils import fr_to_en, en_to_fr, sauvegarder_ocr_traduction
# Configuration du logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='orchestrator_llama.log', filemode='w')
logger = logging.getLogger("OrchestratorLlamaVision")
def __init__(self,
output_dir: str = "output/",
ticket_agent: Optional[BaseAgent] = None,
image_sorter: Optional[BaseAgent] = None,
image_analyser: Optional[BaseAgent] = None,
report_generator: Optional[BaseAgent] = None,
vision_ocr: Optional[BaseAgent] = None,
config: Optional[Dict[str, Any]] = None):
self.output_dir = output_dir
self.ticket_agent = ticket_agent
self.image_sorter = image_sorter
self.image_analyser = image_analyser
self.report_generator = report_generator
self.vision_ocr = vision_ocr
self.ticket_loader = TicketDataLoader()
self.config = {
"dedup_enabled": True,
"dedup_threshold": 5,
"save_results": True,
"debug_mode": False,
"reports_dir": "reports",
"ocr_enabled": True,
"ocr_llm_enabled": True,
"english_only": True,
"model_name": "llama3-vision-90b-instruct"
}
if config:
self.config.update(config)
# Assurer la cohérence des noms de modèles
if "model_name" in self.config:
self.config["model_name"] = self.config["model_name"].replace(".", "-").replace(":", "-").replace("_", "-")
logger.info(f"OrchestratorLlamaVision initialisé avec les paramètres: {self.config}")
def executer(self, ticket_id: Optional[str] = None):
ticket_path = os.path.join(self.output_dir, f"ticket_{ticket_id}")
if not os.path.exists(ticket_path):
logger.error(f"Le ticket {ticket_id} est introuvable dans {ticket_path}")
return
try:
self.traiter_ticket(ticket_path)
except Exception as e:
logger.error(f"Erreur globale sur le ticket {ticket_id}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
def traiter_ticket(self, ticket_path: str):
ticket_id = os.path.basename(ticket_path).replace("ticket_", "")
logger.info(f"Traitement du ticket {ticket_id}")
extractions = self._trouver_extractions(ticket_path, ticket_id)
if not extractions:
logger.warning(f"Aucune extraction trouvée pour le ticket {ticket_id}")
return
extraction_path = extractions[0]
attachments_dir = os.path.join(extraction_path, "attachments")
rapport_dir = os.path.join(extraction_path, f"{ticket_id}_rapports")
os.makedirs(rapport_dir, exist_ok=True)
# Créer le répertoire pipeline une seule fois
pipeline_dir = os.path.join(rapport_dir, "pipeline")
os.makedirs(pipeline_dir, exist_ok=True)
# Récupérer le nom du modèle pour le logging
model_name = self.config.get("model_name", "llama3-vision-90b-instruct")
# Normaliser pour éviter les problèmes dans les noms de fichiers
model_name = model_name.replace(".", "-").replace(":", "-").replace("_", "-")
logger.info(f"Utilisation du modèle: {model_name}")
json_path = self.ticket_loader.trouver_ticket(extraction_path, ticket_id)
ticket_data = self._charger_ticket(json_path)
if not ticket_data:
logger.error(f"Impossible de charger les données du ticket {ticket_id}")
return
# Ajouter le chemin du fichier JSON au ticket_data pour faciliter l'extraction du ticket_id
if json_path:
ticket_data["file_path"] = json_path
# Traduire le contenu du ticket en anglais avant l'analyse
# et stocker la version originale
if self.config.get("english_only", True) and ticket_data.get("content"):
logger.info(f"Traduction du contenu du ticket {ticket_id} en anglais")
ticket_data["content_original"] = ticket_data["content"]
# Vérifier si le contenu est déjà en anglais (détection simple)
english_indicators = ["the ", "is ", "are ", "what ", "when ", "how ", "why "]
if any(indicator in ticket_data["content"].lower() for indicator in english_indicators):
logger.info("Le contenu semble déjà être en anglais, pas de traduction nécessaire")
ticket_data["is_english"] = True
ticket_data["content_en"] = ticket_data["content"]
else:
# Traduire en anglais
ticket_data["content_en"] = fr_to_en(ticket_data["content"])
ticket_data["is_english"] = False
logger.info(f"Traduction terminée: {len(ticket_data['content_en'])} caractères")
# Étape 1: Analyser le ticket (si l'agent est disponible)
ticket_analysis = None
if self.ticket_agent:
try:
logger.info(f"Exécution de l'agent d'analyse de ticket pour {ticket_id}")
ticket_analysis = self.ticket_agent.executer(ticket_data)
# Vérifier si l'analyse a été réalisée avec succès
if ticket_analysis:
logger.info(f"Analyse du ticket terminée: {len(ticket_analysis.get('response', ''))} caractères")
# Si le répertoire des rapports existe mais que le fichier d'analyse n'a pas été créé
# on force sa création ici
pipeline_dir = os.path.join(rapport_dir, "pipeline")
analyse_files = [f for f in os.listdir(pipeline_dir)
if f.startswith("analyse_ticket_") and f.endswith("_results.json")]
if not analyse_files:
logger.warning("Aucun fichier d'analyse de ticket trouvé, tentative de sauvegarde forcée")
from agents.utils.pipeline_logger import sauvegarder_donnees
sauvegarder_donnees(
ticket_id=ticket_id,
step_name="analyse_ticket",
data=ticket_analysis,
base_dir=rapport_dir,
is_resultat=True
)
else:
logger.error(f"L'analyse du ticket {ticket_id} n'a pas produit de résultat")
except Exception as e:
logger.error(f"Erreur lors de l'analyse du ticket {ticket_id}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
images_analyses, relevant_images = {}, []
ocr_results = {}
if os.path.exists(attachments_dir):
images = self._lister_images(attachments_dir)
if self.config.get("dedup_enabled", True):
images = filtrer_images_uniques(images, seuil_hamming=self.config["dedup_threshold"], ticket_id=ticket_id)
# Réaliser l'OCR sur toutes les images avant le tri
if self.config.get("ocr_enabled", True):
logger.info(f"Traitement OCR de {len(images)} images")
for img in images:
try:
ocr_fr, langue = extraire_texte(img, lang="auto")
# Traduire le texte extrait en anglais pour une meilleure analyse
ocr_en = fr_to_en(ocr_fr) if ocr_fr else ""
# Traduire à nouveau en français pour vérification (optionnel)
ocr_en_back_fr = en_to_fr(ocr_en) if ocr_en else ""
# Sauvegarder les résultats OCR directement dans le répertoire pipeline
# au lieu de créer un sous-répertoire T11143
sauvegarder_ocr_traduction(img, ticket_id, ocr_fr, ocr_en, ocr_en_back_fr, base_dir=rapport_dir)
# Stocker le résultat de l'OCR pour utilisation ultérieure
ocr_results[img] = {
"texte_fr": ocr_fr,
"texte_en": ocr_en,
"langue_detectee": langue
}
logger.info(f"OCR terminé pour {os.path.basename(img)}: {len(ocr_fr)} caractères ({langue})")
except Exception as e:
logger.warning(f"Erreur OCR pour {os.path.basename(img)}: {e}")
ocr_results[img] = {"texte_fr": "", "texte_en": "", "langue_detectee": "unknown"}
# Traiter toutes les images avec l'agent de tri
if self.image_sorter:
logger.info(f"Traitement de {len(images)} images uniques avec l'agent de tri")
# Trier toutes les images et collecter les résultats
for img in images:
try:
# Inclure l'OCR avec le chemin de l'image pour aider au tri
ocr_context = ocr_results.get(img, {"texte_en": ""}).get("texte_en", "")
result_sort = self.image_sorter.executer(img, ocr_context=ocr_context)
# Déterminer si l'image est pertinente
is_relevant = result_sort.get("is_relevant", True)
if is_relevant:
relevant_images.append(img)
# Stocker le résultat pour l'analyse ultérieure
images_analyses[img] = {
"sorting": result_sort or {"is_relevant": True},
"analysis": None,
"ocr": ocr_results.get(img, {})
}
except Exception as e:
logger.warning(f"Erreur tri image {os.path.basename(img)}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
# Sauvegarder tous les résultats en une seule fois pour éviter les doublons
if self.image_sorter and hasattr(self.image_sorter, "sauvegarder_resultats"):
try:
# Cast l'agent en AgentImageSorter pour satisfaire le linter
image_sorter = cast(AgentImageSorter, self.image_sorter)
# Méthode sauvegarder_resultats améliorée pour accumuler les résultats
image_sorter.sauvegarder_resultats()
logger.info(f"Sauvegarde groupée de {len(images)} résultats de tri d'images effectuée")
except Exception as e:
logger.error(f"Erreur lors de la sauvegarde groupée des résultats de tri: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
else:
logger.warning("L'agent de tri d'images ne dispose pas de la méthode sauvegarder_resultats")
else:
# Si pas d'agent de tri, considérer toutes les images comme pertinentes
relevant_images = images.copy()
for img in images:
images_analyses[img] = {
"sorting": {"is_relevant": True},
"analysis": None,
"ocr": ocr_results.get(img, {})
}
# Analyser les images pertinentes avec l'agent d'analyse d'images
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 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)
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 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(
ticket_id=ticket_id,
step_name="analyse_image",
data=analyses_resultats,
base_dir=rapport_dir,
is_resultat=True
)
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"):
logger.error(traceback.format_exc())
if self.report_generator and ticket_analysis:
try:
# Normaliser le nom du modèle pour éviter les doublons de rapports
model_name = self.config.get("model_name", "").replace(".", "-").replace(":", "-").replace("_", "-")
if not model_name:
model_name = "llama3-vision-90b-instruct"
rapport_data = {
"ticket_id": ticket_id,
"ticket_data": ticket_data,
"ticket_analyse": ticket_analysis,
"analyse_images": images_analyses,
"metadata": {
"model_name": model_name
}
}
# Utiliser directement le répertoire rapports_dir au lieu de recréer un chemin
rapport_final = self.report_generator.executer(rapport_data)
# Le rapport_generator est responsable de sauvegarder les fichiers
# Nous n'avons pas besoin de dupliquer les sauvegardes ici
# Les files sont sauvegardés via la fonction sauvegarder_donnees dans le pipeline
except Exception as e:
logger.error(f"Erreur lors du rapport : {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
logger.info(f"Traitement terminé pour le ticket {ticket_id}")
def _enrichir_contexte(self, ticket_analysis: Dict[str, Any], ocr_info: Dict[str, Any]) -> Dict[str, Any]:
"""
Enrichit le contexte de l'analyse du ticket avec les informations OCR
Args:
ticket_analysis: Résultat de l'analyse du ticket
ocr_info: Informations OCR d'une image
Returns:
Contexte enrichi
"""
if not isinstance(ticket_analysis, dict):
return ticket_analysis
# Créer une copie pour ne pas modifier l'original
contexte_enrichi = ticket_analysis.copy()
# Ajouter les informations OCR
if ocr_info:
contexte_enrichi["ocr_info"] = ocr_info
# Utiliser la version anglaise du texte OCR pour l'analyse
if self.config.get("english_only") and ocr_info.get("texte_en"):
contexte_enrichi["ocr_text"] = ocr_info["texte_en"]
else:
contexte_enrichi["ocr_text"] = ocr_info.get("texte_fr", "")
return contexte_enrichi
def _charger_ticket(self, json_path: Optional[str]) -> Optional[Dict[str, Any]]:
"""
Charge et prépare les données du ticket à partir d'un fichier JSON.
Args:
json_path: Chemin du fichier JSON
Returns:
Données du ticket chargées ou None en cas d'erreur
"""
if not json_path:
logger.warning("Aucun chemin JSON fourni")
return None
try:
ticket_data = self.ticket_loader.charger(json_path)
# Préparer le contenu du ticket à partir des messages
messages = ticket_data.get("messages", [])
contenu = []
# Ajouter le titre/description
if "name" in ticket_data:
contenu.append(f"TITRE: {ticket_data['name']}")
if "description" in ticket_data and ticket_data["description"] != "*Contenu non extractible*":
contenu.append(f"DESCRIPTION: {ticket_data['description']}")
# Ajouter chaque message
for msg in messages:
auteur = msg.get("author_id", "Inconnu")
date = msg.get("date", "")
msg_type = msg.get("message_type", "")
content = msg.get("content", "").strip()
if content:
contenu.append(f"\n[{date}] {auteur} ({msg_type}):")
contenu.append(content)
# Ajouter le contenu formaté au ticket_data
ticket_data["content"] = "\n".join(contenu)
logger.info(f"Données du ticket chargées depuis {json_path} avec {len(messages)} messages")
return ticket_data
except Exception as e:
logger.error(f"Erreur chargement JSON : {e}")
return None
def _trouver_extractions(self, ticket_path: str, ticket_id: str) -> List[str]:
return sorted(
[os.path.join(ticket_path, d) for d in os.listdir(ticket_path)
if os.path.isdir(os.path.join(ticket_path, d)) and d.startswith(ticket_id)],
key=lambda x: os.path.getmtime(x),
reverse=True
)
def _lister_images(self, dossier: str) -> List[str]:
"""
Liste toutes les images dans un dossier avec une reconnaissance étendue
des formats d'images.
Args:
dossier: Dossier contenant les images à analyser
Returns:
Liste des chemins d'images trouvées
"""
# Liste étendue des extensions d'images courantes
extensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp', '.tiff', '.tif']
images = []
# Parcourir le dossier pour trouver toutes les images
if os.path.exists(dossier):
for racine, _, fichiers in os.walk(dossier):
for f in fichiers:
# Vérifier l'extension du fichier (non sensible à la casse)
if any(f.lower().endswith(ext) for ext in extensions):
chemin_complet = os.path.join(racine, f)
# Vérifier que le fichier est bien une image valide et accessible
try:
from PIL import Image
with Image.open(chemin_complet) as img:
# S'assurer que c'est bien une image en vérifiant ses dimensions
width, height = img.size
if width > 0 and height > 0:
images.append(chemin_complet)
except Exception as e:
logger.warning(f"Image ignorée {f}: {str(e)}")
if not images:
logger.warning(f"Aucune image trouvée dans {dossier}")
else:
logger.info(f"{len(images)} images trouvées dans {dossier}")
return images

View File

@ -5,7 +5,7 @@
"translation_en_back_fr": "",
"metadata": {
"ticket_id": "T11143",
"timestamp": "20250425_115033",
"timestamp": "20250425_143837",
"source_module": "ocr_utils + translate_utils",
"lang_detected": "fr"
}

View File

@ -5,7 +5,7 @@
"translation_en_back_fr": "",
"metadata": {
"ticket_id": "T11143",
"timestamp": "20250425_115033",
"timestamp": "20250425_143837",
"source_module": "ocr_utils + translate_utils",
"lang_detected": "fr"
}

View File

@ -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": "20250425_115028",
"timestamp": "20250425_143832",
"source_module": "ocr_utils + translate_utils",
"lang_detected": "fr"
}

View File

@ -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] [<suo] [v hisromou\n\nposé. à partir de 11 e z2k1.brg-lab.com",
"metadata": {
"ticket_id": "T11143",
"timestamp": "20250425_115030",
"timestamp": "20250425_143834",
"source_module": "ocr_utils + translate_utils",
"lang_detected": "fr"
}

View File

@ -1,31 +1,32 @@
** Rapport croisé **
**Résumé:**
Le client, Fabien Lafay, a signalé un problème avec l'accès au "test bleu" et a fourni un contexte supplémentaire via une image. L'équipe de soutien a répondu et Victor Bollée a mentionné que le problème avait été résolu seul.
Le client, Fabien Lafay, a signalé un problème avec l'accès à un test bleu. L'équipe d'assistance a demandé des informations supplémentaires pour dépanner le problème.
** Tableau chronologique des échanges: **
| Émetteur | Type | Date | Contenu | Éléments visuels |
| --- | --- | --- | --- | --- |
| Fabien Lafay (client) | Question | [Date non spécifiée] | Problème signalé avec l'accès au «test bleu» | - |
| Fabien Lafay (client) | Contexte supplémentaire | [Date non spécifiée] | Image fournie avec URL https://zk1.brg-lob.com/ | Image: Rapport ou document généré par une application ou un système basé sur le Web, éventuellement à partir d'une planification des ressources de l'entreprise (ERP) ou d'un système de gestion des informations de laboratoire (LIMS). |
| Équipe de soutien | Réponse | [Date non spécifiée] | A répondu à la question du client | - |
| Victor Bollée (soutien) | Mise à jour | [Date non spécifiée] | Mentionné que le problème a été résolu seul | - |
| Client (Fabien Lafay) | Question | [Date initiale] | Rapport de problème Accès au test bleu | - |
| Support | Demande d'informations | [Date] | Demande de détails techniques et de captures d'écran | - |
| Client (Fabien Lafay) | Réponse | [Date] | Capture d'écran envoyée avec des informations techniques, y compris les spécifications de l'URL et de l'équipement | Capture d'écran avec table contenant "Pedéwment", "Sand Material" Colonnes et URL |
| Support | Analyse | [Date] | Examen des détails techniques fournis pour identifier les causes potentielles de problème | - |
** Analyse d'image: **
** Détails techniques: **
L'image fournie semble être un rapport ou un document généré par une application ou un système basé sur le Web. La section d'en-tête suggère qu'il s'agit d'un rapport ou d'un document généré, éventuellement à partir d'une planification des ressources de l'entreprise (ERP) ou d'un système de gestion de l'information en laboratoire (LIMS). La structure de la table ou de la grille implique que les données sont présentées dans un format structuré.
* ID de document: 25-00078
* Spécifications du matériel:
+ Matériau de sable 0/20 Carriere adceg
* URL: http://zk1.brg-lab.com
* Courriel et noms de domaine:
+ Fabien.lafay@brg-lash.com
** Pertinence pour supporter le billet: **
** Éléments d'image pertinents: **
L'image ne semble pas directement liée au problème initial rapporté par Fabien Lafay. Cependant, il peut avoir été envoyé comme contexte supplémentaire pour le ticket d'assistance. L'URL dans le pied de page de la page ("posée. À partir de 11 e z2k1.brg-lab.com ") peut être liée à l'URL fournie par Fabien Lafay ([URL] https://zk1.brg-lab.com/), suggérant une connexion entre les deux.
* Tableau avec des colonnes pour "Pedéwment", "Sand Material" et autres spécifications techniques
* Section avec URL et résultat attendu
** Contexte technique: **
** Étapes suivantes: **
L'équipe d'assistance continuera d'analyser les détails techniques fournis pour identifier les causes potentielles du problème. Des informations supplémentaires peuvent être demandées au client pour dépanner davantage le problème.
* L'image a été générée par une application ou un système basé sur le Web.
* Le rapport ou le document provient peut-être de la planification des ressources de l'entreprise (ERP) ou du système de gestion des informations de laboratoire (LIMS).
* L'URL dans le pied de page de la page suggère une connexion à l'URL fournie par Fabien Lafay.
**Conclusion:**
Le rapport croisé met en évidence les échanges entre le client et l'équipe d'assistance, y compris le contexte supplémentaire fourni par une image. Bien que l'image ne semble pas directement liée au problème initial, il peut avoir été envoyé comme contexte supplémentaire pour le billet d'assistance. Le contexte technique suggère un lien entre l'image et l'URL fournis par Fabien Lafay.
Remarque: Les dates du tableau ne sont pas spécifiées car elles n'ont pas été fournies dans le texte d'origine. Veuillez remplir les dates réelles de chaque échange.