MrSimple01's picture
Update app.py
ffe0e82 verified
raw
history blame contribute delete
8.52 kB
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)