Spaces:
Sleeping
Sleeping
import pdb | |
import pandas as pd | |
import pinecone | |
from dotenv import load_dotenv | |
import injection | |
from langchain.vectorstores import Pinecone as pineconeVectorStore | |
from langchain.embeddings.openai import OpenAIEmbeddings | |
from langchain.embeddings import CacheBackedEmbeddings | |
from langchain.storage import LocalFileStore | |
import chainlit as cl | |
load_dotenv() | |
index_name = 'moviereviews' | |
import pinecone | |
# create a new index | |
pinecone.init( | |
api_key='f8f8aa14-3087-44f8-a933-1aa0d335221a', | |
environment='gcp-starter' | |
) | |
index = pinecone.Index('moviereviews') | |
# create embedder | |
store = LocalFileStore("./cache/") | |
core_embeddings_model = OpenAIEmbeddings() | |
embedder = CacheBackedEmbeddings.from_bytes_store( | |
core_embeddings_model, store, namespace=core_embeddings_model.model | |
) | |
# inject data if have not | |
# injection.inject(index, embedder, "./data/barbie.csv") | |
# create vectorstore from index and embedder | |
text_field = "text" | |
vectorstore = pineconeVectorStore( | |
index, embedder.embed_query, text_field | |
) | |
model_name = "gpt-4" | |
from langchain.llms.openai import OpenAIChat | |
llm = OpenAIChat(model=model_name, temperature=0) | |
retriever = vectorstore.as_retriever() | |
from langchain.chains import RetrievalQA | |
from langchain.callbacks import StdOutCallbackHandler | |
handler = StdOutCallbackHandler() | |
qa_with_sources_chain = RetrievalQA.from_chain_type( | |
llm=llm, | |
retriever=retriever, | |
callbacks=[handler], | |
return_source_documents=True | |
) | |
# marks a function that will be executed at the start of a user session | |
def start_chat(): | |
cl.user_session.set( | |
"message_history", | |
[{"role": "system", "content": "You are a helpful assistant."}], | |
) | |
settings = { | |
"temperature": 0.7, # higher value increases output diveresity/randomness | |
"max_tokens": 500, # maximum length of output response | |
"top_p": 1, # choose only the top x% of possible words to return | |
"frequency_penalty": 0, # higher value will result in the model being more conservative in its use of repeated tokens. | |
"presence_penalty": 0, # higher value will result in the model being more likely to generate tokens that have not yet been included in the generated text | |
} | |
cl.user_session.set("settings", settings) | |
# this function will be called every time a user inputs a message in the UI | |
async def main(message: str): | |
message_history = cl.user_session.get("message_history") | |
result = qa_with_sources_chain({"query" : message}) | |
msg = cl.Message(content="") | |
msg.content = result["result"] | |
await msg.send() | |