mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-13 09:06:51 +01:00
16
This commit is contained in:
parent
407cf39ea0
commit
4cb70da960
137
README.md
Normal file
137
README.md
Normal 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
|
||||
```
|
||||
|
||||
Où `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
243
agent_factory.py
Normal 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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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}")
|
||||
20
debug/rapport_debug_T11143.json
Normal file
20
debug/rapport_debug_T11143.json
Normal file
File diff suppressed because one or more lines are too long
162
main.py
Normal file
162
main.py
Normal 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())
|
||||
322
orchestrator.py
322
orchestrator.py
@ -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
|
||||
|
||||
@ -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 t’on accéder à cette dernière en début d’après midi ?
|
||||
Merci d’avance
|
||||
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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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, j’ai le message d’erreur ci-dessous qui s’affiche.
|
||||
Pouvez-vous, s’il 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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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,
|
||||
J’ai également une erreur fatale sur l’essai aplatissement.
|
||||
Pouvez-vous, s’il vous plait, debugger l’ensemble 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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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 s’incré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 l’année précédente, une saisie manuelle restera nécessaire.
|
||||
Je reste disponible pour toute discussion téléphonique. N’hé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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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 l’enregistrement des prélèvements béton concernant l’heure de confection.
|
||||
Quand ce n’est pas nous qui confectionnons les éprouvettes, il n’y a pas de problème, nous pouvons rentrer une heure de confection et les échéances d’écrasements s’alignent sur cette heure.
|
||||
Par contre quand nous confectionnons les éprouvettes, impossible de revenir dans le prélèvement pour incrémenter l’heure.
|
||||
Si nous avons des échéances à jeune âge, impossible d’avoir quelque chose de cohérent dans les heures et les dates d’écrasement.
|
||||
C’est d’autant 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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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 d’ouvrage n’apparaissent 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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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.
|
||||
L’idé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 à m’accorder 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 l’objectif 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 n’est 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.
|
||||
L’idé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 à m’accorder 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 !
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -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
|
||||
@ -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 l’essai au bleu :\nMerci par avance pour votre.\nCordialement\n\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 s’est résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : l’adresse 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 à l’essai au bleu.\nMerci par avance pour votre.\nCordialement\n\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 s’est résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : l’adresse 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
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -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 à l’essai au bleu.
|
||||
Merci par avance pour votre.
|
||||
Cordialement
|
||||

|
||||
|
||||
---
|
||||
**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 s’est résolu seul par la suite.
|
||||
Je vous remercie pour votre retour.
|
||||
Bonne journée
|
||||
PS : l’adresse 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
|
||||
@ -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"
|
||||
}
|
||||
]
|
||||
@ -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.
|
||||
File diff suppressed because one or more lines are too long
@ -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
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -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
|
||||
@ -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 l’essai au bleu :
|
||||
Merci par avance pour votre.
|
||||
Cordialement
|
||||
|
||||

|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
********************************************************************************
|
||||
*** 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 s’est résolu seul par la suite.
|
||||
Je vous remercie pour votre retour.
|
||||
Bonne journée
|
||||
PS : l’adresse fonctionne
|
||||
De :
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
********************************************************************************
|
||||
*** CHANGEMENT D'ÉTAT ***
|
||||
********************************************************************************
|
||||
|
||||
DATE: 2025-04-03 12:23:31
|
||||
DE: Fabien LAFAY
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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. N’hé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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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 d’aprè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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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 d’essais granulat, le filigrane « Provisoire » s’affiche malgré l’état terminé du rapport et l’enregistrement.
|
||||
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 d’essais.
|
||||
Pour cela, dans le sommaire de votre rapport d’essai, 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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -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
83
regenerer_txt.py
Normal 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é!")
|
||||
@ -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 à l’essai au bleu :\nMerci par avance pour votre.\nCordialement\n\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 s’est résolu seul par la suite.\nJe vous remercie pour votre retour.\nBonne journée\nPS : l’adresse 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -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 à l’essai au bleu :
|
||||
Merci par avance pour votre.
|
||||
Cordialement
|
||||

|
||||
|
||||
---
|
||||
|
||||
**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 s’est résolu seul par la suite.
|
||||
Je vous remercie pour votre retour.
|
||||
Bonne journée
|
||||
PS : l’adresse 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
|
||||
33
reports/T11143/rapport_final_T11143.txt
Normal file
33
reports/T11143/rapport_final_T11143.txt
Normal 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.
|
||||
@ -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`
|
||||
@ -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 *
|
||||
@ -1,4 +0,0 @@
|
||||
"""
|
||||
Modules de test spécifiques aux agents.
|
||||
Ce paquet contient les tests unitaires pour les différents agents LLM.
|
||||
"""
|
||||
@ -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.
|
||||
"""
|
||||
@ -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
|
||||
@ -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é")
|
||||
@ -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 []
|
||||
@ -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())
|
||||
@ -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.
|
||||
"""
|
||||
@ -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())
|
||||
@ -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())
|
||||
@ -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())
|
||||
Loading…
x
Reference in New Issue
Block a user