Spaces:
Sleeping
Sleeping
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) |