ankban commited on
Commit
8cca692
Β·
verified Β·
1 Parent(s): 4b798ad

Update spoken_module.py

Browse files
Files changed (1) hide show
  1. spoken_module.py +47 -19
spoken_module.py CHANGED
@@ -1,12 +1,15 @@
1
  import gradio as gr
2
  import uuid
 
3
  from gtts import gTTS
4
  from datetime import datetime
5
  from sqlmodel import Session
6
  from app_utils import (
7
  model, LANG_CODES, client, save_to_db, fetch_user_sessions,
8
  convert_to_wav, transcribe_audio, generate_feedback, generate_example_response,
9
- parse_scores_from_feedback, generate_progress_summary
 
 
10
  )
11
 
12
  def spoken_dashboard(nickname):
@@ -53,15 +56,13 @@ def spoken_dashboard(nickname):
53
  example_box = gr.Textbox(label="πŸ—£ Suggested Improvement", visible=True, placeholder="Click to generate improved speech...")
54
  history_table = gr.Dataframe(headers=["πŸ•’ Timestamp", "🌐 Language", "πŸ“ Transcript (Preview)", "πŸ“‹ Feedback (Preview)"])
55
 
56
- def fetch_last_transcript(n):
57
- if not n:
58
- return None
59
- sessions = fetch_user_sessions(n)
60
- return sessions[-1].transcript if sessions else None
61
 
62
  def tutor_feedback(audio_file, language, goal, focus_areas):
63
  if not audio_file:
64
- return "", "No audio received.", None, "", []
65
 
66
  wav_path = convert_to_wav(audio_file)
67
  transcript = transcribe_audio(wav_path)
@@ -69,7 +70,7 @@ def spoken_dashboard(nickname):
69
  previous_transcript = previous_sessions[-1].transcript if previous_sessions else None
70
  previous_feedback = previous_sessions[-1].feedback if previous_sessions else None
71
 
72
- # Get feedback from GPT
73
  feedback_text = generate_feedback(
74
  transcript=transcript,
75
  language=language,
@@ -78,39 +79,66 @@ def spoken_dashboard(nickname):
78
  previous_transcript=previous_transcript
79
  )
80
 
81
- # Append progress tracker if available
82
  if previous_feedback:
83
  progress_summary = generate_progress_summary(feedback_text, previous_feedback)
84
  feedback_text += progress_summary
85
 
86
- # Text-to-Speech
 
 
 
 
 
 
 
87
  lang_code = LANG_CODES.get(language, "en")
88
  tts = gTTS(feedback_text, lang=lang_code)
89
  mp3_path = f"/tmp/{uuid.uuid4()}.mp3"
90
  tts.save(mp3_path)
91
 
92
- # Save session
93
- if nickname:
94
- save_to_db(nickname, transcript, feedback_text, language)
95
-
96
  sessions = fetch_user_sessions(nickname)
97
  session_table = [[s.timestamp, s.language, s.transcript[:40], s.feedback[:40]] for s in sessions]
98
 
99
- return transcript, feedback_text, mp3_path, transcript, session_table
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
 
101
  audio_input.change(
102
  fn=tutor_feedback,
103
  inputs=[audio_input, language_dropdown, goal_dropdown, focus_checkboxes],
104
- outputs=[transcript_box, feedback_box, audio_output, hidden_transcript, history_table],
 
 
 
105
  show_progress="minimal"
106
  )
107
 
108
- try_again.click(fn=lambda: ("", "", None, "", "", []),
109
  inputs=None,
110
- outputs=[transcript_box, feedback_box, audio_output, hidden_transcript, example_box, history_table])
 
 
 
111
 
112
  show_example.click(fn=generate_example_response,
113
  inputs=[hidden_transcript, language_dropdown],
114
  outputs=example_box)
115
 
116
- return spoken_panel
 
1
  import gradio as gr
2
  import uuid
3
+ import matplotlib.pyplot as plt
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
+ parse_scores_from_feedback, generate_progress_summary,
11
+ build_score_comparison_data, render_score_chart,
12
+ build_trend_data, render_trend_chart
13
  )
14
 
