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