1804-12:05

This commit is contained in:
Ladebeze66 2025-04-18 12:05:46 +02:00
parent 9537e0285d
commit c826b23aca
16 changed files with 1003 additions and 140 deletions

View File

@ -116,7 +116,7 @@ IMPORTANT :
"ticket_id": ticket_code,
"model_info": {
"model": getattr(self.llm, "modele", str(type(self.llm))),
**self.params
**getattr(self.llm, "params", {})
},
"source_agent": self.nom
}

View File

@ -168,7 +168,7 @@ Fournis une analyse STRICTEMENT FACTUELLE de l'image avec les sections suivantes
"timestamp": self._get_timestamp(),
"model_info": {
"model": getattr(self.llm, "modele", str(type(self.llm))),
**self.params
**getattr(self.llm, "params", {})
},
"source_agent": self.nom
}

View File

@ -121,7 +121,7 @@ class AgentImageSorter(BaseAgent):
"timestamp": self._get_timestamp(),
"model_info": {
"model": getattr(self.llm, "modele", str(type(self.llm))),
**self.params
**getattr(self.llm, "params", {})
},
"source_agent": self.nom
}

View File

@ -0,0 +1,34 @@
[
{
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface web affichée dans un navigateur. Voici les éléments visibles :\n- **Nom du logiciel ou module** : \"Apache Tomcat\" est visible dans l'onglet du navigateur.\n- **Interface logicielle** : La page affiche un message de succès avec le titre \"It works !\".\n- **Contenu de la page** :\n - Un message principal : \"If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!\"\n - Des instructions supplémentaires pour accéder à la documentation et aux exemples de Tomcat.\n - Des liens cliquables :\n - `tomcat-docs` : Accès à la documentation locale de Tomcat.\n - `tomcat-examples` : Accès aux exemples de servlets et JSP.\n - `tomcat-admin` : Accès à l'interface d'administration de Tomcat.\n - Une note de sécurité indiquant que l'accès aux interfaces `manager-gui` et `host-manager-gui` est restreint aux utilisateurs ayant les rôles appropriés.\n\n#### 2. Éléments techniques clés\n- **Version logicielle** : Aucune version spécifique de Tomcat n'est mentionnée dans l'image.\n- **Codes d'erreur visibles** : Aucun code d'erreur n'est visible.\n- **Paramètres configurables** : Aucun paramètre configurable n'est visible dans l'image.\n- **Valeurs affichées ou préremplies** : Aucune valeur n'est affichée dans des champs modifiables.\n- **Éléments désactivés, grisés ou masqués** : Aucun élément n'est désactivé, grisé ou masqué.\n- **Boutons actifs/inactifs** : Les liens `tomcat-docs`, `tomcat-examples` et `tomcat-admin` sont actifs et cliquables.\n\n#### 3. Éléments mis en évidence\n- Aucun élément n'est entouré, encadré, surligné ou fléché dans l'image.\n- Le message \"It works !\" est mis en valeur en tant que titre principal de la page.\n\n#### 4. Relation avec le problème\n- L'image montre que l'installation de Tomcat a été réalisée avec succès, comme indiqué par le message \"It works !\".\n- Il n'y a aucune mention explicite de l'essai au bleu ou d'un problème d'accès dans l'image.\n- Les liens vers la documentation, les exemples et l'interface d'administration de Tomcat sont fonctionnels, ce qui suggère que l'application est opérationnelle.\n\n#### 5. Réponses potentielles\n- L'image ne fournit pas directement de réponse à la question \"Pourquoi l'essai au bleu est-il inaccessible ?\" ou \"Comment résoudre le problème d'accès à l'essai au bleu ?\".\n- Elle confirme cependant que l'installation de Tomcat est réussie, ce qui pourrait être lié à la résolution du problème mentionné par le client.\n\n#### 6. Lien avec la discussion\n- L'image correspond à l'étape décrite dans le fil de discussion où le support demande au client de vérifier l'accès à la page `https://zk1.brg-lab.com/`.\n- Le client a confirmé que l'adresse fonctionne, ce qui est cohérent avec le contenu de l'image.\n- L'image montre que la page s'affiche correctement, sans erreur, ce qui pourrait expliquer pourquoi le client a indiqué que le problème s'est résolu de lui-même.",
"raw_response": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface web affichée dans un navigateur. Voici les éléments visibles :\n- **Nom du logiciel ou module** : \"Apache Tomcat\" est visible dans l'onglet du navigateur.\n- **Interface logicielle** : La page affiche un message de succès avec le titre \"It works !\".\n- **Contenu de la page** :\n - Un message principal : \"If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!\"\n - Des instructions supplémentaires pour accéder à la documentation et aux exemples de Tomcat.\n - Des liens cliquables :\n - `tomcat-docs` : Accès à la documentation locale de Tomcat.\n - `tomcat-examples` : Accès aux exemples de servlets et JSP.\n - `tomcat-admin` : Accès à l'interface d'administration de Tomcat.\n - Une note de sécurité indiquant que l'accès aux interfaces `manager-gui` et `host-manager-gui` est restreint aux utilisateurs ayant les rôles appropriés.\n\n#### 2. Éléments techniques clés\n- **Version logicielle** : Aucune version spécifique de Tomcat n'est mentionnée dans l'image.\n- **Codes d'erreur visibles** : Aucun code d'erreur n'est visible.\n- **Paramètres configurables** : Aucun paramètre configurable n'est visible dans l'image.\n- **Valeurs affichées ou préremplies** : Aucune valeur n'est affichée dans des champs modifiables.\n- **Éléments désactivés, grisés ou masqués** : Aucun élément n'est désactivé, grisé ou masqué.\n- **Boutons actifs/inactifs** : Les liens `tomcat-docs`, `tomcat-examples` et `tomcat-admin` sont actifs et cliquables.\n\n#### 3. Éléments mis en évidence\n- Aucun élément n'est entouré, encadré, surligné ou fléché dans l'image.\n- Le message \"It works !\" est mis en valeur en tant que titre principal de la page.\n\n#### 4. Relation avec le problème\n- L'image montre que l'installation de Tomcat a été réalisée avec succès, comme indiqué par le message \"It works !\".\n- Il n'y a aucune mention explicite de l'essai au bleu ou d'un problème d'accès dans l'image.\n- Les liens vers la documentation, les exemples et l'interface d'administration de Tomcat sont fonctionnels, ce qui suggère que l'application est opérationnelle.\n\n#### 5. Réponses potentielles\n- L'image ne fournit pas directement de réponse à la question \"Pourquoi l'essai au bleu est-il inaccessible ?\" ou \"Comment résoudre le problème d'accès à l'essai au bleu ?\".\n- Elle confirme cependant que l'installation de Tomcat est réussie, ce qui pourrait être lié à la résolution du problème mentionné par le client.\n\n#### 6. Lien avec la discussion\n- L'image correspond à l'étape décrite dans le fil de discussion où le support demande au client de vérifier l'accès à la page `https://zk1.brg-lab.com/`.\n- Le client a confirmé que l'adresse fonctionne, ce qui est cohérent avec le contenu de l'image.\n- L'image montre que la page s'affiche correctement, sans erreur, ce qui pourrait expliquer pourquoi le client a indiqué que le problème s'est résolu de lui-même.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250418_115612",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 3000
},
"source_agent": "AgentImageAnalyser"
}
},
{
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle du module **BRG-LAB**. Voici les éléments visibles :\n- **Titre de la page** : \"Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)\"\n- **Menu principal** : Situé à gauche, avec les sections suivantes :\n - \"ESSAIS\" (sélectionné, en surbrillance rouge)\n - \"MATÉRIAUX\"\n - \"PORTEFEUILLE\"\n - \"OBSERVATIONS\"\n - \"SMO\"\n - \"HISTORIQUE\"\n- **Sous-menu** : Sous \"ESSAIS\", les options \"FAZ\" et \"ESSAIS\" sont visibles.\n- **Informations supplémentaires** :\n - Numéro d'échantillon : 25-00075\n - Date de réception : 02/04/2025\n - Préleveur : BOLLEE Victor\n - Date de prélèvement : 02/04/2025\n - Matériau : Sable 0/2 - CARRIERE ADCEG\n- **Barre d'outils** : En haut à gauche, avec les options \"BRGLAB\", \"Briton\", \"Fournisseur Labo\", et une icône de \"Masa\".\n- **URL visible** : `https://zk1.brg-lab.com/BRG-LAB/PAGE_programme/essai/CFAAHVNCDAA`\n- **Message en bas de page** : \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\"\n\n#### 2. Éléments techniques clés\n- **Modules ou versions logicielles** : Le module \"BRG-LAB\" est visible, mais aucune version spécifique n'est mentionnée.\n- **Codes d'erreur visibles** : Aucun code d'erreur n'est affiché.\n- **Paramètres configurables** :\n - Aucun champ de texte, slider, dropdown ou case à cocher n'est visible dans cette capture.\n- **Valeurs affichées ou préremplies** :\n - Les informations sur l'échantillon (numéro, date, préleveur, matériau) sont préremplies.\n- **Éléments désactivés, grisés ou masqués** :\n - Aucun élément n'est visiblement grisé ou désactivé.\n- **Boutons actifs/inactifs** :\n - Aucun bouton n'est visible dans cette capture.\n\n#### 3. Éléments mis en évidence\n- **Zones entourées, encadrées, surlignées ou fléchées** :\n - L'onglet \"ESSAIS\" est surligné en rouge dans le menu principal.\n - Aucun autre élément n'est mis en évidence.\n\n#### 4. Relation avec le problème\n- L'image montre l'accès à la page de l'essai au bleu de méthylène, ce qui est directement lié au problème décrit dans le ticket (accès à l'essai au bleu).\n- Le message en bas de page (\"Impossible de trouver l'adresse IP du serveur de",
"raw_response": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle du module **BRG-LAB**. Voici les éléments visibles :\n- **Titre de la page** : \"Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)\"\n- **Menu principal** : Situé à gauche, avec les sections suivantes :\n - \"ESSAIS\" (sélectionné, en surbrillance rouge)\n - \"MATÉRIAUX\"\n - \"PORTEFEUILLE\"\n - \"OBSERVATIONS\"\n - \"SMO\"\n - \"HISTORIQUE\"\n- **Sous-menu** : Sous \"ESSAIS\", les options \"FAZ\" et \"ESSAIS\" sont visibles.\n- **Informations supplémentaires** :\n - Numéro d'échantillon : 25-00075\n - Date de réception : 02/04/2025\n - Préleveur : BOLLEE Victor\n - Date de prélèvement : 02/04/2025\n - Matériau : Sable 0/2 - CARRIERE ADCEG\n- **Barre d'outils** : En haut à gauche, avec les options \"BRGLAB\", \"Briton\", \"Fournisseur Labo\", et une icône de \"Masa\".\n- **URL visible** : `https://zk1.brg-lab.com/BRG-LAB/PAGE_programme/essai/CFAAHVNCDAA`\n- **Message en bas de page** : \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\"\n\n#### 2. Éléments techniques clés\n- **Modules ou versions logicielles** : Le module \"BRG-LAB\" est visible, mais aucune version spécifique n'est mentionnée.\n- **Codes d'erreur visibles** : Aucun code d'erreur n'est affiché.\n- **Paramètres configurables** :\n - Aucun champ de texte, slider, dropdown ou case à cocher n'est visible dans cette capture.\n- **Valeurs affichées ou préremplies** :\n - Les informations sur l'échantillon (numéro, date, préleveur, matériau) sont préremplies.\n- **Éléments désactivés, grisés ou masqués** :\n - Aucun élément n'est visiblement grisé ou désactivé.\n- **Boutons actifs/inactifs** :\n - Aucun bouton n'est visible dans cette capture.\n\n#### 3. Éléments mis en évidence\n- **Zones entourées, encadrées, surlignées ou fléchées** :\n - L'onglet \"ESSAIS\" est surligné en rouge dans le menu principal.\n - Aucun autre élément n'est mis en évidence.\n\n#### 4. Relation avec le problème\n- L'image montre l'accès à la page de l'essai au bleu de méthylène, ce qui est directement lié au problème décrit dans le ticket (accès à l'essai au bleu).\n- Le message en bas de page (\"Impossible de trouver l'adresse IP du serveur de",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image_145435.png",
"image_name": "image_145435.png",
"timestamp": "20250418_115645",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 3000
},
"source_agent": "AgentImageAnalyser"
}
}
]

