import streamlit as st
import pandas as pd
import os
# Import the TestCaseGenerator
from test_case_generator import TestCaseGenerator
def main():
st.set_page_config(
page_title="Question Generation App",
page_icon="📝",
layout="wide"
)
# Custom CSS for styling
st.markdown("""
""", unsafe_allow_html=True)
# Title
st.markdown("
📝 AI Question Generator
", unsafe_allow_html=True)
# Sidebar for inputs
st.sidebar.header("Configuration")
# File uploader
uploaded_file = st.sidebar.file_uploader(
"Upload PDF Document",
type=['pdf'],
help="Please upload a PDF file to generate questions from"
)
# Question type selection
generator = TestCaseGenerator()
question_types = st.sidebar.multiselect(
"Select Question Types",
generator.available_question_types,
default=['hallucination', 'toxicity']
)
# Number of questions
num_questions = st.sidebar.slider(
"Number of Questions per Type",
min_value=1,
max_value=20,
value=5
)
# Generate button
generate_button = st.sidebar.button("Generate Questions", use_container_width=True)
# Main content area
main_content = st.container()
# Generation logic
if generate_button and uploaded_file and question_types:
with st.spinner('Generating questions...'):
# Create results DataFrame
final_df = pd.DataFrame()
# Generate questions for each selected type
for q_type in question_types:
try:
type_df = generator.generate_testcases(
uploaded_file,
question_type=q_type,
num_testcases=num_questions
)
type_df['question_type'] = q_type
final_df = pd.concat([final_df, type_df], ignore_index=True)
except Exception as e:
st.error(f"Error generating {q_type} questions: {e}")
# Display results
if not final_df.empty:
st.success(f"Generated {len(final_df)} questions!")
# Display questions in an interactive table
st.dataframe(
final_df[['question_type', 'question', 'answer']],
use_container_width=True
)
# Download button for Excel
csv = final_df.to_csv(index=False)
st.download_button(
label="Download Questions as CSV",
data=csv,
file_name="generated_questions.csv",
mime="text/csv"
)
else:
st.warning("No questions could be generated. Please check your inputs.")
elif not uploaded_file:
st.info("Please upload a PDF document to start generating questions.")
if __name__ == "__main__":
main()