Deddy commited on
Commit
c0a1716
Β·
verified Β·
1 Parent(s): 57be5f7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +147 -122
app.py CHANGED
@@ -1,145 +1,170 @@
1
  import gradio as gr
2
- import sqlite3
3
  import pandas as pd
4
- from themes import IndonesiaTheme # Tema custom
5
-
6
- DB_PATH = "spaces.db"
7
 
8
  def load_data(status_filter="All", keyword=""):
9
- # conn = sqlite3.connect(DB_PATH)
10
- # query = "SELECT name, author, desc, likes, updated, status, link FROM spaces"
11
- # df = pd.read_sql_query(query, conn)
12
- # df = pd.read_csv("https://huggingface.co/datasets/username/leaderboard-dataset/raw/main/leaderboard.csv")
13
- # conn.close()
14
-
15
  df = pd.read_csv("https://huggingface.co/datasets/Deddy/leaderboard-dataset/raw/main/leaderboard.csv")
16
 
17
  if status_filter != "All":
18
  df = df[df['status'].str.contains(status_filter, case=False, na=False)]
19
-
20
  if keyword.strip():
21
  df = df[df['name'].str.contains(keyword, case=False, na=False)]
22
 
23
- df = df.sort_values("likes", ascending=False).head(20)
24
 
25
  # Kolom Visit tetap
26
  df["πŸ”— Visit"] = df["link"].apply(lambda url: f"<a href='{url}' target='_blank'>🌐 Visit</a>")
27
 
28
- # Kolom Name: bold
29
- df["name"] = df["name"].apply(lambda name: f"<b>{name}</b>")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  # Kolom Status: warna dinamis
32
  def format_status(s):
33
- if "running" in s.lower():
34
- return f"<span style='color:green;font-weight:bold'>{s}</span>"
35
  else:
36
  return f"<span style='color:red;font-weight:bold'>{s}</span>"
37
 
38
- df["status"] = df["status"].apply(format_status)
39
-
40
- # Susun ulang kolom
41
- df = df[["name", "author", "desc", "likes", "updated", "status", "πŸ”— Visit"]]
42
- df.columns = ["πŸ“› Name", "πŸ‘€ Author", "πŸ“ Description", "❀️ Likes", "πŸ•’ Updated", "βš™οΈ Status", "πŸ”— Visit"]
43
-
44
-
45
- return df.reset_index(drop=True)
46
-
47
- def view_leaderboard(status, keyword):
48
- return load_data(status, keyword)
49
-
50
- css = """
51
- table {
52
- width: 100%;
53
- border-collapse: collapse;
54
- margin-top: 1rem;
55
- font-size: 0.92rem;
56
- }
57
-
58
- th {
59
- background: #f0f0f0;
60
- padding: 8px;
61
- text-align: left;
62
- font-weight: bold;
63
- border-bottom: 2px solid #ccc;
64
- }
65
-
66
- td {
67
- padding: 8px;
68
- border-bottom: 1px solid #eee;
69
- vertical-align: top;
70
- }
71
-
72
- tr:hover {
73
- background-color: #f9f9f9;
74
- }
75
-
76
- td a {
77
- text-decoration: none;
78
- color: #1e90ff;
79
- font-weight: bold;
80
- }
81
- """
82
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
 
84
- # === Gradio App UI ===
85
  with gr.Blocks(theme=IndonesiaTheme()) as demo:
86
- with gr.Column():
87
- gr.Markdown("## 🌌 HuggingFace Spaces Leaderboard")
88
- gr.Markdown("🎯 Menampilkan 20 space dengan jumlah like terbanyak + link kunjungan langsung")
89
-
90
- with gr.Row():
91
- with gr.Column(elem_id="col-left"):
92
- status_choice = gr.Dropdown(["All", "Running", "Zero", "Stopped"],
93
- label="πŸŽ›οΈ Filter Status", value="All")
94
- with gr.Column(elem_id="col-mid"):
95
- keyword_input = gr.Textbox(label="πŸ” Search by Name",
96
- placeholder="e.g. llama, tts, image")
97
-
98
- with gr.Column(elem_id="col-bott"):
99
- output_table = gr.HTML(label="Leaderboard Table")
100
-
101
- def render_html_table(status, keyword):
102
- df = load_data(status, keyword)
103
- html_table = df.to_html(escape=False, index=False, classes="styled-table")
104
- return f"""
105
- <style>
106
- .styled-table {{
107
- width: 100%;
108
- border-collapse: collapse;
109
- font-size: 0.9rem;
110
- font-family: 'Segoe UI', sans-serif;
111
- background-color: #1e1e1e;
112
- color: #e0e0e0;
113
- }}
114
- .styled-table th {{
115
- background-color: #2e2e2e;
116
- text-align: left;
117
- padding: 10px;
118
- border-bottom: 2px solid #444;
119
- }}
120
- .styled-table td {{
121
- padding: 10px;
122
- border-bottom: 1px solid #333;
123
- vertical-align: top;
124
- }}
125
- .styled-table tr:hover td {{
126
- background-color: #2a2a2a;
127
- }}
128
- a {{
129
- color: #4da6ff;
130
- text-decoration: none;
131
- font-weight: bold;
132
- }}
133
- </style>
134
- {html_table}
135
- """
136
-
137
-
138
- status_choice.change(fn=render_html_table, inputs=[status_choice, keyword_input], outputs=output_table)
139
- keyword_input.change(fn=render_html_table, inputs=[status_choice, keyword_input], outputs=output_table)
140
- gr.Button("πŸ”„ Refresh").click(fn=render_html_table,
141
- inputs=[status_choice, keyword_input], outputs=output_table)
142
-
143
- gr.Markdown("#### Made with ❀️ by Deddy | HuggingFace Leaderboard Mirror", elem_id="footer")
144
-
145
- demo.launch()
 
