@onereach/step-voice 7.0.47 → 7.0.48-VOIC1810.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -110,6 +110,8 @@ export default class VoiceAgent extends VoiceStep<Partial<INPUT>> {
110
110
  private findExitByLabel;
111
111
  private validateToolFeedback;
112
112
  private isStepFlagEnabled;
113
+ private isRealtimePipeline;
114
+ private buildGreetingAndCallBehavior;
113
115
  private isValidAgentUrl;
114
116
  private buildAgentServiceConfig;
115
117
  private validatePerToolFeedback;
@@ -79,45 +79,22 @@ class VoiceAgent extends voice_1.default {
79
79
  }
80
80
  });
81
81
  this.triggers.otherwise(async () => {
82
- const { handlers = [], subagents = [], system_instruction = '', developer_messages = [], greeting_message = '', prevent_greeting_interruption = false, idle_detection_enabled = false, idle_timeout_secs = 8, idle_max_retries = 3, idle_prompts = [], idle_goodbye_message = '', dtmf_enabled = false, dtmf_timeout = 2, dtmf_termination_digit = '#', dtmf_prefix = 'DTMF: ', custom_config_enabled = false, agent_url_overwritten = false, tool_feedback, soft_timeout, system_tools, knowledge = [], agent_url = '', mode = '', stt = {}, llm = {}, tts = {}, realtime = {} } = this.data;
82
+ const { handlers = [], subagents = [], system_instruction = '', developer_messages = [], custom_config_enabled = false, agent_url_overwritten = false, system_tools, knowledge = [], agent_url = '', mode = '', stt = {}, llm = {}, tts = {}, realtime = {} } = this.data;
83
83
  if (lodash_1.default.isEmpty(system_instruction)) {
84
84
  this.throwError(new Error('Voice Agent: system instruction is required'));
85
85
  }
86
- const tools = handlers.map(h => this.serializeTool(h));
86
+ const realtimePipeline = this.isRealtimePipeline();
87
+ const tools = handlers.map(handler => this.serializeTool(realtimePipeline ? lodash_1.default.omit(handler, 'feedback') : handler));
87
88
  const config = {
88
89
  system_instruction,
89
90
  developer_messages,
90
- greeting_message,
91
- prevent_greeting_interruption,
92
- tools
91
+ tools,
92
+ ...(realtimePipeline ? {} : this.buildGreetingAndCallBehavior())
93
93
  };
94
94
  const serializedSubagents = this.serializeSubagents(subagents) || [];
95
95
  if (serializedSubagents.length > 0) {
96
96
  config.subagents = serializedSubagents;
97
97
  }
98
- if (this.isStepFlagEnabled(idle_detection_enabled)) {
99
- const timeoutSecs = Number(idle_timeout_secs);
100
- const maxRetries = Number(idle_max_retries);
101
- const prompts = this.normalizeIdlePrompts(idle_prompts);
102
- config.idle_detection = {
103
- enabled: true,
104
- timeout_secs: timeoutSecs,
105
- max_retries: maxRetries,
106
- prompts,
107
- goodbye_message: lodash_1.default.isEmpty(lodash_1.default.trim(idle_goodbye_message)) ? undefined : idle_goodbye_message
108
- };
109
- }
110
- if (this.isStepFlagEnabled(dtmf_enabled)) {
111
- const timeout = Number(dtmf_timeout);
112
- const terminationDigit = String(dtmf_termination_digit || '#');
113
- const prefix = dtmf_prefix == null || dtmf_prefix === '' ? 'DTMF: ' : String(dtmf_prefix);
114
- config.dtmf = {
115
- enabled: true,
116
- timeout: Number.isFinite(timeout) ? timeout : 2,
117
- termination_digit: terminationDigit,
118
- prefix
119
- };
120
- }
121
98
  let agentCustomUrl = '';
122
99
  if (this.isStepFlagEnabled(agent_url_overwritten)) {
123
100
  if (!this.isValidAgentUrl(agent_url)) {
@@ -140,18 +117,6 @@ class VoiceAgent extends voice_1.default {
140
117
  this.throwError(new Error(`Voice Agent: unknown mode "${mode}"`));
141
118
  }
142
119
  }
143
- if (this.isStepFlagEnabled(tool_feedback?.enabled) && tools.length > 0) {
144
- const validatedFeedback = this.validateToolFeedback(tool_feedback);
145
- if (validatedFeedback) {
146
- config.tool_feedback = validatedFeedback;
147
- }
148
- }
149
- if (soft_timeout != null) {
150
- const validatedSoftTimeout = this.validateSoftTimeout(soft_timeout);
151
- if (validatedSoftTimeout) {
152
- config.soft_timeout = validatedSoftTimeout;
153
- }
154
- }
155
120
  if (system_tools != null) {
156
121
  config.system_tools = this.validateSystemTools(system_tools);
157
122
  }
@@ -304,6 +269,46 @@ class VoiceAgent extends voice_1.default {
304
269
  isStepFlagEnabled(value) {
305
270
  return value === true || value === 'true';
306
271
  }
272
+ isRealtimePipeline() {
273
+ return this.isStepFlagEnabled(this.data.custom_config_enabled)
274
+ && this.data.mode === "realtime" /* AgentPipelineMode.REALTIME */;
275
+ }
276
+ buildGreetingAndCallBehavior() {
277
+ const { greeting_message = '', prevent_greeting_interruption = false, idle_detection_enabled = false, idle_timeout_secs = 8, idle_max_retries = 3, idle_prompts = [], idle_goodbye_message = '', dtmf_enabled = false, dtmf_timeout = 2, dtmf_termination_digit = '#', dtmf_prefix = 'DTMF: ', tool_feedback, soft_timeout } = this.data;
278
+ const settings = {
279
+ greeting_message,
280
+ prevent_greeting_interruption
281
+ };
282
+ if (this.isStepFlagEnabled(idle_detection_enabled)) {
283
+ settings.idle_detection = {
284
+ enabled: true,
285
+ timeout_secs: Number(idle_timeout_secs),
286
+ max_retries: Number(idle_max_retries),
287
+ prompts: this.normalizeIdlePrompts(idle_prompts),
288
+ goodbye_message: lodash_1.default.isEmpty(lodash_1.default.trim(idle_goodbye_message)) ? undefined : idle_goodbye_message
289
+ };
290
+ }
291
+ if (this.isStepFlagEnabled(dtmf_enabled)) {
292
+ const timeout = Number(dtmf_timeout);
293
+ settings.dtmf = {
294
+ enabled: true,
295
+ timeout: Number.isFinite(timeout) ? timeout : 2,
296
+ termination_digit: String(dtmf_termination_digit || '#'),
297
+ prefix: dtmf_prefix == null || dtmf_prefix === '' ? 'DTMF: ' : String(dtmf_prefix)
298
+ };
299
+ }
300
+ if (this.isStepFlagEnabled(tool_feedback?.enabled) && !lodash_1.default.isEmpty(this.data.handlers)) {
301
+ const validatedFeedback = this.validateToolFeedback(tool_feedback);
302
+ if (validatedFeedback)
303
+ settings.tool_feedback = validatedFeedback;
304
+ }
305
+ if (soft_timeout != null) {
306
+ const validatedSoftTimeout = this.validateSoftTimeout(soft_timeout);
307
+ if (validatedSoftTimeout)
308
+ settings.soft_timeout = validatedSoftTimeout;
309
+ }
310
+ return settings;
311
+ }
307
312
  isValidAgentUrl(value) {
308
313
  return /^wss?:\/\/([a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+|\[[a-fA-F0-9:]+\])(:\d+)?(\/\S*)?$/.test(value);
309
314
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onereach/step-voice",
3
- "version": "7.0.47",
3
+ "version": "7.0.48-VOIC1810.1",
4
4
  "author": "Roman Zolotarov <roman.zolotarov@onereach.com>",
5
5
  "contributors": [
6
6
  "Roman Zolotarov",