Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/transcribe dual legs #591

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lib/tasks/say.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ class TaskSay extends Task {
const salt = cs.callSid;

let credentials = cs.getSpeechCredentials(vendor, 'tts', label);

// override Synthesizer options from config verb
if (cs.synthesizer && cs.synthesizer.options) {
this.options = cs.synthesizer.options;
}

/* parse Nuance voices into name and model */
let model;
if (vendor === 'nuance' && voice) {
Expand Down
38 changes: 20 additions & 18 deletions lib/tasks/transcribe.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,13 @@ class TaskTranscribe extends SttTask {
stopTranscription = true;
this.ep.stopTranscription({
vendor: this.vendor,
bugname: this.bugname
bugname: this.ep.transcribe_bugname
})
.catch((err) => this.logger.info(err, 'Error TaskTranscribe:kill'));
}
if (this.separateRecognitionPerChannel && this.ep2 && this.ep2.connected) {
stopTranscription = true;
this.ep2.stopTranscription({vendor: this.vendor})
this.ep2.stopTranscription({vendor: this.vendor, bugname: this.ep2.transcribe_bugname})
.catch((err) => this.logger.info(err, 'Error TaskTranscribe:kill'));
}

Expand Down Expand Up @@ -132,6 +132,7 @@ class TaskTranscribe extends SttTask {
async _setSpeechHandlers(cs, ep, channel) {
if (this[`_speechHandlersSet_${channel}`]) return;
this[`_speechHandlersSet_${channel}`] = true;
let bugname;

/* some special deepgram logic */
if (this.vendor === 'deepgram') {
Expand All @@ -141,7 +142,7 @@ class TaskTranscribe extends SttTask {
const opts = this.setChannelVarsForStt(this, this.sttCredentials, this.data.recognizer);
switch (this.vendor) {
case 'google':
this.bugname = `${this.bugname_prefix}google_transcribe`;
bugname = `${this.bugname_prefix}google_transcribe_${channel}`;
this.addCustomEventListener(ep, GoogleTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep, GoogleTranscriptionEvents.NoAudioDetected,
Expand All @@ -152,7 +153,7 @@ class TaskTranscribe extends SttTask {

case 'aws':
case 'polly':
this.bugname = `${this.bugname_prefix}aws_transcribe`;
bugname = `${this.bugname_prefix}aws_transcribe_${channel}`;
this.addCustomEventListener(ep, AwsTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep, AwsTranscriptionEvents.NoAudioDetected,
Expand All @@ -161,19 +162,19 @@ class TaskTranscribe extends SttTask {
this._onMaxDurationExceeded.bind(this, cs, ep, channel));
break;
case 'microsoft':
this.bugname = `${this.bugname_prefix}azure_transcribe`;
bugname = `${this.bugname_prefix}azure_transcribe_${channel}`;
this.addCustomEventListener(ep, AzureTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep, AzureTranscriptionEvents.NoSpeechDetected,
this._onNoAudio.bind(this, cs, ep, channel));
break;
case 'nuance':
this.bugname = `${this.bugname_prefix}nuance_transcribe`;
bugname = `${this.bugname_prefix}nuance_transcribe_${channel}`;
this.addCustomEventListener(ep, NuanceTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
break;
case 'deepgram':
this.bugname = `${this.bugname_prefix}deepgram_transcribe`;
bugname = `${this.bugname_prefix}deepgram_transcribe_${channel}`;
this.addCustomEventListener(ep, DeepgramTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep, DeepgramTranscriptionEvents.Connect,
Expand All @@ -186,12 +187,12 @@ class TaskTranscribe extends SttTask {

break;
case 'soniox':
this.bugname = `${this.bugname_prefix}soniox_transcribe`;
bugname = `${this.bugname_prefix}soniox_transcribe_${channel}`;
this.addCustomEventListener(ep, SonioxTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
break;
case 'cobalt':
this.bugname = `${this.bugname_prefix}cobalt_transcribe`;
bugname = `${this.bugname_prefix}cobalt_transcribe_${channel}`;
this.addCustomEventListener(ep, CobaltTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));

Expand Down Expand Up @@ -221,7 +222,7 @@ class TaskTranscribe extends SttTask {
break;

case 'ibm':
this.bugname = `${this.bugname_prefix}ibm_transcribe`;
bugname = `${this.bugname_prefix}ibm_transcribe_${channel}`;
this.addCustomEventListener(ep, IbmTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep, IbmTranscriptionEvents.Connect,
Expand All @@ -231,13 +232,13 @@ class TaskTranscribe extends SttTask {
break;

case 'nvidia':
this.bugname = `${this.bugname_prefix}nvidia_transcribe`;
bugname = `${this.bugname_prefix}nvidia_transcribe_${channel}`;
this.addCustomEventListener(ep, NvidiaTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
break;

case 'assemblyai':
this.bugname = `${this.bugname_prefix}assemblyai_transcribe`;
bugname = `${this.bugname_prefix}assemblyai_transcribe_${channel}`;
this.addCustomEventListener(ep, AssemblyAiTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep,
Expand All @@ -249,7 +250,7 @@ class TaskTranscribe extends SttTask {

default:
if (this.vendor.startsWith('custom:')) {
this.bugname = `${this.bugname_prefix}${this.vendor}_transcribe`;
bugname = `${this.bugname_prefix}${this.vendor}_transcribe_${channel}`;
this.addCustomEventListener(ep, JambonzTranscriptionEvents.Transcription,
this._onTranscription.bind(this, cs, ep, channel));
this.addCustomEventListener(ep, JambonzTranscriptionEvents.Connect, this._onVendorConnect.bind(this, cs, ep));
Expand All @@ -263,7 +264,8 @@ class TaskTranscribe extends SttTask {
throw new Error(`Invalid vendor ${this.vendor}`);
}
}

// save dedicated bugname for each endpoint
ep.transcribe_bugname = bugname;
/* common handler for all stt engine errors */
this.addCustomEventListener(ep, JambonzTranscriptionEvents.Error, this._onJambonzError.bind(this, cs, ep));
await ep.set(opts)
Expand All @@ -281,21 +283,21 @@ class TaskTranscribe extends SttTask {

async _transcribe(ep) {
this.logger.debug(
`TaskTranscribe:_transcribe - starting transcription vendor ${this.vendor} bugname ${this.bugname}`);
`TaskTranscribe:_transcribe - starting transcription vendor ${this.vendor} bugname ${ep.transcribe_bugname}`);
await ep.startTranscription({
vendor: this.vendor,
interim: this.interim ? true : false,
locale: this.language,
channels: /*this.separateRecognitionPerChannel ? 2 : */ 1,
bugname: this.bugname,
bugname: ep.transcribe_bugname,
hostport: this.hostport
});
}

async _onTranscription(cs, ep, channel, evt, fsEvent) {
// make sure this is not a transcript from answering machine detection
const bugname = fsEvent.getHeader('media-bugname');
if (bugname && this.bugname !== bugname) return;
if (bugname && ep.transcribe_bugname !== bugname) return;

if (this.vendor === 'ibm' && evt?.state === 'listening') return;

Expand Down Expand Up @@ -443,7 +445,7 @@ class TaskTranscribe extends SttTask {
if (this.isHandledByPrimaryProvider && this.fallbackVendor) {
_ep.stopTranscription({
vendor: this.vendor,
bugname: this.bugname
bugname: _ep.transcribe_bugname
})
.catch((err) => this.logger.error({err}, `Error stopping transcription for primary vendor ${this.vendor}`));
const {updateSpeechCredentialLastUsed} = require('../utils/db-utils')(this.logger, cs.srf);
Expand Down