1
  import gradio as gr
 
2
  import pandas as pd
3
+ from themes import IndonesiaTheme
 
 
4
 
5
  def load_data(status_filter="All", keyword=""):
 
 
 
 
 
 
6
  df = pd.read_csv("https://huggingface.co/datasets/Deddy/leaderboard-dataset/raw/main/leaderboard.csv")
7
 
8
  if status_filter != "All":
9
  df = df[df['status'].str.contains(status_filter, case=False, na=False)]
 
10
  if keyword.strip():
11
  df = df[df['name'].str.contains(keyword, case=False, na=False)]
12
 
13
+ df = df.sort_values("likes", ascending=False).head(100).reset_index(drop=True)
14
 
15
  # Kolom Visit tetap
16
  df["πŸ”— Visit"] = df["link"].apply(lambda url: f"<a href='{url}' target='_blank'>🌐 Visit</a>")
17
 
18
+ # Kolom Name: bold, warna emas untuk top 10, emoji piala untuk top 3
19
+ def decorate_name(row):
20
+ i = row.name + 1 # row.name = index mulai dari 0
21
+ name = f"{row['name']}"
22
+ medal = ""
23
+ if i == 1:
24
+ medal = "πŸ‘‘ "
25
+ elif i == 2:
26
+ medal = "πŸ† "
27
+ elif i == 3:
28
+ medal = "πŸ… "
29
+ if i <= 10:
30
+ # Emas (#FFD700)
31
+ return f"<span style='color:#FFD700; font-weight:bold'>{medal}{name}</span>"
32
+ return f"<b>{name}</b>"
33
+
34
+ df["decorated_name"] = df.apply(decorate_name, axis=1)
35
 
36
  # Kolom Status: warna dinamis
37
  def format_status(s):
38
+ if isinstance(s, str) and "running" in s.lower():
39
+ return f"<span style='color:lime;font-weight:bold'>{s}</span>"
40
  else:
41
  return f"<span style='color:red;font-weight:bold'>{s}</span>"
42
 
