openfree commited on
Commit
8132686
ยท
verified ยท
1 Parent(s): c016c07

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -15
app.py CHANGED
@@ -145,7 +145,7 @@ def get_package_name(import_name):
145
  return None
146
  return IMPORT_TO_PACKAGE.get(base_import, base_import)
147
 
148
- def analyze_code(code: str) -> str:
149
  """์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ HTML ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜"""
150
  analysis = []
151
 
@@ -239,6 +239,38 @@ def analyze_code(code: str) -> str:
239
  analysis.append(f"<li><strong>{component}</strong></li>")
240
  analysis.append("</ul>")
241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  return "\n".join(analysis)
243
 
244
  async def try_claude_api(system_message, claude_messages, timeout=15):
@@ -450,12 +482,15 @@ def deploy_to_huggingface(code: str, token: str):
450
 
451
  class Demo:
452
  def __init__(self):
453
- pass
454
-
455
  async def generation_code(self, query: Optional[str], _setting: Dict[str, str], _history: Optional[History]):
456
  if not query or query.strip() == '':
457
  query = random.choice(DEMO_LIST)['description']
458
 
 
 
 
459
  if _history is None:
460
  _history = []
461
 
@@ -480,7 +515,8 @@ class Demo:
480
  collected_content = None
481
  try:
482
  async for content in try_claude_api(system_message, claude_messages):
483
- code = content
 
484
  yield code
485
  collected_content = code
486
 
@@ -488,7 +524,8 @@ class Demo:
488
  print(f"Falling back to OpenAI API due to Claude error: {str(claude_error)}")
489
 
490
  async for content in try_openai_api(openai_messages):
491
- code = content
 
492
  yield code
493
  collected_content = code
494
 
@@ -500,13 +537,17 @@ class Demo:
500
  raise ValueError(f'Error calling APIs: {str(e)}')
501
 
502
  def clear_history(self):
 
503
  return []
 
 
 
504
 
505
  # ์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ
506
  example_prompts = [
507
- "๋งŒ๋…„๋‹ฌ๋ ฅ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ๋…„๋„์™€ ์›”์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์›”์˜ ๋‹ฌ๋ ฅ์ด ํ‘œ์‹œ๋˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.",
508
  "BMI ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ํ‚ค์™€ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด BMI ์ง€์ˆ˜์™€ ๋น„๋งŒ๋„๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.",
509
- "๊ฐ„๋‹จํ•œ ๋ฉ”๋ชจ์žฅ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ๋ชฉ๋ก์— ํ‘œ์‹œ๋˜๋ฉฐ, ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
510
  "๋‹จ์œ„ ๋ณ€ํ™˜๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ๊ธธ์ด(m, cm, km ๋“ฑ), ๋ฌด๊ฒŒ(kg, g ๋“ฑ), ์˜จ๋„(์„ญ์”จ, ํ™”์”จ) ๋“ฑ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.",
511
  "ํฌ๋ชจ๋„๋กœ ํƒ€์ด๋จธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. 25๋ถ„ ์ง‘์ค‘, 5๋ถ„ ํœด์‹์„ ๋ฐ˜๋ณตํ•˜๋Š” ํƒ€์ด๋จธ๋กœ, ์‚ฌ์ดํด ํšŸ์ˆ˜๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค."
512
  ]
@@ -575,6 +616,7 @@ with gr.Blocks(css=css) as demo:
575
  "system": SystemPrompt,
576
  })
577
  is_generating = gr.State(False)
 
578
 
579
  gr.HTML("""
580
  <div class="header">
@@ -617,7 +659,7 @@ with gr.Blocks(css=css) as demo:
617
  with gr.TabItem("๋ถ„์„"):
618
  code_analysis = gr.HTML(label="์ฝ”๋“œ ๋ถ„์„")
619
 
620
- # Box ๋Œ€์‹  div๋กœ ๋ณ€๊ฒฝ
621
  with gr.Group(elem_classes="deploy-section"):
622
  gr.HTML("<h3>๋ฐฐํฌ ์„ค์ •</h3>")
623
  hf_token = gr.Textbox(
@@ -636,14 +678,14 @@ with gr.Blocks(css=css) as demo:
636
  """)
637
 
638
  # ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
639
- def start_generating():
640
- return "๐Ÿ”„ ์ฝ”๋“œ ์ƒ์„ฑ ์ค‘...", gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), True
641
-
642
  def end_generating():
