code: from langchain import PromptTemplate, LLMChain
  from langchain.document_loaders import TextLoader
  from langchain.embeddings import LlamaCppEmbeddings
  from langchain.llms import GPT4All
  from langchain.text_splitter import RecursiveCharacterTextSplitter
  from langchain.callbacks.base import CallbackManager
  from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
  from langchain.vectorstores.faiss import FAISS
  
  # SCRIPT INFO:
  # 
  # This script allows you to create a vectorstore from a file and query it with a question (hard coded).
  # 
  # It shows how you could send questions to a GPT4All custom knowledge base and receive answers.
  # 
  # If you want a chat style interface using a similar custom knowledge base, you can use the custom_chatbot.py script provided.
  
  # Setup 
  gpt4all_path = './models/gpt4all-converted.bin' 
  llama_path = './models/ggml-model-q4_0.bin' 
  
  callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
  loader = TextLoader('./docs/shortened_sotu.txt')
  embeddings = LlamaCppEmbeddings(model_path=llama_path)
  llm = GPT4All(model=gpt4all_path, callback_manager=callback_manager, verbose=True)
  
  # Split text 
  def split_chunks(sources):
      chunks = []
      splitter = RecursiveCharacterTextSplitter(chunk_size=256, chunk_overlap=32)
      for chunk in splitter.split_documents(sources):
          chunks.append(chunk)
      return chunks
  
  
  def create_index(chunks):
      texts = [doc.page_content for doc in chunks]
      metadatas = [doc.metadata for doc in chunks]
  
      search_index = FAISS.from_texts(texts, embeddings, metadatas=metadatas)
  
      return search_index
  
  
  def similarity_search(query, index):
      matched_docs = index.similarity_search(query, k=4)
      sources = []
      for doc in matched_docs:
          sources.append(
              {
                  "page_content": doc.page_content,
                  "metadata": doc.metadata,
              }
          )
  
      return matched_docs, sources
  
  
  # Create Index
  # docs = loader.load()
  # chunks = split_chunks(docs)
  # index = create_index(chunks)
  
  # Save Index (use this to save the index for later use)
  # Comment the line below after running once successfully (IMPORTANT)
  
  # index.save_local("state_of_the_union_index")
  
  # Load Index (use this to load the index from a file, eg on your second time running things and beyond)
  # Uncomment the line below after running once successfully (IMPORTANT)
  
  index = FAISS.load_local("./full_sotu_index", embeddings)
  
  # Set your query here manually
  question = "Summarize the comments about NATO and its purpose."
  matched_docs, sources = similarity_search(question, index)
  
  template = """
  Please use the following context to answer questions.
  Context: {context}
  ---
  Question: {question}
  Answer: Let's think step by step."""
  
  context = "\n".join([doc.page_content for doc in matched_docs])
  prompt = PromptTemplate(template=template, input_variables=["context", "question"]).partial(context=context)
  llm_chain = LLMChain(prompt=prompt, llm=llm)
  
  print(llm_chain.run(question))
apis: langchain.llms.GPT4All langchain.PromptTemplate langchain.text_splitter.RecursiveCharacterTextSplitter langchain.vectorstores.faiss.FAISS.load_local langchain.embeddings.LlamaCppEmbeddings langchain.document_loaders.TextLoader langchain.callbacks.streaming_stdout.StreamingStdOutCallbackHandler langchain.LLMChain langchain.vectorstores.faiss.FAISS.from_texts
extract_api: [((968, 1007), 'langchain.document_loaders.TextLoader', 'TextLoader', (['"""./docs/shortened_sotu.txt"""'], {}), "('./docs/shortened_sotu.txt')\n", (978, 1007), False, 'from langchain.document_loaders import TextLoader\n'), ((1021, 1062), 'langchain.embeddings.LlamaCppEmbeddings', 'LlamaCppEmbeddings', ([], {'model_path': 'llama_path'}), '(model_path=llama_path)\n', (1039, 1062), False, 'from langchain.embeddings import LlamaCppEmbeddings\n'), ((1069, 1145), 'langchain.llms.GPT4All', 'GPT4All', ([], {'model': 'gpt4all_path', 'callback_manager': 'callback_manager', 'verbose': '(True)'}), '(model=gpt4all_path, callback_manager=callback_manager, verbose=True)\n', (1076, 1145), False, 'from langchain.llms import GPT4All\n'), ((2399, 2448), 'langchain.vectorstores.faiss.FAISS.load_local', 'FAISS.load_local', (['"""./full_sotu_index"""', 'embeddings'], {}), "('./full_sotu_index', embeddings)\n", (2415, 2448), False, 'from langchain.vectorstores.faiss import FAISS\n'), ((2941, 2973), 'langchain.LLMChain', 'LLMChain', ([], {'prompt': 'prompt', 'llm': 'llm'}), '(prompt=prompt, llm=llm)\n', (2949, 2973), False, 'from langchain import PromptTemplate, LLMChain\n'), ((1219, 1283), 'langchain.text_splitter.RecursiveCharacterTextSplitter', 'RecursiveCharacterTextSplitter', ([], {'chunk_size': '(256)', 'chunk_overlap': '(32)'}), '(chunk_size=256, chunk_overlap=32)\n', (1249, 1283), False, 'from langchain.text_splitter import RecursiveCharacterTextSplitter\n'), ((1529, 1585), 'langchain.vectorstores.faiss.FAISS.from_texts', 'FAISS.from_texts', (['texts', 'embeddings'], {'metadatas': 'metadatas'}), '(texts, embeddings, metadatas=metadatas)\n', (1545, 1585), False, 'from langchain.vectorstores.faiss import FAISS\n'), ((924, 956), 'langchain.callbacks.streaming_stdout.StreamingStdOutCallbackHandler', 'StreamingStdOutCallbackHandler', ([], {}), '()\n', (954, 956), False, 'from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler\n'), ((2829, 2903), 'langchain.PromptTemplate', 'PromptTemplate', ([], {'template': 'template', 'input_variables': "['context', 'question']"}), "(template=template, input_variables=['context', 'question'])\n", (2843, 2903), False, 'from langchain import PromptTemplate, LLMChain\n')]