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()
|