643
  return "", gr.update(interactive=True), gr.update(interactive=True), gr.update(interactive=True), False
644
 
645
- def update_code_analysis(code):
646
- analysis = analyze_code(code)
647
  return analysis
648
 
649
  def handle_boost(prompt):
@@ -652,14 +694,15 @@ with gr.Blocks(css=css) as demo:
652
 
653
  generate_btn.click(
654
  fn=start_generating,
655
- outputs=[status_html, generate_btn, boost_btn, clear_btn, is_generating]
 
656
  ).then(
657
  fn=demo_instance.generation_code,
658
  inputs=[input_text, setting, history],
659
  outputs=code_output
660
  ).then(
661
  fn=update_code_analysis,
662
- inputs=[code_output],
663
  outputs=[code_analysis]
664
  ).then(
665
  fn=end_generating,
 
145
  return None
146
  return IMPORT_TO_PACKAGE.get(base_import, base_import)
147
 
148
+ def analyze_code(code: str, query: str = "") -> str:
149
  """์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ HTML ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜"""
150
  analysis = []
151
 
 
239
  analysis.append(f"<li><strong>{component}</strong></li>")
240
  analysis.append("</ul>")
241
 
242
+ # 4. ํ”„๋กฌํ”„ํŠธ ๋Œ€์‘ ๋ถ„์„
243
+ if query:
244
+ analysis.append("<h2>๐Ÿง  ํ”„๋กฌํ”„ํŠธ ๋Œ€์‘ ๋ถ„์„</h2>")
245
+ analysis.append(f"<p>์š”์ฒญํ•˜์‹  <strong>\"{query}\"</strong>์— ๋Œ€ํ•œ ๋Œ€์‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:</p>")
246
+
247
+ # ์ฃผ์š” ๊ธฐ๋Šฅ ๋ถ„์„
248
+ features = []
249
+ if "๊ณ„์‚ฐ๊ธฐ" in query or "๊ณ„์‚ฐ" in query:
250
+ if "BMI" in code:
251
+ features.append("BMI ๊ณ„์‚ฐ ๊ธฐ๋Šฅ")
252
+ if "๋‹จ์œ„ ๋ณ€ํ™˜" in query and ("convert" in code or "๋ณ€ํ™˜" in code):
253
+ features.append("๋‹จ์œ„ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ")
254
+ if "๋‹ฌ๋ ฅ" in query and "calendar" in code:
255
+ features.append("๋‹ฌ๋ ฅ ํ‘œ์‹œ ๊ธฐ๋Šฅ")
256
+ if "๋ฉ”๋ชจ" in query and ("์ €์žฅ" in code or "save" in code):
257
+ features.append("๋ฉ”๋ชจ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ")
258
+ if "ํƒ€์ด๋จธ" in query and ("timer" in code or "ํƒ€์ด๋จธ" in code):
259
+ features.append("ํƒ€์ด๋จธ ๊ธฐ๋Šฅ")
260
+
261
+ # ์ผ๋ฐ˜์ ์ธ ๋ถ„์„ ์ถ”๊ฐ€
262
+ features.append("์ง๊ด€์ ์ธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค")
263
+ features.append("์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒ€์ฆ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ")
264
+ features.append("๋ชจ๋˜ํ•œ ๋””์ž์ธ๊ณผ ๋ ˆ์ด์•„์›ƒ")
265
+
266
+ if features:
267
+ analysis.append("<ul>")
268
+ for feature in features:
269
+ analysis.append(f"<li>{feature}</li>")
270
+ analysis.append("</ul>")
271
+
272
+ analysis.append("<p>์ด ์ฝ”๋“œ๋Š” Gradio๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์š”์ฒญํ•˜์‹  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ๊ณผ ์ง๊ด€์ ์ธ UI๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.</p>")
273
+
274
  return "\n".join(analysis)
275
 
276
  async def try_claude_api(system_message, claude_messages, timeout=15):
 
482
 
483
  class Demo:
484
  def __init__(self):
485
+ self.current_query = ""
486
+
487
  async def generation_code(self, query: Optional[str], _setting: Dict[str, str], _history: Optional[History]):
488
  if not query or query.strip() == '':
489
  query = random.choice(DEMO_LIST)['description']
490
 
491
+ # ํ˜„์žฌ ์ฟผ๋ฆฌ ์ €์žฅ
492
+ self.current_query = query
493
+
494
  if _history is None:
495
  _history = []
496
 
 
515
  collected_content = None
516
  try:
517
  async for content in try_claude_api(system_message, claude_messages):
518
+ # ์ฝ”๋“œ ๋ธ”๋ก ํ‘œ์‹œ ์ œ๊ฑฐ
519
+ code = remove_code_block(content)
520
  yield code
521
  collected_content = code
522
 
 
524
  print(f"Falling back to OpenAI API due to Claude error: {str(claude_error)}")
525
 
526
  async for content in try_openai_api(openai_messages):
527
+ # ์ฝ”๋“œ ๋ธ”๋ก ํ‘œ์‹œ ์ œ๊ฑฐ
528
+ code = remove_code_block(content)
529
  yield code
530
  collected_content = code
531
 
 
537
  raise ValueError(f'Error calling APIs: {str(e)}')
538
 
539
  def clear_history(self):
540
+ self.current_query = ""
541
  return []
542
+
543
+ def get_current_query(self):
544
+ return self.current_query
545
 
546
  # ์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ
547
  example_prompts = [
548
+ "ํ•œ๊ธ€ ์ž…๋ ฅ์‹œ ์Œ์„ฑ ์ƒ์„ฑ TTS๋ฅผ ๊ตฌ๊ธ€ gtts๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ•˜๋ผ.",
549
  "BMI ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ํ‚ค์™€ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด BMI ์ง€์ˆ˜์™€ ๋น„๋งŒ๋„๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.",
550
+ "MBTI ์ง„๋‹จ ์„œ๋น„์Šค: 10๊ฐ€์ง€ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€ ์„ ํƒํ•˜๋ฉด 16๊ฐ€์ง€ ์œ ํ˜• ์ง„๋‹จ๊ณผ ์ƒ์„ธ ์„ค๋ช…์„ ํ•˜๋ผ",
551
  "๋‹จ์œ„ ๋ณ€ํ™˜๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ๊ธธ์ด(m, cm, km ๋“ฑ), ๋ฌด๊ฒŒ(kg, g ๋“ฑ), ์˜จ๋„(์„ญ์”จ, ํ™”์”จ) ๋“ฑ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.",
552
  "ํฌ๋ชจ๋„๋กœ ํƒ€์ด๋จธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. 25๋ถ„ ์ง‘์ค‘, 5๋ถ„ ํœด์‹์„ ๋ฐ˜๋ณตํ•˜๋Š” ํƒ€์ด๋จธ๋กœ, ์‚ฌ์ดํด ํšŸ์ˆ˜๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค."
553
  ]
 
616
  "system": SystemPrompt,
617
  })
