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