Spaces:
Sleeping
Sleeping
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() |