import PyPDF2 import nltk import random import streamlit as st from openai import OpenAI from dotenv import load_dotenv import os # Download NLTK data (if not already downloaded) nltk.download('punkt') # load the environment variables into the python script load_dotenv() # fetching the openai_api_key environment variable openai_api_key = os.getenv('OPENAI_API_KEY') def extract_text_from_pdf(pdf_file): pdf_reader = PyPDF2.PdfReader(pdf_file) text = "" for page_num in range(len(pdf_reader.pages)): text += pdf_reader.pages[page_num].extract_text() return text def generate_mcqs_on_topic(text, topic, num_mcqs=5): # Tokenize the text into sentences sentences = nltk.sent_tokenize(text) # Randomly select sentences to create Questions selected_sentences = random.sample(sentences, min(num_mcqs, len(sentences))) mcqs = [] for sentence in selected_sentences: # Use ChatGPT for interactive question generation chatgpt_question = generate_question_with_chatgpt(sentence, topic) mcqs.append(chatgpt_question) return mcqs def generate_question_with_chatgpt(context, topic): client=OpenAI() # Initializing the default value generated_question = { 'content': "Unable to generate a question..", 'options': [], # assuming options is a list 'correct_answer': "Unknown" } response = client.chat.completions.create( model="gpt-3.5-turbo", max_tokens=1024, temperature = 0.7, messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": f"What is the question on {topic} for the following? {context}"}, ] ) result = response.json() print("API Response:", result) # Add this line for debugging if 'choices' in result: # Extract the generated question, options, and correct answer from the response generated_question = { 'content': result["choices"][0]["message"]["content"], 'options': result["choices"][0]["message"].get("options", []), 'correct_answer': result["choices"][0]["message"].get("correct_answer", "Unknown") } else: print("Unexpected API response format.") return generated_question def main(): # Title of the Application st.header("🤖CB Quiz Generator🧠", divider='rainbow') st.subheader("☕CoffeeBeans☕") # User input pdf_file = st.file_uploader("Upload PDF Document:", type=["pdf"]) num_mcqs = st.number_input("Enter Number of MCQs to Generate:", min_value=1, step=1, value=5) topic = st.text_input("Enter the Topic in which the quiz has to be generated") # Button to trigger QUIZ generation if st.button("Generate Quiz"): if pdf_file: text = extract_text_from_pdf(pdf_file) mcqs = generate_mcqs_on_topic(text, topic, num_mcqs) # Display the generated Questions st.success(f"Generated {num_mcqs} Questions:") for i, generated_question in enumerate(mcqs, start=1): st.write(f"\nQuestion {i}: {generated_question['content']}") st.write(f"Options: {', '.join(generated_question['options'])}") st.write(f"Correct Answer: {generated_question['correct_answer']}") else: st.error("Please upload a PDF document.") if __name__ == "__main__": main()