File size: 2,697 Bytes
f0e4d3b
 
 
 
 
 
 
 
 
 
 
 
eed6619
f0e4d3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eed6619
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f0e4d3b
 
 
 
 
 
 
 
 
 
 
eed6619
 
f0e4d3b
9aef39d
f0e4d3b
60e697c
 
 
f0e4d3b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import os

import gradio as gr
import pandas as pd

from indiebot_arena.service.arena_service import ArenaService

DESCRIPTION = "### 🏆️ リーダーボード"

base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
docs_path = os.path.join(base_dir, "docs", "leaderboard_header.md")


def leaderboard_content(dao, language):
  arena_service = ArenaService(dao)

  def fetch_leaderboard_data(weight_class):
    entries = arena_service.get_leaderboard(language, weight_class)
    data = []
    for entry in entries:
      model_obj = arena_service.dao.get_model(entry.model_id)
      model_name = model_obj.model_name if model_obj else "Unknown"
      file_size = model_obj.file_size_gb if model_obj else "N/A"
      desc = model_obj.description if model_obj else ""
      last_updated = entry.last_updated.strftime("%Y-%m-%d %H:%M:%S")
      data.append([model_name, entry.elo_score, file_size, desc, last_updated])
    if not data:
      data = [["No data available", "", "", "", ""]]
    df = pd.DataFrame(data, columns=["Model Name", "Elo Score", "File Size (GB)", "Description", "Last Updated"])
    df.insert(0, "Rank", range(1, len(df) + 1))

    def add_link(row):
      raw_name = row["Model Name"]
      if raw_name!="Unknown":
        return f'<a href="https://huggingface.co/{raw_name}" target="_blank">{raw_name}</a>'
      else:
        return raw_name

    df["Model Name"] = df.apply(add_link, axis=1)

    def add_emoji(row):
      rank = row["Rank"]
      linked_name = row["Model Name"]
      emoji = {1: "🥇", 2: "🥈", 3: "🥉"}.get(rank, "")
      if emoji:
        return f'{emoji} {linked_name}'
      else:
        return linked_name

    df["Model Name"] = df.apply(add_emoji, axis=1)
    return df

  initial_weight_class = "U-5GB"
  with gr.Blocks(css="style.css") as leaderboard_ui:
    with open(docs_path, "r", encoding="utf-8") as f:
      markdown_content = f.read()
    gr.Markdown(markdown_content)
    gr.Markdown(DESCRIPTION)
    weight_class_radio = gr.Radio(choices=["U-5GB", "U-10GB"], label="階級", value=initial_weight_class)
    leaderboard_table = gr.Dataframe(
      headers=["Rank", "Model Name", "Elo Score", "File Size (GB)", "Description", "Last Updated"],
      interactive=False,
      datatype="markdown"
    )
    refresh_btn = gr.Button("更新", variant="primary")
    refresh_btn.click(fn=fetch_leaderboard_data, inputs=weight_class_radio, outputs=leaderboard_table)
    weight_class_radio.change(fn=fetch_leaderboard_data, inputs=weight_class_radio, outputs=leaderboard_table)

  leaderboard_ui.load(fn=fetch_leaderboard_data, inputs=weight_class_radio, outputs=leaderboard_table)
  return leaderboard_ui