File size: 2,652 Bytes
9ab539a
 
bccaf50
 
 
9ab539a
fbd403a
ca72b36
 
9ab539a
 
bccaf50
 
 
 
 
 
 
 
fdddab8
bccaf50
 
 
 
 
 
fdddab8
bccaf50
 
fbd403a
bccaf50
 
 
 
 
 
 
 
 
 
 
 
 
92edcfa
bccaf50
 
9ab539a
bccaf50
 
 
9ab539a
bccaf50
fbd403a
bccaf50
fbd403a
 
 
 
bccaf50
 
fbd403a
 
fdddab8
fbd403a
 
bccaf50
 
fbd403a
bccaf50
 
 
 
 
 
 
fdddab8
bccaf50
 
fbd403a
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
import json
import os
import uuid
from datetime import datetime
from pathlib import Path

from src.display.formatting import styled_error, styled_warning, styled_message
from src.envs import API, EVAL_REQUESTS_PATH, QUEUE_REPO, LOCAL_MODE
from src.submission.check_validity import is_repository_valid


def add_new_eval(
    library_name,
    language,
) -> str:
    """
    Adds a new library to the assessment queue.
    
    Args:
        library_name: Name of the library
        language: Programming language
        
    Returns:
        A message indicating the status of the submission
    """
    # Check if valid repository
    is_valid, validity_message, library_info = is_repository_valid(library_name)
    
    if not is_valid:
        return styled_error(f"Invalid submission: {validity_message}")

    # Create a unique identifier for the submission
    uid = uuid.uuid4().hex[:6]
    timestamp = datetime.now().isoformat()
    request_filename = f"{library_name.replace('/', '_')}_eval_request_{timestamp}_{uid}.json"
    
    # Stars count and license info from library_info if available
    stars = library_info.get("stars", 0)
    license_name = library_info.get("license", "unknown")
    
    # Create the assessment request JSON
    assessment_request = {
        "library": library_name,
        "language": "/".join(language) if isinstance(language, list) else language,
        "license": license_name,
        "stars": stars,
        "status": "PENDING",
        "submitted_time": timestamp,
        "last_updated": timestamp,
        "assessment_id": uid
    }
    
    # Ensure directory exists
    os.makedirs(EVAL_REQUESTS_PATH, exist_ok=True)
    
    # Save the request locally
    request_file_path = os.path.join(EVAL_REQUESTS_PATH, request_filename)
    with open(request_file_path, "w") as f:
        json.dump(assessment_request, f, indent=2)
    
    # If in local mode, don't try to upload to HF
    if LOCAL_MODE:
        return styled_message(f"Library '{library_name}' has been added to the local assessment queue! Assessment ID: {uid}")
    
    # Try to upload to HF if not in local mode
    try:
        # Push the file to the HF repo
        path = Path(request_file_path)
        API.upload_file(
            path_or_fileobj=path,
            path_in_repo=request_filename,
            repo_id=QUEUE_REPO,
            repo_type="dataset",
        )
        
        return styled_message(f"Library '{library_name}' has been added to the assessment queue! Assessment ID: {uid}")
    
    except Exception as e:
        return styled_warning(f"Saved locally but failed to upload to Hugging Face: {str(e)}")