import PyPDF2 import chromadb import streamlit as st from langchain_openai import OpenAI # Function to extract text from PDF def extract_text_from_pdf(pdf_path): text = "" with open(pdf_path, "rb") as file: pdf_reader = PyPDF2.PdfFileReader(file) for page_num in range(pdf_reader.numPages): text += pdf_reader.getPage(page_num).extractText() return text # Function to create chunks of text def create_text_chunks(text, chunk_size=1000, overlap_size=100): chunks = [] for i in range(0, len(text), chunk_size - overlap_size): chunks.append(text[i:i + chunk_size]) return chunks # Function to save chunks to chromadb vector database def save_to_chromadb(chunks, quiz_name, quiz_topic): # Assume you have a ChromaDB instance named 'db' db = chromadb.ChromaDB("your_chromadb_url") for i, chunk in enumerate(chunks): vector = langchain_openai.get_vector(chunk) db.add_vector(quiz_name, quiz_topic, i, vector) # Function to generate questions using ChatGPT-3.5-turbo-16k def generate_questions(topic): prompt = f"Generate questions on the topic: {topic}" response = langchain_openai.complete(prompt) return response.choices[0].text.strip() # Streamlit interface def main(): st.title("Quiz Generator") # User inputs quiz_name = st.text_input("Enter Quiz Name:") quiz_topic = st.text_input("Enter Quiz Topic:") num_questions = st.number_input("Number of Questions:", value=5, min_value=1) pdf_path = st.file_uploader("Upload PDF File:", type=["pdf"]) if pdf_path: # Extract text from PDF pdf_text = extract_text_from_pdf(pdf_path) # Create and save text chunks to ChromaDB text_chunks = create_text_chunks(pdf_text) save_to_chromadb(text_chunks, quiz_name, quiz_topic) # User input for query user_query = st.text_input("Enter Query for Question Generation:") # Search for the topic in the vector database if quiz_topic in db.get_topics(quiz_name): # Generate questions using ChatGPT-3.5-turbo-16k generated_questions = generate_questions(user_query) st.subheader("Generated Questions:") st.write(generated_questions) else: st.warning("Specified topic not found in the document.") if __name__ == "__main__": main()