ankban commited on
Commit
6cb4362
Β·
verified Β·
1 Parent(s): b0d77d1

Upload spoken_module.py

Browse files
Files changed (1) hide show
  1. spoken_module.py +73 -0
spoken_module.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ import uuid
4
+ from gtts import gTTS
5
+ from datetime import datetime
6
+ from sqlmodel import Session
7
+ from app_utils import (
8
+ model, LANG_CODES, client, save_to_db, fetch_user_sessions,
9
+ convert_to_wav, transcribe_audio, generate_feedback, generate_example_response
10
+ )
11
+
12
+ def spoken_dashboard():
13
+ with gr.Column() as spoken_panel:
14
+ gr.Markdown("""
15
+ <div id="header" style="text-align: center;">
16
+ <img src="file/images/chatter_owl.png" width="120">
17
+ <h2>πŸ¦‰ Meet <strong>Chatter the Owl</strong></h2>
18
+ <p>Enter your name, choose a language, and speak! I’ll help you grow as a communicator.</p>
19
+ </div>
20
+ """)
21
+
22
+ nickname_box = gr.Textbox(label="πŸ‘€ Your Nickname", placeholder="Enter your name...")
23
+ language_dropdown = gr.Dropdown(label="🌍 Select Your Language", choices=list(LANG_CODES.keys()), value="English")
24
+
25
+ with gr.Row():
26
+ audio_input = gr.Audio(type="filepath", label="πŸŽ™ Speak or Upload Audio")
27
+
28
+ transcript_box = gr.Textbox(label="πŸ“– What You Said", interactive=False)
29
+ feedback_box = gr.Textbox(label="πŸ’‘ Chatter’s Feedback", interactive=False)
30
+ audio_output = gr.Audio(label="πŸ”Š Chatter Speaks", type="filepath")
31
+ hidden_transcript = gr.Textbox(visible=False)
32
+
33
+ with gr.Row():
34
+ try_again = gr.Button("πŸ” Try Again")
35
+ show_example = gr.Button("🎯 Show Me an Example")
36
+
37
+ example_box = gr.Textbox(label="πŸ—£ Suggested Improvement", visible=True, placeholder="Click to generate improved speech...")
38
+ history_table = gr.Dataframe(headers=["πŸ•’ Timestamp", "🌐 Language", "πŸ“ Transcript (Preview)", "πŸ“‹ Feedback (Preview)"])
39
+
40
+ def tutor_feedback(audio_file, language, nickname):
41
+ if not audio_file:
42
+ return "", "No audio received.", None, "", []
43
+
44
+ wav_path = convert_to_wav(audio_file)
45
+ transcript = transcribe_audio(wav_path)
46
+ feedback_text = generate_feedback(transcript, language)
47
+
48
+ lang_code = LANG_CODES.get(language, "en")
49
+ tts = gTTS(feedback_text, lang=lang_code)
50
+ mp3_path = f"/tmp/{uuid.uuid4()}.mp3"
51
+ tts.save(mp3_path)
52
+
53
+ save_to_db(nickname, transcript, feedback_text, language)
54
+ sessions = fetch_user_sessions(nickname)
55
+ session_table = [[s.timestamp, s.language, s.transcript[:40], s.feedback[:40]] for s in sessions]
56
+
57
+ return transcript, feedback_text, mp3_path, transcript, session_table
58
+
59
+ audio_input.change(
60
+ fn=tutor_feedback,
61
+ inputs=[audio_input, language_dropdown, nickname_box],
62
+ outputs=[transcript_box, feedback_box, audio_output, hidden_transcript, history_table]
63
+ )
64
+
65
+ try_again.click(fn=lambda: ("", "", None, "", "", []),
66
+ inputs=None,
67
+ outputs=[transcript_box, feedback_box, audio_output, hidden_transcript, example_box, history_table])
68
+
69
+ show_example.click(fn=generate_example_response,
70
+ inputs=[hidden_transcript, language_dropdown],
71
+ outputs=example_box)
72
+
73
+ return spoken_panel