File size: 2,688 Bytes
39acd70
 
3964afa
39acd70
 
 
 
 
 
 
 
3964afa
a8a8975
39acd70
 
 
 
 
 
 
a8a8975
39acd70
a8a8975
39acd70
 
 
 
a8a8975
39acd70
3964afa
39acd70
 
 
 
 
3964afa
a8a8975
 
39acd70
3964afa
39acd70
a8a8975
 
 
3964afa
a8a8975
 
39acd70
3964afa
39acd70
a8a8975
39acd70
3964afa
39acd70
 
3964afa
39acd70
 
 
 
 
 
 
 
 
a8a8975
 
 
 
 
 
 
 
3964afa
a8a8975
39acd70
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
#!/usr/bin/env python3
"""
Script for relaunching LightEval evaluation with a custom timeout
"""
import os
import sys
import argparse
import asyncio
from pathlib import Path
from datetime import datetime

# Import evaluation task
from tasks.evaluation_task import EvaluationTask, DEFAULT_EVALUATION_TIMEOUT


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, timeout=None):
    """
    Relance l'évaluation avec un timeout personnalisé
    
    Args:
        session_id: ID de la session à traiter
        dataset_name: Nom du dataset à évaluer
        timeout: Timeout en secondes pour chaque évaluation de modèle (utilise la valeur par défaut si None)
    """
    # Check that session folder exists
    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
    
    # Display used timeout
    timeout_value = timeout if timeout is not None else DEFAULT_EVALUATION_TIMEOUT
    log(f"Utilisation d'un timeout de {timeout_value} secondes pour l'évaluation")
    
    # Create new evaluation task with specified timeout
    log("Initialisation d'une nouvelle tâche d'évaluation")
    evaluation_task = EvaluationTask(
        session_uid=session_id,
        dataset_name=dataset_name,
        clean_old_results=True,  # Automatically clean old results
        timeout=timeout
    )
    
    # Run evaluation
    log("Démarrage de l'évaluation...")
    await evaluation_task.run()
    
    # Check results
    if evaluation_task.is_completed:
        log("Évaluation terminée avec succès")
        # Sort results by 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__":
    parser = argparse.ArgumentParser(description="Relancer l'évaluation LightEval avec un timeout personnalisé")
    parser.add_argument("session_id", help="ID de la session à traiter")
    parser.add_argument("dataset_name", help="Nom du dataset à évaluer")
    parser.add_argument("--timeout", type=float, default=None, 
                        help=f"Timeout en secondes pour chaque évaluation de modèle (défaut: {DEFAULT_EVALUATION_TIMEOUT})")
    
    args = parser.parse_args()
    
    # Run main function asynchronously
    exit_code = asyncio.run(main(args.session_id, args.dataset_name, args.timeout))
    sys.exit(exit_code)