Mehrdad-S's picture
Update app.py
33c67bc verified
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()