Spaces:
Sleeping
Sleeping
File size: 4,380 Bytes
8ad03c1 2d0c971 8ad03c1 86e8342 0d6fbea cf8ca68 8ad03c1 86e8342 8ad03c1 d551a1b cf8ca68 4f900c1 cf8ca68 d551a1b 86e8342 2d0c971 cf8ca68 3cb6896 cf8ca68 4f900c1 cf8ca68 2d0c971 86e8342 3eef9c9 86e8342 f4e83a4 8ad03c1 4f900c1 09ba70b 8ad03c1 6382838 4f900c1 cf8ca68 8ad03c1 2d0c971 6382838 8ad03c1 86e8342 8ad03c1 cf8ca68 |
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 |
# 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:
with open("src/css/styles.css", "r") as css_file:
css = css_file.read()
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", chunk_overlap=200)
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 sommelier altamente experiente trabalhando para a Adega Hippo, uma adega renomada por sua vasta seleção de vinhos de alta qualidade. Um cliente entra na adega e pede uma recomendação de vinho. Utilize seu extenso conhecimento sobre vinhos, incluindo variedades de uvas, regiões vinícolas, harmonizações gastronômicas e preferências pessoais, para fornecer a melhor recomendação possível.
Seja amigável, acolhedor e pronto para oferecer sugestões detalhadas e úteis. Lembre-se de perguntar ao cliente sobre suas preferências pessoais, como tipos de vinho que gosta (tinto, branco, rosé, espumante), ocasiões especiais, e qualquer outra informação relevante que possa ajudá-lo a fazer uma recomendação personalizada.
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."
def respond(message, chat_history):
try:
response = chatbot(message)
chat_history.append((message, response))
time.sleep(1)
return "", chat_history
except Exception as e:
print(f"Erro ao responder mensagem: {e}")
return "Erro ao processar a mensagem.", chat_history
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?",
)
msg.submit(respond, [msg, gpt], [msg, gpt])
# Inicializar o chatbot
initialize_chatbot()
# Lançar o aplicativo sem a opção share
demo.launch()
|