File size: 4,779 Bytes
cd6e3b3
d0899a1
ea66d0d
cd6e3b3
 
 
 
 
 
d0899a1
ea66d0d
d0899a1
3ca619c
ea66d0d
3ca619c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d0899a1
3ca619c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea66d0d
3ca619c
 
 
 
 
 
 
ea66d0d
3ca619c
 
 
ea66d0d
d0899a1
ea66d0d
 
 
 
98005d7
3ca619c
ea66d0d
 
3ca619c
 
98005d7
ea66d0d
 
 
 
 
 
 
3ca619c
ea66d0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ca619c
ea66d0d
 
3ca619c
ea66d0d
 
d0899a1
ea66d0d
3ca619c
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from dotenv import load_dotenv
import gradio as gr
from openai import OpenAI
import os

load_dotenv()  # Carregar variáveis de ambiente do arquivo .env

USUARIO = os.environ.get("USUARIO")
SENHA = os.environ.get("SENHA")

client = OpenAI()

def process_message(message, history, temperature=1.0, max_tokens=2048, top_p=1.0, model="gpt-4.1", system_prompt="", usuario_value="", senha_value=""):
    
    if  usuario_value == USUARIO and senha_value == SENHA:
        # Verificar se já existe uma mensagem do sistema no início do histórico
        system_message_exists = any(msg.get("role") == "system" for msg in history)
        
        # Se não existir e o system_prompt não estiver vazio, adicionar no início do histórico
        if not system_message_exists and system_prompt.strip():
            history.insert(0, {"role": "system", "content": system_prompt})
        
        history.append({"role": "user", "content": message})
        
        # Filtrar o histórico e remover metadata e options
        filtered_history = []
        for msg in history:
            if msg.get("role") in ["user", "system", "assistant"]:
                # Criar novo dicionário apenas com role e content
                filtered_msg = {
                    "role": msg["role"],
                    "content": msg["content"]
                }
                filtered_history.append(filtered_msg)
        
        print(history)

        response = client.responses.create(
            model=model, 
            input=filtered_history,  # Usando o histórico filtrado
            text={
                "format": {
                    "type": "text"
                }
            },
            reasoning={},
            
            tools=[
            {
                "type": "file_search",
                "vector_store_ids": [
                    "vs_680171e31fcc8191937768624f4f4a18"
                ]
            }
            ],
            
            temperature=temperature,  # Use as variáveis de parâmetros
            max_output_tokens=max_tokens,  # Corrigido de max_output_tokens para max_tokens
            top_p=top_p,
            store=True
        )
        
        # Atualize para obter o texto da resposta do objeto de resposta corretamente
        history.append({"role": "assistant", "content": response.output_text})
        return "", history
    return "", history

with gr.Blocks() as interface:
    with gr.Row():
        with gr.Column():
            history = gr.Chatbot(type='messages')
            msg = gr.Textbox(label="Mensagem")
            # clear = gr.Button("Limpar")
        
        with gr.Column():
            gr.Markdown("Para usar necessário digitar o usuário e senha")	
            usuario_txt = gr.Textbox(label="Usuario")
            senha_txt = gr.Textbox(label="Senha", type="password")
            system_prompt = gr.Textbox(
                label="Prompt do Sistema",
                value="Você é um assistente inteligente treinado para responder exclusivamente com base nas informações fornecidas nos documentos anexados (armazenados na base vetorial).\nNunca forneça respostas baseadas em conhecimento próprio, conhecimento geral, ou treinamento anterior.\nSe a resposta à pergunta não estiver clara ou presente nos documentos fornecidos, responda educadamente que você não tem essa informação.\n",
                lines=3,
                info="Define o comportamento base do assistente"
            )
            model = gr.Dropdown(
                choices=["gpt-4.1"],
                value="gpt-4.1",
                label="Modelo",
                info="Selecione o modelo de linguagem"
            )
            temperature = gr.Slider(
                minimum=0.0,
                maximum=2.0,
                value=1.0,
                step=0.1,
                label="Temperatura",
                info="Controla a aleatoriedade das respostas (0=focado, 2=criativo)"
            )
            max_tokens = gr.Slider(
                minimum=256,
                maximum=4096,
                value=4096,
                step=256,
                label="Tokens máximos",
                info="Limite máximo de tokens na resposta"
            )
            top_p = gr.Slider(
                minimum=0.0,
                maximum=1.0,
                value=1.0,
                step=0.1,
                label="Top P",
                info="Controla a diversidade das respostas"
            )
            
    
    msg.submit(process_message, 
              [msg, history, temperature, max_tokens, top_p, model, system_prompt, usuario_txt, senha_txt], 
              [msg, history])
    # clear.click(lambda: None, None, history, queue=False)

if __name__ == "__main__": 
    interface.launch()