Update app.py
Browse files
app.py
CHANGED
@@ -177,18 +177,48 @@ def analyze_code(code: str) -> str:
|
|
177 |
"""์ฝ๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ HTML ํ์์ผ๋ก ๋ฐํ"""
|
178 |
analysis = []
|
179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
# 1. ์ฌ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์
|
181 |
imports = []
|
|
|
182 |
for line in code.split('\n'):
|
183 |
if line.startswith('import ') or line.startswith('from '):
|
184 |
imports.append(line.strip())
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
|
186 |
if imports:
|
187 |
-
analysis.append("<h2>๐
|
188 |
analysis.append("<ul>")
|
189 |
for imp in imports:
|
190 |
analysis.append(f"<li><code>{imp}</code></li>")
|
191 |
analysis.append("</ul>")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
|
193 |
# 2. ํจ์ ๋ถ์
|
194 |
functions = []
|
@@ -210,11 +240,20 @@ def analyze_code(code: str) -> str:
|
|
210 |
current_func = []
|
211 |
|
212 |
if functions:
|
213 |
-
analysis.append("<h2>๐ง ์ฃผ์
|
214 |
for func in functions:
|
215 |
func_name = func.split('def ')[1].split('(')[0]
|
216 |
analysis.append(f"<h3><code>{func_name}</code></h3>")
|
217 |
analysis.append(f"<p>{get_function_description(func)}</p>")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
|
219 |
# 3. UI ์ปดํฌ๋ํธ ๋ถ์
|
220 |
ui_components = []
|
@@ -225,17 +264,32 @@ def analyze_code(code: str) -> str:
|
|
225 |
ui_components.append(component)
|
226 |
|
227 |
if ui_components:
|
228 |
-
analysis.append("<h2>๐จ UI
|
|
|
229 |
analysis.append("<ul>")
|
230 |
for component in ui_components:
|
231 |
analysis.append(f"<li><strong>{component}</strong>: {get_component_description(component)}</li>")
|
232 |
analysis.append("</ul>")
|
233 |
|
234 |
-
# 4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
235 |
analysis.append("<h2>โถ๏ธ ์คํ ๋ฐฉ๋ฒ</h2>")
|
236 |
analysis.append("<ol>")
|
237 |
analysis.append("<li>'์คํํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ์ฌ Hugging Face Space์ ๋ฐฐํฌ</li>")
|
238 |
analysis.append("<li>์์ฑ๋ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์คํ</li>")
|
|
|
239 |
analysis.append("</ol>")
|
240 |
|
241 |
return "\n".join(analysis)
|
|
|
177 |
"""์ฝ๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ HTML ํ์์ผ๋ก ๋ฐํ"""
|
178 |
analysis = []
|
179 |
|
180 |
+
# 0. ์ฝ๋ ๊ฐ์
|
181 |
+
analysis.append("<h2>๐ก ์ฝ๋ ๊ฐ์</h2>")
|
182 |
+
analysis.append("<p>์ด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค:</p>")
|
183 |
+
analysis.append("<ul>")
|
184 |
+
if 'gr.Blocks' in code:
|
185 |
+
analysis.append("<li>Gradio Blocks๋ฅผ ์ฌ์ฉํ ๋ชจ๋ํ UI ๊ตฌ์ฑ</li>")
|
186 |
+
if 'theme=' in code:
|
187 |
+
analysis.append("<li>์ปค์คํ
ํ
๋ง ์ ์ฉ์ผ๋ก ์๊ฐ์ ์ผ๊ด์ฑ ์ ์ง</li>")
|
188 |
+
if 'with gr.Row' in code or 'with gr.Column' in code:
|
189 |
+
analysis.append("<li>Row/Column ๋ ์ด์์์ผ๋ก ๋ฐ์ํ ๋์์ธ ๊ตฌํ</li>")
|
190 |
+
analysis.append("</ul>")
|
191 |
+
|
192 |
# 1. ์ฌ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์
|
193 |
imports = []
|
194 |
+
required_packages = set()
|
195 |
for line in code.split('\n'):
|
196 |
if line.startswith('import ') or line.startswith('from '):
|
197 |
imports.append(line.strip())
|
198 |
+
# ํจํค์ง ์ด๋ฆ ์ถ์ถ
|
199 |
+
if line.startswith('import '):
|
200 |
+
package = line.split('import ')[1].split()[0].split('.')[0]
|
201 |
+
else:
|
202 |
+
package = line.split('from ')[1].split()[0].split('.')[0]
|
203 |
+
required_packages.add(package)
|
204 |
|
205 |
if imports:
|
206 |
+
analysis.append("<h2>๐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2>")
|
207 |
analysis.append("<ul>")
|
208 |
for imp in imports:
|
209 |
analysis.append(f"<li><code>{imp}</code></li>")
|
210 |
analysis.append("</ul>")
|
211 |
+
|
212 |
+
# requirements.txt ์ค๋ช
์ถ๊ฐ
|
213 |
+
analysis.append("<h3>๐ Requirements.txt</h3>")
|
214 |
+
analysis.append("<p>์ด ์ฑ์ ์คํํ๊ธฐ ์ํด ํ์ํ ํจํค์ง๋ค์
๋๋ค:</p>")
|
215 |
+
analysis.append("<pre>")
|
216 |
+
for pkg in sorted(required_packages):
|
217 |
+
if pkg == 'gradio':
|
218 |
+
analysis.append("gradio==5.5.0")
|
219 |
+
else:
|
220 |
+
analysis.append(pkg)
|
221 |
+
analysis.append("</pre>")
|
222 |
|
223 |
# 2. ํจ์ ๋ถ์
|
224 |
functions = []
|
|
|
240 |
current_func = []
|
241 |
|
242 |
if functions:
|
243 |
+
analysis.append("<h2>๐ง ์ฃผ์ ํจ์ ์ค๋ช
</h2>")
|
244 |
for func in functions:
|
245 |
func_name = func.split('def ')[1].split('(')[0]
|
246 |
analysis.append(f"<h3><code>{func_name}</code></h3>")
|
247 |
analysis.append(f"<p>{get_function_description(func)}</p>")
|
248 |
+
# ํจ์ ํ๋ผ๋ฏธํฐ ๋ถ์
|
249 |
+
params = func.split('(')[1].split(')')[0]
|
250 |
+
if params.strip():
|
251 |
+
analysis.append("<p>ํ๋ผ๋ฏธํฐ:</p><ul>")
|
252 |
+
for param in params.split(','):
|
253 |
+
param = param.strip()
|
254 |
+
if param and param != 'self':
|
255 |
+
analysis.append(f"<li><code>{param}</code></li>")
|
256 |
+
analysis.append("</ul>")
|
257 |
|
258 |
# 3. UI ์ปดํฌ๋ํธ ๋ถ์
|
259 |
ui_components = []
|
|
|
264 |
ui_components.append(component)
|
265 |
|
266 |
if ui_components:
|
267 |
+
analysis.append("<h2>๐จ UI ๊ตฌ์ฑ์์</h2>")
|
268 |
+
analysis.append("<p>์ด ์ฑ์ ๋ค์๊ณผ ๊ฐ์ Gradio ์ปดํฌ๋ํธ๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค:</p>")
|
269 |
analysis.append("<ul>")
|
270 |
for component in ui_components:
|
271 |
analysis.append(f"<li><strong>{component}</strong>: {get_component_description(component)}</li>")
|
272 |
analysis.append("</ul>")
|
273 |
|
274 |
+
# 4. ํน์ง ๋ฐ ๊ธฐ๋ฅ
|
275 |
+
analysis.append("<h2>โจ ์ฃผ์ ํน์ง</h2>")
|
276 |
+
analysis.append("<ul>")
|
277 |
+
if 'theme=' in code:
|
278 |
+
analysis.append("<li>์ปค์คํ
ํ
๋ง ์ ์ฉ์ผ๋ก ์ผ๊ด๋ ๋์์ธ</li>")
|
279 |
+
if 'with gr.Row' in code:
|
280 |
+
analysis.append("<li>๋ฐ์ํ ๋ ์ด์์์ผ๋ก ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ ์ง์</li>")
|
281 |
+
if 'gr.State' in code:
|
282 |
+
analysis.append("<li>์ํ ๊ด๋ฆฌ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ง</li>")
|
283 |
+
if '.click(' in code:
|
284 |
+
analysis.append("<li>์ด๋ฒคํธ ํธ๋ค๋ง์ ํตํ ๋์ ์ํธ์์ฉ</li>")
|
285 |
+
analysis.append("</ul>")
|
286 |
+
|
287 |
+
# 5. ์คํ ๋ฐฉ๋ฒ
|
288 |
analysis.append("<h2>โถ๏ธ ์คํ ๋ฐฉ๋ฒ</h2>")
|
289 |
analysis.append("<ol>")
|
290 |
analysis.append("<li>'์คํํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ์ฌ Hugging Face Space์ ๋ฐฐํฌ</li>")
|
291 |
analysis.append("<li>์์ฑ๋ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์คํ</li>")
|
292 |
+
analysis.append("<li>ํ์ํ ์
๋ ฅ๊ฐ์ ์ ๊ณตํ๊ณ ์ํธ์์ฉ ์์</li>")
|
293 |
analysis.append("</ol>")
|
294 |
|
295 |
return "\n".join(analysis)
|