Spaces:
Runtime error
Runtime error
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() |