File size: 2,628 Bytes
446fc9d
 
b933696
 
e4cb585
446fc9d
 
 
 
 
 
 
 
 
 
 
 
 
b933696
e92b0bb
 
446fc9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca4e052
446fc9d
 
 
 
ca4e052
446fc9d
 
 
 
 
 
 
 
 
 
82b2dcd
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
import os

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
PINECONE_INDEX_NAME = os.getenv("PINECONE_INDEX_NAME")
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")

import gradio as gr
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings,ChatOpenAI
from langchain_pinecone import PineconeVectorStore
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate


model = ChatOpenAI(openai_api_key=OPENAI_API_KEY, model="gpt-3.5-turbo", )
embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)

vectorstore = PineconeVectorStore.from_existing_index(PINECONE_INDEX_NAME, embeddings)
retriever = vectorstore.as_retriever()

def create_conversation(query: str, chat_history: list) -> tuple:
    try:

        system_instruction = '''Você é um assistente pessoal e muito educado para responder a quaisquer perguntas sobre documentos da empresa Interfocus, respondendo sempre em português.
                             Se a pergunta do usuário exigir que você forneça informações específicas dos documentos, dê sua resposta baseada apenas nos exemplos fornecidos.
                             NÃO gere uma resposta que NÃO esteja escrita nos exemplos fornecidos.'''

        template = (
                    f"{system_instruction} "
                    "Combine o histórico de chat e a pergunta em sequência em uma pergunta independente."
                    "Histórico de chat: {chat_history}"
                    "Pergunta independente: {question}"
        )

        condense_question_prompt = PromptTemplate.from_template(template)

        memory = ConversationBufferMemory(
            memory_key='chat_history',
            return_messages=True # tava False
        )

        qa_chain = ConversationalRetrievalChain.from_llm(
            llm=model,
            retriever=retriever,
            condense_question_prompt=condense_question_prompt,
            memory=memory,
            get_chat_history=lambda h: h,
        )

        result = qa_chain({'question': query, 'chat_history': chat_history})
        chat_history.append((query, result['answer']))
        return '', chat_history


    except Exception as e:
        chat_history.append((query, e))
        return '', chat_history

# build gradio ui
with gr.Blocks() as test:

    chatbot = gr.Chatbot(label='Chat Empresa Interfocus')
    msg = gr.Textbox()
    clear = gr.ClearButton([msg, chatbot])

    msg.submit(create_conversation, [msg, chatbot], [msg, chatbot])

test.launch(debug=True)