DocUA commited on
Commit
bf9a042
·
1 Parent(s): 93e293f

Оновлено interface.py: додано багатопотокову обробку для оновлення індикатора прогресу під час аналізу тексту, зменшено затримки між кроками прогресу, покращено обробку помилок та зупинку фонових потоків. Додано детальніший опис прогресу в залежності від стану аналізу.

Browse files
Files changed (1) hide show
  1. src/interface.py +49 -9
src/interface.py CHANGED
@@ -1,5 +1,6 @@
1
  import gradio as gr
2
  import time
 
3
  import os
4
  from .analyzer import NPAAnalyzer
5
 
@@ -61,7 +62,7 @@ def create_interface():
61
  def analyze_and_format(npa_text, selected_provider, selected_model, enable_thinking, thinking_budget, progress=gr.Progress()):
62
  if not npa_text.strip():
63
  return "### Помилка\nПоле для тексту не може бути порожнім. Введіть текст для аналізу.", "", "Перевірте введені дані"
64
-
65
  if api_keys_warning:
66
  return f"### Помилка\n{api_keys_warning}", "", "Помилка конфігурації API ключів"
67
 
@@ -69,7 +70,7 @@ def create_interface():
69
  try:
70
  if analyzer.get_provider_name() != selected_provider:
71
  analyzer.change_provider(selected_provider)
72
-
73
  current_models = analyzer.get_available_models() or []
74
  if selected_model in current_models:
75
  analyzer.change_model(selected_model)
@@ -90,14 +91,45 @@ def create_interface():
90
 
91
  start_time = time.time()
92
 
93
- # Індикатори прогресу
94
  progress(0, desc="Ініціалізація аналізу...")
95
- time.sleep(0.5)
 
 
 
 
 
 
96
 
97
- progress(0.1, desc="Підготовка тексту НПА...")
98
- time.sleep(0.5)
99
 
100
- progress(0.2, desc=f"Відправка запиту до {selected_provider}...")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
 
102
  # Аналіз з поточними налаштуваннями
103
  try:
@@ -108,9 +140,17 @@ def create_interface():
108
  thinking_budget=thinking_budget
109
  )
110
  except Exception as e:
 
 
 
 
111
  return f"### Помилка при аналізі\n```\n{str(e)}\n```\n\nПеревірте текст та налаштування або спробуйте ще раз.", "", f"Помилка аналізу: {str(e)}"
112
 
113
- progress(0.9, desc="Форматування результатів...")
 
 
 
 
114
 
115
  end_time = time.time()
116
  elapsed_time = end_time - start_time
@@ -128,7 +168,7 @@ def create_interface():
128
  else:
129
  thinking_output = f"## Роздуми моделі недоступні\n{'Режим роздумів вимкнено.' if supports_thinking else f'Провайдер {selected_provider} не підтримує режим роздумів.'}"
130
 
131
- # Додавання інформації про налаштування
132
  settings_info = f"\n\n_Провайдер: {selected_provider}, Модель: {selected_model}, "
133
  if supports_thinking:
134
  settings_info += f"режим роздумів {'увімкнено' if enable_thinking else 'вимкнено'}"
 
1
  import gradio as gr
2
  import time
3
+ import threading
4
  import os
5
  from .analyzer import NPAAnalyzer
6
 
 
62
  def analyze_and_format(npa_text, selected_provider, selected_model, enable_thinking, thinking_budget, progress=gr.Progress()):
63
  if not npa_text.strip():
64
  return "### Помилка\nПоле для тексту не може бути порожнім. Введіть текст для аналізу.", "", "Перевірте введені дані"
65
+
66
  if api_keys_warning:
67
  return f"### Помилка\n{api_keys_warning}", "", "Помилка конфігурації API ключів"
68
 
 
70
  try:
71
  if analyzer.get_provider_name() != selected_provider:
72
  analyzer.change_provider(selected_provider)
73
+
74
  current_models = analyzer.get_available_models() or []
75
  if selected_model in current_models:
76
  analyzer.change_model(selected_model)
 
91
 
92
  start_time = time.time()
93
 
94
+ # Початкові кроки прогресу
95
  progress(0, desc="Ініціалізація аналізу...")
96
+ time.sleep(0.3)
97
+
98
+ progress(0.05, desc="Підготовка тексту НПА...")
99
+ time.sleep(0.3)
100
+
101
+ progress(0.1, desc=f"Підготовка запиту до {selected_provider}...")
102
+ time.sleep(0.3)
103
 
104
+ progress(0.15, desc=f"Відправка запиту до {selected_provider}...")
 
105
 
106
+ # Змінні для контролю фонового потоку
107
+ is_analyzing = True
108
+ current_progress = 0.15
109
+
110
+ def update_progress_bar():
111
+ nonlocal current_progress
112
+ while is_analyzing and current_progress < 0.95:
113
+ # Поступово збільшуємо значення прогресу
114
+ time.sleep(0.5) # Оновлюємо кожні 0.5 секунди
115
+
116
+ # Використовуємо логарифмічну прогресію для повільнішого наростання в кінці
117
+ step = max(0.005, (0.95 - current_progress) / 20)
118
+ current_progress += step
119
+
120
+ # Оновлюємо опис базуючись на поточному прогресі
121
+ desc = "Аналіз тексту..."
122
+ if current_progress > 0.7:
123
+ desc = "Формування відповіді..."
124
+ elif current_progress > 0.4:
125
+ desc = "Опрацювання результатів..."
126
+
127
+ progress(current_progress, desc=desc)
128
+
129
+ # Запускаємо фоновий потік для оновлення прогресу
130
+ progress_thread = threading.Thread(target=update_progress_bar)
131
+ progress_thread.daemon = True
132
+ progress_thread.start()
133
 
134
  # Аналіз з поточними налаштуваннями
135
  try:
 
140
  thinking_budget=thinking_budget
141
  )
142
  except Exception as e:
143
+ # Зупиняємо фоновий потік оновлення прогресу
144
+ is_analyzing = False
145
+ progress_thread.join(timeout=1.0)
146
+
147
  return f"### Помилка при аналізі\n```\n{str(e)}\n```\n\nПеревірте текст та налаштування або спробуйте ще раз.", "", f"Помилка аналізу: {str(e)}"
148
 
149
+ # Зупиняємо фоновий потік оновлення прогресу
150
+ is_analyzing = False
151
+ progress_thread.join(timeout=1.0)
152
+
153
+ progress(0.95, desc="Форматування результатів...")
154
 
155
  end_time = time.time()
156
  elapsed_time = end_time - start_time
 
168
  else:
169
  thinking_output = f"## Роздуми моделі недоступні\n{'Режим роздумів вимкнено.' if supports_thinking else f'Провайдер {selected_provider} не підтримує режим роздумів.'}"
170
 
171
+ # Додавання інформації про налаштування та токени
172
  settings_info = f"\n\n_Провайдер: {selected_provider}, Модель: {selected_model}, "
173
  if supports_thinking:
174
  settings_info += f"режим роздумів {'увімкнено' if enable_thinking else 'вимкнено'}"