cd2-ai-hippo / app.py
Renato Cardoso Zimmer
#Try#
f4e83a4
raw
history blame
3.48 kB
# coding=utf8
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA
import gradio as gr
import time
import os
# Carregar chave da API OpenAI
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise ValueError("OPENAI_API_KEY não está definido no ambiente.")
else:
print("Chave API carregada com sucesso.")
# Variáveis globais para armazenamento dos objetos carregados
global bd, chain
# Load CSS from a separate file
try:
css_file = open("src/css/styles.css", "r")
css = css_file.read()
css_file.close()
print("Arquivo CSS carregado com sucesso.")
except Exception as e:
print(f"Erro ao carregar o arquivo CSS: {e}")
def initialize_chatbot():
global bd, chain
try:
llm = ChatOpenAI(
temperature=0.0,
model="gpt-3.5-turbo",
api_key=api_key,
)
print("Modelo ChatOpenAI inicializado com sucesso.")
except Exception as e:
print(f"Erro ao inicializar o modelo ChatOpenAI: {e}")
try:
carregador = TextLoader("docs/Produtos.txt", encoding="utf-8")
documentos = carregador.load()
print("Documentos carregados com sucesso.")
except Exception as e:
print(f"Erro ao carregar documentos: {e}")
try:
quebrador = CharacterTextSplitter(separator="\n\n\n")
textos = quebrador.split_documents(documentos)
print("Documentos divididos com sucesso.")
except Exception as e:
print(f"Erro ao dividir documentos: {e}")
try:
embeddings = OpenAIEmbeddings()
bd = FAISS.from_documents(textos, embeddings)
chain = RetrievalQA.from_chain_type(llm, retriever=bd.as_retriever())
print("FAISS e RetrievalQA inicializados com sucesso.")
except Exception as e:
print(f"Erro ao inicializar FAISS ou RetrievalQA: {e}")
def chatbot(input_text):
modelo_prompt = PromptTemplate.from_template(
"Você é um somelier de vinho e um cliente pede uma recomendação. O cliente diz: {pergunta}",
)
prompt = modelo_prompt.format(pergunta=input_text)
try:
response = chain({"query": prompt})
print(response['result'])
return response['result']
except Exception as e:
print(f"Erro ao obter resposta do chatbot: {e}")
return "Desculpe, houve um erro ao processar sua solicitação."
with gr.Blocks(css=css, title='Adega Hippo') as demo:
realPath = str(os.path.dirname(os.path.realpath(__file__)))
img1 = gr.Image("images/adega_hippo.png", elem_classes="img svelte-ms5bsk", elem_id="img-svelte-ms5bsk")
gpt = gr.Chatbot(label = ".", elem_classes="wrap svelte-1o68geq", elem_id="chatbot")
msg = gr.Textbox(elem_id="div-svelte-awbtu4", elem_classes="textBoxBot", show_label=False,
placeholder="Bem vindo ao Hippo Supermercados, em que posso ajuda-lo?",
)
def respond(message, chat_history):
chat_history.append((message, chatbot(message)))
time.sleep(1)
return "", chat_history
msg.submit(respond, [msg, gpt], [msg, gpt])
# Inicializar o chatbot
initialize_chatbot()
# Lançar o aplicativo sem a opção share
demo.launch()