From 111c3c6dd12bbf6b02b4b3d8acececfecd5905e9 Mon Sep 17 00:00:00 2001 From: Kristina Date: Thu, 1 May 2025 07:04:46 +0400 Subject: [PATCH 1/2] Extract deepgram-config (#8793) --- services/ai-bot/love-agent/src/config.ts | 18 ++++- .../ai-bot/love-agent/src/deepgram/stt.ts | 72 ++++++++++++------- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/services/ai-bot/love-agent/src/config.ts b/services/ai-bot/love-agent/src/config.ts index 6e5b9d4c96..c95155d58e 100644 --- a/services/ai-bot/love-agent/src/config.ts +++ b/services/ai-bot/love-agent/src/config.ts @@ -28,6 +28,14 @@ interface Config { VadSilenceDurationMs: number VadPrefixPaddingMs: number VadThreshold: number + + DgEndpointing: number + DgUtteranceEndMs: number + DgInterimResults: boolean + DgVadEvents: boolean + DgPunctuate: boolean + DgSmartFormat: boolean + DgNoDelay: boolean } const config: Config = (() => { @@ -43,7 +51,15 @@ const config: Config = (() => { SttProvider: (process.env.STT_PROVIDER as SttProvider) ?? 'deepgram', VadSilenceDurationMs: parseInt(process.env.SILENCE_DURATION_MS ?? '1000'), VadPrefixPaddingMs: parseInt(process.env.PREFIX_PADDING_MS ?? '1000'), - VadThreshold: parseFloat(process.env.VAD_THRESHOLD ?? '0.5') + VadThreshold: parseFloat(process.env.VAD_THRESHOLD ?? '0.5'), + + DgEndpointing: parseInt(process.env.DG_ENDPOINTING ?? '100'), + DgInterimResults: process.env.DG_INTERIM_RESULTS === 'true', + DgVadEvents: process.env.DG_VAD_EVENTS === 'true', + DgPunctuate: process.env.DG_PUNCTUATE === 'true', + DgSmartFormat: process.env.DG_SMART_FORMAT === 'true', + DgUtteranceEndMs: parseInt(process.env.DG_UTTERANCE_END_MS ?? '0'), + DgNoDelay: process.env.DG_NO_DELAY === 'true' } const missingEnv = (Object.keys(params) as Array).filter((key) => params[key] === undefined) diff --git a/services/ai-bot/love-agent/src/deepgram/stt.ts b/services/ai-bot/love-agent/src/deepgram/stt.ts index d473691c8e..39ec0933e8 100644 --- a/services/ai-bot/love-agent/src/deepgram/stt.ts +++ b/services/ai-bot/love-agent/src/deepgram/stt.ts @@ -29,19 +29,6 @@ import config from '../config.js' const KEEP_ALIVE_INTERVAL = 10 * 1000 -const dgSchema: LiveSchema = { - model: config.DeepgramModel, - encoding: 'linear16', - smart_format: true, - endpointing: 500, - interim_results: true, - vad_events: true, - utterance_end_ms: 1000, - - punctuate: true, - language: 'en' -} - export class STT implements Stt { private readonly deepgram: DeepgramClient @@ -134,6 +121,47 @@ export class STT implements Stt { } } + getOptions (stream: AudioStream): LiveSchema { + const options: Partial = {} + + if (config.DgEndpointing !== 0) { + options.endpointing = config.DgEndpointing + } + + if (config.DgInterimResults) { + options.interim_results = true + } + + if (config.DgVadEvents) { + options.vad_events = true + } + + if (config.DgUtteranceEndMs !== 0) { + options.utterance_end_ms = config.DgUtteranceEndMs + } + + if (config.DgPunctuate) { + options.punctuate = true + } + + if (config.DgSmartFormat) { + options.smart_format = true + } + + if (config.DgNoDelay) { + options.no_delay = true + } + + return { + ...options, + encoding: 'linear16', + channels: stream.numChannels, + sample_rate: stream.sampleRate, + language: 'multi', + model: config.DeepgramModel + } + } + processTrack (sid: string): void { const track = this.trackBySid.get(sid) if (track === undefined) return @@ -141,14 +169,9 @@ export class STT implements Stt { const stream = new AudioStream(track) // const language = this.language ?? 'en' - const dgConnection = this.deepgram.listen.live({ - ...dgSchema, - channels: stream.numChannels, - sample_rate: stream.sampleRate, - language: 'multi', - model: config.DeepgramModel - }) - console.log('Starting deepgram for track', this.room.name, sid) + const options = this.getOptions(stream) + const dgConnection = this.deepgram.listen.live(options) + console.log('Starting deepgram for track', this.room.name, sid, options) const interval = setInterval(() => { dgConnection.keepAlive() @@ -167,14 +190,13 @@ export class STT implements Stt { return } - if (data.speech_final === true) { - void this.sendToPlatform(transcript, sid) - } else if (data.is_final === true) { + if (data.speech_final === true || data.is_final === true) { void this.sendToPlatform(transcript, sid) } }) - dgConnection.on(LiveTranscriptionEvents.Close, (d) => { + dgConnection.on(LiveTranscriptionEvents.Close, (data) => { + console.log('Deepgram closed', data) this.stopDeepgram(sid) }) From 93a957275cd43a07569bfd3ade2e56b8f8984e1c Mon Sep 17 00:00:00 2001 From: Anton Alexeyev Date: Thu, 1 May 2025 10:08:26 +0700 Subject: [PATCH 2/2] Fix issue status icon presentation (#8795) --- .../src/components/SetParentIssueActionPopup.svelte | 2 +- .../src/components/activity/StatusIcon.svelte | 4 ++-- .../tracker-resources/src/components/issues/IssueItem.svelte | 2 +- .../src/components/issues/IssueNotification.svelte | 2 +- .../src/components/issues/IssueStatusActivity.svelte | 2 +- .../src/components/issues/IssueStatusPresenter.svelte | 2 +- .../src/components/issues/StatusEditor.svelte | 3 ++- .../src/components/issues/StatusSelector.svelte | 2 +- .../src/components/issues/edit/SubIssueSelector.svelte | 2 +- .../components/issues/related/RelatedIssuePresenter.svelte | 2 +- 10 files changed, 12 insertions(+), 11 deletions(-) diff --git a/plugins/tracker-resources/src/components/SetParentIssueActionPopup.svelte b/plugins/tracker-resources/src/components/SetParentIssueActionPopup.svelte index f2176f7f36..bf7059e99f 100644 --- a/plugins/tracker-resources/src/components/SetParentIssueActionPopup.svelte +++ b/plugins/tracker-resources/src/components/SetParentIssueActionPopup.svelte @@ -88,7 +88,7 @@
{#if issue?.$lookup?.status}
- +
{/if} {issue.identifier} diff --git a/plugins/tracker-resources/src/components/activity/StatusIcon.svelte b/plugins/tracker-resources/src/components/activity/StatusIcon.svelte index be6afa9efd..759d214d2c 100644 --- a/plugins/tracker-resources/src/components/activity/StatusIcon.svelte +++ b/plugins/tracker-resources/src/components/activity/StatusIcon.svelte @@ -20,14 +20,14 @@ export let tx: TxUpdateDoc $: value = tx.operations.status + $: taskType = tx.operations.kind $: status = value && $statusStore.byId.get(value) - $: space = tx.objectSpace as Ref
{#if status} - + {/if}
diff --git a/plugins/tracker-resources/src/components/issues/IssueItem.svelte b/plugins/tracker-resources/src/components/issues/IssueItem.svelte index 32049b2dcb..916ae5c425 100644 --- a/plugins/tracker-resources/src/components/issues/IssueItem.svelte +++ b/plugins/tracker-resources/src/components/issues/IssueItem.svelte @@ -27,7 +27,7 @@ {#if st} - + {/if} diff --git a/plugins/tracker-resources/src/components/issues/IssueNotification.svelte b/plugins/tracker-resources/src/components/issues/IssueNotification.svelte index 13d93da0fa..f83ed3a3ff 100644 --- a/plugins/tracker-resources/src/components/issues/IssueNotification.svelte +++ b/plugins/tracker-resources/src/components/issues/IssueNotification.svelte @@ -57,7 +57,7 @@
{#if status === undefined && issue} - + {/if} {#if issue} diff --git a/plugins/tracker-resources/src/components/issues/IssueStatusActivity.svelte b/plugins/tracker-resources/src/components/issues/IssueStatusActivity.svelte index a46f33d618..4316db17f1 100644 --- a/plugins/tracker-resources/src/components/issues/IssueStatusActivity.svelte +++ b/plugins/tracker-resources/src/components/issues/IssueStatusActivity.svelte @@ -86,6 +86,6 @@ {#each displaySt as st} - + {/each} diff --git a/plugins/tracker-resources/src/components/issues/IssueStatusPresenter.svelte b/plugins/tracker-resources/src/components/issues/IssueStatusPresenter.svelte index 85e9e38780..2a064117de 100644 --- a/plugins/tracker-resources/src/components/issues/IssueStatusPresenter.svelte +++ b/plugins/tracker-resources/src/components/issues/IssueStatusPresenter.svelte @@ -31,5 +31,5 @@ {#if value} - + {/if} diff --git a/plugins/tracker-resources/src/components/issues/StatusEditor.svelte b/plugins/tracker-resources/src/components/issues/StatusEditor.svelte index 3256cac578..d164656e31 100644 --- a/plugins/tracker-resources/src/components/issues/StatusEditor.svelte +++ b/plugins/tracker-resources/src/components/issues/StatusEditor.svelte @@ -143,6 +143,7 @@
{#if selectedStatus}{/if} @@ -170,7 +171,7 @@ > {#if selectedStatus} - + {/if} diff --git a/plugins/tracker-resources/src/components/issues/StatusSelector.svelte b/plugins/tracker-resources/src/components/issues/StatusSelector.svelte index 86ea837ebc..df13cce3b4 100644 --- a/plugins/tracker-resources/src/components/issues/StatusSelector.svelte +++ b/plugins/tracker-resources/src/components/issues/StatusSelector.svelte @@ -139,7 +139,7 @@ > {#if selectedStatus} - + {/if} diff --git a/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte b/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte index d8710c3167..53a3c22b0b 100644 --- a/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte +++ b/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte @@ -161,7 +161,7 @@ > {#if parentStatus}
- +
{/if} {parentIssue.identifier} diff --git a/plugins/tracker-resources/src/components/issues/related/RelatedIssuePresenter.svelte b/plugins/tracker-resources/src/components/issues/related/RelatedIssuePresenter.svelte index 511f4965c2..f454e2304d 100644 --- a/plugins/tracker-resources/src/components/issues/related/RelatedIssuePresenter.svelte +++ b/plugins/tracker-resources/src/components/issues/related/RelatedIssuePresenter.svelte @@ -29,7 +29,7 @@
{#if status}
- +
{/if}