File size: 3,663 Bytes
bcdb6bd
 
 
 
 
7dc9083
bcdb6bd
 
 
 
 
 
7dc9083
 
 
 
bcdb6bd
7dc9083
 
 
 
 
 
 
bcdb6bd
7dc9083
bcdb6bd
 
7dc9083
 
bcdb6bd
20afb4d
bcdb6bd
 
 
 
 
7dc9083
bcdb6bd
7dc9083
bcdb6bd
 
981ac1c
bcdb6bd
e9be466
bcdb6bd
 
 
 
7dc9083
bcdb6bd
 
 
7dc9083
7f6603c
bcdb6bd
 
 
4203274
da848ef
bcdb6bd
 
 
 
7dc9083
 
bcdb6bd
 
7dc9083
bcdb6bd
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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