This commit is contained in:
Ladebeze66 2025-04-21 16:04:53 +02:00
parent 407cf39ea0
commit 4cb70da960
70 changed files with 1750 additions and 4698 deletions

137
README.md Normal file
View File

@ -0,0 +1,137 @@
# Analyse de Tickets avec LLM
Ce projet implémente une solution complète d'analyse de tickets et d'images basée sur des LLM (Large Language Models) pour extraire des informations pertinentes et générer des rapports structurés.
## Architecture
Le système d'analyse repose sur une architecture à base d'agents spécialisés :
1. **AgentTicketAnalyser** : Analyse le contenu textuel du ticket
2. **AgentImageSorter** : Trie les images pour identifier celles qui sont pertinentes
3. **AgentImageAnalyser** : Analyse en profondeur les images pertinentes en tenant compte du contexte
4. **AgentReportGenerator** : Génère un rapport final consolidant toutes les analyses
Cette architecture utilise différents modèles LLM, permettant une flexibilité dans le choix des modèles selon les besoins :
- **Modèles textuels** : Mistral, DeepSeek, Qwen2.5
- **Modèles multimodaux** : Pixtral, Llama Vision
## Prérequis
- Python 3.8+
- Pip pour l'installation des dépendances
## Installation
1. Cloner le dépôt :
```bash
git clone <URL_DU_REPO>
cd <NOM_DU_REPO>
```
2. Installer les dépendances :
```bash
pip install -r requirements.txt
```
3. Vérifier les clés API dans les fichiers de configuration des modèles LLM (si nécessaire)
## Structure du projet
```
.
├── agents/ # Implémentations des agents LLM
│ ├── base_agent.py # Classe de base pour tous les agents
│ ├── mistral_large/ # Agents Mistral
│ ├── pixtral_large/ # Agents Pixtral
│ └── utils/ # Utilitaires pour les agents
├── llm_classes/ # Implémentations des différents LLM
│ ├── base_llm.py # Classe de base pour tous les LLM
│ ├── mistral_large.py # Implémentation de Mistral Large
│ ├── pixtral_large.py # Implémentation de Pixtral Large
│ └── ... # Autres implémentations LLM
├── loaders/ # Chargeurs de données
│ └── ticket_data_loader.py # Chargeur de données de ticket
├── utils/ # Utilitaires généraux
│ └── image_dedup.py # Déduplication d'images
├── agent_factory.py # Factory pour créer et initialiser les agents
├── orchestrator.py # Orchestrateur du processus d'analyse
├── main.py # Point d'entrée principal
└── requirements.txt # Dépendances du projet
```
## Configuration
Le système est hautement configurable via :
1. **Arguments en ligne de commande** dans `main.py`
2. **Dictionnaire de configuration** passé à l'orchestrateur
3. **Classes de factory** pour instancier les agents avec différents modèles LLM
## Utilisation
### Analyse complète d'un ticket
```bash
python main.py T1234
```
`T1234` est l'identifiant du ticket à analyser.
### Options avancées
```bash
python main.py T1234 --text-model mistral_large --vision-model pixtral_large --debug --save-results
```
Pour voir toutes les options disponibles :
```bash
python main.py --help
```
### Exécution d'étapes spécifiques
```bash
# Analyser uniquement le ticket (sans les images)
python main.py T1234 --skip-image-sorting --skip-image-analysis --skip-report
# Générer uniquement le rapport final (si les analyses précédentes existent)
python main.py T1234 --skip-ticket-analysis --skip-image-sorting --skip-image-analysis
```
## Personnalisation des modèles LLM
Pour utiliser un modèle LLM spécifique :
1. Assurez-vous qu'il est implémenté dans le dossier `llm_classes/`
2. Ajoutez-le au dictionnaire `LLM_CLASSES` dans `agent_factory.py`
3. Spécifiez-le en argument lors de l'exécution : `--text-model <nom_du_modele>` ou `--vision-model <nom_du_modele>`
## Sortie
Les résultats des analyses sont sauvegardés dans :
- **Analyses brutes** : `reports/<ticket_id>/`
- **Résultats intermédiaires** : `output/ticket_<ticket_id>/<extraction>/`
- **Rapport final** : `reports/<ticket_id>/rapport_final_<ticket_id>.txt`
## Dépannage
Si vous rencontrez des erreurs :
1. Vérifiez les journaux dans `main.log` et `orchestrator.log`
2. Activez le mode debug avec `--debug` pour obtenir plus d'informations
3. Assurez-vous que les dépendances et les clés API sont correctement configurées
## Extension
Pour ajouter un nouveau modèle LLM :
1. Créez une nouvelle classe dans `llm_classes/` qui hérite de `BaseLLM`
2. Implémentez les méthodes abstraites requises
3. Ajoutez le modèle au dictionnaire `LLM_CLASSES` dans `agent_factory.py`
4. Ajoutez-le à la liste `TEXT_MODELS` ou `VISION_MODELS` selon ses capacités
## Licence
[Licence à spécifier]

243
agent_factory.py Normal file
View File

