File size: 4,563 Bytes
2fc77f5
 
3c343e0
2fc77f5
 
 
3c343e0
2fc77f5
 
 
 
3c343e0
2fc77f5
3c343e0
2fc77f5
 
 
 
e1faa87
3c343e0
 
5ed4bca
 
3c343e0
5ed4bca
3c343e0
 
5ed4bca
 
 
 
 
3c343e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e1faa87
3c343e0
5ed4bca
3c343e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import json
import os
import smtplib
from datetime import datetime, timezone

from src.display.formatting import styled_error, styled_message, styled_warning
from src.envs import API, EVAL_REQUESTS_SUBGRAPH, EVAL_REQUESTS_CAUSALGRAPH, TOKEN, QUEUE_REPO_SUBGRAPH, QUEUE_REPO_CAUSALGRAPH
from src.submission.check_validity import (
    already_submitted_models,
    get_model_size,
    is_model_on_hub,
    parse_huggingface_url
)
import gradio as gr

REQUESTED_MODELS = None
USERS_TO_SUBMISSION_DATES = None

def upload_to_queue(track, hf_repo_circ, hf_repo_cg, level, method_name, contact_email, _id):
    errors = []
    hf_repo = hf_repo_circ if "Circuit" in track else hf_repo_cg
    repo_id, folder_path, revision = parse_huggingface_url(hf_repo)

    try:
        user_name, repo_name = repo_id.split("/")
    except Exception as e:
        errors.append("Error processing HF URL: could not get username and repo name")
    if revision is None or revision == "main":
        try:
            commit_hash = API.list_repo_commits(repo_id)[0].commit_id
        except Exception as e:
            errors.append("Could not get commit hash of provided Huggingface repo")
    current_time = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")

    if not errors:
        if "Circuit" in track:
            eval_entry = {
                "hf_repo": hf_repo,
                "user_name": user_name,
                "revision": commit_hash,
                "circuit_level": level.lower(),
                "method_name": method_name,
                "contact_email": contact_email.lower(),
                "submit_time": current_time,
                "status": "PREVALIDATION",
                "_id": _id
            }
            QUEUE_REPO = QUEUE_REPO_SUBGRAPH
            EVAL_REQUESTS = EVAL_REQUESTS_SUBGRAPH
        else:
            eval_entry = {
                "hf_repo": hf_repo,
                "user_name": user_name,
                "revision": commit_hash,
                "method_name": method_name,
                "contact_email": contact_email.lower(),
                "submit_time": current_time,
                "status": "PREVALIDATION",
                "_id": _id
            }
            QUEUE_REPO = QUEUE_REPO_CAUSALGRAPH
            EVAL_REQUESTS = EVAL_REQUESTS_CAUSALGRAPH

        OUT_DIR = f"{EVAL_REQUESTS}/"
        os.makedirs(OUT_DIR, exist_ok=True)
        out_path = f"{OUT_DIR}/{method_name}_{_id}_{current_time}.json"
        with open(out_path, 'w') as f:
            f.write(json.dumps(eval_entry))

        try:
            API.upload_file(
                path_or_fileobj=out_path,
                path_in_repo=out_path.split("/")[-1],
                repo_id=QUEUE_REPO,
                repo_type="dataset",
                commit_message=f"Add {method_name}_{_id}_{current_time}.json to eval queue"
            )
        except Exception as e:
            errors.append(f"Could not upload entry to eval queue: {e}")

    if errors:
        status = gr.Textbox("\n\n".join(f"❌ {e}" for e in errors), visible=True)
    else:
        status = gr.Textbox(f"βœ… Submission received! Your submission ID is \"{_id}\". Save this so that you can manage your submission on the queue.", visible=True)
    return [
        status,
        None, None,
        gr.Column(visible=False)
    ]

def remove_submission(track: str, method_name: str, _id: str):
    if track is None:
        return gr.Textbox(f"Please select a track.", visible=True)
    if "Circuit" in track:
        QUEUE_REPO = QUEUE_REPO_SUBGRAPH
        EVAL_REQUESTS = EVAL_REQUESTS_SUBGRAPH
    else:
        QUEUE_REPO = QUEUE_REPO_CAUSALGRAPH
        EVAL_REQUESTS = EVAL_REQUESTS_CAUSALGRAPH
    
    OUT_DIR = f"{EVAL_REQUESTS}/"
    os.makedirs(OUT_DIR, exist_ok=True)
    files = os.listdir(OUT_DIR)
    out_paths = [f for f in files if f.startswith(f"{method_name}_{_id}")]
    if out_paths:
        filename = out_paths[0]
        filepath = os.path.join(OUT_DIR, filename)
        with open(filepath, 'r') as f:
            data = json.load(f)
        hf_repo = data["hf_repo"]
        try:
            API.delete_file(
                path_in_repo=filename,
                repo_id=QUEUE_REPO,
                repo_type="dataset"
            )
        except Exception as e:
            return gr.Textbox(f"Could not delete entry from eval queue: {e}", visible=True)
        os.remove(filepath)
        status = "Submission removed from queue."
    else:
        status = "Submission not found in queue."

    return gr.Textbox(status, visible=True)