diff --git a/lib/tasks/gather.js b/lib/tasks/gather.js index 194086aa..700a2533 100644 --- a/lib/tasks/gather.js +++ b/lib/tasks/gather.js @@ -500,6 +500,10 @@ class TaskGather extends SttTask { this.addCustomEventListener(ep, GladiaTranscriptionEvents.ConnectFailure, this._onVendorConnectFailure.bind(this, cs, ep)); this.addCustomEventListener(ep, GladiaTranscriptionEvents.Error, this._onVendorError.bind(this, cs, ep)); + // gladia require unique url for each session + const {host, path} = await this.createGladiaLiveSession(); + opts.GLADIA_SPEECH_HOST = host; + opts.GLADIA_SPEECH_PATH = path; break; case 'soniox': diff --git a/lib/tasks/stt-task.js b/lib/tasks/stt-task.js index 65b25341..2a818450 100644 --- a/lib/tasks/stt-task.js +++ b/lib/tasks/stt-task.js @@ -203,26 +203,14 @@ class SttTask extends Task { if (cs.hasGlobalSttPunctuation && !this.data.recognizer.punctuation) { this.data.recognizer.punctuation = cs.globalSttPunctuation; } - if (this.vendor === 'gladia') { - const { api_key, region } = this.sttCredentials; - const {url} = await this.createGladiaLiveSession({ - api_key, region, - model: this.data.recognizer.model || 'solaria-1', - options: this.data.recognizer.gladiaOptions || {} - }); - const {host, pathname, search} = new URL(url); - this.sttCredentials.host = host; - this.sttCredentials.path = `${pathname}${search}`; - } } - async createGladiaLiveSession({ - api_key, - region = 'us-west', - model = 'solaria-1', - options = {}, - }) { + async createGladiaLiveSession() { + const { api_key, region = 'us-west' } = this.sttCredentials; + const model = this.data.recognizer.model || 'solaria-1'; + const options = this.data.recognizer.gladiaOptions || {}; + const url = `https://api.gladia.io/v2/live?region=${region}`; const response = await fetch(url, { method: 'POST', @@ -252,7 +240,9 @@ class SttTask extends Task { const data = await response.json(); this.logger.debug({url: data.url}, 'Gladia Call registered'); - return data; + + const {host, pathname, search} = new URL(data.url); + return {host, path: `${pathname}${search}`}; } addCustomEventListener(ep, event, handler) { diff --git a/lib/tasks/transcribe.js b/lib/tasks/transcribe.js index 34ccf59b..e3cd3302 100644 --- a/lib/tasks/transcribe.js +++ b/lib/tasks/transcribe.js @@ -459,6 +459,14 @@ class TaskTranscribe extends SttTask { else if (this.data.recognizer?.hints?.length > 0) { prompt = this.data.recognizer?.hints.join(', '); } + } else if (this.vendor === 'gladia') { + // gladia require unique url for each session + const {host, path} = await this.createGladiaLiveSession(); + await ep.set({ + GLADIA_SPEECH_HOST: host, + GLADIA_SPEECH_PATH: path, + }) + .catch((err) => this.logger.info(err, 'Error setting channel variables')); } await ep.startTranscription({ diff --git a/lib/utils/transcription-utils.js b/lib/utils/transcription-utils.js index d060ba11..5014669c 100644 --- a/lib/utils/transcription-utils.js +++ b/lib/utils/transcription-utils.js @@ -1085,13 +1085,6 @@ module.exports = (logger) => { ...(keyterms && keyterms.length > 0 && {DEEPGRAMFLUX_SPEECH_KEYTERMS: keyterms.join(',')}), }; } - else if ('gladia' === vendor) { - const {host, path} = sttCredentials; - opts = { - GLADIA_SPEECH_HOST: host, - GLADIA_SPEECH_PATH: path, - }; - } else if ('soniox' === vendor) { const {sonioxOptions = {}} = rOpts; const {storage = {}} = sonioxOptions;