demo / backend /clean_and_restart_eval.py
tfrere's picture
cleanup generation logs
7e389db
raw
history blame
3.48 kB
#!/usr/bin/env python3
"""
Script pour nettoyer les anciens résultats d'évaluation et relancer LightEval
"""
import os
import sys
import shutil
import argparse
import asyncio
from pathlib import Path
from datetime import datetime
# Importer la tâche d'évaluation
from tasks.evaluation_task import EvaluationTask
def log(message):
"""Affiche un message avec un timestamp"""
print(f"[{datetime.now().strftime('%H:%M:%S')}] {message}")
async def main(session_id, dataset_name, threshold=None):
"""
Nettoie les anciens résultats et relance l'évaluation
Args:
session_id: ID de la session à traiter
dataset_name: Nom du dataset à évaluer
threshold: Seuil optionnel pour l'analyse des sentiments (positive_count - negative_count)
"""
# Vérifier que le dossier de session existe
session_dir = Path(f"uploaded_files/{session_id}")
if not session_dir.exists():
log(f"Erreur: Le dossier de session {session_id} n'existe pas")
return 1
# Chemin vers les résultats LightEval
results_dir = session_dir / "lighteval_results"
# Suppression des anciens résultats
if results_dir.exists():
log(f"Suppression de l'ancien dossier de résultats: {results_dir}")
shutil.rmtree(results_dir)
log("Nettoyage terminé")
# Si un seuil est spécifié, modifier le config yaml pour le sentiment analysis
if threshold is not None:
# Chemin du module lighteval_task
lighteval_task_path = Path("lighteval_task/lighteval_task.py")
# Modifier le module uniquement s'il existe
if lighteval_task_path.exists():
log(f"Ajustement du seuil d'analyse de sentiment à {threshold}")
# Lire le contenu
with open(lighteval_task_path, 'r', encoding='utf-8') as file:
content = file.read()
# Remplacer le seuil dans la code
content = content.replace(
"pos_count > neg_count + 2", # Seuil par défaut
f"pos_count > neg_count + {threshold}"
)
content = content.replace(
"neg_count > pos_count + 2", # Seuil par défaut
f"neg_count > pos_count + {threshold}"
)
# Écrire le fichier modifié
with open(lighteval_task_path, 'w', encoding='utf-8') as file:
file.write(content)
log(f"Seuil d'analyse de sentiment ajusté à {threshold}")
# Créer une nouvelle tâche d'évaluation
log("Initialisation d'une nouvelle tâche d'évaluation")
evaluation_task = EvaluationTask(session_id, dataset_name)
# Exécuter l'évaluation
log("Démarrage de l'évaluation...")
await evaluation_task.run(clean_first=True)
# Vérifier les résultats
if evaluation_task.is_completed:
log("Évaluation terminée avec succès")
# Trier les résultats par accuracy
results_sorted = sorted(evaluation_task.results, key=lambda x: x.get('accuracy', 0), reverse=True)
log(f"Résultats: {results_sorted}")
else:
log("L'évaluation n'a pas pu être terminée")
return 0
if __name__ == "__main__":
# Exécuter la fonction principale de manière asynchrone
exit_code = asyncio.run(main("pokemon-guide", "yourbench/yourbench_hurricane-faq", -1))
sys.exit(exit_code)