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