Spaces:
Runtime error
Runtime error
File size: 8,196 Bytes
9c5a6d0 aaec566 669a418 1ca7c3e c016742 9c5a6d0 1ca7c3e c016742 9c5a6d0 cd3968b 1ca7c3e 8f74332 1ca7c3e 8f74332 d89a860 8f74332 aaec566 8f74332 1ca7c3e aaec566 1ca7c3e aaec566 8f74332 aaec566 b5586e6 8f74332 aaec566 b5586e6 8f74332 9c959a8 1ca7c3e 9c959a8 1ca7c3e b5586e6 ed124cc b5586e6 ed124cc b5586e6 ed124cc b5586e6 ed124cc b5586e6 ed124cc b5586e6 d89a860 aaec566 1ca7c3e d89a860 1ca7c3e aaec566 1ca7c3e d89a860 aaec566 1ca7c3e aaec566 ed124cc d89a860 ed124cc d89a860 b5586e6 1ca7c3e c016742 1ca7c3e c016742 1ca7c3e c016742 1ca7c3e c016742 9c5a6d0 8f74332 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
import gradio as gr
import torch
import os
from classifier_app import ClassifierApp, config
from typing import Dict
def create_interface(app: ClassifierApp) -> gr.Blocks:
"""Створення веб-інтерфейсу"""
# Синхронізуємо інформацію перед створенням інтерфейсу
initial_info = app.sync_system_info()
with gr.Blocks() as demo:
gr.Markdown("# SDC Classifier")
with gr.Tabs():
# Вкладка 1: Тестування одного тексту
with gr.TabItem("Тестування одного тексту"):
with gr.Row():
with gr.Column():
text_input = gr.Textbox(
label="Введіть текст для аналізу",
lines=5,
placeholder="Введіть текст..."
)
threshold_slider = gr.Slider(
minimum=0.0,
maximum=1.0,
value=0.3,
step=0.05,
label="Поріг впевненості"
)
single_process_btn = gr.Button("Проаналізувати")
with gr.Column():
result_text = gr.JSON(label="Результати аналізу")
with gr.Accordion("Налаштування моделі", open=False):
with gr.Row():
model_type = gr.Radio(
choices=["OpenAI", "Local"],
value="OpenAI",
label="Тип моделі"
)
model_choice = gr.Dropdown(
choices=config.DEFAULT_OPENAI_MODELS,
value=config.DEFAULT_OPENAI_MODELS[0],
label="OpenAI model",
visible=True
)
local_model_path = gr.Textbox(
value=config.DEFAULT_LOCAL_MODEL,
label="Шлях до локальної моделі",
visible=False
)
device_choice = gr.Radio(
choices=["cuda", "cpu"],
value="cuda" if torch.cuda.is_available() else "cpu",
label="Пристрій для локальної моделі",
visible=False
)
with gr.Row():
json_file = gr.File(
label="Завантажити новий JSON з класами",
file_types=[".json"]
)
force_rebuild = gr.Checkbox(
label="Примусово перебудувати signatures",
value=False
)
with gr.Row():
build_btn = gr.Button("Оновити signatures")
build_out = gr.Label(label="Статус signatures")
cache_stats = gr.JSON(label="Статистика кешу", value={})
# Вкладка 2: Інформація про систему
with gr.TabItem("Інформація про систему"):
system_info = gr.JSON(
value=app.initial_info,
label="Статус системи"
)
system_md = gr.Markdown()
system_md.value = app.update_system_markdown(app.initial_info)
# Вкладка 3: Пакетна обробка
with gr.TabItem("Пакетна обробка"):
gr.Markdown("## Оцінка класифікації")
with gr.Row():
csv_input = gr.File(
label="CSV файл з колонками Category та Question",
file_types=[".csv"]
)
threshold_slider_batch = gr.Slider(
minimum=0.0,
maximum=1.0,
value=0.3,
step=0.05,
label="Поріг впевненості"
)
evaluate_btn = gr.Button("Оцінити класифікацію")
results_df = gr.DataFrame(
label="Результати класифікації"
)
stats_md = gr.Markdown("### Статистика класифікації")
save_results_btn = gr.Button("Завантажити результати")
download_file = gr.File(label="Завантажити файл з результатами")
save_status = gr.Markdown()
# Підключення обробників подій
model_type.change(
fn=app.update_model_inputs,
inputs=[
model_type,
model_choice,
local_model_path,
device_choice
],
outputs=[
model_choice,
local_model_path,
device_choice,
system_info,
system_md,
build_out,
cache_stats
]
)
build_btn.click(
fn=app.update_classifier_settings,
inputs=[
json_file,
model_type,
model_choice,
local_model_path,
device_choice,
force_rebuild
],
outputs=[build_out, cache_stats, system_info, system_md]
)
single_process_btn.click(
fn=app.process_single_text,
inputs=[text_input, threshold_slider],
outputs=result_text
)
evaluate_btn.click(
fn=app.evaluate_batch,
inputs=[csv_input, threshold_slider_batch],
outputs=[results_df, stats_md]
)
save_results_btn.click(
fn=app.save_evaluation_results,
outputs=[download_file, save_status]
)
return demo
def main():
try:
print("\nЗапуск програми...")
app = ClassifierApp()
print("\nПочаток ініціалізації середовища...")
init_result, classifier = app.initialize_environment()
print("\nРезультат ініціалізації:")
print(f"Статус: {init_result['status']}")
if init_result.get('errors'):
print("Помилки:", init_result['errors'])
if classifier is None or init_result["status"] != "success":
print("\nНе вдалося ініціалізувати середовище")
return
print(f"\nІнформація про систему:")
print(f"Кількість завантажених класів: {len(init_result['classes_info']['classes_list'])}")
print(f"Сигнатури: {'Завантажено' if os.path.exists(config.DEFAULT_SIGNATURES_FILE) else 'Створюються'}")
demo = create_interface(app)
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)
except Exception as e:
print(f"\nКритична помилка в main(): {str(e)}")
import traceback
print("\nДетальний traceback:")
print(traceback.format_exc())
if __name__ == "__main__":
main() |