openfree commited on
Commit
1fed40f
ยท
verified ยท
1 Parent(s): 76b2e91

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -42
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() # Korea ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ถ”๊ฐ€
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
- 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:
@@ -436,23 +436,15 @@ def get_models_data(progress=gr.Progress()):
436
 
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 = {
443
  'id': model_id,
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,
@@ -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
- filtered_models.append({
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
- # HTML ์นด๋“œ์— Korea ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํ‘œ์‹œ ์ถ”๊ฐ€
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
  html_content = """
478
  <div style='padding: 20px; background: #f5f5f5;'>
479
- <h2 style='color: #2c3e50;'>Models Global Rankings</h2>
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
- # ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— 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'],
@@ -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
- return create_error_plot(), f"<div>์—๋Ÿฌ ๋ฐœ์ƒ: {str(e)}</div>", pd.DataFrame()
 
 
 
 
 
 
 
 
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 ๋ฆฌ์ŠคํŠธ์™€ ์ •๋ณด