import gradio as gr from typing import List import json from generation import GenerationProvider, GenerationModelName, generate_legal_position from utils import extract_court_decision_text def create_gradio_interface(): def update_generation_model_choices(provider): if provider == GenerationProvider.OPENAI.value: return gr.Dropdown(choices=[m.value for m in GenerationModelName if m.value.startswith("ft")]) # elif provider == GenerationProvider.GEMINI.value: # return gr.Dropdown(choices=[m.value for m in GenerationModelName if m.value.startswith("gemini")]) elif provider == GenerationProvider.ANTHROPIC.value: return gr.Dropdown(choices=[m.value for m in GenerationModelName if m.value.startswith("claude")]) def get_model_name_by_value(model_value: str) -> str: try: # Знаходимо відповідну модель в енумі за значенням model = next(model for model in GenerationModelName if model.value == model_value) return model.name except StopIteration: return model_value async def generate_position_action(url, provider, model_name): try: court_decision_text = extract_court_decision_text(url) legal_position_json = generate_legal_position(court_decision_text, "", provider, model_name) display_model_name = get_model_name_by_value(model_name) position_output_content = ( f"**Проект правової позиції (модель: {display_model_name}):**\n" f"*{legal_position_json['title']}*: \n" f"{legal_position_json['text']} " f"**Категорія:** \n{legal_position_json['category']} " f"({legal_position_json['proceeding']})\n\n" ) return position_output_content except Exception as e: return f"Error during position generation: {str(e)}" with gr.Blocks() as app: gr.Markdown("# Генератор проектів правових позицій") url_input = gr.Textbox(label="URL судового рішення (у форматі https://reyestr.court.gov.ua/Review/{doc_id}):") with gr.Row(): generation_provider_dropdown = gr.Dropdown( choices=[p.value for p in GenerationProvider], value=GenerationProvider.OPENAI.value, label="Провайдер AI для генерування", ) generation_model_dropdown = gr.Dropdown( choices=[m.value for m in GenerationModelName if m.value.startswith("ft")], value=GenerationModelName.GPT_MODEL_9.value, label="Модель для генерування", ) generate_position_button = gr.Button("Генерувати") position_output = gr.Markdown(label="Правова позиція суду за введеним рішенням") # Підключення функцій до кнопок та подій generate_position_button.click( fn=generate_position_action, inputs=[url_input, generation_provider_dropdown, generation_model_dropdown], outputs=position_output ) # Оновлення списку моделей при зміні провайдера generation_provider_dropdown.change( fn=update_generation_model_choices, inputs=generation_provider_dropdown, outputs=generation_model_dropdown ) return app