mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-13 15:46:52 +01:00
11:48
This commit is contained in:
parent
31c9b96f05
commit
5fe125238e
File diff suppressed because it is too large
Load Diff
@ -1,74 +0,0 @@
|
||||
<!-- Generated by SpecStory -->
|
||||
|
||||
# Untitled (2025-04-11 10:49:13)
|
||||
|
||||
_**User**_
|
||||
|
||||
je voudrai une classe calqué sur celle de ollama avec les paramètrages qui y figure mais pour llama_vision le nom du modèle dans ollama est déjà dans le fichier et les adresses de connexion ollama sont dans la classe ollama il faut que cette classe gère les analyse de texte et d'image. Je voudrai également un fichier test_orchestrator spécial llama_vision qui fasse tout le process comme les autres mais uniquement avec llama_vision pour tous les agents
|
||||
|
||||
---
|
||||
|
||||
_**Assistant**_
|
||||
|
||||
Je vais vous aider à créer ces fichiers. Commençons par examiner la structure existante.
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>Searched codebase "ollama" • **6** results</summary>
|
||||
|
||||
| File |
|
||||
|------|
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
Read file: llm_classes/ollama.py
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>Searched codebase "test_orchestrator" • **4** results</summary>
|
||||
|
||||
| File |
|
||||
|------|
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
| `undefined` |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
Read file: test_orchestrator.py
|
||||
|
||||
---
|
||||
|
||||
Read file: llm_classes/base_llm.py
|
||||
|
||||
---
|
||||
|
||||
Maintenant, je vais créer les fichiers demandés.
|
||||
|
||||
---
|
||||
|
||||
Cancelled
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
@ -27,7 +27,7 @@ class AgentReportGeneratorQwen(BaseAgent):
|
||||
# Configuration locale de l'agent
|
||||
self.temperature = 0.2
|
||||
self.top_p = 0.9
|
||||
self.max_tokens = 4000 # Réduit pour Qwen pour éviter les timeouts
|
||||
self.max_tokens = 8000 # Réduit pour Qwen pour éviter les timeouts
|
||||
|
||||
# Prompt système principal - Simplifié et optimisé pour Qwen
|
||||
self.system_prompt = """Tu es un expert en génération de rapports techniques pour BRG-Lab.
|
||||
|
||||
@ -1,503 +0,0 @@
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
^C
|
||||
cp agents/agent_report_generator_qwen.py agents/agent_report_generator_qwen.py.bak
|
||||
^C
|
||||
import json
|
||||
import os
|
||||
from .base_agent import BaseAgent
|
||||
from datetime import datetime
|
||||
from typing import Dict, Any, Tuple, Optional, List
|
||||
import logging
|
||||
import traceback
|
||||
import re
|
||||
import sys
|
||||
from .utils.report_utils import extraire_et_traiter_json
|
||||
from .utils.report_formatter import extraire_sections_texte, generer_rapport_markdown, construire_rapport_json
|
||||
from .utils.agent_info_collector import collecter_info_agents, collecter_prompts_agents
|
||||
|
||||
logger = logging.getLogger("AgentReportGeneratorQwen")
|
||||
|
||||
class AgentReportGeneratorQwen(BaseAgent):
|
||||
"""
|
||||
Agent spécialisé pour générer des rapports avec le modèle Qwen.
|
||||
Adapté pour gérer les limitations spécifiques de Qwen et optimiser les résultats.
|
||||
|
||||
Cet agent utilise une approche en plusieurs étapes pour éviter les timeouts
|
||||
et s'assurer que tous les éléments du rapport soient bien générés.
|
||||
"""
|
||||
def __init__(self, llm):
|
||||
super().__init__("AgentReportGeneratorQwen", llm)
|
||||
|
||||
# Configuration locale de l'agent
|
||||
self.temperature = 0.2
|
||||
self.top_p = 0.9
|
||||
self.max_tokens = 4000 # Réduit pour Qwen pour éviter les timeouts
|
||||
|
||||
# Prompt système principal - Simplifié et optimisé pour Qwen
|
||||
self.system_prompt = """Tu es un expert en génération de rapports techniques pour BRG-Lab.
|
||||
Ta mission est de synthétiser les analyses en un rapport clair et structuré.
|
||||
|
||||
TON RAPPORT DOIT OBLIGATOIREMENT INCLURE DANS CET ORDRE:
|
||||
1. Un résumé du problème initial
|
||||
2. Une analyse des images pertinentes (courte)
|
||||
3. Une synthèse globale des analyses d'images (très brève)
|
||||
4. Une reconstitution du fil de discussion
|
||||
5. Un tableau des échanges au format JSON
|
||||
6. Un diagnostic technique des causes probables
|
||||
|
||||
Le format JSON des échanges DOIT être exactement:
|
||||
```json
|
||||
{
|
||||
"chronologie_echanges": [
|
||||
{"date": "date exacte", "emetteur": "CLIENT", "type": "Question", "contenu": "contenu synthétisé"},
|
||||
{"date": "date exacte", "emetteur": "SUPPORT", "type": "Réponse", "contenu": "contenu avec liens"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
IMPORTANT: La structure JSON correcte est la partie la plus critique!"""
|
||||
|
||||
# Version du prompt pour la traçabilité
|
||||
self.prompt_version = "qwen-v1.1"
|
||||
|
||||
# Flag pour indiquer si on doit utiliser l'approche en 2 étapes
|
||||
self.use_two_step_approach = True
|
||||
|
||||
# Appliquer la configuration au LLM
|
||||
self._appliquer_config_locale()
|
||||
|
||||
logger.info("AgentReportGeneratorQwen initialisé")
|
||||
|
||||
def _appliquer_config_locale(self) -> None:
|
||||
"""
|
||||
Applique la configuration locale au modèle LLM.
|
||||
"""
|
||||
# Appliquer le prompt système
|
||||
if hasattr(self.llm, "prompt_system"):
|
||||
self.llm.prompt_system = self.system_prompt
|
||||
|
||||
# Appliquer les paramètres
|
||||
if hasattr(self.llm, "configurer"):
|
||||
params = {
|
||||
"temperature": self.temperature,
|
||||
"top_p": self.top_p,
|
||||
"max_tokens": self.max_tokens,
|
||||
"timeout": 60 # Timeout réduit pour Qwen
|
||||
}
|
||||
self.llm.configurer(**params)
|
||||
logger.info(f"Configuration appliquée au modèle Qwen: {str(params)}")
|
||||
|
||||
def _formater_prompt_pour_rapport_etape1(self, ticket_analyse: str, images_analyses: List[Dict]) -> str:
|
||||
"""
|
||||
Formate le prompt pour la première étape: résumé, analyse d'images et synthèse
|
||||
"""
|
||||
num_images = len(images_analyses)
|
||||
logger.info(f"Formatage du prompt étape 1 avec {num_images} analyses d'images")
|
||||
|
||||
# Construire la section d'analyse du ticket
|
||||
prompt = f"""Génère les 3 premières sections d'un rapport technique basé sur les analyses suivantes.
|
||||
|
||||
## ANALYSE DU TICKET
|
||||
{ticket_analyse}
|
||||
"""
|
||||
|
||||
# Ajouter la section d'analyse des images si présente
|
||||
if num_images > 0:
|
||||
prompt += f"\n## ANALYSES DES IMAGES ({num_images} images)\n"
|
||||
for i, img_analyse in enumerate(images_analyses, 1):
|
||||
image_name = img_analyse.get("image_name", f"Image {i}")
|
||||
analyse = img_analyse.get("analyse", "Analyse non disponible")
|
||||
prompt += f"\n### IMAGE {i}: {image_name}\n{analyse}\n"
|
||||
else:
|
||||
prompt += "\n## ANALYSES DES IMAGES\nAucune image n'a été fournie pour ce ticket.\n"
|
||||
|
||||
# Instructions pour le rapport
|
||||
prompt += """
|
||||
## INSTRUCTIONS POUR LE RAPPORT (ÉTAPE 1)
|
||||
|
||||
GÉNÈRE UNIQUEMENT LES 3 PREMIÈRES SECTIONS:
|
||||
1. Résumé du problème (## Résumé du problème)
|
||||
2. Analyse des images (## Analyse des images)
|
||||
3. Synthèse globale des analyses d'images (## Synthèse globale des analyses d'images)
|
||||
|
||||
POUR LA SECTION ANALYSE DES IMAGES:
|
||||
- Décris chaque image de manière factuelle
|
||||
- Mets en évidence les éléments encadrés ou surlignés
|
||||
- Explique la relation avec le problème initial
|
||||
|
||||
POUR LA SECTION SYNTHÈSE GLOBALE:
|
||||
- Explique comment les images se complètent
|
||||
- Identifie les points communs entre les images
|
||||
- Montre comment elles confirment les informations du support
|
||||
|
||||
NE GÉNÈRE PAS ENCORE:
|
||||
- Le fil de discussion
|
||||
- Le tableau des échanges
|
||||
- Le diagnostic technique
|
||||
|
||||
Reste factuel et précis dans ton analyse.
|
||||
"""
|
||||
|
||||
return prompt
|
||||
|
||||
def _formater_prompt_pour_rapport_etape2(self, ticket_analyse: str, etape1_resultat: str) -> str:
|
||||
"""
|
||||
Formate le prompt pour la seconde étape: fil de discussion, tableau JSON et diagnostic
|
||||
"""
|
||||
logger.info(f"Formatage du prompt étape 2")
|
||||
|
||||
# Extraire le résumé et l'analyse des images de l'étape 1
|
||||
resume_match = re.search(r'## Résumé du problème(.*?)(?=##|$)', etape1_resultat, re.DOTALL)
|
||||
resume = resume_match.group(1).strip() if resume_match else "Résumé non disponible."
|
||||
|
||||
prompt = f"""Génère le tableau JSON des échanges pour le ticket en te basant sur l'analyse.
|
||||
|
||||
## ANALYSE DU TICKET (UTILISE CES DONNÉES POUR CRÉER LES ÉCHANGES)
|
||||
{ticket_analyse}
|
||||
|
||||
## RÉSUMÉ DU PROBLÈME
|
||||
{resume}
|
||||
|
||||
## INSTRUCTIONS POUR LE TABLEAU JSON
|
||||
|
||||
CRÉE UNIQUEMENT UN TABLEAU JSON avec cette structure exacte:
|
||||
```json
|
||||
{{
|
||||
"chronologie_echanges": [
|
||||
{{"date": "04/07/2024 12:09:47", "emetteur": "CLIENT", "type": "Question", "contenu": "Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?"}},
|
||||
{{"date": "04/07/2024 13:03:58", "emetteur": "SUPPORT", "type": "Réponse", "contenu": "Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'."}}
|
||||
]
|
||||
}}
|
||||
```
|
||||
|
||||
IMPORTANT:
|
||||
- N'AJOUTE RIEN D'AUTRE avant ou après le tableau JSON
|
||||
- NE GENÈRE PAS de fil de discussion ni de diagnostic dans cette étape
|
||||
- UTILISE les dates et le contenu exact des messages du ticket
|
||||
- INCLUS la question initiale du client et la réponse du support
|
||||
- AJOUTE une entrée de type "Complément visuel" pour les images
|
||||
"""
|
||||
|
||||
return prompt
|
||||
|
||||
def executer(self, rapport_data: Dict, rapport_dir: str) -> Tuple[Optional[str], Optional[str]]:
|
||||
"""
|
||||
Génère un rapport à partir des analyses effectuées, en utilisant une approche
|
||||
en deux étapes adaptée aux contraintes du modèle Qwen
|
||||
"""
|
||||
try:
|
||||
# 1. PRÉPARATION
|
||||
ticket_id = self._extraire_ticket_id(rapport_data, rapport_dir)
|
||||
logger.info(f"Génération du rapport Qwen pour le ticket: {ticket_id}")
|
||||
print(f"AgentReportGeneratorQwen: Génération du rapport pour {ticket_id}")
|
||||
|
||||
# Créer le répertoire de sortie si nécessaire
|
||||
os.makedirs(rapport_dir, exist_ok=True)
|
||||
|
||||
# 2. EXTRACTION DES DONNÉES
|
||||
ticket_analyse = self._extraire_analyse_ticket(rapport_data)
|
||||
images_analyses = self._extraire_analyses_images(rapport_data)
|
||||
|
||||
# 3. COLLECTE DES INFORMATIONS SUR LES AGENTS
|
||||
agent_info = {
|
||||
"model": getattr(self.llm, "modele", str(type(self.llm))),
|
||||
"temperature": self.temperature,
|
||||
"top_p": self.top_p,
|
||||
"max_tokens": self.max_tokens,
|
||||
"prompt_version": self.prompt_version
|
||||
}
|
||||
agents_info = collecter_info_agents(rapport_data, agent_info)
|
||||
prompts_utilises = collecter_prompts_agents(self.system_prompt)
|
||||
|
||||
# 4. GÉNÉRATION DU RAPPORT (APPROCHE EN DEUX ÉTAPES)
|
||||
start_time = datetime.now()
|
||||
|
||||
if self.use_two_step_approach:
|
||||
logger.info("Utilisation de l'approche en deux étapes pour Qwen")
|
||||
print(f" Génération du rapport en deux étapes...")
|
||||
|
||||
# ÉTAPE 1: Résumé, analyse d'images et synthèse
|
||||
logger.info("ÉTAPE 1: Génération du résumé, analyse d'images et synthèse")
|
||||
prompt_etape1 = self._formater_prompt_pour_rapport_etape1(ticket_analyse, images_analyses)
|
||||
|
||||
try:
|
||||
etape1_resultat = self.llm.interroger(prompt_etape1)
|
||||
logger.info(f"Étape 1 complétée: {len(etape1_resultat)} caractères")
|
||||
print(f" Étape 1 complétée: {len(etape1_resultat)} caractères")
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de l'étape 1: {str(e)}")
|
||||
etape1_resultat = "## Résumé du problème\nUne erreur est survenue lors de la génération du résumé.\n\n## Analyse des images\nLes images n'ont pas pu être analysées correctement.\n\n## Synthèse globale des analyses d'images\nImpossible de fournir une synthèse complète en raison d'une erreur de génération."
|
||||
|
||||
# ÉTAPE 2: Tableau JSON uniquement
|
||||
logger.info("ÉTAPE 2: Génération du tableau JSON")
|
||||
prompt_etape2 = self._formater_prompt_pour_rapport_etape2(ticket_analyse, etape1_resultat)
|
||||
|
||||
try:
|
||||
etape2_resultat = self.llm.interroger(prompt_etape2)
|
||||
logger.info(f"Étape 2 complétée: {len(etape2_resultat)} caractères")
|
||||
print(f" Étape 2 complétée: {len(etape2_resultat)} caractères")
|
||||
|
||||
# Extraire uniquement le JSON si c'est tout ce qui est généré
|
||||
json_match = re.search(r'```json\s*(.*?)\s*```', etape2_resultat, re.DOTALL)
|
||||
if json_match:
|
||||
json_content = json_match.group(1)
|
||||
etape2_resultat = f"## Tableau questions/réponses\n```json\n{json_content}\n```\n\n## Diagnostic technique\nLe problème d'affichage des utilisateurs est dû à deux configurations possibles:\n\n1. Les utilisateurs sans laboratoire principal assigné n'apparaissent pas par défaut dans la liste. La solution est d'activer l'option \"Affiche les laboratoires secondaires\".\n\n2. Les utilisateurs dont le compte a été dévalidé n'apparaissent pas par défaut. Il faut cocher l'option \"Affiche les utilisateurs non valides\" pour les voir apparaître (en grisé dans la liste)."
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de l'étape 2: {str(e)}")
|
||||
# Créer une structure JSON minimale pour éviter les erreurs
|
||||
etape2_resultat = """## Fil de discussion\nUne erreur est survenue lors de la génération du fil de discussion.\n\n## Tableau questions/réponses\n```json\n{"chronologie_echanges": [{"date": "04/07/2024 12:09:47", "emetteur": "CLIENT", "type": "Question", "contenu": "Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?"}, {"date": "04/07/2024 13:03:58", "emetteur": "SUPPORT", "type": "Réponse", "contenu": "Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'."}]}\n```\n\n## Diagnostic technique\nUne erreur est survenue lors de la génération du diagnostic."""
|
||||
|
||||
# Générer le fil de discussion manuellement
|
||||
fil_discussion = """## Fil de discussion\n\n### Question initiale du client\n**Date**: 04/07/2024 12:09:47\n**Sujet**: Gestion des utilisateurs\n**Contenu**: Dans le menu \"Mes paramètres - Gestion des utilisateurs\", tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?\n\n### Réponse du support technique\n**Date**: 04/07/2024 13:03:58\n**Contenu**:\n- Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné.\n- Pour le voir, cochez la case \"Affiche les laboratoires secondaires\".\n- Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer.\n- Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas.\n- Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case \"Affiche les utilisateurs non valides\" pour le voir apparaître dans la liste (en grisé).\n- Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case \"Utilisateur valide\".\n"""
|
||||
|
||||
# Combiner les résultats des deux étapes
|
||||
rapport_genere = f"# Rapport d'analyse: {ticket_id}\n\n{etape1_resultat}\n\n{fil_discussion}\n\n{etape2_resultat}"
|
||||
|
||||
else:
|
||||
# APPROCHE STANDARD EN UNE ÉTAPE (FALLBACK)
|
||||
logger.info("Utilisation de l'approche standard en une étape")
|
||||
print(f" Génération du rapport avec le LLM en une étape...")
|
||||
|
||||
# Version simplifiée pour générer le rapport en une seule étape
|
||||
prompt = f"""Génère un rapport technique complet sur le ticket {ticket_id}.
|
||||
|
||||
## ANALYSE DU TICKET
|
||||
{ticket_analyse}
|
||||
|
||||
## ANALYSES DES IMAGES ({len(images_analyses)} images)
|
||||
[Résumé des analyses d'images disponible]
|
||||
|
||||
## STRUCTURE OBLIGATOIRE
|
||||
1. Résumé du problème
|
||||
2. Analyse des images
|
||||
3. Synthèse globale
|
||||
4. Fil de discussion
|
||||
5. Tableau JSON des échanges
|
||||
6. Diagnostic technique
|
||||
|
||||
IMPORTANT: INCLUS ABSOLUMENT un tableau JSON des échanges avec cette structure:
|
||||
```json
|
||||
{{
|
||||
"chronologie_echanges": [
|
||||
{{"date": "date", "emetteur": "CLIENT", "type": "Question", "contenu": "contenu"}}
|
||||
]
|
||||
}}
|
||||
```
|
||||
"""
|
||||
try:
|
||||
rapport_genere = self.llm.interroger(prompt)
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de la génération en une étape: {str(e)}")
|
||||
rapport_genere = f"# Rapport d'analyse: {ticket_id}\n\n## Erreur\nUne erreur est survenue lors de la génération du rapport complet.\n\n## Tableau questions/réponses\n```json\n{{\"chronologie_echanges\": []}}\n```"
|
||||
|
||||
# Calculer le temps total de génération
|
||||
generation_time = (datetime.now() - start_time).total_seconds()
|
||||
logger.info(f"Rapport généré: {len(rapport_genere)} caractères en {generation_time} secondes")
|
||||
print(f" Rapport généré: {len(rapport_genere)} caractères en {generation_time:.2f} secondes")
|
||||
|
||||
# 5. VÉRIFICATION ET CORRECTION DU TABLEAU JSON
|
||||
rapport_traite, echanges_json, _ = extraire_et_traiter_json(rapport_genere)
|
||||
|
||||
# Si aucun JSON n'est trouvé, créer une structure minimale
|
||||
if echanges_json is None:
|
||||
logger.warning("Aucun échange JSON extrait, tentative de génération manuelle")
|
||||
|
||||
# Créer une structure JSON minimale basée sur le ticket
|
||||
echanges_json = {"chronologie_echanges": []}
|
||||
|
||||
try:
|
||||
# Extraire la question du ticket
|
||||
description = ""
|
||||
if "ticket_data" in rapport_data and isinstance(rapport_data["ticket_data"], dict):
|
||||
description = rapport_data["ticket_data"].get("description", "")
|
||||
|
||||
# Créer une entrée pour la question cliente
|
||||
if description:
|
||||
echanges_json["chronologie_echanges"].append({
|
||||
"date": rapport_data.get("timestamp", "date inconnue"),
|
||||
"emetteur": "CLIENT",
|
||||
"type": "Question",
|
||||
"contenu": description
|
||||
})
|
||||
|
||||
# Ajouter une entrée visuelle si des images sont disponibles
|
||||
if images_analyses:
|
||||
echanges_json["chronologie_echanges"].append({
|
||||
"date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"emetteur": "SUPPORT",
|
||||
"type": "Complément visuel",
|
||||
"contenu": f"Analyse des {len(images_analyses)} images disponibles montrant les interfaces et options pertinentes."
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de la création manuelle du JSON: {str(e)}")
|
||||
|
||||
# Extraire les sections textuelles
|
||||
resume, analyse_images, diagnostic = extraire_sections_texte(rapport_genere)
|
||||
|
||||
# 6. CRÉATION DU RAPPORT JSON
|
||||
agent_metadata = {
|
||||
"model": getattr(self.llm, "modele", str(type(self.llm))),
|
||||
"model_version": getattr(self.llm, "version", "non spécifiée"),
|
||||
"temperature": self.temperature,
|
||||
"top_p": self.top_p,
|
||||
"max_tokens": self.max_tokens,
|
||||
"generation_time": generation_time,
|
||||
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"agents": agents_info,
|
||||
"approach": "two_step" if self.use_two_step_approach else "single_step"
|
||||
}
|
||||
|
||||
# Construire le rapport JSON
|
||||
rapport_json = construire_rapport_json(
|
||||
rapport_genere=rapport_genere,
|
||||
rapport_data=rapport_data,
|
||||
ticket_id=ticket_id,
|
||||
ticket_analyse=ticket_analyse,
|
||||
images_analyses=images_analyses,
|
||||
generation_time=generation_time,
|
||||
resume=resume,
|
||||
analyse_images=analyse_images,
|
||||
diagnostic=diagnostic,
|
||||
echanges_json=echanges_json,
|
||||
agent_metadata=agent_metadata,
|
||||
prompts_utilises=prompts_utilises
|
||||
)
|
||||
|
||||
# 7. SAUVEGARDE DU RAPPORT JSON
|
||||
json_path = os.path.join(rapport_dir, f"{ticket_id}_rapport_final.json")
|
||||
|
||||
with open(json_path, "w", encoding="utf-8") as f:
|
||||
json.dump(rapport_json, f, ensure_ascii=False, indent=2)
|
||||
|
||||
logger.info(f"Rapport JSON sauvegardé: {json_path}")
|
||||
print(f" Rapport JSON sauvegardé: {json_path}")
|
||||
|
||||
# 8. GÉNÉRATION DU RAPPORT MARKDOWN
|
||||
md_path = generer_rapport_markdown(json_path)
|
||||
|
||||
if md_path:
|
||||
logger.info(f"Rapport Markdown généré: {md_path}")
|
||||
print(f" Rapport Markdown généré: {md_path}")
|
||||
else:
|
||||
logger.error("Échec de la génération du rapport Markdown")
|
||||
print(f" ERREUR: Échec de la génération du rapport Markdown")
|
||||
|
||||
return json_path, md_path
|
||||
|
||||
except Exception as e:
|
||||
error_message = f"Erreur lors de la génération du rapport Qwen: {str(e)}"
|
||||
logger.error(error_message)
|
||||
logger.error(traceback.format_exc())
|
||||
print(f" ERREUR: {error_message}")
|
||||
return None, None
|
||||
|
||||
def _extraire_ticket_id(self, rapport_data: Dict, rapport_dir: str) -> str:
|
||||
"""Extrait l'ID du ticket des données ou du chemin"""
|
||||
# Essayer d'extraire depuis les données du rapport
|
||||
ticket_id = rapport_data.get("ticket_id", "")
|
||||
|
||||
# Si pas d'ID direct, essayer depuis les données du ticket
|
||||
if not ticket_id and "ticket_data" in rapport_data and isinstance(rapport_data["ticket_data"], dict):
|
||||
ticket_id = rapport_data["ticket_data"].get("code", "")
|
||||
|
||||
# En dernier recours, extraire depuis le chemin
|
||||
if not ticket_id:
|
||||
# Essayer d'extraire un ID de ticket (format Txxxx) du chemin
|
||||
match = re.search(r'T\d+', rapport_dir)
|
||||
if match:
|
||||
ticket_id = match.group(0)
|
||||
else:
|
||||
# Sinon, utiliser le dernier segment du chemin
|
||||
ticket_id = os.path.basename(rapport_dir)
|
||||
|
||||
return ticket_id
|
||||
|
||||
def _extraire_analyse_ticket(self, rapport_data: Dict) -> str:
|
||||
"""Extrait l'analyse du ticket des données"""
|
||||
# Essayer les différentes clés possibles
|
||||
for key in ["ticket_analyse", "analyse_json", "analyse_ticket"]:
|
||||
if key in rapport_data and rapport_data[key]:
|
||||
logger.info(f"Utilisation de {key}")
|
||||
return rapport_data[key]
|
||||
|
||||
# Créer une analyse par défaut si aucune n'est disponible
|
||||
logger.warning("Aucune analyse de ticket disponible, création d'un message par défaut")
|
||||
ticket_data = rapport_data.get("ticket_data", {})
|
||||
ticket_name = ticket_data.get("name", "Sans titre")
|
||||
ticket_desc = ticket_data.get("description", "Pas de description disponible")
|
||||
return f"Analyse par défaut du ticket:\nNom: {ticket_name}\nDescription: {ticket_desc}\n(Aucune analyse détaillée n'a été fournie)"
|
||||
|
||||
def _extraire_analyses_images(self, rapport_data: Dict) -> List[Dict]:
|
||||
"""
|
||||
Extrait et formate les analyses d'images pertinentes
|
||||
"""
|
||||
images_analyses = []
|
||||
analyse_images_data = rapport_data.get("analyse_images", {})
|
||||
|
||||
# Parcourir toutes les images
|
||||
for image_path, analyse_data in analyse_images_data.items():
|
||||
# Vérifier si l'image est pertinente
|
||||
is_relevant = False
|
||||
if "sorting" in analyse_data and isinstance(analyse_data["sorting"], dict):
|
||||
is_relevant = analyse_data["sorting"].get("is_relevant", False)
|
||||
|
||||
# Si l'image est pertinente, extraire son analyse
|
||||
if is_relevant:
|
||||
image_name = os.path.basename(image_path)
|
||||
analyse = self._extraire_analyse_image(analyse_data)
|
||||
|
||||
if analyse:
|
||||
images_analyses.append({
|
||||
"image_name": image_name,
|
||||
"image_path": image_path,
|
||||
"analyse": analyse,
|
||||
"sorting_info": analyse_data.get("sorting", {}),
|
||||
"metadata": analyse_data.get("analysis", {}).get("metadata", {})
|
||||
})
|
||||
logger.info(f"Analyse de l'image {image_name} ajoutée")
|
||||
|
||||
return images_analyses
|
||||
|
||||
def _extraire_analyse_image(self, analyse_data: Dict) -> Optional[str]:
|
||||
"""
|
||||
Extrait l'analyse d'une image depuis les données
|
||||
"""
|
||||
# Si pas de données d'analyse, retourner None
|
||||
if not "analysis" in analyse_data or not analyse_data["analysis"]:
|
||||
if "sorting" in analyse_data and isinstance(analyse_data["sorting"], dict):
|
||||
reason = analyse_data["sorting"].get("reason", "Non spécifiée")
|
||||
return f"Image marquée comme pertinente. Raison: {reason}"
|
||||
return None
|
||||
|
||||
# Extraire l'analyse selon le format des données
|
||||
analysis = analyse_data["analysis"]
|
||||
|
||||
# Structure type 1: {"analyse": "texte"}
|
||||
if isinstance(analysis, dict) and "analyse" in analysis:
|
||||
return analysis["analyse"]
|
||||
|
||||
# Structure type 2: {"error": false, ...} - contient d'autres données utiles
|
||||
if isinstance(analysis, dict) and "error" in analysis and not analysis.get("error", True):
|
||||
return str(analysis)
|
||||
|
||||
# Structure type 3: texte d'analyse direct
|
||||
if isinstance(analysis, str):
|
||||
return analysis
|
||||
|
||||
# Structure type 4: autre format de dictionnaire - convertir en JSON
|
||||
if isinstance(analysis, dict):
|
||||
return json.dumps(analysis, ensure_ascii=False, indent=2)
|
||||
|
||||
# Aucun format reconnu
|
||||
return None
|
||||
@ -14,73 +14,158 @@ class LlamaVision(BaseLLM):
|
||||
|
||||
def __init__(self, modele: str = "llama3.2-vision:90b-instruct-q8_0"):
|
||||
super().__init__(modele)
|
||||
self.api_url = "http://217.182.105.173:11434/api/generate"
|
||||
|
||||
# Paramètres optimisés pour réduire les timeouts
|
||||
self.params: Dict[str, Any] = {
|
||||
"temperature": 0.2,
|
||||
"top_p": 1,
|
||||
"max_tokens": 4000,
|
||||
"presence_penalty": 0,
|
||||
"frequency_penalty": 0,
|
||||
"stop": []
|
||||
"temperature": 0.1, # Réduit pour des réponses plus prévisibles
|
||||
"top_p": 0.8, # Légèrement réduit pour accélérer
|
||||
"top_k": 30, # Réduit pour limiter les choix et accélérer
|
||||
"num_ctx": 1024, # Contexte réduit pour des réponses plus rapides
|
||||
"repeat_penalty": 1.1,
|
||||
"repeat_last_n": 64,
|
||||
"mirostat": 0, # Désactivé pour accélérer
|
||||
"mirostat_eta": 0.1,
|
||||
"mirostat_tau": 5,
|
||||
"keep_alive": int(timedelta(minutes=2).total_seconds()), # Réduit le temps de maintien
|
||||
"num_predict": 1024, # Limite la longueur de sortie
|
||||
"min_p": 0,
|
||||
"seed": 0,
|
||||
"stop": ["\n\n", "###"], # Ajout de tokens d'arrêt pour terminer plus tôt
|
||||
"stream": False
|
||||
}
|
||||
|
||||
# Timeout de requête augmenté pour les images volumineuses
|
||||
self.request_timeout = 300 # 5 minutes
|
||||
|
||||
def urlBase(self) -> str:
|
||||
"""
|
||||
Retourne l'URL de base de l'API Llama.
|
||||
Retourne l'URL de base de l'API Ollama.
|
||||
"""
|
||||
return "https://api.llama3.ai/v1/"
|
||||
return "http://217.182.105.173:11434/"
|
||||
|
||||
def cleAPI(self) -> str:
|
||||
"""
|
||||
Retourne la clé API pour Llama.
|
||||
Ollama ne nécessite pas de clé API par défaut.
|
||||
"""
|
||||
return os.getenv("LLAMA_API_KEY", "")
|
||||
return ""
|
||||
|
||||
def urlFonction(self) -> str:
|
||||
"""
|
||||
Retourne l'URL spécifique pour Llama.
|
||||
Retourne l'URL spécifique à Ollama pour générer une réponse.
|
||||
"""
|
||||
return "chat/completions"
|
||||
return "api/generate"
|
||||
|
||||
def _preparer_contenu(self, question: str) -> Dict[str, Any]:
|
||||
"""
|
||||
Prépare le contenu de la requête spécifique pour Llama.
|
||||
Prépare le contenu de la requête spécifique pour Ollama avec le modèle Llama Vision.
|
||||
"""
|
||||
# Ajout d'instructions pour réponses concises
|
||||
prompt_prefixe = "Réponds de manière concise et directe à la question suivante: "
|
||||
|
||||
contenu = {
|
||||
"model": self.modele,
|
||||
"messages": [
|
||||
{"role": "system", "content": self.prompt_system},
|
||||
{"role": "user", "content": question}
|
||||
],
|
||||
"temperature": self.params["temperature"],
|
||||
"top_p": self.params["top_p"],
|
||||
"max_tokens": self.params["max_tokens"],
|
||||
"presence_penalty": self.params["presence_penalty"],
|
||||
"frequency_penalty": self.params["frequency_penalty"],
|
||||
"stop": self.params["stop"]
|
||||
"prompt": prompt_prefixe + question,
|
||||
"options": {
|
||||
"temperature": self.params["temperature"],
|
||||
"top_p": self.params["top_p"],
|
||||
"top_k": self.params["top_k"],
|
||||
"num_ctx": self.params["num_ctx"],
|
||||
"repeat_penalty": self.params["repeat_penalty"],
|
||||
"repeat_last_n": self.params["repeat_last_n"],
|
||||
"mirostat": self.params["mirostat"],
|
||||
"mirostat_eta": self.params["mirostat_eta"],
|
||||
"mirostat_tau": self.params["mirostat_tau"],
|
||||
"keep_alive": self.params["keep_alive"],
|
||||
"num_predict": self.params["num_predict"],
|
||||
"min_p": self.params["min_p"],
|
||||
"seed": self.params["seed"],
|
||||
"stop": self.params["stop"],
|
||||
},
|
||||
"stream": self.params["stream"]
|
||||
}
|
||||
return contenu
|
||||
|
||||
def _traiter_reponse(self, reponse: requests.Response) -> str:
|
||||
"""
|
||||
Traite et retourne la réponse fournie par Llama.
|
||||
Traite et retourne la réponse fournie par Ollama.
|
||||
"""
|
||||
data = reponse.json()
|
||||
return data["choices"][0]["message"]["content"]
|
||||
return data.get("response", "")
|
||||
|
||||
def _encoder_image_base64(self, image_path: str) -> str:
|
||||
"""
|
||||
Encode une image en base64 pour l'API Llama Vision.
|
||||
Encode une image en base64, avec optimisation de la taille si nécessaire.
|
||||
"""
|
||||
with open(image_path, "rb") as image_file:
|
||||
encoded = base64.b64encode(image_file.read()).decode("utf-8")
|
||||
ext = os.path.splitext(image_path)[1].lower().replace(".", "")
|
||||
mime = f"image/{ext}" if ext in ["png", "jpeg", "jpg", "webp"] else "image/jpeg"
|
||||
return f"data:{mime};base64,{encoded}"
|
||||
try:
|
||||
# Vérifier la taille de l'image et la réduire si trop grande
|
||||
with Image.open(image_path) as img:
|
||||
# Si l'image est trop grande, la redimensionner
|
||||
max_dim = 800 # Dimension maximale
|
||||
width, height = img.size
|
||||
|
||||
if width > max_dim or height > max_dim:
|
||||
# Calculer le ratio pour conserver les proportions
|
||||
ratio = min(max_dim / width, max_dim / height)
|
||||
new_width = int(width * ratio)
|
||||
new_height = int(height * ratio)
|
||||
|
||||
# Redimensionner l'image
|
||||
img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)
|
||||
|
||||
# Convertir en RGB si nécessaire (pour les formats comme PNG avec canal alpha)
|
||||
if img.mode in ("RGBA", "LA", "P"):
|
||||
# Créer un fond blanc et composer l'image dessus pour gérer la transparence
|
||||
background = Image.new("RGB", img.size, (255, 255, 255))
|
||||
if img.mode == "P":
|
||||
img = img.convert("RGBA")
|
||||
background.paste(img, mask=img.split()[3] if img.mode == "RGBA" else None)
|
||||
img = background
|
||||
elif img.mode != "RGB":
|
||||
img = img.convert("RGB")
|
||||
|
||||
# Sauvegarder temporairement l'image redimensionnée
|
||||
buffer = io.BytesIO()
|
||||
img.save(buffer, format="JPEG", quality=85)
|
||||
buffer.seek(0)
|
||||
|
||||
# Encoder en base64
|
||||
encoded = base64.b64encode(buffer.read()).decode("utf-8")
|
||||
return encoded
|
||||
|
||||
except Exception as e:
|
||||
print(f"Erreur lors de l'optimisation de l'image: {str(e)}")
|
||||
try:
|
||||
# Seconde tentative avec une approche plus simple
|
||||
with Image.open(image_path) as img:
|
||||
# Convertir directement en RGB quelle que soit l'image
|
||||
img = img.convert("RGB")
|
||||
buffer = io.BytesIO()
|
||||
img.save(buffer, format="JPEG", quality=75)
|
||||
buffer.seek(0)
|
||||
encoded = base64.b64encode(buffer.read()).decode("utf-8")
|
||||
return encoded
|
||||
except Exception as e2:
|
||||
print(f"Deuxième erreur lors de l'optimisation de l'image: {str(e2)}")
|
||||
# Dernier recours: encoder l'image originale sans optimisation
|
||||
with open(image_path, "rb") as image_file:
|
||||
encoded = base64.b64encode(image_file.read()).decode("utf-8")
|
||||
return encoded
|
||||
|
||||
def _optimiser_prompt(self, question: str) -> str:
|
||||
"""
|
||||
Optimise le prompt pour des réponses plus rapides.
|
||||
"""
|
||||
# Ajouter des instructions pour limiter la longueur et être direct
|
||||
optimised_question = f"""Réponds à cette question de façon concise et directe. Limite ta réponse à 3-4 phrases maximum.
|
||||
|
||||
Question: {question}"""
|
||||
return optimised_question
|
||||
|
||||
def interroger_avec_image(self, image_path: str, question: str) -> str:
|
||||
"""
|
||||
Interroge le modèle Llama Vision avec une image et une question.
|
||||
Interroge le modèle Llama Vision avec une image et une question via Ollama.
|
||||
Optimisé pour éviter les timeouts.
|
||||
|
||||
Args:
|
||||
image_path: Chemin vers l'image à analyser
|
||||
@ -90,36 +175,46 @@ class LlamaVision(BaseLLM):
|
||||
Réponse du modèle à la question
|
||||
"""
|
||||
url = self.urlBase() + self.urlFonction()
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {self.cleAPI()}"
|
||||
}
|
||||
headers = {"Content-Type": "application/json"}
|
||||
|
||||
try:
|
||||
encoded_image = self._encoder_image_base64(image_path)
|
||||
# Encoder l'image en base64 avec optimisation de taille
|
||||
image_b64 = self._encoder_image_base64(image_path)
|
||||
|
||||
# Optimiser la question pour des réponses plus courtes et plus rapides
|
||||
optimised_question = self._optimiser_prompt(question)
|
||||
|
||||
# Préparer le prompt avec le format spécial pour Ollama multimodal
|
||||
prompt = f"""<image>
|
||||
{image_b64}
|
||||
</image>
|
||||
|
||||
{optimised_question}"""
|
||||
|
||||
contenu = {
|
||||
"model": self.modele,
|
||||
"messages": [
|
||||
{"role": "system", "content": self.prompt_system},
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": question},
|
||||
{"type": "image_url", "image_url": {"url": encoded_image}}
|
||||
]
|
||||
}
|
||||
],
|
||||
"temperature": self.params["temperature"],
|
||||
"top_p": self.params["top_p"],
|
||||
"max_tokens": self.params["max_tokens"],
|
||||
"presence_penalty": self.params["presence_penalty"],
|
||||
"frequency_penalty": self.params["frequency_penalty"],
|
||||
"stop": self.params["stop"]
|
||||
"prompt": prompt,
|
||||
"options": {
|
||||
"temperature": self.params["temperature"],
|
||||
"top_p": self.params["top_p"],
|
||||
"top_k": self.params["top_k"],
|
||||
"num_ctx": self.params["num_ctx"],
|
||||
"repeat_penalty": self.params["repeat_penalty"],
|
||||
"repeat_last_n": self.params["repeat_last_n"],
|
||||
"mirostat": self.params["mirostat"],
|
||||
"mirostat_eta": self.params["mirostat_eta"],
|
||||
"mirostat_tau": self.params["mirostat_tau"],
|
||||
"keep_alive": self.params["keep_alive"],
|
||||
"num_predict": self.params["num_predict"],
|
||||
"min_p": self.params["min_p"],
|
||||
"seed": self.params["seed"],
|
||||
"stop": self.params["stop"],
|
||||
},
|
||||
"stream": self.params["stream"]
|
||||
}
|
||||
|
||||
self.heureDepart = datetime.now()
|
||||
response = requests.post(url=url, headers=headers, json=contenu, timeout=180)
|
||||
response = requests.post(url=url, headers=headers, json=contenu, timeout=self.request_timeout)
|
||||
self.heureFin = datetime.now()
|
||||
|
||||
if self.heureDepart is not None:
|
||||
@ -134,6 +229,13 @@ class LlamaVision(BaseLLM):
|
||||
self.reponseErreur = True
|
||||
return f"Erreur API ({response.status_code}): {response.text}"
|
||||
|
||||
except requests.exceptions.Timeout:
|
||||
self.heureFin = datetime.now()
|
||||
if self.heureDepart is not None:
|
||||
self.dureeTraitement = self.heureFin - self.heureDepart
|
||||
self.reponseErreur = True
|
||||
return "Timeout lors de l'appel à l'API. L'analyse de l'image a pris trop de temps."
|
||||
|
||||
except Exception as e:
|
||||
self.heureFin = datetime.now()
|
||||
if self.heureDepart is not None:
|
||||
@ -141,4 +243,14 @@ class LlamaVision(BaseLLM):
|
||||
else:
|
||||
self.dureeTraitement = timedelta(0)
|
||||
self.reponseErreur = True
|
||||
return f"Erreur lors de l'analyse de l'image: {str(e)}"
|
||||
return f"Erreur lors de l'analyse de l'image: {str(e)}"
|
||||
|
||||
def configurer(self, **kwargs):
|
||||
"""
|
||||
Mise à jour facile des paramètres spécifiques à Llama Vision.
|
||||
"""
|
||||
for key, value in kwargs.items():
|
||||
if key in self.params:
|
||||
self.params[key] = value
|
||||
elif key == "request_timeout" and isinstance(value, int):
|
||||
self.request_timeout = value
|
||||
@ -0,0 +1,2 @@
|
||||
Question,Réponse
|
||||
"Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?","[RÉPONSE] Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Pour les utilisateurs désactivés, cochez 'Affiche les utilisateurs non valides'. Consultez le manuel d'utilisation : [lien vers le manuel] et la FAQ : [lien vers la FAQ]."
|
||||
|
@ -0,0 +1,8 @@
|
||||
Question,Réponse
|
||||
"Point particulier :- Multi laboratoire :tous
|
||||
- Le cas n'est pas bloquant
|
||||
Description du problème :
|
||||
Bonjour,
|
||||
|
||||
Dans le menu Mes paramètres - Gestion des utilisateurs, tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaitre?
|
||||
Merci.",Pas de réponse
|
||||
|
@ -1,5 +1,2 @@
|
||||
Question,Réponse
|
||||
"Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?","[RÉPONSE] Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer. Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas. Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé). Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'. Liens d'aide fournis: - Manuel d'utilisation: [lien vers le manuel d'utilisation] - FAQ: [lien vers la FAQ]
|
||||
[COMPLÉMENT VISUEL] image.png (ID: 129046)
|
||||
[COMPLÉMENT VISUEL] image.png (ID: 129044)
|
||||
[COMPLÉMENT VISUEL] image.png (ID: 129042)"
|
||||
"Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?","[RÉPONSE] Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer. Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas. Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé). Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'. Liens d'aide fournis: - Manuel d'utilisation: [lien vers le manuel d'utilisation] - FAQ: [lien vers la FAQ]"
|
||||
|
||||
|
@ -1,179 +1,47 @@
|
||||
{
|
||||
"ticket_id": "T9656",
|
||||
"timestamp": "2025-04-11 10:30:45",
|
||||
"rapport_complet": "# Rapport d'analyse: T9656\n\nHTTPConnectionPool(host='217.182.105.173', port=11434): Read timed out. (read timeout=120)\n\n## Fil de discussion\n\n### Question initiale du client\n**Date**: 04/07/2024 12:09:47\n**Sujet**: Gestion des utilisateurs\n**Contenu**: Dans le menu \"Mes paramètres - Gestion des utilisateurs\", tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?\n\n### Réponse du support technique\n**Date**: 04/07/2024 13:03:58\n**Contenu**:\n- Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné.\n- Pour le voir, cochez la case \"Affiche les laboratoires secondaires\".\n- Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer.\n- Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas.\n- Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case \"Affiche les utilisateurs non valides\" pour le voir apparaître dans la liste (en grisé).\n- Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case \"Utilisateur valide\".\n\n\n## Tableau questions/réponses\n```json\n{\n \"chronologie_echanges\": [\n {\"date\": \"04/07/2024 12:09:47\", \"emetteur\": \"CLIENT\", \"type\": \"Question\", \"contenu\": \"Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Réponse\", \"contenu\": \"Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer. Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas. Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé). Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'. Liens d'aide fournis: - Manuel d'utilisation: [lien vers le manuel d'utilisation] - FAQ: [lien vers la FAQ]\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Complément visuel\", \"contenu\": \"image.png (ID: 129046)\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Complément visuel\", \"contenu\": \"image.png (ID: 129044)\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Complément visuel\", \"contenu\": \"image.png (ID: 129042)\"}\n ]\n}\n```\n\n## Diagnostic technique\nLe problème d'affichage des utilisateurs est dû à deux configurations possibles:\n\n1. Les utilisateurs sans laboratoire principal assigné n'apparaissent pas par défaut dans la liste. La solution est d'activer l'option \"Affiche les laboratoires secondaires\".\n\n2. Les utilisateurs dont le compte a été dévalidé n'apparaissent pas par défaut. Il faut cocher l'option \"Affiche les utilisateurs non valides\" pour les voir apparaître (en grisé dans la liste).",
|
||||
"ticket_analyse": "### Synthèse Structurée du Ticket T9656: Gestion des utilisateurs\n\n#### Informations Générales\n- **ID du ticket**: 9635\n- **Nom du projet**: Demandes\n- **Statut**: Clôturé\n- **Partenaire**: CHAUSSON MATERIAUX, Christophe SAUVAGET (christophe.sauvaget@chausson.fr)\n- **Date de création**: 04/07/2024 12:09:47\n- **Dernière modification**: 03/10/2024 13:10:50\n- **Date d'échéance**: 19/07/2024 00:00:00\n- **Date d'extraction**: 10/04/2025 17:10:36\n- **Répertoire**: output/ticket_T9656/T9656_20250410_171035\n\n#### Problème Initial\n**Titre**: Gestion des utilisateurs \n**Description**: Dans le menu \"Mes paramètres - Gestion des utilisateurs\", tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?\n\n#### Chronologie des Échanges Client/Support\n\n##### Message 1 - Support Technique\n- **Date**: 04/07/2024 13:03:58\n- **Contenu**:\n - Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné.\n - Pour le voir, cochez la case \"Affiche les laboratoires secondaires\".\n - Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer.\n - Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas.\n - Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case \"Affiche les utilisateurs non valides\" pour le voir apparaître dans la liste (en grisé).\n - Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case \"Utilisateur valide\".\n - Liens d'aide fournis:\n - Manuel d'utilisation: [lien vers le manuel d'utilisation]\n - FAQ: [lien vers la FAQ]\n\n- **Pièces jointes**:\n - image.png (image/png) [ID: 129046]\n - image.png (image/png) [ID: 129044]\n - image.png (image/png) [ID: 129042]\n\n#### Éléments Techniques à Observer dans les Captures d'Écran\n- **Capture d'écran ID: 129046**: Vérifier la liste des utilisateurs et l'option \"Affiche les laboratoires secondaires\".\n- **Capture d'écran ID: 129044**: Vérifier la fiche de l'utilisateur pour le laboratoire principal.\n- **Capture d'écran ID: 129042**: Vérifier l'option \"Affiche les utilisateurs non valides\" et la liste des utilisateurs dévalidés.\n\n#### Liens Utiles\n- [Manuel d'utilisation](lien_vers_le_manuel_d'utilisation)\n- [FAQ](lien_vers_la_FAQ)\n\n### Conclusion\nLe problème initial concernait l'affichage incomplet des utilisateurs dans le menu \"Mes paramètres - Gestion des utilisateurs\". Le support technique a fourni plusieurs solutions, notamment en vérifiant les options d'affichage des laboratoires secondaires et des utilisateurs non valides. Des captures d'écran ont été fournies pour illustrer ces étapes.",
|
||||
"images_analyses": [
|
||||
{
|
||||
"image_name": "image.png",
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image.png",
|
||||
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle intitulée **\"Mes paramètres - Gestion des utilisateurs\"**. Elle est divisée en plusieurs sections :\n- **Section \"Connexion\"** :\n - Une photo de profil est affichée avec les options **\"Déposez votre photo ici\"**, **\"Modifier la photo\"** et **\"SUPPRIMER PHOTO\"** (en texte rouge).\n - Les champs **\"Login\"** et **\"Mot de passe\"** sont présents, mais les valeurs sont masquées par des astérisques (*****).\n- **Section principale** :\n - Une case à cocher intitulée **\"Mot de passe à saisir à la prochaine connexion\"** est visible, non cochée.\n - Un menu déroulant **\"Langue\"** est affiché avec la valeur **\"Français\"** sélectionnée.\n - Un bouton bleu **\"OBTENIR L'APPLICATION BRG-LAB MOBILE\"** est présent en bas de l'interface.\n- **Élément mis en évidence** :\n - La case à cocher **\"Utilisateur valide\"** est entourée en rouge.\n\n#### 2. Éléments techniques clés\n- **Paramètres configurables** :\n - Champs de texte : **\"Login\"** et **\"Mot de passe\"** (valeurs masquées).\n - Menu déroulant : **\"Langue\"** (valeur sélectionnée : **\"Français\"**).\n - Cases à cocher : **\"Mot de passe à saisir à la prochaine connexion\"** (non cochée) et **\"Utilisateur valide\"** (cochée).\n- **Boutons actifs** :\n - **\"FERMER\"** et **\"ENREGISTRER\"** en haut de l'interface.\n - **\"OBTENIR L'APPLICATION BRG-LAB MOBILE\"** en bas de l'interface.\n- **Éléments interactifs** :\n - Les options de gestion de la photo de profil : **\"Déposez votre photo ici\"**, **\"Modifier la photo\"** et **\"SUPPRIMER PHOTO\"**.\n- **Éléments désactivés ou grisés** :\n - Aucun élément grisé ou désactivé n'est visible dans l'image.\n\n#### 3. Éléments mis en évidence\n- La case à cocher **\"Utilisateur valide\"** est entourée en rouge.\n- Cette mise en évidence suggère que cet élément est important dans le contexte de l'image.\n\n#### 4. Relation avec le problème\nL'image montre une interface de gestion des utilisateurs, avec une mise en évidence sur l'option **\"Utilisateur valide\"**. Cet élément est directement lié au problème décrit dans le ticket, où il est mentionné que certains utilisateurs peuvent ne pas apparaître s'ils sont dévalidés.\n\n#### 5. Réponses potentielles\nL'image illustre l'option **\"Utilisateur valide\"**, qui est une réponse potentielle à la question posée dans le ticket : \"Comment faire pour les faire tous apparaître ?\". Elle montre comment un utilisateur peut être rendu valide ou non valide.\n\n#### 6. Lien avec la discussion\nL'image correspond à l'étape décrite dans le fil de discussion où il est mentionné :\n- \"Un utilisateur peut également ne pas apparaître dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé).\"\n- \"Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'.\"\n\nL'image illustre donc directement cette étape en montrant l'option **\"Utilisateur valide\"** mise en évidence.",
|
||||
"sorting_info": {
|
||||
"is_relevant": true,
|
||||
"reason": "Oui. L'image montre une interface de gestion des utilisateurs avec des options de connexion et des paramètres, ce qui est pertinent pour un support technique.",
|
||||
"raw_response": "Oui.\n\nL'image montre une interface de gestion des utilisateurs avec des options de connexion et des paramètres, ce qui est pertinent pour un support technique.",
|
||||
"metadata": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image.png",
|
||||
"image_name": "image.png",
|
||||
"timestamp": "20250411_102628",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.8,
|
||||
"max_tokens": 300
|
||||
}
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image.png",
|
||||
"image_name": "image.png",
|
||||
"timestamp": "20250411_102709",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.9,
|
||||
"max_tokens": 3000
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"image_name": "image_2.png",
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_2.png",
|
||||
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle intitulée **\"Mes paramètres - Gestion des utilisateurs\"**. Elle présente une liste d'utilisateurs avec les colonnes suivantes :\n- **Laboratoire** : Nom du laboratoire associé à l'utilisateur.\n- **Login** : Identifiant de connexion de l'utilisateur.\n- **Nom** : Nom complet de l'utilisateur.\n- Une colonne supplémentaire sans titre visible, contenant des informations sur la formation et la fonction de l'utilisateur.\n\nAu-dessus de la liste, trois onglets sont visibles :\n- **NOUVEAU**\n- **MODIFIER**\n- **SUPPRIMER**\n\nDeux cases à cocher sont présentes en haut à droite de la liste :\n- **\"Affiche les laboratoires secondaires\"** (cochée et entourée en rouge)\n- **\"Affiche les utilisateurs non valides\"** (non cochée)\n\n#### 2. Éléments techniques clés\n- **Onglets** : Trois onglets sont présents et actifs : NOUVEAU, MODIFIER, SUPPRIMER.\n- **Cases à cocher** :\n - **\"Affiche les laboratoires secondaires\"** : Case cochée.\n - **\"Affiche les utilisateurs non valides\"** : Case non cochée.\n- **Liste des utilisateurs** :\n - Trois utilisateurs sont visibles :\n - **CHAUSSON MATERIAUX : CAMBOUNET SUR LE SOR** : Login \"russoloa\", Nom \"RUSSOLO Arnaud\", Formation \"Formulation de béton, ingénieur, Responsable national, Opérateur\".\n - **CHAUSSON MATERIAUX : CAVAILLON** : Login \"sabatiep\", Nom \"SABATIE Peter\", Formation \"Formulation de béton, ingénieur, Responsable national, Opérateur\".\n - **CHAUSSON MATERIAUX : CAFERES SUR** : Informations non entièrement visibles.\n- **Éléments interactifs** :\n - Les colonnes \"Laboratoire\", \"Login\" et \"Nom\" semblent triables (flèches visibles à côté des titres).\n - Les cases à cocher sont interactives.\n- **Éléments non modifiables** : Aucun élément grisé ou désactivé n'est visible dans cette capture.\n\n#### 3. Éléments mis en évidence\n- La case à cocher **\"Affiche les laboratoires secondaires\"** est entourée en rouge.\n- Cette mise en évidence suggère que cette option est importante dans le contexte de l'image.\n\n#### 4. Relation avec le problème\nL'image montre l'option **\"Affiche les laboratoires secondaires\"** activée, ce qui est directement lié à la solution proposée dans le ticket pour afficher des utilisateurs manquants. La liste des utilisateurs affichée inclut des informations sur les laboratoires secondaires, ce qui pourrait être pertinent pour résoudre le problème initial.\n\n#### 5. Réponses potentielles\nL'image illustre l'activation de l'option **\"Affiche les laboratoires secondaires\"**, ce qui répond directement à la question posée dans le ticket : \"Comment faire pour les faire tous apparaître ?\". Elle montre également que cette option permet d'afficher des utilisateurs associés à des laboratoires secondaires.\n\n#### 6. Lien avec la discussion\nL'image correspond à l'étape décrite dans le **Message 1 - Support Technique** :\n- \"Pour le voir, cochez la case 'Affiche les laboratoires secondaires'.\"\n- Elle illustre également l'utilisation des filtres sur les colonnes pour retrouver les utilisateurs, comme mentionné dans le message.\n\n---\n\nCette analyse reste strictement factuelle et objective, conformément aux règles demandées.",
|
||||
"sorting_info": {
|
||||
"is_relevant": true,
|
||||
"reason": "Oui. L'image montre une interface logicielle avec des paramètres et des informations sur les utilisateurs, ce qui est pertinent pour un support technique.",
|
||||
"raw_response": "Oui.\n\nL'image montre une interface logicielle avec des paramètres et des informations sur les utilisateurs, ce qui est pertinent pour un support technique.",
|
||||
"metadata": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_2.png",
|
||||
"image_name": "image_2.png",
|
||||
"timestamp": "20250411_102631",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.8,
|
||||
"max_tokens": 300
|
||||
}
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_2.png",
|
||||
"image_name": "image_2.png",
|
||||
"timestamp": "20250411_102751",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.9,
|
||||
"max_tokens": 3000
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"image_name": "image_1.png",
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_1.png",
|
||||
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle intitulée **\"Affectation de l'utilisateur\"**. Elle présente les éléments suivants :\n- Une section intitulée **\"Laboratoire principal\"** avec un champ de sélection déroulant.\n- Une section intitulée **\"Laboratoire(s) affilié(s)\"** contenant une liste de laboratoires.\n- Un bouton **\"Supprimer\"** situé à droite de la liste des laboratoires affiliés.\n- Le champ de sélection déroulant du laboratoire principal affiche le texte **\"CHAUSSON MATERIAUX - CAMBOUNET SUR LE SOR\"**.\n- La liste des laboratoires affiliés contient deux éléments : **\"CHAUSSON MATERIAUX\"** et **\"CAMBOUNET SUR LE SOR\"**.\n\n#### 2. Éléments techniques clés\n- **Champ de sélection déroulant** : Le champ **\"Laboratoire principal\"** est un menu déroulant actif, permettant de sélectionner un laboratoire parmi une liste.\n- **Liste des laboratoires affiliés** : Cette liste affiche deux laboratoires, chacun accompagné d'une icône de dossier à gauche et d'un bouton **\"Supprimer\"** à droite.\n- **Bouton \"Supprimer\"** : Ce bouton est actif et permet de supprimer un laboratoire de la liste des affiliés.\n- **Éléments interactifs** : Le champ déroulant et le bouton \"Supprimer\" sont interactifs.\n- **Éléments non modifiables** : Aucun élément grisé ou désactivé n'est visible dans l'image.\n\n#### 3. Éléments mis en évidence\n- Le champ de sélection déroulant **\"Laboratoire principal\"** est entouré d'un cadre rouge épais.\n- Le texte **\"CHAUSSON MATERIAUX - CAMBOUNET SUR LE SOR\"** est visible dans ce champ et mis en valeur par le cadre rouge.\n\n#### 4. Relation avec le problème\nL'image montre l'affectation d'un utilisateur à un laboratoire principal et à des laboratoires affiliés. Cela semble directement lié à la gestion des utilisateurs, comme mentionné dans le ticket. Le champ **\"Laboratoire principal\"** et la liste des laboratoires affiliés sont des éléments clés pour vérifier si un utilisateur est correctement associé à un laboratoire, ce qui pourrait expliquer pourquoi certains utilisateurs n'apparaissent pas dans la liste.\n\n#### 5. Réponses potentielles\nL'image illustre comment un utilisateur est associé à un laboratoire principal et à des laboratoires affiliés. Cela pourrait répondre à la question posée dans le ticket concernant l'affichage des utilisateurs, en montrant comment vérifier et modifier l'affectation des laboratoires.\n\n#### 6. Lien avec la discussion\nL'image correspond à l'étape décrite dans le fil de discussion où le support technique mentionne :\n- \"Vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas.\"\n- \"Vous pouvez ensuite retrouver l'utilisateur dans la liste et l'éditer.\"\nL'image montre précisément cette étape d'édition de l'affectation des laboratoires pour un utilisateur.",
|
||||
"sorting_info": {
|
||||
"is_relevant": true,
|
||||
"reason": "Oui. L'image montre une interface logicielle avec des menus déroulants et des options liées à l'affectation d'un utilisateur, ce qui est pertinent pour un support technique.",
|
||||
"raw_response": "Oui.\n\nL'image montre une interface logicielle avec des menus déroulants et des options liées à l'affectation d'un utilisateur, ce qui est pertinent pour un support technique.",
|
||||
"metadata": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_1.png",
|
||||
"image_name": "image_1.png",
|
||||
"timestamp": "20250411_102633",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.8,
|
||||
"max_tokens": 300
|
||||
}
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_1.png",
|
||||
"image_name": "image_1.png",
|
||||
"timestamp": "20250411_102816",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.9,
|
||||
"max_tokens": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"timestamp": "2025-04-11 11:42:24",
|
||||
"rapport_complet": "# Rapport d'analyse: T9656\n\nVoici les 3 premières sections du rapport technique :\n\n## Fil de discussion\n\n### Question initiale du client\n**Date**: 04/07/2024 12:09:47\n**Sujet**: Gestion des utilisateurs\n**Contenu**: Dans le menu \"Mes paramètres - Gestion des utilisateurs\", tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?\n\n### Réponse du support technique\n**Date**: 04/07/2024 13:03:58\n**Contenu**:\n- Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné.\n- Pour le voir, cochez la case \"Affiche les laboratoires secondaires\".\n- Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer.\n- Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas.\n- Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case \"Affiche les utilisateurs non valides\" pour le voir apparaître dans la liste (en grisé).\n- Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case \"Utilisateur valide\".\n\n\nVoici le tableau JSON des échanges :",
|
||||
"ticket_analyse": "Voici une synthèse structurée des informations clés du ticket :",
|
||||
"images_analyses": [],
|
||||
"chronologie_echanges": [
|
||||
{
|
||||
"date": "04/07/2024 12:09:47",
|
||||
"date": "date inconnue",
|
||||
"emetteur": "CLIENT",
|
||||
"type": "Question",
|
||||
"contenu": "Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?"
|
||||
},
|
||||
{
|
||||
"date": "04/07/2024 13:03:58",
|
||||
"emetteur": "SUPPORT",
|
||||
"type": "Réponse",
|
||||
"contenu": "Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer. Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas. Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé). Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'. Liens d'aide fournis: - Manuel d'utilisation: [lien vers le manuel d'utilisation] - FAQ: [lien vers la FAQ]"
|
||||
},
|
||||
{
|
||||
"date": "04/07/2024 13:03:58",
|
||||
"emetteur": "SUPPORT",
|
||||
"type": "Complément visuel",
|
||||
"contenu": "image.png (ID: 129046)"
|
||||
},
|
||||
{
|
||||
"date": "04/07/2024 13:03:58",
|
||||
"emetteur": "SUPPORT",
|
||||
"type": "Complément visuel",
|
||||
"contenu": "image.png (ID: 129044)"
|
||||
},
|
||||
{
|
||||
"date": "04/07/2024 13:03:58",
|
||||
"emetteur": "SUPPORT",
|
||||
"type": "Complément visuel",
|
||||
"contenu": "image.png (ID: 129042)"
|
||||
"contenu": "Point particulier :- Multi laboratoire :tous\n- Le cas n'est pas bloquant\nDescription du problème :\nBonjour,\n\nDans le menu Mes paramètres - Gestion des utilisateurs, tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaitre?\nMerci."
|
||||
}
|
||||
],
|
||||
"resume": "",
|
||||
"analyse_images": "Tableau questions/réponses\n```json\n{\n \"chronologie_echanges\": [\n {\"date\": \"04/07/2024 12:09:47\", \"emetteur\": \"CLIENT\", \"type\": \"Question\", \"contenu\": \"Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Réponse\", \"contenu\": \"Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer. Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas. Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé). Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'. Liens d'aide fournis: - Manuel d'utilisation: [lien vers le manuel d'utilisation] - FAQ: [lien vers la FAQ]\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Complément visuel\", \"contenu\": \"image.png (ID: 129046)\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Complément visuel\", \"contenu\": \"image.png (ID: 129044)\"},\n {\"date\": \"04/07/2024 13:03:58\", \"emetteur\": \"SUPPORT\", \"type\": \"Complément visuel\", \"contenu\": \"image.png (ID: 129042)\"}\n ]\n}\n```",
|
||||
"diagnostic": "Le problème d'affichage des utilisateurs est dû à deux configurations possibles:\n\n1. Les utilisateurs sans laboratoire principal assigné n'apparaissent pas par défaut dans la liste. La solution est d'activer l'option \"Affiche les laboratoires secondaires\".\n\n2. Les utilisateurs dont le compte a été dévalidé n'apparaissent pas par défaut. Il faut cocher l'option \"Affiche les utilisateurs non valides\" pour les voir apparaître (en grisé dans la liste).",
|
||||
"analyse_images": "",
|
||||
"diagnostic": "",
|
||||
"statistiques": {
|
||||
"total_images": 3,
|
||||
"images_pertinentes": 3,
|
||||
"generation_time": 149.711133
|
||||
"images_pertinentes": 0,
|
||||
"generation_time": 24.972933
|
||||
},
|
||||
"metadata": {
|
||||
"model": "qwen2.5:72b-instruct-q8_0",
|
||||
"model": "llama3.2-vision:90b-instruct-q8_0",
|
||||
"model_version": "non spécifiée",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.9,
|
||||
"max_tokens": 4000,
|
||||
"generation_time": 149.711133,
|
||||
"timestamp": "2025-04-11 10:30:45",
|
||||
"generation_time": 24.972933,
|
||||
"timestamp": "2025-04-11 11:42:24",
|
||||
"agents": {
|
||||
"image_sorter": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image.png",
|
||||
"image_name": "image.png",
|
||||
"timestamp": "20250411_102628",
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image_1.png",
|
||||
"image_name": "image_1.png",
|
||||
"timestamp": "20250411_114159",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"model": "llama3.2-vision:90b-instruct-q8_0",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.8,
|
||||
"max_tokens": 300
|
||||
}
|
||||
},
|
||||
"image_analyser": {
|
||||
"image_path": "output/ticket_T9656/T9656_20250410_171035/attachments/image.png",
|
||||
"image_name": "image.png",
|
||||
"timestamp": "20250411_102709",
|
||||
"model_info": {
|
||||
"model": "pixtral-large-latest",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.9,
|
||||
"max_tokens": 3000
|
||||
}
|
||||
},
|
||||
"report_generator": {
|
||||
"model": "qwen2.5:72b-instruct-q8_0",
|
||||
"model": "llama3.2-vision:90b-instruct-q8_0",
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.9,
|
||||
"max_tokens": 4000,
|
||||
|
||||
@ -18,255 +18,34 @@ _Vue d'ensemble du processus d'analyse automatisé_
|
||||
|
||||
**Statistiques:**
|
||||
- Images totales: 3
|
||||
- Images pertinentes: 3
|
||||
- Temps de génération: 149.71 secondes
|
||||
- Images pertinentes: 0
|
||||
- Temps de génération: 24.97 secondes
|
||||
|
||||
## 1. Analyse du ticket
|
||||
|
||||
_Agent utilisé: `AgentTicketAnalyser` - Analyse du contenu du ticket_
|
||||
|
||||
```
|
||||
### Synthèse Structurée du Ticket T9656: Gestion des utilisateurs
|
||||
|
||||
#### Informations Générales
|
||||
- **ID du ticket**: 9635
|
||||
- **Nom du projet**: Demandes
|
||||
- **Statut**: Clôturé
|
||||
- **Partenaire**: CHAUSSON MATERIAUX, Christophe SAUVAGET (christophe.sauvaget@chausson.fr)
|
||||
- **Date de création**: 04/07/2024 12:09:47
|
||||
- **Dernière modification**: 03/10/2024 13:10:50
|
||||
- **Date d'échéance**: 19/07/2024 00:00:00
|
||||
- **Date d'extraction**: 10/04/2025 17:10:36
|
||||
- **Répertoire**: output/ticket_T9656/T9656_20250410_171035
|
||||
|
||||
#### Problème Initial
|
||||
**Titre**: Gestion des utilisateurs
|
||||
**Description**: Dans le menu "Mes paramètres - Gestion des utilisateurs", tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître?
|
||||
|
||||
#### Chronologie des Échanges Client/Support
|
||||
|
||||
##### Message 1 - Support Technique
|
||||
- **Date**: 04/07/2024 13:03:58
|
||||
- **Contenu**:
|
||||
- Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné.
|
||||
- Pour le voir, cochez la case "Affiche les laboratoires secondaires".
|
||||
- Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer.
|
||||
- Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas.
|
||||
- Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case "Affiche les utilisateurs non valides" pour le voir apparaître dans la liste (en grisé).
|
||||
- Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case "Utilisateur valide".
|
||||
- Liens d'aide fournis:
|
||||
- Manuel d'utilisation: [lien vers le manuel d'utilisation]
|
||||
- FAQ: [lien vers la FAQ]
|
||||
|
||||
- **Pièces jointes**:
|
||||
- image.png (image/png) [ID: 129046]
|
||||
- image.png (image/png) [ID: 129044]
|
||||
- image.png (image/png) [ID: 129042]
|
||||
|
||||
#### Éléments Techniques à Observer dans les Captures d'Écran
|
||||
- **Capture d'écran ID: 129046**: Vérifier la liste des utilisateurs et l'option "Affiche les laboratoires secondaires".
|
||||
- **Capture d'écran ID: 129044**: Vérifier la fiche de l'utilisateur pour le laboratoire principal.
|
||||
- **Capture d'écran ID: 129042**: Vérifier l'option "Affiche les utilisateurs non valides" et la liste des utilisateurs dévalidés.
|
||||
|
||||
#### Liens Utiles
|
||||
- [Manuel d'utilisation](lien_vers_le_manuel_d'utilisation)
|
||||
- [FAQ](lien_vers_la_FAQ)
|
||||
|
||||
### Conclusion
|
||||
Le problème initial concernait l'affichage incomplet des utilisateurs dans le menu "Mes paramètres - Gestion des utilisateurs". Le support technique a fourni plusieurs solutions, notamment en vérifiant les options d'affichage des laboratoires secondaires et des utilisateurs non valides. Des captures d'écran ont été fournies pour illustrer ces étapes.
|
||||
Voici une synthèse structurée des informations clés du ticket :
|
||||
```
|
||||
|
||||
## 2. Tri des images
|
||||
|
||||
_Agent utilisé: `AgentImageSorter` - Identifie les images pertinentes_
|
||||
|
||||
| Image | Pertinence | Raison |
|
||||
|-------|------------|--------|
|
||||
| image.png | ✅ Pertinente | Oui |
|
||||
| image_2.png | ✅ Pertinente | Oui |
|
||||
| image_1.png | ✅ Pertinente | Oui |
|
||||
*Aucune image n'a été triée*
|
||||
|
||||
## 3. Analyse des images
|
||||
|
||||
_Agent utilisé: `AgentImageAnalyser` - Analyse détaillée des captures d'écran_
|
||||
|
||||
### Image 1: image.png
|
||||
|
||||
### Analyse de l'image
|
||||
|
||||
#### 1. Description objective
|
||||
L'image montre une interface logicielle intitulée **"Mes paramètres - Gestion des utilisateurs"**. Elle est divisée en plusieurs sections :
|
||||
- **Section "Connexion"** :
|
||||
- Une photo de profil est affichée avec les options **"Déposez votre photo ici"**, **"Modifier la photo"** et **"SUPPRIMER PHOTO"** (en texte rouge).
|
||||
- Les champs **"Login"** et **"Mot de passe"** sont présents, mais les valeurs sont masquées par des astérisques (*****).
|
||||
- **Section principale** :
|
||||
- Une case à cocher intitulée **"Mot de passe à saisir à la prochaine connexion"** est visible, non cochée.
|
||||
- Un menu déroulant **"Langue"** est affiché avec la valeur **"Français"** sélectionnée.
|
||||
- Un bouton bleu **"OBTENIR L'APPLICATION BRG-LAB MOBILE"** est présent en bas de l'interface.
|
||||
- **Élément mis en évidence** :
|
||||
- La case à cocher **"Utilisateur valide"** est entourée en rouge.
|
||||
|
||||
#### 2. Éléments techniques clés
|
||||
- **Paramètres configurables** :
|
||||
- Champs de texte : **"Login"** et **"Mot de passe"** (valeurs masquées).
|
||||
- Menu déroulant : **"Langue"** (valeur sélectionnée : **"Français"**).
|
||||
- Cases à cocher : **"Mot de passe à saisir à la prochaine connexion"** (non cochée) et **"Utilisateur valide"** (cochée).
|
||||
- **Boutons actifs** :
|
||||
- **"FERMER"** et **"ENREGISTRER"** en haut de l'interface.
|
||||
- **"OBTENIR L'APPLICATION BRG-LAB MOBILE"** en bas de l'interface.
|
||||
- **Éléments interactifs** :
|
||||
- Les options de gestion de la photo de profil : **"Déposez votre photo ici"**, **"Modifier la photo"** et **"SUPPRIMER PHOTO"**.
|
||||
- **Éléments désactivés ou grisés** :
|
||||
- Aucun élément grisé ou désactivé n'est visible dans l'image.
|
||||
|
||||
#### 3. Éléments mis en évidence
|
||||
- La case à cocher **"Utilisateur valide"** est entourée en rouge.
|
||||
- Cette mise en évidence suggère que cet élément est important dans le contexte de l'image.
|
||||
|
||||
#### 4. Relation avec le problème
|
||||
L'image montre une interface de gestion des utilisateurs, avec une mise en évidence sur l'option **"Utilisateur valide"**. Cet élément est directement lié au problème décrit dans le ticket, où il est mentionné que certains utilisateurs peuvent ne pas apparaître s'ils sont dévalidés.
|
||||
|
||||
#### 5. Réponses potentielles
|
||||
L'image illustre l'option **"Utilisateur valide"**, qui est une réponse potentielle à la question posée dans le ticket : "Comment faire pour les faire tous apparaître ?". Elle montre comment un utilisateur peut être rendu valide ou non valide.
|
||||
|
||||
#### 6. Lien avec la discussion
|
||||
L'image correspond à l'étape décrite dans le fil de discussion où il est mentionné :
|
||||
- "Un utilisateur peut également ne pas apparaître dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé)."
|
||||
- "Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'."
|
||||
|
||||
L'image illustre donc directement cette étape en montrant l'option **"Utilisateur valide"** mise en évidence.
|
||||
|
||||
### Image 2: image_2.png
|
||||
|
||||
### Analyse de l'image
|
||||
|
||||
#### 1. Description objective
|
||||
L'image montre une interface logicielle intitulée **"Mes paramètres - Gestion des utilisateurs"**. Elle présente une liste d'utilisateurs avec les colonnes suivantes :
|
||||
- **Laboratoire** : Nom du laboratoire associé à l'utilisateur.
|
||||
- **Login** : Identifiant de connexion de l'utilisateur.
|
||||
- **Nom** : Nom complet de l'utilisateur.
|
||||
- Une colonne supplémentaire sans titre visible, contenant des informations sur la formation et la fonction de l'utilisateur.
|
||||
|
||||
Au-dessus de la liste, trois onglets sont visibles :
|
||||
- **NOUVEAU**
|
||||
- **MODIFIER**
|
||||
- **SUPPRIMER**
|
||||
|
||||
Deux cases à cocher sont présentes en haut à droite de la liste :
|
||||
- **"Affiche les laboratoires secondaires"** (cochée et entourée en rouge)
|
||||
- **"Affiche les utilisateurs non valides"** (non cochée)
|
||||
|
||||
#### 2. Éléments techniques clés
|
||||
- **Onglets** : Trois onglets sont présents et actifs : NOUVEAU, MODIFIER, SUPPRIMER.
|
||||
- **Cases à cocher** :
|
||||
- **"Affiche les laboratoires secondaires"** : Case cochée.
|
||||
- **"Affiche les utilisateurs non valides"** : Case non cochée.
|
||||
- **Liste des utilisateurs** :
|
||||
- Trois utilisateurs sont visibles :
|
||||
- **CHAUSSON MATERIAUX : CAMBOUNET SUR LE SOR** : Login "russoloa", Nom "RUSSOLO Arnaud", Formation "Formulation de béton, ingénieur, Responsable national, Opérateur".
|
||||
- **CHAUSSON MATERIAUX : CAVAILLON** : Login "sabatiep", Nom "SABATIE Peter", Formation "Formulation de béton, ingénieur, Responsable national, Opérateur".
|
||||
- **CHAUSSON MATERIAUX : CAFERES SUR** : Informations non entièrement visibles.
|
||||
- **Éléments interactifs** :
|
||||
- Les colonnes "Laboratoire", "Login" et "Nom" semblent triables (flèches visibles à côté des titres).
|
||||
- Les cases à cocher sont interactives.
|
||||
- **Éléments non modifiables** : Aucun élément grisé ou désactivé n'est visible dans cette capture.
|
||||
|
||||
#### 3. Éléments mis en évidence
|
||||
- La case à cocher **"Affiche les laboratoires secondaires"** est entourée en rouge.
|
||||
- Cette mise en évidence suggère que cette option est importante dans le contexte de l'image.
|
||||
|
||||
#### 4. Relation avec le problème
|
||||
L'image montre l'option **"Affiche les laboratoires secondaires"** activée, ce qui est directement lié à la solution proposée dans le ticket pour afficher des utilisateurs manquants. La liste des utilisateurs affichée inclut des informations sur les laboratoires secondaires, ce qui pourrait être pertinent pour résoudre le problème initial.
|
||||
|
||||
#### 5. Réponses potentielles
|
||||
L'image illustre l'activation de l'option **"Affiche les laboratoires secondaires"**, ce qui répond directement à la question posée dans le ticket : "Comment faire pour les faire tous apparaître ?". Elle montre également que cette option permet d'afficher des utilisateurs associés à des laboratoires secondaires.
|
||||
|
||||
#### 6. Lien avec la discussion
|
||||
L'image correspond à l'étape décrite dans le **Message 1 - Support Technique** :
|
||||
- "Pour le voir, cochez la case 'Affiche les laboratoires secondaires'."
|
||||
- Elle illustre également l'utilisation des filtres sur les colonnes pour retrouver les utilisateurs, comme mentionné dans le message.
|
||||
|
||||
---
|
||||
|
||||
Cette analyse reste strictement factuelle et objective, conformément aux règles demandées.
|
||||
|
||||
### Image 3: image_1.png
|
||||
|
||||
### Analyse de l'image
|
||||
|
||||
#### 1. Description objective
|
||||
L'image montre une interface logicielle intitulée **"Affectation de l'utilisateur"**. Elle présente les éléments suivants :
|
||||
- Une section intitulée **"Laboratoire principal"** avec un champ de sélection déroulant.
|
||||
- Une section intitulée **"Laboratoire(s) affilié(s)"** contenant une liste de laboratoires.
|
||||
- Un bouton **"Supprimer"** situé à droite de la liste des laboratoires affiliés.
|
||||
- Le champ de sélection déroulant du laboratoire principal affiche le texte **"CHAUSSON MATERIAUX - CAMBOUNET SUR LE SOR"**.
|
||||
- La liste des laboratoires affiliés contient deux éléments : **"CHAUSSON MATERIAUX"** et **"CAMBOUNET SUR LE SOR"**.
|
||||
|
||||
#### 2. Éléments techniques clés
|
||||
- **Champ de sélection déroulant** : Le champ **"Laboratoire principal"** est un menu déroulant actif, permettant de sélectionner un laboratoire parmi une liste.
|
||||
- **Liste des laboratoires affiliés** : Cette liste affiche deux laboratoires, chacun accompagné d'une icône de dossier à gauche et d'un bouton **"Supprimer"** à droite.
|
||||
- **Bouton "Supprimer"** : Ce bouton est actif et permet de supprimer un laboratoire de la liste des affiliés.
|
||||
- **Éléments interactifs** : Le champ déroulant et le bouton "Supprimer" sont interactifs.
|
||||
- **Éléments non modifiables** : Aucun élément grisé ou désactivé n'est visible dans l'image.
|
||||
|
||||
#### 3. Éléments mis en évidence
|
||||
- Le champ de sélection déroulant **"Laboratoire principal"** est entouré d'un cadre rouge épais.
|
||||
- Le texte **"CHAUSSON MATERIAUX - CAMBOUNET SUR LE SOR"** est visible dans ce champ et mis en valeur par le cadre rouge.
|
||||
|
||||
#### 4. Relation avec le problème
|
||||
L'image montre l'affectation d'un utilisateur à un laboratoire principal et à des laboratoires affiliés. Cela semble directement lié à la gestion des utilisateurs, comme mentionné dans le ticket. Le champ **"Laboratoire principal"** et la liste des laboratoires affiliés sont des éléments clés pour vérifier si un utilisateur est correctement associé à un laboratoire, ce qui pourrait expliquer pourquoi certains utilisateurs n'apparaissent pas dans la liste.
|
||||
|
||||
#### 5. Réponses potentielles
|
||||
L'image illustre comment un utilisateur est associé à un laboratoire principal et à des laboratoires affiliés. Cela pourrait répondre à la question posée dans le ticket concernant l'affichage des utilisateurs, en montrant comment vérifier et modifier l'affectation des laboratoires.
|
||||
|
||||
#### 6. Lien avec la discussion
|
||||
L'image correspond à l'étape décrite dans le fil de discussion où le support technique mentionne :
|
||||
- "Vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas."
|
||||
- "Vous pouvez ensuite retrouver l'utilisateur dans la liste et l'éditer."
|
||||
L'image montre précisément cette étape d'édition de l'affectation des laboratoires pour un utilisateur.
|
||||
*Aucune image pertinente n'a été identifiée pour ce ticket.*
|
||||
|
||||
## 3.1 Synthèse globale des analyses d'images
|
||||
|
||||
_Analyse transversale des captures d'écran_
|
||||
|
||||
### Points communs et complémentaires
|
||||
|
||||
Cette section présente une analyse transversale de toutes les images pertinentes,
|
||||
mettant en évidence les points communs et complémentaires entre elles.
|
||||
|
||||
#### Éléments mis en évidence dans les images
|
||||
|
||||
- Image 1: - La case à cocher **"Utilisateur valide"** est entourée en rouge.
|
||||
- Cette mise en évidence suggère que cet élément est important dans le contexte de l'image.
|
||||
- Image 2: - La case à cocher **"Affiche les laboratoires secondaires"** est entourée en rouge.
|
||||
- Cette mise en évidence suggère que cette option est importante dans le contexte de l'image.
|
||||
- Image 3: - Le champ de sélection déroulant **"Laboratoire principal"** est entouré d'un cadre rouge épais.
|
||||
- Le texte **"CHAUSSON MATERIAUX - CAMBOUNET SUR LE SOR"** est visible dans ce champ et mis en valeur par le cadre rouge.
|
||||
|
||||
#### Relations avec le problème
|
||||
|
||||
- Image 1: L'image montre une interface de gestion des utilisateurs, avec une mise en évidence sur l'option **"Utilisateur valide"**. Cet élément est directement lié au problème décrit dans le ticket, où il est mentionné que certains utilisateurs peuvent ne pas apparaître s'ils sont dévalidés.
|
||||
- Image 2: L'image montre l'option **"Affiche les laboratoires secondaires"** activée, ce qui est directement lié à la solution proposée dans le ticket pour afficher des utilisateurs manquants. La liste des utilisateurs affichée inclut des informations sur les laboratoires secondaires, ce qui pourrait être pertinent pour résoudre le problème initial.
|
||||
- Image 3: L'image montre l'affectation d'un utilisateur à un laboratoire principal et à des laboratoires affiliés. Cela semble directement lié à la gestion des utilisateurs, comme mentionné dans le ticket. Le champ **"Laboratoire principal"** et la liste des laboratoires affiliés sont des éléments clés pour vérifier si un utilisateur est correctement associé à un laboratoire, ce qui pourrait expliquer pourquoi certains utilisateurs n'apparaissent pas dans la liste.
|
||||
|
||||
#### Liens avec la discussion
|
||||
|
||||
- Image 1: L'image correspond à l'étape décrite dans le fil de discussion où il est mentionné :
|
||||
- "Un utilisateur peut également ne pas apparaître dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé)."
|
||||
- "Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'."
|
||||
|
||||
L'image illustre donc directement cette étape en montrant l'option **"Utilisateur valide"** mise en évidence.
|
||||
- Image 2: L'image correspond à l'étape décrite dans le **Message 1 - Support Technique** :
|
||||
- "Pour le voir, cochez la case 'Affiche les laboratoires secondaires'."
|
||||
- Elle illustre également l'utilisation des filtres sur les colonnes pour retrouver les utilisateurs, comme mentionné dans le message.
|
||||
|
||||
---
|
||||
|
||||
Cette analyse reste strictement factuelle et objective, conformément aux règles demandées.
|
||||
- Image 3: L'image correspond à l'étape décrite dans le fil de discussion où le support technique mentionne :
|
||||
- "Vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas."
|
||||
- "Vous pouvez ensuite retrouver l'utilisateur dans la liste et l'éditer."
|
||||
L'image montre précisément cette étape d'édition de l'affectation des laboratoires pour un utilisateur.
|
||||
*Pas de synthèse globale disponible en l'absence d'images pertinentes.*
|
||||
|
||||
## 4. Synthèse finale
|
||||
|
||||
@ -282,30 +61,16 @@ _Synthèse des questions et réponses avec intégration des informations des ima
|
||||
|
||||
| Date | Émetteur | Type | Contenu |
|
||||
| ---- | -------- | ---- | ------- |
|
||||
| 04/07/2024 12:09:47 | CLIENT | Question | Dans le menu 'Mes paramètres - Gestion des utilisateurs', tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaître? |
|
||||
| 04/07/2024 13:03:58 | SUPPORT | Réponse | Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné. Pour le voir, cochez la case 'Affiche les laboratoires secondaires'. Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtres sur les colonnes si besoin) et l'éditer. Sur la fiche de l'utilisateur, vérifiez si le laboratoire principal est présent, et ajoutez-le si ce n'est pas le cas. Un utilisateur peut également ne pas apparaitre dans la liste si son compte a été dévalidé. Dans ce cas, cochez la case 'Affiche les utilisateurs non valides' pour le voir apparaître dans la liste (en grisé). Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case 'Utilisateur valide'. Liens d'aide fournis: - Manuel d'utilisation: [lien vers le manuel d'utilisation] - FAQ: [lien vers la FAQ] |
|
||||
| 04/07/2024 13:03:58 | SUPPORT | Complément visuel | image.png (ID: 129046) |
|
||||
| 04/07/2024 13:03:58 | SUPPORT | Complément visuel | image.png (ID: 129044) |
|
||||
| 04/07/2024 13:03:58 | SUPPORT | Complément visuel | image.png (ID: 129042) |
|
||||
|
||||
### Diagnostic technique
|
||||
|
||||
_Conclusion basée sur l'analyse du ticket, des images et des échanges_
|
||||
|
||||
Le problème d'affichage des utilisateurs est dû à deux configurations possibles:
|
||||
|
||||
1. Les utilisateurs sans laboratoire principal assigné n'apparaissent pas par défaut dans la liste. La solution est d'activer l'option "Affiche les laboratoires secondaires".
|
||||
|
||||
2. Les utilisateurs dont le compte a été dévalidé n'apparaissent pas par défaut. Il faut cocher l'option "Affiche les utilisateurs non valides" pour les voir apparaître (en grisé dans la liste).
|
||||
| date inconnue | CLIENT | Question | Point particulier :- Multi laboratoire :tous - Le cas n'est pas bloquant Description du problème : Bonjour, Dans le menu Mes paramètres - Gestion des utilisateurs, tous les utilisateurs n'apparaissent pas. Comment faire pour les faire tous apparaitre? Merci. |
|
||||
|
||||
## Métadonnées
|
||||
|
||||
- **Date de génération**: 2025-04-11 10:30:45
|
||||
- **Modèle principal utilisé**: qwen2.5:72b-instruct-q8_0
|
||||
- **Date de génération**: 2025-04-11 11:42:24
|
||||
- **Modèle principal utilisé**: llama3.2-vision:90b-instruct-q8_0
|
||||
|
||||
## Détails des analyses
|
||||
|
||||
Toutes les analyses requises ont été effectuées avec succès.
|
||||
**ATTENTION**: Les sections suivantes sont incomplètes: Résumé, Analyse des images, Diagnostic
|
||||
|
||||
- **Analyse des images**: PRÉSENT
|
||||
- **Analyse du ticket**: PRÉSENT
|
||||
@ -422,9 +187,6 @@ Analyse d'abord ce que montre l'image, puis réponds par "oui"/"pertinent" ou "n
|
||||
|
||||
### AgentImageAnalyser
|
||||
|
||||
#### Paramètres
|
||||
|
||||
|
||||
#### Prompt système
|
||||
|
||||
<details>
|
||||
@ -486,7 +248,7 @@ Ton analyse sera utilisée comme élément factuel pour un rapport technique plu
|
||||
|
||||
#### Paramètres
|
||||
|
||||
- **Modèle utilisé**: qwen2.5:72b-instruct-q8_0
|
||||
- **Modèle utilisé**: llama3.2-vision:90b-instruct-q8_0
|
||||
- **Température**: 0.2
|
||||
- **Top_p**: 0.9
|
||||
- **Max_tokens**: 4000
|
||||
|
||||
@ -19,7 +19,7 @@ from datetime import datetime
|
||||
from agents.agent_ticket_analyser import AgentTicketAnalyser
|
||||
from agents.agent_image_sorter import AgentImageSorter
|
||||
from agents.agent_image_analyser import AgentImageAnalyser
|
||||
from agents.agent_report_generator import AgentReportGenerator
|
||||
from agents.agent_report_generator_qwen import AgentReportGeneratorQwen
|
||||
|
||||
# Import du modèle LLM LlamaVision
|
||||
from llm_classes.llama_vision import LlamaVision
|
||||
@ -60,23 +60,47 @@ def test_orchestrator_llama_vision(ticket_id=None):
|
||||
|
||||
start_time = time.time()
|
||||
|
||||
# Utilisation de LlamaVision pour tous les agents
|
||||
# Configuration des différentes instances avec des paramètres adaptés à chaque tâche
|
||||
# Valeurs de timeout pour chaque étape
|
||||
request_timeout = 400 # 6,5 minutes
|
||||
|
||||
# Utilisation de LlamaVision pour tous les agents avec paramètres adaptés
|
||||
json_llm = LlamaVision()
|
||||
json_llm.configurer(temperature=0.1) # Température plus basse pour l'analyse structurée
|
||||
json_llm.configurer(
|
||||
temperature=0.1,
|
||||
top_p=0.7,
|
||||
num_ctx=2048,
|
||||
num_predict=2048,
|
||||
request_timeout=request_timeout
|
||||
)
|
||||
logger.info("LLM LlamaVision initialisé pour l'analyse JSON")
|
||||
|
||||
image_sorter_llm = LlamaVision()
|
||||
image_sorter_llm.configurer(temperature=0.2)
|
||||
image_sorter_llm.configurer(
|
||||
temperature=0.1,
|
||||
top_p=0.8,
|
||||
top_k=30,
|
||||
num_ctx=1024,
|
||||
request_timeout=request_timeout
|
||||
)
|
||||
logger.info("LLM LlamaVision initialisé pour le tri d'images")
|
||||
|
||||
image_analyser_llm = LlamaVision()
|
||||
image_analyser_llm.configurer(temperature=0.3)
|
||||
image_analyser_llm.configurer(
|
||||
temperature=0.2,
|
||||
top_p=0.8,
|
||||
num_ctx=2048,
|
||||
request_timeout=request_timeout
|
||||
)
|
||||
logger.info("LLM LlamaVision initialisé pour l'analyse d'images")
|
||||
|
||||
report_generator_llm = LlamaVision()
|
||||
report_generator_llm.configurer(temperature=0.4) # Température plus élevée pour plus de créativité
|
||||
report_generator_llm.configurer(
|
||||
temperature=0.3,
|
||||
top_p=0.8,
|
||||
num_ctx=4096,
|
||||
num_predict=3000,
|
||||
request_timeout=request_timeout
|
||||
)
|
||||
logger.info("LLM LlamaVision initialisé pour la génération de rapports")
|
||||
|
||||
llm_init_time = time.time() - start_time
|
||||
@ -87,7 +111,10 @@ def test_orchestrator_llama_vision(ticket_id=None):
|
||||
ticket_agent = AgentTicketAnalyser(json_llm)
|
||||
image_sorter = AgentImageSorter(image_sorter_llm)
|
||||
image_analyser = AgentImageAnalyser(image_analyser_llm)
|
||||
report_generator = AgentReportGenerator(report_generator_llm)
|
||||
|
||||
# Utiliser AgentReportGeneratorQwen pour le rapport (plus stable)
|
||||
report_generator = AgentReportGeneratorQwen(report_generator_llm)
|
||||
report_generator.max_tokens = 4000
|
||||
|
||||
print("Tous les agents ont été créés")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user