standards / app.py
facehugger92's picture
Update app.py
37af4f9
from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader, ServiceContext, set_global_service_context, load_index_from_storage, StorageContext, PromptHelper
from llama_index.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from PyPDF2 import PdfReader
import gradio as gr
import sys
import os
try:
from config import OPEN_AI_KEY
os.environ["OPENAI_API_KEY"] = OPEN_AI_KEY
except:
pass
# ===============================
# Settings
# ===============================
MAX_INPUT_SIZE = 4096
NUM_OUTPUT = 700
CHUNK_OVERLAP_RATIO = 0.15
CHUNK_SIZE_LIMIT = 600
# Define LLM: gpt-3.5-turbo, temp:0.7
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.7, max_tokens=NUM_OUTPUT)
# Define prompt helper
prompt_helper = PromptHelper(context_window=MAX_INPUT_SIZE, num_output=NUM_OUTPUT, chunk_overlap_ratio=CHUNK_OVERLAP_RATIO, chunk_size_limit=CHUNK_SIZE_LIMIT)
# Set service context
service_context = ServiceContext.from_defaults(llm=llm, prompt_helper=prompt_helper)
set_global_service_context(service_context)
# ===============================
# Functions
# ===============================
def construct_index(directory_path, index_path):
if os.listdir(index_path) != []:
storage_context = StorageContext.from_defaults(persist_dir=index_path)
index = load_index_from_storage(storage_context)
return index
else:
# Load in documents
documents = SimpleDirectoryReader(directory_path).load_data()
# Index documents
index = GPTVectorStoreIndex.from_documents(documents, service_context=service_context, show_progress=True)
# Save index
index.storage_context.persist(persist_dir=index_path)
return index
INDEX = construct_index("100_test_docs", "100_test_docs_persist")
QE = INDEX.as_query_engine()
PDF_CONTENT = gr.State("")
def upload_file(file):
try:
read_pdf = PdfReader(file.name)
pdf_text = "\n\n".join([w.extract_text() for w in read_pdf.pages])
PDF_CONTENT.value = pdf_text
return pdf_text
except Exception as e:
return f"Error: {str(e)}"
def chatfunc(input_text, chat_history, max_chat_length=6):
prompt = """
<|SYSTEM|># Your task is to query and use the provided context to help users learn about common core state standards and use it to improve their syllabus.
\n\n
"""
if PDF_CONTENT.value:
prompt = prompt + "The following is the syllabus provided by the user" + PDF_CONTENT.value + "\n\n"
for chat in chat_history[~max_chat_length:]:
user_chat, bot_chat = chat
prompt = f"{prompt}\nUser: {user_chat}\nAssistant: {bot_chat}"
prompt = f"{prompt}\nUser: {input_text}\nAssistant:"
response = QE.query(prompt)
chat_history.append([input_text, response.response])
return "", chat_history
with gr.Blocks() as iface:
chatbot = gr.Chatbot(height=400)
msg = gr.Textbox(label="Ask the Common Core State Standard Bot anything about curriculum standards")
submit = gr.Button("πŸ’¬ Submit")
with gr.Row():
clear = gr.ClearButton(value="🧹 Clear outputs", components=[msg, chatbot])
upload_button = gr.UploadButton("πŸ“ Upload a Syllabus", file_types=[".pdf"], file_count="single")
with gr.Accordion("πŸ“ View your syllabus"):
syl = gr.Textbox(label="Your syllabus' content will show here")
msg.submit(chatfunc, [msg, chatbot], [msg, chatbot])
upload_button.upload(upload_file, upload_button, syl)
iface.launch(share=False)