File size: 3,830 Bytes
f92e548
 
 
 
 
6664893
 
 
f92e548
 
 
 
6664893
 
 
 
f92e548
 
 
 
 
6664893
 
f92e548
6664893
 
f92e548
6664893
 
f92e548
 
 
6664893
 
 
 
 
f92e548
 
 
6664893
 
 
f92e548
6664893
f92e548
6664893
 
f92e548
6664893
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
77
78
import os
from openai import AzureOpenAI
import gradio as gr

client = AzureOpenAI(
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), 
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-02-01"
)

# Define three prompt options with user-friendly names
prompts = [
    "be a helpful assistant",
    "Crie um resumo de aproximadamente uma página da sentença abaixo em linguagem simples e acessível, sem jargões. O resumo deve conter: 1) Tipo de sentença; 2) fatos relevantes: 2.1) data do crime; 2.2) Local do crime; 2.3 vítimas; 2.4) descrição do fato apurado; 3) A decisão 4) A fundamentação.",
    """Abaixo consta uma transcrição de uma oitiva judicial. Faça uma citação indireta do que a depoente respondeu, separado por ponto e vírgula. O resultado deve constar tudo que foi dito pela testemunha, podendo ser omitido apenas o que for repetitivo.  O texto não deve ser interrompido até exaurir todo o conteúdo da oitiva.
    exemplo de reposta: Estava trabalhando durante os fatos; Trabalhava em um depósito de cerveja ao lado de um posto de gasolina; Quando soube dos fatos a vítima estava no hospital; Fechou o comércio e foi até o Hospital de Acopiara, todavia a vítima foi transferida; Ouviu dizer que Leandro chegou alterado e começou a espancar Vitória, tendo a mãe da adolescente a defendido; Neste momento o réu sacou um punhal e perfurou a ofendida; Não sabe de nenhuma desavença entre a vítima e o réu; Acredita que o réu estava "virado" de uma vaquejada; Conhece o réu apenas de vista; É irmão e sobrinho de Luciene."""
]

# Initialize a dictionary to store chat histories per user
chat_histories = {}

def predict(message, prompt_index):
    history = chat_histories.setdefault(prompt_index, [])

    selected_prompt = prompts[prompt_index]
    history_openai_format = [{"role": "system", "content": selected_prompt}]
    for human, assistant in history:
        history_openai_format.append({"role": "user", "content": human})
        history_openai_format.append({"role": "assistant", "content": assistant})
    history_openai_format.append({"role": "user", "content": message})

    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=history_openai_format,
        temperature=1.0,
        stream=True
    )

    partial_message = ""
    for chunk in response:
        if chunk.choices and chunk.choices[0].delta.content is not None:
            partial_message += chunk.choices[0].delta.content
            yield partial_message

    chat_histories[prompt_index].append((message, partial_message))

def predict_wrapper(message, prompt_index):
    return list(predict(message, prompt_index))[-1]

def clear_history():
    global chat_histories
    chat_histories = {}

# Gradio Blocks interface
with gr.Blocks() as demo:
    with gr.Tab("Genérica"):
        message_input = gr.Textbox(label="Message")
        output = gr.Textbox()
        message_input.submit(predict_wrapper, inputs=[message_input, gr.State(0)], outputs=output)
    
    with gr.Tab("Resumir Sentença em linguagem simples"):
        message_input = gr.Textbox(label="Message")
        output = gr.Textbox()
        message_input.submit(predict_wrapper, inputs=[message_input, gr.State(1)], outputs=output)
    
    with gr.Tab("Transformar Transcrição de oitiva judicial em citação indireta"):
        message_input = gr.Textbox(label="Message")
        output = gr.Textbox()
        message_input.submit(predict_wrapper, inputs=[message_input, gr.State(2)], outputs=output)
    
    with gr.Tab("Clear Memory"):
        clear_button = gr.Button("Clear Memory")
        clear_button.click(fn=clear_history, inputs=[], outputs=[])

try:
    demo.launch(auth=([(os.getenv("username"), os.getenv("password"))]))
finally:
    clear_history()