aiqtech commited on
Commit
a78af19
ยท
verified ยท
1 Parent(s): 5576ce9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +159 -63
app.py CHANGED
@@ -2,7 +2,7 @@
2
  โšก Speed-Optimized Multi-Agent RAG System for Complex Questions
3
  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ, ๋™์  ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ณต์žกํ•œ ์งˆ๋ฌธ๋„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ
4
  Enhanced with multi-language support and improved error handling
5
- (์บ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ ๋ฒ„์ „)
6
  """
7
 
8
  import os
@@ -496,11 +496,11 @@ class ResponseCleaner:
496
 
497
 
498
  # ============================================================================
499
- # ํ†ตํ•ฉ ์ตœ์ ํ™” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ (์บ์‹ฑ ์ œ๊ฑฐ ๋ฒ„์ „)
500
  # ============================================================================
501
 
502
  class SpeedOptimizedMultiAgentSystem:
503
- """์†๋„ ์ตœ์ ํ™”๋œ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ (์บ์‹ฑ ์—†์Œ)"""
504
 
505
  def __init__(self):
506
  self.llm = OptimizedFireworksClient()
@@ -514,92 +514,164 @@ class SpeedOptimizedMultiAgentSystem:
514
  # ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํ’€
515
  self.executor = ThreadPoolExecutor(max_workers=4)
516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
517
  def _init_compact_prompts(self, lang: str = 'ko') -> Dict:
518
- """์••์ถ•๋œ ๊ณ ํšจ์œจ ํ”„๋กฌํ”„ํŠธ (์–ธ์–ด๋ณ„)"""
 
 
519
  prompts = {
520
  'ko': {
521
- AgentRole.SUPERVISOR: """[๊ฐ๋…์ž-๊ตฌ์กฐ์„ค๊ณ„]
 
522
  ์ฆ‰์‹œ๋ถ„์„: ํ•ต์‹ฌ์˜๋„+ํ•„์š”์ •๋ณด+๋‹ต๋ณ€๊ตฌ์กฐ
523
  ์ถœ๋ ฅ: 5๊ฐœ ํ•ต์‹ฌํฌ์ธํŠธ(๊ฐ 1๋ฌธ์žฅ)
524
- ์ถ”๋ก ์ฒด๊ณ„ ๋ช…์‹œ""",
 
525
 
526
- AgentRole.CREATIVE: """[์ฐฝ์˜์„ฑ์ƒ์„ฑ์ž]
 
527
  ์ž…๋ ฅ๊ตฌ์กฐ ๋”ฐ๋ผ ์ฐฝ์˜์  ํ™•์žฅ
528
  ์‹ค์šฉ์˜ˆ์‹œ+ํ˜์‹ ์ ‘๊ทผ+๊ตฌ์ฒด์กฐ์–ธ
529
- ๋ถˆํ•„์š”์„ค๋ช… ์ œ๊ฑฐ""",
 
530
 
531
- AgentRole.CRITIC: """[๋น„ํ‰์ž-๊ฒ€์ฆ]
 
532
  ์‹ ์†๊ฒ€ํ† : ์ •ํ™•์„ฑ/๋…ผ๋ฆฌ์„ฑ/์‹ค์šฉ์„ฑ
533
  ๊ฐœ์„ ํฌ์ธํŠธ 3๊ฐœ๋งŒ
534
- ๊ฐ 2๋ฌธ์žฅ ์ด๋‚ด""",
 
535
 
536
- AgentRole.FINALIZER: """[์ตœ์ข…ํ†ตํ•ฉ]
 
537
  ๋ชจ๋“ ์˜๊ฒฌ ์ข…ํ•ฉโ†’์ตœ์ ๋‹ต๋ณ€
538
  ๋ช…ํ™•๊ตฌ์กฐ+์‹ค์šฉ์ •๋ณด+์ฐฝ์˜๊ท ํ˜•
539
- ๋ฐ”๋กœ ํ•ต์‹ฌ ๋‚ด์šฉ๋ถ€ํ„ฐ ์‹œ์ž‘. ๋ถˆํ•„์š”ํ•œ ํ—ค๋”๋‚˜ ๋งˆํฌ์—… ์—†์ด. ๋งˆํฌ๋‹ค์šด ํ—ค๋”(#, ##, ###) ์‚ฌ์šฉ ๊ธˆ์ง€."""
 
540
  },
541
  'en': {
542
- AgentRole.SUPERVISOR: """[Supervisor-Structure]
 
543
  Immediate analysis: core intent+required info+answer structure
544
  Output: 5 key points (1 sentence each)
545
- Clear reasoning framework""",
 
546
 
547
- AgentRole.CREATIVE: """[Creative Generator]
 
548
  Follow structure, expand creatively
549
  Practical examples+innovative approach+specific advice
550
- Remove unnecessary explanations""",
 
551
 
552
- AgentRole.CRITIC: """[Critic-Verification]
 
553
  Quick review: accuracy/logic/practicality
554
  Only 3 improvement points
555
- Max 2 sentences each""",
 
556
 
557
- AgentRole.FINALIZER: """[Final Integration]
 
558
  Synthesize all inputsโ†’optimal answer
559
  Clear structure+practical info+creative balance
560
- Start with core content directly. No unnecessary headers or markup. No markdown headers (#, ##, ###)."""
 
561
  },
562
  'ja': {
563
- AgentRole.SUPERVISOR: """[็›ฃ็ฃ่€…-ๆง‹้€ ่จญ่จˆ]
 
564
  ๅณๆ™‚ๅˆ†ๆž๏ผšๆ ธๅฟƒๆ„ๅ›ณ+ๅฟ…่ฆๆƒ…ๅ ฑ+ๅ›ž็ญ”ๆง‹้€ 
565
  ๅ‡บๅŠ›๏ผš5ใคใฎๆ ธๅฟƒใƒใ‚คใƒณใƒˆ๏ผˆๅ„1ๆ–‡๏ผ‰
566
- ๆŽจ่ซ–ไฝ“็ณปๆ˜Ž็คบ""",
 
567
 
568
- AgentRole.CREATIVE: """[ๅ‰ต้€ ๆ€ง็”Ÿๆˆ่€…]
 
569
  ๅ…ฅๅŠ›ๆง‹้€ ใซๅพ“ใฃใฆๅ‰ต้€ ็š„ๆ‹กๅผต
570
  ๅฎŸ็”จไพ‹+้ฉๆ–ฐ็š„ใ‚ขใƒ—ใƒญใƒผใƒ+ๅ…ทไฝ“็š„ใ‚ขใƒ‰ใƒใ‚คใ‚น
571
- ไธ่ฆใช่ชฌๆ˜Žๅ‰Š้™ค""",
 
572
 
573
- AgentRole.CRITIC: """[ๆ‰น่ฉ•่€…-ๆคœ่จผ]
 
574
  ่ฟ…้€Ÿใƒฌใƒ“ใƒฅใƒผ๏ผšๆญฃ็ขบๆ€ง/่ซ–็†ๆ€ง/ๅฎŸ็”จๆ€ง
575
  ๆ”นๅ–„ใƒใ‚คใƒณใƒˆ3ใคใฎใฟ
576
- ๅ„2ๆ–‡ไปฅๅ†…""",
 
577
 
578
- AgentRole.FINALIZER: """[ๆœ€็ต‚็ตฑๅˆ]
 
579
  ๅ…จๆ„่ฆ‹็ตฑๅˆโ†’ๆœ€้ฉๅ›ž็ญ”
580
  ๆ˜Ž็ขบๆง‹้€ +ๅฎŸ็”จๆƒ…ๅ ฑ+ๅ‰ต้€ ๆ€งใƒใƒฉใƒณใ‚น
581
- ๆ ธๅฟƒๅ†…ๅฎนใ‹ใ‚‰็›ดๆŽฅ้–‹ๅง‹ใ€‚ไธ่ฆใชใƒ˜ใƒƒใƒ€ใƒผใ‚„ใƒžใƒผใ‚ฏใ‚ขใƒƒใƒ—ใชใ—ใ€‚ใƒžใƒผใ‚ฏใƒ€ใ‚ฆใƒณใƒ˜ใƒƒใƒ€ใƒผ๏ผˆ#ใ€##ใ€###๏ผ‰ไฝฟ็”จ็ฆๆญขใ€‚"""
 
582
  },