View File

@ -1,121 +1,16 @@
[
{
"ticket_id": "T11143",
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nSujet : BRGLAB - Essai inaccessible\n\n--- RAPPEL ---\nREPRODUIS EXACTEMENT les messages. Ne reformule rien. Ne déduis rien. Conserve tous les termes techniques.\n",
"response": "### TICKET T11143\n\n#### 1. Résumé du contexte\nLe client rencontre un problème d'accès à un essai dans le logiciel BRG-Lab.\n\n#### 2. Informations techniques détectées\n- Module : Essai au bleu\n- Erreur : Essai inaccessible\n\n#### 3. Fil de discussion exact\n\n**Client** (Date inconnue) :\nSujet : BRGLAB - Essai inaccessible\n\n**Fabien LAFAY** (Support CBAO, 2023-10-02 14:32) :\nBonjour,\n\nPouvez-vous nous fournir plus de détails sur l'essai que vous essayez d'accéder ? Est-ce un essai au bleu ? Avez-vous rencontré une erreur spécifique ?\n\nCordialement,\nFabien LAFAY\n\n**Client** (2023-10-02 15:12) :\nBonjour,\n\nOui, c'est un essai au bleu. Lorsque j'essaie d'accéder à l'essai, le logiciel affiche un message d'erreur indiquant que l'essai est inaccessible.\n\nCordialement,\n\n**Romuald GRUSON** (Support CBAO, 2023-10-03 09:45) :\nBonjour,\n\nMerci pour ces informations. Pourriez-vous nous envoyer une capture d'écran de l'erreur que vous voyez ? Cela nous aidera à mieux comprendre le problème.\n\nCordialement,\nRomuald GRUSON\n\n**Client** (2023-10-03 10:30) :\nBonjour,\n\nVoici la capture d'écran de l'erreur :\n![Capture d'écran de l'erreur](https://example.com/capture_erreur.png)\n\nCordialement,\n\n**Quentin FAIVRE** (Support CBAO, 2023-10-04 11:00) :\nBonjour,\n\nMerci pour la capture d'écran. Nous allons examiner le problème et revenir vers vous dès que possible.\n\nCordialement,\nQuentin FAIVRE\n\n#### 4. Éléments visuels à vérifier\n- Comportements évoqués : Message d'erreur indiquant que l'essai est inaccessible.\n- Modules visibles : Essai au bleu.\n- Captures : ![Capture d'écran de l'erreur](https://example.com/capture_erreur.png)",
"metadata": {
"timestamp": "20250417_163437",
"source_agent": "AgentTicketAnalyser",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.2,
"top_p": 0.3,
"max_tokens": 7000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
}
}
},
{
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 08:34\nContenu :\nBRGLAB - Essai inaccessible\n",
"response": "### RÉPONSE DE L'ÉQUIPE SUPPORT\n\n--- RÉPONSE 1 ---\nAuteur : Support BRG-Lab\nDate : 03/04/2025 09:15\nContenu :\nBonjour,\n\nMerci pour votre message. Pour mieux vous assister, pourriez-vous nous fournir plus de détails sur le problème que vous rencontrez avec l'essai ? Par exemple, quel type d'essai essayez-vous d'accéder ? Avez-vous rencontré des messages d'erreur spécifiques ?\n\nCordialement,\nL'équipe support BRG-Lab\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 09:30\nContenu :\nBonjour,\n\nJe ne parviens pas à accéder à l'essai au bleu. Lorsque je clique sur le lien, j'obtiens une page blanche.\n\nCordialement,\n[Nom du Client]\n\n--- RÉPONSE 2 ---\nAuteur : Support BRG-Lab\nDate : 03/04/2025 09:45\nContenu :\nBonjour [Nom du Client],\n\nMerci pour ces précisions. Pourriez-vous nous indiquer l'URL exacte que vous essayez d'accéder ? Cela nous aidera à diagnostiquer le problème plus précisément.\n\nCordialement,\nL'équipe support BRG-Lab\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 10:00\nContenu :\nBonjour,\n\nVoici l'URL : [URL de l'essai au bleu](http://brglab.cbao.fr/essai-au-bleu)\n\nCordialement,\n[Nom du Client]\n\n--- RÉPONSE 3 ---\nAuteur : Support BRG-Lab\nDate : 03/04/2025 10:15\nContenu :\nBonjour [Nom du Client],\n\nMerci pour l'URL. Nous allons vérifier cela immédiatement. Nous vous tiendrons informé dès que nous aurons plus d'informations.\n\nCordialement,\nL'équipe support BRG-Lab\n\n--- RÉPONSE 4 ---\nAuteur : Support BRG-Lab\nDate : 03/04/2025 11:00\nContenu :\nBonjour [Nom du Client],\n\nNous avons identifié un problème avec le serveur hébergeant l'essai au bleu. Nos équipes techniques sont en train de résoudre ce problème. Nous vous informerons dès que l'accès sera rétabli.\n\nCordialement,\nL'équipe support BRG-Lab\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 11:15\nContenu :\nMerci pour votre réactivité. J'attends de vos nouvelles.\n\nCordialement,\n[Nom du Client]\n\n--- RÉPONSE 5 ---\nAuteur : Support BRG-Lab\nDate : 03/04/2025 12:00\nContenu :\nBonjour [Nom du Client],\n\nL'accès à l'essai au bleu a été rétabli. Vous devriez maintenant pouvoir accéder à l'URL sans problème.\n\nCordialement,\nL'équipe support BRG-Lab\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 12:15\nContenu :\nMerci beaucoup. Tout fonctionne correctement maintenant.\n\nCordialement,\n[Nom du Client]",
"metadata": {
"timestamp": "20250417_165315",
"source_agent": "AgentTicketAnalyser",
"ticket_id": "T11143",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.05,
"top_p": 0.8,
"max_tokens": 7000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
}
}
},
{
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 08:34\nContenu :\nBRGLAB - Essai inaccessible\n",
"response": "Bonjour,\n\nJe ne suis pas en mesure de lancer un essai sur BRGLAB.\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 09:15\nContenu :\nBonjour,\n\nMerci pour votre message. Pour mieux vous assister, pourriez-vous préciser quel type d'essai vous essayez de lancer ? Avez-vous rencontré des messages d'erreur spécifiques ?\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 09:30\nContenu :\nBonjour,\n\nJe tente de lancer un essai de type \"Analyse Chimique\". Je n'ai pas de message d'erreur, mais le bouton \"Lancer l'essai\" est grisé et inaccessible.\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 09:45\nContenu :\nBonjour,\n\nMerci pour ces précisions. Pourriez-vous vérifier si vous avez les permissions nécessaires pour lancer cet essai ? Vous pouvez consulter la documentation sur les permissions ici : [Lien vers la documentation sur les permissions](https://brglab.com/docs/permissions).\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 10:00\nContenu :\nBonjour,\n\nJ'ai vérifié mes permissions et tout semble en ordre. Voici une capture d'écran de mon interface.\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 10:15\nContenu :\nBonjour,\n\nMerci pour la capture d'écran. Nous allons examiner cela de plus près. En attendant, pourriez-vous vérifier si le problème persiste en mode multi-laboratoire ?\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 10:30\nContenu :\nBonjour,\n\nLe problème persiste en mode multi-laboratoire.\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 10:45\nContenu :\nBonjour,\n\nMerci pour cette information. Nous allons devoir escalader ce ticket à notre équipe technique pour une analyse plus approfondie. Nous vous tiendrons informé dès que possible.\n\nCordialement,\n\n--- FIN DU MESSAGE ---\n\n### 1. Résumé du contexte\n- **Client** : Non identifié (aucun nom ou email fourni)\n- **Sujet du ticket reformulé en une ou plusieurs questions** :\n - Pourquoi le bouton \"Lancer l'essai\" est-il grisé et inaccessible pour un essai de type \"Analyse Chimique\" ?\n - Y a-t-il des permissions spécifiques nécessaires pour lancer cet essai ?\n - Le problème persiste-t-il en mode multi-laboratoire ?\n- **Description technique synthétique** :\n - Le client ne peut pas lancer un essai de type \"Analyse Chimique\" car le bouton \"Lancer l'essai\" est grisé.\n - Les permissions semblent en ordre.\n - Le problème persiste en mode multi-laboratoire.\n\n### 2. Informations techniques détectées\n- **Logiciels/modules mentionnés** : BRGLAB\n- **Paramètres évoqués** : Permissions pour lancer un essai\n- **Fonctionnalités impactées** : Lancement d'essai de type \"Analyse Chimique\"\n- **Conditions spécifiques** : Mode multi-laboratoire\n\n### 3. Fil de discussion (filtrée, nettoyée, classée)\n- **Client** (03/04/2025 08:34) :\n - \"BRGLAB - Essai inaccessible\"\n - \"Je ne suis pas en mesure de lancer un essai sur BRGLAB.\"\n\n- **Support** (03/04/2025 09:15) :\n - \"Pourriez-vous préciser quel type d'essai vous essayez de lancer ? Avez-vous rencontré des messages d'erreur spécifiques ?\"\n\n- **Client** (03/04/2025 09:30) :\n - \"Je tente de lancer un essai de type 'Analyse Chimique'. Je n'ai pas de message d'erreur, mais le bouton 'Lancer l'essai' est grisé et inaccessible.\"\n\n- **Support** (03/04/2025 09:45) :\n - \"Pourriez-vous vérifier si vous avez les permissions nécessaires pour lancer cet essai ? Vous pouvez consulter la documentation sur les permissions ici : [Lien vers la documentation sur les permissions](https://brglab.com/docs/permissions).\"\n\n- **Client** (03/04/2025 10:00) :\n - \"J'ai vérifié mes permissions et tout semble en ordre. Voici une capture d'écran de mon interface.\"\n\n- **Support** (03/04/2025 10:15) :\n - \"Nous allons examiner cela de plus près. En attendant, pourriez-vous vérifier si le problème persiste en mode multi-laboratoire ?\"\n\n- **Client** (03/04/2025 10:30) :\n - \"Le problème persiste en mode multi-laboratoire.\"\n\n- **Support** (03/04/2025 10:45) :\n - \"Nous allons devoir escalader ce ticket à notre équipe technique pour une analyse plus approfondie. Nous vous tiendrons informé dès que possible.\"\n\n### 4. Éléments liés à l'analyse visuelle\n- **Nombre d'images attachées** : 1 (capture d'écran de l'interface)\n- **Références aux interfaces ou options à visualiser** : Bouton \"Lancer l'essai\" grisé\n- **Points à vérifier dans les captures** :\n - Bouton \"Lancer l'essai\" grisé\n - Interface en mode multi-laboratoire",
"metadata": {
"timestamp": "20250417_165641",
"source_agent": "AgentTicketAnalyser",
"ticket_id": "T11143",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.05,
"top_p": 0.8,
"max_tokens": 7000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
}
}
},
{
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 08:34\nContenu :\nBRGLAB - Essai inaccessible\n",
"response": "Bonjour,\n\nJe ne parviens pas à accéder à l'essai \"ESS001\" depuis ce matin. Le message d'erreur indique \"Accès refusé\". J'ai vérifié mes identifiants et ils sont corrects. J'ai également essayé de me connecter depuis un autre poste, mais le problème persiste.\n\nPouvez-vous m'aider à résoudre ce problème ?\n\nCordialement,\nJean Dupont\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 09:15\nContenu :\nBonjour Jean,\n\nMerci pour votre message. Pour mieux comprendre le problème, pourriez-vous nous fournir plus de détails sur les étapes que vous avez suivies pour accéder à l'essai \"ESS001\" ? Avez-vous essayé de réinitialiser vos identifiants ou de contacter votre administrateur réseau ?\n\nVous pouvez consulter notre FAQ sur les problèmes de connexion ici : [Lien vers la FAQ]\n\nCordialement,\nSupport BRG-Lab\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 09:45\nContenu :\nBonjour,\n\nJ'ai suivi les étapes habituelles pour accéder à l'essai :\n1. Connexion à l'interface BRG-Lab.\n2. Sélection du module \"Essais\".\n3. Recherche de l'essai \"ESS001\".\n\nJ'ai également réinitialisé mes identifiants, mais le problème persiste. Mon administrateur réseau n'a pas pu m'aider non plus.\n\nJe vous ai joint une capture d'écran du message d'erreur.\n\nCordialement,\nJean Dupont\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 10:30\nContenu :\nBonjour Jean,\n\nMerci pour les informations supplémentaires. Nous allons examiner la capture d'écran et revenir vers vous dès que possible.\n\nEn attendant, vous pouvez consulter notre manuel utilisateur pour plus de détails sur la gestion des essais : [Lien vers le manuel utilisateur]\n\nCordialement,\nSupport BRG-Lab\n\n--- FIN DU TICKET ---\n\n### Résumé du contexte\n- **Client** : Jean Dupont\n- **Sujet du ticket reformulé en une ou plusieurs questions** :\n - Pourquoi Jean Dupont ne parvient-il pas à accéder à l'essai \"ESS001\" ?\n - Quelles sont les causes possibles du message d'erreur \"Accès refusé\" ?\n- **Description technique synthétique** :\n - Jean Dupont ne peut pas accéder à l'essai \"ESS001\" malgré la vérification de ses identifiants et l'utilisation de différents postes.\n - Le message d'erreur affiché est \"Accès refusé\".\n\n### Informations techniques détectées\n- **Logiciels/modules mentionnés** : Interface BRG-Lab, module \"Essais\"\n- **Paramètres évoqués** : Identifiants de connexion\n- **Fonctionnalités impactées** : Accès à l'essai \"ESS001\"\n- **Conditions spécifiques** : Problème persistant malgré la réinitialisation des identifiants et l'utilisation de différents postes\n\n### Fil de discussion (filtrée, nettoyée, classée)\n- **Client** (03/04/2025 08:34) :\n - \"Je ne parviens pas à accéder à l'essai 'ESS001' depuis ce matin. Le message d'erreur indique 'Accès refusé'. J'ai vérifié mes identifiants et ils sont corrects. J'ai également essayé de me connecter depuis un autre poste, mais le problème persiste.\"\n- **Support** (03/04/2025 09:15) :\n - \"Pourriez-vous nous fournir plus de détails sur les étapes que vous avez suivies pour accéder à l'essai 'ESS001' ? Avez-vous essayé de réinitialiser vos identifiants ou de contacter votre administrateur réseau ? Vous pouvez consulter notre FAQ sur les problèmes de connexion ici : [Lien vers la FAQ]\"\n- **Client** (03/04/2025 09:45) :\n - \"J'ai suivi les étapes habituelles pour accéder à l'essai : 1. Connexion à l'interface BRG-Lab. 2. Sélection du module 'Essais'. 3. Recherche de l'essai 'ESS001'. J'ai également réinitialisé mes identifiants, mais le problème persiste. Mon administrateur réseau n'a pas pu m'aider non plus. Je vous ai joint une capture d'écran du message d'erreur.\"\n- **Support** (03/04/2025 10:30) :\n - \"Nous allons examiner la capture d'écran et revenir vers vous dès que possible. En attendant, vous pouvez consulter notre manuel utilisateur pour plus de détails sur la gestion des essais : [Lien vers le manuel utilisateur]\"\n\n### Éléments liés à l'analyse visuelle\n- **Nombre d'images attachées** : 1\n- **Références aux interfaces ou options à visualiser** : Message d'erreur \"Accès refusé\"\n- **Points à vérifier dans les captures** : Message d'erreur affiché, options de connexion, état des identifiants",
"metadata": {
"timestamp": "20250417_165812",
"source_agent": "AgentTicketAnalyser",
"ticket_id": "T11143",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.1,
"top_p": 0.9,
"max_tokens": 7000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
}
}
},
{
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 08:34\nContenu :\nBRGLAB - Essai inaccessible\n",
"response": "Bonjour,\n\nDepuis ce matin, je n'arrive plus à accéder à l'interface de gestion des essais. Lorsque je clique sur le module \"Essais\", rien ne se passe. J'ai essayé de me déconnecter et de me reconnecter, mais le problème persiste.\n\nPouvez-vous m'aider à résoudre ce problème ?\n\nCordialement,\nJean Dupont\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 09:15\nContenu :\nRéférence : T11143\nBonjour Jean,\n\nMerci pour votre message.\n\nPour mieux comprendre le problème, pourriez-vous préciser si vous rencontrez ce souci sur tous les navigateurs ou uniquement sur un navigateur spécifique ?\n\nAvez-vous essayé de vider le cache de votre navigateur ?\n\nEn attendant votre réponse, vous pouvez consulter notre FAQ sur les problèmes d'accès aux modules : [Lien vers la FAQ](https://brg-lab.com/faq)\n\nCordialement,\nSupport BRG-Lab\n\n--- RÉPONSE DU CLIENT ---\nAuteur : Client\nDate : 03/04/2025 09:30\nContenu :\nBonjour,\n\nJ'ai essayé sur Chrome et Firefox, le problème est le même. J'ai également vidé le cache, mais cela n'a rien changé.\n\nJe vous joins une capture d'écran de ce que je vois lorsque je clique sur \"Essais\".\n\nCordialement,\nJean Dupont\n\n--- RÉPONSE DU SUPPORT ---\nAuteur : Support\nDate : 03/04/2025 10:00\nContenu :\nMerci pour ces précisions, Jean.\n\nNous allons examiner la capture d'écran et revenir vers vous rapidement.\n\nCordialement,\nSupport BRG-Lab\n\n---\n\n### Résumé du contexte\n- **Client** : Jean Dupont\n- **Sujet du ticket reformulé en une ou plusieurs questions** :\n - Pourquoi l'interface de gestion des essais est-elle inaccessible ?\n - Pourquoi le module \"Essais\" ne répond-il pas lorsque je clique dessus ?\n- **Description technique synthétique** :\n - Le client ne peut pas accéder à l'interface de gestion des essais en cliquant sur le module \"Essais\".\n - Le problème persiste après déconnexion/reconnexion et vidage du cache.\n - Le problème est présent sur les navigateurs Chrome et Firefox.\n\n### Informations techniques détectées\n- **Logiciels/modules mentionnés** : Module \"Essais\"\n- **Paramètres évoqués** : Aucun\n- **Fonctionnalités impactées** : Accès à l'interface de gestion des essais\n- **Conditions spécifiques** : Problème présent sur Chrome et Firefox\n\n### Fil de discussion (filtrée, nettoyée, classée)\n- **Client**\n - Date : 03/04/2025 08:34\n - Contenu : Depuis ce matin, je n'arrive plus à accéder à l'interface de gestion des essais. Lorsque je clique sur le module \"Essais\", rien ne se passe. J'ai essayé de me déconnecter et de me reconnecter, mais le problème persiste.\n- **Support**\n - Date : 03/04/2025 09:15\n - Contenu : Pour mieux comprendre le problème, pourriez-vous préciser si vous rencontrez ce souci sur tous les navigateurs ou uniquement sur un navigateur spécifique ? Avez-vous essayé de vider le cache de votre navigateur ? En attendant votre réponse, vous pouvez consulter notre FAQ sur les problèmes d'accès aux modules : [Lien vers la FAQ](https://brg-lab.com/faq)\n- **Client**\n - Date : 03/04/2025 09:30\n - Contenu : J'ai essayé sur Chrome et Firefox, le problème est le même. J'ai également vidé le cache, mais cela n'a rien changé. Je vous joins une capture d'écran de ce que je vois lorsque je clique sur \"Essais\".\n- **Support**\n - Date : 03/04/2025 10:00\n - Contenu : Merci pour ces précisions, Jean. Nous allons examiner la capture d'écran et revenir vers vous rapidement.\n\n### Éléments liés à l'analyse visuelle\n- **Nombre d'images attachées** : 1\n- **Références aux interfaces ou options à visualiser** : Interface de gestion des essais\n- **Points à vérifier dans les captures** : Comportement du module \"Essais\" lors du clic",
"metadata": {
"timestamp": "20250417_170054",
"source_agent": "AgentTicketAnalyser",
"ticket_id": "T11143",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.1,
"top_p": 0.2,
"max_tokens": 7000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
}
}
},
{
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nAuteur : GIRAUD TP (JCG), Victor BOLLÉE, v.bollee@labojcg.fr\nDate : 03/04/2025 08:34\nContenu :\nBRGLAB - Essai inaccessible\n*Contenu non extractible*\n\n--- MESSAGE 1 ---\nAuteur : Fabien LAFAY\nDate : 03/04/2025 08:35\nType : Système\nSujet : Re: [T11143] BRGLAB - Essai inaccessible\nContenu :\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 :\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)\n\n---\n\n--- MESSAGE 2 ---\nAuteur : Fabien LAFAY\nDate : 03/04/2025 12:17\nType : E-mail\nSujet : Re: [T11143] - BRGLAB - Essai inaccessible\nContenu :\nBonjour\n,\nPouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :\nhttps://zk1.brg-lab.com/\nVoici ce que vous devriez voir affiché :\nSi ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?\nJe reste à votre entière disposition pour toute information complémentaire.\nCordialement,\n---\nSupport technique\n\n- image.png (image/png) [ID: 145453]\n\n---\n\n--- MESSAGE 3 ---\nAuteur : Victor BOLLÉE\nDate : 03/04/2025 12:21\nType : E-mail\nSujet : TR: [T11143] - BRGLAB - Essai inaccessible\nContenu :\nBonjour,\nLe problème sest résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : ladresse fonctionne\nDe :\n\n---\n\n",
"response": "### 1. Résumé du contexte\n\n**Client :**\n- Nom : Victor BOLLÉE\n- Email : v.bollee@labojcg.fr\n- `user_id` : Non disponible\n\n**Sujet du ticket reformulé en une ou plusieurs questions :**\n- Pourquoi l'essai au bleu est-il inaccessible ?\n- Comment résoudre le problème d'accès à l'essai au bleu ?\n\n**Description technique synthétique :**\n- Le client ne parvient pas à accéder à l'essai au bleu.\n- Le problème s'est résolu de lui-même par la suite.\n- L'adresse https://zk1.brg-lab.com/ fonctionne correctement.\n\n### 2. Informations techniques détectées\n\n**Logiciels/modules mentionnés :**\n- BRGLAB\n\n**Paramètres évoqués :**\n- Aucun paramètre spécifique mentionné\n\n**Fonctionnalités impactées :**\n- Accès à l'essai au bleu\n\n**Conditions spécifiques :**\n- Aucune condition spécifique mentionnée\n\n### 3. Fil de discussion (filtrée, nettoyée, classée)\n\n**Intervenant : Client**\n**Date : 03/04/2025 08:34**\n**Contenu :**\nBonjour,\nJe ne parviens pas à accéder au lessai au bleu :\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)\n\n**Intervenant : Support**\n**Date : 03/04/2025 12:17**\n**Contenu :**\nBonjour,\nPouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :\nhttps://zk1.brg-lab.com/\nVoici ce que vous devriez voir affiché :\nSi ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?\nJe reste à votre entière disposition pour toute information complémentaire.\nCordialement,\n---\nSupport technique\n- image.png (image/png) [ID: 145453]\n\n**Intervenant : Client**\n**Date : 03/04/2025 12:21**\n**Contenu :**\nBonjour,\nLe problème sest résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : ladresse fonctionne\n\n### 4. Éléments liés à l'analyse visuelle\n\n**Nombre d'images attachées :**\n- 2 images attachées\n\n**Références aux interfaces ou options à visualiser :**\n- Accès à l'essai au bleu\n- Page https://zk1.brg-lab.com/\n\n**Points à vérifier dans les captures :**\n- Vérifier l'affichage de la page https://zk1.brg-lab.com/\n- Vérifier l'accès à l'essai au bleu",
"response": "### 1. Résumé du contexte\n\n**Client :**\n- Nom : Victor BOLLÉE\n- Email : v.bollee@labojcg.fr\n- Société : GIRAUD TP (JCG)\n- `user_id` : Non disponible\n\n**Sujet du ticket reformulé en une ou plusieurs questions :**\n- Pourquoi l'essai au bleu est-il inaccessible ?\n- Comment résoudre le problème d'accès à l'essai au bleu ?\n\n**Description technique synthétique :**\n- Le client ne parvient pas à accéder à l'essai au bleu.\n- Une capture d'écran est jointe pour illustrer le problème.\n- Le support technique demande de vérifier l'accès à une page spécifique et de fournir une capture d'écran si nécessaire.\n- Le problème s'est résolu de lui-même par la suite.\n\n### 2. Informations techniques détectées\n\n**Logiciels/modules mentionnés :**\n- BRGLAB\n\n**Paramètres évoqués :**\n- Accès à l'essai au bleu\n\n**Fonctionnalités impactées :**\n- Accès à l'essai au bleu\n\n**Conditions spécifiques :**\n- Aucune condition spécifique mentionnée\n\n### 3. Fil de discussion (filtrée, nettoyée, classée)\n\n**Intervenant : Client**\n**Date : 03/04/2025 08:34**\n**Contenu :**\nBonjour,\nJe ne parviens pas à accéder à lessai au bleu.\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)\n\n**Intervenant : Support**\n**Date : 03/04/2025 12:17**\n**Contenu :**\nBonjour,\nPouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :\nhttps://zk1.brg-lab.com/\nVoici ce que vous devriez voir affiché :\nSi ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?\nJe reste à votre entière disposition pour toute information complémentaire.\nCordialement,\n---\nSupport technique\n- image.png (image/png) [ID: 145453]\n\n**Intervenant : Client**\n**Date : 03/04/2025 12:21**\n**Contenu :**\nBonjour,\nLe problème sest résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : ladresse fonctionne\n\n### 4. Éléments liés à l'analyse visuelle\n\n**Nombre d'images attachées :**\n- 2 images attachées\n\n**Références aux interfaces ou options à visualiser :**\n- Accès à l'essai au bleu\n- Page https://zk1.brg-lab.com/\n\n**Points à vérifier dans les captures :**\n- Vérifier l'accès à l'essai au bleu\n- Vérifier l'affichage de la page https://zk1.brg-lab.com/",
"metadata": {
"timestamp": "20250417_172838",
"timestamp": "20250418_115523",
"source_agent": "AgentTicketAnalyser",
"ticket_id": "T11143",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.1,
"top_p": 0.2,
"max_tokens": 7000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
"max_tokens": 7000
}
}
}

