mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 08:40:38 +00:00
initial changes for openai stt (#1127)
* initial changes for openai stt * wip * wip * wip * wip * wip * make minBargeinWordCount work for openai * wip * wip * wip * wip * wip * wip * wip * wipp * wip * wip * wip * openai stt: support for prompt templates * lint * wip * support openai semantic_vad * wip * transcribe supports openai stt * sip * wip * wip * refactor list of stt vendors that dont need to be restarted after a final transcript * cleanup * wip * cleanup * wip * wip * wip * remove credentials from log * comment
This commit is contained in:
@@ -135,6 +135,15 @@ class CallSession extends Emitter {
|
||||
this.requestor.on('handover', handover.bind(this));
|
||||
this.requestor.on('reconnect-error', this._onSessionReconnectError.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently this is used for openai STT, which has a prompt paramater and
|
||||
* we have an experimental feature where you can send the conversation
|
||||
* history in the prompt
|
||||
*/
|
||||
this.conversationTurns = [];
|
||||
this.on('userSaid', this._onUserSaid.bind(this));
|
||||
this.on('botSaid', this._onBotSaid.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1106,12 +1115,17 @@ class CallSession extends Emitter {
|
||||
};
|
||||
}
|
||||
else if ('speechmatics' === vendor) {
|
||||
this.logger.info({credential}, 'CallSession:getSpeechCredentials - speechmatics credential');
|
||||
return {
|
||||
api_key: credential.api_key,
|
||||
speechmatics_stt_uri: credential.speechmatics_stt_uri,
|
||||
};
|
||||
}
|
||||
else if ('openai' === vendor) {
|
||||
return {
|
||||
api_key: credential.api_key,
|
||||
model_id: credential.model_id,
|
||||
};
|
||||
}
|
||||
else if (vendor.startsWith('custom:')) {
|
||||
return {
|
||||
speech_credential_sid: credential.speech_credential_sid,
|
||||
@@ -1240,7 +1254,7 @@ class CallSession extends Emitter {
|
||||
this.logger.info('CallSession:exec all tasks complete');
|
||||
this._stopping = true;
|
||||
this._onTasksDone();
|
||||
this._clearResources();
|
||||
await this._clearResources();
|
||||
|
||||
|
||||
if (!this.isConfirmCallSession && !this.isSmsCallSession) sessionTracker.remove(this.callSid);
|
||||
@@ -2351,9 +2365,13 @@ Duration=${duration} `
|
||||
/**
|
||||
* Hang up the call and free the media endpoint
|
||||
*/
|
||||
_clearResources() {
|
||||
async _clearResources() {
|
||||
for (const resource of [this.dlg, this.ep, this.ep2]) {
|
||||
if (resource && resource.connected) resource.destroy();
|
||||
try {
|
||||
if (resource && resource.connected) await resource.destroy();
|
||||
} catch (err) {
|
||||
this.logger.info({err}, 'CallSession:_clearResources - error clearing resources');
|
||||
}
|
||||
}
|
||||
this.dlg = null;
|
||||
this.ep = null;
|
||||
@@ -3014,6 +3032,43 @@ Duration=${duration} `
|
||||
this._jambonzHangup('Max Call Duration');
|
||||
this._maxCallDurationTimer = null;
|
||||
}
|
||||
|
||||
_onUserSaid(transcript) {
|
||||
const count = this.conversationTurns.length;
|
||||
if (count === 0 || this.conversationTurns[count - 1].type === 'assistant') {
|
||||
this.conversationTurns.push({
|
||||
type: 'user',
|
||||
text: transcript
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.conversationTurns[count - 1].text += ` ${transcript}`;
|
||||
}
|
||||
}
|
||||
|
||||
_onBotSaid(transcript) {
|
||||
const count = this.conversationTurns.length;
|
||||
if (count === 0 || this.conversationTurns[count - 1].type === 'user') {
|
||||
this.conversationTurns.push({
|
||||
type: 'assistant',
|
||||
text: transcript
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.conversationTurns[count - 1].text += ` ${transcript}`;
|
||||
}
|
||||
}
|
||||
|
||||
getFormattedConversation(numTurns) {
|
||||
const turns = this.conversationTurns.slice(-numTurns);
|
||||
if (turns.length === 0) return null;
|
||||
return turns.map((t) => {
|
||||
if (t.type === 'user') {
|
||||
return `user: ${t.text}`;
|
||||
}
|
||||
return `assistant: ${t.text}`;
|
||||
}).join('\n');
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CallSession;
|
||||
|
||||
@@ -63,7 +63,7 @@ class RestCallSession extends CallSession {
|
||||
this.callInfo.callTerminationBy = terminatedBy;
|
||||
const duration = moment().diff(this.dlg.connectTime, 'seconds');
|
||||
this.emit('callStatusChange', {callStatus: CallStatus.Completed, duration});
|
||||
this.logger.debug(`RestCallSession: called party hung up by ${terminatedBy}`);
|
||||
this.logger.info(`RestCallSession: called party hung up by ${terminatedBy}`);
|
||||
this._callReleased();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user