Mehrdad-S commited on
Commit
11c53f7
Β·
verified Β·
1 Parent(s): 7ce4531

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -34
app.py CHANGED
@@ -2,74 +2,75 @@ import gradio as gr
2
  import json
3
  from datetime import datetime
4
  from evaluate import evaluate_model
5
- from datasets import load_dataset, Dataset
6
- from huggingface_hub import HfApi, HfFolder, Repository
7
  import os
8
 
9
- # Config
10
- HF_REPO_ID = "Mehrdad-S/persian-leaderboard-data" # Replace with your dataset repo ID
11
- HF_TOKEN = os.getenv("HF_TOKEN")
12
  FILENAME = "leaderboard.json"
 
13
 
14
- # Load evaluation dataset
15
- eval_dataset = load_dataset("arshiaafshani/persian-natural-fluently", split="train[:10]")
16
-
17
  def load_leaderboard():
18
- dataset = load_dataset(HF_REPO_ID, split="train")
19
- leaderboard = [row for row in dataset]
20
- return leaderboard
21
-
22
- def save_leaderboard(leaderboard):
23
- dataset = Dataset.from_list(leaderboard)
24
- dataset.save_to_disk("local_dataset")
25
- repo = Repository(local_dir="local_dataset", clone_from=HF_REPO_ID, use_auth_token=HF_TOKEN)
 
 
 
 
 
 
 
26
  repo.push_to_hub(commit_message="Update leaderboard")
27
 
 
28
  def submit_model(model_name):
29
  leaderboard = load_leaderboard()
30
 
31
- score = round(evaluate_model(model_name, eval_dataset) * 100, 2)
32
  date = datetime.now().strftime("%Y-%m-%d")
33
 
34
- # Update if model exists, else add new
35
- updated = False
36
  for item in leaderboard:
37
  if item["model"] == model_name:
38
  item["score"] = score
39
  item["date"] = date
40
- updated = True
41
  break
42
- if not updated:
43
  leaderboard.append({"model": model_name, "score": score, "date": date})
44
 
45
- # Sort by score
46
  leaderboard.sort(key=lambda x: x["score"], reverse=True)
47
-
48
- # Save back
49
  save_leaderboard(leaderboard)
50
-
51
  return update_table(leaderboard)
52
 
53
- def update_table(leaderboard=None):
54
- if leaderboard is None:
55
- leaderboard = load_leaderboard()
 
56
 
57
- headers = ["πŸ… Rank", "πŸ“Œ Model Name", "🎯 Score", "πŸ“† Date"]
58
- rows = [[i + 1, row["model"], f"{row['score']}%", row["date"]] for i, row in enumerate(leaderboard)]
59
  return headers, rows
60
 
61
- # UI
62
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
63
  gr.Markdown("""
64
  # πŸ† Persian Embedding Leaderboard
65
- Submit your model to evaluate on the [arshiaafshani/persian-natural-fluently](https://huggingface.co/datasets/arshiaafshani/persian-natural-fluently) dataset.
66
  """)
67
 
68
  with gr.Row():
69
- model_input = gr.Textbox(label="Enter HuggingFace Model Name", placeholder="e.g. HooshvareLab/bert-fa-base-uncased")
70
  submit_btn = gr.Button("Evaluate & Submit")
71
 
72
- table = gr.Dataframe(headers=["πŸ… Rank", "πŸ“Œ Model Name", "🎯 Score", "πŸ“† Date"],
73
  value=update_table()[1],
74
  interactive=False)
75
 
 
2
  import json
3
  from datetime import datetime
4
  from evaluate import evaluate_model
5
+ from huggingface_hub import Repository, HfApi, hf_hub_download
 
6
  import os
7
 
8
+ # --- Configuration ---
9
+ HF_REPO_ID = "Mehrdad-S/persian-leaderboard-data" # Replace with your repo
10
+ HF_TOKEN = os.getenv("HF_TOKEN") or "your_hf_write_token_here"
11
  FILENAME = "leaderboard.json"
12
+ CLONE_DIR = "leaderboard_repo"
13
 
14
+ # --- Load leaderboard.json from the repo ---
 
 
15
  def load_leaderboard():
16
+ path = hf_hub_download(repo_id=HF_REPO_ID, filename=FILENAME, repo_type="dataset")
17
+ with open(path, "r", encoding="utf-8") as f:
18
+ return json.load(f)
19
+
20
+ # --- Save leaderboard.json and push to HF Hub ---
21
+ def save_leaderboard(data):
22
+ if not os.path.exists(CLONE_DIR):
23
+ repo = Repository(local_dir=CLONE_DIR, clone_from=HF_REPO_ID, repo_type="dataset", use_auth_token=HF_TOKEN)
24
+ else:
25
+ repo = Repository(local_dir=CLONE_DIR, use_auth_token=HF_TOKEN)
26
+
27
+ leaderboard_path = os.path.join(CLONE_DIR, FILENAME)
28
+ with open(leaderboard_path, "w", encoding="utf-8") as f:
29
+ json.dump(data, f, ensure_ascii=False, indent=2)
30
+
31
  repo.push_to_hub(commit_message="Update leaderboard")
32
 
33
+ # --- Submit model and update leaderboard ---
34
  def submit_model(model_name):
35
  leaderboard = load_leaderboard()
36
 
37
+ score = round(evaluate_model(model_name), 2)
38
  date = datetime.now().strftime("%Y-%m-%d")
39
 
40
+ # Update existing or add new
 
41
  for item in leaderboard:
42
  if item["model"] == model_name:
43
  item["score"] = score
44
  item["date"] = date
 
45
  break
46
+ else:
47
  leaderboard.append({"model": model_name, "score": score, "date": date})
48
 
 
49
  leaderboard.sort(key=lambda x: x["score"], reverse=True)
 
 
50
  save_leaderboard(leaderboard)
 
51
  return update_table(leaderboard)
52
 
53
+ # --- Build table view ---
54
+ def update_table(data=None):
55
+ if data is None:
56
+ data = load_leaderboard()
57
 
58
+ headers = ["πŸ… Rank", "πŸ“Œ Model", "🎯 Score", "πŸ“† Date"]
59
+ rows = [[i + 1, row["model"], f"{row['score']}%", row["date"]] for i, row in enumerate(data)]
60
  return headers, rows
61
 
62
+ # --- UI ---
63
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
64
  gr.Markdown("""
65
  # πŸ† Persian Embedding Leaderboard
66
+ Submit your HuggingFace model to evaluate and rank on the leaderboard.
67
  """)
68
 
69
  with gr.Row():
70
+ model_input = gr.Textbox(label="Model Name", placeholder="e.g. HooshvareLab/bert-fa-base-uncased")
71
  submit_btn = gr.Button("Evaluate & Submit")
72
 
73
+ table = gr.Dataframe(headers=["πŸ… Rank", "πŸ“Œ Model", "🎯 Score", "πŸ“† Date"],
74
  value=update_table()[1],
75
  interactive=False)
76