File size: 3,106 Bytes
6d6662e
d30410b
 
 
 
de0f093
 
 
d30410b
 
6d6662e
 
d30410b
6d6662e
d30410b
 
 
 
 
6d6662e
d30410b
 
6d6662e
d30410b
6d6662e
d30410b
6d6662e
 
 
 
 
 
 
d30410b
6d6662e
 
 
 
 
 
 
 
 
d30410b
6d6662e
d30410b
 
 
 
 
6d6662e
 
 
 
 
 
d30410b
 
 
 
 
 
 
 
 
 
 
 
 
 
6d6662e
d30410b
6d6662e
d30410b
 
 
 
 
 
 
 
 
6d6662e
d30410b
 
 
 
 
 
 
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
import os
from constants import EVAL_REQUESTS_PATH
from pathlib import Path
from huggingface_hub import HfApi, Repository

TOKEN_HUB = os.environ.get("TOKEN_HUB", None)
QUEUE_REPO = os.environ.get("QUEUE_REPO", None)
QUEUE_PATH = os.environ.get("QUEUE_PATH", None)

hf_api = HfApi(
    endpoint="https://huggingface.co",
    token=TOKEN_HUB,
)

# Language code for Persian
PERSIAN_LANGUAGE_CODE = "fa"

def load_all_info_from_dataset_hub():
    eval_queue_repo = None
    requested_models = []

    if TOKEN_HUB is None:
        raise ValueError("No Hugging Face token provided. Skipping evaluation requests and results.")

    print("Pulling evaluation requests and results.")

    eval_queue_repo = Repository(
        local_dir=QUEUE_PATH,
        clone_from=QUEUE_REPO,
        use_auth_token=TOKEN_HUB,
        repo_type="dataset",
    )
    eval_queue_repo.git_pull()

    # Local directory where dataset repo is cloned + folder with eval requests
    directory = QUEUE_PATH / EVAL_REQUESTS_PATH
    requested_models = get_all_requested_models(directory)
    requested_models = [p.stem for p in requested_models]

    # Local directory where dataset repo is cloned
    csv_results = get_csv_with_results(QUEUE_PATH)
    if csv_results is None:
        raise ValueError("CSV results file not found.")

    return eval_queue_repo, requested_models, csv_results

def upload_file(requested_model_name, path_or_fileobj):
    dest_repo_file = Path(EVAL_REQUESTS_PATH) / path_or_fileobj.name
    dest_repo_file = str(dest_repo_file)
    hf_api.upload_file(
        path_or_fileobj=path_or_fileobj,
        path_in_repo=str(dest_repo_file),
        repo_id=QUEUE_REPO,
        token=TOKEN_HUB,
        repo_type="dataset",
        commit_message=f"Add {requested_model_name} to eval queue")

def get_all_requested_models(directory):
    directory = Path(directory)
    all_requested_models = list(directory.glob("*.txt"))
    return all_requested_models

def get_csv_with_results(directory):
    directory = Path(directory)
    all_csv_files = list(directory.glob("*.csv"))
    latest = [f for f in all_csv_files if f.stem.endswith("latest")]
    if len(latest) != 1:
        return None
    return latest[0]

def is_model_on_hub(model_name, revision="main") -> (bool, str):
    try:
        model_name = model_name.replace(" ", "")
        author = model_name.split("/")[0]
        model_id = model_name.split("/")[1]
        if len(author) == 0 or len(model_id) == 0:
            return False, "is not a valid model name. Please use the format `author/model_name`."
    except Exception as e:
        return False, "is not a valid model name. Please use the format `author/model_name`."

    try:
        models = list(hf_api.list_models(author=author, search=model_id))
        matched = [m.modelId for m in models if m.modelId == model_name]
        if len(matched) != 1:
            return False, "was not found on the hub!"
        else:
            return True, None
    except Exception as e:
        print(f"Could not get the model from the hub.: {e}")
        return False, "was not found on hub!"