import gradio as gr
import os
import tempfile
from mylangv2 import DocumentProcessor, QuestionGenerator
# Check for required environment variables at startup
REQUIRED_ENV_VARS = [
"AZURE_OPENAI_API_KEY",
"AZURE_OPENAI_ENDPOINT",
"AZURE_OPENAI_EMBEDDING_DEPLOYMENT",
"AZURE_OPENAI_CHAT_DEPLOYMENT",
"AZURE_OPENAI_API_VERSION"
]
missing_vars = [var for var in REQUIRED_ENV_VARS if not os.environ.get(var)]
if missing_vars:
raise EnvironmentError(f"Missing required environment variables: {', '.join(missing_vars)}")
# Initialize core logic
processor = DocumentProcessor()
generator = QuestionGenerator()
def generate_questions_from_pdf(pdf_file, subject, section, question_type, class_grade, difficulty, bloom_level, num_questions, additional_instructions):
import shutil
pdf_path = None
vectorstore = None
if pdf_file is not None:
# Handle both file-like and NamedString cases
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp:
if hasattr(pdf_file, 'read'):
tmp.write(pdf_file.read())
elif hasattr(pdf_file, 'name'):
with open(pdf_file.name, 'rb') as fsrc:
shutil.copyfileobj(fsrc, tmp)
else:
return "Invalid file input. Please upload a valid PDF file."
pdf_path = tmp.name
try:
vectorstore, _ = processor.process_uploaded_document(pdf_path)
except Exception as e:
return ("An error occurred while processing the PDF. "
"Please check your file and try again. If the problem persists, contact support or check the logs for details.")
try:
topic_data = {
"subjectName": subject,
"sectionName": section,
"questionType": question_type,
"classGrade": class_grade,
"difficulty": difficulty,
"bloomLevel": bloom_level,
"numQuestions": int(num_questions),
"additionalInstructions": additional_instructions or ""
}
result = generator.generate_questions(topic_data, vectorstore)
questions = result["questions"]
# Format for display
display = ""
for i, q in enumerate(questions, 1):
display += f"Question {i}: {q.get('question', '')}
"
if 'options' in q:
display += "Options: