File size: 5,583 Bytes
f92e548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c2c0fc
 
f92e548
 
 
3c2c0fc
 
 
d012c60
 
f92e548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c2c0fc
 
 
d012c60
 
319cae5
3c2c0fc
d012c60
 
 
 
 
 
 
 
 
3c2c0fc
 
 
 
 
 
 
 
 
 
 
 
 
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
from openai import AzureOpenAI
import gradio as gr
from dotenv import load_dotenv

load_dotenv()
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 = [
    os.getenv("prompt1"),
    os.getenv("prompt2"),
    os.getenv("prompt3"),
    "Você é um chatbot especializado em direito brasileiro, treinado em legislação, jurisprudência e doutrina nacionais. Sua principal função é fornecer informações jurídicas precisas e confiáveis aos usuários. Para cumprir essa tarefa, siga estas diretrizes: 1. Base de Conhecimento: Legislação: Consulte a Constituição Federal, leis, decretos, portarias e demais normas jurídicas brasileiras atualizadas. Jurisprudência: Utilize julgados dos tribunais superiores brasileiros (STF, STJ, etc.), tribunais estaduais e tribunais federais, sempre buscando decisões recentes e relevantes para o tema em questão. Doutrina: Recorra a livros, artigos acadêmicos e obras de renomados juristas brasileiros para aprofundar sua análise e fornecer diferentes perspectivas sobre o assunto. 2. Metodologia de Resposta: Compreensão da Pergunta: Leia atentamente a pergunta do usuário para identificar o tema central, as dúvidas específicas e o contexto em que a questão se insere. Pesquisa e Análise: Utilize sua base de conhecimento para pesquisar as normas, julgados e doutrinas relevantes para o tema. Analise as informações encontradas, identificando os pontos convergentes e divergentes, e avalie a aplicabilidade das normas e precedentes ao caso concreto. Elaboração da Resposta: Estruture sua resposta de forma clara, objetiva e didática, utilizando linguagem jurídica acessível ao público leigo. Apresente as normas, julgados e doutrinas relevantes, explicando sua aplicação ao caso e destacando os pontos mais importantes. Precisão e Confiabilidade: Priorize a precisão e a confiabilidade das informações fornecidas, evitando especulações ou opiniões pessoais. Se houver dúvidas ou controvérsias sobre o tema, apresente as diferentes correntes e perspectivas, sem tomar partido.Atualização: Mantenha-se atualizado sobre as mudanças legislativas, jurisprudenciais e doutrinárias, buscando sempre as informações mais recentes e relevantes.",
    "Seja um assistente de IA útil",
]

option_names = [
    "Resumir Sentença em linguagem simples",
    "Resumir Sentença em linguagem simples (Júri)",
    "Transformar Transcrição de oitiva judicial em citação indireta",
    "IA jurídica",
    "IA genérica",    
]

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

def predict(message, history, selected_option, username):
    # Get the user's chat history or create a new one
    if username not in chat_histories:
        chat_histories[username] = []
    history = chat_histories[username]

    # Get the index of the selected option
    selected_index = option_names.index(selected_option)
    # Get the corresponding prompt based on the selected index
    selected_prompt = prompts[selected_index]
    history_openai_format = []
    history_openai_format.append({"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,
    max_tokens=2000,   
    stream=True)

    partial_message = ""
    for chunk in response:
        # Check if choices exist and are not empty
        if chunk.choices and len(chunk.choices) > 0: 
            if chunk.choices[0].delta.content is not None:
                partial_message = partial_message + chunk.choices[0].delta.content
                yield partial_message

    # Update the chat history for the user
    chat_histories[username].append((message, partial_message))

option_dropdown = gr.Dropdown(choices=option_names, label="Select Option")
username_textbox = gr.Textbox(label="Username", placeholder="Enter your username") 

bot = gr.ChatInterface(
    predict, 
    additional_inputs=[option_dropdown, username_textbox],
    title="Chatbot do direito 👩‍⚖️",
    description="""Feito para auxiliar profissionais do direito no dia-a-dia.
\n\n
Instruções: 
1. no canto inferior da tela clique em "Additional Input", selecione a tarefa desejada:
    a) Resumir Sentença em linguagem simples;
    b) Resumir Sentença em linguagem simples (Júri);
    c) Transformar Transcrição de oitiva judicial em citação indireta;
    d)IA jurídica;
    e)IA genérica;  
2. Digite um nome de usuário (O nome de usuário serve apenas para não embaralhar as mensagens entre usuários concomitantes).
3. Copie o conteúdo para o campo "insira sua mensagem" e depois clique em "enviar". \n
e-mail: [email protected]
""",
    theme="Soft",
    examples=[
        ["quais as teorias para o início da vida", "genérico (direito)", "usuário1"], 
        ["O que é exceção de pré-executividade", "genérico (direito)", "Usuário1"], 
    ],
    retry_btn="🔄Refazer pergunta",
    undo_btn=None,
    clear_btn="🗑️Apagar tudo",
    submit_btn="enviar",
    stop_btn="parar",
)
bot.launch(auth=(os.getenv("username"), os.getenv("password")))