demo / backend /tests /test_lighteval.py
tfrere's picture
first commit
970eef1
raw
history blame
5.38 kB
#!/usr/bin/env python3
"""
Script minimal pour tester directement lighteval avec la tâche yourbench
"""
import os
import sys
import subprocess
import json
import time
from pathlib import Path
import logging
# Assurez-vous que l'environnement est correctement configuré
from dotenv import load_dotenv
load_dotenv()
# Importer le module de définition de tâche yourbench
sys.path.append(os.getcwd())
from tasks.yourbench_lighteval_task import create_yourbench_task
def run_lighteval_test():
"""
Exécuter un test minimal avec lighteval
"""
# Parameters
dataset_name = "yourbench_a"
organization = "yourbench"
model_name = "Qwen/Qwen2.5-72B-Instruct"
provider = "novita"
output_dir = f"uploaded_files/test_{provider}/lighteval_results"
# Créer le répertoire de sortie
os.makedirs(output_dir, exist_ok=True)
# Définir le chemin d'accès complet au dataset
dataset_path = f"{organization}/{dataset_name}"
print(f"Dataset à évaluer: {dataset_path}")
# Créer un fichier temporaire
import tempfile
temp_file_path = tempfile.mktemp(suffix=".py")
print(f"Création du fichier temporaire: {temp_file_path}")
with open(temp_file_path, 'w') as temp_file:
# Écrire le contenu du fichier
temp_file.write(f"""
import os
import sys
import logging
sys.path.append("{os.getcwd()}")
from tasks.yourbench_lighteval_task import create_yourbench_task
# Configurer le logging
logging.basicConfig(level=logging.INFO)
# Créer la tâche yourbench
yourbench = create_yourbench_task("{dataset_path}", "lighteval")
# Définir la variable TASKS_TABLE dont lighteval a besoin
TASKS_TABLE = [yourbench]
""")
# Construire la commande lighteval
cmd = [
"lighteval",
"endpoint",
"inference-providers",
f"model={model_name},provider={provider}",
"custom|yourbench|0|0",
"--custom-tasks",
temp_file_path,
"--max-samples", "5", # Seulement 1 échantillon
"--output-dir", output_dir,
"--save-details",
"--no-push-to-hub" # Pas de push pour gagner du temps
]
# Afficher la commande
print(f"Exécution de la commande: {' '.join(cmd)}")
print(f"Heure de début: {time.strftime('%H:%M:%S')}")
# Exécuter la commande
try:
# Exécuter avec capture des sorties
result = subprocess.run(cmd, capture_output=True, text=True)
# Afficher les résultats
print(f"Code de retour: {result.returncode}")
print("--- SORTIE STANDARD ---")
print(result.stdout)
print("--- ERREUR STANDARD ---")
print(result.stderr)
# Vérifier si des résultats ont été générés
results_dir = Path(output_dir) / "results"
if results_dir.exists():
print(f"Dossier de résultats créé: {results_dir}")
# Lister les fichiers de résultats
result_files = list(results_dir.glob("**/*.json"))
if result_files:
print(f"Fichiers de résultats trouvés: {result_files}")
# Trier les fichiers par date de modification pour prendre le plus récent
result_files.sort(key=lambda x: x.stat().st_mtime, reverse=True)
latest_result = result_files[0]
print(f"Fichier de résultats le plus récent: {latest_result}")
# Lire le fichier de résultats
with open(latest_result, 'r') as f:
results = json.load(f)
print("Contenu du fichier de résultats:")
print(json.dumps(results, indent=2))
# Analyse des résultats
print("\n==== ANALYSE DES RÉSULTATS ====")
if "results" in results:
for task_name, task_results in results["results"].items():
print(f"Tâche: {task_name}")
for metric_name, metric_value in task_results.items():
print(f" {metric_name}: {metric_value}")
else:
print("Aucun résultat trouvé dans le fichier JSON")
# Vérifier les détails
details_dir = Path(output_dir) / "details"
if details_dir.exists():
print(f"\nDossier de détails trouvé: {details_dir}")
model_details_dirs = list(details_dir.glob("**/*"))
if model_details_dirs:
print(f"Dossiers de détails par modèle: {model_details_dirs}")
else:
print("Aucun fichier de résultats trouvé.")
else:
print(f"Aucun dossier de résultats créé.")
except subprocess.CalledProcessError as e:
print(f"Erreur lors de l'exécution de la commande: {e}")
except Exception as e:
print(f"Exception: {e}")
finally:
# Supprimer le fichier temporaire
try:
os.unlink(temp_file_path)
print(f"Fichier temporaire supprimé: {temp_file_path}")
except:
pass
print(f"Heure de fin: {time.strftime('%H:%M:%S')}")
if __name__ == "__main__":
run_lighteval_test()