|
import datetime |
|
import gradio as gr |
|
from dotenv import load_dotenv |
|
from langchain.vectorstores import Chroma |
|
from langchain.embeddings.openai import OpenAIEmbeddings |
|
from langchain.chat_models import ChatOpenAI |
|
from langchain.prompts import PromptTemplate |
|
from langchain.chains import RetrievalQA |
|
from langchain.chains import ConversationalRetrievalChain |
|
from langchain.memory import ConversationBufferMemory |
|
|
|
|
|
import warnings |
|
warnings.filterwarnings('ignore') |
|
|
|
current_date = datetime.datetime.now().date() |
|
if current_date < datetime.date(2023, 9, 2): |
|
llm_name = "gpt-3.5-turbo-0301" |
|
else: |
|
llm_name = "gpt-3.5-turbo" |
|
|
|
|
|
|
|
def chatWithNCAIR(question, history): |
|
load_dotenv() |
|
|
|
persist_directory = 'docs/chroma/' |
|
embedding = OpenAIEmbeddings() |
|
vectordb = Chroma(persist_directory=persist_directory, |
|
embedding_function=embedding) |
|
llm = ChatOpenAI(model_name=llm_name, temperature=0) |
|
|
|
template = """Use the following pieces of context to answer the question at the end. |
|
If you don't know the answer, just say that you don't know, don't try to make up an answer. |
|
Use three sentences maximum. Keep the answer as concise as possible. |
|
Always say "thank you for choosing NCAIR BOT!" at the end of the answer. |
|
{context} |
|
Question: {question} |
|
Helpful Answer:""" |
|
QA_CHAIN_PROMPT = PromptTemplate( |
|
input_variables=["context", "question"], template=template,) |
|
|
|
|
|
from langchain.chains import RetrievalQA |
|
|
|
qa_chain = RetrievalQA.from_chain_type(llm, |
|
retriever=vectordb.as_retriever(), |
|
return_source_documents=True, |
|
chain_type_kwargs={"prompt": QA_CHAIN_PROMPT}) |
|
|
|
memory = ConversationBufferMemory( |
|
memory_key="chat_history", |
|
return_messages=True |
|
) |
|
retriever = vectordb.as_retriever() |
|
qa = ConversationalRetrievalChain.from_llm( |
|
llm, |
|
retriever=retriever, |
|
memory=memory |
|
) |
|
|
|
result = qa({"question": question}) |
|
return result["answer"] |
|
|
|
|
|
demo = gr.ChatInterface(fn=chatWithNCAIR, |
|
chatbot=gr.Chatbot(height=300, min_width=40), |
|
textbox=gr.Textbox( |
|
placeholder="Ask me a question relating to NCAIR"), |
|
title="Chat with NCAIR💬", |
|
description="Ask NCAIR any question", |
|
theme="soft", |
|
cache_examples=True, |
|
retry_btn=None, |
|
undo_btn="Delete Previous", |
|
clear_btn="Clear",) |
|
|
|
demo.launch(inline=False) |
|
|