DocUA commited on
Commit
397d321
·
1 Parent(s): e8ea072

feat: setup progress bar for analysis action and swap batch/settings tabs

Browse files
Files changed (2) hide show
  1. interface.py +56 -55
  2. main.py +11 -2
interface.py CHANGED
@@ -867,62 +867,8 @@ def create_gradio_interface() -> gr.Blocks:
867
  )
868
 
869
  # Вкладка Налаштування (Settings)
870
- with gr.Tab("⚙️ Налаштування", id=3):
871
- gr.Markdown("### Редагування промптів", elem_classes=["tab-header"])
872
-
873
- gr.Markdown("""
874
- **Увага!** Налаштування промптів зберігаються тільки для вашої поточної сесії.
875
- Кожен користувач має свої власні налаштування, які не впливають на інших користувачів.
876
- """)
877
-
878
- with gr.Column():
879
- system_prompt_editor = gr.Textbox(
880
- label="📋 Системний промпт",
881
- value=SYSTEM_PROMPT,
882
- lines=5,
883
- max_lines=10,
884
- placeholder="Введіть системний промпт...",
885
- info="Визначає роль та базові інструкції для AI"
886
- )
887
-
888
- lp_prompt_editor = gr.Textbox(
889
- label="⚖️ Промпт генерації правової позиції",
890
- value=LEGAL_POSITION_PROMPT,
891
- lines=15,
892
- max_lines=30,
893
- placeholder="Введіть промпт для генерації правової позиції...",
894
- info="Шаблон для генерації правової позиції з судового рішення"
895
- )
896
-
897
- analysis_prompt_editor = gr.Textbox(
898
- label="🔍 Промпт аналізу прецедентів",
899
- value=str(PRECEDENT_ANALYSIS_TEMPLATE.template),
900
- lines=15,
901
- max_lines=30,
902
- placeholder="Введіть промпт для аналізу прецедентів...",
903
- info="Шаблон для порівняльного аналізу правових позицій"
904
- )
905
-
906
- with gr.Row():
907
- save_prompts_button = gr.Button(
908
- "💾 Зберегти промпти",
909
- variant="primary",
910
- scale=1,
911
- interactive=False
912
- )
913
- reset_prompts_button = gr.Button(
914
- "🔄 Скинути до стандартних",
915
- variant="secondary",
916
- scale=1
917
- )
918
-
919
- prompts_status = gr.Markdown(
920
- "",
921
- elem_classes=["tab-content"]
922
- )
923
-
924
  # Вкладка Пакетне тестування (Batch Testing)
925
- with gr.Tab("📊 Пакетне тестування", id=4):
926
  gr.Markdown("### Пакетна генерація правових позицій з CSV/Excel файлу", elem_classes=["tab-header"])
927
 
928
  gr.Markdown("""
@@ -1055,6 +1001,61 @@ def create_gradio_interface() -> gr.Blocks:
1055
  visible=False
1056
  )
1057
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1058
  # Вкладка Допомога (Help)
1059
  with gr.Tab("📖 Допомога", id=5):
1060
  gr.Markdown("### Довідка по використанню AI Асистента", elem_classes=["tab-header"])
 
867
  )
868
 
869
  # Вкладка Налаштування (Settings)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
870
  # Вкладка Пакетне тестування (Batch Testing)
871
+ with gr.Tab("📊 Пакетне тестування", id=3):
872
  gr.Markdown("### Пакетна генерація правових позицій з CSV/Excel файлу", elem_classes=["tab-header"])
873
 
874
  gr.Markdown("""
 
1001
  visible=False
1002
  )
1003
 
1004
+ # Вкладка Налаштування (Settings)
1005
+ with gr.Tab("⚙️ Налаштування", id=4):
1006
+ gr.Markdown("### Редагування промптів", elem_classes=["tab-header"])
1007
+
1008
+ gr.Markdown("""
1009
+ **Увага!** Налаштування промптів зберігаються тільки для вашої поточної сесії.
1010
+ Кожен користувач має свої власні налаштування, які не впливають на інших користувачів.
1011
+ """)
1012
+
1013
+ with gr.Column():
1014
+ system_prompt_editor = gr.Textbox(
1015
+ label="📋 Системний промпт",
1016
+ value=SYSTEM_PROMPT,
1017
+ lines=5,
1018
+ max_lines=10,
1019
+ placeholder="Введіть системний промпт...",
1020
+ info="Визначає роль та базові інструкції для AI"
1021
+ )
1022
+
1023
+ lp_prompt_editor = gr.Textbox(
1024
+ label="⚖️ Промпт генерації правової позиції",
1025
+ value=LEGAL_POSITION_PROMPT,
1026
+ lines=15,
1027
+ max_lines=30,
1028
+ placeholder="Введіть промпт для генерації правової позиції...",
1029
+ info="Шаблон для генерації правової позиції з судового рішення"
1030
+ )
1031
+
1032
+ analysis_prompt_editor = gr.Textbox(
1033
+ label="🔍 Промпт аналізу прецедентів",
1034
+ value=str(PRECEDENT_ANALYSIS_TEMPLATE.template),
1035
+ lines=15,
1036
+ max_lines=30,
1037
+ placeholder="Введіть промпт для аналізу прецедентів...",
1038
+ info="Шаблон для порівняльного аналізу правових позицій"
1039
+ )
1040
+
1041
+ with gr.Row():
1042
+ save_prompts_button = gr.Button(
1043
+ "💾 Зберегти промпти",
1044
+ variant="primary",
1045
+ scale=1,
1046
+ interactive=False
1047
+ )
1048
+ reset_prompts_button = gr.Button(
1049
+ "🔄 Скинути до стандартних",
1050
+ variant="secondary",
1051
+ scale=1
1052
+ )
1053
+
1054
+ prompts_status = gr.Markdown(
1055
+ "",
1056
+ elem_classes=["tab-content"]
1057
+ )
1058
+
1059
  # Вкладка Допомога (Help)
