Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -396,9 +396,20 @@ 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()
|
402 |
|
403 |
# ๋ชจ๋ ๋ชจ๋ธ ํตํฉ (์ค๋ณต ์ ๊ฑฐ)
|
404 |
all_models = all_global_models.copy()
|
@@ -409,21 +420,10 @@ def get_models_data(progress=gr.Progress()):
|
|
409 |
all_models.append(korea_model)
|
410 |
existing_ids.add(korea_model.get('id', ''))
|
411 |
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
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:
|
@@ -436,23 +436,15 @@ def get_models_data(progress=gr.Progress()):
|
|
436 |
|
437 |
if response.status_code == 200:
|
438 |
model_data = response.json()
|
439 |
-
|
440 |
-
rank_info = rank_map.get(api_id)
|
441 |
-
|
442 |
-
model_info = {
|
443 |
'id': model_id,
|
444 |
-
'global_rank':
|
|
|
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':
|
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,
|
@@ -464,19 +456,46 @@ def get_models_data(progress=gr.Progress()):
|
|
464 |
})
|
465 |
except Exception as e:
|
466 |
print(f"Error processing {model_id}: {str(e)}")
|
467 |
-
|
468 |
-
'id': model_id,
|
469 |
-
'global_rank': 'Not in top 1000',
|
470 |
-
'downloads': 0,
|
471 |
-
'likes': 0,
|
472 |
-
'title': 'No Title',
|
473 |
-
'is_korea': False
|
474 |
-
})
|
475 |
|
476 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
477 |
html_content = """
|
478 |
<div style='padding: 20px; background: #f5f5f5;'>
|
479 |
-
<h2 style='color: #2c3e50;'>Models
|
480 |
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
|
481 |
"""
|
482 |
|
@@ -491,10 +510,11 @@ def get_models_data(progress=gr.Progress()):
|
|
491 |
border-radius: 10px;
|
492 |
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
493 |
transition: transform 0.2s;
|
|
|
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,7 +535,7 @@ def get_models_data(progress=gr.Progress()):
|
|
515 |
|
516 |
html_content += "</div></div>"
|
517 |
|
518 |
-
#
|
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'],
|
@@ -531,7 +551,15 @@ def get_models_data(progress=gr.Progress()):
|
|
531 |
|
532 |
except Exception as e:
|
533 |
print(f"Error in get_models_data: {str(e)}")
|
534 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
535 |
|
536 |
|
537 |
# ๊ด์ฌ ์คํ์ด์ค URL ๋ฆฌ์คํธ์ ์ ๋ณด
|
|
|
396 |
try:
|
397 |
progress(0, desc="Fetching models...")
|
398 |
|
399 |
+
if not HF_TOKEN:
|
400 |
+
fig = create_error_plot()
|
401 |
+
error_html = """
|
402 |
+
<div style='padding: 20px; background: #fee; border-radius: 10px; margin: 10px 0;'>
|
403 |
+
<h3 style='color: #c00;'>โ ๏ธ API ์ธ์ฆ์ด ํ์ํฉ๋๋ค</h3>
|
404 |
+
<p>HuggingFace API ํ ํฐ์ด ์ค์ ๋์ง ์์์ต๋๋ค. ์์ ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ API ํ ํฐ์ด ํ์ํฉ๋๋ค.</p>
|
405 |
+
</div>
|
406 |
+
"""
|
407 |
+
empty_df = pd.DataFrame(columns=['Global Rank', 'Model ID', 'Title', 'Downloads', 'Likes', 'Korea Search', 'URL'])
|
408 |
+
return fig, error_html, empty_df
|
409 |
+
|
410 |
# ์ผ๋ฐ ๋ชจ๋ธ๊ณผ Korea ๊ด๋ จ ๋ชจ๋ธ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ
|
411 |
all_global_models = get_all_models(limit=1000)
|
412 |
+
korea_models = get_korea_models()
|
413 |
|
414 |
# ๋ชจ๋ ๋ชจ๋ธ ํตํฉ (์ค๋ณต ์ ๊ฑฐ)
|
415 |
all_models = all_global_models.copy()
|
|
|
420 |
all_models.append(korea_model)
|
421 |
existing_ids.add(korea_model.get('id', ''))
|
422 |
|
423 |
+
# ์๊ฐํ๋ฅผ ์ํ Figure ์์ฑ
|
424 |
+
fig = go.Figure()
|
425 |
+
|
426 |
+
# ์์ ์ ๋ณด ์์ง
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
427 |
filtered_models = []
|
428 |
for model_id in target_models.keys():
|
429 |
try:
|
|
|
436 |
|
437 |
if response.status_code == 200:
|
438 |
model_data = response.json()
|
439 |
+
filtered_models.append({
|
|
|
|
|
|
|
440 |
'id': model_id,
|
441 |
+
'global_rank': next((idx for idx, m in enumerate(all_models, 1)
|
442 |
+
if m.get('id', '').strip() == model_id.strip()), 'Not in top 1000'),
|
443 |
'downloads': model_data.get('downloads', 0),
|
444 |
'likes': model_data.get('likes', 0),
|
445 |
'title': model_data.get('title', 'No Title'),
|
446 |
+
'is_korea': any(m.get('id', '').strip() == model_id.strip() for m in korea_models)
|
447 |
+
})
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
else:
|
449 |
filtered_models.append({
|
450 |
'id': model_id,
|
|
|
456 |
})
|
457 |
except Exception as e:
|
458 |
print(f"Error processing {model_id}: {str(e)}")
|
459 |
+
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
460 |
|
461 |
+
# ์์๋ก ์ ๋ ฌ
|
462 |
+
filtered_models.sort(key=lambda x: float('inf') if isinstance(x['global_rank'], str) else x['global_rank'])
|
463 |
+
|
464 |
+
# ์๊ฐํ ๋ฐ์ดํฐ ์ค๋น
|
465 |
+
valid_models = [m for m in filtered_models if isinstance(m['global_rank'], (int, float))]
|
466 |
+
|
467 |
+
if valid_models:
|
468 |
+
ids = [m['id'] for m in valid_models]
|
469 |
+
ranks = [m['global_rank'] for m in valid_models]
|
470 |
+
|
471 |
+
fig.add_trace(go.Bar(
|
472 |
+
x=ids,
|
473 |
+
y=[1001 - r for r in ranks], # Y์ถ ๋ฐ์
|
474 |
+
text=[f"Rank: #{r}<br>Downloads: {format(m['downloads'], ',')}<br>Likes: {format(m['likes'], ',')}"
|
475 |
+
for r, m in zip(ranks, valid_models)],
|
476 |
+
textposition='auto',
|
477 |
+
marker_color=['rgba(255,0,0,0.6)' if m['is_korea'] else 'rgba(0,0,255,0.6)'
|
478 |
+
for m in valid_models],
|
479 |
+
opacity=0.8
|
480 |
+
))
|
481 |
+
|
482 |
+
fig.update_layout(
|
483 |
+
title="HuggingFace Models Global Rankings",
|
484 |
+
xaxis_title="Model ID",
|
485 |
+
yaxis_title="Global Rank",
|
486 |
+
yaxis=dict(
|
487 |
+
ticktext=[f"#{i}" for i in range(1, 1001, 50)],
|
488 |
+
tickvals=[1001 - i for i in range(1, 1001, 50)],
|
489 |
+
range=[0, 1000]
|
490 |
+
),
|
491 |
+
height=800,
|
492 |
+
showlegend=False
|
493 |
+
)
|
494 |
+
|
495 |
+
# HTML ์นด๋ ์์ฑ
|
496 |
html_content = """
|
497 |
<div style='padding: 20px; background: #f5f5f5;'>
|
498 |
+
<h2 style='color: #2c3e50;'>Models Rankings</h2>
|
499 |
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
|
500 |
"""
|
501 |
|
|
|
510 |
border-radius: 10px;
|
511 |
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
512 |
transition: transform 0.2s;
|
513 |
+
{f"border: 2px solid #e74c3c;" if model['is_korea'] else ""}
|
514 |
'>
|
515 |
<h3 style='color: #34495e;'>{rank_display}</h3>
|
516 |
<h4 style='color: #2c3e50;'>{model['id']}</h4>
|
517 |
+
<p style='color: #e74c3c; font-weight: bold;'>{korea_badge}</p>
|
518 |
<p style='color: #7f8c8d;'>โฌ๏ธ Downloads: {format(model['downloads'], ',')}</p>
|
519 |
<p style='color: #7f8c8d;'>๐ Likes: {format(model['likes'], ',')}</p>
|
520 |
<a href='{target_models[model['id']]}'
|
|
|
535 |
|
536 |
html_content += "</div></div>"
|
537 |
|
538 |
+
# ๋ฐ์ดํฐํ๋ ์ ์์ฑ
|
539 |
df = pd.DataFrame([{
|
540 |
'Global Rank': f"#{m['global_rank']}" if isinstance(m['global_rank'], (int, float)) else m['global_rank'],
|
541 |
'Model ID': m['id'],
|
|
|
551 |
|
552 |
except Exception as e:
|
553 |
print(f"Error in get_models_data: {str(e)}")
|
554 |
+
error_fig = create_error_plot()
|
555 |
+
error_html = f"""
|
556 |
+
<div style='padding: 20px; background: #fee; border-radius: 10px; margin: 10px 0;'>
|
557 |
+
<h3 style='color: #c00;'>โ ๏ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค</h3>
|
558 |
+
<p>{str(e)}</p>
|
559 |
+
</div>
|
560 |
+
"""
|
561 |
+
empty_df = pd.DataFrame(columns=['Global Rank', 'Model ID', 'Title', 'Downloads', 'Likes', 'Korea Search', 'URL'])
|
562 |
+
return error_fig, error_html, empty_df
|
563 |
|
564 |
|
565 |
# ๊ด์ฌ ์คํ์ด์ค URL ๋ฆฌ์คํธ์ ์ ๋ณด
|