|
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]") |
|
|
|
HF_REPO_ID = "Mehrdad-S/persian-leaderboard-data" |
|
HF_TOKEN = os.getenv("HF_TOKEN") or "your_hf_write_token_here" |
|
FILENAME = "leaderboard.json" |
|
CLONE_DIR = "leaderboard_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) |
|
|
|
|
|
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) |
|
|
|
|
|
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") |
|
|
|
|
|
|
|
def submit_model(model_name): |
|
leaderboard = load_leaderboard() |
|
|
|
score = round(evaluate_model(model_name,dataset), 2) |
|
date = datetime.now().strftime("%Y-%m-%d") |
|
|
|
|
|
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) |
|
|
|
|
|
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 |
|
|
|
|
|
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() |
|
|