Spaces:
Running
Running
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 |