Spaces:
Runtime error
Runtime error
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() | |