File size: 5,376 Bytes
970eef1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/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()