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 |
|