View File

@ -1,4 +1,26 @@
[
{
"is_relevant": true,
"reason": "Oui.\n\nL'image montre une capture d'écran d'une interface web liée à l'installation et à la configuration d'un logiciel (Tomcat), ce qui est pertinent pour un support technique.",
"raw_response": "Oui.\n\nL'image montre une capture d'écran d'une interface web liée à l'installation et à la configuration d'un logiciel (Tomcat), ce qui est pertinent pour un support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250418_120232",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
{
"is_relevant": true,
"reason": "Oui.\nL'image montre une capture d'écran d'une interface logicielle de BRG-LAB, ce qui est pertinent pour un ticket de support technique.",
@ -6,7 +28,7 @@
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image_145435.png",
"image_name": "image_145435.png",
"timestamp": "20250417_105321",
"timestamp": "20250418_120238",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
@ -23,12 +45,12 @@
},
{
"is_relevant": false,
"reason": "Non.\n\nL'image montre uniquement le logo de la société CBAO, ce qui n'est pas pertinent pour un ticket de support technique.",
"raw_response": "Non.\n\nL'image montre uniquement le logo de la société CBAO, ce qui n'est pas pertinent pour un ticket de support technique.",
"reason": "Non.\n\nCette image est un logo ou une image de marque (CBAO), ce qui n'est pas pertinent pour un ticket de support technique.",
"raw_response": "Non.\n\nCette image est un logo ou une image de marque (CBAO), ce qui n'est pas pertinent pour un ticket de support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg",
"image_name": "543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg",
"timestamp": "20250417_105329",
"timestamp": "20250418_120246",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
@ -45,34 +67,12 @@
},
{
"is_relevant": false,
"reason": "Non.\nL'image montre un logo ou une image de marque, ce qui n'est pas pertinent pour un ticket de support technique.",
"raw_response": "Non.\nL'image montre un logo ou une image de marque, ce qui n'est pas pertinent pour un ticket de support technique.",
"reason": "Non.\n\nL'image montre un logo ou une illustration liée à une marque ou une entreprise, sans rapport direct avec un logiciel, une interface technique, ou un problème informatique.",
"raw_response": "Non.\n\nL'image montre un logo ou une illustration liée à une marque ou une entreprise, sans rapport direct avec un logiciel, une interface technique, ou un problème informatique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif",
"image_name": "a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif",
"timestamp": "20250417_105331",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
{
"is_relevant": true,
"reason": "Oui.\nL'image montre une capture d'écran d'une page web liée à l'installation et à la configuration de Tomcat, ce qui est pertinent pour un support technique logiciel.",
"raw_response": "Oui.\nL'image montre une capture d'écran d'une page web liée à l'installation et à la configuration de Tomcat, ce qui est pertinent pour un support technique logiciel.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250417_153016",
"timestamp": "20250418_120257",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,

217
test_analyse_image_large.py Normal file
View File

@ -0,0 +1,217 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import time
import logging
import json
import traceback
from datetime import datetime
# Import des agents
from agents.mistral_large.agent_ticket_analyser import AgentTicketAnalyser
from agents.pixtral_large.agent_image_sorter import AgentImageSorter
from agents.pixtral_large.agent_image_analyser import AgentImageAnalyser
# Import des modèles LLM
from llm_classes.mistral_large import MistralLarge
from llm_classes.pixtral_large import PixtralLarge
# Import pour filtrer les images dupliquées
from utils.image_dedup import filtrer_images_uniques
# Configuration du logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s',
filename='test_image_analyse.log', filemode='w')
logger = logging.getLogger("TestImageAnalyse")
def test_image_analyse(ticket_id):
"""
Exécute l'analyse d'un ticket, le tri des images et l'analyse d'images contextualisée
Args:
ticket_id: Identifiant du ticket à traiter (obligatoire)
"""
if not ticket_id:
logger.error("Erreur: Aucun ID de ticket fourni.")
print("ERREUR: Vous devez fournir un ID de ticket comme argument.")
return
# Vérifier que le dossier output existe
if not os.path.exists("output/"):
logger.error("Le dossier output/ n'existe pas")
print("ERREUR: Le dossier output/ n'existe pas")
return
# Vérifier que le ticket existe
ticket_path = os.path.join("output", f"ticket_{ticket_id}")
if not os.path.exists(ticket_path):
logger.error(f"Le ticket {ticket_id} n'existe pas")
print(f"ERREUR: Le ticket {ticket_id} n'existe pas")
return
print(f"Ticket à traiter: {ticket_id}")
# Initialisation des LLM
print("Initialisation des modèles LLM...")
start_time = time.time()
# Mistral Large pour l'analyse de ticket
ticket_llm = MistralLarge()
logger.info("LLM MistralLarge initialisé pour l'analyse du ticket")
# Pixtral Large pour le tri et l'analyse d'images
image_sorter_llm = PixtralLarge()
logger.info("LLM PixtralLarge initialisé pour le tri d'images")
image_analyser_llm = PixtralLarge()
logger.info("LLM PixtralLarge initialisé pour l'analyse d'images")
llm_init_time = time.time() - start_time
print(f"Tous les modèles LLM ont été initialisés en {llm_init_time:.2f} secondes")
# Création des agents
print("Création des agents...")
ticket_agent = AgentTicketAnalyser(ticket_llm)
image_sorter = AgentImageSorter(image_sorter_llm)
image_analyser = AgentImageAnalyser(image_analyser_llm)
print("Tous les agents ont été créés")
# ÉTAPE 1: Trouver l'extraction la plus récente du ticket
extractions = [d for d in os.listdir(ticket_path) if os.path.isdir(os.path.join(ticket_path, d)) and d.startswith(ticket_id)]
if not extractions:
logger.error(f"Aucune extraction trouvée pour le ticket {ticket_id}")
print(f"ERREUR: Aucune extraction trouvée pour le ticket {ticket_id}")
return
# Trier par ordre décroissant pour avoir la plus récente en premier
extractions.sort(reverse=True)
latest_extraction = extractions[0]
extraction_path = os.path.join(ticket_path, latest_extraction)
print(f"Utilisation de l'extraction: {latest_extraction}")
# ÉTAPE 2: Chercher le fichier JSON du ticket
rapport_dir = os.path.join(extraction_path, f"{ticket_id}_rapports")
# Chercher dans le répertoire des rapports
json_file = None
if os.path.exists(rapport_dir):
for file in os.listdir(rapport_dir):
if file.lower().endswith('.json'):
json_file = os.path.join(rapport_dir, file)
break
# Si pas trouvé, chercher directement dans l'extraction
if not json_file:
for file in os.listdir(extraction_path):
if file.lower().endswith('.json') and ticket_id in file:
json_file = os.path.join(extraction_path, file)
break
if not json_file:
logger.error(f"Aucun fichier JSON trouvé pour le ticket {ticket_id}")
print(f"ERREUR: Aucun fichier JSON trouvé pour le ticket {ticket_id}")
return
print(f"Fichier JSON du ticket trouvé: {os.path.basename(json_file)}")
# ÉTAPE 3: Charger les données du ticket
try:
with open(json_file, 'r', encoding='utf-8') as f:
ticket_data = json.load(f)
print("Données du ticket chargées avec succès")
except Exception as e:
logger.error(f"Erreur lors du chargement du fichier JSON: {e}")
print(f"ERREUR: Impossible de charger le fichier JSON: {e}")
return
# Ajouter le code du ticket si absent
if "code" not in ticket_data:
ticket_data["code"] = ticket_id
# ÉTAPE 4: Analyse du ticket
print("Analyse du ticket en cours...")
try:
ticket_analysis = ticket_agent.executer(ticket_data)
print(f"Analyse du ticket terminée: {len(ticket_analysis) if ticket_analysis else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse du ticket: {e}")
print(f"ERREUR: Impossible d'analyser le ticket: {e}")
ticket_analysis = "Erreur d'analyse du ticket"
# ÉTAPE 5: Recherche et tri des images
attachments_dir = os.path.join(extraction_path, "attachments")
if not os.path.exists(attachments_dir):
logger.warning(f"Répertoire des pièces jointes non trouvé: {attachments_dir}")
print("AVERTISSEMENT: Aucune pièce jointe trouvée pour ce ticket")
return
# Récupérer et filtrer les images
images = [f for f in os.listdir(attachments_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]
image_paths = [os.path.join(attachments_dir, img) for img in images]
image_paths_uniques = filtrer_images_uniques(image_paths)
images = [os.path.basename(p) for p in image_paths_uniques]
print(f"Images trouvées: {len(images)}")
# ÉTAPE 6: Tri des images
relevant_images = []
for img in images:
img_path = os.path.join(attachments_dir, img)
print(f"Évaluation de l'image: {img}")
try:
sorting_result = image_sorter.executer(img_path)
is_relevant = sorting_result.get("is_relevant", False)
reason = sorting_result.get("reason", "")
if is_relevant:
print(f" => Pertinente: {reason[:50]}...")
relevant_images.append(img_path)
else:
print(f" => Non pertinente: {reason[:50]}...")
except Exception as e:
logger.error(f"Erreur lors du tri de l'image {img}: {e}")
print(f"ERREUR: Impossible de trier l'image {img}: {e}")
print(f"Images pertinentes trouvées: {len(relevant_images)}/{len(images)}")
# ÉTAPE 7: Analyse des images pertinentes avec contexte
if relevant_images:
print("Analyse des images pertinentes avec contexte...")
for img_path in relevant_images:
img_name = os.path.basename(img_path)
print(f"Analyse approfondie de l'image: {img_name}")
try:
analysis_result = image_analyser.executer(img_path, contexte=ticket_analysis)
print(f" => Analyse terminée: {len(analysis_result.get('analyse', '')) if analysis_result else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse de l'image {img_name}: {e}")
print(f"ERREUR: Impossible d'analyser l'image {img_name}: {e}")
else:
print("Aucune image pertinente à analyser")
print(f"\nProcessus d'analyse terminé avec succès.")
if __name__ == "__main__":
print("Démarrage du test d'analyse d'images contextualisée")
# Vérifier si un ID de ticket est passé en argument
ticket_id = None
if len(sys.argv) > 1:
ticket_id = sys.argv[1]
print(f"ID de ticket fourni en argument: {ticket_id}")
else:
print("ERREUR: Vous devez fournir un ID de ticket comme argument.")
sys.exit(1)
test_image_analyse(ticket_id)
print("Test terminé")

View File

@ -0,0 +1,82 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script pour tester le workflow d'analyse d'images avec contexte.
Utilise la structure modulaire créée dans le répertoire tests/.
"""
import sys
import os
import argparse
import logging
# Import du workflow
from tests.workflows.image_analyser_workflow import execute_workflow
def main():
# Configuration de l'analyseur d'arguments
parser = argparse.ArgumentParser(description="Tester le workflow d'analyse d'images avec contexte")
parser.add_argument("ticket_id", help="ID du ticket à analyser (ex: T1234)")
parser.add_argument("--output_dir", default="output", help="Répertoire de sortie contenant les tickets")
parser.add_argument("--text_model", default="mistral_large", help="Modèle LLM à utiliser pour l'analyse de texte")
parser.add_argument("--vision_model", default="pixtral_large", help="Modèle LLM à utiliser pour l'analyse d'image")
parser.add_argument("--verbose", "-v", action="store_true", help="Afficher plus d'informations")
# Analyser les arguments
args = parser.parse_args()
# Configurer le logging
log_level = logging.DEBUG if args.verbose else logging.INFO
logging.basicConfig(
level=log_level,
format='%(asctime)s - %(levelname)s - %(name)s - %(message)s',
handlers=[
logging.FileHandler(f"image_analyse_workflow_{args.ticket_id}.log"),
logging.StreamHandler()
]
)
# Vérifier que le ticket existe
ticket_path = os.path.join(args.output_dir, f"ticket_{args.ticket_id}")
if not os.path.exists(ticket_path):
print(f"ERREUR: Le ticket {args.ticket_id} n'existe pas dans {args.output_dir}")
return 1
# Afficher les informations de début
print("="*80)
print(f"TEST DU WORKFLOW D'ANALYSE D'IMAGES AVEC CONTEXTE")
print(f"Ticket: {args.ticket_id}")
print(f"Modèle texte: {args.text_model}")
print(f"Modèle vision: {args.vision_model}")
print("="*80)
print()
# Exécuter le workflow
results = execute_workflow(
ticket_id=args.ticket_id,
output_dir=args.output_dir,
text_model=args.text_model,
vision_model=args.vision_model
)
# Afficher un résumé des résultats
if "error" in results:
print(f"\nErreur lors de l'exécution du workflow: {results['error']}")
print(f"Étape en échec: {results.get('stage', 'inconnue')}")
return 1
print("\n" + "="*80)
print("RÉSUMÉ DU WORKFLOW")
print("="*80)
print(f"Ticket: {results['ticket_id']}")
print(f"Analyse du ticket: {len(results['ticket_analysis']) if results['ticket_analysis'] else 0} caractères")
print(f"Images totales: {results['images_count']}")
print(f"Images pertinentes: {len(results['relevant_images'])}")
print(f"Images analysées: {len(results['analysis_results'])}")
print(f"Temps d'exécution: {results['execution_time']:.2f} secondes")
print("\nWorkflow exécuté avec succès!")
return 0
if __name__ == "__main__":
sys.exit(main())

6
tests/__init__.py Normal file
View File

@ -0,0 +1,6 @@
"""
Package de tests pour l'application d'analyse de tickets.
Ce package fournit une structure modulaire pour les différents tests.
"""
from tests.common import *

4
tests/agents/__init__.py Normal file
View File

@ -0,0 +1,4 @@
"""
Modules de test spécifiques aux agents.
Ce paquet contient les tests unitaires pour les différents agents LLM.
"""

4
tests/common/__init__.py Normal file
View File

@ -0,0 +1,4 @@
"""
Modules communs pour les tests de l'application.
Ce paquet contient les fonctionnalités partagées par les différents tests.
"""

View File

@ -0,0 +1,137 @@
"""
Factory pour les agents LLM utilisés dans les tests.
Centralise l'initialisation des agents pour éviter la duplication de code.
"""
import logging
import time
from typing import Dict, Any, Optional, List, Tuple, Union
# Import des agents disponibles
from agents.mistral_large.agent_ticket_analyser import AgentTicketAnalyser
from agents.pixtral_large.agent_image_sorter import AgentImageSorter
from agents.pixtral_large.agent_image_analyser import AgentImageAnalyser
from agents.mistral_large.agent_report_generator import AgentReportGenerator
# Import de la factory LLM
from tests.common.llm_factory import create_llm, get_best_text_model, get_best_vision_model
logger = logging.getLogger("AgentFactory")
def create_ticket_analyser(llm=None):
"""
Crée un agent d'analyse de tickets.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle texte disponible)
Returns:
Agent d'analyse de tickets
"""
if llm is None:
llm = get_best_text_model()
logger.info("Création de l'agent d'analyse de tickets")
start_time = time.time()
agent = AgentTicketAnalyser(llm)
init_time = time.time() - start_time
logger.info(f"Agent d'analyse de tickets créé en {init_time:.2f} secondes")
return agent
def create_image_sorter(llm=None):
"""
Crée un agent de tri d'images.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle vision disponible)
Returns:
Agent de tri d'images
"""
if llm is None:
llm = get_best_vision_model()
logger.info("Création de l'agent de tri d'images")
start_time = time.time()
agent = AgentImageSorter(llm)
init_time = time.time() - start_time
logger.info(f"Agent de tri d'images créé en {init_time:.2f} secondes")
return agent
def create_image_analyser(llm=None):
"""
Crée un agent d'analyse d'images.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle vision disponible)
Returns:
Agent d'analyse d'images
"""
if llm is None:
llm = get_best_vision_model()
logger.info("Création de l'agent d'analyse d'images")
start_time = time.time()
agent = AgentImageAnalyser(llm)
init_time = time.time() - start_time
logger.info(f"Agent d'analyse d'images créé en {init_time:.2f} secondes")
return agent
def create_report_generator(llm=None):
"""
Crée un agent de génération de rapports.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle texte disponible)
Returns:
Agent de génération de rapports
"""
if llm is None:
llm = get_best_text_model()
logger.info("Création de l'agent de génération de rapports")
start_time = time.time()
agent = AgentReportGenerator(llm)
init_time = time.time() - start_time
logger.info(f"Agent de génération de rapports créé en {init_time:.2f} secondes")
return agent
def create_all_agents(text_llm=None, vision_llm=None) -> Dict[str, Any]:
"""
Crée tous les agents nécessaires.
Args:
text_llm: Modèle LLM pour les agents texte
vision_llm: Modèle LLM pour les agents vision
Returns:
Dictionnaire contenant tous les agents
"""
if text_llm is None:
text_llm = get_best_text_model()
if vision_llm is None:
vision_llm = get_best_vision_model()
agents = {
"ticket_analyser": create_ticket_analyser(text_llm),
"image_sorter": create_image_sorter(vision_llm),
"image_analyser": create_image_analyser(vision_llm),
"report_generator": create_report_generator(text_llm)
}
return agents

111
tests/common/llm_factory.py Normal file
View File

@ -0,0 +1,111 @@
"""
Factory pour les modèles LLM utilisés dans les tests.
Centralise l'initialisation des modèles pour éviter la duplication de code.
"""
import logging
import time
from typing import Dict, Any, Optional, Type, List, Tuple
# Import des modèles LLM disponibles
from llm_classes.mistral_large import MistralLarge
from llm_classes.mistral_medium import MistralMedium
from llm_classes.pixtral_large import PixtralLarge
from llm_classes.pixtral_12b import Pixtral12b
from llm_classes.deepseek import DeepSeek
from llm_classes.llama_vision import LlamaVision
from llm_classes.qwen2_5 import Qwen2_5
logger = logging.getLogger("LLMFactory")
# Mapping des noms de modèles aux classes
LLM_CLASSES = {
"mistral_large": MistralLarge,
"mistral_medium": MistralMedium,
"pixtral_large": PixtralLarge,
"pixtral12b": Pixtral12b,
"deepseek": DeepSeek,
"llama_vision": LlamaVision,
"qwen2_5": Qwen2_5
}
# Catégories de modèles par capacité
TEXT_MODELS = ["mistral_large", "mistral_medium", "deepseek", "qwen2_5"]
VISION_MODELS = ["pixtral_large", "pixtral12b", "llama_vision"]
def create_llm(model_name: str, **kwargs) -> Any:
"""
Crée une instance d'un modèle LLM spécifique.
Args:
model_name: Nom du modèle à créer
**kwargs: Arguments supplémentaires à passer au constructeur
Returns:
Instance du modèle LLM demandé
Raises:
ValueError: Si le modèle demandé n'existe pas
"""
if model_name not in LLM_CLASSES:
raise ValueError(f"Modèle LLM inconnu: {model_name}. Options disponibles: {', '.join(LLM_CLASSES.keys())}")
logger.info(f"Initialisation du modèle {model_name}")
start_time = time.time()
model = LLM_CLASSES[model_name](**kwargs)
init_time = time.time() - start_time
logger.info(f"Modèle {model_name} initialisé en {init_time:.2f} secondes")
return model
def create_multiple_llms(model_names: List[str], **kwargs) -> Dict[str, Any]:
"""
Crée plusieurs instances de modèles LLM.
Args:
model_names: Liste des noms de modèles à créer
**kwargs: Arguments supplémentaires à passer aux constructeurs
Returns:
Dictionnaire avec les noms de modèles en clés et les instances en valeurs
"""
models = {}
for model_name in model_names:
models[model_name] = create_llm(model_name, **kwargs)
return models
def get_best_text_model() -> Any:
"""
Retourne le meilleur modèle texte disponible.
Returns:
Instance du meilleur modèle texte
"""
for model_name in ["mistral_large", "qwen2_5", "deepseek", "mistral_medium"]:
try:
return create_llm(model_name)
except Exception as e:
logger.warning(f"Impossible d'initialiser {model_name}: {e}")
# Si aucun modèle n'a pu être initialisé
raise ValueError("Aucun modèle texte n'a pu être initialisé")
def get_best_vision_model() -> Any:
"""
Retourne le meilleur modèle multimodal (vision) disponible.
Returns:
Instance du meilleur modèle vision
"""
for model_name in ["pixtral_large", "pixtral12b", "llama_vision"]:
try:
return create_llm(model_name)
except Exception as e:
logger.warning(f"Impossible d'initialiser {model_name}: {e}")
# Si aucun modèle n'a pu être initialisé
raise ValueError("Aucun modèle vision n'a pu être initialisé")

View File

@ -0,0 +1,158 @@
"""
Utilitaires pour la gestion des tickets dans les tests.
"""
import os
import json
import logging
from typing import Dict, Any, Optional, List, Tuple
logger = logging.getLogger("TicketUtils")
def get_ticket_info(ticket_id: str, output_dir: str = "output") -> Dict[str, Any]:
"""
Récupère les informations de base sur un ticket.
Args:
ticket_id: ID du ticket (ex: T1234)
output_dir: Répertoire de base contenant les tickets
Returns:
Dictionnaire avec les informations sur le ticket
Raises:
FileNotFoundError: Si le ticket n'existe pas
"""
ticket_path = os.path.join(output_dir, f"ticket_{ticket_id}")
if not os.path.exists(ticket_path):
raise FileNotFoundError(f"Le ticket {ticket_id} n'existe pas dans {output_dir}")
# Chercher les extractions
extractions = [d for d in os.listdir(ticket_path)
if os.path.isdir(os.path.join(ticket_path, d)) and d.startswith(ticket_id)]
if not extractions:
raise FileNotFoundError(f"Aucune extraction trouvée pour le ticket {ticket_id}")
# Trier par ordre décroissant pour avoir la plus récente en premier
extractions.sort(reverse=True)
latest_extraction = extractions[0]
extraction_path = os.path.join(ticket_path, latest_extraction)
# Vérifier s'il y a des pièces jointes
attachments_path = os.path.join(extraction_path, "attachments")
has_attachments = os.path.exists(attachments_path)
if has_attachments:
attachments = [f for f in os.listdir(attachments_path)
if os.path.isfile(os.path.join(attachments_path, f))]
images = [f for f in attachments
if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]
else:
attachments = []
images = []
return {
"ticket_id": ticket_id,
"path": ticket_path,
"extraction": latest_extraction,
"extraction_path": extraction_path,
"has_attachments": has_attachments,
"attachments_path": attachments_path if has_attachments else None,
"attachments_count": len(attachments),
"images_count": len(images)
}
def get_ticket_json(ticket_id: str, output_dir: str = "output") -> Tuple[Optional[str], Optional[Dict[str, Any]]]:
"""
Récupère le fichier JSON d'un ticket et son contenu.
Args:
ticket_id: ID du ticket (ex: T1234)
output_dir: Répertoire de base contenant les tickets
Returns:
Tuple avec (chemin_fichier, contenu_json) ou (None, None) si non trouvé
"""
try:
ticket_info = get_ticket_info(ticket_id, output_dir)
except FileNotFoundError:
logger.error(f"Ticket {ticket_id} non trouvé")
return None, None
extraction_path = ticket_info["extraction_path"]
rapport_dir = os.path.join(extraction_path, f"{ticket_id}_rapports")
# Chercher dans le répertoire des rapports
json_file = None
if os.path.exists(rapport_dir):
for file in os.listdir(rapport_dir):
if file.lower().endswith('.json'):
json_file = os.path.join(rapport_dir, file)
break
# Si pas trouvé, chercher directement dans l'extraction
if not json_file:
for file in os.listdir(extraction_path):
if file.lower().endswith('.json') and ticket_id in file:
json_file = os.path.join(extraction_path, file)
break
if not json_file:
logger.warning(f"Aucun fichier JSON trouvé pour le ticket {ticket_id}")
return None, None
# Charger le contenu du JSON
try:
with open(json_file, 'r', encoding='utf-8') as f:
json_data = json.load(f)
# Ajouter le code du ticket si absent
if "code" not in json_data:
json_data["code"] = ticket_id
return json_file, json_data
except Exception as e:
logger.error(f"Erreur lors du chargement du JSON: {e}")
return json_file, None
def get_ticket_images(ticket_id: str, output_dir: str = "output", filter_duplicates: bool = True) -> List[str]:
"""
Récupère la liste des images d'un ticket.
Args:
ticket_id: ID du ticket (ex: T1234)
output_dir: Répertoire de base contenant les tickets
filter_duplicates: Si True, filtre les images en double
Returns:
Liste des chemins d'accès aux images
"""
try:
ticket_info = get_ticket_info(ticket_id, output_dir)
except FileNotFoundError:
logger.error(f"Ticket {ticket_id} non trouvé")
return []
if not ticket_info["has_attachments"]:
return []
attachments_path = ticket_info["attachments_path"]
# Récupérer les images
images = [f for f in os.listdir(attachments_path)
if os.path.isfile(os.path.join(attachments_path, f)) and
f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]
image_paths = [os.path.join(attachments_path, img) for img in images]
# Filtrer les doublons si demandé
if filter_duplicates and image_paths:
try:
from utils.image_dedup import filtrer_images_uniques
image_paths = filtrer_images_uniques(image_paths)
except ImportError:
logger.warning("Module utils.image_dedup non disponible, pas de filtrage des doublons")
return image_paths

View File

@ -0,0 +1,4 @@
"""
Modules de test pour les workflows complets ou partiels.
Ce paquet contient les tests de différentes séquences d'agents.
"""

View File

@ -0,0 +1,211 @@
"""
Workflow d'analyse d'images avec contexte.
Ce module implémente le workflow suivant:
1. Analyse du ticket
2. Tri des images
3. Analyse des images pertinentes avec le contexte du ticket
"""
import logging
import time
import sys
from typing import Dict, Any, Optional, List, Tuple
# Import des factories
from tests.common.agent_factory import (
create_ticket_analyser,
create_image_sorter,
create_image_analyser
)
from tests.common.llm_factory import create_llm
from tests.common.ticket_utils import get_ticket_json, get_ticket_images
logger = logging.getLogger("ImageAnalyserWorkflow")
def execute_workflow(ticket_id: str, output_dir: str = "output",
text_model: str = "mistral_large",
vision_model: str = "pixtral_large"):
"""
Exécute le workflow d'analyse d'image avec contexte.
Args:
ticket_id: Identifiant du ticket
output_dir: Répertoire contenant les tickets
text_model: Nom du modèle à utiliser pour l'analyse de ticket
vision_model: Nom du modèle à utiliser pour l'analyse d'image
Returns:
Dict avec les résultats du workflow
"""
logger.info(f"Démarrage du workflow pour le ticket {ticket_id}")
print(f"Démarrage du workflow pour le ticket {ticket_id}")
workflow_start = time.time()
# ÉTAPE 1: Initialiser les modèles LLM
try:
print("Initialisation des modèles LLM...")
text_llm = create_llm(text_model)
vision_llm = create_llm(vision_model)
print(f"Modèles initialisés: {text_model}, {vision_model}")
except Exception as e:
logger.error(f"Erreur lors de l'initialisation des modèles: {e}")
print(f"ERREUR: Impossible d'initialiser les modèles: {e}")
return {"error": str(e), "stage": "init_llm"}
# ÉTAPE 2: Initialiser les agents
try:
print("Création des agents...")
ticket_agent = create_ticket_analyser(text_llm)
image_sorter = create_image_sorter(vision_llm)
image_analyser = create_image_analyser(vision_llm)
print("Agents créés avec succès")
except Exception as e:
logger.error(f"Erreur lors de la création des agents: {e}")
print(f"ERREUR: Impossible de créer les agents: {e}")
return {"error": str(e), "stage": "init_agents"}
# ÉTAPE 3: Charger les données du ticket
try:
print("Chargement des données du ticket...")
json_file, ticket_data = get_ticket_json(ticket_id, output_dir)
if not json_file or not ticket_data:
error_msg = f"Impossible de charger les données du ticket {ticket_id}"
logger.error(error_msg)
print(f"ERREUR: {error_msg}")
return {"error": error_msg, "stage": "load_ticket"}
print(f"Données du ticket chargées: {json_file}")
except Exception as e:
logger.error(f"Erreur lors du chargement du ticket: {e}")
print(f"ERREUR: Impossible de charger le ticket: {e}")
return {"error": str(e), "stage": "load_ticket"}
# ÉTAPE 4: Analyser le ticket
try:
print("Analyse du ticket en cours...")
ticket_analysis = ticket_agent.executer(ticket_data)
print(f"Analyse du ticket terminée: {len(ticket_analysis) if ticket_analysis else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse du ticket: {e}")
print(f"ERREUR: Impossible d'analyser le ticket: {e}")
ticket_analysis = f"Erreur d'analyse: {e}"
# ÉTAPE 5: Récupérer et trier les images
try:
print("Récupération et tri des images...")
all_images = get_ticket_images(ticket_id, output_dir)
if not all_images:
print("Aucune image trouvée pour ce ticket")
return {
"ticket_id": ticket_id,
"ticket_analysis": ticket_analysis,
"images_count": 0,
"relevant_images": [],
"analysis_results": {}
}
print(f"Images trouvées: {len(all_images)}")
# Trier les images
relevant_images = []
for img_path in all_images:
print(f"Évaluation de l'image: {img_path}")
try:
sorting_result = image_sorter.executer(img_path)
is_relevant = sorting_result.get("is_relevant", False)
if is_relevant:
print(f" => Pertinente")
relevant_images.append(img_path)
else:
print(f" => Non pertinente")
except Exception as e:
logger.error(f"Erreur lors du tri de l'image {img_path}: {e}")
print(f"ERREUR: Impossible de trier l'image {img_path}: {e}")
print(f"Images pertinentes: {len(relevant_images)}/{len(all_images)}")
except Exception as e:
logger.error(f"Erreur lors de la récupération/tri des images: {e}")
print(f"ERREUR: Impossible de récupérer/trier les images: {e}")
return {"error": str(e), "stage": "sort_images", "ticket_analysis": ticket_analysis}
# ÉTAPE 6: Analyser les images pertinentes avec contexte
analysis_results = {}
if relevant_images:
print("Analyse des images pertinentes avec contexte...")
for img_path in relevant_images:
print(f"Analyse de l'image: {img_path}")
try:
analysis_result = image_analyser.executer(img_path, contexte=ticket_analysis)
analysis_results[img_path] = analysis_result
print(f" => Analyse terminée: {len(analysis_result.get('analyse', '')) if analysis_result else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse de l'image {img_path}: {e}")
print(f"ERREUR: Impossible d'analyser l'image {img_path}: {e}")
analysis_results[img_path] = {"error": str(e)}
else:
print("Aucune image pertinente à analyser")
# Calcul du temps total d'exécution
workflow_time = time.time() - workflow_start
print(f"Workflow terminé en {workflow_time:.2f} secondes")
# Retourner les résultats
return {
"ticket_id": ticket_id,
"ticket_analysis": ticket_analysis,
"images_count": len(all_images),
"relevant_images": relevant_images,
"analysis_results": analysis_results,
"execution_time": workflow_time
}
def main():
# Vérifier les arguments
if len(sys.argv) < 2:
print("ERREUR: Vous devez fournir un ID de ticket")
print("Usage: python -m tests.workflows.image_analyser_workflow <ticket_id> [output_dir] [text_model] [vision_model]")
return 1
# Récupérer les arguments
ticket_id = sys.argv[1]
output_dir = sys.argv[2] if len(sys.argv) > 2 else "output"
text_model = sys.argv[3] if len(sys.argv) > 3 else "mistral_large"
vision_model = sys.argv[4] if len(sys.argv) > 4 else "pixtral_large"
# Configurer le logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(name)s - %(message)s',
handlers=[
logging.FileHandler(f"image_analyser_workflow_{ticket_id}.log"),
logging.StreamHandler()
]
)
# Exécuter le workflow
results = execute_workflow(ticket_id, output_dir, text_model, vision_model)
# Afficher un résumé des résultats
if "error" in results:
print(f"\nErreur lors de l'exécution du workflow: {results['error']}")
print(f"Étape en échec: {results.get('stage', 'inconnue')}")
return 1
print("\nRésumé du workflow:")
print(f"Ticket: {results['ticket_id']}")
print(f"Analyse du ticket: {len(results['ticket_analysis']) if results['ticket_analysis'] else 0} caractères")
print(f"Images totales: {results['images_count']}")
print(f"Images pertinentes: {len(results['relevant_images'])}")
print(f"Images analysées: {len(results['analysis_results'])}")
print(f"Temps d'exécution: {results['execution_time']:.2f} secondes")
return 0
if __name__ == "__main__":
sys.exit(main())