Spaces:
Sleeping
Sleeping
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(""" | |
<style> | |
.main-title { | |
font-size: 3em; | |
color: #2C3E50; | |
text-align: center; | |
margin-bottom: 30px; | |
} | |
.stButton>button { | |
background-color: #3498DB; | |
color: white; | |
border: none; | |
padding: 10px 20px; | |
border-radius: 5px; | |
transition: all 0.3s; | |
} | |
.stButton>button:hover { | |
background-color: #2980B9; | |
transform: scale(1.05); | |
} | |
</style> | |
""", unsafe_allow_html=True) | |
# Title | |
st.markdown("<h1 class='main-title'>π AI Question Generator</h1>", 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() |