@ -0,0 +1,243 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Factory pour les agents LLM.
Centralise l'initialisation des agents pour faciliter l'adaptation à différents modèles LLM.
"""
import logging
import time
from typing import Dict, Any, Optional, List, Tuple, Union, Type
# Import des agents disponibles
from agents.mistral_large.agent_ticket_analyser import AgentTicketAnalyser
from agents.pixtral_large.agent_image_sorter import AgentImageSorter
from agents.pixtral_large.agent_image_analyser import AgentImageAnalyser
from agents.mistral_large.agent_report_generator import AgentReportGenerator
# Import des implémentations LLM
from llm_classes.base_llm import BaseLLM
from llm_classes.mistral_large import MistralLarge
from llm_classes.mistral_medium import MistralMedium
from llm_classes.pixtral_large import PixtralLarge
from llm_classes.pixtral_12b import Pixtral12b
from llm_classes.deepseek import DeepSeek
from llm_classes.llama_vision import LlamaVision
from llm_classes.qwen2_5 import Qwen2_5
# Configuration du logging
logger = logging.getLogger("AgentFactory")
# Mapping des noms de modèles aux classes
LLM_CLASSES = {
"mistral_large": MistralLarge,
"mistral_medium": MistralMedium,
"pixtral_large": PixtralLarge,
"pixtral12b": Pixtral12b,
"deepseek": DeepSeek,
"llama_vision": LlamaVision,
"qwen2_5": Qwen2_5
}
# Catégories de modèles par capacité
TEXT_MODELS = ["mistral_large", "mistral_medium", "deepseek", "qwen2_5"]
VISION_MODELS = ["pixtral_large", "pixtral12b", "llama_vision"]
class AgentFactory:
"""
Factory pour créer et configurer les agents avec différents modèles LLM.
"""
@staticmethod
def create_llm(model_name: str, **kwargs) -> BaseLLM:
"""
Crée une instance d'un modèle LLM spécifique.
Args:
model_name: Nom du modèle à créer
**kwargs: Arguments supplémentaires à passer au constructeur
Returns:
Instance du modèle LLM demandé
Raises:
ValueError: Si le modèle demandé n'existe pas
"""
if model_name not in LLM_CLASSES:
raise ValueError(f"Modèle LLM inconnu: {model_name}. Options disponibles: {', '.join(LLM_CLASSES.keys())}")
logger.info(f"Initialisation du modèle {model_name}")
start_time = time.time()
model = LLM_CLASSES[model_name](**kwargs)
init_time = time.time() - start_time
logger.info(f"Modèle {model_name} initialisé en {init_time:.2f} secondes")
return model
@staticmethod
def get_best_text_model() -> BaseLLM:
"""
Retourne le meilleur modèle texte disponible.
Returns:
Instance du meilleur modèle texte
"""
for model_name in TEXT_MODELS:
try:
return AgentFactory.create_llm(model_name)
except Exception as e:
logger.warning(f"Impossible d'initialiser {model_name}: {e}")
# Si aucun modèle n'a pu être initialisé
raise ValueError("Aucun modèle texte n'a pu être initialisé")
@staticmethod
def get_best_vision_model() -> BaseLLM:
"""
Retourne le meilleur modèle vision disponible.
Returns:
Instance du meilleur modèle vision
"""
for model_name in VISION_MODELS:
try:
return AgentFactory.create_llm(model_name)
except Exception as e:
logger.warning(f"Impossible d'initialiser {model_name}: {e}")
# Si aucun modèle n'a pu être initialisé
raise ValueError("Aucun modèle vision n'a pu être initialisé")
@staticmethod
def create_ticket_analyser(llm: Optional[BaseLLM] = None) -> AgentTicketAnalyser:
"""
Crée un agent d'analyse de tickets.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle texte disponible)
Returns:
Agent d'analyse de tickets
"""
if llm is None:
llm = AgentFactory.get_best_text_model()
logger.info("Création de l'agent d'analyse de tickets")
start_time = time.time()
agent = AgentTicketAnalyser(llm)
init_time = time.time() - start_time
logger.info(f"Agent d'analyse de tickets créé en {init_time:.2f} secondes")
return agent
@staticmethod
def create_image_sorter(llm: Optional[BaseLLM] = None) -> AgentImageSorter:
"""
Crée un agent de tri d'images.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle vision disponible)
Returns:
Agent de tri d'images
"""
if llm is None:
llm = AgentFactory.get_best_vision_model()
logger.info("Création de l'agent de tri d'images")
start_time = time.time()
agent = AgentImageSorter(llm)
init_time = time.time() - start_time
logger.info(f"Agent de tri d'images créé en {init_time:.2f} secondes")
return agent
@staticmethod
def create_image_analyser(llm: Optional[BaseLLM] = None) -> AgentImageAnalyser:
"""
Crée un agent d'analyse d'images.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle vision disponible)
Returns:
Agent d'analyse d'images
"""
if llm is None:
llm = AgentFactory.get_best_vision_model()
logger.info("Création de l'agent d'analyse d'images")
start_time = time.time()
agent = AgentImageAnalyser(llm)
init_time = time.time() - start_time
logger.info(f"Agent d'analyse d'images créé en {init_time:.2f} secondes")
return agent
@staticmethod
def create_report_generator(llm: Optional[BaseLLM] = None) -> AgentReportGenerator:
"""
Crée un agent de génération de rapport.
Args:
llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle texte disponible)
Returns:
Agent de génération de rapport
"""
if llm is None:
llm = AgentFactory.get_best_text_model()
logger.info("Création de l'agent de génération de rapport")
start_time = time.time()
agent = AgentReportGenerator(llm)
init_time = time.time() - start_time
logger.info(f"Agent de génération de rapport créé en {init_time:.2f} secondes")
return agent
@staticmethod
def create_all_agents(text_model_name: Optional[str] = None, vision_model_name: Optional[str] = None) -> Dict[str, Any]:
"""
Crée tous les agents nécessaires avec les modèles spécifiés.
Args:
text_model_name: Nom du modèle texte à utiliser
vision_model_name: Nom du modèle vision à utiliser
Returns:
Dictionnaire contenant tous les agents
"""
# Initialiser les modèles LLM
text_llm = None
if text_model_name:
text_llm = AgentFactory.create_llm(text_model_name)
else:
text_llm = AgentFactory.get_best_text_model()
vision_llm = None
if vision_model_name:
vision_llm = AgentFactory.create_llm(vision_model_name)
else:
vision_llm = AgentFactory.get_best_vision_model()
# Créer les agents
agents = {
"ticket_analyser": AgentFactory.create_ticket_analyser(text_llm),
"image_sorter": AgentFactory.create_image_sorter(vision_llm),
"image_analyser": AgentFactory.create_image_analyser(vision_llm),
"report_generator": AgentFactory.create_report_generator(text_llm)
}
return agents

View File

@ -2,10 +2,14 @@ from ..base_agent import BaseAgent
from typing import Dict, Any
import logging
import os
import json
import traceback
from datetime import datetime
from ..utils.pipeline_logger import sauvegarder_donnees
# Configuration du logger pour plus de détails
logger = logging.getLogger("AgentReportGenerator")
logger.setLevel(logging.DEBUG) # Augmenter le niveau de logging pour le débogage
class AgentReportGenerator(BaseAgent):
def __init__(self, llm):
@ -44,14 +48,67 @@ Reste strictement factuel. Ne fais aucune hypothèse. Ne suggère pas d'étapes
if hasattr(self.llm, "configurer"):
self.llm.configurer(**self.params)
def _verifier_donnees_entree(self, rapport_data: Dict[str, Any]) -> bool:
"""
Vérifie que les données d'entrée contiennent les éléments nécessaires.
Args:
rapport_data: Données pour générer le rapport
Returns:
bool: True si les données sont valides, False sinon
"""
ticket_id = rapport_data.get("ticket_id")
if not ticket_id:
logger.error("Erreur de validation: ticket_id manquant")
return False
ticket_analyse = rapport_data.get("ticket_analyse")
if not ticket_analyse:
logger.error(f"Erreur de validation pour {ticket_id}: analyse de ticket manquante")
return False
analyses_images = rapport_data.get("analyse_images", {})
if not analyses_images:
logger.warning(f"Avertissement pour {ticket_id}: aucune analyse d'image disponible")
# On continue quand même car on peut générer un rapport sans images
# Vérifier si au moins une image a été analysée
images_analysees = 0
for img_path, img_data in analyses_images.items():
if img_data.get("analysis") and img_data["analysis"].get("analyse"):
images_analysees += 1
if images_analysees == 0 and analyses_images:
logger.warning(f"Avertissement pour {ticket_id}: {len(analyses_images)} images trouvées mais aucune n'a été analysée")
logger.info(f"Validation pour {ticket_id}: OK, {images_analysees} images analysées sur {len(analyses_images)} images")
return True
def executer(self, rapport_data: Dict[str, Any]) -> str:
ticket_id = rapport_data.get("ticket_id", "Inconnu")
print(f"AgentReportGenerator : génération du rapport pour le ticket {ticket_id}")
try:
# Vérifier et enregistrer les données d'entrée pour le débogage
logger.debug(f"Données reçues pour {ticket_id}: {json.dumps(rapport_data, default=str)[:500]}...")
# Vérifier que les données d'entrée sont valides
if not self._verifier_donnees_entree(rapport_data):
error_msg = f"Impossible de générer le rapport: données d'entrée invalides pour {ticket_id}"
print(f"ERREUR: {error_msg}")
return f"ERREUR: {error_msg}"
print(f"Préparation du prompt pour le ticket {ticket_id}...")
prompt = self._generer_prompt(rapport_data)
logger.debug(f"Prompt généré ({len(prompt)} caractères): {prompt[:500]}...")
print(f"Analyse en cours pour le ticket {ticket_id}...")
response = self.llm.interroger(prompt)
print(f"Analyse terminée: {len(response)} caractères")
logger.debug(f"Réponse reçue ({len(response)} caractères): {response[:500]}...")
# Création du résultat complet avec métadonnées
result = {
"prompt": prompt,
"response": response,
@ -66,18 +123,90 @@ Reste strictement factuel. Ne fais aucune hypothèse. Ne suggère pas d'étapes
}
}
sauvegarder_donnees(ticket_id, "rapport_final", result, base_dir="reports", is_resultat=True)
# Sauvegarder le résultat dans le pipeline
logger.info(f"Sauvegarde du rapport final pour le ticket {ticket_id}")
# Créer un fichier de débogage direct pour vérifier le problème de sauvegarde
try:
debug_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../debug"))
os.makedirs(debug_dir, exist_ok=True)
debug_path = os.path.join(debug_dir, f"rapport_debug_{ticket_id}.json")
with open(debug_path, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"Fichier de débogage créé: {debug_path}")
except Exception as e:
print(f"Erreur lors de la création du fichier de débogage: {str(e)}")
# Utiliser uniquement la fonction standard de sauvegarde
try:
sauvegarder_donnees(ticket_id, "rapport_final", result, base_dir=None, is_resultat=True)
print(f"Rapport final généré et sauvegardé pour le ticket {ticket_id}")
except Exception as e:
logger.error(f"Erreur lors de la sauvegarde via sauvegarder_donnees: {str(e)}")
print(f"Erreur de sauvegarde standard: {str(e)}")
# Sauvegarder aussi une version en texte brut pour faciliter la lecture
try:
# Trouver le chemin de ticket le plus récent
output_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../output"))
ticket_dir = os.path.join(output_dir, f"ticket_{ticket_id}")
if os.path.exists(ticket_dir):
# Trouver l'extraction la plus récente
extractions = [d for d in os.listdir(ticket_dir) if os.path.isdir(os.path.join(ticket_dir, d)) and d.startswith(ticket_id)]
if extractions:
extractions.sort(reverse=True)
latest_extraction = extractions[0]
rapports_dir = os.path.join(ticket_dir, latest_extraction, f"{ticket_id}_rapports")
pipeline_dir = os.path.join(rapports_dir, "pipeline")
# S'assurer que le répertoire existe
os.makedirs(pipeline_dir, exist_ok=True)
# Sauvegarder en format texte uniquement
rapport_txt_path = os.path.join(pipeline_dir, f"rapport_final_mistral-large-latest.txt")
with open(rapport_txt_path, "w", encoding="utf-8") as f:
f.write(f"RAPPORT D'ANALYSE DU TICKET {ticket_id}\n")
f.write("="*50 + "\n\n")
f.write(response)
print(f"Version texte sauvegardée dans: {rapport_txt_path}")
except Exception as e:
print(f"Erreur lors de la sauvegarde de la version texte: {str(e)}")
logger.error(f"Erreur de sauvegarde texte: {str(e)}")
# Sauvegarder aussi dans le dossier reports pour compatibilité
try:
reports_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../reports"))
ticket_reports_dir = os.path.join(reports_dir, ticket_id)
os.makedirs(ticket_reports_dir, exist_ok=True)
# Sauvegarder aussi en texte pour faciliter la lecture
rapport_txt_path = os.path.join(ticket_reports_dir, f"rapport_final_{ticket_id}.txt")
with open(rapport_txt_path, "w", encoding="utf-8") as f:
f.write(f"RAPPORT D'ANALYSE DU TICKET {ticket_id}\n")
f.write("="*50 + "\n\n")
f.write(response)
logger.info(f"Rapport texte sauvegardé dans {rapport_txt_path}")
print(f"Rapport également sauvegardé en texte dans {ticket_reports_dir}")
except Exception as e:
logger.warning(f"Impossible de sauvegarder le rapport texte dans reports/: {str(e)}")
print(f"Erreur de sauvegarde reports/: {str(e)}")
# Ajouter à l'historique
self.ajouter_historique("rapport_final", {
"ticket_id": ticket_id,
"prompt": prompt,
"timestamp": self._get_timestamp()
}, response)
print(f"Traitement du rapport terminé pour le ticket {ticket_id}")
return response
except Exception as e:
logger.error(f"Erreur lors de la génération du rapport : {str(e)}")
logger.error(traceback.format_exc())
print(f"ERREUR CRITIQUE lors de la génération du rapport: {str(e)}")
return f"ERREUR: {str(e)}"
@ -85,20 +214,39 @@ Reste strictement factuel. Ne fais aucune hypothèse. Ne suggère pas d'étapes
ticket_text = rapport_data.get("ticket_analyse", "")
image_blocs = []
analyses_images = rapport_data.get("analyse_images", {})
# Ajouter des logs pour vérifier les données d'images
logger.info(f"Nombre d'images à analyser: {len(analyses_images)}")
for chemin_image, analyse_obj in analyses_images.items():
analyse = analyse_obj.get("analysis", {}).get("analyse", "")
# Vérifier si l'image est pertinente
is_relevant = analyse_obj.get("sorting", {}).get("is_relevant", False)
# Récupérer l'analyse si elle existe
analyse = ""
if "analysis" in analyse_obj and analyse_obj["analysis"]:
analyse = analyse_obj["analysis"].get("analyse", "")
if analyse:
image_blocs.append(f"--- IMAGE : {os.path.basename(chemin_image)} ---\n{analyse}\n")
logger.info(f"Ajout de l'analyse de l'image {os.path.basename(chemin_image)} ({len(analyse)} caractères)")
else:
logger.warning(f"Image {os.path.basename(chemin_image)} sans analyse")
bloc_images = "\n".join(image_blocs)
# Log pour vérifier la taille des données
logger.info(f"Taille de l'analyse ticket: {len(ticket_text)} caractères")
logger.info(f"Taille du bloc images: {len(bloc_images)} caractères")
return (
prompt = (
f"Voici les données d'analyse pour un ticket de support :\n\n"
f"=== ANALYSE DU TICKET ===\n{ticket_text}\n\n"
f"=== ANALYSES D'IMAGES ===\n{bloc_images}\n\n"
f"Génère un rapport croisé en suivant les instructions précédentes."
)
return prompt
def _get_timestamp(self) -> str:
from datetime import datetime

View File

@ -17,7 +17,7 @@ class AgentImageAnalyser(BaseAgent):
# Configuration personnalisable
self.params = {
"temperature": 0.2,
"top_p": 0.9,
"top_p": 0.8,
"max_tokens": 3000
}

View File

@ -77,6 +77,106 @@ def extraire_ticket_id(data: Dict[str, Any]) -> Optional[str]:
return None
def generer_version_texte(data: Union[Dict[str, Any], list], ticket_id: str, step_name: str, file_path: str) -> None:
"""
Génère une version texte lisible du fichier JSON pour faciliter la revue humaine.
Args:
data: Données à convertir en texte lisible
ticket_id: ID du ticket
step_name: Nom de l'étape ou de l'agent
file_path: Chemin du fichier JSON
"""
try:
# Créer le chemin du fichier texte
txt_path = file_path.replace('.json', '.txt')
with open(txt_path, 'w', encoding='utf-8') as f:
f.write(f"RÉSULTATS DE L'ANALYSE {step_name.upper()} - TICKET {ticket_id}\n")
f.write("="*80 + "\n\n")
# Si c'est une liste, traiter chaque élément
if isinstance(data, list):
for i, item in enumerate(data, 1):
f.write(f"--- ÉLÉMENT {i} ---\n\n")
# Extraire et écrire la réponse si présente
if isinstance(item, dict):
# Priorité 1: Champ "response" (pour les rapports)
if "response" in item:
f.write(f"{item['response']}\n\n")
# Priorité 2: Champ "analyse" (pour les analyses d'images)
elif "analyse" in item and isinstance(item["analyse"], str):
f.write(f"{item['analyse']}\n\n")
# Priorité 3: Champ "raw_response" (pour les analyses brutes)
elif "raw_response" in item and isinstance(item["raw_response"], str):
f.write(f"{item['raw_response']}\n\n")
# Priorité 4: Structure imbriquée d'analyse
elif "analysis" in item:
if isinstance(item["analysis"], dict):
if "analyse" in item["analysis"]:
f.write(f"{item['analysis']['analyse']}\n\n")
elif "raw_response" in item["analysis"]:
f.write(f"{item['analysis']['raw_response']}\n\n")
# Priorité 5: Pour le tri d'images
elif "is_relevant" in item:
f.write(f"Image pertinente: {item['is_relevant']}\n")
if "reason" in item:
f.write(f"Raison: {item['reason']}\n\n")
# Si aucun contenu n'a été trouvé, afficher des informations de base
else:
f.write("Aucun contenu d'analyse trouvé.\n\n")
# Ajouter des métadonnées si disponibles
if "metadata" in item:
meta = item["metadata"]
if "image_name" in meta:
f.write(f"Image: {meta.get('image_name', 'N/A')}\n")
if "timestamp" in meta:
f.write(f"Horodatage: {meta.get('timestamp', 'N/A')}\n")
if "source_agent" in meta:
f.write(f"Agent source: {meta.get('source_agent', 'N/A')}\n")
else:
f.write(str(item) + "\n\n")
f.write("-"*40 + "\n\n")
# Si c'est un dictionnaire unique
elif isinstance(data, dict):
# Même logique que ci-dessus, mais pour un seul élément
if "response" in data:
f.write(f"{data['response']}\n\n")
elif "analyse" in data and isinstance(data["analyse"], str):
f.write(f"{data['analyse']}\n\n")
elif "raw_response" in data:
f.write(f"{data['raw_response']}\n\n")
elif "analysis" in data and isinstance(data["analysis"], dict):
if "analyse" in data["analysis"]:
f.write(f"{data['analysis']['analyse']}\n\n")
elif "raw_response" in data["analysis"]:
f.write(f"{data['analysis']['raw_response']}\n\n")
elif "is_relevant" in data:
f.write(f"Image pertinente: {data['is_relevant']}\n")
if "reason" in data:
f.write(f"Raison: {data['reason']}\n\n")
else:
# Sinon on écrit un format plus général
for key, value in data.items():
if key != "prompt" and not isinstance(value, dict):
f.write(f"{key}: {value}\n")
f.write("\n" + "="*80 + "\n")
f.write(f"Fichier original: {os.path.basename(file_path)}")
print(f"Version texte générée dans {txt_path}")
except Exception as e:
print(f"Erreur lors de la génération de la version texte: {e}")
def sauvegarder_donnees(ticket_id: Optional[str] = None, step_name: str = "", data: Optional[Dict[str, Any]] = None, base_dir: Optional[str] = None, is_resultat: bool = False) -> None:
"""
Sauvegarde des données sous forme de fichier JSON.
@ -156,11 +256,20 @@ def sauvegarder_donnees(ticket_id: Optional[str] = None, step_name: str = "", da
# Supprimer les entrées existantes pour cette image
existing_data = [entry for entry in existing_data
if entry.get("metadata", {}).get("image_path", "") != image_path]
existing_data.append(data)
# Éviter la duplication pour le rapport final
if step_name == "rapport_final" and existing_data:
existing_data = [data] # Remplacer au lieu d'ajouter
else:
existing_data.append(data)
# Sauvegarder les données combinées
with open(file_path, "w", encoding="utf-8") as f:
json.dump(existing_data, f, indent=2, ensure_ascii=False)
print(f"Données sauvegardées dans {file_path} ({len(existing_data)} entrées)")
# Générer une version texte pour tous les fichiers JSON
generer_version_texte(existing_data, ticket_id, step_name, file_path)
except Exception as e:
print(f"Erreur lors de la sauvegarde des données: {e}")

File diff suppressed because one or more lines are too long

162
main.py Normal file
View File

@ -0,0 +1,162 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script principal pour exécuter l'analyse complète d'un ticket avec les agents LLM.
Utilise l'orchestrateur et la factory d'agents pour configurer et exécuter l'analyse.
"""
import os
import sys
import argparse
import logging
import json
from typing import Dict, Any, Optional
from agent_factory import AgentFactory, TEXT_MODELS, VISION_MODELS
from orchestrator import Orchestrator
# Configuration du logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(),
logging.FileHandler('main.log')
]
)
logger = logging.getLogger("main")
def parse_arguments():
"""
Parse les arguments de ligne de commande.
Returns:
ArgumentParser: Les arguments parsés
"""
parser = argparse.ArgumentParser(description="Analyse complète d'un ticket avec les agents LLM.")
# Arguments principaux
parser.add_argument("ticket_id", help="ID du ticket à analyser (ex: T1234)")
parser.add_argument("--output_dir", default="output",
help="Répertoire de sortie contenant les tickets (par défaut: output)")
# Configuration des modèles LLM
parser.add_argument("--text-model", choices=TEXT_MODELS,
help="Modèle LLM à utiliser pour l'analyse de texte")
parser.add_argument("--vision-model", choices=VISION_MODELS,
help="Modèle LLM à utiliser pour l'analyse d'images")
# Options de configuration
parser.add_argument("--no-dedup", action="store_true",
help="Désactiver le préfiltrage des doublons d'images")
parser.add_argument("--seuil", type=int, default=5,
help="Seuil de similarité pour détecter les doublons (0-10, défaut=5)")
parser.add_argument("--save-results", action="store_true",
help="Sauvegarder les résultats intermédiaires")
parser.add_argument("--debug", action="store_true",
help="Activer le mode debug avec plus d'informations")
parser.add_argument("--reports-dir", default="reports",
help="Répertoire pour sauvegarder les rapports générés")
# Options d'exécution
parser.add_argument("--skip-ticket-analysis", action="store_true",
help="Sauter l'étape d'analyse du ticket")
parser.add_argument("--skip-image-sorting", action="store_true",
help="Sauter l'étape de tri des images")
parser.add_argument("--skip-image-analysis", action="store_true",
help="Sauter l'étape d'analyse des images")
parser.add_argument("--skip-report", action="store_true",
help="Sauter l'étape de génération du rapport")
return parser.parse_args()
def main():
# Récupérer les arguments
args = parse_arguments()
# Configurer le mode debug
if args.debug:
logging.getLogger().setLevel(logging.DEBUG)
logger.debug("Mode debug activé")
# Préparer la configuration pour l'orchestrateur
config = {
"dedup_enabled": not args.no_dedup,
"dedup_threshold": args.seuil,
"save_results": args.save_results,
"debug_mode": args.debug,
"reports_dir": args.reports_dir
}
logger.info(f"Configuration: {json.dumps(config, indent=2)}")
try:
# Initialiser les agents nécessaires
agents_to_create = {}
if not args.skip_ticket_analysis:
agents_to_create["ticket_analyser"] = True
if not args.skip_image_sorting:
agents_to_create["image_sorter"] = True
if not args.skip_image_analysis:
agents_to_create["image_analyser"] = True
if not args.skip_report:
agents_to_create["report_generator"] = True
# Créer les agents nécessaires
logger.info("Initialisation des agents...")
# Créer les modèles LLM
text_llm = None
if args.text_model and ("ticket_analyser" in agents_to_create or "report_generator" in agents_to_create):
logger.info(f"Utilisation du modèle texte spécifié: {args.text_model}")
text_llm = AgentFactory.create_llm(args.text_model)
vision_llm = None
if args.vision_model and ("image_sorter" in agents_to_create or "image_analyser" in agents_to_create):
logger.info(f"Utilisation du modèle vision spécifié: {args.vision_model}")
vision_llm = AgentFactory.create_llm(args.vision_model)
# Créer seulement les agents nécessaires
agents = {}
if "ticket_analyser" in agents_to_create:
agents["ticket_analyser"] = AgentFactory.create_ticket_analyser(text_llm)
if "image_sorter" in agents_to_create:
agents["image_sorter"] = AgentFactory.create_image_sorter(vision_llm)
if "image_analyser" in agents_to_create:
agents["image_analyser"] = AgentFactory.create_image_analyser(vision_llm)
if "report_generator" in agents_to_create:
agents["report_generator"] = AgentFactory.create_report_generator(text_llm)
# Initialiser l'orchestrateur avec les agents créés
orchestrator = Orchestrator(
output_dir=args.output_dir,
ticket_agent=agents.get("ticket_analyser"),
image_sorter=agents.get("image_sorter"),
image_analyser=agents.get("image_analyser"),
report_generator=agents.get("report_generator"),
config=config
)
# Exécuter l'analyse du ticket
logger.info(f"Début de l'analyse du ticket {args.ticket_id}")
orchestrator.executer(args.ticket_id)
logger.info(f"Analyse du ticket {args.ticket_id} terminée")
except Exception as e:
logger.error(f"Erreur lors de l'exécution: {e}", exc_info=True)
return 1
return 0
if __name__ == "__main__":
sys.exit(main())

View File

@ -3,11 +3,12 @@ import json
import logging
import time
import traceback
from typing import List, Dict, Any, Optional
from typing import List, Dict, Any, Optional, Tuple, Union, Type
from agents.base_agent import BaseAgent
from loaders.ticket_data_loader import TicketDataLoader
from utils.image_dedup import filtrer_images_uniques
# Configuration globale du logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s',
filename='orchestrator.log', filemode='w')
logger = logging.getLogger("Orchestrator")
@ -18,76 +19,323 @@ class Orchestrator:
ticket_agent: Optional[BaseAgent] = None,
image_sorter: Optional[BaseAgent] = None,
image_analyser: Optional[BaseAgent] = None,
report_generator: Optional[BaseAgent] = None):
report_generator: Optional[BaseAgent] = None,
config: Optional[Dict[str, Any]] = None):
"""
Initialise l'orchestrateur avec les agents nécessaires et la configuration.
Args:
output_dir: Répertoire de sortie pour les tickets
ticket_agent: Agent d'analyse de tickets
image_sorter: Agent de tri d'images
image_analyser: Agent d'analyse d'images
report_generator: Agent de génération de rapports
config: Configuration supplémentaire pour l'orchestrateur
"""
self.output_dir = output_dir
self.ticket_agent = ticket_agent
self.image_sorter = image_sorter
self.image_analyser = image_analyser
self.report_generator = report_generator
self.ticket_loader = TicketDataLoader()
# Configuration par défaut
self.config = {
"dedup_enabled": True,
"dedup_threshold": 5,
"save_results": True,
"debug_mode": False,
"reports_dir": "reports"
}
# Mise à jour avec la configuration fournie
if config:
self.config.update(config)
logger.info(f"Orchestrator initialisé avec la configuration: {self.config}")
def trouver_rapport(self, extraction_path: str, ticket_id: str) -> Optional[str]:
"""
Trouve le rapport JSON associé à un ticket dans un chemin d'extraction.
Args:
extraction_path: Chemin de l'extraction
ticket_id: ID du ticket
Returns:
Chemin du rapport trouvé ou None
"""
return self.ticket_loader.trouver_ticket(extraction_path, ticket_id)
def _preparer_donnees_ticket(self, json_path: Optional[str]) -> Optional[Dict[str, Any]]:
"""
Charge et prépare les données du ticket à partir d'un fichier JSON.
Args:
json_path: Chemin du fichier JSON
Returns:
Données du ticket chargées ou None en cas d'erreur
"""
if not json_path:
return None
try:
return self.ticket_loader.charger(json_path)
ticket_data = self.ticket_loader.charger(json_path)
logger.info(f"Données du ticket chargées depuis {json_path}")
return ticket_data
except Exception as e:
logger.error(f"Erreur chargement JSON: {e}")
return None
def executer(self, ticket_specifique: Optional[str] = None):
def executer(self, ticket_specifique: Optional[str] = None) -> None:
"""
Exécute l'analyse sur un ticket spécifique ou sur tous les tickets disponibles.
Args:
ticket_specifique: ID du ticket spécifique à analyser
"""
tickets = ([f"ticket_{ticket_specifique}"] if ticket_specifique else self._detecter_tickets())
if not tickets:
logger.warning("Aucun ticket à traiter trouvé.")
return
logger.info(f"Tickets à traiter: {tickets}")
for ticket in tickets:
self.traiter_ticket(os.path.join(self.output_dir, ticket))
try:
self.traiter_ticket(os.path.join(self.output_dir, ticket))
except Exception as e:
logger.error(f"Erreur lors du traitement du ticket {ticket}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
def traiter_ticket(self, ticket_path: str) -> None:
"""
Traite un ticket en exécutant tous les agents configurés.
Args:
ticket_path: Chemin du répertoire du ticket
"""
ticket_id = os.path.basename(ticket_path).replace("ticket_", "")
for extraction in os.listdir(ticket_path):
extraction_path = os.path.join(ticket_path, extraction)
if not os.path.isdir(extraction_path):
continue
attachments_dir = os.path.join(extraction_path, "attachments")
rapports_dir = os.path.join(extraction_path, f"{ticket_id}_rapports")
os.makedirs(rapports_dir, exist_ok=True)
logger.info(f"Traitement du ticket {ticket_id}")
# Trouver l'extraction la plus récente
extractions = self._trouver_extractions(ticket_path, ticket_id)
if not extractions:
logger.warning(f"Aucune extraction trouvée pour le ticket {ticket_id}")
return
extraction_path = extractions[0]
logger.info(f"Utilisation de l'extraction: {os.path.basename(extraction_path)}")
# Créer les répertoires nécessaires
attachments_dir = os.path.join(extraction_path, "attachments")
rapports_dir = os.path.join(extraction_path, f"{ticket_id}_rapports")
os.makedirs(rapports_dir, exist_ok=True)
json_path = self.trouver_rapport(extraction_path, ticket_id)
ticket_data = self._preparer_donnees_ticket(json_path)
if not ticket_data:
continue
# Charger les données du ticket
json_path = self.trouver_rapport(extraction_path, ticket_id)
ticket_data = self._preparer_donnees_ticket(json_path)
if not ticket_data:
logger.error(f"Impossible de charger les données du ticket {ticket_id}")
return
ticket_analysis = self.ticket_agent.executer(ticket_data) if self.ticket_agent else None
# Étape 1: Analyser le ticket (si l'agent est disponible)
ticket_analysis = None
if self.ticket_agent:
logger.info(f"Exécution de l'agent d'analyse de ticket pour {ticket_id}")
try:
ticket_analysis = self.ticket_agent.executer(ticket_data)
logger.info(f"Analyse du ticket terminée: {len(ticket_analysis) if ticket_analysis else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse du ticket {ticket_id}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
relevant_images, images_analyses = [], {}
if os.path.exists(attachments_dir):
images = [f for f in os.listdir(attachments_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
image_paths = filtrer_images_uniques([os.path.join(attachments_dir, img) for img in images])
# Étape 2: Trier et analyser les images
relevant_images, images_analyses = [], {}
if os.path.exists(attachments_dir) and (self.image_sorter or self.image_analyser):
logger.info(f"Traitement des images pour le ticket {ticket_id}")
# Récupérer toutes les images
images = self._trouver_images_dans_dossier(attachments_dir)
logger.info(f"Images trouvées: {len(images)}")
# Dédupliquer les images si la fonctionnalité est activée
if self.config.get("dedup_enabled", True):
images_avant = len(images)
images = filtrer_images_uniques(
images,
seuil_hamming=self.config.get("dedup_threshold", 5),
ticket_id=ticket_id
)
logger.info(f"Dédoublonnage: {images_avant}{len(images)} images")
# Trier les images
if self.image_sorter:
for path in images:
try:
result_tri = self.image_sorter.executer(path)
is_relevant = result_tri.get("is_relevant", True)
images_analyses[path] = {"sorting": result_tri, "analysis": None}
if is_relevant:
relevant_images.append(path)
logger.info(f"Image pertinente: {os.path.basename(path)}")
except Exception as e:
logger.error(f"Erreur lors du tri de l'image {os.path.basename(path)}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
else:
# Sans agent de tri, toutes les images sont considérées comme pertinentes
relevant_images = images
for path in images:
images_analyses[path] = {
"sorting": {"is_relevant": True, "reason": "pas d'agent de tri configuré"},
"analysis": None
}
logger.info(f"Images pertinentes: {len(relevant_images)}/{len(images)}")
# Analyser les images pertinentes
if self.image_analyser and ticket_analysis:
for path in relevant_images:
try:
logger.info(f"Analyse de l'image: {os.path.basename(path)}")
result = self.image_analyser.executer(path, contexte=ticket_analysis)
images_analyses[path]["analysis"] = result
if result and "error" not in result:
logger.info(f"Analyse terminée pour {os.path.basename(path)}")
else:
logger.warning(f"Analyse incomplète pour {os.path.basename(path)}")
except Exception as e:
logger.error(f"Erreur lors de l'analyse de l'image {os.path.basename(path)}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
for path in image_paths:
result_tri = self.image_sorter.executer(path) if self.image_sorter else {"is_relevant": True, "reason": "pas de tri"}
is_rel = result_tri.get("is_relevant", True)
images_analyses[path] = {"sorting": result_tri, "analysis": None}
if is_rel:
relevant_images.append(path)
for path in relevant_images:
result = self.image_analyser.executer(path, contexte=ticket_analysis) if self.image_analyser else None
if result:
images_analyses[path]["analysis"] = result
if self.report_generator:
# Étape 3: Générer le rapport final
if self.report_generator and ticket_analysis:
try:
logger.info(f"Génération du rapport final pour le ticket {ticket_id}")
rapport_data = {
"ticket_id": ticket_id,
"ticket_data": ticket_data,
"ticket_analyse": ticket_analysis,
"analyse_images": images_analyses
}
reports_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../reports"))
# Créer le répertoire pour les rapports si nécessaire
reports_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", self.config.get("reports_dir", "reports")))
dest_dir = os.path.join(reports_root, ticket_id)
os.makedirs(dest_dir, exist_ok=True)
self.report_generator.executer(rapport_data, dest_dir)
# Générer le rapport
rapport_final = self.report_generator.executer(rapport_data)
# Sauvegarder le rapport
if self.config.get("save_results", True):
rapport_path = os.path.join(dest_dir, f"rapport_final_{ticket_id}.json")
with open(rapport_path, "w", encoding="utf-8") as f:
json.dump(
{
"ticket_id": ticket_id,
"rapport": rapport_final,
"metadata": {
"images_total": len(images_analyses),
"images_pertinentes": len(relevant_images),
"images_analysees": sum(1 for img in images_analyses.values() if img.get("analysis")),
"timestamp": time.strftime("%Y%m%d_%H%M%S")
}
},
f,
ensure_ascii=False,
indent=2
)
logger.info(f"Rapport final sauvegardé dans {rapport_path}")
# Sauvegarder également une version texte du rapport pour faciliter la lecture
rapport_txt_path = os.path.join(dest_dir, f"rapport_final_{ticket_id}.txt")
with open(rapport_txt_path, "w", encoding="utf-8") as f:
f.write(f"RAPPORT D'ANALYSE DU TICKET {ticket_id}\n")
f.write("="*50 + "\n\n")
f.write(rapport_final)
logger.info(f"Version texte du rapport sauvegardée dans {rapport_txt_path}")
except Exception as e:
logger.error(f"Erreur lors de la génération du rapport pour {ticket_id}: {e}")
if self.config.get("debug_mode"):
logger.error(traceback.format_exc())
logger.info(f"Traitement du ticket {ticket_id} terminé")
def _detecter_tickets(self) -> List[str]:
return [d for d in os.listdir(self.output_dir) if os.path.isdir(os.path.join(self.output_dir, d)) and d.startswith("ticket_")]
"""
Détecte tous les tickets disponibles dans le répertoire de sortie.
Returns:
Liste des noms de répertoires de tickets
"""
if not os.path.exists(self.output_dir):
logger.warning(f"Le répertoire de sortie {self.output_dir} n'existe pas")
return []
return [d for d in os.listdir(self.output_dir)
if os.path.isdir(os.path.join(self.output_dir, d))
and d.startswith("ticket_")]
def _trouver_extractions(self, ticket_path: str, ticket_id: str) -> List[str]:
"""
Trouve toutes les extractions pour un ticket et les trie par date (la plus récente en premier).
Args:
ticket_path: Chemin du répertoire du ticket
ticket_id: ID du ticket
Returns:
Liste des chemins d'extraction triés par date (la plus récente en premier)
"""
if not os.path.exists(ticket_path):
return []
extractions = [
os.path.join(ticket_path, d) for d in os.listdir(ticket_path)
if os.path.isdir(os.path.join(ticket_path, d)) and d.startswith(ticket_id)
]
# Trier par date de modification (plus récente en premier)
extractions.sort(key=lambda x: os.path.getmtime(x), reverse=True)
return extractions
def _trouver_images_dans_dossier(self, dossier: str) -> List[str]:
"""
Trouve toutes les images dans un dossier et ses sous-dossiers.
Args:
dossier: Chemin du dossier à explorer
Returns:
Liste des chemins d'images trouvées
"""
extensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp']
images = []
# Explorer le dossier principal
for fichier in os.listdir(dossier):
fichier_path = os.path.join(dossier, fichier)
# Si c'est un fichier avec une extension d'image
if os.path.isfile(fichier_path) and any(fichier.lower().endswith(ext) for ext in extensions):
images.append(fichier_path)
# Si c'est un dossier, l'explorer récursivement
elif os.path.isdir(fichier_path):
for sous_fichier in os.listdir(fichier_path):
sous_fichier_path = os.path.join(fichier_path, sous_fichier)
if os.path.isfile(sous_fichier_path) and any(sous_fichier.lower().endswith(ext) for ext in extensions):
images.append(sous_fichier_path)
return images

View File

@ -1,78 +0,0 @@
TICKET: T11082 - MISE A JOUR DE LA PLATEFORME
Date d'extraction: 2025-04-16 15:12:11
Nombre de messages: 5
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 10:40:30
DE: GEOLABO
OBJET: MISE A JOUR DE LA PLATEFORME
Bonjour,
La plateforme est en mise ce matin depuis un moment, pourra ton accéder à cette dernière en début daprès midi ?
Merci davance
GRANGIER Aurore
Téléphone:04.92.76.65.93
Télécopie:09.67.22.65.93
Adresse Email :
contact@geolabo.fr
adresse postale:
172 Chemin des Grands Jardins
04220 SAINTE TULLE
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 10:41:36
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 10:45:56
DE: Romuald GRUSON
OBJET: Re: [T11082] - MISE A JOUR DE LA PLATEFORME
Bonjour
,
Nous relançons la mise à jour dès à présent. Votre plateforme sera de nouveau disponible en début d'après-midi.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 10:46:17
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 07:51:14
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,27 +0,0 @@
TICKET: T11083 - Site bloqué après MAJ
Date d'extraction: 2025-04-16 15:12:10
Nombre de messages: 2
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 10:45:17
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 10:47:10
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,56 +0,0 @@
TICKET: T11084 - Site bloqué après MAJ
Date d'extraction: 2025-04-16 15:12:10
Nombre de messages: 4
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 10:45:20
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 13:06:13
DE: Romuald GRUSON
OBJET: Re: [T11084] - Site bloqué après MAJ
Bonjour
,
Nous avons relancé la mise à jour sur votre plateforme BRG-LAB, celle ci est de nouveau disponible et à jour.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 13:06:26
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 07:51:20
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,74 +0,0 @@
TICKET: T11085 - cbao_support_technique - Message : ROCHES ET DERIV<49>S Nicolas GOSSELIN
Date d'extraction: 2025-04-16 15:12:09
Nombre de messages: 4
================================================================================
DATE: 2025-03-19 10:44:29
DE: vocalia
OBJET: cbao_support_technique - Message : ROCHES ET DERIV<49>S Nicolas GOSSELIN
Veuillez trouver ci-dessous le suivi de vos appels.
Message : le 19/03/2025 à 11:41
Nom
ROCHES ET DERIVÉS
Prénom
Nicolas GOSSELIN
Adresse mail
oui
Panne
plus aucun droit suite a la mise a jour
Rv
message répondeur
Ticket
pas concerné
Message
Message pour : LAFAY Fabien / urgence --joindre systématiquement Fabien----
M.GOSSELIN de l entreprise roches et dérivés cherche à vous joindre, le site est bloqué depuis ce matin suite à une mise à jour. Elsa
Adresse
- 14790 MOUEN
Tél
02-31-26-25-66
E-mail
n.gosselin@groupemouen.fr
Gsm
06-10-56-13-06
Vos appels sur Flux RSS :
Cliquez ici
Cordialement
Agenda5
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 10:46:43
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 13:07:53
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 07:51:26
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,67 +0,0 @@
TICKET: T11086 - Erreur fatale essai VBS
Date d'extraction: 2025-04-16 15:12:08
Nombre de messages: 5
================================================================================
DATE: 2025-03-19 11:02:12
DE: Delphine PILON
OBJET: Erreur fatale essai VBS
Bonjour,
Sur tous les essais VBS, jai le message derreur ci-dessous qui saffiche.
Pouvez-vous, sil vous plait, résoudre le problème assez rapidement ?
Mes clients attendent leurs résultats
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 11:06:56
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 13:03:13
DE: Romuald GRUSON
OBJET: Re: [T11086] - Erreur fatale essai VBS
Bonjour
,
Nous avons déployé en urgence un patch ce midi pour corriger cette anomalie. Nous sommes désolés pour ce désagrément, une erreur de compilation des données s'est glissée dans le déploiement de notre mise à jour de cette nuit.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 13:04:19
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 07:51:32
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,68 +0,0 @@
TICKET: T11087 - erreur fatale essai aplatissement
Date d'extraction: 2025-04-16 15:12:07
Nombre de messages: 5
================================================================================
DATE: 2025-03-19 11:33:40
DE: Delphine PILON
OBJET: erreur fatale essai aplatissement
Rebonjour,
Jai également une erreur fatale sur lessai aplatissement.
Pouvez-vous, sil vous plait, debugger lensemble des essais bloqués
Merci
Bien cordialement
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 11:37:10
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 13:10:56
DE: Romuald GRUSON
OBJET: Re: [T11087] - erreur fatale essai aplatissement
Bonjour
,
Nous avons déployé un patch ce midi pour corriger cette anomalie. Nous sommes désolés pour ce désagrément, une erreur de compilation des données s'est glissée dans le déploiement de notre mise à jour de cette nuit.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 13:11:24
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 07:51:38
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,68 +0,0 @@
TICKET: T11088 - BUG mise à jour
Date d'extraction: 2025-04-16 15:12:06
Nombre de messages: 5
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 13:20:33
DE: Dominique CARVAL
OBJET: BUG mise à jour
*Message transféré - contenu non extractible*
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 13:21:49
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 13:49:59
DE: Romuald GRUSON
OBJET: Re: [T11088] - BUG mise à jour
Bonjour
,
Nous avons relancé la mise à jour sur votre plateforme BRG-LAB, celle ci sera disponible dans quelques instants.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 13:50:01
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 07:51:44
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,148 +0,0 @@
TICKET: T11089 - Problème création feuille paillasse béton
Date d'extraction: 2025-04-16 15:12:03
Nombre de messages: 10
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 15:02:29
DE: Contact Laboratoire routier
OBJET: Problème création feuille paillasse béton
Bonjour,
Je rencontre un problème pour créer des échantillons d'éprouvettes béton, ci-joint capture d'écran.
J'en ai déjà créé 3 depuis ce matin, sans souci et là, une fois de plus, un beug alors que par défaut c'est BRG LAB qui nous impose ses numéros en suite logique.
je suis donc bloquée et je ne peux plus travailler.
Merci de faire le nécessaire rapidement.
cordialement
Peggy BRIERE
Laborantin routier
Département de la Sarthe
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 15:06:46
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-19 15:36:17
DE: Romuald GRUSON
OBJET: Re: [T11089] - Problème création feuille paillasse béton
Bonjour
,
Nous constatons bien le dysfonctionnement d'incrémentation sur votre prochain échantillon de béton. Pour y remédier, vous pouvez renseigner manuellement le prélèvement indiqué +1. Après cette action, le dysfonctionnement sera résolu et la numérotation sincrémente correctement.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-19 15:36:26
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-20 06:55:41
DE: Contact Laboratoire routier
OBJET: RE: [T11089] - Problème création feuille paillasse béton
Bonjour,
Cela ne fonctionne toujours pas même après votre manip.
Merci de faire le nécessaire car nous sommes toujours bloqué !!!!!
cordialement
Peggy BRIERE
Laborantin routier
Département de la Sarthe
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 07:38:04
DE: Romuald GRUSON
--------------------------------------------------------------------------------
DATE: 2025-03-20 08:10:58
DE: Romuald GRUSON
20/03/2025 09:10 Plusieurs appels non répondu
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-20 08:17:59
DE: Romuald GRUSON
OBJET: Re: [T11089] - Problème création feuille paillasse béton
Bonjour
,
Le dysfonctionnement survient lorsqu'un échantillon a été réalisé sur l'année précédente au prélèvement.
La solution la plus simple est de renseigner la numérotation manuellement à létape correspondante. Je vous ai joint une capture décran : à la place de
0032
, vous pouvez saisir
0033
.
Pour tout nouvel échantillon créé cette année, vous ne rencontrerez plus de problème. En revanche, pour les échantillons de lannée précédente, une saisie manuelle restera nécessaire.
Je reste disponible pour toute discussion téléphonique. Nhésitez pas à me communiquer un numéro et un créneau pour vous joindre.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 08:18:04
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-04 08:06:34
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,67 +0,0 @@
TICKET: T11091 - Norme 1097-1
Date d'extraction: 2025-04-16 15:12:02
Nombre de messages: 5
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 09:48:30
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 09:51:42
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-20 10:02:38
DE: Romuald GRUSON
OBJET: Re: [T11091] - Norme 1097-1
Bonjour
,
Nous avons apporté les modifications sur la feuille de paillasse afin qu'elle corresponde à la norme. Merci pour votre contribution.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 10:02:40
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-04 08:07:17
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,74 +0,0 @@
TICKET: T11093 - Re: [T9294] - Fiche CE - Catégories manquant pour teneur en sulfate soluble dans l'eau (SS)
Date d'extraction: 2025-04-16 15:12:01
Nombre de messages: 5
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-20 15:38:22
DE: Aline POULLARD
OBJET: Re: [T9294] - Fiche CE - Catégories manquant pour teneur en sulfate soluble dans l'eau (SS)
Bonjour,
Je viens de vouloir mettre à jour la catégorie, mais je vois que suite à votre mail ci-dessous je n'arrive toujours pas à indiquer l'indiquer.
Pouvez vous m'expliquer comment faire.
Bien cordialement.
Mme Aline POULLARD
Directrice Générale GRANUDEM Développement
06.10.99.02.85
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 15:42:32
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-20 15:59:33
DE: Romuald GRUSON
OBJET: Re: [T11093] - Re: [T9294] - Fiche CE - Catégories manquant pour teneur en sulfate soluble dans l'eau (SS)
Bonjour
,
Effectivement, nous constatons bien le dysfonctionnement. Nous avons donc rouvert le ticket T9294. Désolé pour le désagrément.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-20 15:59:41
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-04 08:07:23
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,85 +0,0 @@
TICKET: T11112 - Problème BRG LAB
Date d'extraction: 2025-04-16 10:33:18
Nombre de messages: 5
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-26 08:14:00
DE: Norman IZQUIERDO
OBJET: Problème BRG LAB
Bonjour,
Nous rencontrons un souci lors de lenregistrement des prélèvements béton concernant lheure de confection.
Quand ce nest pas nous qui confectionnons les éprouvettes, il ny a pas de problème, nous pouvons rentrer une heure de confection et les échéances décrasements salignent sur cette heure.
Par contre quand nous confectionnons les éprouvettes, impossible de revenir dans le prélèvement pour incrémenter lheure.
Si nous avons des échéances à jeune âge, impossible davoir quelque chose de cohérent dans les heures et les dates décrasement.
Cest dautant plus incompréhensible que ça se fait correctement pour un prélèvement fait par le client.
Merci pour votre réponse rapide.
Norman IZQUIERDO
Responsable de pôle   Essais et Contrôles
AGENCE DE BORDEAUX
n.izquierdo@infraneo.com
05.56.36.81.57
06.80.54.46.00
3, rue Charles Tellier
33140
VILLENAVE D'ORNON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 08:16:46
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-26 08:55:04
DE: Fabien LAFAY
OBJET: Re: [T11112] - Problème BRG LAB
Bonjour
,
Dans le cas déprouvettes confectionnée par vous-même, la date de confection correspond à la date du prélèvement.
Pour mettre à jour cette date, il faut vous rendre dans l'onglet Prélèvement de l'échantillon et saisir la date et l'heure du prélèvement.
La date et l'heure de confection ainsi que les dates prévues d'écrasement seront alors automatiquement mises à jour.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 08:55:19
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-10 06:42:03
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,92 +0,0 @@
TICKET: T11113 - PROBLÈME D'ACCÈS SUR L'ESSAI MESURE DU TEMPS DE PRISE ET DE LA STABILITÉ.
Date d'extraction: 2025-04-16 10:33:15
Nombre de messages: 6
================================================================================
DATE: 2025-03-26 09:44:28
DE: Ibrahima SAMBOU
OBJET: PROBLÈME D'ACCÈS SUR L'ESSAI MESURE DU TEMPS DE PRISE ET DE LA STABILITÉ.
Bonjour CBAO,
Merci de rendre disponible le feuille de calcul de l'essai sur ciment "
Mesure du temps de prise et de la stabilité"
EDK-2025-CIM-0005
Cdt!
Ibrahima SAMBOU
Technicien
L
aboratoire
Tel :
(+221) 33 865 31 51
Cel :
(+221) 76 223 69 43
Site web :
www.agtssn.com
AGTS Sénégal
, 39, Mamelles Aviation, près de la Pharmacie Mamelles
Dans le cadre de notre engagement HSSE, AGTS SN vous conseille, si vous imprimez ce courrier de ne pas oublier de le recycler.
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 09:46:51
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 10:52:22
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-26 13:31:45
DE: Fabien LAFAY
OBJET: Re: [T11113] - PROBLÈME D'ACCÈS SUR L'ESSAI MESURE DU TEMPS DE PRISE ET DE LA STABILITÉ.
Bonjour
,
Le problème a été résolu, le nom de l'essai est à présent bien visible.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 13:31:51
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-10 14:32:34
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,74 +0,0 @@
TICKET: T11114 - lenteur....
Date d'extraction: 2025-04-16 10:33:14
Nombre de messages: 5
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-26 13:31:57
DE: Dominique CARVAL
OBJET: lenteur....
Bonjour,
Grosse lenteur au niveau du logiciel…
Bonne réception
Dominique CARVAL
Responsable du pôle Laboratoire Routier
Direction des Infrastructures et des mobilités (DIM)
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 13:32:10
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-26 15:00:47
DE: Fabien LAFAY
OBJET: Re: [T11114] - lenteur....
Bonjour
,
Après plusieurs vérification, nous n'avons pas constaté de ralentissement particulier sur le logiciel.
Il peut s'agir d'un problème de réseau plus global, je vous invite à contacter votre service informatique si le problème persiste.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 15:00:52
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-10 14:32:40
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,85 +0,0 @@
TICKET: T11115 - Echantillon éffacé
Date d'extraction: 2025-04-16 10:33:13
Nombre de messages: 7
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 14:30:23
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-26 14:58:42
DE: Fabien LAFAY
OBJET: Re: [T11115] - Echantillon éffacé
Bonjour
,
Nous effectuons une sauvegarde des données toutes les nuits, donc nous pouvons éventuellement retrouver l'échantillon s'il était déjà créé hier. Les données saisies aujourd'hui ne pourront par contre pas être récupérées.
Est-ce necessaire que l'on récupère cette sauvegarde?
Je vais néanmoins me renseigner pour savoir s'il est possible de restaurer un échantillon unique ou si on doit forcement restaurer toute la base de donnée.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 14:58:47
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2025-03-26 15:08:14
DE: David SALERES
Oui je veux bien que vous récupériez l'échantillon 2025-BB-0014 si c'est possible.
Merci
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-26 15:18:08
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2025-03-27 08:35:46
DE: Fabien LAFAY
Contacté par téléphone.
Il va recréer l'échantillon à la main
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 08:35:48
DE: Fabien LAFAY
--------------------------------------------------------------------------------

View File

@ -1,58 +0,0 @@
TICKET: T11117 - Validation des rapports
Date d'extraction: 2025-04-16 10:33:12
Nombre de messages: 4
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 12:19:58
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-27 13:10:10
DE: Fabien LAFAY
OBJET: Re: [T11117] - Validation des rapports
Bonjour
,
Il y avait en effet un problème de paramétrage des droits sur votre plateforme suite à la dernière mise à jour.
Je viens de corriger cela, vous devriez à présent pouvoir accéder aux essais.
Il faudra peut-être vous déconnecter et reconnecter à la plateforme pour que la modification soit prise en compte.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 13:10:16
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-11 07:04:06
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,111 +0,0 @@
TICKET: T11118 - Duplication éprouvettes
Date d'extraction: 2025-04-16 10:33:11
Nombre de messages: 7
================================================================================
DATE: 2025-03-27 12:23:44
DE: vocalia
OBJET: cbao_support_technique - Message : SOCI<43>T<EFBFBD> BHR B<>TON Mr Tondeux
Veuillez trouver ci-dessous le suivi de vos appels.
Message : le 27/03/2025 à 13:21
Nom
SOCIéTé BHR BéTON
Prénom
Mr Tondeux
Adresse mail
oui
Panne
éprouvettes s enregistrant en duplica et ne peuvent pas être supprimées
Rv
message répondeur
Ticket
non
Message
Message pour : support Technique / support--
bonjour, il a les mêmes soucis depuis 2 semaines. Marie-Anne /
Adresse
Tél
06-60-36-11-22
E-mail
mathis.tourneux@bhrbeton.com
Vos appels sur Flux RSS :
Cliquez ici
Cordialement
Agenda5
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 12:26:47
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 13:12:30
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 13:12:31
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-31 07:20:23
DE: Romuald GRUSON
OBJET: Re: [T11118] - Duplication éprouvettes
Bonjour
,
Il nous semblait que, depuis la mise à jour déployée en cours de semaine passée, l'incident était résolu. Pouvez-vous nous communiquer un numéro d'échantillon ou toute autre information (capture d'écran, image…) qui nous permettrait d'avancer dans la recherche de ce dysfonctionnement ?
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 07:20:26
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 06:32:34
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,61 +0,0 @@
TICKET: T11119 - CO2 d'une formule beton.
Date d'extraction: 2025-04-16 10:33:11
Nombre de messages: 4
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 15:53:30
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-27 16:24:02
DE: Fabien LAFAY
OBJET: Re: [T11119] - CO2 d'une formule beton.
Bonjour
,
En effet le logiciel ne permet pas en l'état de faire apparaitre le CO2 dans la fiche formule.
Comme cela est urgent pour demain je vous propose d'ajouter le CO2 manuelement dans le fichier PDF de votre fiche formule.
Vous pouvez utiliser pour cela le site
https://www.ilovepdf.com/fr/modifier-pdf
qui permet d'ajouter facilement du texte dans un PDF.
J'ouvre un ticket de notre coté pour que l'on ajoute cette information à l'impression.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-27 16:24:04
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-11 07:04:13
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,69 +0,0 @@
TICKET: T11122 - ERREUR CREATION AFFAIRE
Date d'extraction: 2025-04-16 10:33:10
Nombre de messages: 5
================================================================================
DATE: 2025-03-28 14:48:42
DE: Edouard SYLLA
OBJET: ERREUR CREATION AFFAIRE
Bonjour,
Nous vous informons que nous avons un problème pour la création d'un nouveau dossier.
Merci de voir en PJ la notification.
Comptant sur votre diligence habituelle
Cordialement.
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-28 14:51:51
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-28 16:02:41
DE: Fabien LAFAY
OBJET: Re: [T11122] - ERREUR CREATION AFFAIRE
Bonjour
,
Cette erreur est causée par le fait que vous essayez de créer une affaire avec le même nom qu'une affaire existante.
Il faudrait donc créer une affaire avec un nom différent ou utiliser l'affaire existante qui porte déjà ce nom.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-28 16:02:50
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-14 07:03:15
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,98 +0,0 @@
TICKET: T11123 - PARTIE D'OUVRAGE
Date d'extraction: 2025-04-16 10:33:08
Nombre de messages: 7
================================================================================
DATE: 2025-03-28 15:00:33
DE: Christophe THIOU
OBJET: PARTIE D'OUVRAGE
Bonjour,
Les parties douvrage napparaissent plus.
Cordialement.
THIOU Christophe
Responsable laboratoire
NORD OUEST BETON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-28 15:06:40
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-28 15:59:46
DE: Fabien LAFAY
OBJET: Re: [T11123] - PARTIE D'OUVRAGE
Bonjour
,
Nous venons d'appliquer un correctif sur votre site, les parties de chantier sont de nouveau accessibles.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-28 15:59:50
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2025-03-28 16:02:56
DE: Christophe THIOU
OBJET: Re: [T11123] PARTIE D'OUVRAGE
bonjour,
je ne peux plus accéder à CBAO.
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-28 16:06:01
DE: Fabien LAFAY
OBJET: Re: [T11123] - PARTIE D'OUVRAGE
Bonjour
,
Votre site est bien accessible à l'adresse suivante :
https://nob.brg-lab.com/
Tout ce qui se trouve après le .com est dynamique, cela a donc été modifié après que l'on ait appliqué le correctif.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-14 07:03:22
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,85 +0,0 @@
TICKET: T11125 - Saisie essais impossible
Date d'extraction: 2025-04-16 10:33:07
Nombre de messages: 6
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-31 08:46:35
DE: Marion NICOD
OBJET: Saisie essais impossible
Bonjour,
Nous avons un problème avec la saisie de certains essais :
Je reste à votre disposition pour tout renseignement.
Cordialement,
Marion NICOD
Responsable de Laboratoire
AGENCE GRAND EST
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 08:46:55
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:01:06
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-31 09:58:56
DE: Romuald GRUSON
OBJET: Re: [T11125] - Saisie essais impossible
Bonjour
,
Notre équipe de développement a mis à jour la licence du tableur. Vous pouvez dès à présent consulter et saisir vos essais.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:59:00
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 06:32:43
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,78 +0,0 @@
TICKET: T11126 - Message d'erreur sur essais au format tableur FTP
Date d'extraction: 2025-04-16 10:33:06
Nombre de messages: 6
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 08:47:26
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:01:21
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:01:43
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-31 09:58:26
DE: Romuald GRUSON
OBJET: Re: [T11126] - Message d'erreur sur essais au format tableur
Bonjour
,
Notre équipe de développement a mis à jour la licence du tableur. Vous pouvez dès à présent consulter et saisir vos essais.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:58:29
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 06:32:49
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,78 +0,0 @@
TICKET: T11127 - ET2025-E-0114 - Impossible d'afficher l'essais
Date d'extraction: 2025-04-16 10:33:05
Nombre de messages: 5
================================================================================
DATE: 2025-03-31 09:05:41
DE: Céline NOYER
OBJET: ET2025-E-0114 - Impossible d'afficher l'essais
Bonjour,
Site
: http://nextroad.brg-lab.com/
Utilisateur concerné
: Séville
Problème bloquant
: Oui
Description du problème
: Impossible de voir les informations associées.
Page grise avec un message d'erreur.
En vous remerciant,
Cordialement,
Céline NOYER
Chef de Projets Techniques et R&D
TR&D Project Manager
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:07:04
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-03-31 09:57:53
DE: Romuald GRUSON
OBJET: Re: [T11127] - ET2025-E-0114 - Impossible d'afficher l'essais
Bonjour
,
Notre équipe de développement a mis à jour la licence du tableur. Vous pouvez dès à présent consulter et saisir vos essais.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-03-31 09:57:55
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 06:32:56
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,38 +0,0 @@
TICKET: T11130 - sondages dans le désordre
Date d'extraction: 2025-04-16 10:33:04
Nombre de messages: 3
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-01 08:00:11
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-01 09:02:33
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-01 09:49:55
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,102 +0,0 @@
TICKET: T11132 - Re: brg-lab.com
Date d'extraction: 2025-04-16 10:33:04
Nombre de messages: 4
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-01 12:37:08
DE: Inconnu
OBJET: Re: brg-lab.com
Bonjour,
J'imagine que vous avez probablement un agenda très chargé mais je tenais simplement à vérifier que vous avez bien reçu mon précédent email.
Lidée derrière ce model que j'adorerai vous présenter serait de vous faire trouver plus facilement par vos potentiels clients.
Cela vous éviterait aussi de devoir payer chaque mois pour maintenir votre site opérationnel et de garder un accès direct à sa gestion!
Auriez-vous quelques minutes à maccorder pour en parler de vive voix?
Très belle journée à vous,
Zakariya Loutfi - +33 7 69 05 70 37
co-fondateur YodLynci
45 rue Gilles Roberval, 30900 Nîmes
On Fri, March 28, 2025 7:46 AM, Zakariya Loutfi
wrote:
Bonjour,
En consultant les entreprises situées dans votre région, j'ai trouvé le site web de votre entreprise brg-lab.com et je souhaiterais vous proposer une version améliorée de votre site, optimisée pour renforcer votre visibilité et attirer davantage de clients.
Cela vous intéresserait-il que je vous présente ce model? Si c'est le cas, pourriez-vous me donner votre numéro et quelques disponibilités?
Je vous souhaite une excellente journée,
Zakariya Loutfi - +33 7 69 05 70 37
co-fondateur YodLynci
45 rue Gilles Roberval, 30900 Nîmes
PS : Cela ne vous engage à rien !
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-01 12:42:22
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-01 13:05:51
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-04 12:42:27
DE: Inconnu
OBJET: Re: brg-lab.com
Bonjour,
Il est possible que je me sois mal exprimé concernant lobjectif de mes services. Je suis désolé pour ça.
L'idée de base du prototype de site que je voudrais vous montrer est de vous rendre plus visible en ligne auprès de vos prospects grâce à un référencement efficace.
Des entreprises paient des abonnements élevés pour maintenir leur site en ligne par l'intermédiaire de leurs webmasters. Avec mes solutions, plus besoin de dépenser pour rien.
D'autres souhaitent modifier leur site sans avoir à payer constamment leur prestataire, et c'est également ce que je permets
Vous n'êtes pas intéressé par l'amélioration de l'un de ces trois éléments ? Si ce nest pas le cas, faites-le moi savoir et je ne vous écrirai plus.
Passez une très belle journée,
Zakariya Loutfi - +33 7 69 05 70 37
co-fondateur YodLynci
45 rue Gilles Roberval, 30900 Nîmes
On Tue, April 1, 2025 12:37 PM, Zakariya Loutfi
wrote:
Bonjour,
J'imagine que vous avez probablement un agenda très chargé mais je tenais simplement à vérifier que vous avez bien reçu mon précédent email.
Lidée derrière ce model que j'adorerai vous présenter serait de vous faire trouver plus facilement par vos potentiels clients.
Cela vous éviterait aussi de devoir payer chaque mois pour maintenir votre site opérationnel et de garder un accès direct à sa gestion!
Auriez-vous quelques minutes à maccorder pour en parler de vive voix?
Très belle journée à vous,
Zakariya Loutfi - +33 7 69 05 70 37
co-fondateur YodLynci
45 rue Gilles Roberval, 30900 Nîmes
On Fri, March 28, 2025 7:46 AM, Zakariya Loutfi
wrote:
Bonjour,
En consultant les entreprises situées dans votre région, j'ai trouvé le site web de votre entreprise brg-lab.com et je souhaiterais vous proposer une version améliorée de votre site, optimisée pour renforcer votre visibilité et attirer davantage de clients.
Cela vous intéresserait-il que je vous présente ce model? Si c'est le cas, pourriez-vous me donner votre numéro et quelques disponibilités?
Je vous souhaite une excellente journée,
Zakariya Loutfi - +33 7 69 05 70 37
co-fondateur YodLynci
45 rue Gilles Roberval, 30900 Nîmes
PS : Cela ne vous engage à rien !
--------------------------------------------------------------------------------

View File

@ -1,27 +0,0 @@
TICKET: T11140 - Impossible de prendre en compte un prix dans une formulation
Date d'extraction: 2025-04-16 10:33:03
Nombre de messages: 2
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-02 12:25:00
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-02 12:49:54
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -0,0 +1,44 @@
[
{
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface web affichée dans un navigateur. Voici les éléments visibles :\n- **Interface logicielle** : Il s'agit d'une page web avec un en-tête contenant des onglets et des icônes.\n- **Nom ou titre du logiciel ou du module** : Le titre de la page est **\"It works!\"**.\n- **Messages système** : Un message principal est affiché :\n > \"If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!\"\n- **Contenu de la page** :\n - La page contient des instructions pour accéder à la documentation locale de Tomcat et des liens vers des exemples et des outils de gestion.\n - Les liens suivants sont visibles :\n - `tomcat7-docs` : Accès à la documentation locale.\n - `tomcat7-examples` : Accès aux exemples de servlets et JSP.\n - `tomcat7-admin` : Accès aux outils de gestion (`manager webapp` et `host-manager webapp`).\n - Une note de sécurité indique que l'accès aux outils de gestion est restreint aux utilisateurs avec des rôles spécifiques (`manager-gui` et `admin-gui`).\n\n#### 2. Éléments techniques clés\n- **Versions logicielles ou modules affichés** :\n - La page mentionne **\"Tomcat\"** et fait référence à **\"Tomcat 7\"** dans les liens.\n- **Codes d'erreur visibles** : Aucun code d'erreur n'est visible dans l'image.\n- **Paramètres configurables** : Aucun paramètre configurable n'est visible (pas de champs de texte, sliders, dropdowns ou cases à cocher).\n- **Valeurs affichées ou préremplies dans les champs** : Aucune valeur n'est affichée dans des champs, car il n'y a pas de champs interactifs visibles.\n- **Éléments désactivés, grisés ou masqués** : Aucun élément n'est visiblement désactivé, grisé ou masqué.\n- **Boutons actifs/inactifs** : Les liens (`tomcat7-docs`, `tomcat7-examples`, `tomcat7-admin`) sont des liens cliquables, donc actifs.\n\n#### 3. Éléments mis en évidence\n- **Zones entourées, encadrées, surlignées ou fléchées** : Aucune zone n'est mise en évidence de cette manière.\n- **Contenu mis en valeur** : Le message principal **\"It works!\"** est affiché en gros caractères, ce qui le rend visuellement dominant.\n\n#### 4. Relation avec le problème\n- **Lien avec le problème décrit dans le ticket** :\n - Le ticket mentionne un problème d'accès à l'essai au bleu, mais l'image montre une page de confirmation de l'installation réussie de Tomcat.\n - Il n'y a aucune mention directe de l'essai au bleu dans l'image.\n- **Composants liés à une mauvaise configuration ou une erreur** : Aucun élément visible dans l'image ne semble indiquer une mauvaise configuration ou une erreur.\n\n#### 5. Réponses potentielles\n- **Éléments de réponse apportés par l'image** :\n - L'image confirme que l'adresse https://zk1.brg-lab.com/ est accessible et affiche une page de confirmation de l'installation de Tomcat.\n - Elle ne répond pas directement à la question de l'accès à l'essai au bleu, mais elle montre que le serveur Tomcat fonctionne correctement.\n\n#### 6. Lien avec la discussion\n- **Correspondance avec le fil de discussion** :\n - L'image correspond à l'étape où le support demande au client de vérifier l'accès à l'adresse https://zk1.brg-lab.com/.\n - Le client a confirmé que l'adresse fonctionne, ce qui est cohérent avec le contenu de l'image.\n - Il n'y a pas de mention directe de l'essai au bleu dans l'image, mais elle confirme l'accessibilité du serveur.\n\n### Conclusion\nL'image montre une page de confirmation de l'installation réussie de Tomcat, accessible via l'adresse https://zk1.brg-lab.com/. Elle ne contient aucun élément directement lié à l'essai au bleu, mais elle confirme que le serveur est opérationnel.",
"raw_response": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface web affichée dans un navigateur. Voici les éléments visibles :\n- **Interface logicielle** : Il s'agit d'une page web avec un en-tête contenant des onglets et des icônes.\n- **Nom ou titre du logiciel ou du module** : Le titre de la page est **\"It works!\"**.\n- **Messages système** : Un message principal est affiché :\n > \"If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!\"\n- **Contenu de la page** :\n - La page contient des instructions pour accéder à la documentation locale de Tomcat et des liens vers des exemples et des outils de gestion.\n - Les liens suivants sont visibles :\n - `tomcat7-docs` : Accès à la documentation locale.\n - `tomcat7-examples` : Accès aux exemples de servlets et JSP.\n - `tomcat7-admin` : Accès aux outils de gestion (`manager webapp` et `host-manager webapp`).\n - Une note de sécurité indique que l'accès aux outils de gestion est restreint aux utilisateurs avec des rôles spécifiques (`manager-gui` et `admin-gui`).\n\n#### 2. Éléments techniques clés\n- **Versions logicielles ou modules affichés** :\n - La page mentionne **\"Tomcat\"** et fait référence à **\"Tomcat 7\"** dans les liens.\n- **Codes d'erreur visibles** : Aucun code d'erreur n'est visible dans l'image.\n- **Paramètres configurables** : Aucun paramètre configurable n'est visible (pas de champs de texte, sliders, dropdowns ou cases à cocher).\n- **Valeurs affichées ou préremplies dans les champs** : Aucune valeur n'est affichée dans des champs, car il n'y a pas de champs interactifs visibles.\n- **Éléments désactivés, grisés ou masqués** : Aucun élément n'est visiblement désactivé, grisé ou masqué.\n- **Boutons actifs/inactifs** : Les liens (`tomcat7-docs`, `tomcat7-examples`, `tomcat7-admin`) sont des liens cliquables, donc actifs.\n\n#### 3. Éléments mis en évidence\n- **Zones entourées, encadrées, surlignées ou fléchées** : Aucune zone n'est mise en évidence de cette manière.\n- **Contenu mis en valeur** : Le message principal **\"It works!\"** est affiché en gros caractères, ce qui le rend visuellement dominant.\n\n#### 4. Relation avec le problème\n- **Lien avec le problème décrit dans le ticket** :\n - Le ticket mentionne un problème d'accès à l'essai au bleu, mais l'image montre une page de confirmation de l'installation réussie de Tomcat.\n - Il n'y a aucune mention directe de l'essai au bleu dans l'image.\n- **Composants liés à une mauvaise configuration ou une erreur** : Aucun élément visible dans l'image ne semble indiquer une mauvaise configuration ou une erreur.\n\n#### 5. Réponses potentielles\n- **Éléments de réponse apportés par l'image** :\n - L'image confirme que l'adresse https://zk1.brg-lab.com/ est accessible et affiche une page de confirmation de l'installation de Tomcat.\n - Elle ne répond pas directement à la question de l'accès à l'essai au bleu, mais elle montre que le serveur Tomcat fonctionne correctement.\n\n#### 6. Lien avec la discussion\n- **Correspondance avec le fil de discussion** :\n - L'image correspond à l'étape où le support demande au client de vérifier l'accès à l'adresse https://zk1.brg-lab.com/.\n - Le client a confirmé que l'adresse fonctionne, ce qui est cohérent avec le contenu de l'image.\n - Il n'y a pas de mention directe de l'essai au bleu dans l'image, mais elle confirme l'accessibilité du serveur.\n\n### Conclusion\nL'image montre une page de confirmation de l'installation réussie de Tomcat, accessible via l'adresse https://zk1.brg-lab.com/. Elle ne contient aucun élément directement lié à l'essai au bleu, mais elle confirme que le serveur est opérationnel.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250421_154954",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 3000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageAnalyser"
}
},
{
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle du module **BRG-LAB**. Voici les éléments visibles :\n- **Titre de la page** : \"Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)\".\n- **Menu principal** : Situé à gauche, avec les sections suivantes :\n - \"ENREGISTREMENTS\"\n - \"PAZ\" (surligné en rouge)\n - \"RAPPORTS\"\n - \"STATISTIQUES\"\n- **Sous-menu** : Sous \"PAZ\", les options \"Liste des essais\" et \"Statistiques\" sont visibles.\n- **Onglets principaux** : En haut de la page, les onglets suivants sont affichés :\n - \"ESSAI\"\n - \"MATÉRIEL\"\n - \"PORTFOLIO\"\n - \"OBSERVATIONS\"\n - \"SMO\"\n - \"HISTORIQUE\"\n- **Informations supplémentaires** :\n - Numéro d'échantillon : 25-00075\n - Réception le 02/04/2025 par BOLLÉE Victor\n - Prélèvement le 02/04/2025 par BOLLÉE Victor\n - Tableau : \"C - CARRIÈRE ADCEG\"\n- **Message en bas de page** : \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\".\n\n#### 2. Éléments techniques clés\n- **Modules affichés** :\n - Module \"Essai au bleu de méthylène (MB)\".\n - Norme : \"NF EN 933-9 (02-2022)\".\n- **Codes d'erreur visibles** :\n - Aucun code d'erreur spécifique n'est affiché.\n- **Paramètres configurables** :\n - Aucun paramètre configurable n'est visible dans cette capture.\n- **Valeurs affichées ou préremplies** :\n - Numéro d'échantillon : 25-00075\n - Dates de réception et de prélèvement : 02/04/2025\n - Nom de l'utilisateur : BOLLÉE Victor\n- **Éléments désactivés, grisés ou masqués** :\n - Aucun élément grisé ou masqué n'est visible.\n- **Boutons actifs/inactifs** :\n - Les onglets \"ESSAI\", \"MATÉRIEL\", \"PORTFOLIO\", \"OBSERVATIONS\", \"SMO\", \"HISTORIQUE\" semblent actifs.\n - Le bouton \"Imprimer\" en bas à droite est visible mais son état (actif/inactif) n'est pas clair.\n\n#### 3. Éléments mis en évidence\n- **Zones entourées, encadrées, surlignées ou fléchées** :\n - Le menu \"PAZ\" est surligné en rouge.\n- **Contenu mis en valeur** :\n - Le menu \"PAZ\" est mis en évidence par une couleur rouge.\n\n#### 4. Relation avec le problème\n- **Lien avec le problème décrit dans le ticket** :\n - L'image montre l'interface de l'essai au bleu, qui est directement liée au problème d'accès signalé par le client.\n - Le message \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\" pourrait être lié à un problème technique, mais aucune autre indication n'est visible.\n\n#### 5. Réponses potentielles\n- **Éléments de réponse apportés par l'image** :\n - L'image confirme que l'interface de l'essai au bleu est accessible, mais elle ne fournit pas d'explication sur la cause de l'inaccessibilité initiale.\n - Le message en bas de page pourrait indiquer un problème de connexion au serveur, mais cela n'est pas explicitement lié à l'inaccessibilité de l'essai.\n\n#### 6. Lien avec la discussion\n- **Correspondances avec le fil de discussion** :\n - L'image correspond à l'interface de l'essai au bleu, qui est au cœur du problème signalé par le client.\n - Le message en bas de page (\"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\") pourrait être lié à la vérification demandée par le support technique concernant l'adresse https://zk1.brg-lab.com/.\n\n### Conclusion\nL'image montre l'interface de l'essai au bleu, avec un message en bas de page indiquant un problème de connexion au serveur. Le menu \"PAZ\" est mis en évidence en rouge. L'image confirme que l'interface est accessible, mais elle ne fournit pas d'explication sur la cause de l'inaccessibilité initiale signalée par le client.",
"raw_response": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle du module **BRG-LAB**. Voici les éléments visibles :\n- **Titre de la page** : \"Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)\".\n- **Menu principal** : Situé à gauche, avec les sections suivantes :\n - \"ENREGISTREMENTS\"\n - \"PAZ\" (surligné en rouge)\n - \"RAPPORTS\"\n - \"STATISTIQUES\"\n- **Sous-menu** : Sous \"PAZ\", les options \"Liste des essais\" et \"Statistiques\" sont visibles.\n- **Onglets principaux** : En haut de la page, les onglets suivants sont affichés :\n - \"ESSAI\"\n - \"MATÉRIEL\"\n - \"PORTFOLIO\"\n - \"OBSERVATIONS\"\n - \"SMO\"\n - \"HISTORIQUE\"\n- **Informations supplémentaires** :\n - Numéro d'échantillon : 25-00075\n - Réception le 02/04/2025 par BOLLÉE Victor\n - Prélèvement le 02/04/2025 par BOLLÉE Victor\n - Tableau : \"C - CARRIÈRE ADCEG\"\n- **Message en bas de page** : \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\".\n\n#### 2. Éléments techniques clés\n- **Modules affichés** :\n - Module \"Essai au bleu de méthylène (MB)\".\n - Norme : \"NF EN 933-9 (02-2022)\".\n- **Codes d'erreur visibles** :\n - Aucun code d'erreur spécifique n'est affiché.\n- **Paramètres configurables** :\n - Aucun paramètre configurable n'est visible dans cette capture.\n- **Valeurs affichées ou préremplies** :\n - Numéro d'échantillon : 25-00075\n - Dates de réception et de prélèvement : 02/04/2025\n - Nom de l'utilisateur : BOLLÉE Victor\n- **Éléments désactivés, grisés ou masqués** :\n - Aucun élément grisé ou masqué n'est visible.\n- **Boutons actifs/inactifs** :\n - Les onglets \"ESSAI\", \"MATÉRIEL\", \"PORTFOLIO\", \"OBSERVATIONS\", \"SMO\", \"HISTORIQUE\" semblent actifs.\n - Le bouton \"Imprimer\" en bas à droite est visible mais son état (actif/inactif) n'est pas clair.\n\n#### 3. Éléments mis en évidence\n- **Zones entourées, encadrées, surlignées ou fléchées** :\n - Le menu \"PAZ\" est surligné en rouge.\n- **Contenu mis en valeur** :\n - Le menu \"PAZ\" est mis en évidence par une couleur rouge.\n\n#### 4. Relation avec le problème\n- **Lien avec le problème décrit dans le ticket** :\n - L'image montre l'interface de l'essai au bleu, qui est directement liée au problème d'accès signalé par le client.\n - Le message \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\" pourrait être lié à un problème technique, mais aucune autre indication n'est visible.\n\n#### 5. Réponses potentielles\n- **Éléments de réponse apportés par l'image** :\n - L'image confirme que l'interface de l'essai au bleu est accessible, mais elle ne fournit pas d'explication sur la cause de l'inaccessibilité initiale.\n - Le message en bas de page pourrait indiquer un problème de connexion au serveur, mais cela n'est pas explicitement lié à l'inaccessibilité de l'essai.\n\n#### 6. Lien avec la discussion\n- **Correspondances avec le fil de discussion** :\n - L'image correspond à l'interface de l'essai au bleu, qui est au cœur du problème signalé par le client.\n - Le message en bas de page (\"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\") pourrait être lié à la vérification demandée par le support technique concernant l'adresse https://zk1.brg-lab.com/.\n\n### Conclusion\nL'image montre l'interface de l'essai au bleu, avec un message en bas de page indiquant un problème de connexion au serveur. Le menu \"PAZ\" est mis en évidence en rouge. L'image confirme que l'interface est accessible, mais elle ne fournit pas d'explication sur la cause de l'inaccessibilité initiale signalée par le client.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image_145435.png",
"image_name": "image_145435.png",
"timestamp": "20250421_155058",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 3000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageAnalyser"
}
}
]

View File

@ -0,0 +1,130 @@
RÉSULTATS DE L'ANALYSE ANALYSE_IMAGE - TICKET T11143
================================================================================
--- ÉLÉMENT 1 ---
### Analyse de l'image
#### 1. Description objective
L'image montre une interface web affichée dans un navigateur. Voici les éléments visibles :
- **Interface logicielle** : Il s'agit d'une page web avec un en-tête contenant des onglets et des icônes.
- **Nom ou titre du logiciel ou du module** : Le titre de la page est **"It works!"**.
- **Messages système** : Un message principal est affiché :
> "If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!"
- **Contenu de la page** :
- La page contient des instructions pour accéder à la documentation locale de Tomcat et des liens vers des exemples et des outils de gestion.
- Les liens suivants sont visibles :
- `tomcat7-docs` : Accès à la documentation locale.
- `tomcat7-examples` : Accès aux exemples de servlets et JSP.
- `tomcat7-admin` : Accès aux outils de gestion (`manager webapp` et `host-manager webapp`).
- Une note de sécurité indique que l'accès aux outils de gestion est restreint aux utilisateurs avec des rôles spécifiques (`manager-gui` et `admin-gui`).
#### 2. Éléments techniques clés
- **Versions logicielles ou modules affichés** :
- La page mentionne **"Tomcat"** et fait référence à **"Tomcat 7"** dans les liens.
- **Codes d'erreur visibles** : Aucun code d'erreur n'est visible dans l'image.
- **Paramètres configurables** : Aucun paramètre configurable n'est visible (pas de champs de texte, sliders, dropdowns ou cases à cocher).
- **Valeurs affichées ou préremplies dans les champs** : Aucune valeur n'est affichée dans des champs, car il n'y a pas de champs interactifs visibles.
- **Éléments désactivés, grisés ou masqués** : Aucun élément n'est visiblement désactivé, grisé ou masqué.
- **Boutons actifs/inactifs** : Les liens (`tomcat7-docs`, `tomcat7-examples`, `tomcat7-admin`) sont des liens cliquables, donc actifs.
#### 3. Éléments mis en évidence
- **Zones entourées, encadrées, surlignées ou fléchées** : Aucune zone n'est mise en évidence de cette manière.
- **Contenu mis en valeur** : Le message principal **"It works!"** est affiché en gros caractères, ce qui le rend visuellement dominant.
#### 4. Relation avec le problème
- **Lien avec le problème décrit dans le ticket** :
- Le ticket mentionne un problème d'accès à l'essai au bleu, mais l'image montre une page de confirmation de l'installation réussie de Tomcat.
- Il n'y a aucune mention directe de l'essai au bleu dans l'image.
- **Composants liés à une mauvaise configuration ou une erreur** : Aucun élément visible dans l'image ne semble indiquer une mauvaise configuration ou une erreur.
#### 5. Réponses potentielles
- **Éléments de réponse apportés par l'image** :
- L'image confirme que l'adresse https://zk1.brg-lab.com/ est accessible et affiche une page de confirmation de l'installation de Tomcat.
- Elle ne répond pas directement à la question de l'accès à l'essai au bleu, mais elle montre que le serveur Tomcat fonctionne correctement.
#### 6. Lien avec la discussion
- **Correspondance avec le fil de discussion** :
- L'image correspond à l'étape où le support demande au client de vérifier l'accès à l'adresse https://zk1.brg-lab.com/.
- Le client a confirmé que l'adresse fonctionne, ce qui est cohérent avec le contenu de l'image.
- Il n'y a pas de mention directe de l'essai au bleu dans l'image, mais elle confirme l'accessibilité du serveur.
### Conclusion
L'image montre une page de confirmation de l'installation réussie de Tomcat, accessible via l'adresse https://zk1.brg-lab.com/. Elle ne contient aucun élément directement lié à l'essai au bleu, mais elle confirme que le serveur est opérationnel.
----------------------------------------
--- ÉLÉMENT 2 ---
### Analyse de l'image
#### 1. Description objective
L'image montre une interface logicielle du module **BRG-LAB**. Voici les éléments visibles :
- **Titre de la page** : "Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)".
- **Menu principal** : Situé à gauche, avec les sections suivantes :
- "ENREGISTREMENTS"
- "PAZ" (surligné en rouge)
- "RAPPORTS"
- "STATISTIQUES"
- **Sous-menu** : Sous "PAZ", les options "Liste des essais" et "Statistiques" sont visibles.
- **Onglets principaux** : En haut de la page, les onglets suivants sont affichés :
- "ESSAI"
- "MATÉRIEL"
- "PORTFOLIO"
- "OBSERVATIONS"
- "SMO"
- "HISTORIQUE"
- **Informations supplémentaires** :
- Numéro d'échantillon : 25-00075
- Réception le 02/04/2025 par BOLLÉE Victor
- Prélèvement le 02/04/2025 par BOLLÉE Victor
- Tableau : "C - CARRIÈRE ADCEG"
- **Message en bas de page** : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com".
#### 2. Éléments techniques clés
- **Modules affichés** :
- Module "Essai au bleu de méthylène (MB)".
- Norme : "NF EN 933-9 (02-2022)".
- **Codes d'erreur visibles** :
- Aucun code d'erreur spécifique n'est affiché.
- **Paramètres configurables** :
- Aucun paramètre configurable n'est visible dans cette capture.
- **Valeurs affichées ou préremplies** :
- Numéro d'échantillon : 25-00075
- Dates de réception et de prélèvement : 02/04/2025
- Nom de l'utilisateur : BOLLÉE Victor
- **Éléments désactivés, grisés ou masqués** :
- Aucun élément grisé ou masqué n'est visible.
- **Boutons actifs/inactifs** :
- Les onglets "ESSAI", "MATÉRIEL", "PORTFOLIO", "OBSERVATIONS", "SMO", "HISTORIQUE" semblent actifs.
- Le bouton "Imprimer" en bas à droite est visible mais son état (actif/inactif) n'est pas clair.
#### 3. Éléments mis en évidence
- **Zones entourées, encadrées, surlignées ou fléchées** :
- Le menu "PAZ" est surligné en rouge.
- **Contenu mis en valeur** :
- Le menu "PAZ" est mis en évidence par une couleur rouge.
#### 4. Relation avec le problème
- **Lien avec le problème décrit dans le ticket** :
- L'image montre l'interface de l'essai au bleu, qui est directement liée au problème d'accès signalé par le client.
- Le message "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com" pourrait être lié à un problème technique, mais aucune autre indication n'est visible.
#### 5. Réponses potentielles
- **Éléments de réponse apportés par l'image** :
- L'image confirme que l'interface de l'essai au bleu est accessible, mais elle ne fournit pas d'explication sur la cause de l'inaccessibilité initiale.
- Le message en bas de page pourrait indiquer un problème de connexion au serveur, mais cela n'est pas explicitement lié à l'inaccessibilité de l'essai.
#### 6. Lien avec la discussion
- **Correspondances avec le fil de discussion** :
- L'image correspond à l'interface de l'essai au bleu, qui est au cœur du problème signalé par le client.
- Le message en bas de page ("Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com") pourrait être lié à la vérification demandée par le support technique concernant l'adresse https://zk1.brg-lab.com/.
### Conclusion
L'image montre l'interface de l'essai au bleu, avec un message en bas de page indiquant un problème de connexion au serveur. Le menu "PAZ" est mis en évidence en rouge. L'image confirme que l'interface est accessible, mais elle ne fournit pas d'explication sur la cause de l'inaccessibilité initiale signalée par le client.
----------------------------------------
================================================================================
Fichier original: analyse_image_pixtral-large-latest_results.json

View File

@ -0,0 +1,22 @@
[
{
"prompt": "### TICKET T11143\n\n--- MESSAGE INITIAL DU CLIENT ---\nAuteur : GIRAUD TP (JCG), Victor BOLLÉE, v.bollee@labojcg.fr\nDate : 03/04/2025 08:34\nContenu :\nBRGLAB - Essai inaccessible\n*Contenu non extractible*\n\n--- MESSAGE 1 ---\nAuteur : Fabien LAFAY\nDate : 03/04/2025 08:35\nType : Système\nSujet : Re: [T11143] BRGLAB - Essai inaccessible\nContenu :\nGIRAUD TP (JCG), Victor BOLLÉE\n-\nil y a 9 minutes\n;\nFabien LAFAY\n;\nRomuald GRUSON\n;\nsupport\n;\nsupport\n-\nQuentin FAIVRE\n-\nFabien LAFAY\n-\nRomuald GRUSON\nBonjour,\nJe ne parviens pas à accéder au lessai au bleu :\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)\n\n---\n\n--- MESSAGE 2 ---\nAuteur : Fabien LAFAY\nDate : 03/04/2025 12:17\nType : E-mail\nSujet : Re: [T11143] - BRGLAB - Essai inaccessible\nContenu :\nBonjour\n,\nPouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :\nhttps://zk1.brg-lab.com/\nVoici ce que vous devriez voir affiché :\nSi ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?\nJe reste à votre entière disposition pour toute information complémentaire.\nCordialement,\n---\nSupport technique\n\n- image.png (image/png) [ID: 145453]\n\n---\n\n--- MESSAGE 3 ---\nAuteur : Victor BOLLÉE\nDate : 03/04/2025 12:21\nType : E-mail\nSujet : TR: [T11143] - BRGLAB - Essai inaccessible\nContenu :\nBonjour,\nLe problème sest résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : ladresse fonctionne\nDe :\n\n---\n\n",
"response": "### Résumé du contexte\n- **Client** : Victor BOLLÉE, v.bollee@labojcg.fr\n- **Sujet du ticket reformulé en une ou plusieurs questions** :\n - Pourquoi l'essai au bleu est-il inaccessible ?\n - Comment résoudre le problème d'accès à l'essai au bleu ?\n- **Description technique synthétique** :\n - Le client ne parvient pas à accéder à l'essai au bleu.\n - Le problème s'est résolu de lui-même par la suite.\n - L'adresse https://zk1.brg-lab.com/ fonctionne.\n\n### Informations techniques détectées\n- **Logiciels/modules mentionnés** :\n - Essai au bleu\n- **Paramètres évoqués** :\n - Aucun paramètre spécifique mentionné.\n- **Fonctionnalités impactées** :\n - Accès à l'essai au bleu.\n- **Conditions spécifiques** :\n - Aucune condition spécifique mentionnée.\n\n### Fil de discussion (filtrée, nettoyée, classée)\n\n---\n**Intervenant** : Victor BOLLÉE (Client)\n**Date** : 03/04/2025 08:34\n**Contenu** :\nBonjour,\nJe ne parviens pas à accéder à lessai au bleu.\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)\n\n---\n**Intervenant** : Fabien LAFAY (Support)\n**Date** : 03/04/2025 12:17\n**Contenu** :\nBonjour,\nPouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :\nhttps://zk1.brg-lab.com/\nVoici ce que vous devriez voir affiché :\nSi ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?\nJe reste à votre entière disposition pour toute information complémentaire.\nCordialement,\n---\nSupport technique\n- image.png (image/png) [ID: 145453]\n\n---\n**Intervenant** : Victor BOLLÉE (Client)\n**Date** : 03/04/2025 12:21\n**Contenu** :\nBonjour,\nLe problème sest résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : ladresse fonctionne\n\n---\n\n### Éléments liés à l'analyse visuelle\n- **Nombre d'images attachées** : 2\n- **Références aux interfaces ou options à visualiser** :\n - Capture d'écran de l'essai au bleu inaccessible.\n - Capture d'écran de la page https://zk1.brg-lab.com/.\n- **Points à vérifier dans les captures** :\n - Vérifier l'interface de l'essai au bleu pour identifier les éléments inaccessibles.\n - Vérifier l'affichage de la page https://zk1.brg-lab.com/ pour confirmer son accessibilité.",
"metadata": {
"timestamp": "20250421_154741",
"source_agent": "AgentTicketAnalyser",
"ticket_id": "T11143",
"model_info": {
"model": "mistral-large-latest",
"temperature": 0.1,
"top_p": 0.5,
"max_tokens": 4000,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
}
}
}
]

View File

@ -0,0 +1,78 @@
RÉSULTATS DE L'ANALYSE ANALYSE_TICKET - TICKET T11143
================================================================================
--- ÉLÉMENT 1 ---
### Résumé du contexte
- **Client** : Victor BOLLÉE, v.bollee@labojcg.fr
- **Sujet du ticket reformulé en une ou plusieurs questions** :
- Pourquoi l'essai au bleu est-il inaccessible ?
- Comment résoudre le problème d'accès à l'essai au bleu ?
- **Description technique synthétique** :
- Le client ne parvient pas à accéder à l'essai au bleu.
- Le problème s'est résolu de lui-même par la suite.
- L'adresse https://zk1.brg-lab.com/ fonctionne.
### Informations techniques détectées
- **Logiciels/modules mentionnés** :
- Essai au bleu
- **Paramètres évoqués** :
- Aucun paramètre spécifique mentionné.
- **Fonctionnalités impactées** :
- Accès à l'essai au bleu.
- **Conditions spécifiques** :
- Aucune condition spécifique mentionnée.
### Fil de discussion (filtrée, nettoyée, classée)
---
**Intervenant** : Victor BOLLÉE (Client)
**Date** : 03/04/2025 08:34
**Contenu** :
Bonjour,
Je ne parviens pas à accéder à lessai au bleu.
Merci par avance pour votre.
Cordialement
![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)
---
**Intervenant** : Fabien LAFAY (Support)
**Date** : 03/04/2025 12:17
**Contenu** :
Bonjour,
Pouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :
https://zk1.brg-lab.com/
Voici ce que vous devriez voir affiché :
Si ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
- image.png (image/png) [ID: 145453]
---
**Intervenant** : Victor BOLLÉE (Client)
**Date** : 03/04/2025 12:21
**Contenu** :
Bonjour,
Le problème sest résolu seul par la suite.
Je vous remercie pour votre retour.
Bonne journée
PS : ladresse fonctionne
---
### Éléments liés à l'analyse visuelle
- **Nombre d'images attachées** : 2
- **Références aux interfaces ou options à visualiser** :
- Capture d'écran de l'essai au bleu inaccessible.
- Capture d'écran de la page https://zk1.brg-lab.com/.
- **Points à vérifier dans les captures** :
- Vérifier l'interface de l'essai au bleu pour identifier les éléments inaccessibles.
- Vérifier l'affichage de la page https://zk1.brg-lab.com/ pour confirmer son accessibilité.
----------------------------------------
================================================================================
Fichier original: analyse_ticket_mistral-large-latest_results.json

View File

@ -0,0 +1,26 @@
[
{
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image.png",
"status": "unique"
},
{
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image_145453.png",
"status": "duplicate"
},
{
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image_145435.png",
"status": "unique"
},
{
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg",
"status": "unique"
},
{
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/5ad281b63492e31c9e66bf27518b816cdd3766cab9812bd4ff16b736e9e98265.jpg",
"status": "duplicate"
},
{
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif",
"status": "unique"
}
]

View File

@ -0,0 +1,33 @@
RAPPORT D'ANALYSE DU TICKET T11143
==================================================
### Rapport Final
#### 1. Contexte général
Le client, Victor BOLLÉE, signale un problème d'accès à l'essai au bleu, qui s'est résolu de lui-même par la suite, et confirme que l'adresse https://zk1.brg-lab.com/ fonctionne.
#### 2. Problèmes ou questions identifiés
- Pourquoi l'essai au bleu est-il inaccessible ?
- Comment résoudre le problème d'accès à l'essai au bleu ?
#### 3. Résumé croisé image/texte pour chaque question
**Pourquoi l'essai au bleu est-il inaccessible ?**
- **Texte du ticket** : Le client mentionne qu'il ne parvient pas à accéder à l'essai au bleu.
- **Image (image_145435.png)** :
- L'interface de l'essai au bleu est visible.
- Un message en bas de page indique : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com".
- Le menu "PAZ" est surligné en rouge.
**Comment résoudre le problème d'accès à l'essai au bleu ?**
- **Texte du ticket** : Le problème s'est résolu de lui-même par la suite.
- **Image (image.png)** :
- La page https://zk1.brg-lab.com/ affiche un message de confirmation : "It works!".
- La page contient des liens vers la documentation locale de Tomcat, des exemples de servlets et JSP, et des outils de gestion.
- Aucun élément désactivé, grisé ou masqué n'est visible.
#### 4. Liste d'observations supplémentaires pertinentes
- L'adresse https://zk1.brg-lab.com/ est accessible et fonctionne correctement, comme confirmé par le client et l'image (image.png).
- L'interface de l'essai au bleu affiche un message indiquant un problème de connexion au serveur (image_145435.png).
- Le menu "PAZ" est mis en évidence en rouge dans l'interface de l'essai au bleu (image_145435.png).
- Le problème d'accès à l'essai au bleu s'est résolu de lui-même, selon le client.

View File

@ -0,0 +1,41 @@
RÉSULTATS DE L'ANALYSE RAPPORT_FINAL - TICKET T11143
================================================================================
--- ÉLÉMENT 1 ---
### Rapport Final
#### 1. Contexte général
Le client, Victor BOLLÉE, signale un problème d'accès à l'essai au bleu, qui s'est résolu de lui-même par la suite, et confirme que l'adresse https://zk1.brg-lab.com/ fonctionne.
#### 2. Problèmes ou questions identifiés
- Pourquoi l'essai au bleu est-il inaccessible ?
- Comment résoudre le problème d'accès à l'essai au bleu ?
#### 3. Résumé croisé image/texte pour chaque question
**Pourquoi l'essai au bleu est-il inaccessible ?**
- **Texte du ticket** : Le client mentionne qu'il ne parvient pas à accéder à l'essai au bleu.
- **Image (image_145435.png)** :
- L'interface de l'essai au bleu est visible.
- Un message en bas de page indique : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com".
- Le menu "PAZ" est surligné en rouge.
**Comment résoudre le problème d'accès à l'essai au bleu ?**
- **Texte du ticket** : Le problème s'est résolu de lui-même par la suite.
- **Image (image.png)** :
- La page https://zk1.brg-lab.com/ affiche un message de confirmation : "It works!".
- La page contient des liens vers la documentation locale de Tomcat, des exemples de servlets et JSP, et des outils de gestion.
- Aucun élément désactivé, grisé ou masqué n'est visible.
#### 4. Liste d'observations supplémentaires pertinentes
- L'adresse https://zk1.brg-lab.com/ est accessible et fonctionne correctement, comme confirmé par le client et l'image (image.png).
- L'interface de l'essai au bleu affiche un message indiquant un problème de connexion au serveur (image_145435.png).
- Le menu "PAZ" est mis en évidence en rouge dans l'interface de l'essai au bleu (image_145435.png).
- Le problème d'accès à l'essai au bleu s'est résolu de lui-même, selon le client.
----------------------------------------
================================================================================
Fichier original: rapport_final_mistral-large-latest_results.json

View File

@ -0,0 +1,90 @@
[
{
"is_relevant": true,
"reason": "Oui.\n\nL'image montre une capture d'écran d'une page web liée à l'installation et à la configuration d'un logiciel (Tomcat), ce qui est pertinent pour un support technique.",
"raw_response": "Oui.\n\nL'image montre une capture d'écran d'une page web liée à l'installation et à la configuration d'un logiciel (Tomcat), ce qui est pertinent pour un support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250421_154748",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
{
"is_relevant": true,
"reason": "Oui.\nL'image montre une capture d'écran d'une interface logicielle de BRG-LAB, ce qui est pertinent pour un ticket de support technique.",
"raw_response": "Oui.\nL'image montre une capture d'écran d'une interface logicielle de BRG-LAB, ce qui est pertinent pour un ticket de support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/image_145435.png",
"image_name": "image_145435.png",
"timestamp": "20250421_154758",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
{
"is_relevant": false,
"reason": "Non.\n\nCette image est un logo de la société CBAO, ce qui est considéré comme une image de marque et non pertinente pour un ticket de support technique.",
"raw_response": "Non.\n\nCette image est un logo de la société CBAO, ce qui est considéré comme une image de marque et non pertinente pour un ticket de support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg",
"image_name": "543d7da1b54c29ff43ce5712d1a9aa4962ed21795c4e943fcb8cb84fd4d7465a.jpg",
"timestamp": "20250421_154807",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
{
"is_relevant": false,
"reason": "Non.\nL'image montre un logo ou une illustration liée à une marque ou une entreprise, ce qui n'est pas pertinent pour un ticket de support technique.",
"raw_response": "Non.\nL'image montre un logo ou une illustration liée à une marque ou une entreprise, ce qui n'est pas pertinent pour un ticket de support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250418_151735/attachments/a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif",
"image_name": "a20f7697fd5e1d1fca3296c6d01228220e0e112c46b4440cc938f74d10934e98.gif",
"timestamp": "20250421_154809",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
}
]

View File

@ -0,0 +1,36 @@
RÉSULTATS DE L'ANALYSE TRI_IMAGE - TICKET T11143
================================================================================
--- ÉLÉMENT 1 ---
Oui.
L'image montre une capture d'écran d'une page web liée à l'installation et à la configuration d'un logiciel (Tomcat), ce qui est pertinent pour un support technique.
----------------------------------------
--- ÉLÉMENT 2 ---
Oui.
L'image montre une capture d'écran d'une interface logicielle de BRG-LAB, ce qui est pertinent pour un ticket de support technique.
----------------------------------------
--- ÉLÉMENT 3 ---
Non.
Cette image est un logo de la société CBAO, ce qui est considéré comme une image de marque et non pertinente pour un ticket de support technique.
----------------------------------------
--- ÉLÉMENT 4 ---
Non.
L'image montre un logo ou une illustration liée à une marque ou une entreprise, ce qui n'est pas pertinent pour un ticket de support technique.
----------------------------------------
================================================================================
Fichier original: tri_image_pixtral-large-latest_results.json

View File

@ -1,122 +0,0 @@
TICKET: T11143 - BRGLAB - Essai inaccessible
Date d'extraction: 2025-04-18 15:17:36
Nombre de messages: 7
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 08:34:43
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-03 08:35:20
DE: Fabien LAFAY
OBJET: Re: [T11143] BRGLAB - Essai inaccessible
GIRAUD TP (JCG), Victor BOLLÉE
-
il y a 9 minutes
;
Fabien LAFAY
;
Romuald GRUSON
;
support
;
support
-
Quentin FAIVRE
-
Fabien LAFAY
-
Romuald GRUSON
Bonjour,
Je ne parviens pas à accéder au lessai au bleu :
Merci par avance pour votre.
Cordialement
![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 09:23:31
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-03 12:17:41
DE: Fabien LAFAY
OBJET: Re: [T11143] - BRGLAB - Essai inaccessible
Bonjour
,
Pouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :
https://zk1.brg-lab.com/
Voici ce que vous devriez voir affiché :
Si ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 12:17:45
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-03 12:21:13
DE: Victor BOLLÉE
OBJET: TR: [T11143] - BRGLAB - Essai inaccessible
Bonjour,
Le problème sest résolu seul par la suite.
Je vous remercie pour votre retour.
Bonne journée
PS : ladresse fonctionne
De :
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-03 12:23:31
DE: Fabien LAFAY
--------------------------------------------------------------------------------

View File

@ -1,80 +0,0 @@
TICKET: T11146 - formulation
Date d'extraction: 2025-04-16 10:33:01
Nombre de messages: 5
================================================================================
DATE: 2025-04-04 06:34:51
DE: Facturation GEOLABO
OBJET: formulation
Bonjour,
Ca plante formulation plante toujours.
Comment faire ?
Merci
JEAN ELIE NONORGUES
Portable  :06.63.95.62.02
Téléphone:04.92.76.65.93
Télécopie:09.67.22.65.93
Adresse Email :nonorgues@geolabo.fr
www.geolabo.fr
adresse postale:
172 chemin des grands jardins
04 220 SAINTE TULLE
Pour ne rien rater de notre actualité :
Nouveauté
Sans virus.
www.avg.com
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-04 06:37:17
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-04 07:38:36
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-07 09:03:38
DE: Romuald GRUSON
OBJET: Re: [T11146] - formulation
Bonjour
,
Je viens de relancer léquipe de développement. Veuillez nous excuser pour la gêne occasionnée. Nhésitez pas à nous faire remonter toute information complémentaire (capture décran, moment précis, n° déchantillon, etc.).
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-07 09:04:36
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,27 +0,0 @@
TICKET: T11163 - Essai de plaque LCPC MEI + Divers
Date d'extraction: 2025-04-16 10:33:00
Nombre de messages: 2
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-10 13:37:23
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-10 13:57:51
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,56 +0,0 @@
TICKET: T11178 - Bug BRG-LAB
Date d'extraction: 2025-04-16 10:32:59
Nombre de messages: 5
================================================================================
DATE: 2025-04-14 16:57:24
DE: Raphael PAPILLON
OBJET: Bug BRG-LAB
Bonjour,
Je rencontre un problème sur la plateforme BRG-LAB. J'ai entré deux échantillons que je ne retrouve pas sur la plateforme et les échantillons sont dans un ordre désordonné. Pouvez-vous me contacter afin de trouver une solution?
Cordialement,
--
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-14 17:02:03
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 06:30:49
DE: Romuald GRUSON
--------------------------------------------------------------------------------
DATE: 2025-04-15 13:29:43
DE: Romuald GRUSON
Appel => ok modification du filtre => OK
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 13:29:46
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,99 +0,0 @@
TICKET: T11181 - N'arrive pas à dupliquer un echantillon
Date d'extraction: 2025-04-16 10:32:59
Nombre de messages: 6
================================================================================
DATE: 2025-04-15 08:56:59
DE: vocalia
OBJET: cbao_support_technique - Message : LACOSTE Jean Marie
Veuillez trouver ci-dessous le suivi de vos appels.
Message : le 15/04/2025 à 10:53
Nom
LACOSTE
Prénom
Jean Marie
Adresse mail
pas d adresse mail
Panne
Problème de logiciel
Rv
message répondeur
Ticket
pas concerné
Message
Message pour : Lafay Fabien / Technicien --formation: joindre systématiquement---- Bonjour, Mr LACOSTE a un souci avec son logiciel et demande à être rappelé afin d être dépanné. Lucas.
Adresse
Tél
02-43-59-36-84
Gsm
06-87-34-06-97
Vos appels sur Flux RSS :
Cliquez ici
Cordialement
Agenda5
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 08:57:24
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 09:12:20
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 09:12:22
DE: Romuald GRUSON
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2025-04-15 12:38:51
DE: Romuald GRUSON
OBJET: Re: [T11181] - N'arrive pas à dupliquer un echantillon
Bonjour
,
Notre équipe de développement a corrigé le dysfonctionnement, vous pouvez reprendre une activité normale.
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2025-04-15 12:49:36
DE: Romuald GRUSON
--------------------------------------------------------------------------------

View File

@ -1,140 +0,0 @@
TICKET: T4874 - Prélèvement enrobé
Date d'extraction: 2025-04-16 10:35:12
Nombre de messages: 10
================================================================================
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2022-05-11 14:09:46
DE: Dominique CARVAL
OBJET: PR2L7VEMENT ENROBés
Bonsoir,
Comment fait-on pour enregistrer la date de prélèvement, le nom du préleveur, le lieu de prélèvement pour un échantillon prélevé par une personne extérieure du labo ?????.
Bonne réception,
www.morbihan.fr
Dominique CARVAL
Technicien de Laboratoire
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-05-11 14:12:11
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-05-11 15:10:23
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2022-05-12 12:44:51
DE: Fabien LAFAY
OBJET: Re: [T4874] - Prélèvement enrobé
Bonjour Dominique,
Je vous contacte pour donner suite à votre demande concernant l'ajout des informations sur les prélèvements fait par un client.
Seul les utilisateurs de BRG-LAB peuvent être renseignés comme opérateurs de prélèvement, la saisie directe de ces informations n'est donc pas possible pour un prélèvement effectué par un client.
Vous pouvez cependant entrer ces informations dans la partie "Informations publiques" de léchantillon lors de sa création.
Restant à votre disposition pour tout renseignement complémentaire.
Cordialement,
Fabien LAFAY
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-05-12 12:44:58
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2022-05-16 06:03:10
DE: Dominique CARVAL
OBJET: RE: [T4874] - Prélèvement enrobé
Bonjour,
On doit se contenter de cela ? Ou est-ce possible de le proposer ?
Bonne réception,
www.morbihan.fr
Dominique CARVAL
Technicien de Laboratoire
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-05-16 07:11:25
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2022-05-16 09:55:11
DE: Fabien LAFAY
OBJET: Re: [T4874] - Prélèvement enrobé
Bonjour,
Il n'est pas possible d'ajouter cette possibilité à l'identique des autres prélèvements.
Une solution autre que la saisie dans les information publique serait que vous ajoutiez des champs supplémentaires personnalisés sur votre échantillon.
De cette manière, les informations apparaitront avec les autres informations de léchantillon :
L'ajout de ces champs se fait dans Paramètres généraux du système -> Réglages techniques -> Champs supplémentaires
Cliquez sur le "+" de la ligne "Enrobé : échantillon"
Dans la nouvelle fenêtre, saisissez les paramètres du champs et les options qui vous conviennent :
Une fois vos champs créés, enregistrez vos modifications.
Ces nouveaux champs apparaitront pendant la création d'un nouvel échantillon ou quand vous éditez le programme d'essai d'un échantillon existant.
Restant à votre disposition pour tout renseignement complémentaire.
Cordialement,
Fabien LAFAY
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-05-16 09:55:16
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-05-23 07:07:42
DE: Fabien LAFAY
--------------------------------------------------------------------------------

View File

@ -1,91 +0,0 @@
TICKET: T5409 - Gestion des utilisateurs
Date d'extraction: 2025-04-16 10:34:48
Nombre de messages: 6
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-08-01 09:58:55
DE: Inconnu
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-08-01 10:00:50
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2022-08-01 12:11:03
DE: Youness BENDEQ
OBJET: Re: [T5409] - Gestion des utilisateurs
Bonjour Frédéric,
Je te contacte pour donner suite à ta demande concernant :
Bonjour Guillaume Lucas ne parvient jamais à enregistrer un échantillon, j'ai l'impression que c'est un problème d'attribution ou autre chose de ce genre et je ne le vois pas sur la liste des utilisateurs je vous remercie d'avance cordialement
Je viens de corriger ton problème en lui affectant un laboratoire principal :
Restant à votre disposition pour tout renseignement complémentaire.
Cordialement,
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-08-01 12:11:06
DE: Youness BENDEQ
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2022-08-01 14:33:18
DE: Frédéric MORALES
OBJET: RE: [COMMERCIAL]:Re: [T5409] - Gestion des utilisateurs
Bonjour
Effectivement je sentais un problème de ce genre, mais je ne savais pas où le dénicher,  je te remercie vivement
Bonne fin daprès-midi
Frédéric Moralès
Conseil Départemental de Vaucluse
Responsable du laboratoire routier
Tel : 04 32 40 45 45 et 06 32 89 69 50
lundi 1 août 2022 14:11
[COMMERCIAL]:Re: [T5409] - Gestion des utilisateurs
Voir
Tâche
Bonjour Frédéric,
Je te contacte pour donner suite à ta demande concernant :
Bonjour Guillaume Lucas ne parvient jamais à enregistrer un échantillon, j'ai l'impression que c'est un problème d'attribution ou autre chose de ce genre et
je ne le vois pas sur la liste des utilisateurs je vous remercie d'avance cordialement
Je viens de corriger ton problème en lui affectant un laboratoire principal :
Restant à votre disposition pour tout renseignement complémentaire.
Cordialement,
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2022-08-01 14:44:44
DE: Youness BENDEQ
--------------------------------------------------------------------------------

View File

@ -1,73 +0,0 @@
TICKET: T6327 - Provisoire marqué sur les rapport d'essais malgré l'état terminé
Date d'extraction: 2025-04-16 10:35:23
Nombre de messages: 6
================================================================================
DATE: 2023-01-18 09:38:37
DE: Delphine Pilon
OBJET: Provisoire marqué sur les rapport d'essais malgré l'état terminé
Bonjour,
Sur les rapports dessais granulat, le filigrane « Provisoire » saffiche malgré létat terminé du rapport et lenregistrement.
Comment peut-on enlever ce filigrane ?
Bonne journée
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-01-18 09:41:35
DE: OdooBot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-01-18 10:14:43
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2023-01-18 13:20:29
DE: Fabien LAFAY
OBJET: Re: [T6327] - Provisoire marqué sur les rapport d'essais malgré l'état terminé
Bonjour,
Pour faire disparaître la mention provisoire, vous devez valider votre rapport dessais.
Pour cela, dans le sommaire de votre rapport dessai, cliquez sur « Signatures, Validation, Destinataires », puis dans la partie de droite, cliquez sur « Signer et valider le rapport ».
Restant à votre disposition pour tout renseignement complémentaire.
Cordialement,
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-01-18 13:20:33
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-02-02 08:04:36
DE: Fabien LAFAY
--------------------------------------------------------------------------------

View File

@ -1,63 +0,0 @@
TICKET: T6735 - Création échantillons - Opérateur de prélèvement : Saisie manuelle non possible
Date d'extraction: 2025-04-16 10:34:58
Nombre de messages: 5
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-03-14 10:48:53
DE: Inconnu
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-03-14 10:58:24
DE: Fabien LAFAY
--------------------------------------------------------------------------------
DATE: 2023-03-14 13:25:45
DE: Fabien LAFAY
OBJET: Re: [T6735] - Création échantillons - Opérateur de prélèvement : Saisie manuelle non possible
Bonjour,
Vous ne pouvez donc pas ajouter une personne tierce.
En revanche, vous pouvez noter le nom de cette personne tierce dans les informations publiques du prélèvement.
Restant à votre disposition pour tout renseignement complémentaire.
Bien cordialement,
---
Support technique
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-03-14 13:25:48
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2023-03-29 07:08:35
DE: Fabien LAFAY
--------------------------------------------------------------------------------

View File

@ -1,73 +0,0 @@
TICKET: T9656 - Gestion des utilisateurs
Date d'extraction: 2025-04-16 10:34:03
Nombre de messages: 5
================================================================================
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2024-07-04 12:09:47
DE: Support Robot
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2024-07-04 12:42:43
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** MESSAGE TRANSFÉRÉ ***
********************************************************************************
DATE: 2024-07-04 13:03:58
DE: Fabien LAFAY
OBJET: Re: [T9656] - Gestion des utilisateurs
Bonjour,
Si un utilisateur n'apparait pas dans la liste, c'est probablement car il n'a pas de laboratoire principal d'assigné.
Dans ce cas, il faut cocher la case "Affiche les laboratoires secondaires" pour le voir.
Vous pouvez ensuite retrouver l'utilisateur dans la liste (en utilisant les filtre sur les colonnes si besoin) et l'éditer.
Sur la fiche de l'utilisateur, vérifier 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 apparaitre dans la liste (en grisé).
Vous pouvez le rendre à nouveau valide en éditant son compte et en cochant la case "Utilisateur valide"
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
Pour vous accompagner au mieux, veuillez trouver ci-joint des liens d'aide :
Manuel d'utilisation :
lien vers le manuel d'utilisation
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2024-07-04 13:04:02
DE: Fabien LAFAY
--------------------------------------------------------------------------------
********************************************************************************
*** CHANGEMENT D'ÉTAT ***
********************************************************************************
DATE: 2024-07-19 08:00:10
DE: Fabien LAFAY
--------------------------------------------------------------------------------

83
regenerer_txt.py Normal file
View File

@ -0,0 +1,83 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script pour régénérer les versions texte des fichiers JSON dans le pipeline.
"""
import os
import json
import sys
from agents.utils.pipeline_logger import generer_version_texte
def regenerer_fichiers_txt(ticket_id):
"""
Régénère les fichiers TXT pour tous les fichiers JSON dans le pipeline du ticket.
Args:
ticket_id: ID du ticket (ex: T11143)
"""
# Déterminer le chemin du dossier pipeline
base_dir = "output"
ticket_dir = f"ticket_{ticket_id}"
ticket_path = os.path.join(base_dir, ticket_dir)
if not os.path.exists(ticket_path):
print(f"Répertoire du ticket non trouvé: {ticket_path}")
return
# Trouver la dernière extraction
extractions = []
for extract in os.listdir(ticket_path):
extraction_path = os.path.join(ticket_path, extract)
if os.path.isdir(extraction_path) and extract.startswith(ticket_id):
extractions.append(extraction_path)
if not extractions:
print(f"Aucune extraction trouvée pour le ticket {ticket_id}")
return
# Trier par date (plus récente en premier)
extractions.sort(key=lambda x: os.path.getmtime(x), reverse=True)
latest_extraction = extractions[0]
# Trouver le dossier pipeline
pipeline_dir = os.path.join(latest_extraction, f"{ticket_id}_rapports", "pipeline")
if not os.path.exists(pipeline_dir):
print(f"Dossier pipeline non trouvé: {pipeline_dir}")
return
print(f"Dossier pipeline trouvé: {pipeline_dir}")
# Traiter chaque fichier JSON
json_files = [f for f in os.listdir(pipeline_dir) if f.endswith('.json')]
print(f"Fichiers JSON trouvés: {len(json_files)}")
for json_file in json_files:
json_path = os.path.join(pipeline_dir, json_file)
print(f"Traitement du fichier: {json_file}")
try:
# Charger les données JSON
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# Déterminer le nom de l'étape (première partie du nom du fichier)
step_name = json_file.split('_')[0]
# Générer la version texte
generer_version_texte(data, ticket_id, step_name, json_path)
print(f"Fichier texte généré pour {json_file}")
except Exception as e:
print(f"Erreur lors du traitement de {json_file}: {str(e)}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python regenerer_txt.py <ticket_id>")
print("Exemple: python regenerer_txt.py T11143")
sys.exit(1)
ticket_id = sys.argv[1]
regenerer_fichiers_txt(ticket_id)
print("Terminé!")

View File

@ -1,170 +0,0 @@
{
"ticket_id": "T11143",
"timestamp": "2025-04-16 16:33:19",
"rapport_complet": "HTTPSConnectionPool(host='api.mistral.ai', port=443): Read timed out. (read timeout=120)",
"ticket_analyse": "### 1. Résumé du contexte\n\n**Client :**\n- Nom : Victor BOLLÉE\n- Email : v.bollee@labojcg.fr\n- Société : GIRAUD TP (JCG)\n\n**Sujet du ticket reformulé en une ou plusieurs questions :**\n- Pourquoi l'essai au bleu est-il inaccessible ?\n- Comment résoudre le problème d'accès à l'essai au bleu ?\n\n**Description technique synthétique :**\n- Le client ne parvient pas à accéder à l'essai au bleu.\n- Le support demande de vérifier l'accès à une page spécifique et de fournir une capture d'écran si nécessaire.\n- Le problème s'est résolu de lui-même par la suite.\n\n### 2. Informations techniques détectées\n\n**Logiciels/modules mentionnés :**\n- Aucun logiciel ou module spécifique n'est mentionné.\n\n**Paramètres évoqués :**\n- Aucun paramètre spécifique n'est mentionné.\n\n**Fonctionnalités impactées :**\n- Accès à l'essai au bleu.\n\n**Conditions spécifiques :**\n- Aucune condition spécifique n'est mentionnée.\n\n### 3. Fil de discussion (filtrée, nettoyée, classée)\n\n**Intervenant : Client**\n**Date : 03/04/2025 08:35:20**\n**Contenu :**\nBonjour,\nJe ne parviens pas à accéder à lessai au bleu :\nMerci par avance pour votre.\nCordialement\n![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)\n\n---\n\n**Intervenant : Support**\n**Date : 03/04/2025 12:17:41**\n**Contenu :**\nBonjour,\nPouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :\nhttps://zk1.brg-lab.com/\nVoici ce que vous devriez voir affiché :\nSi ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?\nJe reste à votre entière disposition pour toute information complémentaire.\nCordialement,\n---\nSupport technique\n\n- image.png (image/png) [ID: 145453]\n\n---\n\n**Intervenant : Client**\n**Date : 03/04/2025 12:21:13**\n**Contenu :**\nBonjour,\nLe problème sest résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : ladresse fonctionne\n\n### 4. Éléments liés à l'analyse visuelle\n\n**Nombre d'images attachées :**\n- 2 images sont attachées au ticket.\n\n**Références aux interfaces ou options à visualiser :**\n- L'accès à l'essai au bleu.\n- La page https://zk1.brg-lab.com/.\n\n**Points à vérifier dans les captures :**\n- Vérifier l'affichage de la page https://zk1.brg-lab.com/.\n- Vérifier l'accès à l'essai au bleu.",
"images_analyses": [
{
"image_name": "image.png",
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"analyse": "### Analyse de l'",
"sorting_info": {
"is_relevant": true,
"reason": "Oui.\n\nL'image montre une capture d'écran d'une page web liée à l'installation et à la configuration de Tomcat, ce qui est pertinent pour un support technique logiciel.",
"raw_response": "Oui.\n\nL'image montre une capture d'écran d'une page web liée à l'installation et à la configuration de Tomcat, ce qui est pertinent pour un support technique logiciel.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250416_162736",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250416_162832",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 3000
}
}
},
{
"image_name": "image_145435.png",
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image_145435.png",
"analyse": "### Analyse de l'image\n\n#### 1. Description objective\nL'image montre une interface logicielle de type application web. Voici les éléments visibles :\n- **Titre de la page** : \"Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)\"\n- **Barre de navigation horizontale** :\n - Onglets : \"ESSAI\", \"MATÉRIAUX\", \"PORTEFEUILLE\", \"OBSERVATIONS\", \"SMO\", \"HISTORIQUE\"\n - L'onglet \"ESSAI\" est actuellement sélectionné.\n- **Menu latéral gauche** :\n - Sections visibles : \"ENREGISTREMENTS\", \"FAZ\", \"RAPPORTS\"\n - Sous \"ENREGISTREMENTS\", l'option \"Essai au bleu de méthylène\" est sélectionnée.\n - Sous \"FAZ\", les options \"Fiche de foyer\" et \"Statistiques\" sont visibles.\n- **Informations de l'essai** :\n - Identifiant de l'échantillon : \"25-00075\"\n - Date de réception : \"02/04/2025\"\n - Préleveur : \"BOLLÉE Victor\"\n - Date de prélèvement : \"02/04/2025\"\n - Référence : \"25-00075\"\n - Table : \"0/2 C - CARRIÈRE ADCEG\"\n- **Pied de page** :\n - Message : \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\"\n- **URL visible dans la barre d'adresse du navigateur** :\n - \"https://zk1.brg-lab.com/BRG-LAB/PAGE_programme/essai/CFAAAHVNGDAA\"\n\n#### 2. Éléments techniques clés\n- **Onglets actifs** : \"ESSAI\", \"MATÉRIAUX\", \"PORTEFEUILLE\", \"OBSERVATIONS\", \"SMO\", \"HISTORIQUE\"\n- **Menu latéral gauche** :\n - Options interactives : \"ENREGISTREMENTS\", \"FAZ\", \"RAPPORTS\"\n - Sous \"ENREGISTREMENTS\", l'option \"Essai au bleu de méthylène\" est sélectionnée.\n - Sous \"FAZ\", les options \"Fiche de foyer\" et \"Statistiques\" sont visibles et interactives.\n- **Informations de l'essai** :\n - Champs préremplis : Identifiant de l'échantillon, date de réception, préleveur, date de prélèvement, référence, table.\n- **Pied de page** :\n - Message d'erreur : \"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\"\n- **URL** :\n - Contient des paramètres spécifiques : \"CFAAAHVNGDAA\"\n\n#### 3. Éléments mis en évidence\nAucun élément n'est explicitement entouré, encadré, surligné ou fléché dans l'image. Tous les éléments sont affichés de manière standard.\n\n#### 4. Relation avec le problème\n- L'image montre l'interface de l'essai au bleu de méthylène, qui est directement liée au problème d'accès décrit dans le ticket.\n- Le message d'erreur dans le pied de page (\"Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com\") pourrait être lié à un problème technique, mais aucune interprétation n'est faite ici.\n\n#### 5. Réponses potentielles\n- L'image montre que l'essai au bleu de méthylène est accessible, ce qui pourrait indiquer que le problème d'accès a été résolu, comme mentionné dans le fil de discussion.\n- Le message d'erreur dans le pied de page pourrait être une piste pour des investigations techniques ultérieures.\n\n#### 6. Lien avec la discussion\n- L'image correspond à l'étape où le client a été invité à vérifier l'accès à la page https://zk1.brg-lab.com/.\n- Le client a confirmé que l'adresse fonctionnait, ce qui est cohérent avec l'affichage de l'interface dans l'image.\n- Le problème d'accès à l'essai au bleu semble résolu, comme indiqué dans le fil de discussion.",
"sorting_info": {
"is_relevant": true,
"reason": "Oui.\nL'image montre une capture d'écran d'une interface logicielle de BRG-LAB, ce qui est pertinent pour un ticket de support technique.",
"raw_response": "Oui.\nL'image montre une capture d'écran d'une interface logicielle de BRG-LAB, ce qui est pertinent pour un ticket de support technique.",
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image_145435.png",
"image_name": "image_145435.png",
"timestamp": "20250416_162825",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
}
},
"metadata": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image_145435.png",
"image_name": "image_145435.png",
"timestamp": "20250416_163116",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 3000
}
}
}
],
"chronologie_echanges": [],
"resume": "",
"analyse_images": "",
"diagnostic": "",
"statistiques": {
"total_images": 4,
"images_pertinentes": 2,
"generation_time": 123.262321
},
"metadata": {
"model": "mistral-large-latest",
"model_version": "non spécifiée",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 10000,
"generation_time": 123.262321,
"timestamp": "2025-04-16 16:33:19",
"agents": {
"image_sorter": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250416_162736",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 300,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": [],
"stream": false,
"n": 1
},
"source_agent": "AgentImageSorter"
},
"image_analyser": {
"image_path": "output/ticket_T11143/T11143_20250416_103302/attachments/image.png",
"image_name": "image.png",
"timestamp": "20250416_162832",
"model_info": {
"model": "pixtral-large-latest",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 3000
}
},
"report_generator": {
"model": "mistral-large-latest",
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 10000,
"prompt_version": "v3.2"
}
}
},
"prompts_utilisés": {
"rapport_generator": "Tu es un expert en génération de rapports techniques pour BRG-Lab pour la société CBAO.\nTa mission est de synthétiser les analyses (ticket et images) en un rapport structuré.\n\nEXIGENCE ABSOLUE - Ton rapport DOIT inclure dans l'ordre:\n1. Un résumé du problème initial (nom de la demande + description)\n2. Une analyse détaillée des images pertinentes en lien avec le problème\n3. Une synthèse globale des analyses d'images\n4. Une reconstitution du fil de discussion client/support\n5. Un tableau JSON de chronologie des échanges avec cette structure:\n```json\n{\n \"chronologie_echanges\": [\n {\"date\": \"date exacte\", \"emetteur\": \"CLIENT ou SUPPORT\", \"type\": \"Question ou Réponse\", \"contenu\": \"contenu synthétisé\"}\n ]\n}\n```\n6. Un diagnostic technique des causes probables\n\nMÉTHODE D'ANALYSE (ÉTAPES OBLIGATOIRES):\n1. ANALYSE TOUTES les images AVANT de créer le tableau des échanges\n2. Concentre-toi sur les éléments mis en évidence (encadrés/surlignés) dans chaque image\n3. Réalise une SYNTHÈSE TRANSVERSALE en expliquant comment les images se complètent\n4. Remets les images en ordre chronologique selon le fil de discussion\n5. CONSERVE TOUS les liens documentaires, FAQ et références techniques\n6. Ajoute une entrée \"Complément visuel\" dans le tableau des échanges"
},
"workflow": {
"etapes": [
{
"numero": 1,
"nom": "Analyse du ticket",
"agent": "AgentTicketAnalyser",
"description": "Extraction et analyse des informations du ticket"
},
{
"numero": 2,
"nom": "Tri des images",
"agent": "AgentImageSorter",
"description": "Identification des images pertinentes pour l'analyse"
},
{
"numero": 3,
"nom": "Analyse des images",
"agent": "AgentImageAnalyser",
"description": "Analyse détaillée des images pertinentes identifiées"
},
{
"numero": 4,
"nom": "Génération du rapport",
"agent": "AgentReportGenerator",
"description": "Synthèse des analyses et génération du rapport final"
}
]
}
}

