Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Update app.py
Browse files
app.py
CHANGED
@@ -293,37 +293,40 @@ target_models = {
|
|
293 |
|
294 |
def get_models_data(progress=gr.Progress()):
|
295 |
"""모델 데이터 가져오기"""
|
296 |
-
url = "https://huggingface.co/api/models
|
297 |
|
298 |
try:
|
299 |
progress(0, desc="Fetching models data...")
|
300 |
params = {
|
301 |
'full': 'true',
|
302 |
-
'limit': 1000,
|
303 |
-
'
|
|
|
304 |
}
|
305 |
|
306 |
-
|
307 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
308 |
all_models = response.json()
|
309 |
print(f"Total models fetched: {len(all_models)}")
|
310 |
|
311 |
-
#
|
312 |
-
model_ranks = {model['id']: idx + 1 for idx, model in enumerate(all_models)}
|
313 |
-
|
314 |
-
# target_models에 있는 모델만 필터링하고 실제 순위 포함
|
315 |
filtered_models = []
|
316 |
for model in all_models:
|
317 |
if model.get('id', '') in target_models:
|
318 |
-
model['rank'] =
|
319 |
filtered_models.append(model)
|
320 |
-
print(f"Found model: {model['id']}
|
321 |
-
|
322 |
-
# 순위로 정렬
|
323 |
-
filtered_models.sort(key=lambda x: x['rank'])
|
324 |
|
325 |
if not filtered_models:
|
326 |
-
print("No matching models found in the response")
|
327 |
return create_error_plot(), "<div>선택된 모델의 데이터를 찾을 수 없습니다.</div>", pd.DataFrame()
|
328 |
|
329 |
progress(0.3, desc="Creating visualization...")
|
@@ -333,19 +336,25 @@ def get_models_data(progress=gr.Progress()):
|
|
333 |
|
334 |
# 데이터 준비
|
335 |
ids = [model['id'] for model in filtered_models]
|
336 |
-
ranks = [model['rank'] for model in filtered_models]
|
337 |
-
likes = [model.get('likes', 0) for model in filtered_models]
|
338 |
downloads = [model.get('downloads', 0) for model in filtered_models]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
|
340 |
-
# Y축 값을 반전
|
341 |
y_values = [1001 - r for r in ranks]
|
342 |
|
343 |
# 막대 그래프 생성
|
344 |
fig.add_trace(go.Bar(
|
345 |
x=ids,
|
346 |
y=y_values,
|
347 |
-
text=[f"Rank: {r}<br>
|
348 |
-
for r,
|
349 |
textposition='auto',
|
350 |
marker_color='rgb(158,202,225)',
|
351 |
opacity=0.8
|
@@ -353,7 +362,7 @@ def get_models_data(progress=gr.Progress()):
|
|
353 |
|
354 |
fig.update_layout(
|
355 |
title={
|
356 |
-
'text': 'Hugging Face Models
|
357 |
'y':0.95,
|
358 |
'x':0.5,
|
359 |
'xanchor': 'center',
|
@@ -377,16 +386,15 @@ def get_models_data(progress=gr.Progress()):
|
|
377 |
# HTML 카드 생성
|
378 |
html_content = """
|
379 |
<div style='padding: 20px; background: #f5f5f5;'>
|
380 |
-
<h2 style='color: #2c3e50;'>Models
|
381 |
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
|
382 |
"""
|
383 |
|
384 |
-
|
385 |
-
for model in filtered_models:
|
386 |
model_id = model.get('id', '')
|
387 |
rank = model.get('rank', 'N/A')
|
388 |
-
likes = model.get('likes', 0)
|
389 |
downloads = model.get('downloads', 0)
|
|
|
390 |
|
391 |
html_content += f"""
|
392 |
<div style='
|
@@ -397,8 +405,8 @@ def get_models_data(progress=gr.Progress()):
|
|
397 |
transition: transform 0.2s;
|
398 |
'>
|
399 |
<h3 style='color: #34495e;'>Rank #{rank} - {model_id}</h3>
|
400 |
-
<p style='color: #7f8c8d;'>👍 Likes: {likes}</p>
|
401 |
<p style='color: #7f8c8d;'>⬇️ Downloads: {downloads}</p>
|
|
|
402 |
<a href='{target_models[model_id]}'
|
403 |
target='_blank'
|
404 |
style='
|
@@ -414,61 +422,17 @@ def get_models_data(progress=gr.Progress()):
|
|
414 |
</a>
|
415 |
</div>
|
416 |
"""
|
417 |
-
progress((0.6 + 0.3 * filtered_models.index(model)/len(filtered_models)),
|
418 |
-
desc=f"Loading model {filtered_models.index(model)+1}/{len(filtered_models)}...")
|
419 |
-
|
420 |
-
# 순위권 밖 모델 카드 생성
|
421 |
-
for model_id in target_models:
|
422 |
-
if model_id not in [m['id'] for m in filtered_models]:
|
423 |
-
html_content += f"""
|
424 |
-
<div style='
|
425 |
-
background: #f8f9fa;
|
426 |
-
padding: 20px;
|
427 |
-
border-radius: 10px;
|
428 |
-
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
429 |
-
'>
|
430 |
-
<h3 style='color: #34495e;'>{model_id}</h3>
|
431 |
-
<p style='color: #7f8c8d;'>Not in top 1000</p>
|
432 |
-
<a href='{target_models[model_id]}'
|
433 |
-
target='_blank'
|
434 |
-
style='
|
435 |
-
display: inline-block;
|
436 |
-
padding: 8px 16px;
|
437 |
-
background: #95a5a6;
|
438 |
-
color: white;
|
439 |
-
text-decoration: none;
|
440 |
-
border-radius: 5px;
|
441 |
-
'>
|
442 |
-
Visit Model 🔗
|
443 |
-
</a>
|
444 |
-
</div>
|
445 |
-
"""
|
446 |
|
447 |
html_content += "</div></div>"
|
448 |
|
449 |
# 데이터프레임 생성
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
'Downloads': model.get('downloads', 'N/A'),
|
458 |
-
'URL': target_models[model.get('id', '')]
|
459 |
-
})
|
460 |
-
# 순위권 밖 모델
|
461 |
-
for model_id in target_models:
|
462 |
-
if model_id not in [m['id'] for m in filtered_models]:
|
463 |
-
df_data.append({
|
464 |
-
'Rank': 'Not in top 1000',
|
465 |
-
'Model ID': model_id,
|
466 |
-
'Likes': 'N/A',
|
467 |
-
'Downloads': 'N/A',
|
468 |
-
'URL': target_models[model_id]
|
469 |
-
})
|
470 |
-
|
471 |
-
df = pd.DataFrame(df_data)
|
472 |
|
473 |
progress(1.0, desc="Complete!")
|
474 |
return fig, html_content, df
|
|
|
293 |
|
294 |
def get_models_data(progress=gr.Progress()):
|
295 |
"""모델 데이터 가져오기"""
|
296 |
+
url = "https://huggingface.co/api/models" # 기본 API 엔드포인트
|
297 |
|
298 |
try:
|
299 |
progress(0, desc="Fetching models data...")
|
300 |
params = {
|
301 |
'full': 'true',
|
302 |
+
'limit': 1000,
|
303 |
+
'sort': 'downloads', # 다운로드 수로 정렬
|
304 |
+
'direction': -1
|
305 |
}
|
306 |
|
307 |
+
headers = {
|
308 |
+
'Accept': 'application/json',
|
309 |
+
'User-Agent': 'Mozilla/5.0'
|
310 |
+
}
|
311 |
+
|
312 |
+
response = requests.get(url, params=params, headers=headers)
|
313 |
+
if response.status_code != 200:
|
314 |
+
print(f"API 요청 실패: {response.status_code}")
|
315 |
+
print(f"Response: {response.text}")
|
316 |
+
return create_error_plot(), "<div>모델 데이터를 가져오는데 실패했습니다.</div>", pd.DataFrame()
|
317 |
+
|
318 |
all_models = response.json()
|
319 |
print(f"Total models fetched: {len(all_models)}")
|
320 |
|
321 |
+
# target_models에 있는 모델 필터링
|
|
|
|
|
|
|
322 |
filtered_models = []
|
323 |
for model in all_models:
|
324 |
if model.get('id', '') in target_models:
|
325 |
+
model['rank'] = len(filtered_models) + 1
|
326 |
filtered_models.append(model)
|
327 |
+
print(f"Found model: {model['id']}")
|
|
|
|
|
|
|
328 |
|
329 |
if not filtered_models:
|
|
|
330 |
return create_error_plot(), "<div>선택된 모델의 데이터를 찾을 수 없습니다.</div>", pd.DataFrame()
|
331 |
|
332 |
progress(0.3, desc="Creating visualization...")
|
|
|
336 |
|
337 |
# 데이터 준비
|
338 |
ids = [model['id'] for model in filtered_models]
|
|
|
|
|
339 |
downloads = [model.get('downloads', 0) for model in filtered_models]
|
340 |
+
likes = [model.get('likes', 0) for model in filtered_models]
|
341 |
+
|
342 |
+
# 다운로드 수를 기준으로 순위 계산
|
343 |
+
sorted_models = sorted(filtered_models, key=lambda x: x.get('downloads', 0), reverse=True)
|
344 |
+
for idx, model in enumerate(sorted_models):
|
345 |
+
model['rank'] = idx + 1
|
346 |
+
|
347 |
+
ranks = [model['rank'] for model in sorted_models]
|
348 |
|
349 |
+
# Y축 값을 반전
|
350 |
y_values = [1001 - r for r in ranks]
|
351 |
|
352 |
# 막대 그래프 생성
|
353 |
fig.add_trace(go.Bar(
|
354 |
x=ids,
|
355 |
y=y_values,
|
356 |
+
text=[f"Rank: {r}<br>Downloads: {d}<br>Likes: {l}"
|
357 |
+
for r, d, l in zip(ranks, downloads, likes)],
|
358 |
textposition='auto',
|
359 |
marker_color='rgb(158,202,225)',
|
360 |
opacity=0.8
|
|
|
362 |
|
363 |
fig.update_layout(
|
364 |
title={
|
365 |
+
'text': 'Hugging Face Models Rankings (Top 1000)',
|
366 |
'y':0.95,
|
367 |
'x':0.5,
|
368 |
'xanchor': 'center',
|
|
|
386 |
# HTML 카드 생성
|
387 |
html_content = """
|
388 |
<div style='padding: 20px; background: #f5f5f5;'>
|
389 |
+
<h2 style='color: #2c3e50;'>Models Rankings</h2>
|
390 |
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
|
391 |
"""
|
392 |
|
393 |
+
for model in sorted_models:
|
|
|
394 |
model_id = model.get('id', '')
|
395 |
rank = model.get('rank', 'N/A')
|
|
|
396 |
downloads = model.get('downloads', 0)
|
397 |
+
likes = model.get('likes', 0)
|
398 |
|
399 |
html_content += f"""
|
400 |
<div style='
|
|
|
405 |
transition: transform 0.2s;
|
406 |
'>
|
407 |
<h3 style='color: #34495e;'>Rank #{rank} - {model_id}</h3>
|
|
|
408 |
<p style='color: #7f8c8d;'>⬇️ Downloads: {downloads}</p>
|
409 |
+
<p style='color: #7f8c8d;'>👍 Likes: {likes}</p>
|
410 |
<a href='{target_models[model_id]}'
|
411 |
target='_blank'
|
412 |
style='
|
|
|
422 |
</a>
|
423 |
</div>
|
424 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
425 |
|
426 |
html_content += "</div></div>"
|
427 |
|
428 |
# 데이터프레임 생성
|
429 |
+
df = pd.DataFrame([{
|
430 |
+
'Rank': model.get('rank', 'N/A'),
|
431 |
+
'Model ID': model.get('id', ''),
|
432 |
+
'Downloads': model.get('downloads', 'N/A'),
|
433 |
+
'Likes': model.get('likes', 'N/A'),
|
434 |
+
'URL': target_models[model.get('id', '')]
|
435 |
+
} for model in sorted_models])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
436 |
|
437 |
progress(1.0, desc="Complete!")
|
438 |
return fig, html_content, df
|