File size: 3,106 Bytes
8e5ef5f
be77ede
 
b33944b
11c53f7
b33944b
85a9281
be77ede
85a9281
11c53f7
 
 
b33944b
11c53f7
be77ede
11c53f7
e9bed63
11c53f7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33c67bc
 
 
 
b33944b
8e5ef5f
33c67bc
11c53f7
8e5ef5f
e9bed63
b33944b
85a9281
910d821
 
11c53f7
b33944b
 
 
 
910d821
11c53f7
b33944b
910d821
be77ede
e9bed63
b33944b
be77ede
11c53f7
 
 
 
b33944b
11c53f7
 
b33944b
be77ede
11c53f7
be77ede
 
b33944b
11c53f7
be77ede
 
 
11c53f7
be77ede
 
11c53f7
b33944b
 
be77ede
 
 
 
 
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
import gradio as gr
import json
from datetime import datetime
from evaluate import evaluate_model
from huggingface_hub import Repository, HfApi, hf_hub_download
import os
from datasets import load_dataset, Dataset

dataset = load_dataset("arshiaafshani/persian-natural-fluently", split="train[:10]")
# --- Configuration ---
HF_REPO_ID = "Mehrdad-S/persian-leaderboard-data"  # Replace with your repo
HF_TOKEN = os.getenv("HF_TOKEN") or "your_hf_write_token_here"
FILENAME = "leaderboard.json"
CLONE_DIR = "leaderboard_repo"

# --- Load leaderboard.json from the repo ---
def load_leaderboard():
    path = hf_hub_download(repo_id=HF_REPO_ID, filename=FILENAME, repo_type="dataset")
    with open(path, "r", encoding="utf-8") as f:
        return json.load(f)

# --- Save leaderboard.json and push to HF Hub ---
def save_leaderboard(data):
    if not os.path.exists(CLONE_DIR):
        repo = Repository(local_dir=CLONE_DIR, clone_from=HF_REPO_ID, repo_type="dataset", use_auth_token=HF_TOKEN)
    else:
        repo = Repository(local_dir=CLONE_DIR, use_auth_token=HF_TOKEN)

    leaderboard_path = os.path.join(CLONE_DIR, FILENAME)
    with open(leaderboard_path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

    # πŸ‘‡ Set Git config
    os.system('git config --global user.email "mehrdadsoleimany48@gmail.com"')
    os.system('git config --global user.name "Mehrdad-S"')

    repo.push_to_hub(commit_message="Update leaderboard")


# --- Submit model and update leaderboard ---
def submit_model(model_name):
    leaderboard = load_leaderboard()

    score = round(evaluate_model(model_name,dataset), 2)
    date = datetime.now().strftime("%Y-%m-%d")

    # Update existing or add new
    for item in leaderboard:
        if item["model"] == model_name:
            item["score"] = score
            item["date"] = date
            break
    else:
        leaderboard.append({"model": model_name, "score": score, "date": date})

    leaderboard.sort(key=lambda x: x["score"], reverse=True)
    save_leaderboard(leaderboard)
    return update_table(leaderboard)

# --- Build table view ---
def update_table(data=None):
    if data is None:
        data = load_leaderboard()

    headers = ["πŸ… Rank", "πŸ“Œ Model", "🎯 Score", "πŸ“† Date"]
    rows = [[i + 1, row["model"], f"{row['score']}%", row["date"]] for i, row in enumerate(data)]
    return headers, rows

# --- UI ---
with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
    gr.Markdown("""
    # πŸ† Persian Embedding Leaderboard
    Submit your HuggingFace model to evaluate and rank on the leaderboard.
    """)

    with gr.Row():
        model_input = gr.Textbox(label="Model Name", placeholder="e.g. HooshvareLab/bert-fa-base-uncased")
        submit_btn = gr.Button("Evaluate & Submit")

    table = gr.Dataframe(headers=["πŸ… Rank", "πŸ“Œ Model", "🎯 Score", "πŸ“† Date"],
                         value=update_table()[1],
                         interactive=False)

    submit_btn.click(fn=submit_model, inputs=model_input, outputs=table)

if __name__ == "__main__":
    demo.launch()