15
  def spoken_dashboard(nickname):
 
56
  example_box = gr.Textbox(label="πŸ—£ Suggested Improvement", visible=True, placeholder="Click to generate improved speech...")
57
  history_table = gr.Dataframe(headers=["πŸ•’ Timestamp", "🌐 Language", "πŸ“ Transcript (Preview)", "πŸ“‹ Feedback (Preview)"])
58
 
59
+ comparison_plot = gr.Plot(label="πŸ“Š Current vs Previous Scores")
60
+ trend_plot = gr.Plot(label="πŸ“ˆ Tone Progress Over Time")
61
+ milestone_box = gr.Markdown(visible=False)
 
 
62
 
63
  def tutor_feedback(audio_file, language, goal, focus_areas):
64
  if not audio_file:
65
+ return "", "No audio received.", None, "", [], None, None, gr.update(visible=False)
66
 
67
  wav_path = convert_to_wav(audio_file)
68
  transcript = transcribe_audio(wav_path)
 
70
  previous_transcript = previous_sessions[-1].transcript if previous_sessions else None
71
  previous_feedback = previous_sessions[-1].feedback if previous_sessions else None
72
 
73
+ # Get new feedback
74
  feedback_text = generate_feedback(
75
  transcript=transcript,
76
  language=language,
 
79
  previous_transcript=previous_transcript
80
  )
81
 
82
+ # Progress summary
83
  if previous_feedback:
84
  progress_summary = generate_progress_summary(feedback_text, previous_feedback)
85
  feedback_text += progress_summary
86
 
87
+ # Milestone message
88
+ session_count = len(previous_sessions) + 1
89
+ milestone_message = ""
90
+ if session_count in [3, 5, 10]:
91
+ milestone_message = f"πŸŽ‰ Congrats! You’ve completed **{session_count} sessions**!"
92
+ feedback_text += f"\n\n{milestone_message}"
93
+
94
+ # TTS
95
  lang_code = LANG_CODES.get(language, "en")
96
  tts = gTTS(feedback_text, lang=lang_code)
97
  mp3_path = f"/tmp/{uuid.uuid4()}.mp3"
98
  tts.save(mp3_path)
99
 
100
+ # Save new session
101
+ save_to_db(nickname, transcript, feedback_text, language)
 
 
102
  sessions = fetch_user_sessions(nickname)
103
  session_table = [[s.timestamp, s.language, s.transcript[:40], s.feedback[:40]] for s in sessions]
104
 
105
+ # Charts
106
+ score_chart, trend_chart = None, None
107
+ if previous_feedback:
108
+ chart_data = build_score_comparison_data(feedback_text, previous_feedback)
109
+ score_chart = render_score_chart(chart_data)
110
+
111
+ if sessions:
112
+ dates, tone_scores = build_trend_data(sessions, category="Tone")
113
+ if tone_scores:
114
+ trend_chart = render_trend_chart(dates, tone_scores, "Tone")
115
+
116
+ return (
117
+ transcript, feedback_text, mp3_path,
118
+ transcript, session_table,
119
+ score_chart, trend_chart,
120
+ gr.update(visible=bool(milestone_message), value=milestone_message)
121
+ )
122
 
123
  audio_input.change(
124
  fn=tutor_feedback,
125
  inputs=[audio_input, language_dropdown, goal_dropdown, focus_checkboxes],
126
+ outputs=[
127
+ transcript_box, feedback_box, audio_output, hidden_transcript,
128
+ history_table, comparison_plot, trend_plot, milestone_box
129
+ ],
130
  show_progress="minimal"
131
  )
132
 
133
+ try_again.click(fn=lambda: ("", "", None, "", "", None, None, gr.update(visible=False)),
134
  inputs=None,
135
+ outputs=[
136
+ transcript_box, feedback_box, audio_output, hidden_transcript,
137
+ example_box, comparison_plot, trend_plot, milestone_box
138
+ ])
139
 
140
  show_example.click(fn=generate_example_response,
141
  inputs=[hidden_transcript, language_dropdown],
142
  outputs=example_box)
143
 
144
+ return spoken_panel