Spaces:
Running
Running
from langchain.embeddings.openai import OpenAIEmbeddings | |
from langchain.vectorstores import Chroma | |
from langchain.chat_models import ChatOpenAI | |
from langchain.prompts.chat import ( | |
ChatPromptTemplate, | |
SystemMessagePromptTemplate, | |
HumanMessagePromptTemplate, | |
) | |
from langchain.chains import ChatVectorDBChain | |
import gradio as gr | |
# initialize variables | |
query = "" | |
chat_history = [] | |
system_template = "You are a helpful assistant. Use the following pieces of context to \ | |
answer the user's question. {context}" | |
temperature = 0 | |
qa = None | |
# function called when user submits a question | |
def chatbot(input, history=[]): | |
result = qa({"question": input, "chat_history": []}) | |
history.append((input, result["answer"])) | |
return history, history | |
# function to set OpenAI key and initalize LangChain chain | |
def set_open_ai_key(input): | |
# read in embedddings from vector db store | |
embeddings = OpenAIEmbeddings(openai_api_key=input) | |
vectordb = Chroma(persist_directory="vector_store", embedding_function=embeddings) | |
# initialize chatbot message templates | |
messages = [ | |
SystemMessagePromptTemplate.from_template(system_template), | |
HumanMessagePromptTemplate.from_template("{question}\Standalone question"), | |
] | |
prompt = ChatPromptTemplate.from_messages(messages) | |
# initialize chatbot chain | |
global qa | |
qa = ChatVectorDBChain.from_llm( | |
ChatOpenAI(temperature=temperature, openai_api_key=input), | |
vectordb, | |
qa_prompt=prompt, | |
) | |
# example questions user can choose from in Gradio UI to test the chatbot | |
examples = [ | |
"What does Biggie Smalls say about learning from other people's mistakes?", | |
"What can I learn from Megan Quinn about reading?", | |
"What does Scott Belsky say about optimizing what works?", | |
"What is product market fit?", | |
"What is the best way to lower CAC?", | |
"What is the most important competitive advantage a business can have today?", | |
] | |
# initialize Gradio UI using chatbot UI | |
gr_interface = gr.Interface( | |
fn=chatbot, | |
inputs=["text", "state"], | |
outputs=["chatbot", "state"], | |
title="TrenBot", | |
description="Q&A Chatbot for Tren Griffin's views on the \ | |
market, tech, and everything else", | |
examples=examples, | |
thumbnail="https://i0.wp.com/25iq.com/wp-content/uploads/2012/10/tren_griffin_crop.jpg", | |
) | |
# add OpenAI key textbox to Gradio UI | |
with gr_interface: | |
openai_key_textbox = gr.Textbox( | |
lines=1, | |
placeholder="Paste your OpenAI key here and hit Enter.", | |
type="password", | |
label="Your OpenAI Key", | |
) | |
openai_key_textbox.submit(set_open_ai_key, inputs=openai_key_textbox) | |
# launch Gradio UI | |
gr_interface.launch() | |