fix(deepgram): use punctuated_word for word-level transcripts - #2227
Conversation
🦋 Changeset detectedLatest commit: f5741b4 The changes in this PR will be included in the next version bump. This PR includes changesets to release 39 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Port verification: livekit/agents#6699 → this PRCompared this PR's diff against the merged Python source ( Verdict: Faithful, mechanical port. No correctness issues found. Labeled Full analysis
Not independently re-run: relied on the PR's own reported Generated by Claude Code |
Summary
punctuated_wordvalues for word-level transcripts whenpunctuateorsmart_formatis enabledwordvalues when formatting is disabled and fall back to them whenpunctuated_wordis absent or emptyPorts livekit/agents#6699.
Source diff coverage
Source diff coverage
livekit-plugins/livekit-plugins-deepgram/livekit/plugins/deepgram/stt.py: adapted toplugins/deepgram/src/stt.ts. The target already has corresponding prerecorded and streaming conversion paths, so the Python option forwarding and_word_textselection logic were translated to camelCase TypeScript while preserving defaults and fallback behavior.Validation
pnpm test plugins/deepgram(4 passed, 3 credential-gated tests skipped)pnpm build(40 packages passed)pnpm --filter @livekit/agents-plugin-deepgram lint(passed with pre-existing warnings)pnpm lint(blocked by an unrelated existing Prettier error inplugins/minimax/src/models.ts)cue-cliruntime validation was not run becauseDEEPGRAM_API_KEYis unavailable in the environmentPorted from livekit/agents#6699
Original PR description
Summary
SpeechData.textandSpeechData.wordsare built from different Deepgram fields, so the two disagree on the same object.textcomes from the transcript, which honours thepunctuateoption. The word list was built from the raw per-word field, which is lowercase and unpunctuated regardless of any option:Deepgram returns
punctuated_wordalongsideword, in the very dict that comprehension iterates:Field selection across the four cases: