This is basically question related custom bot based on documents saved in google drive folder
The python script I am using is
import os
import pickle
from langchain import OpenAI
from flask import Flask, render_template, request
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow
from llama_index import LLMPredictor, GPTSimpleVectorIndex, PromptHelper, ServiceContext, download_loader,MockLLMPredictor,MockEmbedding
from langchain.chat_models import ChatOpenAI
os.environ[âOPENAI_API_KEYâ] = âsk-s0RIxaObâ
def authorize_gdocs():
google_oauth2_scopes = [
âhttps://www.googleapis.com/auth/drive.readonlyâ,
âhttps://www.googleapis.com/auth/documents.readonlyâ
]
cred = None
if os.path.exists(âtoken.pickleâ):
with open(âtoken.pickleâ, ârbâ) as token:
cred = pickle.load(token)
if not cred or not cred.valid:
if cred and cred.expired and cred.refresh_token:
cred.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(âclient_secrets.jsonâ, google_oauth2_scopes)
cred = flow.run_local_server(port=0)
with open(âtoken.pickleâ, âwbâ) as token:
pickle.dump(cred, token)
authorize_gdocs()
GoogleDriveReader = download_loader(âGoogleDriveReaderâ)
folder_id = â1AuhkobVmt0Et0lIrEU0swvwavwXRtJYiâ
loader = GoogleDriveReader()
documents = loader.load_data(folder_id=folder_id)
Define LLM
llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.7, model_name=âgpt-3.5-turboâ))
Define prompt helper
max_input_size = 4096
num_output = 512
max_chunk_overlap = 20
chunk_size_limit = 600
prompt_helper = PromptHelper(max_input_size, num_output,max_chunk_overlap,chunk_size_limit=chunk_size_limit)
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper)
Create index from documents only one time then comment it
ndex = GPTSimpleVectorIndex.from_documents(
documents, service_context=service_context
)
Save your index to a index.json file
index.save_to_disk(âindex1.jsonâ)
index = GPTSimpleVectorIndex.load_from_disk(âindex1.jsonâ)
#flask app Code
app = Flask(name)
@app.route(â/â)
def home():
return render_template(âindex.htmlâ)
@app.route(â/queryâ, methods=[âPOSTâ])
def query():
prompt = request.form[âpromptâ]
print(âprompt given issss:â,prompt)
response = index.query(prompt)
print(âResponseeeeee:â,response)
# print(âlast token useddâ,llm_predictor.last_token_usage)
return render_template(âindex.htmlâ, prompt=prompt,response=response)
if name == âmainâ:
app.run(debug=True)