1060
  with gr.Tab("📖 Допомога", id=5):
1061
  gr.Markdown("### Довідка по використанню AI Асистента", elem_classes=["tab-header"])
main.py CHANGED
@@ -1,4 +1,5 @@
1
  import os
 
2
  import sys
3
  import json
4
  import time
@@ -1500,10 +1501,12 @@ async def analyze_action(
1500
  thinking_type: str = "Adaptive",
1501
  thinking_level: str = "medium",
1502
  openai_verbosity: str = "medium",
1503
- thinking_budget: int = 10000
 
1504
  ) -> str:
1505
  """Analyze search results using AI."""
1506
  try:
 
1507
  workflow = PrecedentAnalysisWorkflow(
1508
  provider=ModelProvider(provider),
1509
  model_name=AnalysisModelName(model_name),
@@ -1516,6 +1519,7 @@ async def analyze_action(
1516
  thinking_budget=thinking_budget
1517
  )
1518
 
 
1519
  query = (
1520
  f"{legal_position_json['title']}: "
1521
  f"{legal_position_json['text']}: "
@@ -1523,17 +1527,22 @@ async def analyze_action(
1523
  f"{legal_position_json['category']}"
1524
  )
1525
 
 
1526
  response_text = await workflow.run(
1527
  query=query,
1528
  question=question,
1529
  nodes=nodes
1530
  )
1531
 
 
1532
  output = f"**Аналіз ШІ (модель: {model_name}):**\n{response_text}\n\n"
1533
  output += "**Наявні в базі правові позицій Верховного Суду:**\n\n"
1534
 
1535
  analysis_lines = response_text.split('\n')
1536
- for line in analysis_lines:
 
 
 
1537
  if line.startswith('* ['):
1538
  index = line[3:line.index(']')]
1539
  node = nodes[int(index) - 1]
 
1
  import os
2
+ import gradio as gr
3
  import sys
4
  import json
5
  import time
 
1501
  thinking_type: str = "Adaptive",
1502
  thinking_level: str = "medium",
1503
  openai_verbosity: str = "medium",
1504
+ thinking_budget: int = 10000,
1505
+ progress=gr.Progress()
1506
  ) -> str:
1507
  """Analyze search results using AI."""
1508
  try:
1509
+ progress(0, desc="Ініціалізація аналізу...")
1510
  workflow = PrecedentAnalysisWorkflow(
1511
  provider=ModelProvider(provider),
1512
  model_name=AnalysisModelName(model_name),
 
1519
  thinking_budget=thinking_budget
1520
  )
1521
 
1522
+ progress(0.2, desc="Підготовка даних...")
1523
  query = (
1524
  f"{legal_position_json['title']}: "
1525
  f"{legal_position_json['text']}: "
 
1527
  f"{legal_position_json['category']}"
1528
  )
1529
 
1530
+ progress(0.4, desc="Запит до AI (це може зайняти час)...")
1531
  response_text = await workflow.run(
1532
  query=query,
1533
  question=question,
1534
  nodes=nodes
1535
  )
1536
 
1537
+ progress(0.8, desc="Формування висновків...")
1538
  output = f"**Аналіз ШІ (модель: {model_name}):**\n{response_text}\n\n"
1539
  output += "**Наявні в базі правові позицій Верховного Суду:**\n\n"
1540
 
1541
  analysis_lines = response_text.split('\n')
1542
+ total_lines = len(analysis_lines)
1543
+ for i, line in enumerate(analysis_lines):
1544
+ if i % 2 == 0:
1545
+ progress(0.8 + (0.2 * i / total_lines), desc=f"Обробка результатів ({i}/{total_lines})...")
1546
  if line.startswith('* ['):
1547
  index = line[3:line.index(']')]
1548
  node = nodes[int(index) - 1]