View File

@ -1,245 +0,0 @@
# Rapport d'analyse: T11143
## Processus d'analyse
_Vue d'ensemble du processus d'analyse automatisé_
1. **Analyse du ticket** - `AgentTicketAnalyser`
- Extraction et analyse des informations du ticket
2. **Tri des images** - `AgentImageSorter`
- Identification des images pertinentes pour l'analyse
3. **Analyse des images** - `AgentImageAnalyser`
- Analyse détaillée des images pertinentes identifiées
4. **Génération du rapport** - `AgentReportGenerator`
- Synthèse des analyses et génération du rapport final
**Statistiques:**
- Images totales: 4
- Images pertinentes: 2
- Temps de génération: 123.26 secondes
## 1. Analyse du ticket
_Agent utilisé: `AgentTicketAnalyser` - Analyse du contenu du ticket_
```
### 1. Résumé du contexte
**Client :**
- Nom : Victor BOLLÉE
- Email : v.bollee@labojcg.fr
- Société : GIRAUD TP (JCG)
**Sujet du ticket reformulé en une ou plusieurs questions :**
- Pourquoi l'essai au bleu est-il inaccessible ?
- Comment résoudre le problème d'accès à l'essai au bleu ?
**Description technique synthétique :**
- Le client ne parvient pas à accéder à l'essai au bleu.
- Le support demande de vérifier l'accès à une page spécifique et de fournir une capture d'écran si nécessaire.
- Le problème s'est résolu de lui-même par la suite.
### 2. Informations techniques détectées
**Logiciels/modules mentionnés :**
- Aucun logiciel ou module spécifique n'est mentionné.
**Paramètres évoqués :**
- Aucun paramètre spécifique n'est mentionné.
**Fonctionnalités impactées :**
- Accès à l'essai au bleu.
**Conditions spécifiques :**
- Aucune condition spécifique n'est mentionnée.
### 3. Fil de discussion (filtrée, nettoyée, classée)
**Intervenant : Client**
**Date : 03/04/2025 08:35:20**
**Contenu :**
Bonjour,
Je ne parviens pas à accéder à lessai au bleu :
Merci par avance pour votre.
Cordialement
![Image](https://odoo.cbao.fr/web/image/145435?access_token=608ac9e7-3627-4a13-a8ec-06ff5046ebf3)
---
**Intervenant : Support**
**Date : 03/04/2025 12:17:41**
**Contenu :**
Bonjour,
Pouvez-vous vérifier si vous avez bien accès à la page suivante en l'ouvrant dans votre navigateur :
https://zk1.brg-lab.com/
Voici ce que vous devriez voir affiché :
Si ce n'est pas le cas, pouvez-vous me faire une capture d'écran de ce qui est affiché?
Je reste à votre entière disposition pour toute information complémentaire.
Cordialement,
---
Support technique
- image.png (image/png) [ID: 145453]
---
**Intervenant : Client**
**Date : 03/04/2025 12:21:13**
**Contenu :**
Bonjour,
Le problème sest résolu seul par la suite.
Je vous remercie pour votre retour.
Bonne journée
PS : ladresse fonctionne
### 4. Éléments liés à l'analyse visuelle
**Nombre d'images attachées :**
- 2 images sont attachées au ticket.
**Références aux interfaces ou options à visualiser :**
- L'accès à l'essai au bleu.
- La page https://zk1.brg-lab.com/.
**Points à vérifier dans les captures :**
- Vérifier l'affichage de la page https://zk1.brg-lab.com/.
- Vérifier l'accès à l'essai au bleu.
```
## 2. Tri des images
_Agent utilisé: `AgentImageSorter` - Identifie les images pertinentes_
| Image | Pertinence | Raison |
|-------|------------|--------|
| image.png | ✅ Pertinente | Oui |
| image_145435.png | ✅ Pertinente | Oui |
## 3. Analyse des images
_Agent utilisé: `AgentImageAnalyser` - Analyse détaillée des captures d'écran_
### Image 1: image.png
### Analyse de l'
### Image 2: image_145435.png
### Analyse de l'image
#### 1. Description objective
L'image montre une interface logicielle de type application web. Voici les éléments visibles :
- **Titre de la page** : "Essai au bleu de méthylène (MB) - NF EN 933-9 (02-2022)"
- **Barre de navigation horizontale** :
- Onglets : "ESSAI", "MATÉRIAUX", "PORTEFEUILLE", "OBSERVATIONS", "SMO", "HISTORIQUE"
- L'onglet "ESSAI" est actuellement sélectionné.
- **Menu latéral gauche** :
- Sections visibles : "ENREGISTREMENTS", "FAZ", "RAPPORTS"
- Sous "ENREGISTREMENTS", l'option "Essai au bleu de méthylène" est sélectionnée.
- Sous "FAZ", les options "Fiche de foyer" et "Statistiques" sont visibles.
- **Informations de l'essai** :
- Identifiant de l'échantillon : "25-00075"
- Date de réception : "02/04/2025"
- Préleveur : "BOLLÉE Victor"
- Date de prélèvement : "02/04/2025"
- Référence : "25-00075"
- Table : "0/2 C - CARRIÈRE ADCEG"
- **Pied de page** :
- Message : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com"
- **URL visible dans la barre d'adresse du navigateur** :
- "https://zk1.brg-lab.com/BRG-LAB/PAGE_programme/essai/CFAAAHVNGDAA"
#### 2. Éléments techniques clés
- **Onglets actifs** : "ESSAI", "MATÉRIAUX", "PORTEFEUILLE", "OBSERVATIONS", "SMO", "HISTORIQUE"
- **Menu latéral gauche** :
- Options interactives : "ENREGISTREMENTS", "FAZ", "RAPPORTS"
- Sous "ENREGISTREMENTS", l'option "Essai au bleu de méthylène" est sélectionnée.
- Sous "FAZ", les options "Fiche de foyer" et "Statistiques" sont visibles et interactives.
- **Informations de l'essai** :
- Champs préremplis : Identifiant de l'échantillon, date de réception, préleveur, date de prélèvement, référence, table.
- **Pied de page** :
- Message d'erreur : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com"
- **URL** :
- Contient des paramètres spécifiques : "CFAAAHVNGDAA"
#### 3. Éléments mis en évidence
Aucun élément n'est explicitement entouré, encadré, surligné ou fléché dans l'image. Tous les éléments sont affichés de manière standard.
#### 4. Relation avec le problème
- L'image montre l'interface de l'essai au bleu de méthylène, qui est directement liée au problème d'accès décrit dans le ticket.
- Le message d'erreur dans le pied de page ("Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com") pourrait être lié à un problème technique, mais aucune interprétation n'est faite ici.
#### 5. Réponses potentielles
- L'image montre que l'essai au bleu de méthylène est accessible, ce qui pourrait indiquer que le problème d'accès a été résolu, comme mentionné dans le fil de discussion.
- Le message d'erreur dans le pied de page pourrait être une piste pour des investigations techniques ultérieures.
#### 6. Lien avec la discussion
- L'image correspond à l'étape où le client a été invité à vérifier l'accès à la page https://zk1.brg-lab.com/.
- Le client a confirmé que l'adresse fonctionnait, ce qui est cohérent avec l'affichage de l'interface dans l'image.
- Le problème d'accès à l'essai au bleu semble résolu, comme indiqué dans le fil de discussion.
## 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: Aucun élément n'est explicitement entouré, encadré, surligné ou fléché dans l'image. Tous les éléments sont affichés de manière standard.
#### Relations avec le problème
- Image 1: - L'image montre l'interface de l'essai au bleu de méthylène, qui est directement liée au problème d'accès décrit dans le ticket.
- Le message d'erreur dans le pied de page ("Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com") pourrait être lié à un problème technique, mais aucune interprétation n'est faite ici.
#### Liens avec la discussion
- Image 1: - L'image correspond à l'étape où le client a été invité à vérifier l'accès à la page https://zk1.brg-lab.com/.
- Le client a confirmé que l'adresse fonctionnait, ce qui est cohérent avec l'affichage de l'interface dans l'image.
- Le problème d'accès à l'essai au bleu semble résolu, comme indiqué dans le fil de discussion.
## 4. Synthèse finale
_Agent utilisé: `AgentReportGenerator` - Synthèse et conclusions_
## Métadonnées
- **Date de génération**: 2025-04-16 16:33:19
- **Modèle principal utilisé**: mistral-large-latest
## Détails des analyses
Toutes les analyses requises ont été effectuées avec succès.
- **Analyse des images**: PRÉSENT
- **Analyse du ticket**: PRÉSENT
- **Diagnostic**: PRÉSENT
## Configuration des agents
### AgentImageSorter
#### Paramètres
### AgentImageAnalyser
#### Paramètres
### AgentReportGenerator
#### Paramètres
- **Modèle utilisé**: mistral-large-latest
- **Température**: 0.2
- **Top_p**: 0.9
- **Max_tokens**: 10000
- **Version du prompt**: v3.2