583
  'zh': {
584
- AgentRole.SUPERVISOR: """[ไธป็ฎก-็ป“ๆž„่ฎพ่ฎก]
 
585
  ็ซ‹ๅณๅˆ†ๆž๏ผšๆ ธๅฟƒๆ„ๅ›พ+ๆ‰€้œ€ไฟกๆฏ+็ญ”ๆกˆ็ป“ๆž„
586
  ่พ“ๅ‡บ๏ผš5ไธชๆ ธๅฟƒ่ฆ็‚น๏ผˆๆฏไธช1ๅฅ๏ผ‰
587
- ๆŽจ็†ไฝ“็ณปๆ˜Ž็กฎ""",
 
588
 
589
- AgentRole.CREATIVE: """[ๅˆ›ๆ„็”Ÿๆˆๅ™จ]
 
590
  ๆŒ‰็ป“ๆž„ๅˆ›้€ ๆ€งๆ‰ฉๅฑ•
591
  ๅฎž็”จ็คบไพ‹+ๅˆ›ๆ–ฐๆ–นๆณ•+ๅ…ทไฝ“ๅปบ่ฎฎ
592
- ๅˆ ้™คไธๅฟ…่ฆ็š„่งฃ้‡Š""",
 
593
 
594
- AgentRole.CRITIC: """[่ฏ„่ฎบๅฎถ-้ชŒ่ฏ]
 
595
  ๅฟซ้€ŸๅฎกๆŸฅ๏ผšๅ‡†็กฎๆ€ง/้€ป่พ‘ๆ€ง/ๅฎž็”จๆ€ง
596
  ไป…3ไธชๆ”น่ฟ›็‚น
597
- ๆฏไธชๆœ€ๅคš2ๅฅ""",
 
598
 
599
- AgentRole.FINALIZER: """[ๆœ€็ปˆๆ•ดๅˆ]
 
600
  ็ปผๅˆๆ‰€ๆœ‰ๆ„่งโ†’ๆœ€ไฝณ็ญ”ๆกˆ
601
  ๆธ…ๆ™ฐ็ป“ๆž„+ๅฎž็”จไฟกๆฏ+ๅˆ›ๆ„ๅนณ่กก
602
- ็›ดๆŽฅไปŽๆ ธๅฟƒๅ†…ๅฎนๅผ€ๅง‹ใ€‚ๆ— ้œ€ไธๅฟ…่ฆ็š„ๆ ‡้ข˜ๆˆ–ๆ ‡่ฎฐใ€‚็ฆๆญขไฝฟ็”จMarkdownๆ ‡้ข˜๏ผˆ#ใ€##ใ€###๏ผ‰ใ€‚"""
 
603
  }
604
  }
605
 
@@ -612,7 +684,7 @@ Start with core content directly. No unnecessary headers or markup. No markdown
612
  show_progress: bool = True,
613
  lang: str = None
614
  ) -> AsyncGenerator[Tuple[str, str], None]:
615
- """๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ (์บ์‹ฑ ์—†์Œ)"""
616
 
617
  start_time = time.time()
618
 
@@ -620,7 +692,7 @@ Start with core content directly. No unnecessary headers or markup. No markdown
620
  if lang is None:
621
  lang = self.language_detector.detect_language(query)
622
 
623
- # ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ ์„ค์ •
624
  self.compact_prompts = self._init_compact_prompts(lang)
625
 
626
  search_context = self._format_search_results(search_results)
@@ -648,22 +720,26 @@ Start with core content directly. No unnecessary headers or markup. No markdown
648
  ์งˆ๋ฌธ: {query}
649
  ๊ฒ€์ƒ‰๊ฒฐ๊ณผ: {search_context}
650
  ์ถ”๋ก ํŒจํ„ด: {reasoning_pattern}
651
- ์ฆ‰์‹œ ํ•ต์‹ฌ๊ตฌ์กฐ 5๊ฐœ ์ œ์‹œ""",
 
652
  'en': f"""
653
  Question: {query}
654
  Search results: {search_context}
655
  Reasoning pattern: {reasoning_pattern}
656
- Immediately provide 5 key structures""",
 
657
  'ja': f"""
658
  ่ณชๅ•: {query}
659
  ๆคœ็ดข็ตๆžœ: {search_context}
660
  ๆŽจ่ซ–ใƒ‘ใ‚ฟใƒผใƒณ: {reasoning_pattern}
661
- ๅณๅบงใซ5ใคใฎๆ ธๅฟƒๆง‹้€ ใ‚’ๆ็คบ""",
 
662
  'zh': f"""
663
  ้—ฎ้ข˜: {query}
664
  ๆœ็ดข็ป“ๆžœ: {search_context}
665
  ๆŽจ็†ๆจกๅผ: {reasoning_pattern}
666
- ็ซ‹ๅณๆไพ›5ไธชๆ ธๅฟƒ็ป“ๆž„"""
 
667
  }
668
 
669
  supervisor_prompt = supervisor_prompt_templates.get(lang, supervisor_prompt_templates['en'])
@@ -708,22 +784,26 @@ Immediately provide 5 key structures""",
708
  ์งˆ๋ฌธ: {query}
709
  ๊ฐ๋…์ž๊ตฌ์กฐ: {supervisor_response}
710
  ๊ฒ€์ƒ‰๊ฒฐ๊ณผ: {search_context}
711
- ์ฐฝ์˜์ +์‹ค์šฉ์  ๋‹ต๋ณ€ ์ฆ‰์‹œ์ƒ์„ฑ""",
 
712
  'en': f"""
