Spaces:
Sleeping
Sleeping
| from langchain.embeddings.openai import OpenAIEmbeddings | |
| from langchain.vectorstores import FAISS | |
| from langchain.chains import RetrievalQA | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.document_loaders import PyMuPDFLoader | |
| import os | |
| from langchain.agents import initialize_agent, Tool | |
| from langchain.agents import AgentType | |
| import chainlit as cl | |
| async def start(): | |
| welcome_message1 = "Hi, I'm **Ben**! Your Benchmarking Assistant" | |
| welcome_message2 = "Powered by GPT-4, I can assist you with in-depth analysis of annual reports of some of the world's leading tech giants:\n- **Meta**\n- **Amazon**\n- **Alphabet**\n- **Apple**\n- **Microsoft**,\n\nfor the years **2022, 2021, and 2020**.\n\nWhether you are comparing financial performances, exploring trends, or seeking detailed insights across different years, Ben transforms complex data into actionable knowledge. Unlock the power of informed decision-making today with me!\n\nPlease ask a question to begin!" | |
| sample_questions="Some of the questions you can try:\n***" | |
| elements = [ | |
| cl.Image(path="BenLogo2.png", name="Ben", display="inline", size="large"), | |
| # cl.Text(content=welcome_message1, name="10K-GPT", display="inline"), | |
| ] | |
| await cl.Message(content=welcome_message1, elements=elements).send() | |
| await cl.Message(content=welcome_message2).send() | |
| def load(): | |
| embeddings = OpenAIEmbeddings() | |
| llm = ChatOpenAI(temperature=0, model="gpt-4", streaming=True) | |
| apple_2022_docs_store = FAISS.load_local(r'data/datastores/apple_2022', embeddings) | |
| apple_2021_docs_store = FAISS.load_local(r'data/datastores/apple_2021', embeddings) | |
| apple_2020_docs_store = FAISS.load_local(r'data/datastores/apple_2020', embeddings) | |
| microsoft_2022_docs_store = FAISS.load_local(r'data/datastores/msft_2022', embeddings) | |
| microsoft_2021_docs_store = FAISS.load_local(r'data/datastores/msft_2021', embeddings) | |
| microsoft_2020_docs_store = FAISS.load_local(r'data/datastores/msft_2020', embeddings) | |
| amazon_2022_docs_store = FAISS.load_local(r'data/datastores/amzn_2022', embeddings) | |
| amazon_2021_docs_store = FAISS.load_local(r'data/datastores/amzn_2021', embeddings) | |
| amazon_2020_docs_store = FAISS.load_local(r'data/datastores/amzn_2020', embeddings) | |
| alphabet_2022_docs_store = FAISS.load_local(r'data/datastores/alphbt_2022', embeddings) | |
| alphabet_2021_docs_store = FAISS.load_local(r'data/datastores/alphbt_2021', embeddings) | |
| alphabet_2020_docs_store = FAISS.load_local(r'data/datastores/alphbt_2020', embeddings) | |
| meta_2022_docs_store = FAISS.load_local(r'data/datastores/meta_2022', embeddings) | |
| meta_2021_docs_store = FAISS.load_local(r'data/datastores/meta_2021', embeddings) | |
| meta_2020_docs_store = FAISS.load_local(r'data/datastores/meta_2020', embeddings) | |
| apple_2022_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=apple_2022_docs_store.as_retriever(search_kwargs={'k':5})) | |
| apple_2021_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=apple_2021_docs_store.as_retriever(search_kwargs={'k':5})) | |
| apple_2020_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=apple_2020_docs_store.as_retriever(search_kwargs={'k':5})) | |
| microsoft_2022_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=microsoft_2022_docs_store.as_retriever(search_kwargs={'k':5})) | |
| microsoft_2021_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=microsoft_2021_docs_store.as_retriever(search_kwargs={'k':5})) | |
| microsoft_2020_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=microsoft_2020_docs_store.as_retriever(search_kwargs={'k':5})) | |
| amazon_2022_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=amazon_2022_docs_store.as_retriever(search_kwargs={'k':5})) | |
| amazon_2021_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=amazon_2021_docs_store.as_retriever(search_kwargs={'k':5})) | |
| amazon_2020_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=amazon_2020_docs_store.as_retriever(search_kwargs={'k':5})) | |
| meta_2022_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=meta_2022_docs_store.as_retriever(search_kwargs={'k':5})) | |
| meta_2021_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=meta_2021_docs_store.as_retriever(search_kwargs={'k':5})) | |
| meta_2020_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=meta_2020_docs_store.as_retriever(search_kwargs={'k':5})) | |
| alphabet_2022_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=alphabet_2022_docs_store.as_retriever(search_kwargs={'k':5})) | |
| alphabet_2021_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=alphabet_2021_docs_store.as_retriever(search_kwargs={'k':5})) | |
| alphabet_2020_qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=alphabet_2020_docs_store.as_retriever(search_kwargs={'k':5})) | |
| tools = [ | |
| Tool( | |
| name="Apple Form 10K 2022", | |
| func=apple_2022_qa.run, | |
| description="useful when you need to answer from Apple 2022", | |
| ), | |
| Tool( | |
| name="Apple Form 10K 2021", | |
| func=apple_2021_qa.run, | |
| description="useful when you need to answer from Apple 2021", | |
| ), | |
| Tool( | |
| name="Apple Form 10K 2020", | |
| func=apple_2020_qa.run, | |
| description="useful when you need to answer from Apple 2020", | |
| ), | |
| Tool( | |
| name="Microsoft Form 10K 2022", | |
| func=microsoft_2022_qa.run, | |
| description="useful when you need to answer from Microsoft 2022", | |
| ), | |
| Tool( | |
| name="Microsoft Form 10K 2021", | |
| func=microsoft_2021_qa.run, | |
| description="useful when you need to answer from Microsoft 2021", | |
| ), | |
| Tool( | |
| name="Microsoft Form 10K 2020", | |
| func=microsoft_2020_qa.run, | |
| description="useful when you need to answer from Microsoft 2020", | |
| ), | |
| Tool( | |
| name="Meta Form 10K 2022", | |
| func=meta_2022_qa.run, | |
| description="useful when you need to answer from Meta 2022", | |
| ), | |
| Tool( | |
| name="Meta Form 10K 2021", | |
| func=meta_2021_qa.run, | |
| description="useful when you need to answer from Meta 2021", | |
| ), | |
| Tool( | |
| name="Meta Form 10K 2020", | |
| func=meta_2020_qa.run, | |
| description="useful when you need to answer from Meta 2020", | |
| ), | |
| Tool( | |
| name="Alphabet Form 10K 2022", | |
| func=alphabet_2022_qa.run, | |
| description="useful when you need to answer from Alphabet or Google 2022", | |
| ), | |
| Tool( | |
| name="Alphabet Form 10K 2021", | |
| func=alphabet_2021_qa.run, | |
| description="useful when you need to answer from Alphabet or Google 2021", | |
| ), | |
| Tool( | |
| name="Alphabet Form 10K 2020", | |
| func=alphabet_2020_qa.run, | |
| description="useful when you need to answer from Alphabet or Google 2020", | |
| ), | |
| Tool( | |
| name="Amazon Form 10K 2022", | |
| func=amazon_2022_qa.run, | |
| description="useful when you need to answer from Amazon 2022", | |
| ), | |
| Tool( | |
| name="Amazon Form 10K 2021", | |
| func=amazon_2021_qa.run, | |
| description="useful when you need to answer from Amazon 2021", | |
| ), | |
| Tool( | |
| name="Amazon Form 10K 2020", | |
| func=amazon_2020_qa.run, | |
| description="useful when you need to answer from Amazon 2020", | |
| ), | |
| ] | |
| # Construct the agent. We will use the default agent type here. | |
| # See documentation for a full list of options. | |
| return initialize_agent( | |
| tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True | |
| ) | |