From 893b698cb427cdefc69ce131df1f57ef344a1e42 Mon Sep 17 00:00:00 2001 From: "rosetta-livekit-bot[bot]" <282703043+rosetta-livekit-bot[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 04:55:08 +0000 Subject: [PATCH] fix(deepgram): validate updated model with stored language --- .../deepgram-update-options-language.md | 5 ++ plugins/deepgram/src/stt.ts | 51 ++++++++++++------- 2 files changed, 37 insertions(+), 19 deletions(-) create mode 100644 .changeset/deepgram-update-options-language.md diff --git a/.changeset/deepgram-update-options-language.md b/.changeset/deepgram-update-options-language.md new file mode 100644 index 000000000..de5ccb77a --- /dev/null +++ b/.changeset/deepgram-update-options-language.md @@ -0,0 +1,5 @@ +--- +"@livekit/agents-plugin-deepgram": patch +--- + +Use stored language when validating Deepgram STT model updates. diff --git a/plugins/deepgram/src/stt.ts b/plugins/deepgram/src/stt.ts index b60d191b2..45a14e158 100644 --- a/plugins/deepgram/src/stt.ts +++ b/plugins/deepgram/src/stt.ts @@ -107,9 +107,34 @@ export class STT extends stt.STT { if (this.#opts.detectLanguage) { this.#opts.language = undefined; - } else if ( - this.#opts.language && - getBaseLanguage(this.#opts.language) !== 'en' && + } else { + this.#opts.model = this.#validateModel(this.#opts.model, this.#opts.language); + } + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async _recognize(_: AudioBuffer): Promise { + throw new Error('Recognize is not supported on Deepgram STT'); + } + + updateOptions(opts: Partial) { + const language = + opts.language !== undefined ? normalizeLanguage(opts.language) : this.#opts.language; + const model = + opts.model !== undefined ? this.#validateModel(opts.model, language) : this.#opts.model; + + this.#opts = { + ...this.#opts, + ...opts, + language, + model, + }; + } + + #validateModel(model: STTModels, language?: string) { + if ( + language && + getBaseLanguage(language) !== 'en' && [ 'nova-2-meeting', 'nova-2-phonecall', @@ -121,27 +146,15 @@ export class STT extends stt.STT { 'nova-2-drivethru', 'nova-2-automotive', 'nova-3-general', - ].includes(this.#opts.model) + ].includes(model) ) { this.#logger.warn( - `${this.#opts.model} does not support language ${this.#opts.language}, falling back to nova-2-general`, + `${model} does not support language ${language}, falling back to nova-2-general`, ); - this.#opts.model = 'nova-2-general'; + return 'nova-2-general'; } - } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async _recognize(_: AudioBuffer): Promise { - throw new Error('Recognize is not supported on Deepgram STT'); - } - - updateOptions(opts: Partial) { - this.#opts = { - ...this.#opts, - ...opts, - language: - opts.language !== undefined ? normalizeLanguage(opts.language) : this.#opts.language, - }; + return model; } stream(options?: { connOptions?: APIConnectOptions }): SpeechStream {