View File

@ -0,0 +1,33 @@
RAPPORT D'ANALYSE DU TICKET T11143
==================================================
### Rapport Final
#### 1. Contexte général
Le client, Victor BOLLÉE, signale un problème d'accès à l'essai au bleu, qui s'est résolu de lui-même par la suite, et confirme que l'adresse https://zk1.brg-lab.com/ fonctionne.
#### 2. Problèmes ou questions identifiés
- Pourquoi l'essai au bleu est-il inaccessible ?
- Comment résoudre le problème d'accès à l'essai au bleu ?
#### 3. Résumé croisé image/texte pour chaque question
**Pourquoi l'essai au bleu est-il inaccessible ?**
- **Texte du ticket** : Le client mentionne qu'il ne parvient pas à accéder à l'essai au bleu.
- **Image (image_145435.png)** :
- L'interface de l'essai au bleu est visible.
- Un message en bas de page indique : "Impossible de trouver l'adresse IP du serveur de zk1.brg-lab.com".
- Le menu "PAZ" est surligné en rouge.
**Comment résoudre le problème d'accès à l'essai au bleu ?**
- **Texte du ticket** : Le problème s'est résolu de lui-même par la suite.
- **Image (image.png)** :
- La page https://zk1.brg-lab.com/ affiche un message de confirmation : "It works!".
- La page contient des liens vers la documentation locale de Tomcat, des exemples de servlets et JSP, et des outils de gestion.
- Aucun élément désactivé, grisé ou masqué n'est visible.
#### 4. Liste d'observations supplémentaires pertinentes
- L'adresse https://zk1.brg-lab.com/ est accessible et fonctionne correctement, comme confirmé par le client et l'image (image.png).
- L'interface de l'essai au bleu affiche un message indiquant un problème de connexion au serveur (image_145435.png).
- Le menu "PAZ" est mis en évidence en rouge dans l'interface de l'essai au bleu (image_145435.png).
- Le problème d'accès à l'essai au bleu s'est résolu de lui-même, selon le client.

