From 4d136e1e286696827859a2a3d4b366d2726b1325 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Fri, 20 Feb 2026 07:15:38 -0700 Subject: [PATCH 1/2] Align DeepgramSageMakerSTTService finalize pattern with DeepgramSTTService --- src/pipecat/services/deepgram/stt_sagemaker.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pipecat/services/deepgram/stt_sagemaker.py b/src/pipecat/services/deepgram/stt_sagemaker.py index 99f6cf487..8fc95b726 100644 --- a/src/pipecat/services/deepgram/stt_sagemaker.py +++ b/src/pipecat/services/deepgram/stt_sagemaker.py @@ -368,7 +368,6 @@ class DeepgramSageMakerSTTService(STTService): return is_final = parsed.get("is_final", False) - speech_final = parsed.get("speech_final", False) # Extract language if available language = None @@ -376,8 +375,12 @@ class DeepgramSageMakerSTTService(STTService): language = alternatives[0]["languages"][0] language = Language(language) - if is_final and speech_final: - # Final transcription + if is_final: + # Check if this response is from a finalize() call. + # Only mark as finalized when both we requested it AND Deepgram confirms it. + from_finalize = parsed.get("from_finalize", False) + if from_finalize: + self.confirm_finalize() await self.push_frame( TranscriptionFrame( transcript, @@ -435,10 +438,12 @@ class DeepgramSageMakerSTTService(STTService): if isinstance(frame, VADUserStartedSpeakingFrame): await self._start_metrics() elif isinstance(frame, VADUserStoppedSpeakingFrame): - # Send finalize message to Deepgram when user stops speaking - # This tells Deepgram to flush any remaining audio and return final results + # https://developers.deepgram.com/docs/finalize + # Mark that we're awaiting a from_finalize response + self.request_finalize() if self._client and self._client.is_active: try: await self._client.send_json({"type": "Finalize"}) except Exception as e: logger.warning(f"Error sending Finalize message: {e}") + logger.trace(f"Triggered finalize event on: {frame.name=}, {direction=}") From 43d686c622ebbb6b7eaa38477b1cbaf4aba77d9e Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Fri, 20 Feb 2026 07:17:36 -0700 Subject: [PATCH 2/2] Add changelog entry for PR #3784 --- changelog/3784.fixed.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/3784.fixed.md diff --git a/changelog/3784.fixed.md b/changelog/3784.fixed.md new file mode 100644 index 000000000..e88431f16 --- /dev/null +++ b/changelog/3784.fixed.md @@ -0,0 +1 @@ +- Fixed `DeepgramSageMakerSTTService` to properly track finalize lifecycle using `request_finalize()` / `confirm_finalize()` and use `is_final` (instead of `is_final and speech_final`) for final transcription detection, matching `DeepgramSTTService` behavior.