llm_ticket3/test_extraction_json.py
2025-04-11 17:05:45 +02:00

94 lines
3.9 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script de test pour les fonctions d'extraction de JSON et d'extraction de questions initiales.
"""
import json
import sys
from agents.utils.report_utils import extraire_et_traiter_json, extraire_question_initiale
def test_extraction_json():
"""Teste la fonction d'extraction de JSON depuis un texte de rapport."""
# Texte de rapport avec JSON
rapport = """# Rapport d'analyse
Voici le rapport.
## Tableau questions/réponses
```json
{
"chronologie_echanges": [
{"date": "01/08/2022 12:00:00", "emetteur": "SUPPORT", "type": "Réponse", "contenu": "Bonjour, je te contacte concernant : Mon problème technique. Je l'ai résolu."},
{"date": "01/08/2022 13:00:00", "emetteur": "CLIENT", "type": "Question", "contenu": "Merci beaucoup!"}
]
}
```
## Conclusion
Fin du rapport.
"""
# Extraire le JSON
rapport_traite, echanges_json, _ = extraire_et_traiter_json(rapport)
print("JSON extrait:", json.dumps(echanges_json, indent=2, ensure_ascii=False))
# Vérifier
assert echanges_json is not None, "Le JSON n'a pas été extrait"
assert "chronologie_echanges" in echanges_json, "Structure JSON incorrecte"
assert len(echanges_json["chronologie_echanges"]) >= 2, "Nombre d'échanges incorrect"
# Vérifier si une question initiale a été ajoutée
if len(echanges_json["chronologie_echanges"]) > 2:
print("Question initiale ajoutée:", json.dumps(echanges_json["chronologie_echanges"][0], indent=2, ensure_ascii=False))
return True
def test_extraire_question_initiale():
"""Teste la fonction d'extraction de questions initiales."""
# Cas 1: Premier message est déjà une question du client
echanges1 = [
{"date": "01/08/2022 11:30:00", "emetteur": "CLIENT", "type": "Question", "contenu": "J'ai un problème"}
]
question1 = extraire_question_initiale(echanges1)
print("Test 1 - Premier message est une question:", question1)
assert question1 is None, "Ne devrait pas extraire une question si déjà présente"
# Cas 2: Premier message est une réponse du support qui cite la question
echanges2 = [
{"date": "01/08/2022 12:11:03", "emetteur": "SUPPORT", "type": "Réponse",
"contenu": "Bonjour, Je te contacte pour donner suite à ta demande concernant : \nGuillaume Lucas ne parvient jamais à enregistrer un échantillon\n\nJe viens de corriger ton problème."}
]
question2 = extraire_question_initiale(echanges2)
print("Test 2 - Question extraite:", question2)
assert question2 is not None, "Devrait extraire une question"
assert question2["emetteur"] == "CLIENT", "L'émetteur devrait être CLIENT"
assert question2["type"] == "Question", "Le type devrait être Question"
assert "Guillaume Lucas" in question2["contenu"], "Le contenu devrait contenir la question extraite"
# Cas 3: Format différent de citation
echanges3 = [
{"date": "01/08/2022 14:00:00", "emetteur": "SUPPORT", "type": "Réponse",
"contenu": "Bonjour\nJe réponds à votre ticket: Problème de connexion à l'application\n\nVoici la solution."}
]
question3 = extraire_question_initiale(echanges3)
print("Test 3 - Autre format:", question3)
assert question3 is not None, "Devrait extraire une question"
assert "Problème de connexion" in question3["contenu"], "Le contenu devrait contenir la question extraite"
return True
if __name__ == "__main__":
print("=== Test d'extraction JSON ===")
json_test_success = test_extraction_json()
print("\n=== Test d'extraction de questions initiales ===")
question_test_success = test_extraire_question_initiale()
if json_test_success and question_test_success:
print("\nTous les tests sont réussis! ✅")
sys.exit(0)
else:
print("\nCertains tests ont échoué ❌")
sys.exit(1)