618
  is_generating = gr.State(False)
619
+ current_query = gr.State("")
620
 
621
  gr.HTML("""
622
  <div class="header">
 
659
  with gr.TabItem("๋ถ„์„"):
660
  code_analysis = gr.HTML(label="์ฝ”๋“œ ๋ถ„์„")
661
 
662
+ # Group์œผ๋กœ ๋ณ€๊ฒฝ
663
  with gr.Group(elem_classes="deploy-section"):
664
  gr.HTML("<h3>๋ฐฐํฌ ์„ค์ •</h3>")
665
  hf_token = gr.Textbox(
 
678
  """)
679
 
680
  # ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
681
+ def start_generating(query):
682
+ return "๐Ÿ”„ ์ฝ”๋“œ ์ƒ์„ฑ ์ค‘...", gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), True, query
683
+
684
  def end_generating():
685
  return "", gr.update(interactive=True), gr.update(interactive=True), gr.update(interactive=True), False
686
 
687
+ def update_code_analysis(code, query):
688
+ analysis = analyze_code(code, query)
689
  return analysis
690
 
691
  def handle_boost(prompt):
 
694
 
695
  generate_btn.click(
696
  fn=start_generating,
697
+ inputs=[input_text],
698
+ outputs=[status_html, generate_btn, boost_btn, clear_btn, is_generating, current_query]
699
  ).then(
700
  fn=demo_instance.generation_code,
701
  inputs=[input_text, setting, history],
702
  outputs=code_output
703
  ).then(
704
  fn=update_code_analysis,
705
+ inputs=[code_output, current_query],
706
  outputs=[code_analysis]
707
  ).then(
708
  fn=end_generating,