43
+ df["status_fmt"] = df["status"].apply(format_status)
44
+
45
+ # Susun ulang kolom: No, Name, dst
46
+ df_final = pd.DataFrame()
47
+ df_final["No"] = range(1, len(df) + 1)
48
+ df_final["πŸ“› Name"] = df["decorated_name"]
49
+ df_final["πŸ‘€ Author"] = df["author"]
50
+ df_final["πŸ“ Description"] = df["desc"]
51
+ df_final["❀️ Likes"] = df["likes"]
52
+ df_final["πŸ•’ Updated"] = df["updated"]
53
+ df_final["βš™οΈ Status"] = df["status_fmt"]
54
+ df_final["πŸ”— Visit"] = df["πŸ”— Visit"]
55
+
56
+ return df_final
57
+
58
+ def render_html_table(status, keyword):
59
+ df = load_data(status, keyword)
60
+ html_table = df.to_html(escape=False, index=False, classes="styled-table")
61
+ return f"""
62
+ <style>
63
+ .styled-table {{
64
+ width: 100%;
65
+ border-collapse: collapse;
66
+ font-size: 1.02rem;
67
+ font-family: 'Segoe UI', sans-serif;
68
+ background-color: #191a22;
69
+ color: #e0e0e0;
70
+ border-radius: 16px;
71
+ overflow: hidden;
72
+ box-shadow: 0 4px 24px #00000030;
73
+ }}
74
+ .styled-table th {{
75
+ background: linear-gradient(90deg, #5f0a87 0%, #a4508b 100%);
76
+ text-align: left;
77
+ padding: 12px;
78
+ border-bottom: 3px solid #FFD70080;
79
+ font-size: 1.08rem;
80
+ letter-spacing: 1px;
81
+ color: #ffe29f;
82
+ }}
83
+ .styled-table td {{
84
+ padding: 12px 10px;
85
+ border-bottom: 1px solid #222;
86
+ vertical-align: top;
87
+ font-size: 0.97rem;
88
+ }}
89
+ .styled-table tr:nth-child(even) td {{
90
+ background-color: #1e2030;
91
+ }}
92
+ .styled-table tr:hover td {{
93
+ background-color: #343651;
94
+ transition: background 0.2s;
95
+ }}
96
+ .styled-table td a {{
97
+ color: #FFBF00;
98
+ text-decoration: none;
99
+ font-weight: bold;
100
+ transition: color 0.2s;
101
+ }}
102
+ .styled-table td a:hover {{
103
+ color: #fff700;
104
+ }}
105
+ .styled-table td:first-child {{
106
+ text-align: center;
107
+ font-weight: bold;
108
+ color: #FFD700;
109
+ background: linear-gradient(180deg, #24243e 0%, #191a22 100%);
110
+ border-right: 2px solid #FFD70022;
111
+ }}
112
+ </style>
113
+ {html_table}
114
+ """
115
+
116
+ css = "" # CSS sudah di-inject via render_html_table
117
 
 
118
  with gr.Blocks(theme=IndonesiaTheme()) as demo:
119
+ gr.Markdown("""
120
+ <div style='
121
+ background: linear-gradient(90deg, #5f0a87 0%, #a4508b 100%);
122
+ color: #fffde4;
123
+ padding: 36px 8px 22px 8px;
124
+ border-radius: 20px;
125
+ text-align:center;
126
+ font-size:2.0rem;
127
+ font-weight:bold;
128
+ letter-spacing: 1.5px;
129
+ margin-bottom: 16px;
130
+ box-shadow: 0 6px 48px #00000044;'>
131
+ πŸš€ <span style='color:#FFD700'>100 SPACES TERPOPULER HUGGING FACE! - HOURLY UPDATE!!πŸ”₯</span> πŸš€<br>
132
+ <span style='font-size:1.16rem; font-weight:500; letter-spacing:1px;'>Tersaring dari ribuan aplikasi, hanya yang terbaik, terfavorit, dan paling inovatif yang masuk leaderboard ini!<br>
133
+ Siapkah kamu menemukan Space AI idamanmu hari ini? <span style='color:#ffe29f'>✨</span></span>
134
+ </div>
135
+ """)
136
+ with gr.Row():
137
+ with gr.Column(elem_id="col-left"):
138
+ status_choice = gr.Dropdown(["All", "Running", "Zero", "Stopped"],
139
+ label="πŸŽ›οΈ Filter Status", value="All")
140
+ with gr.Column(elem_id="col-mid"):
141
+ keyword_input = gr.Textbox(label="πŸ” Search by Name",
142
+ placeholder="e.g. llama, tts, image")
143
+
144
+ with gr.Column(elem_id="col-bott"):
145
+ output_table = gr.HTML(label="Leaderboard Table")
146
+ gr.Markdown("""
147
+ <div style='
148
+ color:#693f00;
149
+ padding: 24px 6px 18px 6px;
150
+ border-radius: 18px;
151
+ font-size: 1.12rem;
152
+ text-align:center;
153
+ margin-top:18px;
154
+ box-shadow: 0 3px 24px #FFD70033;
155
+ font-weight:bold;
156
+ '>
157
+ πŸŽ‰ <b>Selamat untuk seluruh Space yang masuk 100 besar! Kalian membanggakan komunitas AI Dunia! πŸš€πŸ”₯</b><br>
158
+ <span style='font-size:1.55rem;'>Terus berkarya, jangan berhenti berinovasi! πŸ’ͺ🌟πŸ₯³</span>
159
+ </div>
160
+ """)
161
+ gr.Button("πŸ”„ Refresh").click(fn=render_html_table,
162
+ inputs=[status_choice, keyword_input], outputs=output_table)
163
+
164
+ gr.Markdown("#### Made with ❀️ by Deddy | HuggingFace Popular Space Leaderboard - Update Every Hour πŸ”₯", elem_id="footer")
165
+
166
+ # Inisialisasi tampilan awal
167
+ output_table.value = render_html_table("All", "")
168
+
169
+ # Jalankan aplikasi Gradio (local/web)
170
+ demo.queue(api_open=False).launch(show_api=False)