View File

@ -1,98 +0,0 @@
# Tests modulaires pour l'analyse de tickets
Ce répertoire contient une architecture de tests modulaire pour l'analyse de tickets avec différents modèles LLM.
## Structure
- `common/` : Utilitaires communs et factories
- `ticket_utils.py` : Fonctions pour manipuler les tickets et leurs ressources
- `llm_factory.py` : Factory pour initialiser les modèles LLM
- `agent_factory.py` : Factory pour initialiser les agents
- `workflows/` : Workflows de test complets
- `ticket_analyser_workflow.py` : Workflow pour l'analyse de tickets
- `image_analyser_workflow.py` : Workflow pour l'analyse d'images
- `complete_analysis_workflow.py` : Workflow complet avec génération de rapport
- `compare_models.py` : Script pour comparer plusieurs modèles sur le même ticket
## Utilisation
### Test d'analyse de ticket
Pour tester l'analyse d'un ticket avec un modèle spécifique :
```bash
python -m tests.workflows.ticket_analyser_workflow T1234 --model mistral_large --save
```
Options :
- `--model` : Modèle LLM à utiliser (défaut: mistral_large)
- `--output_dir` : Répertoire des tickets (défaut: output)
- `--verbose` : Mode verbeux
- `--save` : Sauvegarder les résultats dans un fichier JSON
### Test d'analyse d'images
Pour tester l'analyse d'images avec un modèle spécifique :
```bash
python -m tests.workflows.image_analyser_workflow T1234 output mistral_large pixtral_large
```
Arguments :
1. `ticket_id` : ID du ticket à analyser
2. `output_dir` : Répertoire des tickets (optionnel)
3. `text_model` : Modèle pour l'analyse de ticket (optionnel)
4. `vision_model` : Modèle pour l'analyse d'images (optionnel)
### Workflow complet avec génération de rapport
Pour exécuter le workflow complet (analyse de ticket, tri d'images, analyse d'images et génération de rapport) :
```bash
python -m tests.workflows.complete_analysis_workflow T1234 --text_model mistral_large --vision_model pixtral_large
```
Options :
- `--text_model` : Modèle LLM à utiliser pour l'analyse de ticket et la génération de rapport (défaut: mistral_large)
- `--vision_model` : Modèle LLM à utiliser pour l'analyse d'images (défaut: pixtral_large)
- `--output_dir` : Répertoire des tickets (défaut: output)
- `--no-report` : Ne pas générer de rapport final
- `--no-save` : Ne pas sauvegarder les résultats intermédiaires
- `--verbose` : Mode verbeux
### Comparaison de modèles
Pour comparer plusieurs modèles sur le même ticket :
```bash
python -m tests.compare_models T1234 --type both --save
```
Options :
- `--type` : Type de modèles à comparer (text, vision ou both)
- `--text-models` : Liste des modèles texte à comparer
- `--vision-models` : Liste des modèles vision à comparer
- `--text-model` : Modèle texte à utiliser pour les tests vision
- `--output-dir` : Répertoire des tickets
- `--save` : Sauvegarder les résultats
- `--verbose` : Mode verbeux
Exemple pour comparer des modèles spécifiques :
```bash
python -m tests.compare_models T1234 --type both --text-models mistral_large mistral_medium --vision-models pixtral_large llama_vision --save
```
## Ajout d'un nouveau modèle LLM
1. Créez une classe pour le nouveau modèle dans `llm_classes/`
2. Ajoutez le modèle à `LLM_CLASSES` dans `tests/common/llm_factory.py`
3. Ajoutez le modèle à `TEXT_MODELS` ou `VISION_MODELS` selon ses capacités
## Ajout d'un nouveau workflow de test
1. Créez un nouveau fichier dans `tests/workflows/`
2. Implémentez une fonction `execute_workflow()` qui prend en charge le workflow
3. Exportez la fonction dans `tests/workflows/__init__.py`

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,253 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script pour comparer plusieurs modèles LLM sur le même ticket.
Permet d'évaluer rapidement les performances de différents modèles.
"""
import os
import sys
import argparse
import json
import time
import logging
from typing import Dict, Any, List, Optional
from tests.common.llm_factory import TEXT_MODELS, VISION_MODELS
from tests.workflows import execute_ticket_analysis, execute_image_analysis
def setup_logging(verbose: bool = False, log_file: Optional[str] = None):
"""
Configure le système de logging.
Args:
verbose: Si True, active le mode verbeux (DEBUG)
log_file: Nom du fichier de log (si None, pas de log dans un fichier)
"""
log_level = logging.DEBUG if verbose else logging.INFO
handlers: List[logging.Handler] = [logging.StreamHandler()]
if log_file:
handlers.append(logging.FileHandler(log_file))
logging.basicConfig(
level=log_level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=handlers
)
def compare_text_models(ticket_id: str, models: List[str], output_dir: str = "output") -> Dict[str, Any]:
"""
Compare plusieurs modèles de texte sur le même ticket.
Args:
ticket_id: ID du ticket à analyser
models: Liste des modèles à comparer
output_dir: Répertoire contenant les tickets
Returns:
Dictionnaire avec les résultats pour chaque modèle
"""
results = {
"ticket_id": ticket_id,
"type": "text",
"models": {},
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
print(f"\n=== Comparaison de modèles texte pour le ticket {ticket_id} ===\n")
for model in models:
print(f"Test du modèle: {model}")
start_time = time.time()
try:
workflow_results = execute_ticket_analysis(ticket_id, output_dir, model)
execution_time = time.time() - start_time
if "error" in workflow_results:
print(f" ❌ Échec pour {model}: {workflow_results['error']}")
results["models"][model] = {
"success": False,
"error": workflow_results["error"],
"stage": workflow_results.get("stage", "unknown"),
"execution_time": execution_time
}
else:
analysis = workflow_results["analysis"]
print(f" ✅ Succès pour {model} en {execution_time:.2f} sec: {len(analysis) if analysis else 0} caractères")
results["models"][model] = {
"success": True,
"execution_time": execution_time,
"analysis_length": len(analysis) if analysis else 0,
"analysis": analysis
}
except Exception as e:
execution_time = time.time() - start_time
print(f" ❌ Erreur pour {model}: {e}")
results["models"][model] = {
"success": False,
"error": str(e),
"execution_time": execution_time
}
return results
def compare_vision_models(ticket_id: str, models: List[str], text_model: str = "mistral_large", output_dir: str = "output") -> Dict[str, Any]:
"""
Compare plusieurs modèles de vision sur le même ticket.
Args:
ticket_id: ID du ticket à analyser
models: Liste des modèles de vision à comparer
text_model: Modèle de texte à utiliser pour l'analyse du contexte
output_dir: Répertoire contenant les tickets
Returns:
Dictionnaire avec les résultats pour chaque modèle
"""
results = {
"ticket_id": ticket_id,
"type": "vision",
"text_model": text_model,
"models": {},
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
print(f"\n=== Comparaison de modèles vision pour le ticket {ticket_id} (texte: {text_model}) ===\n")
for model in models:
print(f"Test du modèle: {model}")
start_time = time.time()
try:
workflow_results = execute_image_analysis(ticket_id, output_dir, text_model, model)
execution_time = time.time() - start_time
if "error" in workflow_results:
print(f" ❌ Échec pour {model}: {workflow_results['error']}")
results["models"][model] = {
"success": False,
"error": workflow_results["error"],
"stage": workflow_results.get("stage", "unknown"),
"execution_time": execution_time
}
else:
images_analysed = len(workflow_results["analysis_results"])
print(f" ✅ Succès pour {model} en {execution_time:.2f} sec: {images_analysed} images analysées")
results["models"][model] = {
"success": True,
"execution_time": execution_time,
"images_total": workflow_results["images_count"],
"images_relevant": len(workflow_results["relevant_images"]),
"images_analysed": images_analysed,
"analysis_results": workflow_results["analysis_results"]
}
except Exception as e:
execution_time = time.time() - start_time
print(f" ❌ Erreur pour {model}: {e}")
results["models"][model] = {
"success": False,
"error": str(e),
"execution_time": execution_time
}
return results
def print_comparison_table(results: Dict[str, Any]):
"""
Affiche un tableau de comparaison des modèles.
Args:
results: Résultats de la comparaison
"""
if results["type"] == "text":
print("\n=== Résultats de la comparaison des modèles texte ===")
print(f"Ticket: {results['ticket_id']}")
print(f"\n{'Modèle':<15} | {'Statut':<10} | {'Temps (s)':<10} | {'Taille analyse':<15}")
print("-" * 60)
for model, data in results["models"].items():
status = "✅ Succès" if data.get("success", False) else "❌ Échec"
time_str = f"{data.get('execution_time', 0):.2f}"
length = data.get("analysis_length", "N/A")
print(f"{model:<15} | {status:<10} | {time_str:<10} | {length:<15}")
elif results["type"] == "vision":
print("\n=== Résultats de la comparaison des modèles vision ===")
print(f"Ticket: {results['ticket_id']}")
print(f"Modèle texte: {results['text_model']}")
print(f"\n{'Modèle':<15} | {'Statut':<10} | {'Temps (s)':<10} | {'Images analysées':<20}")
print("-" * 65)
for model, data in results["models"].items():
status = "✅ Succès" if data.get("success", False) else "❌ Échec"
time_str = f"{data.get('execution_time', 0):.2f}"
if data.get("success", False):
images = f"{data.get('images_analysed', 0)}/{data.get('images_relevant', 0)}/{data.get('images_total', 0)}"
else:
images = "N/A"
print(f"{model:<15} | {status:<10} | {time_str:<10} | {images:<20}")
def main():
parser = argparse.ArgumentParser(description="Comparer plusieurs modèles LLM sur le même ticket")
parser.add_argument("ticket_id", help="ID du ticket à analyser")
parser.add_argument("--type", choices=["text", "vision", "both"], default="text",
help="Type de modèles à comparer")
parser.add_argument("--text-models", nargs="+", choices=TEXT_MODELS,
help="Modèles texte à comparer (par défaut: tous)")
parser.add_argument("--vision-models", nargs="+", choices=VISION_MODELS,
help="Modèles vision à comparer (par défaut: tous)")
parser.add_argument("--text-model", choices=TEXT_MODELS, default="mistral_large",
help="Modèle texte à utiliser pour les tests vision")
parser.add_argument("--output-dir", default="output", help="Répertoire des tickets")
parser.add_argument("--save", action="store_true", help="Sauvegarder les résultats")
parser.add_argument("--verbose", "-v", action="store_true", help="Mode verbeux")
args = parser.parse_args()
# Configuration du logging
setup_logging(args.verbose, f"compare_models_{args.ticket_id}.log")
# Sélection des modèles à comparer
text_models = args.text_models if args.text_models else TEXT_MODELS
vision_models = args.vision_models if args.vision_models else VISION_MODELS
# Comparaison des modèles
results = {}
if args.type in ["text", "both"]:
text_results = compare_text_models(args.ticket_id, text_models, args.output_dir)
results["text"] = text_results
print_comparison_table(text_results)
if args.save:
save_dir = os.path.join("results", "comparisons", args.ticket_id)
os.makedirs(save_dir, exist_ok=True)
save_file = os.path.join(save_dir, f"text_comparison_{int(time.time())}.json")
with open(save_file, "w", encoding="utf-8") as f:
json.dump(text_results, f, ensure_ascii=False, indent=2)
print(f"Résultats sauvegardés dans: {save_file}")
if args.type in ["vision", "both"]:
vision_results = compare_vision_models(args.ticket_id, vision_models, args.text_model, args.output_dir)
results["vision"] = vision_results
print_comparison_table(vision_results)
if args.save:
save_dir = os.path.join("results", "comparisons", args.ticket_id)
os.makedirs(save_dir, exist_ok=True)
save_file = os.path.join(save_dir, f"vision_comparison_{int(time.time())}.json")
with open(save_file, "w", encoding="utf-8") as f:
json.dump(vision_results, f, ensure_ascii=False, indent=2)
print(f"Résultats sauvegardés dans: {save_file}")
return 0
if __name__ == "__main__":
sys.exit(main())

View File

@ -1,13 +0,0 @@
"""
Modules de test pour les workflows complets ou partiels.
Ce paquet contient les tests de différentes séquences d'agents.
"""
from .ticket_analyser_workflow import execute_workflow as execute_ticket_analysis
from .image_analyser_workflow import execute_workflow as execute_image_analysis
from .complete_analysis_workflow import execute_workflow as execute_complete_analysis
"""
Workflows de test pour l'application.
Ce package contient des workflows complets pour tester les différentes fonctionnalités.
"""

View File

@ -1,347 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Workflow complet d'analyse de ticket avec génération de rapport.
Ce module implémente un workflow qui combine tous les agents :
1. Analyse du ticket
2. Tri des images
3. Analyse des images pertinentes
4. Génération d'un rapport final
"""
import os
import sys
import json
import logging
import time
import argparse
from typing import Dict, Any, Optional, List
# Import des factories
from tests.common.agent_factory import (
create_ticket_analyser,
create_image_sorter,
create_image_analyser,
create_report_generator
)
from tests.common.llm_factory import create_llm
from tests.common.ticket_utils import get_ticket_json, get_ticket_images
logger = logging.getLogger("CompleteAnalysisWorkflow")
def execute_workflow(
ticket_id: str,
output_dir: str = "output",
text_model: str = "mistral_large",
vision_model: str = "pixtral_large",
generate_report: bool = True,
save_results: bool = True
) -> Dict[str, Any]:
"""
Exécute le workflow complet d'analyse de ticket et génération de rapport.
Args:
ticket_id: Identifiant du ticket
output_dir: Répertoire contenant les tickets
text_model: Nom du modèle à utiliser pour l'analyse de ticket et la génération de rapport
vision_model: Nom du modèle à utiliser pour l'analyse d'image
generate_report: Si True, génère un rapport final
save_results: Si True, sauvegarde les résultats intermédiaires
Returns:
Dict avec les résultats du workflow
"""
workflow_start = time.time()
logger.info(f"Démarrage du workflow complet pour le ticket {ticket_id}")
print(f"Démarrage du workflow complet pour le ticket {ticket_id}")
# ÉTAPE 1: Initialiser les modèles LLM
try:
print("Initialisation des modèles LLM...")
text_llm = create_llm(text_model)
vision_llm = create_llm(vision_model)
print(f"Modèles initialisés: {text_model}, {vision_model}")
except Exception as e:
logger.error(f"Erreur lors de l'initialisation des modèles: {e}")
print(f"ERREUR: Impossible d'initialiser les modèles: {e}")
return {"error": str(e), "stage": "init_llm"}
# ÉTAPE 2: Initialiser les agents
try:
print("Création des agents...")
ticket_agent = create_ticket_analyser(text_llm)
image_sorter = create_image_sorter(vision_llm)
image_analyser = create_image_analyser(vision_llm)
report_generator = create_report_generator(text_llm) if generate_report else None
print("Agents créés avec succès")
except Exception as e:
logger.error(f"Erreur lors de la création des agents: {e}")
print(f"ERREUR: Impossible de créer les agents: {e}")
return {"error": str(e), "stage": "init_agents"}
# ÉTAPE 3: Charger les données du ticket
try:
print("Chargement des données du ticket...")
json_file, ticket_data = get_ticket_json(ticket_id, output_dir)
if not json_file or not ticket_data:
error_msg = f"Impossible de charger les données du ticket {ticket_id}"
logger.error(error_msg)
print(f"ERREUR: {error_msg}")
return {"error": error_msg, "stage": "load_ticket"}
print(f"Données du ticket chargées: {json_file}")
except Exception as e:
logger.error(f"Erreur lors du chargement du ticket: {e}")
print(f"ERREUR: Impossible de charger le ticket: {e}")
return {"error": str(e), "stage": "load_ticket"}
# ÉTAPE 4: Analyser le ticket
try:
print("Analyse du ticket en cours...")
ticket_analysis = ticket_agent.executer(ticket_data)
print(f"Analyse du ticket terminée: {len(ticket_analysis) if ticket_analysis else 0} caractères")
# Sauvegarder l'analyse si demandé
if save_results:
save_dir = os.path.join("results", ticket_id)
os.makedirs(save_dir, exist_ok=True)
save_file = os.path.join(save_dir, f"ticket_analysis_{text_model}.json")
with open(save_file, "w", encoding="utf-8") as f:
json.dump({
"ticket_id": ticket_id,
"model": text_model,
"analysis": ticket_analysis,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}, f, ensure_ascii=False, indent=2)
print(f"Analyse du ticket sauvegardée: {save_file}")
except Exception as e:
logger.error(f"Erreur lors de l'analyse du ticket: {e}")
print(f"ERREUR: Impossible d'analyser le ticket: {e}")
return {"error": str(e), "stage": "analyse_ticket", "ticket_data": ticket_data}
# ÉTAPE 5: Récupérer et trier les images
relevant_images = []
image_sorting_results = {}
all_images = []
try:
print("Récupération et tri des images...")
all_images = get_ticket_images(ticket_id, output_dir)
if not all_images:
print("Aucune image trouvée pour ce ticket")
else:
print(f"Images trouvées: {len(all_images)}")
# Trier les images
for img_path in all_images:
print(f"Évaluation de l'image: {os.path.basename(img_path)}")
try:
sorting_result = image_sorter.executer(img_path)
is_relevant = sorting_result.get("is_relevant", False)
reason = sorting_result.get("reason", "")
image_sorting_results[img_path] = sorting_result
if is_relevant:
print(f" => Pertinente: {reason[:50]}...")
relevant_images.append(img_path)
else:
print(f" => Non pertinente: {reason[:50]}...")
except Exception as e:
logger.error(f"Erreur lors du tri de l'image {img_path}: {e}")
print(f"ERREUR: Impossible de trier l'image {img_path}: {e}")
image_sorting_results[img_path] = {"error": str(e), "is_relevant": False}
print(f"Images pertinentes: {len(relevant_images)}/{len(all_images)}")
# Sauvegarder les résultats du tri si demandé
if save_results and image_sorting_results:
save_dir = os.path.join("results", ticket_id)
os.makedirs(save_dir, exist_ok=True)
save_file = os.path.join(save_dir, f"image_sorting_{vision_model}.json")
with open(save_file, "w", encoding="utf-8") as f:
json.dump({
"ticket_id": ticket_id,
"model": vision_model,
"images_total": len(all_images),
"images_relevant": len(relevant_images),
"results": {os.path.basename(k): v for k, v in image_sorting_results.items()},
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}, f, ensure_ascii=False, indent=2)
print(f"Résultats du tri d'images sauvegardés: {save_file}")
except Exception as e:
logger.error(f"Erreur lors de la récupération/tri des images: {e}")
print(f"ERREUR: Impossible de récupérer/trier les images: {e}")
if generate_report:
# On continue quand même pour générer le rapport, même sans images
print("On continue sans images...")
else:
return {
"error": str(e),
"stage": "sort_images",
"ticket_id": ticket_id,
"ticket_data": ticket_data,
"ticket_analysis": ticket_analysis
}
# ÉTAPE 6: Analyser les images pertinentes avec contexte
image_analysis_results = {}
if relevant_images:
print("Analyse des images pertinentes avec contexte...")
for img_path in relevant_images:
img_name = os.path.basename(img_path)
print(f"Analyse de l'image: {img_name}")
try:
analysis_result = image_analyser.executer(img_path, contexte=ticket_analysis)
image_analysis_results[img_path] = analysis_result
print(f" => Analyse terminée: {len(analysis_result.get('analyse', '')) if analysis_result else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse de l'image {img_path}: {e}")
print(f"ERREUR: Impossible d'analyser l'image {img_path}: {e}")
image_analysis_results[img_path] = {"error": str(e)}
# Sauvegarder les analyses d'images si demandé
if save_results and image_analysis_results:
save_dir = os.path.join("results", ticket_id)
os.makedirs(save_dir, exist_ok=True)
save_file = os.path.join(save_dir, f"image_analysis_{vision_model}.json")
with open(save_file, "w", encoding="utf-8") as f:
json.dump({
"ticket_id": ticket_id,
"model": vision_model,
"images_analysed": len(image_analysis_results),
"results": {os.path.basename(k): v for k, v in image_analysis_results.items()},
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}, f, ensure_ascii=False, indent=2)
print(f"Analyses d'images sauvegardées: {save_file}")
else:
print("Aucune image pertinente à analyser")
# ÉTAPE 7: Générer le rapport final
report_file = None
report_content = None
if generate_report and report_generator is not None:
print("Génération du rapport final...")
try:
# Préparer les données pour le rapport
rapport_data = {
"ticket_id": ticket_id,
"ticket_data": ticket_data,
"ticket_analyse": ticket_analysis,
"analyse_images": {}
}
# Ajouter les résultats d'analyse d'images
for img_path, analysis in image_analysis_results.items():
sorting_result = image_sorting_results.get(img_path, {})
rapport_data["analyse_images"][img_path] = {
"sorting": sorting_result,
"analysis": analysis
}
# Définir le répertoire de destination pour le rapport
reports_dir = os.path.join("reports", ticket_id)
os.makedirs(reports_dir, exist_ok=True)
# Générer le rapport
report_result = report_generator.executer(rapport_data, reports_dir)
# Vérifier si le rapport a été généré avec succès
if report_result and isinstance(report_result, dict):
report_file = report_result.get("report_file")
report_content = report_result.get("content")
print(f"Rapport généré avec succès: {report_file}")
else:
print("Rapport généré mais le format de retour n'est pas standard")
except Exception as e:
logger.error(f"Erreur lors de la génération du rapport: {e}")
print(f"ERREUR: Impossible de générer le rapport: {e}")
elif generate_report:
logger.warning("Génération de rapport demandée mais l'agent n'a pas été initialisé correctement")
print("ATTENTION: Impossible de générer le rapport (agent non initialisé)")
# Calcul du temps total d'exécution
workflow_time = time.time() - workflow_start
print(f"Workflow complet terminé en {workflow_time:.2f} secondes")
# Retourner les résultats
return {
"ticket_id": ticket_id,
"ticket_analysis": ticket_analysis,
"images_count": len(all_images),
"relevant_images": len(relevant_images),
"images_analysed": len(image_analysis_results),
"report_file": report_file,
"execution_time": workflow_time
}
def main():
# Configuration de l'analyseur d'arguments
parser = argparse.ArgumentParser(description="Exécuter le workflow complet d'analyse de ticket")
parser.add_argument("ticket_id", help="ID du ticket à analyser (ex: T1234)")
parser.add_argument("--output_dir", default="output", help="Répertoire des tickets (défaut: output)")
parser.add_argument("--text_model", default="mistral_large", help="Modèle texte à utiliser (défaut: mistral_large)")
parser.add_argument("--vision_model", default="pixtral_large", help="Modèle vision à utiliser (défaut: pixtral_large)")
parser.add_argument("--no-report", action="store_true", help="Ne pas générer de rapport final")
parser.add_argument("--no-save", action="store_true", help="Ne pas sauvegarder les résultats intermédiaires")
parser.add_argument("--verbose", "-v", action="store_true", help="Mode verbeux")
# Analyser les arguments
args = parser.parse_args()
# Configurer le logging
log_level = logging.DEBUG if args.verbose else logging.INFO
log_file = f"complete_workflow_{args.ticket_id}.log"
handlers: List[logging.Handler] = [logging.StreamHandler()]
if log_file:
handlers.append(logging.FileHandler(log_file))
logging.basicConfig(
level=log_level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=handlers
)
# Exécuter le workflow
results = execute_workflow(
ticket_id=args.ticket_id,
output_dir=args.output_dir,
text_model=args.text_model,
vision_model=args.vision_model,
generate_report=not args.no_report,
save_results=not args.no_save
)
# Afficher un résumé des résultats
if "error" in results:
print(f"\nErreur lors de l'exécution du workflow: {results['error']}")
print(f"Étape en échec: {results.get('stage', 'inconnue')}")
return 1
print("\n=== Résumé du workflow complet ===")
print(f"Ticket: {results['ticket_id']}")
print(f"Temps d'exécution total: {results['execution_time']:.2f} secondes")
print(f"Analyse du ticket: {len(results['ticket_analysis']) if results.get('ticket_analysis') else 0} caractères")
print(f"Images trouvées: {results['images_count']}")
print(f"Images pertinentes: {results['relevant_images']}")
print(f"Images analysées: {results['images_analysed']}")
if results.get("report_file"):
print(f"Rapport généré: {results['report_file']}")
elif not args.no_report:
print("Rapport: Non généré (échec ou aucune donnée disponible)")
else:
print("Rapport: Désactivé")
return 0
if __name__ == "__main__":
sys.exit(main())