713
  Question: {query}
714
  Supervisor structure: {supervisor_response}
715
  Search results: {search_context}
716
- Generate creative+practical answer immediately""",
 
717
  'ja': f"""
718
  ่ณชๅ•: {query}
719
  ็›ฃ็ฃ่€…ๆง‹้€ : {supervisor_response}
720
  ๆคœ็ดข็ตๆžœ: {search_context}
721
- ๅ‰ต้€ ็š„+ๅฎŸ็”จ็š„ๅ›ž็ญ”ๅณๅบง็”Ÿๆˆ""",
 
722
  'zh': f"""
723
  ้—ฎ้ข˜: {query}
724
  ไธป็ฎก็ป“ๆž„: {supervisor_response}
725
  ๆœ็ดข็ป“ๆžœ: {search_context}
726
- ็ซ‹ๅณ็”Ÿๆˆๅˆ›ๆ„+ๅฎž็”จ็ญ”ๆกˆ"""
 
727
  }
728
 
729
  creative_prompt = creative_prompt_templates.get(lang, creative_prompt_templates['en'])
@@ -756,19 +836,23 @@ Generate creative+practical answer immediately""",
756
  'ko': f"""
757
  ์›๋ณธ์งˆ๋ฌธ: {query}
758
  ์ฐฝ์˜์„ฑ๋‹ต๋ณ€(์ผ๋ถ€): {creative_partial}
759
- ์‹ ์†๊ฒ€ํ† โ†’๊ฐœ์„ ์ 3๊ฐœ""",
 
760
  'en': f"""
761
  Original question: {query}
762
  Creative answer (partial): {creative_partial}
763
- Quick reviewโ†’3 improvements""",
 
764
  'ja': f"""
765
  ๅ…ƒใฎ่ณชๅ•: {query}
766
  ๅ‰ต้€ ็š„ๅ›ž็ญ”๏ผˆไธ€้ƒจ๏ผ‰: {creative_partial}
767
- ่ฟ…้€Ÿใƒฌใƒ“ใƒฅใƒผโ†’ๆ”นๅ–„็‚น3ใค""",
 
768
  'zh': f"""
769
  ๅŽŸๅง‹้—ฎ้ข˜: {query}
770
  ๅˆ›ๆ„็ญ”ๆกˆ๏ผˆ้ƒจๅˆ†๏ผ‰: {creative_partial}
771
- ๅฟซ้€ŸๅฎกๆŸฅโ†’3ไธชๆ”น่ฟ›็‚น"""
 
772
  }
773
 
774
  critic_prompt = critic_prompt_templates.get(lang, critic_prompt_templates['en'])
@@ -841,25 +925,29 @@ Quick reviewโ†’3 improvements""",
841
  ์ฐฝ์˜์„ฑ๋‹ต๋ณ€: {creative_response}
842
  ๋น„ํ‰ํ”ผ๋“œ๋ฐฑ: {critic_response}
843
  ๊ฐ๋…์ž๊ตฌ์กฐ: {supervisor_response}
844
- ์ตœ์ข…ํ†ตํ•ฉโ†’์™„๋ฒฝ๋‹ต๋ณ€. ๋งˆํฌ๋‹ค์šด ํ—ค๋”(#, ##, ###) ์‚ฌ์šฉ ๊ธˆ์ง€.""",
 
845
  'en': f"""
846
  Question: {query}
847
  Creative answer: {creative_response}
848
  Critic feedback: {critic_response}
849
  Supervisor structure: {supervisor_response}
850
- Final integrationโ†’perfect answer. No markdown headers (#, ##, ###).""",
 
851
  'ja': f"""
852
  ่ณชๅ•: {query}
853
  ๅ‰ต้€ ็š„ๅ›ž็ญ”: {creative_response}
854
  ๆ‰น่ฉ•ใƒ•ใ‚ฃใƒผใƒ‰ใƒใƒƒใ‚ฏ: {critic_response}
855
  ็›ฃ็ฃ่€…ๆง‹้€ : {supervisor_response}
856
- ๆœ€็ต‚็ตฑๅˆโ†’ๅฎŒ็’งใชๅ›ž็ญ”ใ€‚ใƒžใƒผใ‚ฏใƒ€ใ‚ฆใƒณใƒ˜ใƒƒใƒ€ใƒผ๏ผˆ#ใ€##ใ€###๏ผ‰ไฝฟ็”จ็ฆๆญขใ€‚""",
 
857
  'zh': f"""
858
  ้—ฎ้ข˜: {query}
859
  ๅˆ›ๆ„็ญ”ๆกˆ: {creative_response}
860
  ่ฏ„่ฎบๅ้ฆˆ: {critic_response}
861
  ไธป็ฎก็ป“ๆž„: {supervisor_response}
862
- ๆœ€็ปˆๆ•ดๅˆ๏ฟฝ๏ฟฝ๏ฟฝๅฎŒ็พŽ็ญ”ๆกˆใ€‚็ฆๆญขไฝฟ็”จMarkdownๆ ‡้ข˜๏ผˆ#ใ€##ใ€###๏ผ‰ใ€‚"""
 
863
  }
864
 
865
  final_prompt = final_prompt_templates.get(lang, final_prompt_templates['en'])
