Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -161,7 +161,6 @@ os.environ["TRANSFORMERS_CACHE"] = cache_path
|
|
| 161 |
os.environ["HF_HUB_CACHE"] = cache_path
|
| 162 |
os.environ["HF_HOME"] = cache_path
|
| 163 |
|
| 164 |
-
|
| 165 |
# Hugging Face ํ ํฐ ์ค์
|
| 166 |
HF_TOKEN = os.getenv("HF_TOKEN")
|
| 167 |
if not HF_TOKEN:
|
|
@@ -190,8 +189,6 @@ try:
|
|
| 190 |
except Exception as e:
|
| 191 |
print(f"Error initializing FLUX model: {str(e)}")
|
| 192 |
pipe = None
|
| 193 |
-
|
| 194 |
-
|
| 195 |
|
| 196 |
# ์ด๋ฏธ์ง ์์ฑ ํจ์ ์ถ๊ฐ
|
| 197 |
@spaces.GPU
|
|
@@ -441,18 +438,17 @@ class Demo:
|
|
| 441 |
if not query or query.strip() == '':
|
| 442 |
query = get_random_placeholder()
|
| 443 |
|
| 444 |
-
# ํ์ผ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ์๋
|
| 445 |
-
context = ""
|
| 446 |
-
if self.last_analysis:
|
| 447 |
-
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
# ์ด๋ฏธ์ง
|
| 453 |
needs_image = '์ด๋ฏธ์ง' in query or '๊ทธ๋ฆผ' in query or 'image' in query.lower()
|
| 454 |
image_prompt = None
|
| 455 |
-
|
| 456 |
if needs_image:
|
| 457 |
for keyword in ['์ด๋ฏธ์ง:', '๊ทธ๋ฆผ:', 'image:']:
|
| 458 |
if keyword in query.lower():
|
|
@@ -463,12 +459,11 @@ class Demo:
|
|
| 463 |
|
| 464 |
messages = [{'role': Role.SYSTEM, 'content': _setting['system']}]
|
| 465 |
messages.append({'role': Role.USER, 'content': query})
|
| 466 |
-
|
| 467 |
system_message = messages[0]['content']
|
| 468 |
claude_messages = [{"role": "user", "content": query}]
|
| 469 |
|
| 470 |
-
# ์
๋ก๋๋
|
| 471 |
-
for filename, file in self.uploaded_files.items():
|
| 472 |
if any(filename.lower().endswith(ext) for ext in ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']):
|
| 473 |
try:
|
| 474 |
image = Image.open(file)
|
|
@@ -518,10 +513,8 @@ class Demo:
|
|
| 518 |
]
|
| 519 |
await asyncio.sleep(0)
|
| 520 |
collected_content = content
|
| 521 |
-
|
| 522 |
except Exception as claude_error:
|
| 523 |
print(f"Falling back to OpenAI API due to Claude error: {str(claude_error)}")
|
| 524 |
-
|
| 525 |
async for content in try_openai_api(openai_messages):
|
| 526 |
yield [
|
| 527 |
"",
|
|
@@ -533,88 +526,13 @@ class Demo:
|
|
| 533 |
collected_content = content
|
| 534 |
|
| 535 |
if collected_content:
|
| 536 |
-
#
|
| 537 |
-
|
| 538 |
-
|
| 539 |
-
|
| 540 |
-
if pipe is not None:
|
| 541 |
-
image = generate_image(
|
| 542 |
-
prompt=image_prompt,
|
| 543 |
-
height=512,
|
| 544 |
-
width=512,
|
| 545 |
-
steps=8,
|
| 546 |
-
scales=3.5,
|
| 547 |
-
seed=random.randint(1, 10000)
|
| 548 |
-
)
|
| 549 |
-
|
| 550 |
-
buffered = BytesIO()
|
| 551 |
-
image.save(buffered, format="PNG")
|
| 552 |
-
img_str = base64.b64encode(buffered.getvalue()).decode()
|
| 553 |
-
|
| 554 |
-
image_html = f'''
|
| 555 |
-
<div class="generated-image" style="margin: 20px 0; text-align: center;">
|
| 556 |
-
<h3 style="color: #333; margin-bottom: 10px;">Generated Image:</h3>
|
| 557 |
-
<img src="data:image/png;base64,{img_str}"
|
| 558 |
-
style="max-width: 100%;
|
| 559 |
-
border-radius: 10px;
|
| 560 |
-
box-shadow: 0 4px 8px rgba(0,0,0,0.1);">
|
| 561 |
-
<p style="color: #666; margin-top: 10px; font-style: italic;">
|
| 562 |
-
Prompt: {html.escape(image_prompt)}
|
| 563 |
-
</p>
|
| 564 |
-
</div>
|
| 565 |
-
'''
|
| 566 |
-
|
| 567 |
-
if '```html' in collected_content:
|
| 568 |
-
collected_content = collected_content.replace('```html\n', f'```html\n{image_html}')
|
| 569 |
-
else:
|
| 570 |
-
collected_content = f'```html\n{image_html}\n```\n{collected_content}'
|
| 571 |
-
|
| 572 |
-
print("Image generation successful")
|
| 573 |
-
else:
|
| 574 |
-
raise Exception("FLUX model not initialized")
|
| 575 |
-
|
| 576 |
-
except Exception as e:
|
| 577 |
-
print(f"Image generation error: {str(e)}")
|
| 578 |
-
error_message = f'''
|
| 579 |
-
<div style="color: #ff4d4f; padding: 10px; margin: 10px 0;
|
| 580 |
-
border-left: 4px solid #ff4d4f; background: #fff2f0;">
|
| 581 |
-
<p>Failed to generate image: {str(e)}</p>
|
| 582 |
-
</div>
|
| 583 |
-
'''
|
| 584 |
-
if '```html' in collected_content:
|
| 585 |
-
collected_content = collected_content.replace('```html\n', f'```html\n{error_message}')
|
| 586 |
-
else:
|
| 587 |
-
collected_content = f'```html\n{error_message}\n```\n{collected_content}'
|
| 588 |
-
|
| 589 |
-
# ์
๋ก๋๋ ์ด๋ฏธ์ง ํ์
|
| 590 |
-
for filename, file in self.uploaded_files.items():
|
| 591 |
-
if any(filename.lower().endswith(ext) for ext in ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']):
|
| 592 |
-
try:
|
| 593 |
-
image = Image.open(file)
|
| 594 |
-
buffered = BytesIO()
|
| 595 |
-
image.save(buffered, format=image.format)
|
| 596 |
-
img_str = base64.b64encode(buffered.getvalue()).decode()
|
| 597 |
-
|
| 598 |
-
uploaded_image_html = f'''
|
| 599 |
-
<div class="uploaded-image" style="margin: 20px 0; text-align: center;">
|
| 600 |
-
<h3 style="color: #333; margin-bottom: 10px;">Uploaded Image: {html.escape(filename)}</h3>
|
| 601 |
-
<img src="data:image/{image.format.lower()};base64,{img_str}"
|
| 602 |
-
style="max-width: 100%;
|
| 603 |
-
border-radius: 10px;
|
| 604 |
-
box-shadow: 0 4px 8px rgba(0,0,0,0.1);">
|
| 605 |
-
</div>
|
| 606 |
-
'''
|
| 607 |
-
|
| 608 |
-
if '```html' in collected_content:
|
| 609 |
-
collected_content = collected_content.replace('```html\n', f'```html\n{uploaded_image_html}')
|
| 610 |
-
else:
|
| 611 |
-
collected_content = f'```html\n{uploaded_image_html}\n```\n{collected_content}'
|
| 612 |
-
except Exception as e:
|
| 613 |
-
print(f"Error displaying uploaded image: {str(e)}")
|
| 614 |
-
|
| 615 |
yield [
|
| 616 |
-
collected_content,
|
| 617 |
-
send_to_sandbox(
|
| 618 |
gr.update(active_key="render"),
|
| 619 |
gr.update(open=False)
|
| 620 |
]
|
|
@@ -635,8 +553,8 @@ class Demo:
|
|
| 635 |
return "No files uploaded"
|
| 636 |
|
| 637 |
results = []
|
| 638 |
-
self.last_analysis.clear()
|
| 639 |
-
self.uploaded_files.clear()
|
| 640 |
|
| 641 |
for file in files:
|
| 642 |
try:
|
|
@@ -714,10 +632,6 @@ class Demo:
|
|
| 714 |
self.uploaded_files.clear()
|
| 715 |
return []
|
| 716 |
|
| 717 |
-
|
| 718 |
-
|
| 719 |
-
|
| 720 |
-
|
| 721 |
def update_file_state(self, analysis_result, files):
|
| 722 |
"""ํ์ผ ๋ถ์ ๊ฒฐ๊ณผ์ ํ์ผ ๊ฐ์ฒด ์
๋ฐ์ดํธ"""
|
| 723 |
self.file_state.last_analysis.update(analysis_result)
|
|
@@ -744,6 +658,7 @@ def send_to_sandbox(code):
|
|
| 744 |
frameborder="0"
|
| 745 |
></iframe>
|
| 746 |
"""
|
|
|
|
| 747 |
# ๋ฐฐํฌ ๊ด๋ จ ํจ์ ์ถ๊ฐ
|
| 748 |
def generate_space_name():
|
| 749 |
"""6์๋ฆฌ ๋๋ค ์๋ฌธ ์ด๋ฆ ์์ฑ"""
|
|
@@ -759,7 +674,6 @@ def deploy_to_vercel(code: str):
|
|
| 759 |
# 6์๋ฆฌ ์๋ฌธ ํ๋ก์ ํธ ์ด๋ฆ ์์ฑ
|
| 760 |
project_name = ''.join(random.choice(string.ascii_lowercase) for i in range(6))
|
| 761 |
|
| 762 |
-
|
| 763 |
# Vercel API ์๋ํฌ์ธํธ
|
| 764 |
deploy_url = "https://api.vercel.com/v13/deployments"
|
| 765 |
|
|
@@ -773,7 +687,7 @@ def deploy_to_vercel(code: str):
|
|
| 773 |
package_json = {
|
| 774 |
"name": project_name,
|
| 775 |
"version": "1.0.0",
|
| 776 |
-
"private": True,
|
| 777 |
"dependencies": {
|
| 778 |
"vite": "^5.0.0"
|
| 779 |
},
|
|
@@ -792,7 +706,7 @@ def deploy_to_vercel(code: str):
|
|
| 792 |
},
|
| 793 |
{
|
| 794 |
"file": "package.json",
|
| 795 |
-
"data": json.dumps(package_json, indent=2)
|
| 796 |
}
|
| 797 |
]
|
| 798 |
|
|
@@ -812,7 +726,6 @@ def deploy_to_vercel(code: str):
|
|
| 812 |
"projectSettings": project_settings
|
| 813 |
}
|
| 814 |
|
| 815 |
-
|
| 816 |
deploy_response = requests.post(deploy_url, headers=headers, json=deploy_data)
|
| 817 |
|
| 818 |
if deploy_response.status_code != 200:
|
|
@@ -1178,8 +1091,6 @@ def create_main_interface():
|
|
| 1178 |
# ์ข์ธก ํจ๋
|
| 1179 |
with antd.Col(span=24, md=8):
|
| 1180 |
with antd.Flex(vertical=True, gap="middle", wrap=True):
|
| 1181 |
-
# macOS ์คํ์ผ ์๋์ฐ ํค๋
|
| 1182 |
-
# macOS ์คํ์ผ ์๋์ฐ ํค๋
|
| 1183 |
header = gr.HTML("""
|
| 1184 |
<div class="window-frame">
|
| 1185 |
<div class="window-header">
|
|
@@ -1204,7 +1115,6 @@ Use the "Generate" button for basic creation, "Enhance" button for prompt improv
|
|
| 1204 |
</div>
|
| 1205 |
""".format(get_image_base64('mouse.gif')))
|
| 1206 |
|
| 1207 |
-
|
| 1208 |
# ํ์ผ ์
๋ก๋ ์น์
|
| 1209 |
with gr.Group(elem_classes="file-upload-section"):
|
| 1210 |
file_upload = gr.File(
|
|
@@ -1296,18 +1206,16 @@ Use the "Generate" button for basic creation, "Enhance" button for prompt improv
|
|
| 1296 |
with antd.Tabs.Item(key="render"):
|
| 1297 |
sandbox = gr.HTML(elem_classes="html_content")
|
| 1298 |
|
| 1299 |
-
|
| 1300 |
demo_instance = Demo() # Demo ์ธ์คํด์ค ์์ฑ
|
| 1301 |
|
| 1302 |
-
|
| 1303 |
-
# ํ์ผ ์
๋ก๋ ๋ฒํผ ์ด๋ฒคํธ ์ฐ๊ฒฐ
|
| 1304 |
analyze_btn.click(
|
| 1305 |
-
fn=demo_instance.handle_file_upload,
|
| 1306 |
inputs=[file_upload],
|
| 1307 |
outputs=[file_analysis]
|
| 1308 |
)
|
| 1309 |
|
| 1310 |
-
|
| 1311 |
btn.click(
|
| 1312 |
fn=demo_instance.generation_code,
|
| 1313 |
inputs=[input, setting],
|
|
@@ -1318,7 +1226,6 @@ Use the "Generate" button for basic creation, "Enhance" button for prompt improv
|
|
| 1318 |
outputs=[input]
|
| 1319 |
)
|
| 1320 |
|
| 1321 |
-
|
| 1322 |
boost_btn.click(
|
| 1323 |
fn=handle_boost,
|
| 1324 |
inputs=[input],
|
|
@@ -1420,16 +1327,13 @@ Use the "Generate" button for basic creation, "Enhance" button for prompt improv
|
|
| 1420 |
|
| 1421 |
return demo
|
| 1422 |
|
| 1423 |
-
|
| 1424 |
-
|
| 1425 |
-
|
| 1426 |
# ๋ฉ์ธ ์คํ ๋ถ๋ถ
|
| 1427 |
if __name__ == "__main__":
|
| 1428 |
try:
|
| 1429 |
demo_instance = Demo() # Demo ์ธ์คํด์ค ์์ฑ
|
| 1430 |
demo = create_main_interface() # ์ธํฐํ์ด์ค ์์ฑ
|
| 1431 |
demo.queue(
|
| 1432 |
-
default_concurrency_limit=20,
|
| 1433 |
status_update_rate=10,
|
| 1434 |
api_open=False
|
| 1435 |
).launch(
|
|
@@ -1440,4 +1344,4 @@ if __name__ == "__main__":
|
|
| 1440 |
)
|
| 1441 |
except Exception as e:
|
| 1442 |
print(f"Initialization error: {e}")
|
| 1443 |
-
raise
|
|
|
|
| 161 |
os.environ["HF_HUB_CACHE"] = cache_path
|
| 162 |
os.environ["HF_HOME"] = cache_path
|
| 163 |
|
|
|
|
| 164 |
# Hugging Face ํ ํฐ ์ค์
|
| 165 |
HF_TOKEN = os.getenv("HF_TOKEN")
|
| 166 |
if not HF_TOKEN:
|
|
|
|
| 189 |
except Exception as e:
|
| 190 |
print(f"Error initializing FLUX model: {str(e)}")
|
| 191 |
pipe = None
|
|
|
|
|
|
|
| 192 |
|
| 193 |
# ์ด๋ฏธ์ง ์์ฑ ํจ์ ์ถ๊ฐ
|
| 194 |
@spaces.GPU
|
|
|
|
| 438 |
if not query or query.strip() == '':
|
| 439 |
query = get_random_placeholder()
|
| 440 |
|
| 441 |
+
# ํ์ผ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ํฌํจํ์ง ์์
|
| 442 |
+
# context = ""
|
| 443 |
+
# if self.last_analysis:
|
| 444 |
+
# context = "Based on the uploaded files:\n" + "\n".join(
|
| 445 |
+
# [f"\nFile '{filename}':\n{analysis}" for filename, analysis in self.last_analysis.items()]
|
| 446 |
+
# )
|
| 447 |
+
# query = f"{context}\n\nUser Query: {query}"
|
| 448 |
+
|
| 449 |
+
# ์ด๋ฏธ์ง ๊ด๋ จ ์ฒ๋ฆฌ๋ ๋ด๋ถ API ํธ์ถ์๋ง ์ฌ์ฉํ๊ณ ์ถ๋ ฅ ๊ฒฐ๊ณผ์๋ ๋ฐ์ํ์ง ์์
|
| 450 |
needs_image = '์ด๋ฏธ์ง' in query or '๊ทธ๋ฆผ' in query or 'image' in query.lower()
|
| 451 |
image_prompt = None
|
|
|
|
| 452 |
if needs_image:
|
| 453 |
for keyword in ['์ด๋ฏธ์ง:', '๊ทธ๋ฆผ:', 'image:']:
|
| 454 |
if keyword in query.lower():
|
|
|
|
| 459 |
|
| 460 |
messages = [{'role': Role.SYSTEM, 'content': _setting['system']}]
|
| 461 |
messages.append({'role': Role.USER, 'content': query})
|
|
|
|
| 462 |
system_message = messages[0]['content']
|
| 463 |
claude_messages = [{"role": "user", "content": query}]
|
| 464 |
|
| 465 |
+
# ์
๋ก๋๋ ํ์ผ์ด ์ด๋ฏธ์ง์ธ ๊ฒฝ์ฐ์๋ ๋ด๋ถ API ํธ์ถ์๋ง ์ฌ์ฉํ๊ณ ์ถ๋ ฅ์๋ ๋ฐ์ํ์ง ์์
|
| 466 |
+
for filename, file in self.uploaded_files.items():
|
| 467 |
if any(filename.lower().endswith(ext) for ext in ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']):
|
| 468 |
try:
|
| 469 |
image = Image.open(file)
|
|
|
|
| 513 |
]
|
| 514 |
await asyncio.sleep(0)
|
| 515 |
collected_content = content
|
|
|
|
| 516 |
except Exception as claude_error:
|
| 517 |
print(f"Falling back to OpenAI API due to Claude error: {str(claude_error)}")
|
|
|
|
| 518 |
async for content in try_openai_api(openai_messages):
|
| 519 |
yield [
|
| 520 |
"",
|
|
|
|
| 526 |
collected_content = content
|
| 527 |
|
| 528 |
if collected_content:
|
| 529 |
+
# ์ต์ข
์ถ๋ ฅ ์, API ์๋ต ๋ด์ฉ์ ์ ๋ถ ์ด๊ธฐํํ์ฌ
|
| 530 |
+
# ์
๋ก๋ํ ์ด๋ฏธ์ง, ํ๋กฌํํธ ์
๋ ฅ, ๊ทธ๋ฆฌ๊ณ ์ถ๋ ฅ ํ
์คํธ๊ฐ ์ ํ ๋ฐ์๋์ง ์๋๋ก ํจ.
|
| 531 |
+
collected_content = ""
|
| 532 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 533 |
yield [
|
| 534 |
+
collected_content, # ๋น ๋ฌธ์์ด ๋ฐํ
|
| 535 |
+
send_to_sandbox(""), # sandbox์๋ ๋น HTML ์ฝ๋ ์ ๋ฌ
|
| 536 |
gr.update(active_key="render"),
|
| 537 |
gr.update(open=False)
|
| 538 |
]
|
|
|
|
| 553 |
return "No files uploaded"
|
| 554 |
|
| 555 |
results = []
|
| 556 |
+
self.last_analysis.clear()
|
| 557 |
+
self.uploaded_files.clear()
|
| 558 |
|
| 559 |
for file in files:
|
| 560 |
try:
|
|
|
|
| 632 |
self.uploaded_files.clear()
|
| 633 |
return []
|
| 634 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 635 |
def update_file_state(self, analysis_result, files):
|
| 636 |
"""ํ์ผ ๋ถ์ ๊ฒฐ๊ณผ์ ํ์ผ ๊ฐ์ฒด ์
๋ฐ์ดํธ"""
|
| 637 |
self.file_state.last_analysis.update(analysis_result)
|
|
|
|
| 658 |
frameborder="0"
|
| 659 |
></iframe>
|
| 660 |
"""
|
| 661 |
+
|
| 662 |
# ๋ฐฐํฌ ๊ด๋ จ ํจ์ ์ถ๊ฐ
|
| 663 |
def generate_space_name():
|
| 664 |
"""6์๋ฆฌ ๋๋ค ์๋ฌธ ์ด๋ฆ ์์ฑ"""
|
|
|
|
| 674 |
# 6์๋ฆฌ ์๋ฌธ ํ๋ก์ ํธ ์ด๋ฆ ์์ฑ
|
| 675 |
project_name = ''.join(random.choice(string.ascii_lowercase) for i in range(6))
|
| 676 |
|
|
|
|
| 677 |
# Vercel API ์๋ํฌ์ธํธ
|
| 678 |
deploy_url = "https://api.vercel.com/v13/deployments"
|
| 679 |
|
|
|
|
| 687 |
package_json = {
|
| 688 |
"name": project_name,
|
| 689 |
"version": "1.0.0",
|
| 690 |
+
"private": True,
|
| 691 |
"dependencies": {
|
| 692 |
"vite": "^5.0.0"
|
| 693 |
},
|
|
|
|
| 706 |
},
|
| 707 |
{
|
| 708 |
"file": "package.json",
|
| 709 |
+
"data": json.dumps(package_json, indent=2)
|
| 710 |
}
|
| 711 |
]
|
| 712 |
|
|
|
|
| 726 |
"projectSettings": project_settings
|
| 727 |
}
|
| 728 |
|
|
|
|
| 729 |
deploy_response = requests.post(deploy_url, headers=headers, json=deploy_data)
|
| 730 |
|
| 731 |
if deploy_response.status_code != 200:
|
|
|
|
| 1091 |
# ์ข์ธก ํจ๋
|
| 1092 |
with antd.Col(span=24, md=8):
|
| 1093 |
with antd.Flex(vertical=True, gap="middle", wrap=True):
|
|
|
|
|
|
|
| 1094 |
header = gr.HTML("""
|
| 1095 |
<div class="window-frame">
|
| 1096 |
<div class="window-header">
|
|
|
|
| 1115 |
</div>
|
| 1116 |
""".format(get_image_base64('mouse.gif')))
|
| 1117 |
|
|
|
|
| 1118 |
# ํ์ผ ์
๋ก๋ ์น์
|
| 1119 |
with gr.Group(elem_classes="file-upload-section"):
|
| 1120 |
file_upload = gr.File(
|
|
|
|
| 1206 |
with antd.Tabs.Item(key="render"):
|
| 1207 |
sandbox = gr.HTML(elem_classes="html_content")
|
| 1208 |
|
|
|
|
| 1209 |
demo_instance = Demo() # Demo ์ธ์คํด์ค ์์ฑ
|
| 1210 |
|
| 1211 |
+
# ํ์ผ ์
๋ก๋ ๋ฒํผ ์ด๋ฒคํธ ์ฐ๊ฒฐ
|
|
|
|
| 1212 |
analyze_btn.click(
|
| 1213 |
+
fn=demo_instance.handle_file_upload,
|
| 1214 |
inputs=[file_upload],
|
| 1215 |
outputs=[file_analysis]
|
| 1216 |
)
|
| 1217 |
|
| 1218 |
+
# Generate ๋ฒํผ ์ด๋ฒคํธ ์ฐ๊ฒฐ
|
| 1219 |
btn.click(
|
| 1220 |
fn=demo_instance.generation_code,
|
| 1221 |
inputs=[input, setting],
|
|
|
|
| 1226 |
outputs=[input]
|
| 1227 |
)
|
| 1228 |
|
|
|
|
| 1229 |
boost_btn.click(
|
| 1230 |
fn=handle_boost,
|
| 1231 |
inputs=[input],
|
|
|
|
| 1327 |
|
| 1328 |
return demo
|
| 1329 |
|
|
|
|
|
|
|
|
|
|
| 1330 |
# ๋ฉ์ธ ์คํ ๋ถ๋ถ
|
| 1331 |
if __name__ == "__main__":
|
| 1332 |
try:
|
| 1333 |
demo_instance = Demo() # Demo ์ธ์คํด์ค ์์ฑ
|
| 1334 |
demo = create_main_interface() # ์ธํฐํ์ด์ค ์์ฑ
|
| 1335 |
demo.queue(
|
| 1336 |
+
default_concurrency_limit=20,
|
| 1337 |
status_update_rate=10,
|
| 1338 |
api_open=False
|
| 1339 |
).launch(
|
|
|
|
| 1344 |
)
|
| 1345 |
except Exception as e:
|
| 1346 |
print(f"Initialization error: {e}")
|
| 1347 |
+
raise
|