openfree commited on
Commit
3510503
·
verified ·
1 Parent(s): b0bbfbb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -77
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/trending" # trending 전용 엔드포인트
297
 
298
  try:
299
  progress(0, desc="Fetching models data...")
300
  params = {
301
  'full': 'true',
302
- 'limit': 1000, # 1000위까지 가져오기
303
- 'interval': 'day' # 일간 트렌딩
 
304
  }
305
 
306
- response = requests.get(url, params=params)
307
- response.raise_for_status()
 
 
 
 
 
 
 
 
 
308
  all_models = response.json()
309
  print(f"Total models fetched: {len(all_models)}")
310
 
311
- # 전체 모델의 순위 정보 저장 (1000위까지)
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'] = model_ranks[model['id']]
319
  filtered_models.append(model)
320
- print(f"Found model: {model['id']} at rank {model['rank']}")
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축 값을 반전 (1000 - rank + 1)
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>Likes: {l}<br>Downloads: {d}"
348
- for r, l, d in zip(ranks, likes, downloads)],
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 Trending Rankings (Top 1000)',
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 Trending Rankings</h2>
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
- df_data = []
451
- # 순위권 내 모델
452
- for model in filtered_models:
453
- df_data.append({
454
- 'Rank': model.get('rank', 'N/A'),
455
- 'Model ID': model.get('id', ''),
456
- 'Likes': model.get('likes', 'N/A'),
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