Legal_Position_Generator / interface.py
DocUA's picture
edit interface
e9be466
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