Add response_time_ms and response_time_sec fields to start and turn API responses
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
|
import time
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@@ -44,6 +45,7 @@ async def start_voice_onboarding(
|
|||||||
request: StartVoiceOnboardingRequest,
|
request: StartVoiceOnboardingRequest,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
):
|
):
|
||||||
|
start_time = time.time()
|
||||||
try:
|
try:
|
||||||
onboarding_service = OnboardingService()
|
onboarding_service = OnboardingService()
|
||||||
voice_service = VoiceService()
|
voice_service = VoiceService()
|
||||||
@@ -92,6 +94,7 @@ async def start_voice_onboarding(
|
|||||||
stage="greeting",
|
stage="greeting",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
elapsed = time.time() - start_time
|
||||||
return StartVoiceOnboardingResponse(
|
return StartVoiceOnboardingResponse(
|
||||||
success=True,
|
success=True,
|
||||||
session_id=session.session_id,
|
session_id=session.session_id,
|
||||||
@@ -102,6 +105,8 @@ async def start_voice_onboarding(
|
|||||||
stage=session.stage,
|
stage=session.stage,
|
||||||
greeting_text=greeting_text,
|
greeting_text=greeting_text,
|
||||||
audio_url=f"/v1/voice-onboarding/audio/{audio_id}",
|
audio_url=f"/v1/voice-onboarding/audio/{audio_id}",
|
||||||
|
response_time_ms=round(elapsed * 1000, 2),
|
||||||
|
response_time_sec=round(elapsed, 3),
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
import traceback
|
import traceback
|
||||||
@@ -120,6 +125,7 @@ async def voice_turn(
|
|||||||
text_fallback: Optional[str] = Form(None),
|
text_fallback: Optional[str] = Form(None),
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
):
|
):
|
||||||
|
start_time = time.time()
|
||||||
onboarding_service = OnboardingService()
|
onboarding_service = OnboardingService()
|
||||||
voice_service = VoiceService()
|
voice_service = VoiceService()
|
||||||
ai_service = AIOnboardingService()
|
ai_service = AIOnboardingService()
|
||||||
@@ -161,17 +167,16 @@ async def voice_turn(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# If STILL empty, user spoke nothing or silence was recorded.
|
# If STILL empty, user spoke nothing or silence was recorded.
|
||||||
# Do NOT substitute fake default text or auto-fill clinical fields!
|
|
||||||
if not patient_transcript or not patient_transcript.strip():
|
if not patient_transcript or not patient_transcript.strip():
|
||||||
lang = session.language.lower()
|
lang = session.language.lower()
|
||||||
if lang.startswith("ta"):
|
if lang.startswith("ta"):
|
||||||
no_speech_msg = "மன்னிக்கவும், நீங்க பேசுறது கேட்கலை. திரும்பவும் என்ன பிரச்சனைன்னு சொல்ல முடியுமா?"
|
no_speech_msg = "உங்க குரல் கேட்கலைங்க, தயவுசெய்து மைக்கில பேசுங்க. உங்க உடம்பு பிரச்சனையை சொல்லுங்க."
|
||||||
elif lang.startswith("hi"):
|
elif lang.startswith("hi"):
|
||||||
no_speech_msg = "क्षमा करें, मुझे आपकी आवाज़ सुनाई नहीं दी। कृपया अपनी स्वास्थ्य समस्या के बारे में बोलें।"
|
no_speech_msg = "आपकी आवाज़ सुनाई नहीं दी। कृपया अपने माइक में बोलें और अपनी समस्या बताएं।"
|
||||||
elif lang.startswith("te"):
|
elif lang.startswith("te"):
|
||||||
no_speech_msg = "క్షమించండి, మీ ధ్వని వినిపించలేదు. దయచేసి మీ ఆరోగ్య సమస్య గురించి మాట్లాడండి."
|
no_speech_msg = "మీ స్వరం వినబడలేదు. దయచేసి మైక్లో మాట్లాడి మీ ఆరోగ్య సమస్యను చెప్పండి."
|
||||||
elif lang.startswith("kn"):
|
elif lang.startswith("kn"):
|
||||||
no_speech_msg = "ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಧ್ವನಿ ಕೇಳಿಸಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಆರೋಗ್ಯದ ತೊಂದರೆ ಬಗ್ಗೆ ಮಾತನಾಡಿ."
|
no_speech_msg = "ನಿಮ್ಮ ಧ್ವನಿ ಕೇಳಿಸಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮೈಕ್ನಲ್ಲಿ ಮಾತನಾಡಿ ನಿಮ್ಮ ಆರೋಗ್ಯ ಸಮಸ್ಯೆಯನ್ನು ತಿಳಿಸಿ."
|
||||||
else:
|
else:
|
||||||
no_speech_msg = "I didn't hear anything. Please speak into your microphone and describe your health symptoms."
|
no_speech_msg = "I didn't hear anything. Please speak into your microphone and describe your health symptoms."
|
||||||
|
|
||||||
@@ -180,6 +185,7 @@ async def voice_turn(
|
|||||||
language_code=session.language,
|
language_code=session.language,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
elapsed = time.time() - start_time
|
||||||
return VoiceTurnResponse(
|
return VoiceTurnResponse(
|
||||||
success=True,
|
success=True,
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
@@ -188,10 +194,10 @@ async def voice_turn(
|
|||||||
stage=session.stage,
|
stage=session.stage,
|
||||||
completed=False,
|
completed=False,
|
||||||
audio_url=f"/v1/voice-onboarding/audio/{audio_id}",
|
audio_url=f"/v1/voice-onboarding/audio/{audio_id}",
|
||||||
|
response_time_ms=round(elapsed * 1000, 2),
|
||||||
|
response_time_sec=round(elapsed, 3),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 3. Save patient message
|
# 3. Save patient message
|
||||||
onboarding_service.save_message(
|
onboarding_service.save_message(
|
||||||
db=db,
|
db=db,
|
||||||
@@ -272,6 +278,7 @@ async def voice_turn(
|
|||||||
voice_service.synthesize_to_file(audio_id, ai_reply_text, session.language)
|
voice_service.synthesize_to_file(audio_id, ai_reply_text, session.language)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
elapsed = time.time() - start_time
|
||||||
return VoiceTurnResponse(
|
return VoiceTurnResponse(
|
||||||
success=True,
|
success=True,
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
@@ -282,6 +289,8 @@ async def voice_turn(
|
|||||||
audio_url=f"/v1/voice-onboarding/audio/{audio_id}",
|
audio_url=f"/v1/voice-onboarding/audio/{audio_id}",
|
||||||
audio_base64=None,
|
audio_base64=None,
|
||||||
suggested_specialty=sug_spec,
|
suggested_specialty=sug_spec,
|
||||||
|
response_time_ms=round(elapsed * 1000, 2),
|
||||||
|
response_time_sec=round(elapsed, 3),
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
import traceback
|
import traceback
|
||||||
@@ -350,7 +359,6 @@ async def complete_voice_onboarding(
|
|||||||
# Check if there is any conversation to summarize
|
# Check if there is any conversation to summarize
|
||||||
has_details = completion_service.is_complete(session, state)
|
has_details = completion_service.is_complete(session, state)
|
||||||
|
|
||||||
|
|
||||||
messages = (
|
messages = (
|
||||||
db.query(OnboardingMessage)
|
db.query(OnboardingMessage)
|
||||||
.filter(OnboardingMessage.session_id == session_id)
|
.filter(OnboardingMessage.session_id == session_id)
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ class StartVoiceOnboardingResponse(BaseModel):
|
|||||||
stage: str
|
stage: str
|
||||||
greeting_text: str
|
greeting_text: str
|
||||||
audio_url: str
|
audio_url: str
|
||||||
|
response_time_ms: Optional[float] = None
|
||||||
|
response_time_sec: Optional[float] = None
|
||||||
|
|
||||||
|
|
||||||
class VoiceTurnResponse(BaseModel):
|
class VoiceTurnResponse(BaseModel):
|
||||||
@@ -31,3 +33,5 @@ class VoiceTurnResponse(BaseModel):
|
|||||||
audio_url: str
|
audio_url: str
|
||||||
audio_base64: Optional[str] = None
|
audio_base64: Optional[str] = None
|
||||||
suggested_specialty: Optional[dict] = None
|
suggested_specialty: Optional[dict] = None
|
||||||
|
response_time_ms: Optional[float] = None
|
||||||
|
response_time_sec: Optional[float] = None
|
||||||
|
|||||||
Reference in New Issue
Block a user