@fonoster/autopilot 0.7.6 → 0.7.9

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.
package/README.md CHANGED
@@ -15,7 +15,7 @@ The autopilot module provides a way to create Voice AI applications in Fonoster.
15
15
  * [What's Next](#whats-next)
16
16
 
17
17
  > [!WARNING]
18
- > This is an overview of Fonoster's Autopilot. This module is still under heavy development, and the API is subject to change. This overview implements OpenAI models, but we are working to bring support for other providers like Groq and others.
18
+ > This is an overview of Fonoster's Autopilot. This module is still under heavy development, and the API is subject to change. This overview implements OpenAI and Groq models, but we are working to bring support to additional providers. If you have any suggestions or feedback, please let us know.
19
19
 
20
20
  ## Installation
21
21
 
@@ -7,32 +7,29 @@ declare const conversationSettingsSchema: z.ZodObject<{
7
7
  systemErrorMessage: z.ZodString;
8
8
  initialDtmf: z.ZodNullable<z.ZodOptional<z.ZodString>>;
9
9
  transferOptions: z.ZodNullable<z.ZodOptional<z.ZodObject<{
10
- enabled: z.ZodBoolean;
11
10
  phoneNumber: z.ZodString;
12
11
  message: z.ZodString;
12
+ timeout: z.ZodOptional<z.ZodNumber>;
13
13
  }, "strip", z.ZodTypeAny, {
14
14
  message: string;
15
- enabled: boolean;
16
15
  phoneNumber: string;
16
+ timeout?: number | undefined;
17
17
  }, {
18
18
  message: string;
19
- enabled: boolean;
20
19
  phoneNumber: string;
20
+ timeout?: number | undefined;
21
21
  }>>>;
22
22
  idleOptions: z.ZodNullable<z.ZodOptional<z.ZodObject<{
23
- enabled: z.ZodBoolean;
24
23
  message: z.ZodString;
25
24
  timeout: z.ZodNumber;
26
25
  maxTimeoutCount: z.ZodNumber;
27
26
  }, "strip", z.ZodTypeAny, {
28
27
  message: string;
29
28
  timeout: number;
30
- enabled: boolean;
31
29
  maxTimeoutCount: number;
32
30
  }, {
33
31
  message: string;
34
32
  timeout: number;
35
- enabled: boolean;
36
33
  maxTimeoutCount: number;
37
34
  }>>>;
38
35
  }, "strip", z.ZodTypeAny, {
@@ -43,13 +40,12 @@ declare const conversationSettingsSchema: z.ZodObject<{
43
40
  initialDtmf?: string | null | undefined;
44
41
  transferOptions?: {
45
42
  message: string;
46
- enabled: boolean;
47
43
  phoneNumber: string;
44
+ timeout?: number | undefined;
48
45
  } | null | undefined;
49
46
  idleOptions?: {
50
47
  message: string;
51
48
  timeout: number;
52
- enabled: boolean;
53
49
  maxTimeoutCount: number;
54
50
  } | null | undefined;
55
51
  }, {
@@ -60,13 +56,12 @@ declare const conversationSettingsSchema: z.ZodObject<{
60
56
  initialDtmf?: string | null | undefined;
61
57
  transferOptions?: {
62
58
  message: string;
63
- enabled: boolean;
64
59
  phoneNumber: string;
60
+ timeout?: number | undefined;
65
61
  } | null | undefined;
66
62
  idleOptions?: {
67
63
  message: string;
68
64
  timeout: number;
69
- enabled: boolean;
70
65
  maxTimeoutCount: number;
71
66
  } | null | undefined;
72
67
  }>;
@@ -253,32 +248,29 @@ declare const assistantSchema: z.ZodObject<{
253
248
  systemErrorMessage: z.ZodString;
254
249
  initialDtmf: z.ZodNullable<z.ZodOptional<z.ZodString>>;
255
250
  transferOptions: z.ZodNullable<z.ZodOptional<z.ZodObject<{
256
- enabled: z.ZodBoolean;
257
251
  phoneNumber: z.ZodString;
258
252
  message: z.ZodString;
253
+ timeout: z.ZodOptional<z.ZodNumber>;
259
254
  }, "strip", z.ZodTypeAny, {
260
255
  message: string;
261
- enabled: boolean;
262
256
  phoneNumber: string;
257
+ timeout?: number | undefined;
263
258
  }, {
264
259
  message: string;
265
- enabled: boolean;
266
260
  phoneNumber: string;
261
+ timeout?: number | undefined;
267
262
  }>>>;
268
263
  idleOptions: z.ZodNullable<z.ZodOptional<z.ZodObject<{
269
- enabled: z.ZodBoolean;
270
264
  message: z.ZodString;
271
265
  timeout: z.ZodNumber;
272
266
  maxTimeoutCount: z.ZodNumber;
273
267
  }, "strip", z.ZodTypeAny, {
274
268
  message: string;
275
269
  timeout: number;
276
- enabled: boolean;
277
270
  maxTimeoutCount: number;
278
271
  }, {
279
272
  message: string;
280
273
  timeout: number;
281
- enabled: boolean;
282
274
  maxTimeoutCount: number;
283
275
  }>>>;
284
276
  }, "strip", z.ZodTypeAny, {
@@ -289,13 +281,12 @@ declare const assistantSchema: z.ZodObject<{
289
281
  initialDtmf?: string | null | undefined;
290
282
  transferOptions?: {
291
283
  message: string;
292
- enabled: boolean;
293
284
  phoneNumber: string;
285
+ timeout?: number | undefined;
294
286
  } | null | undefined;
295
287
  idleOptions?: {
296
288
  message: string;
297
289
  timeout: number;
298
- enabled: boolean;
299
290
  maxTimeoutCount: number;
300
291
  } | null | undefined;
301
292
  }, {
@@ -306,13 +297,12 @@ declare const assistantSchema: z.ZodObject<{
306
297
  initialDtmf?: string | null | undefined;
307
298
  transferOptions?: {
308
299
  message: string;
309
- enabled: boolean;
310
300
  phoneNumber: string;
301
+ timeout?: number | undefined;
311
302
  } | null | undefined;
312
303
  idleOptions?: {
313
304
  message: string;
314
305
  timeout: number;
315
- enabled: boolean;
316
306
  maxTimeoutCount: number;
317
307
  } | null | undefined;
318
308
  }>;
@@ -500,13 +490,12 @@ declare const assistantSchema: z.ZodObject<{
500
490
  initialDtmf?: string | null | undefined;
501
491
  transferOptions?: {
502
492
  message: string;
503
- enabled: boolean;
504
493
  phoneNumber: string;
494
+ timeout?: number | undefined;
505
495
  } | null | undefined;
506
496
  idleOptions?: {
507
497
  message: string;
508
498
  timeout: number;
509
- enabled: boolean;
510
499
  maxTimeoutCount: number;
511
500
  } | null | undefined;
512
501
  };
@@ -548,13 +537,12 @@ declare const assistantSchema: z.ZodObject<{
548
537
  initialDtmf?: string | null | undefined;
549
538
  transferOptions?: {
550
539
  message: string;
551
- enabled: boolean;
552
540
  phoneNumber: string;
541
+ timeout?: number | undefined;
553
542
  } | null | undefined;
554
543
  idleOptions?: {
555
544
  message: string;
556
545
  timeout: number;
557
- enabled: boolean;
558
546
  maxTimeoutCount: number;
559
547
  } | null | undefined;
560
548
  };
@@ -30,15 +30,14 @@ const conversationSettingsSchema = zod_1.z.object({
30
30
  initialDtmf: zod_1.z.string().optional().nullable(),
31
31
  transferOptions: zod_1.z
32
32
  .object({
33
- enabled: zod_1.z.boolean(),
34
33
  phoneNumber: zod_1.z.string(),
35
- message: zod_1.z.string()
34
+ message: zod_1.z.string(),
35
+ timeout: zod_1.z.number().optional()
36
36
  })
37
37
  .optional()
38
38
  .nullable(),
39
39
  idleOptions: zod_1.z
40
40
  .object({
41
- enabled: zod_1.z.boolean(),
42
41
  message: zod_1.z.string(),
43
42
  timeout: zod_1.z.number(),
44
43
  maxTimeoutCount: zod_1.z.number()
@@ -60,18 +60,20 @@ const machine = (0, xstate_1.setup)({
60
60
  logger.verbose("called processUserRequest action", {
61
61
  speechBuffer: context.speechBuffer
62
62
  });
63
+ // Stop any speech that might be playing
64
+ await context.voice.stopSpeech();
63
65
  const speech = context.speechBuffer.trim();
64
66
  const languageModel = context.languageModel;
65
67
  const response = await languageModel.invoke(speech);
66
68
  const speechResponseTime = Date.now() - context.speechResponseStartTime;
67
69
  context.speechResponseTime = speechResponseTime;
68
70
  context.speechResponseStartTime = 0;
69
- if (!response) {
71
+ if (response.type === "say" && !response.content) {
70
72
  logger.verbose("call might already be hung up");
71
73
  (0, xstate_1.raise)({ type: "USER_REQUEST_PROCESSED" });
72
74
  return;
73
75
  }
74
- if (response.type === "hangup") {
76
+ else if (response.type === "hangup") {
75
77
  const message = context.goodbyeMessage;
76
78
  await context.voice.say(message);
77
79
  await context.voice.hangup();
@@ -80,7 +82,6 @@ const machine = (0, xstate_1.setup)({
80
82
  else if (response.type === "transfer") {
81
83
  const message = context.transferMessage;
82
84
  await context.voice.say(message);
83
- // TODO: The record and timeout options should be configurable
84
85
  await context.voice.transfer(context.transferPhoneNumber, {
85
86
  record: true,
86
87
  timeout: 30
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fonoster/autopilot",
3
- "version": "0.7.6",
3
+ "version": "0.7.9",
4
4
  "description": "Voice AI for the Fonoster platform",
5
5
  "author": "Pedro Sanders <psanders@fonoster.com>",
6
6
  "homepage": "https://github.com/fonoster/fonoster#readme",
@@ -35,9 +35,9 @@
35
35
  "url": "https://github.com/fonoster/fonoster/issues"
36
36
  },
37
37
  "dependencies": {
38
- "@fonoster/common": "^0.7.5",
39
- "@fonoster/logger": "^0.7.5",
40
- "@fonoster/voice": "^0.7.5",
38
+ "@fonoster/common": "^0.7.9",
39
+ "@fonoster/logger": "^0.7.9",
40
+ "@fonoster/voice": "^0.7.9",
41
41
  "@langchain/community": "^0.2.31",
42
42
  "@langchain/core": "^0.2.31",
43
43
  "@langchain/groq": "^0.0.17",
@@ -54,5 +54,5 @@
54
54
  "devDependencies": {
55
55
  "typescript": "^5.5.4"
56
56
  },
57
- "gitHead": "a02de2f037aaa9bc197e97c147ac9affe6cc69bb"
57
+ "gitHead": "3b16a5ed87b84d03534bb20de4d59d5bbb51a742"
58
58
  }