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()