import streamlit as st from transformers import pipeline from gtts import gTTS from fpdf import FPDF import os # Load pipelines with correct models text_generator = pipeline("text-generation", model="gpt2") summarizer = pipeline("summarization", model="facebook/bart-large-cnn") qa_generator = pipeline("text2text-generation", model="valhalla/t5-small-qg-hl") # Sample Q/A for demonstration sample_qa = { "Question": "What is the process of photosynthesis?", "Answer": "Photosynthesis is the process by which green plants and some other organisms use sunlight to synthesize foods with the help of chlorophyll." } st.title("GenAI-Powered Student Exam Preparation Assistant") # Sidebar for topic selection st.sidebar.title("Options") selected_task = st.sidebar.selectbox("Select Task", ["Explain Topic", "View Question Bank", "Sample Q/A", "Take Test"]) def generate_explanation(topic): prompt = f"Provide a detailed explanation of the following topic: {topic} in simple terms." explanation = text_generator(prompt, max_length=500, num_return_sequences=1, temperature=0.7) return explanation[0]['generated_text'] def generate_quiz(explanation): prompt = f"Generate a quiz question based on the following content: {explanation}" quiz_question = qa_generator(prompt, max_length=150, num_return_sequences=1) return quiz_question[0]['generated_text'] def text_to_speech(text): tts = gTTS(text=text, lang='en') audio_file = "explanation.mp3" tts.save(audio_file) return audio_file if selected_task == "Explain Topic": st.header("Topic Explanation") topic = st.text_input("Enter the topic you want explained:", "") if st.button("Generate Explanation"): if topic: explanation = generate_explanation(topic) st.subheader("Explanation:") st.write(explanation) # Generate and display audio audio_file = text_to_speech(explanation) st.audio(audio_file, format='audio/mp3') # Add the Quiz button only after the explanation is shown if st.button("Generate Quiz Questions"): quiz_question = generate_quiz(explanation) st.subheader("Quiz Question:") st.write(quiz_question) else: st.warning("Please enter a topic to explain.") elif selected_task == "View Question Bank": st.header("Question Bank") st.write("Feature to view and manage the question bank will be added here.") elif selected_task == "Sample Q/A": st.header("Sample Question and Answer") st.write("**Question:**") st.write(sample_qa["Question"]) st.write("**Answer:**") st.write(sample_qa["Answer"]) elif selected_task == "Take Test": st.header("AI-Proctored Test") st.write("This is a simulated AI-proctored test environment.") # Example questions for the test questions = [ "What is the capital of France?", "Explain the law of demand.", "Describe the water cycle." ] user_answers = [] for i, question in enumerate(questions): st.subheader(f"Question {i + 1}: {question}") answer = st.text_input(f"Your Answer for Question {i + 1}", key=f"answer_{i}") user_answers.append(answer) # Start the camera feed using HTML and JavaScript st.write("### Please allow camera access for proctoring.") st.markdown(""" """, unsafe_allow_html=True) if st.button("Submit Answers"): # Generate a PDF from the user's answers pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) for i, answer in enumerate(user_answers): pdf.cell(200, 10, txt=f"Question {i + 1}: {questions[i]}", ln=True) pdf.cell(200, 10, txt=f"Your Answer: {answer}", ln=True) pdf.cell(200, 10, txt="", ln=True) # Add a blank line for spacing pdf_file_path = "user_answers.pdf" pdf.output(pdf_file_path) st.success("Your answers have been submitted and saved to PDF!") # Provide the PDF for download with open(pdf_file_path, "rb") as f: st.download_button("Download Your Answers PDF", f, file_name=pdf_file_path) # Ensure to clean up any generated audio files if os.path.exists("explanation.mp3"): os.remove("explanation.mp3")