TylerL/Zoltar_Financial_Demo
0
1from langchain.docstore.document import Document2from langchain.indexes import VectorstoreIndexCreator3from langchain.utilities import ApifyWrapper4import os5import getpass6from langchain.prompts import ChatPromptTemplate7import chainlit as cl8from langchain.embeddings.openai import OpenAIEmbeddings9from langchain.embeddings import CacheBackedEmbeddings10from langchain.storage import LocalFileStore11from langchain.docstore.document import Document12from langchain.document_loaders import ApifyDatasetLoader13 14 15#os.environ["APIFY_API_TOKEN"] = getpass.getpass("APIFY API Key:")16#os.environ["OPENAI_API_KEY"] = getpass.getpass("Open AI API Key:")17 18template = """ 19You are a helpful and precise financial advisor. Answer the question based only on the context provided. If you cannot answer the question using only the context provided, please respond with 'I do not know' :20 21CONTEXT22{context}23 24QUESTION25{question}26"""27WELCOME_MESSAGE="Welcome to Zoltar Financial Advising! We are currently able to answer questions regarding Investing, Tax, and Real Estate!"28 29prompt = ChatPromptTemplate.from_template(template)30 31@cl.on_chat_start32async def start():33 await cl.Message(content=WELCOME_MESSAGE).send()34 #####Cache Attempt Zone!35 # store = LocalFileStore("./cache/")36 37 # core_embeddings_model = OpenAIEmbeddings() ### YOUR CODE HERE38 39 # embedder = CacheBackedEmbeddings.from_bytes_store(40 # core_embeddings_model, ### YOUR CODE HERE41 # store, ### YOUR CODE HERE42 # namespace=core_embeddings_model.model43 # )44 # #####Cache Attempt Zone!45 46 #APIFY Web Scrape Zone!47 #apify = ApifyWrapper()48 ## Call the Actor to obtain text from the crawled webpages49 #loader = apify.call_actor(50 # actor_id="apify/website-content-crawler",51 # run_input={52 # "startUrls": [{"url": "https://www.ameriprise.com/financial-goals-priorities/investing"}]53 # },54 # dataset_mapping_function=lambda item: Document(55 # page_content=item["text"] or "", metadata={"source": item["url"]}56 # ),57 #)58 #APIFY Web Scrape Zone!59 60 #Load Apify Dataset from Apify Website61 Invloader = ApifyDatasetLoader(62 dataset_id="KFhzcEGeCoEtGTEtW",63 dataset_mapping_function=lambda item: Document(64 page_content=item["text"] or "", metadata={"source": item["url"]}65 ),66 )67 68 Taxloader = ApifyDatasetLoader(69 dataset_id="hjlicSuemogNtR3nm",70 dataset_mapping_function=lambda item: Document(71 page_content=item["text"] or "", metadata={"source": item["url"]}72 ),73 )74 RLEloader = ApifyDatasetLoader(75 dataset_id="RF3tF1jN9gp3Aghxk",76 dataset_mapping_function=lambda item: Document(77 page_content=item["text"] or "", metadata={"source": item["url"]}78 ),79 )80 # Create a vector store based on the crawled data81 index = VectorstoreIndexCreator().from_loaders([Invloader,Taxloader,RLEloader]) #can add multiple stored website scrapes with Comma in list!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!82 cl.user_session.set("apify_index",index)83 84 85 86@cl.on_message87async def main(message: cl.Message):88 # Your custom logic goes here...89 # Query the vector store90 print(message.content)91 index = cl.user_session.get("apify_index")92 #query = message.content93 #"What are the different types of stocks?"94 #"What are key investment principles?"95 #result = index.invoke({"question": message.content})96 result = index.query(message.content)97 print(result)98 # Send a response back to the user99 await cl.Message(100 content=result101 ).send()102 103#import chainlit as cl104#105#106#@cl.on_message107#async def main(message: cl.Message):108 # Your custom logic goes here...109#110 # Send a response back to the user111# await cl.Message(112# content=f"Received: {message.content}",113# ).send()