Esse é o código do arquivo app.py :
from flask import Flask,render_template, request, Response from openai import OpenAI from dotenv import load_dotenv import os from time import sleep from helpers import * from selecionar_persona import * from selecionar_documento import * from assistente_ecomart import *
load_dotenv()
cliente = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) modelo = "gpt-4"
app = Flask(name) app.secret_key = 'alura'
Cria um novo assistente através do método pegar_json.
assistente = pegar_json()
Acessando a thread_id do json.
thread_id = assistente["thread_id"]
Pegando o atributo assisant_id do json.
assistente_id = assistente["assistant_id"]
Pegando a lista de arquivos do metadados
file_ids = assistente["file_ids"]
def bot(prompt): maximo_tentativas = 1 repeticao = 0 while True: try: # Camada que traz a personalidade do assistente. personalidade = personas[selecionar_persona(prompt)] # Acessa a camada de mensagens da thread e cria uma nova mensagem que vai ser interpretada pelo assistente para chegar a resposta # Responsável por garantir que essa persona seja associada. cliente.beta.threads.messages.create( thread_id=thread_id, role = "user", content = f""" Assuma, de agora em diante, a personalidade abaixo. Ignore as personalidades anteriores.
# Persona
{personalidade}
""",
file_ids=file_ids
)
# Criar uma mensagem que vai ser associada a uma thread. Essa mensagem é a pergunta que o usuário fez para o assistente.
cliente.beta.threads.messages.create(
thread_id=thread_id,
role = "user",
content = prompt,
file_ids=file_ids
)
# Execução da thread. Passando o parâmetro thread que vai manter o histórico de mensagens e o identificador do assistente que vai responder a essa thread.
run = cliente.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=assistente_id
)
# Só demonstra a a resposta quando o status da execução for "completed". Enquanto o status da execução for diferente de "completed", o código vai ficar em loop, esperando a resposta do assistente.
# Passar a thread que precisa observar e a execução que está sendo realizada. Quando o status for alterado, ai consegue acessar a resposta.
while run.status !="completed":
run = cliente.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
# Guarda todas as informações que podem ser acessadas pelo assistente em cima de uma thread.
historico = list(cliente.beta.threads.messages.list(thread_id=thread_id).data)
resposta = historico[0]
return resposta
except Exception as erro:
repeticao += 1
if repeticao >= maximo_tentativas:
return "Erro no GPT: %s" % erro
print('Erro de comunicação com OpenAI:', erro)
sleep(1)
@app.route("/chat", methods=["POST"]) def chat(): prompt = request.json["msg"] resposta = bot(prompt) # Resposta que tem um formato com relação ao assistente. texto_resposta = resposta.content[0].text.value return texto_resposta
@app.route("/") def home(): return render_template("index.html")
if name == "main": app.run(debug = True)
