QuizCraftAi / app.py
Aditi
true false code error fix
b66e4e3
import streamlit as st
from mcq_generator import AdvancedMCQGenerator
from short_answer_generator import QuestionGenerator
from truefalse_quiz import generate_true_false
import io
# Set page config at the top
st.set_page_config(page_title="QuizCraft AI", layout="centered")
# App title and intro
st.title("πŸŽ“ QuizCraft AI")
st.markdown("Generate intelligent quizzes from any context using AI. Choose the type, level, and number of questions!")
# Input section
context = st.text_area("πŸ“œ Enter your context/text here:", height=100)
col1, col2 = st.columns(2)
question_type = col1.selectbox("Question Type", ["Multiple Choice", "Short Answer", "True/False"])
difficulty = col2.selectbox("Difficulty", ["easy", "medium", "hard"])
num_questions = st.slider("πŸ”’ Number of Questions", min_value=1, max_value=10, value=3)
#<<<<<<< main
#=======
#>>>>>>> main
# Generate button
if st.button("⚑ Generate Quiz"):
if not context.strip():
st.warning("Please enter some context/text to generate questions.")
else:
with st.spinner("Generating quiz..."):
output = io.StringIO() # For optional export
questions = []
if question_type == "Multiple Choice":
generator = AdvancedMCQGenerator()
try:
questions = generator.generate_mcq(context, num_questions=num_questions, difficulty=difficulty)
st.subheader("πŸ“˜ Multiple Choice Questions")
for idx, q in enumerate(questions, 1):
st.markdown(f"**Q{idx}: {q['question']}**")
for i, option in enumerate(q['options']):
st.markdown(f"- {chr(65+i)}. {option}")
st.markdown(f"🟒 **Answer:** {chr(65 + q['correct_answer'])}\n\n---")
# Export text
output.write(f"Q{idx}: {q['question']}\n")
for i, option in enumerate(q['options']):
output.write(f" {chr(65+i)}. {option}\n")
output.write(f"Answer: {chr(65 + q['correct_answer'])}\n\n")
except Exception as e:
st.error(f"❌ Failed to generate MCQs: {str(e)}")
elif question_type == "Short Answer":
try:
generator = QuestionGenerator()
questions = generator.generate_questions(context, num_questions=num_questions, difficulty=difficulty)
st.subheader("πŸ“ Short Answer Questions")
for idx, q in enumerate(questions, 1):
st.markdown(f"**Q{idx}: {q['question']}**")
st.markdown(f"🟒 **Expected Keyword:** {q['answer']}")
st.markdown("---")
# Export text
output.write(f"Q{idx}: {q['question']}\nExpected keyword: {q['answer']}\n\n")
except Exception as e:
st.error(f"❌ Failed to generate short answer questions: {str(e)}")
elif question_type == "True/False":
try:
st.subheader("βœ… True/False Questions")
tf_generator = generate_true_false() # Initialize the class
sentences = tf_generator.validate_inputs(context, num_questions, difficulty)
questions = tf_generator.generate_statements(context, num_questions, difficulty, sentences)
for idx, (statement, label) in enumerate(questions, 1):
st.markdown(f"**Q{idx}: {statement}**")
st.markdown(f"🟒 **Answer:** {'True' if label == 'ENTAILMENT' else 'False'}")
st.markdown("---")
# Export text
output.write(f"Q{idx}: {statement}\nAnswer: {'True' if label == 'ENTAILMENT' else 'False'}\n\n")
except Exception as e:
st.error(f"❌ Failed to generate true/false questions: {str(e)}")
# Download button if questions were generated
if questions:
st.download_button("⬇️ Download Quiz as PDF", output.getvalue(), file_name="quizcraft_quiz.pdf")
#<<<<<<< main
#=======
#>>>>>>> main