Update app.py
Browse files
app.py
CHANGED
@@ -53,6 +53,7 @@ def get_trending_accounts(limit=100):
|
|
53 |
timeout=30)
|
54 |
|
55 |
# Process spaces data
|
|
|
56 |
if spaces_response.status_code == 200:
|
57 |
spaces = spaces_response.json()
|
58 |
|
@@ -70,8 +71,10 @@ def get_trending_accounts(limit=100):
|
|
70 |
# Get top owners by count for spaces
|
71 |
top_owners_spaces = sorted(owner_counts_spaces.items(), key=lambda x: x[1], reverse=True)[:limit]
|
72 |
trending_data["spaces"] = top_owners_spaces
|
|
|
73 |
|
74 |
# Process models data
|
|
|
75 |
if models_response.status_code == 200:
|
76 |
models = models_response.json()
|
77 |
|
@@ -89,30 +92,22 @@ def get_trending_accounts(limit=100):
|
|
89 |
# Get top owners by count for models
|
90 |
top_owners_models = sorted(owner_counts_models.items(), key=lambda x: x[1], reverse=True)[:limit]
|
91 |
trending_data["models"] = top_owners_models
|
|
|
92 |
|
93 |
-
# Combine rankings for overall trending
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
if owner not in combined_scores:
|
105 |
-
combined_scores[owner] = {"spaces": 0, "models": 0, "total": 0}
|
106 |
-
combined_scores[owner]["models"] = count
|
107 |
-
|
108 |
-
# Calculate total score (spaces + models)
|
109 |
-
for owner in combined_scores:
|
110 |
-
combined_scores[owner]["total"] = combined_scores[owner]["spaces"] + combined_scores[owner]["models"]
|
111 |
-
|
112 |
-
# Sort by total score
|
113 |
-
sorted_combined = sorted(combined_scores.items(), key=lambda x: x[1]["total"], reverse=True)[:limit]
|
114 |
|
115 |
-
#
|
|
|
116 |
trending_authors = [owner for owner, _ in sorted_combined]
|
117 |
|
118 |
return trending_authors, trending_data["spaces"], trending_data["models"]
|
@@ -274,34 +269,62 @@ with st.sidebar:
|
|
274 |
st.title("👤 Contributor")
|
275 |
|
276 |
# Create tabs for Spaces and Models rankings
|
277 |
-
tab1, tab2 = st.tabs(["Spaces Ranking", "Models Ranking"])
|
278 |
|
279 |
with tab1:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
# Show trending accounts list by Spaces
|
281 |
-
st.subheader("🚀 Top
|
282 |
|
283 |
-
# Display the top
|
284 |
st.markdown("### Spaces Contributors Ranking")
|
285 |
|
286 |
# Create a data frame for the table
|
287 |
if top_owners_spaces:
|
288 |
-
ranking_data_spaces = pd.DataFrame(top_owners_spaces[:
|
289 |
ranking_data_spaces.index = ranking_data_spaces.index + 1 # Start index from 1 for ranking
|
290 |
|
291 |
-
# Add a score column based on spaces count
|
292 |
-
ranking_data_spaces["Score"] = ranking_data_spaces["Spaces Count"].apply(lambda x: x * 10) # Multiply by 10 for a score metric
|
293 |
-
|
294 |
st.dataframe(
|
295 |
ranking_data_spaces,
|
296 |
column_config={
|
297 |
"Contributor": st.column_config.TextColumn("Contributor"),
|
298 |
-
"Spaces Count": st.column_config.NumberColumn("Spaces Count (based on top 500 spaces)", format="%d")
|
299 |
-
"Score": st.column_config.ProgressColumn(
|
300 |
-
"Score (within TOP 500 SPACES)",
|
301 |
-
min_value=0,
|
302 |
-
max_value=ranking_data_spaces["Score"].max() * 1.1, # Add 10% to max for visual scale
|
303 |
-
format="%d pts"
|
304 |
-
)
|
305 |
},
|
306 |
use_container_width=True,
|
307 |
hide_index=False
|
@@ -327,30 +350,21 @@ with st.sidebar:
|
|
327 |
|
328 |
with tab2:
|
329 |
# Show trending accounts list by Models
|
330 |
-
st.subheader("🧠 Top
|
331 |
|
332 |
-
# Display the top
|
333 |
st.markdown("### Models Contributors Ranking")
|
334 |
|
335 |
# Create a data frame for the table
|
336 |
if top_owners_models:
|
337 |
-
ranking_data_models = pd.DataFrame(top_owners_models[:
|
338 |
ranking_data_models.index = ranking_data_models.index + 1 # Start index from 1 for ranking
|
339 |
|
340 |
-
# Add a score column based on models count
|
341 |
-
ranking_data_models["Score"] = ranking_data_models["Models Count"].apply(lambda x: x * 10) # Multiply by 10 for a score metric
|
342 |
-
|
343 |
st.dataframe(
|
344 |
ranking_data_models,
|
345 |
column_config={
|
346 |
"Contributor": st.column_config.TextColumn("Contributor"),
|
347 |
-
"Models Count": st.column_config.NumberColumn("Models Count (based on top 500 models)", format="%d")
|
348 |
-
"Score": st.column_config.ProgressColumn(
|
349 |
-
"Score (within TOP 500 MODELS)",
|
350 |
-
min_value=0,
|
351 |
-
max_value=ranking_data_models["Score"].max() * 1.1, # Add 10% to max for visual scale
|
352 |
-
format="%d pts"
|
353 |
-
)
|
354 |
},
|
355 |
use_container_width=True,
|
356 |
hide_index=False
|
@@ -378,7 +392,7 @@ with st.sidebar:
|
|
378 |
st.subheader("Select Contributor")
|
379 |
selected_trending = st.selectbox(
|
380 |
"Select trending account",
|
381 |
-
options=trending_accounts[:
|
382 |
index=0 if trending_accounts else None,
|
383 |
key="trending_selectbox"
|
384 |
)
|
@@ -411,21 +425,35 @@ st.title("🤗 Hugging Face Contributions")
|
|
411 |
if username:
|
412 |
with st.spinner(f"Fetching commit data for {username}..."):
|
413 |
# Display contributor rank if in top 30
|
414 |
-
if username in trending_accounts[:
|
415 |
rank = trending_accounts.index(username) + 1
|
416 |
st.success(f"🏆 {username} is ranked #{rank} in the top trending contributors!")
|
417 |
|
418 |
# Find user in spaces ranking
|
|
|
419 |
for i, (owner, count) in enumerate(top_owners_spaces):
|
420 |
if owner == username:
|
421 |
-
|
|
|
422 |
break
|
423 |
|
424 |
# Find user in models ranking
|
|
|
425 |
for i, (owner, count) in enumerate(top_owners_models):
|
426 |
if owner == username:
|
427 |
-
|
|
|
428 |
break
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
|
430 |
# Create a dictionary to store commits by type
|
431 |
commits_by_type = {}
|
|
|
53 |
timeout=30)
|
54 |
|
55 |
# Process spaces data
|
56 |
+
spaces_owners = []
|
57 |
if spaces_response.status_code == 200:
|
58 |
spaces = spaces_response.json()
|
59 |
|
|
|
71 |
# Get top owners by count for spaces
|
72 |
top_owners_spaces = sorted(owner_counts_spaces.items(), key=lambda x: x[1], reverse=True)[:limit]
|
73 |
trending_data["spaces"] = top_owners_spaces
|
74 |
+
spaces_owners = [owner for owner, _ in top_owners_spaces]
|
75 |
|
76 |
# Process models data
|
77 |
+
models_owners = []
|
78 |
if models_response.status_code == 200:
|
79 |
models = models_response.json()
|
80 |
|
|
|
92 |
# Get top owners by count for models
|
93 |
top_owners_models = sorted(owner_counts_models.items(), key=lambda x: x[1], reverse=True)[:limit]
|
94 |
trending_data["models"] = top_owners_models
|
95 |
+
models_owners = [owner for owner, _ in top_owners_models]
|
96 |
|
97 |
+
# Combine rankings for overall trending based on appearance in both lists
|
98 |
+
combined_score = {}
|
99 |
+
for i, owner in enumerate(spaces_owners):
|
100 |
+
if owner not in combined_score:
|
101 |
+
combined_score[owner] = 0
|
102 |
+
combined_score[owner] += (limit - i) # Higher rank gives more points
|
103 |
+
|
104 |
+
for i, owner in enumerate(models_owners):
|
105 |
+
if owner not in combined_score:
|
106 |
+
combined_score[owner] = 0
|
107 |
+
combined_score[owner] += (limit - i) # Higher rank gives more points
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
|
109 |
+
# Sort by combined score
|
110 |
+
sorted_combined = sorted(combined_score.items(), key=lambda x: x[1], reverse=True)[:limit]
|
111 |
trending_authors = [owner for owner, _ in sorted_combined]
|
112 |
|
113 |
return trending_authors, trending_data["spaces"], trending_data["models"]
|
|
|
269 |
st.title("👤 Contributor")
|
270 |
|
271 |
# Create tabs for Spaces and Models rankings
|
272 |
+
tab1, tab2, tab3 = st.tabs(["Overall Ranking", "Spaces Ranking", "Models Ranking"])
|
273 |
|
274 |
with tab1:
|
275 |
+
# Show combined trending accounts list
|
276 |
+
st.subheader("🔥 Top 100 Overall Contributors")
|
277 |
+
|
278 |
+
# Display the top 100 accounts list
|
279 |
+
st.markdown("### Combined Contributors Ranking")
|
280 |
+
|
281 |
+
# Create a data frame for the table
|
282 |
+
if trending_accounts:
|
283 |
+
# Create a mapping from username to Spaces and Models rankings
|
284 |
+
spaces_rank = {owner: idx+1 for idx, (owner, _) in enumerate(top_owners_spaces)}
|
285 |
+
models_rank = {owner: idx+1 for idx, (owner, _) in enumerate(top_owners_models)}
|
286 |
+
|
287 |
+
# Create the overall ranking dataframe
|
288 |
+
overall_data = []
|
289 |
+
for idx, username in enumerate(trending_accounts[:100]):
|
290 |
+
spaces_position = spaces_rank.get(username, "-")
|
291 |
+
models_position = models_rank.get(username, "-")
|
292 |
+
overall_data.append([username, spaces_position, models_position])
|
293 |
+
|
294 |
+
ranking_data_overall = pd.DataFrame(
|
295 |
+
overall_data,
|
296 |
+
columns=["Contributor", "Spaces Rank", "Models Rank"]
|
297 |
+
)
|
298 |
+
ranking_data_overall.index = ranking_data_overall.index + 1 # Start index from 1 for ranking
|
299 |
+
|
300 |
+
st.dataframe(
|
301 |
+
ranking_data_overall,
|
302 |
+
column_config={
|
303 |
+
"Contributor": st.column_config.TextColumn("Contributor"),
|
304 |
+
"Spaces Rank": st.column_config.TextColumn("Spaces Rank (top 100)"),
|
305 |
+
"Models Rank": st.column_config.TextColumn("Models Rank (top 100)")
|
306 |
+
},
|
307 |
+
use_container_width=True,
|
308 |
+
hide_index=False
|
309 |
+
)
|
310 |
+
|
311 |
+
with tab2:
|
312 |
# Show trending accounts list by Spaces
|
313 |
+
st.subheader("🚀 Top 100 by Spaces")
|
314 |
|
315 |
+
# Display the top 100 accounts list
|
316 |
st.markdown("### Spaces Contributors Ranking")
|
317 |
|
318 |
# Create a data frame for the table
|
319 |
if top_owners_spaces:
|
320 |
+
ranking_data_spaces = pd.DataFrame(top_owners_spaces[:100], columns=["Contributor", "Spaces Count"])
|
321 |
ranking_data_spaces.index = ranking_data_spaces.index + 1 # Start index from 1 for ranking
|
322 |
|
|
|
|
|
|
|
323 |
st.dataframe(
|
324 |
ranking_data_spaces,
|
325 |
column_config={
|
326 |
"Contributor": st.column_config.TextColumn("Contributor"),
|
327 |
+
"Spaces Count": st.column_config.NumberColumn("Spaces Count (based on top 500 spaces)", format="%d")
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
},
|
329 |
use_container_width=True,
|
330 |
hide_index=False
|
|
|
350 |
|
351 |
with tab2:
|
352 |
# Show trending accounts list by Models
|
353 |
+
st.subheader("🧠 Top 100 by Models")
|
354 |
|
355 |
+
# Display the top 100 accounts list
|
356 |
st.markdown("### Models Contributors Ranking")
|
357 |
|
358 |
# Create a data frame for the table
|
359 |
if top_owners_models:
|
360 |
+
ranking_data_models = pd.DataFrame(top_owners_models[:100], columns=["Contributor", "Models Count"])
|
361 |
ranking_data_models.index = ranking_data_models.index + 1 # Start index from 1 for ranking
|
362 |
|
|
|
|
|
|
|
363 |
st.dataframe(
|
364 |
ranking_data_models,
|
365 |
column_config={
|
366 |
"Contributor": st.column_config.TextColumn("Contributor"),
|
367 |
+
"Models Count": st.column_config.NumberColumn("Models Count (based on top 500 models)", format="%d")
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
},
|
369 |
use_container_width=True,
|
370 |
hide_index=False
|
|
|
392 |
st.subheader("Select Contributor")
|
393 |
selected_trending = st.selectbox(
|
394 |
"Select trending account",
|
395 |
+
options=trending_accounts[:100], # Limit to top 100
|
396 |
index=0 if trending_accounts else None,
|
397 |
key="trending_selectbox"
|
398 |
)
|
|
|
425 |
if username:
|
426 |
with st.spinner(f"Fetching commit data for {username}..."):
|
427 |
# Display contributor rank if in top 30
|
428 |
+
if username in trending_accounts[:100]:
|
429 |
rank = trending_accounts.index(username) + 1
|
430 |
st.success(f"🏆 {username} is ranked #{rank} in the top trending contributors!")
|
431 |
|
432 |
# Find user in spaces ranking
|
433 |
+
spaces_rank = None
|
434 |
for i, (owner, count) in enumerate(top_owners_spaces):
|
435 |
if owner == username:
|
436 |
+
spaces_rank = i+1
|
437 |
+
st.info(f"🚀 Spaces Ranking: #{spaces_rank} with {count} spaces")
|
438 |
break
|
439 |
|
440 |
# Find user in models ranking
|
441 |
+
models_rank = None
|
442 |
for i, (owner, count) in enumerate(top_owners_models):
|
443 |
if owner == username:
|
444 |
+
models_rank = i+1
|
445 |
+
st.info(f"🧠 Models Ranking: #{models_rank} with {count} models")
|
446 |
break
|
447 |
+
|
448 |
+
# Display combined ranking info
|
449 |
+
combined_info = []
|
450 |
+
if spaces_rank and spaces_rank <= 100:
|
451 |
+
combined_info.append(f"Spaces: #{spaces_rank}")
|
452 |
+
if models_rank and models_rank <= 100:
|
453 |
+
combined_info.append(f"Models: #{models_rank}")
|
454 |
+
|
455 |
+
if combined_info:
|
456 |
+
st.success(f"Combined Rankings (Top 100): {', '.join(combined_info)}")
|
457 |
|
458 |
# Create a dictionary to store commits by type
|
459 |
commits_by_type = {}
|