|
from llama_index import SimpleDirectoryReader, LLMPredictor, PromptHelper, StorageContext, ServiceContext, GPTVectorStoreIndex, load_index_from_storage |
|
from langchain.chat_models import ChatOpenAI |
|
import gradio as gr |
|
import sys |
|
import os |
|
import openai |
|
from ratelimit import limits, sleep_and_retry |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
os.environ["OPENAI_API_KEY"] = os.environ.get("openai_key") |
|
openai.api_key = os.environ["OPENAI_API_KEY"] |
|
|
|
|
|
RATE_LIMIT = 3 |
|
|
|
|
|
@sleep_and_retry |
|
@limits(calls=RATE_LIMIT, period=1) |
|
def create_service_context(): |
|
|
|
|
|
max_input_size = 4096 |
|
num_outputs = 512 |
|
max_chunk_overlap = 20 |
|
chunk_size_limit = 600 |
|
|
|
|
|
prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) |
|
|
|
|
|
llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.5, model_name="gpt-3.5-turbo", max_tokens=num_outputs)) |
|
|
|
|
|
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper) |
|
return service_context |
|
|
|
|
|
|
|
@sleep_and_retry |
|
@limits(calls=RATE_LIMIT, period=1) |
|
def data_ingestion_indexing(directory_path): |
|
|
|
|
|
documents = SimpleDirectoryReader(directory_path).load_data() |
|
|
|
|
|
index = GPTVectorStoreIndex.from_documents( |
|
documents, service_context=create_service_context() |
|
) |
|
|
|
|
|
index.storage_context.persist() |
|
|
|
return index |
|
|
|
def data_querying(input_text): |
|
|
|
|
|
storage_context = StorageContext.from_defaults(persist_dir="./storage") |
|
|
|
|
|
index = load_index_from_storage(storage_context, service_context=create_service_context()) |
|
|
|
|
|
response = index.as_query_engine().query(input_text) |
|
|
|
return response.response |
|
|
|
|
|
with gr.Blocks() as demo: |
|
chatbot = gr.Chatbot() |
|
msg = gr.Textbox() |
|
clear = gr.ClearButton([msg, chatbot]) |
|
|
|
def respond(message, chat_history): |
|
bot_message = data_querying(message) |
|
chat_history.append((message, bot_message)) |
|
|
|
return "", chat_history |
|
|
|
msg.submit(respond, [msg, chatbot], [msg, chatbot]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
index = data_ingestion_indexing("longevity_books") |
|
|
|
demo.launch() |
|
|