File size: 5,180 Bytes
3add489
 
 
 
 
 
0b61c55
3add489
 
 
0b61c55
 
 
3add489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0b61c55
3add489
0b61c55
 
3add489
 
0b61c55
 
3add489
 
 
 
 
 
0b61c55
3add489
 
0b61c55
3add489
 
 
 
 
 
 
 
 
 
 
 
 
0b61c55
3add489
0b61c55
3add489
 
 
0b61c55
 
 
 
 
 
3add489
 
 
 
 
 
 
 
 
 
 
 
 
 
0b61c55
 
 
 
 
 
 
 
 
3add489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0b61c55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3add489
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import os
import gradio as gr
import tempfile
from video_processing import (
    process_video_file,
)
from quiz_processing import analyze_document
ELEVENLABS_API_KEY = os.environ.get("ELEVENLABS_API_KEY", None)
GOOGLE_API_KEY = os.environ.get('GOOGLE_API_KEY', None)

def combined_process_video_file(video_file, output_format, elevenlabs_api_key, model_id, 
                              gemini_api_key, claude_api_key, course_name, section_name, 
                              lesson_name, language):
    result = process_video_file(
        video_file, output_format, elevenlabs_api_key, model_id
    )
    
    audio_path = result[0]
    audio_msg = result[1]
    transcript_file = result[2]
    transcript_msg = result[3]
    transcript_text = result[4]
    
    if not transcript_text:
        return audio_path, audio_msg, transcript_file, transcript_msg, "No transcript text to analyze", None, None
    
    enriched_transcript = f"""
    COURSE: {course_name}
    SECTION: {section_name}
    LESSON: {lesson_name}
    
    TRANSCRIPT:
    {transcript_text}
    """
    
    formatted_quiz, quiz_file, json_file = analyze_document(
        enriched_transcript, 
        gemini_api_key,
        claude_api_key,
        course_name, 
        section_name, 
        lesson_name,
        language
    )
    
    return audio_path, audio_msg, transcript_file, transcript_msg, formatted_quiz, quiz_file, json_file


with gr.Blocks(title="Video to Quiz Generator") as app:
    gr.Markdown("# Video => Quiz")
    gr.Markdown("Upload a video or provide a URL to extract audio, transcribe, and 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")


    
    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
        ]
    )

if __name__ == "__main__":
    app.launch(share=True, debug=True)