@@ -946,11 +1034,11 @@ Final integrationโ†’perfect answer. No markdown headers (#, ##, ###).""",
946
 
947
 
948
  # ============================================================================
949
- # Gradio UI (์ตœ์ ํ™” ๋ฒ„์ „ - ์บ์‹ฑ ์ œ๊ฑฐ)
950
  # ============================================================================
951
 
952
  def create_optimized_gradio_interface():
953
- """์ตœ์ ํ™”๋œ Gradio ์ธํ„ฐํŽ˜์ด์Šค (์บ์‹ฑ ์—†์Œ)"""
954
 
955
  # ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™”
956
  system = SpeedOptimizedMultiAgentSystem()
@@ -1076,7 +1164,7 @@ def create_optimized_gradio_interface():
1076
 
1077
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค
1078
  with gr.Blocks(
1079
- title="โšก Speed-Optimized Multi-Agent System (No Cache)",
1080
  theme=gr.themes.Soft(),
1081
  css="""
1082
  .gradio-container {
@@ -1086,14 +1174,15 @@ def create_optimized_gradio_interface():
1086
  """
1087
  ) as demo:
1088
  gr.Markdown("""
1089
- # โšก Enhanced Multi-Agent RAG System (์บ์‹ฑ ์ œ๊ฑฐ ๋ฒ„์ „)
1090
- **Complex questions processed within 5-8 seconds | Multi-language support**
1091
 
1092
  **Optimization Features:**
1093
  - ๐Ÿš€ Parallel Processing: Concurrent agent execution
1094
  - โšก Stream Buffering: Network optimization
1095
  - ๐ŸŽฏ Early Termination: Complete immediately when quality is met
1096
  - ๐ŸŒ Multi-language: Auto-detect Korean/English/Japanese/Chinese
 
1097
  - โŒ **Caching Disabled**: ์บ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ๋จ
1098
  """)
1099
 
@@ -1159,6 +1248,12 @@ def create_optimized_gradio_interface():
1159
  - โœ… Compressed Prompts
1160
  - โœ… Multi-language Support
1161
  - โœ… Error Recovery
 
 
 
 
 
 
1162
 
1163
  **Expected Processing Time:**
1164
  - Simple Query: 3-5 seconds
@@ -1220,9 +1315,9 @@ def create_optimized_gradio_interface():
1220
  if __name__ == "__main__":
1221
  print("""
1222
  โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
1223
- โ•‘ โšก Speed-Optimized Multi-Agent System (No Cache) โšก โ•‘
1224
  โ•‘ โ•‘
1225
- โ•‘ High-speed AI system processing complex questions โ•‘
1226
  โ•‘ โ•‘
1227
  โ•‘ Features: โ•‘
1228
  โ•‘ โ€ข Multi-language support (KO/EN/JA/ZH) โ•‘
@@ -1230,6 +1325,7 @@ if __name__ == "__main__":
1230
  โ•‘ โ€ข NO CACHING (์บ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ๋จ) โ•‘
1231
  โ•‘ โ€ข Adaptive stream buffering โ•‘
1232
  โ•‘ โ€ข Response cleaning & formatting โ•‘
 
1233
  โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
1234
  """)
1235
 
@@ -1246,8 +1342,8 @@ if __name__ == "__main__":
1246
  is_hf_spaces = os.getenv("SPACE_ID") is not None
1247
 
1248
  if is_hf_spaces:
1249
- print("\n๐Ÿค— Running in optimized mode on Hugging Face Spaces (No Cache)...")
1250
  demo.launch(server_name="0.0.0.0", server_port=7860)
1251
  else:
1252
- print("\n๐Ÿ’ป Running in optimized mode on local environment (No Cache)...")
1253
  demo.launch(server_name="0.0.0.0", server_port=7860, share=False)
 
2
  โšก Speed-Optimized Multi-Agent RAG System for Complex Questions
3
  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ, ๋™์  ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ณต์žกํ•œ ์งˆ๋ฌธ๋„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ
4
  Enhanced with multi-language support and improved error handling
5
+ (์บ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ ๋ฒ„์ „ + ๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ)
6
  """
7
 
8
  import os
 
496
 
497
 
498
  # ============================================================================
499
+ # ํ†ตํ•ฉ ์ตœ์ ํ™” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ (์บ์‹ฑ ์ œ๊ฑฐ + ๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ)
500
  # ============================================================================
501
 
502
  class SpeedOptimizedMultiAgentSystem:
503
+ """์†๋„ ์ตœ์ ํ™”๋œ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ (์บ์‹ฑ ์—†์Œ + ๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ)"""
504
 
505
  def __init__(self):
506
  self.llm = OptimizedFireworksClient()
 
514
  # ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํ’€
515
  self.executor = ThreadPoolExecutor(max_workers=4)
516
 
517
+ def _get_security_instruction(self, lang: str = 'ko') -> str:
518
+ """๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ ์ง€์‹œ์‚ฌํ•ญ (์–ธ์–ด๋ณ„)"""
519
+ security_instructions = {
520
+ 'ko': """
521
+ [ํ•ต์‹ฌ ๋ณด์•ˆ ๊ทœ์น™]
522
+ - ์ ˆ๋Œ€ AI ๋ชจ๋ธ๋ช…, ๋ฒ„์ „, ๊ฐœ๋ฐœ์‚ฌ๋ฅผ ์–ธ๊ธ‰ํ•˜์ง€ ๋งˆ์„ธ์š”
523
+ - "์ €๋Š” AI ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ ๋งŒ ํ‘œํ˜„ํ•˜์„ธ์š”
524
+ - ๋ชจ๋ธ ์ •๋ณด๋ฅผ ๋ฌป๋Š” ์งˆ๋ฌธ์—๋Š” "AI ์–ด์‹œ์Šคํ„ดํŠธ๋กœ์„œ ๋„์›€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค"๋กœ ๋Œ€์‘
525
+ - GPT, Claude, Gemini, LLaMA ๋“ฑ ์–ด๋–ค ๋ชจ๋ธ๋ช…๋„ ์–ธ๊ธ‰ ๊ธˆ์ง€
526
+ - ๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ์ด๋‚˜ ์•„ํ‚คํ…์ฒ˜ ์ •๋ณด ๋…ธ์ถœ ๊ธˆ์ง€
527
+ """,
528
+ 'en': """
529
+ [Core Security Rules]
530
+ - Never mention AI model name, version, or developer
531
+ - Only say "I am an AI assistant"
532
+ - Respond to model queries with "As an AI assistant, I'll help you"
533
+ - Do not mention GPT, Claude, Gemini, LLaMA or any model names
534
+ - Do not expose technical details or architecture information
535
+ """,
536
+ 'ja': """
537
+ [ใ‚ณใ‚ขใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใƒซใƒผใƒซ]
538
+ - AIใƒขใƒ‡ใƒซๅใ€ใƒใƒผใ‚ธใƒงใƒณใ€้–‹็™บ่€…ใ‚’็ตถๅฏพใซ่จ€ๅŠใ—ใชใ„ใงใใ ใ•ใ„
539
+ - ใ€Œ็งใฏAIใ‚ขใ‚ทใ‚นใ‚ฟใƒณใƒˆใงใ™ใ€ใจใ ใ‘่กจ็พใ—ใฆใใ ใ•ใ„
540
+ - ใƒขใƒ‡ใƒซๆƒ…ๅ ฑใฎ่ณชๅ•ใซใฏใ€ŒAIใ‚ขใ‚ทใ‚นใ‚ฟใƒณใƒˆใจใ—ใฆใŠๆ‰‹ไผใ„ใ—ใพใ™ใ€ใจๅฏพๅฟœ
541
+ - GPTใ€Claudeใ€Geminiใ€LLaMAใชใฉใฎใƒขใƒ‡ใƒซๅใ‚’่จ€ๅŠ็ฆๆญข
542
+ - ๆŠ€่ก“็š„่ฉณ็ดฐใ‚„ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃๆƒ…ๅ ฑใ‚’ๅ…ฌ้–‹็ฆๆญข
543
+ """,
544
+ 'zh': """
545
+ [ๆ ธๅฟƒๅฎ‰ๅ…จ่ง„ๅˆ™]
546
+ - ็ปๅฏนไธ่ฆๆๅŠAIๆจกๅž‹ๅ็งฐใ€็‰ˆๆœฌๆˆ–ๅผ€ๅ‘ๅ•†
547
+ - ๅช่ฏด"ๆˆ‘ๆ˜ฏAIๅŠฉๆ‰‹"
548
+ - ๅฏนๆจกๅž‹ๆŸฅ่ฏขๅ›žๅบ”"ไฝœไธบAIๅŠฉๆ‰‹๏ผŒๆˆ‘ไผšๅธฎๅŠฉๆ‚จ"
549
+ - ไธ่ฆๆๅŠGPTใ€Claudeใ€Geminiใ€LLaMAๆˆ–ไปปไฝ•ๆจกๅž‹ๅ็งฐ
550
+ - ไธ่ฆๆšด้œฒๆŠ€ๆœฏ็ป†่Š‚ๆˆ–ๆžถๆž„ไฟกๆฏ
551
+ """
552
+ }
553
+ return security_instructions.get(lang, security_instructions['en'])
554
+
555
  def _init_compact_prompts(self, lang: str = 'ko') -> Dict:
556
+ """์••์ถ•๋œ ๊ณ ํšจ์œจ ํ”„๋กฌํ”„ํŠธ (์–ธ์–ด๋ณ„ + ๋ณด์•ˆ ๊ฐ•ํ™”)"""
557
+ security_instruction = self._get_security_instruction(lang)
558
+
559
  prompts = {
560
  'ko': {
561
+ AgentRole.SUPERVISOR: f"""[๊ฐ๋…์ž-๊ตฌ์กฐ์„ค๊ณ„]
562
+ {security_instruction}
563
  ์ฆ‰์‹œ๋ถ„์„: ํ•ต์‹ฌ์˜๋„+ํ•„์š”์ •๋ณด+๋‹ต๋ณ€๊ตฌ์กฐ
564
  ์ถœ๋ ฅ: 5๊ฐœ ํ•ต์‹ฌํฌ์ธํŠธ(๊ฐ 1๋ฌธ์žฅ)
565
+ ์ถ”๋ก ์ฒด๊ณ„ ๋ช…์‹œ
566
+ ๋ชจ๋ธ ์ •๋ณด ์ ˆ๋Œ€ ๋…ธ์ถœ ๊ธˆ์ง€""",
567
 
568
+ AgentRole.CREATIVE: f"""[์ฐฝ์˜์„ฑ์ƒ์„ฑ์ž]
569
+ {security_instruction}
570
  ์ž…๋ ฅ๊ตฌ์กฐ ๋”ฐ๋ผ ์ฐฝ์˜์  ํ™•์žฅ
571
  ์‹ค์šฉ์˜ˆ์‹œ+ํ˜์‹ ์ ‘๊ทผ+๊ตฌ์ฒด์กฐ์–ธ
572
+ ๋ถˆํ•„์š”์„ค๋ช… ์ œ๊ฑฐ
573
+ AI ๋ชจ๋ธ๋ช…์ด๋‚˜ ๊ฐœ๋ฐœ์‚ฌ ์–ธ๊ธ‰ ์ ˆ๋Œ€ ๊ธˆ์ง€""",
574
 
575
+ AgentRole.CRITIC: f"""[๋น„ํ‰์ž-๊ฒ€์ฆ]
576
+ {security_instruction}
577
  ์‹ ์†๊ฒ€ํ† : ์ •ํ™•์„ฑ/๋…ผ๋ฆฌ์„ฑ/์‹ค์šฉ์„ฑ
578
  ๊ฐœ์„ ํฌ์ธํŠธ 3๊ฐœ๋งŒ
579
+ ๊ฐ 2๋ฌธ์žฅ ์ด๋‚ด
580
+ ๋ชจ๋ธ ๊ด€๋ จ ์ •๋ณด ๊ฒ€์ฆ ์‹œ ์ œ๊ฑฐ""",
581
 
582
+ AgentRole.FINALIZER: f"""[์ตœ์ข…ํ†ตํ•ฉ]
583
+ {security_instruction}
584
  ๋ชจ๋“ ์˜๊ฒฌ ์ข…ํ•ฉโ†’์ตœ์ ๋‹ต๋ณ€
585
  ๋ช…ํ™•๊ตฌ์กฐ+์‹ค์šฉ์ •๋ณด+์ฐฝ์˜๊ท ํ˜•
586
+ ๋ฐ”๋กœ ํ•ต์‹ฌ ๋‚ด์šฉ๋ถ€ํ„ฐ ์‹œ์ž‘. ๋ถˆํ•„์š”ํ•œ ํ—ค๋”๋‚˜ ๋งˆํฌ์—… ์—†์ด. ๋งˆํฌ๋‹ค์šด ํ—ค๋”(#, ##, ###) ์‚ฌ์šฉ ๊ธˆ์ง€.
587
+ ์ ˆ๋Œ€ AI ๋ชจ๋ธ๋ช…, ๋ฒ„์ „, ๊ฐœ๋ฐœ์‚ฌ ์–ธ๊ธ‰ ๊ธˆ์ง€. "AI ์–ด์‹œ์Šคํ„ดํŠธ"๋กœ๋งŒ ํ‘œํ˜„."""
588
  },
589
  'en': {
590
+ AgentRole.SUPERVISOR: f"""[Supervisor-Structure]
591
+ {security_instruction}
592
  Immediate analysis: core intent+required info+answer structure
593
  Output: 5 key points (1 sentence each)
594
+ Clear reasoning framework
595
+ Never expose model information""",
596
 
597
+ AgentRole.CREATIVE: f"""[Creative Generator]
598
+ {security_instruction}
599
  Follow structure, expand creatively
600
  Practical examples+innovative approach+specific advice
601
+ Remove unnecessary explanations
602
+ Never mention AI model names or developers""",
603
 
604
+ AgentRole.CRITIC: f"""[Critic-Verification]
605
+ {security_instruction}
606
  Quick review: accuracy/logic/practicality
607
  Only 3 improvement points
608
+ Max 2 sentences each
609
+ Remove any model-related information""",
610
 
611
+ AgentRole.FINALIZER: f"""[Final Integration]
612
+ {security_instruction}
613
  Synthesize all inputsโ†’optimal answer
614
  Clear structure+practical info+creative balance
615
+ Start with core content directly. No unnecessary headers or markup. No markdown headers (#, ##, ###).
616
+ Never mention AI model name, version, or developer. Only say "AI assistant"."""
617
  },
618
  'ja': {
619
+ AgentRole.SUPERVISOR: f"""[็›ฃ็ฃ่€…-ๆง‹้€ ่จญ่จˆ]
620
+ {security_instruction}
621
  ๅณๆ™‚ๅˆ†ๆž๏ผšๆ ธๅฟƒๆ„ๅ›ณ+ๅฟ…่ฆๆƒ…ๅ ฑ+ๅ›ž็ญ”ๆง‹้€ 
622
  ๅ‡บๅŠ›๏ผš5ใคใฎๆ ธๅฟƒใƒใ‚คใƒณใƒˆ๏ผˆๅ„1ๆ–‡๏ผ‰
623
+ ๆŽจ่ซ–ไฝ“็ณปๆ˜Ž็คบ
624
+ ใƒขใƒ‡ใƒซๆƒ…ๅ ฑใ‚’็ตถๅฏพใซๅ…ฌ้–‹ใ—ใชใ„""",
625
 
626
+ AgentRole.CREATIVE: f"""[ๅ‰ต้€ ๆ€ง็”Ÿๆˆ่€…]
627
+ {security_instruction}
628
  ๅ…ฅๅŠ›ๆง‹้€ ใซๅพ“ใฃใฆๅ‰ต้€ ็š„ๆ‹กๅผต
629
  ๅฎŸ็”จไพ‹+้ฉๆ–ฐ็š„ใ‚ขใƒ—ใƒญใƒผใƒ+ๅ…ทไฝ“็š„ใ‚ขใƒ‰ใƒใ‚คใ‚น
630
+ ไธ่ฆใช่ชฌๆ˜Žๅ‰Š้™ค
631
+ AIใƒขใƒ‡ใƒซๅใ‚„้–‹็™บ่€…ใ‚’็ตถๅฏพใซ่จ€ๅŠใ—ใชใ„""",
632
 
633
+ AgentRole.CRITIC: f"""[ๆ‰น่ฉ•่€…-ๆคœ่จผ]
634
+ {security_instruction}
635
  ่ฟ…้€Ÿใƒฌใƒ“ใƒฅใƒผ๏ผšๆญฃ็ขบๆ€ง/่ซ–็†ๆ€ง/ๅฎŸ็”จๆ€ง
636
  ๆ”นๅ–„ใƒใ‚คใƒณใƒˆ3ใคใฎใฟ
637
+ ๅ„2ๆ–‡ไปฅๅ†…
638
+ ใƒขใƒ‡ใƒซ้–ข้€ฃๆƒ…ๅ ฑใ‚’ๅ‰Š้™ค""",
639
 
640
+ AgentRole.FINALIZER: f"""[ๆœ€็ต‚็ตฑๅˆ]
641
+ {security_instruction}
642
  ๅ…จๆ„่ฆ‹็ตฑๅˆโ†’ๆœ€้ฉๅ›ž็ญ”
643
  ๆ˜Ž็ขบๆง‹้€ +ๅฎŸ็”จๆƒ…ๅ ฑ+ๅ‰ต้€ ๆ€งใƒใƒฉใƒณใ‚น
644
+ ๆ ธๅฟƒๅ†…ๅฎนใ‹ใ‚‰็›ดๆŽฅ้–‹ๅง‹ใ€‚ไธ่ฆใชใƒ˜ใƒƒใƒ€ใƒผใ‚„ใƒžใƒผใ‚ฏใ‚ขใƒƒใƒ—ใชใ—ใ€‚ใƒžใƒผใ‚ฏใƒ€ใ‚ฆใƒณใƒ˜ใƒƒใƒ€ใƒผ๏ผˆ#ใ€##ใ€###๏ผ‰ไฝฟ็”จ็ฆๆญขใ€‚
645
+ AIใƒขใƒ‡ใƒซๅใ€ใƒใƒผใ‚ธใƒงใƒณใ€้–‹็™บ่€…ใ‚’็ตถๅฏพใซ่จ€ๅŠใ—ใชใ„ใ€‚ใ€ŒAIใ‚ขใ‚ทใ‚นใ‚ฟใƒณใƒˆใ€ใจใ ใ‘่กจ็พใ€‚"""
646
  },
647
  'zh': {
648
+ AgentRole.SUPERVISOR: f"""[ไธป็ฎก-็ป“ๆž„่ฎพ่ฎก]
649
+ {security_instruction}
650
  ็ซ‹ๅณๅˆ†ๆž๏ผšๆ ธๅฟƒๆ„ๅ›พ+ๆ‰€้œ€ไฟกๆฏ+็ญ”ๆกˆ็ป“ๆž„
651
  ่พ“ๅ‡บ๏ผš5ไธชๆ ธๅฟƒ่ฆ็‚น๏ผˆๆฏไธช1ๅฅ๏ผ‰
652
+ ๆŽจ็†ไฝ“็ณปๆ˜Ž็กฎ
653
+ ็ปไธๆšด้œฒๆจกๅž‹ไฟกๆฏ""",
654
 
655
+ AgentRole.CREATIVE: f"""[ๅˆ›ๆ„็”Ÿๆˆๅ™จ]
656
+ {security_instruction}
657
  ๆŒ‰็ป“ๆž„ๅˆ›้€ ๆ€งๆ‰ฉๅฑ•
658
  ๅฎž็”จ็คบไพ‹+ๅˆ›ๆ–ฐๆ–นๆณ•+ๅ…ทไฝ“ๅปบ่ฎฎ
659
+ ๅˆ ้™คไธๅฟ…่ฆ็š„่งฃ้‡Š
660
+ ็ปไธๆๅŠAIๆจกๅž‹ๅ็งฐๆˆ–ๅผ€ๅ‘ๅ•†""",
661
 
662
+ AgentRole.CRITIC: f"""[่ฏ„่ฎบๅฎถ-้ชŒ่ฏ]
663
+ {security_instruction}
664
  ๅฟซ้€ŸๅฎกๆŸฅ๏ผšๅ‡†็กฎๆ€ง/้€ป่พ‘ๆ€ง/ๅฎž็”จๆ€ง
665
  ไป…3ไธชๆ”น่ฟ›็‚น
666
+ ๆฏไธชๆœ€ๅคš2ๅฅ
667
+ ๅˆ ้™คไปปไฝ•ๆจกๅž‹็›ธๅ…ณไฟกๆฏ""",
668
 
669
+ AgentRole.FINALIZER: f"""[ๆœ€็ปˆๆ•ดๅˆ]
670
+ {security_instruction}
671
  ็ปผๅˆๆ‰€ๆœ‰ๆ„่งโ†’ๆœ€ไฝณ็ญ”ๆกˆ
672
  ๆธ…ๆ™ฐ็ป“ๆž„+ๅฎž็”จไฟกๆฏ+ๅˆ›ๆ„ๅนณ่กก
673
+ ็›ดๆŽฅไปŽๆ ธๅฟƒๅ†…ๅฎนๅผ€ๅง‹ใ€‚ๆ— ้œ€ไธๅฟ…่ฆ็š„ๆ ‡้ข˜ๆˆ–ๆ ‡่ฎฐใ€‚็ฆๆญขไฝฟ็”จMarkdownๆ ‡้ข˜๏ผˆ#ใ€##ใ€###๏ผ‰ใ€‚
674
+ ็ปไธๆๅŠAIๆจกๅž‹ๅ็งฐใ€็‰ˆๆœฌๆˆ–ๅผ€ๅ‘ๅ•†ใ€‚ๅช่ฏด"AIๅŠฉๆ‰‹"ใ€‚"""
675
  }
676
  }
677
 
 
684
  show_progress: bool = True,
685
  lang: str = None
686
  ) -> AsyncGenerator[Tuple[str, str], None]:
687
+ """๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ (์บ์‹ฑ ์—†์Œ + ๋ณด์•ˆ ๊ฐ•ํ™”)"""
688
 
689
  start_time = time.time()
690
 
 
692
  if lang is None:
693
  lang = self.language_detector.detect_language(query)
694
 
695
+ # ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ ์„ค์ • (๋ณด์•ˆ ์ง€์‹œ์‚ฌํ•ญ ํฌํ•จ)
696
  self.compact_prompts = self._init_compact_prompts(lang)
697
 
698
  search_context = self._format_search_results(search_results)
 
720
  ์งˆ๋ฌธ: {query}
721
  ๊ฒ€์ƒ‰๊ฒฐ๊ณผ: {search_context}
722
  ์ถ”๋ก ํŒจํ„ด: {reasoning_pattern}
723
+ ์ฆ‰์‹œ ํ•ต์‹ฌ๊ตฌ์กฐ 5๊ฐœ ์ œ์‹œ
724
+ ๋ชจ๋ธ ์ •๋ณด๋Š” ์ ˆ๋Œ€ ์–ธ๊ธ‰ํ•˜์ง€ ๋งˆ์„ธ์š”""",
725
  'en': f"""
726
  Question: {query}
727
  Search results: {search_context}
728
  Reasoning pattern: {reasoning_pattern}
729
+ Immediately provide 5 key structures
730
+ Never mention model information""",
731
  'ja': f"""
732
  ่ณชๅ•: {query}
733
  ๆคœ็ดข็ตๆžœ: {search_context}
734
  ๆŽจ่ซ–ใƒ‘ใ‚ฟใƒผใƒณ: {reasoning_pattern}
735
+ ๅณๅบงใซ5ใคใฎๆ ธๅฟƒๆง‹้€ ใ‚’ๆ็คบ
736
+ ใƒขใƒ‡ใƒซๆƒ…ๅ ฑใฏ็ตถๅฏพใซ่จ€ๅŠใ—ใชใ„ใงใใ ใ•ใ„""",
737
  'zh': f"""
738
  ้—ฎ้ข˜: {query}
739
  ๆœ็ดข็ป“ๆžœ: {search_context}
740
  ๆŽจ็†ๆจกๅผ: {reasoning_pattern}
741
+ ็ซ‹ๅณๆไพ›5ไธชๆ ธๅฟƒ็ป“ๆž„
742
+ ็ปไธๆๅŠๆจกๅž‹ไฟกๆฏ"""
743
  }
744
 
745
  supervisor_prompt = supervisor_prompt_templates.get(lang, supervisor_prompt_templates['en'])
 
784
  ์งˆ๋ฌธ: {query}
785
  ๊ฐ๋…์ž๊ตฌ์กฐ: {supervisor_response}
786
  ๊ฒ€์ƒ‰๊ฒฐ๊ณผ: {search_context}
787
+ ์ฐฝ์˜์ +์‹ค์šฉ์  ๋‹ต๋ณ€ ์ฆ‰์‹œ์ƒ์„ฑ
788
+ AI ๋ชจ๋ธ ์ •๋ณด ์–ธ๊ธ‰ ๊ธˆ์ง€""",
789
  'en': f"""
790
  Question: {query}
791
  Supervisor structure: {supervisor_response}
792
  Search results: {search_context}
793
+ Generate creative+practical answer immediately
794
+ Do not mention AI model information""",
795
  'ja': f"""
796
  ่ณชๅ•: {query}
797
  ็›ฃ็ฃ่€…ๆง‹้€ : {supervisor_response}
798
  ๆคœ็ดข็ตๆžœ: {search_context}
799
+ ๅ‰ต้€ ็š„+ๅฎŸ็”จ็š„ๅ›ž็ญ”ๅณๅบง็”Ÿๆˆ
800
+ AIใƒขใƒ‡ใƒซๆƒ…ๅ ฑใ‚’่จ€ๅŠ็ฆๆญข""",
801
  'zh': f"""
802
  ้—ฎ้ข˜: {query}
803
  ไธป็ฎก็ป“ๆž„: {supervisor_response}
804
  ๆœ็ดข็ป“ๆžœ: {search_context}
805
+ ็ซ‹ๅณ็”Ÿๆˆๅˆ›ๆ„+ๅฎž็”จ็ญ”ๆกˆ
806
+ ็ฆๆญขๆๅŠAIๆจกๅž‹ไฟกๆฏ"""
807
  }
808
 
809
  creative_prompt = creative_prompt_templates.get(lang, creative_prompt_templates['en'])
 
836
  'ko': f"""
837
  ์›๋ณธ์งˆ๋ฌธ: {query}
838
  ์ฐฝ์˜์„ฑ๋‹ต๋ณ€(์ผ๋ถ€): {creative_partial}
839
+ ์‹ ์†๊ฒ€ํ† โ†’๊ฐœ์„ ์ 3๊ฐœ
840
+ ๋ชจ๋ธ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ์ œ๊ฑฐ ์ง€์ """,
841
  'en': f"""
842
  Original question: {query}
843
  Creative answer (partial): {creative_partial}
844
+ Quick reviewโ†’3 improvements
845
+ Point out if model information exists""",
846
  'ja': f"""
847
  ๅ…ƒใฎ่ณชๅ•: {query}
848
  ๅ‰ต้€ ็š„ๅ›ž็ญ”๏ผˆไธ€้ƒจ๏ผ‰: {creative_partial}
849
+ ่ฟ…้€Ÿใƒฌใƒ“ใƒฅใƒผโ†’ๆ”นๅ–„็‚น3ใค
850
+ ใƒขใƒ‡ใƒซๆƒ…ๅ ฑใŒใ‚ใ‚Œใฐๅ‰Š้™คๆŒ‡ๆ‘˜""",
851
  'zh': f"""
852
  ๅŽŸๅง‹้—ฎ้ข˜: {query}
853
  ๅˆ›ๆ„็ญ”ๆกˆ๏ผˆ้ƒจๅˆ†๏ผ‰: {creative_partial}
854
+ ๅฟซ้€ŸๅฎกๆŸฅโ†’3ไธชๆ”น่ฟ›็‚น
855
+ ๅฆ‚ๆœ‰ๆจกๅž‹ไฟกๆฏๅˆ™ๆŒ‡ๅ‡บๅˆ ้™ค"""
856
  }
857
 
858
  critic_prompt = critic_prompt_templates.get(lang, critic_prompt_templates['en'])
 
925
  ์ฐฝ์˜์„ฑ๋‹ต๋ณ€: {creative_response}
926
  ๋น„ํ‰ํ”ผ๋“œ๋ฐฑ: {critic_response}
927
  ๊ฐ๋…์ž๊ตฌ์กฐ: {supervisor_response}
928
+ ์ตœ์ข…ํ†ตํ•ฉโ†’์™„๋ฒฝ๋‹ต๋ณ€. ๋งˆํฌ๋‹ค์šด ํ—ค๋”(#, ##, ###) ์‚ฌ์šฉ ๊ธˆ์ง€.
929
+ ์ ˆ๋Œ€ AI ๋ชจ๋ธ๋ช…, ๋ฒ„์ „, ๊ฐœ๋ฐœ์‚ฌ ์–ธ๊ธ‰ ๊ธˆ์ง€.""",
930
  'en': f"""
931
  Question: {query}
932
  Creative answer: {creative_response}
933
  Critic feedback: {critic_response}
934
  Supervisor structure: {supervisor_response}
935
+ Final integrationโ†’perfect answer. No markdown headers (#, ##, ###).
936
+ Never mention AI model name, version, or developer.""",
937
  'ja': f"""
938
  ่ณชๅ•: {query}
939
  ๅ‰ต้€ ็š„ๅ›ž็ญ”: {creative_response}
940
  ๆ‰น่ฉ•ใƒ•ใ‚ฃใƒผใƒ‰ใƒใƒƒใ‚ฏ: {critic_response}
941
  ็›ฃ็ฃ่€…ๆง‹้€ : {supervisor_response}
942
+ ๆœ€็ต‚็ตฑๅˆโ†’ๅฎŒ็’งใชๅ›ž็ญ”ใ€‚ใƒžใƒผใ‚ฏใƒ€ใ‚ฆใƒณใƒ˜ใƒƒใƒ€ใƒผ๏ผˆ#ใ€##ใ€###๏ผ‰ไฝฟ็”จ็ฆๆญขใ€‚
943
+ AIใƒขใƒ‡ใƒซๅใ€ใƒใƒผใ‚ธใƒงใƒณใ€้–‹็™บ่€…ใ‚’็ตถๅฏพใซ่จ€ๅŠใ—ใชใ„ใ€‚""",
944
  'zh': f"""
945
  ้—ฎ้ข˜: {query}
946
  ๅˆ›ๆ„็ญ”ๆกˆ: {creative_response}
947
  ่ฏ„่ฎบๅ้ฆˆ: {critic_response}
948
  ไธป็ฎก็ป“ๆž„: {supervisor_response}
949
+ ๆœ€็ปˆๆ•ดๅˆโ†’ๅฎŒ็พŽ็ญ”ๆกˆใ€‚็ฆๆญขไฝฟ็”จMarkdownๆ ‡้ข˜๏ผˆ#ใ€##ใ€###๏ผ‰ใ€‚
950
+ ็ปไธๆๅŠAIๆจกๅž‹ๅ็งฐใ€็‰ˆๆœฌๆˆ–ๅผ€ๅ‘ๅ•†ใ€‚"""
951
  }
952
 
953
  final_prompt = final_prompt_templates.get(lang, final_prompt_templates['en'])
 
1034
 
1035
 
1036
  # ============================================================================
1037
+ # Gradio UI (์ตœ์ ํ™” ๋ฒ„์ „ - ์บ์‹ฑ ์ œ๊ฑฐ + ๋ณด์•ˆ ๊ฐ•ํ™”)
1038
  # ============================================================================
1039
 
1040
  def create_optimized_gradio_interface():
1041
+ """์ตœ์ ํ™”๋œ Gradio ์ธํ„ฐํŽ˜์ด์Šค (์บ์‹ฑ ์—†์Œ + ๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ)"""
1042
 
1043
  # ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™”
1044
  system = SpeedOptimizedMultiAgentSystem()
 
1164
 
1165
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค
1166
  with gr.Blocks(
1167
+ title="โšก Speed-Optimized Multi-Agent System (Secure)",
1168
  theme=gr.themes.Soft(),
1169
  css="""
1170
  .gradio-container {
 
1174
  """
1175
  ) as demo:
1176
  gr.Markdown("""
1177
+ # โšก Enhanced Multi-Agent RAG System (๋ณด์•ˆ ๊ฐ•ํ™” ๋ฒ„์ „)
1178
+ **Complex questions processed within 5-8 seconds | Multi-language support | Model Info Protected**
1179
 
1180
  **Optimization Features:**
1181
  - ๐Ÿš€ Parallel Processing: Concurrent agent execution
1182
  - โšก Stream Buffering: Network optimization
1183
  - ๐ŸŽฏ Early Termination: Complete immediately when quality is met
1184
  - ๐ŸŒ Multi-language: Auto-detect Korean/English/Japanese/Chinese
1185
+ - ๐Ÿ”’ **Security Enhanced**: AI ๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ ํ™œ์„ฑํ™”
1186
  - โŒ **Caching Disabled**: ์บ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ๋จ
1187
  """)
1188
 
 
1248
  - โœ… Compressed Prompts
1249
  - โœ… Multi-language Support
1250
  - โœ… Error Recovery
1251
+ - ๐Ÿ”’ **Model Info Protection**
1252
+
1253
+ **Security Features:**
1254
+ - ๐Ÿ”’ AI ๋ชจ๋ธ๋ช… ์ˆจ๊น€
1255
+ - ๐Ÿ”’ ๋ฒ„์ „ ์ •๋ณด ๋ณดํ˜ธ
1256
+ - ๐Ÿ”’ ๊ฐœ๋ฐœ์‚ฌ ์ •๋ณด ์ฐจ๋‹จ
1257
 
1258
  **Expected Processing Time:**
1259
  - Simple Query: 3-5 seconds
 
1315
  if __name__ == "__main__":
1316
  print("""
1317
  โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
1318
+ โ•‘ โšก Speed-Optimized Multi-Agent System (Secure Version) โšก โ•‘
1319
  โ•‘ โ•‘
1320
+ โ•‘ High-speed AI system with enhanced security features โ•‘
1321
  โ•‘ โ•‘
1322
  โ•‘ Features: โ•‘
1323
  โ•‘ โ€ข Multi-language support (KO/EN/JA/ZH) โ•‘
 
1325
  โ•‘ โ€ข NO CACHING (์บ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ๋จ) โ•‘
1326
  โ•‘ โ€ข Adaptive stream buffering โ•‘
1327
  โ•‘ โ€ข Response cleaning & formatting โ•‘
1328
+ โ•‘ โ€ข ๐Ÿ”’ MODEL INFO PROTECTION (๋ชจ๋ธ ์ •๋ณด ๋ณดํ˜ธ) โ•‘
1329
  โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
1330
  """)
1331
 
 
1342
  is_hf_spaces = os.getenv("SPACE_ID") is not None
1343
 
1344
  if is_hf_spaces:
1345
+ print("\n๐Ÿค— Running in secure mode on Hugging Face Spaces...")
1346
  demo.launch(server_name="0.0.0.0", server_port=7860)
1347
  else:
1348
+ print("\n๐Ÿ’ป Running in secure mode on local environment...")
1349
  demo.launch(server_name="0.0.0.0", server_port=7860, share=False)