isatopus's picture
v2
6664893
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()