Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -19,16 +19,32 @@ target_models = {
|
|
19 |
|
20 |
def get_models_data(progress=gr.Progress()):
|
21 |
"""모델 데이터 가져오기 (스페이스와 동일한 방식)"""
|
22 |
-
url = "https://huggingface.co/api/models
|
23 |
params = {
|
24 |
-
'
|
25 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
}
|
27 |
|
|
|
|
|
|
|
|
|
28 |
try:
|
29 |
progress(0, desc="Fetching models data...")
|
30 |
-
response = requests.get(url, params=params)
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
32 |
all_models = response.json()
|
33 |
|
34 |
# 순위 정보 저장
|
@@ -41,6 +57,9 @@ def get_models_data(progress=gr.Progress()):
|
|
41 |
model['rank'] = model_ranks.get(model['id'], 'N/A')
|
42 |
models.append(model)
|
43 |
|
|
|
|
|
|
|
44 |
# 순위별로 정렬
|
45 |
models.sort(key=lambda x: x['rank'])
|
46 |
|
@@ -53,6 +72,7 @@ def get_models_data(progress=gr.Progress()):
|
|
53 |
ids = [model['id'] for model in models]
|
54 |
ranks = [model['rank'] for model in models]
|
55 |
likes = [model.get('likes', 0) for model in models]
|
|
|
56 |
|
57 |
# Y축 값을 반전 (1000 - rank + 1)
|
58 |
y_values = [1001 - r for r in ranks]
|
@@ -61,7 +81,8 @@ def get_models_data(progress=gr.Progress()):
|
|
61 |
fig.add_trace(go.Bar(
|
62 |
x=ids,
|
63 |
y=y_values,
|
64 |
-
text=[f"Rank: {r}<br>Likes: {l}"
|
|
|
65 |
textposition='auto',
|
66 |
marker_color='rgb(158,202,225)',
|
67 |
opacity=0.8
|
@@ -69,7 +90,7 @@ def get_models_data(progress=gr.Progress()):
|
|
69 |
|
70 |
fig.update_layout(
|
71 |
title={
|
72 |
-
'text': 'Hugging Face Models
|
73 |
'y':0.95,
|
74 |
'x':0.5,
|
75 |
'xanchor': 'center',
|
@@ -93,7 +114,7 @@ def get_models_data(progress=gr.Progress()):
|
|
93 |
# HTML 카드 생성
|
94 |
html_content = """
|
95 |
<div style='padding: 20px; background: #f5f5f5;'>
|
96 |
-
<h2 style='color: #2c3e50;'>Models
|
97 |
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
|
98 |
"""
|
99 |
|
@@ -102,6 +123,7 @@ def get_models_data(progress=gr.Progress()):
|
|
102 |
rank = model.get('rank', 'N/A')
|
103 |
likes = model.get('likes', 0)
|
104 |
downloads = model.get('downloads', 0)
|
|
|
105 |
|
106 |
html_content += f"""
|
107 |
<div style='
|
@@ -114,6 +136,7 @@ def get_models_data(progress=gr.Progress()):
|
|
114 |
<h3 style='color: #34495e;'>Rank #{rank} - {model_id}</h3>
|
115 |
<p style='color: #7f8c8d;'>👍 Likes: {likes}</p>
|
116 |
<p style='color: #7f8c8d;'>⬇️ Downloads: {downloads}</p>
|
|
|
117 |
<a href='{target_models[model_id]}'
|
118 |
target='_blank'
|
119 |
style='
|
@@ -145,9 +168,8 @@ def get_models_data(progress=gr.Progress()):
|
|
145 |
return fig, html_content, df
|
146 |
|
147 |
except Exception as e:
|
148 |
-
|
149 |
-
|
150 |
-
return error_plot, error_html, pd.DataFrame()
|
151 |
|
152 |
# 관심 스페이스 URL 리스트와 정보
|
153 |
target_spaces = {
|
|
|
19 |
|
20 |
def get_models_data(progress=gr.Progress()):
|
21 |
"""모델 데이터 가져오기 (스페이스와 동일한 방식)"""
|
22 |
+
url = "https://huggingface.co/api/models" # 기본 API 엔드포인트
|
23 |
params = {
|
24 |
+
'full': 'true',
|
25 |
+
'limit': 1000,
|
26 |
+
'sort': 'lastModified', # 최신 순으로 정렬
|
27 |
+
'direction': -1
|
28 |
+
}
|
29 |
+
|
30 |
+
headers = {
|
31 |
+
'Accept': 'application/json',
|
32 |
+
'User-Agent': 'Mozilla/5.0'
|
33 |
}
|
34 |
|
35 |
+
# API 토큰이 있는 경우 헤더에 추가
|
36 |
+
if HF_TOKEN:
|
37 |
+
headers['Authorization'] = f'Bearer {HF_TOKEN}'
|
38 |
+
|
39 |
try:
|
40 |
progress(0, desc="Fetching models data...")
|
41 |
+
response = requests.get(url, params=params, headers=headers)
|
42 |
+
|
43 |
+
if response.status_code != 200:
|
44 |
+
print(f"API 요청 실패: {response.status_code}")
|
45 |
+
print(f"Response: {response.text}")
|
46 |
+
return create_error_plot(), "<div>모델 데이터를 가져오는데 실패했습니다.</div>", pd.DataFrame()
|
47 |
+
|
48 |
all_models = response.json()
|
49 |
|
50 |
# 순위 정보 저장
|
|
|
57 |
model['rank'] = model_ranks.get(model['id'], 'N/A')
|
58 |
models.append(model)
|
59 |
|
60 |
+
if not models:
|
61 |
+
return create_error_plot(), "<div>선택된 모델의 데이터를 찾을 수 없습니다.</div>", pd.DataFrame()
|
62 |
+
|
63 |
# 순위별로 정렬
|
64 |
models.sort(key=lambda x: x['rank'])
|
65 |
|
|
|
72 |
ids = [model['id'] for model in models]
|
73 |
ranks = [model['rank'] for model in models]
|
74 |
likes = [model.get('likes', 0) for model in models]
|
75 |
+
downloads = [model.get('downloads', 0) for model in models]
|
76 |
|
77 |
# Y축 값을 반전 (1000 - rank + 1)
|
78 |
y_values = [1001 - r for r in ranks]
|
|
|
81 |
fig.add_trace(go.Bar(
|
82 |
x=ids,
|
83 |
y=y_values,
|
84 |
+
text=[f"Rank: {r}<br>Likes: {l}<br>Downloads: {d}"
|
85 |
+
for r, l, d in zip(ranks, likes, downloads)],
|
86 |
textposition='auto',
|
87 |
marker_color='rgb(158,202,225)',
|
88 |
opacity=0.8
|
|
|
90 |
|
91 |
fig.update_layout(
|
92 |
title={
|
93 |
+
'text': 'Hugging Face Models Rankings',
|
94 |
'y':0.95,
|
95 |
'x':0.5,
|
96 |
'xanchor': 'center',
|
|
|
114 |
# HTML 카드 생성
|
115 |
html_content = """
|
116 |
<div style='padding: 20px; background: #f5f5f5;'>
|
117 |
+
<h2 style='color: #2c3e50;'>Models Rankings</h2>
|
118 |
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
|
119 |
"""
|
120 |
|
|
|
123 |
rank = model.get('rank', 'N/A')
|
124 |
likes = model.get('likes', 0)
|
125 |
downloads = model.get('downloads', 0)
|
126 |
+
description = model.get('description', 'No description available')[:200]
|
127 |
|
128 |
html_content += f"""
|
129 |
<div style='
|
|
|
136 |
<h3 style='color: #34495e;'>Rank #{rank} - {model_id}</h3>
|
137 |
<p style='color: #7f8c8d;'>👍 Likes: {likes}</p>
|
138 |
<p style='color: #7f8c8d;'>⬇️ Downloads: {downloads}</p>
|
139 |
+
<p style='color: #7f8c8d; font-size: 0.9em;'>{description}...</p>
|
140 |
<a href='{target_models[model_id]}'
|
141 |
target='_blank'
|
142 |
style='
|
|
|
168 |
return fig, html_content, df
|
169 |
|
170 |
except Exception as e:
|
171 |
+
print(f"Error in get_models_data: {str(e)}")
|
172 |
+
return create_error_plot(), f"<div>에러 발생: {str(e)}</div>", pd.DataFrame()
|
|
|
173 |
|
174 |
# 관심 스페이스 URL 리스트와 정보
|
175 |
target_spaces = {
|