Spaces:
Sleeping
Sleeping
hasune
commited on
Commit
ยท
fd7325b
1
Parent(s):
7a81177
Initial commit: Model Search Tool
Browse files- README.md +71 -6
- app.py +227 -0
- requirements.txt +4 -0
README.md
CHANGED
@@ -1,14 +1,79 @@
|
|
1 |
---
|
2 |
title: Model Search Tool
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
colorTo: pink
|
6 |
sdk: gradio
|
7 |
-
sdk_version:
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
-
license: mit
|
11 |
-
short_description: ๐ Smart search and filtering tool for Hugging Face models
|
12 |
---
|
13 |
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
---
|
2 |
title: Model Search Tool
|
3 |
+
emoji: ๐
|
4 |
+
colorFrom: purple
|
5 |
colorTo: pink
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 4.0.0
|
8 |
app_file: app.py
|
9 |
pinned: false
|
|
|
|
|
10 |
---
|
11 |
|
12 |
+
# ๐ Hugging Face Model Search Tool
|
13 |
+
|
14 |
+
ํ๊น
ํ์ด์ค์ ์๋ง์ ๋ชจ๋ธ ์ค์์ ๋น์ ์ด ์ํ๋ ์กฐ๊ฑด์ ๋ง๋ ๋ชจ๋ธ์ ์ฝ๊ฒ ์ฐพ์๋ณด์ธ์!
|
15 |
+
|
16 |
+
## โจ ์ฃผ์ ๊ธฐ๋ฅ
|
17 |
+
|
18 |
+
### ๐ ์ค๋งํธ ๊ฒ์
|
19 |
+
- **ํค์๋ ๊ฒ์**: ๋ชจ๋ธ๋ช
, ํ์คํฌ, ์ค๋ช
๋ฑ์ผ๋ก ๊ฒ์
|
20 |
+
- **๋ค์ค ํํฐ**: ํ์คํฌ, ์ธ์ด, ๋ผ์ด์ ์ค ์กฐํฉ ํํฐ๋ง
|
21 |
+
- **์ ๋ ฌ ์ต์
**: ์ธ๊ธฐ๋, ์ข์์ ์, ์ต์ ์ ์ ๋ ฌ
|
22 |
+
|
23 |
+
### ๐ ์ค์ฉ์ ์ ๋ณด ์ ๊ณต
|
24 |
+
- ๋ค์ด๋ก๋ ์ ๋ฐ ์ข์์ ์ ํ์
|
25 |
+
- ์ต๊ทผ ์
๋ฐ์ดํธ ๋ ์ง ํ์ธ
|
26 |
+
- ๋ผ์ด์ ์ค ์ ๋ณด๋ก ์ฌ์ฉ ๊ฐ๋ฅ ๋ฒ์ ํ์ธ
|
27 |
+
- ์ง์ ๋งํฌ๋ก ๋ฐ๋ก ๋ชจ๋ธ ํ์ด์ง ์ด๋
|
28 |
+
|
29 |
+
### ๐ ์์ธ ์ ๋ณด ๋ทฐ์ด
|
30 |
+
- ๊ฐ๋ณ ๋ชจ๋ธ์ ์์ธํ ๋ฉํ๋ฐ์ดํฐ
|
31 |
+
- ์๋ ์์ฑ๋ ์ฌ์ฉ ์์ ์ฝ๋
|
32 |
+
- ์ง์ ์ธ์ด ๋ฐ ํ๊ทธ ์ ๋ณด
|
33 |
+
|
34 |
+
## ๐ ์ฌ์ฉ๋ฒ
|
35 |
+
|
36 |
+
### ๋ชจ๋ธ ๊ฒ์
|
37 |
+
1. **๊ฒ์์ด ์
๋ ฅ**: ์ฐพ๊ณ ์ ํ๋ ํค์๋ ์
๋ ฅ (์: "korean", "sentiment", "bert")
|
38 |
+
2. **ํํฐ ์ค์ **:
|
39 |
+
- ํ์คํฌ ํ์
(๊ฐ์ ๋ถ์, ์ง์์๋ต ๋ฑ)
|
40 |
+
- ์ธ์ด (ํ๊ตญ์ด, ์์ด, ๋ค๊ตญ์ด ๋ฑ)
|
41 |
+
- ๋ผ์ด์ ์ค (์์
์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ)
|
42 |
+
3. **์ ๋ ฌ ๊ธฐ์ค ์ ํ**: ๋ค์ด๋ก๋ ์, ์ข์์ ์, ์ต์ ์
|
43 |
+
4. **๊ฒ์ ์คํ**: ์กฐ๊ฑด์ ๋ง๋ ๋ชจ๋ธ ๋ฆฌ์คํธ ํ์ธ
|
44 |
+
|
45 |
+
### ๋ชจ๋ธ ์์ธ ์ ๋ณด
|
46 |
+
1. ๊ฒ์ ๊ฒฐ๊ณผ์์ ๊ด์ฌ ์๋ ๋ชจ๋ธ๋ช
๋ณต์ฌ
|
47 |
+
2. "๋ชจ๋ธ ์์ธ ์ ๋ณด" ํญ์์ ๋ชจ๋ธ๋ช
์
๋ ฅ
|
48 |
+
3. ์์ธ ์ ๋ณด ๋ฐ ์ฌ์ฉ ์์ ์ฝ๋ ํ์ธ
|
49 |
+
|
50 |
+
## ๐ก ์ถ์ฒ ๊ฒ์ ์กฐํฉ
|
51 |
+
|
52 |
+
### ํ๊ตญ์ด NLP ๋ชจ๋ธ ์ฐพ๊ธฐ
|
53 |
+
- **์ธ์ด**: Korean (ko)
|
54 |
+
- **ํ์คํฌ**: Text Classification
|
55 |
+
- **๊ฒ์์ด**: sentiment, klue, korean
|
56 |
+
|
57 |
+
### ์์
์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ
|
58 |
+
- **๋ผ์ด์ ์ค**: apache-2.0 ๋๋ mit
|
59 |
+
- **์ ๋ ฌ**: Downloads (์ธ๊ธฐ์)
|
60 |
+
|
61 |
+
### ์ต์ ๋ชจ๋ธ ํ์
|
62 |
+
- **์ ๋ ฌ**: Last Modified (์ต์ ์)
|
63 |
+
- **์ํ๋ ํ์คํฌ ํํฐ ์ ์ฉ**
|
64 |
+
|
65 |
+
## ๐ฏ ๋๊ตฌ์๊ฒ ์ ์ฉํ๊ฐ์?
|
66 |
+
|
67 |
+
- **AI ์ฐ๊ตฌ์**: ์ฐ๊ตฌ์ ์ ํฉํ pre-trained ๋ชจ๋ธ ํ์
|
68 |
+
- **๊ฐ๋ฐ์**: ํ๋ก์ ํธ์ ํ์ฉํ ๋ชจ๋ธ ์ ํ
|
69 |
+
- **ํ์**: ํ์ต์ฉ ๋ชจ๋ธ ์ฐพ๊ธฐ
|
70 |
+
- **๊ธฐ์
**: ์์
์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ ๊ฒ์
|
71 |
+
|
72 |
+
## ๐ ์ฐ๊ด ๋๊ตฌ
|
73 |
+
|
74 |
+
์ด ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ข์ ๋ค๋ฅธ ๋๊ตฌ๋ค:
|
75 |
+
- [Model Card Generator](https://huggingface.co/spaces/cadenza83/model-card-generator): ์ฐพ์ ๋ชจ๋ธ์ ์นด๋ ์๋ ์์ฑ
|
76 |
+
|
77 |
+
---
|
78 |
+
|
79 |
+
Made with โค๏ธ for the AI community
|
app.py
ADDED
@@ -0,0 +1,227 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import requests
|
3 |
+
from huggingface_hub import HfApi
|
4 |
+
import pandas as pd
|
5 |
+
from datetime import datetime
|
6 |
+
import json
|
7 |
+
|
8 |
+
# Hugging Face API ์ด๊ธฐํ
|
9 |
+
api = HfApi()
|
10 |
+
|
11 |
+
def search_models(
|
12 |
+
search_query="",
|
13 |
+
task_filter="all",
|
14 |
+
language_filter="all",
|
15 |
+
license_filter="all",
|
16 |
+
sort_by="downloads",
|
17 |
+
max_results=20
|
18 |
+
):
|
19 |
+
"""Hugging Face Hub์์ ๋ชจ๋ธ ๊ฒ์"""
|
20 |
+
|
21 |
+
try:
|
22 |
+
# ๊ฒ์ ํ๋ผ๋ฏธํฐ ์ค์
|
23 |
+
search_params = {
|
24 |
+
"limit": max_results,
|
25 |
+
"sort": sort_by,
|
26 |
+
"direction": -1, # ๋ด๋ฆผ์ฐจ์
|
27 |
+
}
|
28 |
+
|
29 |
+
# ํ์คํฌ ํํฐ
|
30 |
+
if task_filter != "all":
|
31 |
+
search_params["pipeline_tag"] = task_filter
|
32 |
+
|
33 |
+
# ์ธ์ด ํํฐ
|
34 |
+
if language_filter != "all":
|
35 |
+
search_params["language"] = language_filter
|
36 |
+
|
37 |
+
# ๋ผ์ด์ ์ค ํํฐ
|
38 |
+
if license_filter != "all":
|
39 |
+
search_params["license"] = license_filter
|
40 |
+
|
41 |
+
# ๊ฒ์ ์ฟผ๋ฆฌ
|
42 |
+
if search_query.strip():
|
43 |
+
search_params["search"] = search_query
|
44 |
+
|
45 |
+
# API ํธ์ถ
|
46 |
+
models = api.list_models(**search_params)
|
47 |
+
|
48 |
+
# ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
|
49 |
+
results = []
|
50 |
+
for model in models:
|
51 |
+
# ๋ชจ๋ธ ์ ๋ณด ์ถ์ถ
|
52 |
+
model_info = {
|
53 |
+
"Model Name": model.modelId,
|
54 |
+
"Task": getattr(model, 'pipeline_tag', 'Unknown'),
|
55 |
+
"Downloads": f"{getattr(model, 'downloads', 0):,}",
|
56 |
+
"Likes": f"{getattr(model, 'likes', 0):,}",
|
57 |
+
"Updated": getattr(model, 'lastModified', 'Unknown'),
|
58 |
+
"License": getattr(model, 'license', 'Unknown'),
|
59 |
+
"Link": f"https://huggingface.co/{model.modelId}"
|
60 |
+
}
|
61 |
+
results.append(model_info)
|
62 |
+
|
63 |
+
if not results:
|
64 |
+
return pd.DataFrame([{"Message": "๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒ์์ด๋ ํํฐ๋ฅผ ์๋ํด๋ณด์ธ์."}])
|
65 |
+
|
66 |
+
# DataFrame์ผ๋ก ๋ณํ
|
67 |
+
df = pd.DataFrame(results)
|
68 |
+
return df
|
69 |
+
|
70 |
+
except Exception as e:
|
71 |
+
error_df = pd.DataFrame([{"Error": f"๊ฒ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}"}])
|
72 |
+
return error_df
|
73 |
+
|
74 |
+
def get_model_details(model_name):
|
75 |
+
"""ํน์ ๋ชจ๋ธ์ ์์ธ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ"""
|
76 |
+
if not model_name:
|
77 |
+
return "๋ชจ๋ธ๋ช
์ ์
๋ ฅํด์ฃผ์ธ์."
|
78 |
+
|
79 |
+
try:
|
80 |
+
# ๋ชจ๋ธ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
|
81 |
+
model_info = api.model_info(model_name)
|
82 |
+
|
83 |
+
details = f"""
|
84 |
+
# ๐ค {model_name}
|
85 |
+
|
86 |
+
## ๊ธฐ๋ณธ ์ ๋ณด
|
87 |
+
- **ํ์คํฌ**: {getattr(model_info, 'pipeline_tag', 'Unknown')}
|
88 |
+
- **๋ผ์ด์ ์ค**: {getattr(model_info, 'license', 'Unknown')}
|
89 |
+
- **๋ค์ด๋ก๋**: {getattr(model_info, 'downloads', 0):,}ํ
|
90 |
+
- **์ข์์**: {getattr(model_info, 'likes', 0):,}๊ฐ
|
91 |
+
- **์ต์ข
์
๋ฐ์ดํธ**: {getattr(model_info, 'lastModified', 'Unknown')}
|
92 |
+
|
93 |
+
## ์ง์ ์ธ์ด
|
94 |
+
{', '.join(getattr(model_info, 'language', ['Unknown']))}
|
95 |
+
|
96 |
+
## ํ๊ทธ
|
97 |
+
{', '.join(getattr(model_info, 'tags', ['None']))}
|
98 |
+
|
99 |
+
## ๋ชจ๋ธ ๋งํฌ
|
100 |
+
๐ [Hugging Face์์ ๋ณด๊ธฐ](https://huggingface.co/{model_name})
|
101 |
+
|
102 |
+
## ์ฌ์ฉ ์์
|
103 |
+
```python
|
104 |
+
from transformers import AutoTokenizer, AutoModel
|
105 |
+
|
106 |
+
tokenizer = AutoTokenizer.from_pretrained("{model_name}")
|
107 |
+
model = AutoModel.from_pretrained("{model_name}")
|
108 |
+
```
|
109 |
+
"""
|
110 |
+
return details
|
111 |
+
|
112 |
+
except Exception as e:
|
113 |
+
return f"โ ์ค๋ฅ: {str(e)}\n\n๋ชจ๋ธ๋ช
์ ์ ํํ ์
๋ ฅํ๋์ง ํ์ธํด์ฃผ์ธ์."
|
114 |
+
|
115 |
+
# Gradio ์ธํฐํ์ด์ค
|
116 |
+
with gr.Blocks(title="๐ HF Model Finder", theme=gr.themes.Soft()) as demo:
|
117 |
+
|
118 |
+
gr.Markdown("# ๐ Hugging Face Model Finder")
|
119 |
+
gr.Markdown("ํ๊น
ํ์ด์ค์ ์๋ง์ ๋ชจ๋ธ ์ค์์ ๋น์ ์ด ์ํ๋ ์กฐ๊ฑด์ ๋ง๋ ๋ชจ๋ธ์ ์ฝ๊ฒ ์ฐพ์๋ณด์ธ์!")
|
120 |
+
|
121 |
+
with gr.Tabs():
|
122 |
+
# ํญ 1: ๋ชจ๋ธ ๊ฒ์
|
123 |
+
with gr.Tab("๐ ๋ชจ๋ธ ๊ฒ์"):
|
124 |
+
with gr.Row():
|
125 |
+
with gr.Column(scale=1):
|
126 |
+
gr.Markdown("### ๊ฒ์ ์กฐ๊ฑด")
|
127 |
+
|
128 |
+
search_query = gr.Textbox(
|
129 |
+
label="๊ฒ์์ด",
|
130 |
+
placeholder="์: korean, sentiment, bert",
|
131 |
+
value=""
|
132 |
+
)
|
133 |
+
|
134 |
+
task_filter = gr.Dropdown(
|
135 |
+
label="ํ์คํฌ",
|
136 |
+
choices=[
|
137 |
+
"all", "text-classification", "token-classification",
|
138 |
+
"question-answering", "fill-mask", "summarization",
|
139 |
+
"translation", "text-generation", "conversational"
|
140 |
+
],
|
141 |
+
value="all"
|
142 |
+
)
|
143 |
+
|
144 |
+
language_filter = gr.Dropdown(
|
145 |
+
label="์ธ์ด",
|
146 |
+
choices=["all", "ko", "en", "multilingual", "zh", "ja", "es", "fr"],
|
147 |
+
value="all"
|
148 |
+
)
|
149 |
+
|
150 |
+
license_filter = gr.Dropdown(
|
151 |
+
label="๋ผ์ด์ ์ค",
|
152 |
+
choices=["all", "apache-2.0", "mit", "cc-by-4.0", "cc-by-nc-4.0"],
|
153 |
+
value="all"
|
154 |
+
)
|
155 |
+
|
156 |
+
sort_by = gr.Dropdown(
|
157 |
+
label="์ ๋ ฌ ๊ธฐ์ค",
|
158 |
+
choices=["downloads", "likes", "lastModified"],
|
159 |
+
value="downloads"
|
160 |
+
)
|
161 |
+
|
162 |
+
max_results = gr.Slider(
|
163 |
+
label="์ต๋ ๊ฒฐ๊ณผ ์",
|
164 |
+
minimum=5,
|
165 |
+
maximum=50,
|
166 |
+
value=20,
|
167 |
+
step=5
|
168 |
+
)
|
169 |
+
|
170 |
+
search_btn = gr.Button("๐ ๊ฒ์ํ๊ธฐ", variant="primary")
|
171 |
+
|
172 |
+
with gr.Column(scale=2):
|
173 |
+
gr.Markdown("### ๊ฒ์ ๊ฒฐ๊ณผ")
|
174 |
+
results_table = gr.Dataframe(
|
175 |
+
headers=["Model Name", "Task", "Downloads", "Likes", "Updated", "License"],
|
176 |
+
interactive=False,
|
177 |
+
wrap=True
|
178 |
+
)
|
179 |
+
|
180 |
+
# ํญ 2: ๋ชจ๋ธ ์์ธ ์ ๋ณด
|
181 |
+
with gr.Tab("๐ ๋ชจ๋ธ ์์ธ ์ ๋ณด"):
|
182 |
+
with gr.Row():
|
183 |
+
with gr.Column(scale=1):
|
184 |
+
model_name_input = gr.Textbox(
|
185 |
+
label="๋ชจ๋ธ๋ช
",
|
186 |
+
placeholder="์: klue/bert-base",
|
187 |
+
info="Hugging Face์ ์ ํํ ๋ชจ๋ธ๋ช
์ ์
๋ ฅํ์ธ์"
|
188 |
+
)
|
189 |
+
detail_btn = gr.Button("๐ ์์ธ ์ ๋ณด ๋ณด๊ธฐ", variant="primary")
|
190 |
+
|
191 |
+
with gr.Column(scale=2):
|
192 |
+
model_details = gr.Markdown("๋ชจ๋ธ๋ช
์ ์
๋ ฅํ๊ณ ๋ฒํผ์ ํด๋ฆญํ์ธ์.")
|
193 |
+
|
194 |
+
# ์ด๋ฒคํธ ํธ๋ค๋ฌ
|
195 |
+
search_btn.click(
|
196 |
+
fn=search_models,
|
197 |
+
inputs=[search_query, task_filter, language_filter, license_filter, sort_by, max_results],
|
198 |
+
outputs=results_table
|
199 |
+
)
|
200 |
+
|
201 |
+
detail_btn.click(
|
202 |
+
fn=get_model_details,
|
203 |
+
inputs=model_name_input,
|
204 |
+
outputs=model_details
|
205 |
+
)
|
206 |
+
|
207 |
+
# ์ฌ์ฉ๋ฒ ์๋ด
|
208 |
+
gr.Markdown("""
|
209 |
+
### ๐ก ์ฌ์ฉ ํ
|
210 |
+
|
211 |
+
**๊ฒ์ ํญ:**
|
212 |
+
- ๊ฒ์์ด์ ํค์๋๋ฅผ ์
๋ ฅํ๊ฑฐ๋ ํํฐ๋ฅผ ์กฐํฉํด์ ์ฌ์ฉํ์ธ์
|
213 |
+
- ๋ค์ด๋ก๋ ์๊ฐ ๋ง์ ๋ชจ๋ธ์ผ์๋ก ์์ ์ ์ด๊ณ ๋ฌธ์ํ๊ฐ ์ ๋์ด ์์ด์
|
214 |
+
- ๋ผ์ด์ ์ค๋ฅผ ํ์ธํด์ ์์
์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ์ธ์
|
215 |
+
|
216 |
+
**์์ธ ์ ๋ณด ํญ:**
|
217 |
+
- ๊ฒ์ ๊ฒฐ๊ณผ์์ ๊ด์ฌ ์๋ ๋ชจ๋ธ๋ช
์ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ์ผ์ธ์
|
218 |
+
- ์ฌ์ฉ ์์ ์ฝ๋๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค
|
219 |
+
|
220 |
+
**์ถ์ฒ ๊ฒ์ ์กฐํฉ:**
|
221 |
+
- ํ๊ตญ์ด ๊ฐ์ ๋ถ์: language=ko, task=text-classification, ๊ฒ์์ด=sentiment
|
222 |
+
- ์์ด ์ง์์๋ต: language=en, task=question-answering
|
223 |
+
- ์์
์ ์ฌ์ฉ ๊ฐ๋ฅ: license=apache-2.0 ๋๋ mit
|
224 |
+
""")
|
225 |
+
|
226 |
+
if __name__ == "__main__":
|
227 |
+
demo.launch()
|
requirements.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
gradio
|
2 |
+
huggingface_hub
|
3 |
+
pandas
|
4 |
+
requests
|