Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -25,15 +25,18 @@ app.secret_key = os.urandom(24)
|
|
25 |
# Store conversation history
|
26 |
conversation_history = []
|
27 |
|
28 |
-
# Synthesize therapist response to speech without
|
29 |
-
def synthesize_audio(text
|
30 |
try:
|
|
|
|
|
31 |
options = SpeakOptions(model=model)
|
32 |
-
|
|
|
33 |
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as tmp_file:
|
34 |
tmp_filename = tmp_file.name
|
35 |
|
36 |
-
# Synthesize the response and save
|
37 |
deepgram.speak.v("1").save(tmp_filename, {"text": text}, options)
|
38 |
|
39 |
# Read the audio data into memory
|
@@ -43,8 +46,10 @@ def synthesize_audio(text, model="aura-asteria-en"):
|
|
43 |
# Remove the temporary file
|
44 |
os.remove(tmp_filename)
|
45 |
|
46 |
-
#
|
47 |
-
|
|
|
|
|
48 |
except Exception as e:
|
49 |
raise ValueError(f"Speech synthesis failed: {str(e)}")
|
50 |
|
@@ -63,7 +68,7 @@ def process_audio():
|
|
63 |
global conversation_history
|
64 |
|
65 |
# Step 1: Accept audio input
|
66 |
-
audio_data = request.files.get('audio_data')
|
67 |
if not audio_data:
|
68 |
return jsonify({'error': 'No audio file uploaded'}), 400
|
69 |
|
@@ -106,13 +111,14 @@ def process_audio():
|
|
106 |
# Append assistant reply to conversation history
|
107 |
conversation_history.append({"role": "assistant", "content": assistant_reply})
|
108 |
|
109 |
-
# Step 4: Synthesize therapist response to speech (no permanent
|
110 |
-
|
111 |
|
|
|
112 |
return jsonify({
|
113 |
'transcription': user_input,
|
114 |
'response': assistant_reply,
|
115 |
-
'
|
116 |
})
|
117 |
|
118 |
except Exception as e:
|
|
|
25 |
# Store conversation history
|
26 |
conversation_history = []
|
27 |
|
28 |
+
# Synthesize therapist response to speech without permanently storing the file
|
29 |
+
def synthesize_audio(text):
|
30 |
try:
|
31 |
+
# Retrieve the selected voice or default to "aura-asteria-en"
|
32 |
+
model = session.get('selected_voice', 'aura-asteria-en')
|
33 |
options = SpeakOptions(model=model)
|
34 |
+
|
35 |
+
# Use a temporary file to store the synthesized audio
|
36 |
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as tmp_file:
|
37 |
tmp_filename = tmp_file.name
|
38 |
|
39 |
+
# Synthesize the response and save to the temporary file
|
40 |
deepgram.speak.v("1").save(tmp_filename, {"text": text}, options)
|
41 |
|
42 |
# Read the audio data into memory
|
|
|
46 |
# Remove the temporary file
|
47 |
os.remove(tmp_filename)
|
48 |
|
49 |
+
# Encode the audio data as base64 and return a data URI
|
50 |
+
audio_base64 = base64.b64encode(audio_data).decode('utf-8')
|
51 |
+
audio_data_uri = f"data:audio/mpeg;base64,{audio_base64}"
|
52 |
+
return audio_data_uri
|
53 |
except Exception as e:
|
54 |
raise ValueError(f"Speech synthesis failed: {str(e)}")
|
55 |
|
|
|
68 |
global conversation_history
|
69 |
|
70 |
# Step 1: Accept audio input
|
71 |
+
audio_data = request.files.get('audio_data')
|
72 |
if not audio_data:
|
73 |
return jsonify({'error': 'No audio file uploaded'}), 400
|
74 |
|
|
|
111 |
# Append assistant reply to conversation history
|
112 |
conversation_history.append({"role": "assistant", "content": assistant_reply})
|
113 |
|
114 |
+
# Step 4: Synthesize therapist response to speech (in memory, no permanent files)
|
115 |
+
audio_url = synthesize_audio(assistant_reply)
|
116 |
|
117 |
+
# Return data URI instead of file URL
|
118 |
return jsonify({
|
119 |
'transcription': user_input,
|
120 |
'response': assistant_reply,
|
121 |
+
'audioUrl': audio_url
|
122 |
})
|
123 |
|
124 |
except Exception as e:
|