View File

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

View File

@ -1,162 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Workflow d'analyse de tickets.
Ce module implémente le workflow pour analyser un ticket avec l'agent AgentTicketAnalyser.
"""
import os
import sys
import argparse
import json
import logging
import time
from typing import Dict, Any, Optional
# Import des factories
from tests.common.agent_factory import create_ticket_analyser
from tests.common.llm_factory import create_llm
from tests.common.ticket_utils import get_ticket_json, get_ticket_report_file
logger = logging.getLogger("TicketAnalyserWorkflow")
def execute_workflow(ticket_id: str, output_dir: str = "output", model: str = "mistral_large") -> Dict[str, Any]:
"""
Exécute le workflow d'analyse de ticket.
Args:
ticket_id: Identifiant du ticket
output_dir: Répertoire contenant les tickets
model: Nom du modèle à utiliser pour l'analyse
Returns:
Dict avec les résultats du workflow
"""
logger.info(f"Démarrage du workflow pour le ticket {ticket_id}")
print(f"Démarrage du workflow pour le ticket {ticket_id}")
workflow_start = time.time()
# ÉTAPE 1: Initialiser le modèle LLM
try:
print(f"Initialisation du modèle {model}...")
llm = create_llm(model)
print(f"Modèle {model} initialisé avec succès")
except Exception as e:
logger.error(f"Erreur lors de l'initialisation du modèle: {e}")
print(f"ERREUR: Impossible d'initialiser le modèle: {e}")
return {"error": str(e), "stage": "init_llm"}
# ÉTAPE 2: Initialiser l'agent
try:
print("Création de l'agent d'analyse de tickets...")
agent = create_ticket_analyser(llm)
print("Agent créé avec succès")
except Exception as e:
logger.error(f"Erreur lors de la création de l'agent: {e}")
print(f"ERREUR: Impossible de créer l'agent: {e}")
return {"error": str(e), "stage": "init_agent"}
# ÉTAPE 3: Charger les données du ticket
try:
print("Chargement des données du ticket...")
json_file, ticket_data = get_ticket_json(ticket_id, output_dir)
if not json_file or not ticket_data:
error_msg = f"Impossible de charger les données du ticket {ticket_id}"
logger.error(error_msg)
print(f"ERREUR: {error_msg}")
return {"error": error_msg, "stage": "load_ticket"}
print(f"Données du ticket chargées: {json_file}")
except Exception as e:
logger.error(f"Erreur lors du chargement du ticket: {e}")
print(f"ERREUR: Impossible de charger le ticket: {e}")
return {"error": str(e), "stage": "load_ticket"}
# ÉTAPE 4: Analyser le ticket
try:
print("Analyse du ticket en cours...")
analysis = agent.executer(ticket_data)
print(f"Analyse du ticket terminée: {len(analysis) if analysis else 0} caractères")
except Exception as e:
logger.error(f"Erreur lors de l'analyse du ticket: {e}")
print(f"ERREUR: Impossible d'analyser le ticket: {e}")
return {"error": str(e), "stage": "analyse_ticket", "ticket_data": ticket_data}
# Calcul du temps total d'exécution
workflow_time = time.time() - workflow_start
print(f"Workflow terminé en {workflow_time:.2f} secondes")
# Retourner les résultats
return {
"ticket_id": ticket_id,
"model": model,
"ticket_data": ticket_data,
"analysis": analysis,
"execution_time": workflow_time
}
def main():
# Configuration de l'analyseur d'arguments
parser = argparse.ArgumentParser(description="Exécuter le workflow d'analyse de tickets")
parser.add_argument("ticket_id", help="ID du ticket à analyser (ex: T1234)")
parser.add_argument("--output_dir", default="output", help="Répertoire de sortie contenant les tickets")
parser.add_argument("--model", default="mistral_large", help="Modèle LLM à utiliser")
parser.add_argument("--verbose", "-v", action="store_true", help="Mode verbeux")
parser.add_argument("--save", action="store_true", help="Sauvegarder les résultats dans un fichier JSON")
# Analyser les arguments
args = parser.parse_args()
# Configurer le logging
log_level = logging.DEBUG if args.verbose else logging.INFO
logging.basicConfig(
level=log_level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(f"ticket_analyser_{args.ticket_id}.log"),
logging.StreamHandler()
]
)
# Exécuter le workflow
results = execute_workflow(args.ticket_id, args.output_dir, args.model)
# Afficher un résumé des résultats
if "error" in results:
print(f"\nErreur lors de l'exécution du workflow: {results['error']}")
print(f"Étape en échec: {results.get('stage', 'inconnue')}")
return 1
print("\nRésumé du workflow:")
print(f"Ticket: {results['ticket_id']}")
print(f"Modèle: {results['model']}")
print(f"Taille de l'analyse: {len(results['analysis']) if results['analysis'] else 0} caractères")
print(f"Temps d'exécution: {results['execution_time']:.2f} secondes")
# Sauvegarder les résultats si demandé
if args.save:
results_dir = os.path.join("results", args.ticket_id)
os.makedirs(results_dir, exist_ok=True)
results_file = os.path.join(results_dir, f"ticket_analysis_{args.model}.json")
save_results = {
"ticket_id": results["ticket_id"],
"model": results["model"],
"analysis": results["analysis"],
"execution_time": results["execution_time"],
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
with open(results_file, "w", encoding="utf-8") as f:
json.dump(save_results, f, ensure_ascii=False, indent=2)
print(f"Résultats sauvegardés dans: {results_file}")
return 0
if __name__ == "__main__":
sys.exit(main())