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