import os import gradio as gr import tempfile from src.mainFunctions import combined_process_video_file, process_pdf_document, process_docx_document, process_audio_document from src.video_processing import process_video_file ELEVENLABS_API_KEY = os.environ.get("ELEVENLABS_API_KEY", None) GOOGLE_API_KEY = os.environ.get('GOOGLE_API_KEY', None) CLAUDE_API_KEY = os.environ.get('CLAUDE_API_KEY', None) with gr.Blocks(title="Document to Quiz Generator") as app: gr.Markdown("# Document & Media => Quiz") gr.Markdown("Upload a video, audio, PDF, or Word document to automatically generate a quiz with topics, key concepts, summaries, and questions.") with gr.Row(): with gr.Column(): elevenlabs_api_key = gr.Textbox( placeholder="Enter your ElevenLabs API key", label="ElevenLabs API Key (for transcription)", type="password", value=ELEVENLABS_API_KEY ) model_id = gr.Dropdown( choices=["scribe_v1"], value="scribe_v1", label="Transcription Model" ) gemini_api_key = gr.Textbox( placeholder="Enter your Google Gemini API key", label="Google Gemini API Key", type="password", value=GOOGLE_API_KEY ) claude_api_key = gr.Textbox( placeholder="Enter your Claude API key", label="Claude API Key", type="password" ) with gr.Row(): with gr.Column(): course_name = gr.Textbox( placeholder="Enter the course name", label="Course Name" ) section_name = gr.Textbox( placeholder="Enter the section name", label="Section Name" ) lesson_name = gr.Textbox( placeholder="Enter the lesson name", label="Lesson Name" ) with gr.Row(): with gr.Column(): language_selector = gr.Radio( choices=["Uzbek", "English", "Russian"], value="English", label="Content Language" ) with gr.Tabs(): with gr.TabItem("Upload Video"): with gr.Row(): with gr.Column(): video_input = gr.Video(label="Upload Video") format_choice_file = gr.Radio(["mp3", "wav"], value="mp3", label="Audio Format") extract_button_file = gr.Button("Process Video & Generate Quiz") with gr.Column(): audio_output_file = gr.Audio(label="Extracted Audio", type="filepath") status_output_file = gr.Textbox(label="Audio Extraction Status") transcript_file_output = gr.File(label="Transcription Text File") transcript_status_output = gr.Textbox(label="Transcription Status") with gr.Row(): with gr.Column(): quiz_output_file = gr.Textbox( label="Generated Quiz", lines=15 ) with gr.Row(): quiz_file_output_file = gr.File(label="Download Quiz Text") json_file_output_file = gr.File(label="Download Quiz JSON") # PDF Tab with gr.TabItem("Upload PDF"): with gr.Row(): with gr.Column(): pdf_input = gr.File(label="Upload PDF", file_types=[".pdf"]) process_pdf_button = gr.Button("Process PDF & Generate Quiz") with gr.Column(): pdf_status_output = gr.Textbox(label="PDF Processing Status") pdf_text_file_output = gr.File(label="Extracted Text File") with gr.Row(): with gr.Column(): pdf_quiz_output = gr.Textbox( label="Generated Quiz", lines=15 ) with gr.Row(): pdf_quiz_file_output = gr.File(label="Download Quiz Text") pdf_json_file_output = gr.File(label="Download Quiz JSON") # Word Document Tab with gr.TabItem("Upload Word Document"): with gr.Row(): with gr.Column(): docx_input = gr.File(label="Upload Word Document", file_types=[".docx"]) process_docx_button = gr.Button("Process Word Document & Generate Quiz") with gr.Column(): docx_status_output = gr.Textbox(label="Word Document Processing Status") docx_text_file_output = gr.File(label="Extracted Text File") with gr.Row(): with gr.Column(): docx_quiz_output = gr.Textbox( label="Generated Quiz", lines=15 ) with gr.Row(): docx_quiz_file_output = gr.File(label="Download Quiz Text") docx_json_file_output = gr.File(label="Download Quiz JSON") # Audio Tab with gr.TabItem("Upload Audio"): with gr.Row(): with gr.Column(): audio_input = gr.Audio(label="Upload Audio", type="filepath") process_audio_button = gr.Button("Process Audio & Generate Quiz") with gr.Column(): audio_status_output = gr.Textbox(label="Audio Processing Status") audio_transcript_file_output = gr.File(label="Transcription Text File") with gr.Row(): with gr.Column(): audio_quiz_output = gr.Textbox( label="Generated Quiz", lines=15 ) with gr.Row(): audio_quiz_file_output = gr.File(label="Download Quiz Text") audio_json_file_output = gr.File(label="Download Quiz JSON") # Connect video processing extract_button_file.click( fn=combined_process_video_file, inputs=[ video_input, format_choice_file, elevenlabs_api_key, model_id, gemini_api_key, claude_api_key, course_name, section_name, lesson_name, language_selector ], outputs=[ audio_output_file, status_output_file, transcript_file_output, transcript_status_output, quiz_output_file, quiz_file_output_file, json_file_output_file ] ) # Connect PDF processing process_pdf_button.click( fn=process_pdf_document, inputs=[ pdf_input, gemini_api_key, claude_api_key, course_name, section_name, lesson_name, language_selector ], outputs=[ pdf_status_output, pdf_text_file_output, pdf_quiz_output, pdf_quiz_file_output, pdf_json_file_output ] ) process_docx_button.click( fn=process_docx_document, inputs=[ docx_input, gemini_api_key, claude_api_key, course_name, section_name, lesson_name, language_selector ], outputs=[ docx_status_output, docx_text_file_output, docx_quiz_output, docx_quiz_file_output, docx_json_file_output ] ) process_audio_button.click( fn=process_audio_document, inputs=[ audio_input, elevenlabs_api_key, model_id, gemini_api_key, claude_api_key, course_name, section_name, lesson_name, language_selector ], outputs=[ audio_status_output, audio_transcript_file_output, audio_quiz_output, audio_quiz_file_output, audio_json_file_output ] ) if __name__ == "__main__": app.launch(share=True, debug=True)