Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -393,31 +393,40 @@ def get_all_models(limit=1000):
|
|
393 |
return all_models[:limit]
|
394 |
|
395 |
def get_models_data(progress=gr.Progress()):
|
396 |
-
"""๋ชจ๋ธ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ"""
|
397 |
try:
|
398 |
progress(0, desc="Fetching models...")
|
399 |
|
400 |
-
# ๋ชจ๋ธ ๊ฐ์ ธ์ค๊ธฐ
|
401 |
all_global_models = get_all_models(limit=1000)
|
402 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
403 |
|
404 |
# API ์๋ต ์์๋ฅผ ์์๋ก ์ฌ์ฉํ์ฌ ์์ ๋งต ์์ฑ
|
405 |
rank_map = {}
|
406 |
-
for rank, model in enumerate(
|
407 |
model_id = model.get('id', '').strip()
|
408 |
rank_map[model_id] = {
|
409 |
'rank': rank,
|
410 |
'likes': model.get('likes', 0),
|
411 |
'downloads': model.get('downloads', 0),
|
412 |
-
'title': model.get('title', 'No Title')
|
|
|
413 |
}
|
414 |
-
print(f"Rank {rank}: {model_id}")
|
415 |
|
416 |
# target_models์ ์์ ํ์ธ ๋ฐ ์ ๋ณด ์์ง
|
417 |
filtered_models = []
|
418 |
for model_id in target_models.keys():
|
419 |
try:
|
420 |
-
# ๊ฐ๋ณ ๋ชจ๋ธ API ํธ์ถ
|
421 |
normalized_id = model_id.strip('/')
|
422 |
model_url_api = f"https://huggingface.co/api/models/{normalized_id}"
|
423 |
response = requests.get(
|
@@ -428,8 +437,6 @@ def get_models_data(progress=gr.Progress()):
|
|
428 |
if response.status_code == 200:
|
429 |
model_data = response.json()
|
430 |
api_id = model_data.get('id', '').strip()
|
431 |
-
|
432 |
-
# API ์๋ต ์์์์ ์์ ์ฐพ๊ธฐ
|
433 |
rank_info = rank_map.get(api_id)
|
434 |
|
435 |
model_info = {
|
@@ -437,17 +444,23 @@ def get_models_data(progress=gr.Progress()):
|
|
437 |
'global_rank': rank_info['rank'] if rank_info else 'Not in top 1000',
|
438 |
'downloads': model_data.get('downloads', 0),
|
439 |
'likes': model_data.get('likes', 0),
|
440 |
-
'title': model_data.get('title', 'No Title')
|
|
|
441 |
}
|
442 |
filtered_models.append(model_info)
|
443 |
-
|
|
|
|
|
|
|
|
|
444 |
else:
|
445 |
filtered_models.append({
|
446 |
'id': model_id,
|
447 |
'global_rank': 'Not in top 1000',
|
448 |
'downloads': 0,
|
449 |
'likes': 0,
|
450 |
-
'title': 'No Title'
|
|
|
451 |
})
|
452 |
except Exception as e:
|
453 |
print(f"Error processing {model_id}: {str(e)}")
|
@@ -456,63 +469,11 @@ def get_models_data(progress=gr.Progress()):
|
|
456 |
'global_rank': 'Not in top 1000',
|
457 |
'downloads': 0,
|
458 |
'likes': 0,
|
459 |
-
'title': 'No Title'
|
|
|
460 |
})
|
461 |
-
|
462 |
-
#
|
463 |
-
filtered_models.sort(key=lambda x: float('inf') if isinstance(x['global_rank'], str) else x['global_rank'])
|
464 |
-
|
465 |
-
progress(0.3, desc="Creating visualization...")
|
466 |
-
|
467 |
-
# ์๊ฐํ ์์ฑ
|
468 |
-
fig = go.Figure()
|
469 |
-
|
470 |
-
# ์์๊ถ ๋ด ๋ชจ๋ธ๋ง ํํฐ๋งํ์ฌ ์๊ฐํ
|
471 |
-
valid_models = [m for m in filtered_models if isinstance(m['global_rank'], (int, float))]
|
472 |
-
|
473 |
-
if valid_models:
|
474 |
-
ids = [m['id'] for m in valid_models]
|
475 |
-
ranks = [m['global_rank'] for m in valid_models]
|
476 |
-
likes = [m['likes'] for m in valid_models]
|
477 |
-
downloads = [m['downloads'] for m in valid_models]
|
478 |
-
|
479 |
-
# Y์ถ ๊ฐ์ ๋ฐ์ (๋์ ์์๊ฐ ์๋ก ๊ฐ๋๋ก)
|
480 |
-
y_values = [1001 - r for r in ranks]
|
481 |
-
|
482 |
-
fig.add_trace(go.Bar(
|
483 |
-
x=ids,
|
484 |
-
y=y_values,
|
485 |
-
text=[f"Global Rank: #{r}<br>Downloads: {format(d, ',')}<br>Likes: {format(l, ',')}"
|
486 |
-
for r, d, l in zip(ranks, downloads, likes)],
|
487 |
-
textposition='auto',
|
488 |
-
marker_color='rgb(158,202,225)',
|
489 |
-
opacity=0.8
|
490 |
-
))
|
491 |
-
|
492 |
-
fig.update_layout(
|
493 |
-
title={
|
494 |
-
'text': 'Hugging Face Models Global Rankings',
|
495 |
-
'y':0.95,
|
496 |
-
'x':0.5,
|
497 |
-
'xanchor': 'center',
|
498 |
-
'yanchor': 'top'
|
499 |
-
},
|
500 |
-
xaxis_title='Model ID',
|
501 |
-
yaxis_title='Global Rank',
|
502 |
-
yaxis=dict(
|
503 |
-
ticktext=[f"#{i}" for i in range(1, 1001, 50)],
|
504 |
-
tickvals=[1001 - i for i in range(1, 1001, 50)],
|
505 |
-
range=[0, 1000]
|
506 |
-
),
|
507 |
-
height=800,
|
508 |
-
showlegend=False,
|
509 |
-
template='plotly_white',
|
510 |
-
xaxis_tickangle=-45
|
511 |
-
)
|
512 |
-
|
513 |
-
progress(0.6, desc="Creating model cards...")
|
514 |
-
|
515 |
-
# HTML ์นด๋ ์์ฑ
|
516 |
html_content = """
|
517 |
<div style='padding: 20px; background: #f5f5f5;'>
|
518 |
<h2 style='color: #2c3e50;'>Models Global Rankings</h2>
|
@@ -521,6 +482,7 @@ def get_models_data(progress=gr.Progress()):
|
|
521 |
|
522 |
for model in filtered_models:
|
523 |
rank_display = f"Global Rank #{model['global_rank']}" if isinstance(model['global_rank'], (int, float)) else "Not in top 1000"
|
|
|
524 |
|
525 |
html_content += f"""
|
526 |
<div style='
|
@@ -532,6 +494,7 @@ def get_models_data(progress=gr.Progress()):
|
|
532 |
'>
|
533 |
<h3 style='color: #34495e;'>{rank_display}</h3>
|
534 |
<h4 style='color: #2c3e50;'>{model['id']}</h4>
|
|
|
535 |
<p style='color: #7f8c8d;'>โฌ๏ธ Downloads: {format(model['downloads'], ',')}</p>
|
536 |
<p style='color: #7f8c8d;'>๐ Likes: {format(model['likes'], ',')}</p>
|
537 |
<a href='{target_models[model['id']]}'
|
@@ -552,13 +515,14 @@ def get_models_data(progress=gr.Progress()):
|
|
552 |
|
553 |
html_content += "</div></div>"
|
554 |
|
555 |
-
#
|
556 |
df = pd.DataFrame([{
|
557 |
'Global Rank': f"#{m['global_rank']}" if isinstance(m['global_rank'], (int, float)) else m['global_rank'],
|
558 |
'Model ID': m['id'],
|
559 |
'Title': m['title'],
|
560 |
'Downloads': format(m['downloads'], ','),
|
561 |
'Likes': format(m['likes'], ','),
|
|
|
562 |
'URL': target_models[m['id']]
|
563 |
} for m in filtered_models])
|
564 |
|
|
|
393 |
return all_models[:limit]
|
394 |
|
395 |
def get_models_data(progress=gr.Progress()):
|
|
|
396 |
try:
|
397 |
progress(0, desc="Fetching models...")
|
398 |
|
399 |
+
# ์ผ๋ฐ ๋ชจ๋ธ๊ณผ Korea ๊ด๋ จ ๋ชจ๋ธ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ
|
400 |
all_global_models = get_all_models(limit=1000)
|
401 |
+
korea_models = get_korea_models() # Korea ๊ฒ์ ๊ฒฐ๊ณผ ์ถ๊ฐ
|
402 |
+
|
403 |
+
# ๋ชจ๋ ๋ชจ๋ธ ํตํฉ (์ค๋ณต ์ ๊ฑฐ)
|
404 |
+
all_models = all_global_models.copy()
|
405 |
+
existing_ids = {model.get('id', '') for model in all_global_models}
|
406 |
+
|
407 |
+
for korea_model in korea_models:
|
408 |
+
if korea_model.get('id', '') not in existing_ids:
|
409 |
+
all_models.append(korea_model)
|
410 |
+
existing_ids.add(korea_model.get('id', ''))
|
411 |
+
|
412 |
+
print(f"Total models (including Korea search): {len(all_models)}")
|
413 |
|
414 |
# API ์๋ต ์์๋ฅผ ์์๋ก ์ฌ์ฉํ์ฌ ์์ ๋งต ์์ฑ
|
415 |
rank_map = {}
|
416 |
+
for rank, model in enumerate(all_models, 1):
|
417 |
model_id = model.get('id', '').strip()
|
418 |
rank_map[model_id] = {
|
419 |
'rank': rank,
|
420 |
'likes': model.get('likes', 0),
|
421 |
'downloads': model.get('downloads', 0),
|
422 |
+
'title': model.get('title', 'No Title'),
|
423 |
+
'is_korea': model in korea_models # Korea ๊ฒ์ ๊ฒฐ๊ณผ ์ฌ๋ถ ํ์
|
424 |
}
|
|
|
425 |
|
426 |
# target_models์ ์์ ํ์ธ ๋ฐ ์ ๋ณด ์์ง
|
427 |
filtered_models = []
|
428 |
for model_id in target_models.keys():
|
429 |
try:
|
|
|
430 |
normalized_id = model_id.strip('/')
|
431 |
model_url_api = f"https://huggingface.co/api/models/{normalized_id}"
|
432 |
response = requests.get(
|
|
|
437 |
if response.status_code == 200:
|
438 |
model_data = response.json()
|
439 |
api_id = model_data.get('id', '').strip()
|
|
|
|
|
440 |
rank_info = rank_map.get(api_id)
|
441 |
|
442 |
model_info = {
|
|
|
444 |
'global_rank': rank_info['rank'] if rank_info else 'Not in top 1000',
|
445 |
'downloads': model_data.get('downloads', 0),
|
446 |
'likes': model_data.get('likes', 0),
|
447 |
+
'title': model_data.get('title', 'No Title'),
|
448 |
+
'is_korea': rank_info.get('is_korea', False) if rank_info else False
|
449 |
}
|
450 |
filtered_models.append(model_info)
|
451 |
+
|
452 |
+
# Korea ๊ฒ์ ๊ฒฐ๊ณผ์ธ ๊ฒฝ์ฐ ํ์
|
453 |
+
korea_status = "๐ฐ๐ท" if model_info['is_korea'] else ""
|
454 |
+
print(f"Model {model_id}: Rank={model_info['global_rank']}, Downloads={model_info['downloads']}, Likes={model_info['likes']} {korea_status}")
|
455 |
+
|
456 |
else:
|
457 |
filtered_models.append({
|
458 |
'id': model_id,
|
459 |
'global_rank': 'Not in top 1000',
|
460 |
'downloads': 0,
|
461 |
'likes': 0,
|
462 |
+
'title': 'No Title',
|
463 |
+
'is_korea': False
|
464 |
})
|
465 |
except Exception as e:
|
466 |
print(f"Error processing {model_id}: {str(e)}")
|
|
|
469 |
'global_rank': 'Not in top 1000',
|
470 |
'downloads': 0,
|
471 |
'likes': 0,
|
472 |
+
'title': 'No Title',
|
473 |
+
'is_korea': False
|
474 |
})
|
475 |
+
|
476 |
+
# HTML ์นด๋์ Korea ๊ฒ์ ๊ฒฐ๊ณผ ํ์ ์ถ๊ฐ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
477 |
html_content = """
|
478 |
<div style='padding: 20px; background: #f5f5f5;'>
|
479 |
<h2 style='color: #2c3e50;'>Models Global Rankings</h2>
|
|
|
482 |
|
483 |
for model in filtered_models:
|
484 |
rank_display = f"Global Rank #{model['global_rank']}" if isinstance(model['global_rank'], (int, float)) else "Not in top 1000"
|
485 |
+
korea_badge = "๐ฐ๐ท Korea Search Result" if model['is_korea'] else ""
|
486 |
|
487 |
html_content += f"""
|
488 |
<div style='
|
|
|
494 |
'>
|
495 |
<h3 style='color: #34495e;'>{rank_display}</h3>
|
496 |
<h4 style='color: #2c3e50;'>{model['id']}</h4>
|
497 |
+
<p style='color: #e74c3c;'>{korea_badge}</p>
|
498 |
<p style='color: #7f8c8d;'>โฌ๏ธ Downloads: {format(model['downloads'], ',')}</p>
|
499 |
<p style='color: #7f8c8d;'>๐ Likes: {format(model['likes'], ',')}</p>
|
500 |
<a href='{target_models[model['id']]}'
|
|
|
515 |
|
516 |
html_content += "</div></div>"
|
517 |
|
518 |
+
# ๋ฐ์ดํฐํ๋ ์์ Korea ๊ฒ์ ๊ฒฐ๊ณผ ์ปฌ๋ผ ์ถ๊ฐ
|
519 |
df = pd.DataFrame([{
|
520 |
'Global Rank': f"#{m['global_rank']}" if isinstance(m['global_rank'], (int, float)) else m['global_rank'],
|
521 |
'Model ID': m['id'],
|
522 |
'Title': m['title'],
|
523 |
'Downloads': format(m['downloads'], ','),
|
524 |
'Likes': format(m['likes'], ','),
|
525 |
+
'Korea Search': '๐ฐ๐ท' if m['is_korea'] else '',
|
526 |
'URL': target_models[m['id']]
|
527 |
} for m in filtered_models])
|
528 |
|