|
|
|
""" |
|
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 |
|
|
|
|
|
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) |
|
""" |
|
|
|
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 |
|
|
|
|
|
results_dir = session_dir / "lighteval_results" |
|
|
|
|
|
if results_dir.exists(): |
|
log(f"Suppression de l'ancien dossier de résultats: {results_dir}") |
|
shutil.rmtree(results_dir) |
|
log("Nettoyage terminé") |
|
|
|
|
|
if threshold is not None: |
|
|
|
lighteval_task_path = Path("lighteval_task/lighteval_task.py") |
|
|
|
|
|
if lighteval_task_path.exists(): |
|
log(f"Ajustement du seuil d'analyse de sentiment à {threshold}") |
|
|
|
|
|
with open(lighteval_task_path, 'r', encoding='utf-8') as file: |
|
content = file.read() |
|
|
|
|
|
content = content.replace( |
|
"pos_count > neg_count + 2", |
|
f"pos_count > neg_count + {threshold}" |
|
) |
|
content = content.replace( |
|
"neg_count > pos_count + 2", |
|
f"neg_count > pos_count + {threshold}" |
|
) |
|
|
|
|
|
with open(lighteval_task_path, 'w', encoding='utf-8') as file: |
|
file.write(content) |
|
|
|
log(f"Seuil d'analyse de sentiment ajusté à {threshold}") |
|
|
|
|
|
log("Initialisation d'une nouvelle tâche d'évaluation") |
|
evaluation_task = EvaluationTask(session_id, dataset_name) |
|
|
|
|
|
log("Démarrage de l'évaluation...") |
|
await evaluation_task.run(clean_first=True) |
|
|
|
|
|
if evaluation_task.is_completed: |
|
log("Évaluation terminée avec succès") |
|
|
|
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__": |
|
|
|
|
|
exit_code = asyncio.run(main("pokemon-guide", "yourbench/yourbench_hurricane-faq", -1)) |
|
sys.exit(exit_code) |