@fonoster/autopilot 0.16.10 → 0.17.0
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/LICENSE +2 -2
- package/README.md +13 -7
- package/dist/envs.d.ts +1 -0
- package/dist/envs.js +4 -1
- package/dist/handleVoiceRequest.js +10 -6
- package/dist/machine/actions/interruptPlayback.js +1 -1
- package/dist/machine/context.d.ts +1 -1
- package/dist/machine/context.js +1 -1
- package/dist/machine/machine.d.ts +1 -1
- package/dist/machine/setup.d.ts +19 -19
- package/dist/machine/types.d.ts +1 -1
- package/dist/sendConversationEndedEvent.d.ts +4 -3
- package/dist/sendConversationEndedEvent.js +4 -3
- package/dist/voice/Voice.d.ts +2 -2
- package/dist/voice/Voice.js +2 -2
- package/dist/voice/types.d.ts +1 -1
- package/package.json +8 -8
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2026 Fonoster Inc
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -183,13 +183,19 @@ For example:
|
|
|
183
183
|
|
|
184
184
|
Please use the following environment variables to configure the Autopilot:
|
|
185
185
|
|
|
186
|
-
- `
|
|
187
|
-
- `
|
|
188
|
-
- `
|
|
189
|
-
- `
|
|
190
|
-
- `
|
|
191
|
-
- `
|
|
192
|
-
- `
|
|
186
|
+
- `AUTOPILOT_AWS_S3_ACCESS_KEY_ID`: The AWS S3 access key.
|
|
187
|
+
- `AUTOPILOT_AWS_S3_ENDPOINT`: The AWS S3 endpoint.
|
|
188
|
+
- `AUTOPILOT_AWS_S3_REGION`: The AWS S3 region.
|
|
189
|
+
- `AUTOPILOT_AWS_S3_SECRET_ACCESS_KEY`: The AWS S3 secret access key.
|
|
190
|
+
- `AUTOPILOT_CONVERSATION_PROVIDER`: The conversation provider.
|
|
191
|
+
- `AUTOPILOT_KNOWLEDGE_BASE_ENABLED`: Enable knowledge base powered by AWS S3 and Unstructured API.
|
|
192
|
+
- `AUTOPILOT_LOGS_FORMAT`: The logs format.
|
|
193
|
+
- `AUTOPILOT_LOGS_LEVEL`: The logs level.
|
|
194
|
+
- `AUTOPILOT_LOGS_TRANSPORT`: The logs transport.
|
|
195
|
+
- `AUTOPILOT_OPENAI_API_KEY`: The OpenAI API key needed for embeddings support.
|
|
196
|
+
- `AUTOPILOT_UNSTRUCTURED_API_KEY`: The Unstructured API key.
|
|
197
|
+
- `AUTOPILOT_UNSTRUCTURED_API_URL`: The Unstructured API URL. Default is `https://api.unstructured.com`.
|
|
198
|
+
- `AUTOPILOT_RECORDING_BASE_URL`: The recording base URL. Default is `http://localhost:9876/api/recordings`.
|
|
193
199
|
|
|
194
200
|
## What's Next
|
|
195
201
|
|
package/dist/envs.d.ts
CHANGED
package/dist/envs.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SKIP_IDENTITY = exports.OPENAI_API_KEY = exports.INTEGRATIONS_FILE = exports.APISERVER_ENDPOINT = exports.CONVERSATION_PROVIDER_FILE = exports.CONVERSATION_PROVIDER = exports.UNSTRUCTURED_API_URL = exports.UNSTRUCTURED_API_KEY = exports.NODE_ENV = exports.KNOWLEDGE_BASE_ENABLED = exports.AWS_S3_SECRET_ACCESS_KEY = exports.AWS_S3_REGION = exports.AWS_S3_ENDPOINT = exports.AWS_S3_ACCESS_KEY_ID = void 0;
|
|
6
|
+
exports.RECORDING_BASE_URL = exports.SKIP_IDENTITY = exports.OPENAI_API_KEY = exports.INTEGRATIONS_FILE = exports.APISERVER_ENDPOINT = exports.CONVERSATION_PROVIDER_FILE = exports.CONVERSATION_PROVIDER = exports.UNSTRUCTURED_API_URL = exports.UNSTRUCTURED_API_KEY = exports.NODE_ENV = exports.KNOWLEDGE_BASE_ENABLED = exports.AWS_S3_SECRET_ACCESS_KEY = exports.AWS_S3_REGION = exports.AWS_S3_ENDPOINT = exports.AWS_S3_ACCESS_KEY_ID = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Copyright (C) 2025 by Fonoster Inc (https://fonoster.com)
|
|
9
9
|
* http://github.com/fonoster/fonoster
|
|
@@ -54,6 +54,9 @@ exports.INTEGRATIONS_FILE = e.AUTOPILOT_INTEGRATIONS_FILE
|
|
|
54
54
|
: "/opt/fonoster/integrations.json";
|
|
55
55
|
exports.OPENAI_API_KEY = e.AUTOPILOT_OPENAI_API_KEY;
|
|
56
56
|
exports.SKIP_IDENTITY = e.AUTOPILOT_SKIP_IDENTITY === "true";
|
|
57
|
+
exports.RECORDING_BASE_URL = e.AUTOPILOT_RECORDING_BASE_URL
|
|
58
|
+
? e.AUTOPILOT_RECORDING_BASE_URL
|
|
59
|
+
: "http://localhost:9876/api/recordings";
|
|
57
60
|
if (exports.CONVERSATION_PROVIDER.toLocaleLowerCase() !== types_1.ConversationProvider.API &&
|
|
58
61
|
exports.CONVERSATION_PROVIDER.toLocaleLowerCase() !== types_1.ConversationProvider.FILE) {
|
|
59
62
|
console.error("CONVERSATION_PROVIDER must be set to 'api' or 'file'");
|
|
@@ -66,12 +66,13 @@ const sendConversationEndedEvent_1 = require("./sendConversationEndedEvent");
|
|
|
66
66
|
const _1 = __importStar(require("."));
|
|
67
67
|
const logger = (0, logger_1.getLogger)({ service: "autopilot", filePath: __filename });
|
|
68
68
|
async function handleVoiceRequest(req, res) {
|
|
69
|
-
const { accessKeyId, callerNumber, ingressNumber,
|
|
69
|
+
const { accessKeyId, callerNumber, ingressNumber, mediaSessionRef, appRef, callRef, callDirection, metadata } = req;
|
|
70
70
|
logger.verbose("voice request", {
|
|
71
71
|
accessKeyId,
|
|
72
72
|
ingressNumber,
|
|
73
|
-
|
|
73
|
+
mediaSessionRef,
|
|
74
74
|
appRef,
|
|
75
|
+
callRef,
|
|
75
76
|
metadata
|
|
76
77
|
});
|
|
77
78
|
const assistantConfig = envs_1.CONVERSATION_PROVIDER === _1.ConversationProvider.FILE
|
|
@@ -103,7 +104,7 @@ async function handleVoiceRequest(req, res) {
|
|
|
103
104
|
knowledgeBase?.load().then(() => {
|
|
104
105
|
logger.verbose("knowledge base loaded");
|
|
105
106
|
});
|
|
106
|
-
const voice = new _1.VoiceImpl(
|
|
107
|
+
const voice = new _1.VoiceImpl(mediaSessionRef, res);
|
|
107
108
|
const languageModel = (0, createLanguageModel_1.createLanguageModel)({
|
|
108
109
|
voice,
|
|
109
110
|
assistantConfig,
|
|
@@ -138,11 +139,14 @@ async function handleVoiceRequest(req, res) {
|
|
|
138
139
|
})
|
|
139
140
|
.filter(Boolean);
|
|
140
141
|
if (assistantConfig.eventsHook?.url) {
|
|
142
|
+
// Construct recording URL: baseUrl + appRef + mediaSessionRef
|
|
143
|
+
const recordingUrl = `${envs_1.RECORDING_BASE_URL}/${appRef}_${mediaSessionRef}.wav`;
|
|
141
144
|
await (0, sendConversationEndedEvent_1.sendConversationEndedEvent)(assistantConfig.eventsHook, {
|
|
142
|
-
chatHistory: chatHistory,
|
|
143
|
-
phone: ingressNumber,
|
|
144
145
|
appRef,
|
|
145
|
-
|
|
146
|
+
callRef,
|
|
147
|
+
phone: ingressNumber,
|
|
148
|
+
chatHistory: chatHistory,
|
|
149
|
+
recordingUrl
|
|
146
150
|
});
|
|
147
151
|
}
|
|
148
152
|
});
|
|
@@ -23,7 +23,7 @@ const logger_1 = require("@fonoster/logger");
|
|
|
23
23
|
const logger = (0, logger_1.getLogger)({ service: "autopilot", filePath: __filename });
|
|
24
24
|
const interruptPlayback = async ({ context }) => {
|
|
25
25
|
logger.verbose("called the interruptPlayback action", {
|
|
26
|
-
|
|
26
|
+
mediaSessionRef: context.mediaSessionRef
|
|
27
27
|
});
|
|
28
28
|
await context.voice.stopSpeech();
|
|
29
29
|
};
|
package/dist/machine/context.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.context = void 0;
|
|
4
4
|
const context = ({ input }) => ({
|
|
5
|
-
|
|
5
|
+
mediaSessionRef: input.voice.mediaSessionRef,
|
|
6
6
|
voice: input.voice,
|
|
7
7
|
languageModel: input.languageModel,
|
|
8
8
|
speechBuffer: "",
|
|
@@ -71,7 +71,7 @@ declare const machine: import("xstate").StateMachine<any, import("./types").Auto
|
|
|
71
71
|
conversationSettings: import("..").ConversationSettings;
|
|
72
72
|
};
|
|
73
73
|
}) => {
|
|
74
|
-
|
|
74
|
+
mediaSessionRef: string;
|
|
75
75
|
voice: import("..").Voice;
|
|
76
76
|
languageModel: import("..").LanguageModel;
|
|
77
77
|
speechBuffer: string;
|
package/dist/machine/setup.d.ts
CHANGED
|
@@ -147,11 +147,11 @@ declare const machineSetup: {
|
|
|
147
147
|
type: "history";
|
|
148
148
|
} ? [never, never] : T_6 extends infer T_10 ? T_10 extends T_6 ? T_10 extends {
|
|
149
149
|
type: "parallel";
|
|
150
|
-
} ? [T_9, never] : "states" extends keyof T_10["states"][T_9] ? [T_9, never] : [never, T_9] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
150
|
+
} ? [T_9, never] : "states" extends keyof T_10["states"][T_9] ? [T_9, never] : [never, T_9] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_2 in (S & string extends infer T_11 ? T_11 extends S & string ? T_11 extends any ? T_6["states"][T_11] extends {
|
|
151
151
|
type: "history";
|
|
152
152
|
} ? [never, never] : T_6 extends infer T_12 ? T_12 extends T_6 ? T_12 extends {
|
|
153
153
|
type: "parallel";
|
|
154
|
-
} ? [T_11, never] : "states" extends keyof T_12["states"][T_11] ? [T_11, never] : [never, T_11] : never : never : never : never : never)[0]]?: T_6["states"][
|
|
154
|
+
} ? [T_11, never] : "states" extends keyof T_12["states"][T_11] ? [T_11, never] : [never, T_11] : never : never : never : never : never)[0]]?: T_6["states"][K_2] extends infer T_13 ? T_13 extends T_6["states"][K_2] ? T_13 extends {
|
|
155
155
|
states: Record<infer S, any>;
|
|
156
156
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_14 ? T_14 extends S & string ? T_14 extends any ? T_13["states"][T_14] extends {
|
|
157
157
|
type: "history";
|
|
@@ -161,11 +161,11 @@ declare const machineSetup: {
|
|
|
161
161
|
type: "history";
|
|
162
162
|
} ? [never, never] : T_13 extends infer T_17 ? T_17 extends T_13 ? T_17 extends {
|
|
163
163
|
type: "parallel";
|
|
164
|
-
} ? [T_16, never] : "states" extends keyof T_17["states"][T_16] ? [T_16, never] : [never, T_16] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
164
|
+
} ? [T_16, never] : "states" extends keyof T_17["states"][T_16] ? [T_16, never] : [never, T_16] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_3 in (S & string extends infer T_18 ? T_18 extends S & string ? T_18 extends any ? T_13["states"][T_18] extends {
|
|
165
165
|
type: "history";
|
|
166
166
|
} ? [never, never] : T_13 extends infer T_19 ? T_19 extends T_13 ? T_19 extends {
|
|
167
167
|
type: "parallel";
|
|
168
|
-
} ? [T_18, never] : "states" extends keyof T_19["states"][T_18] ? [T_18, never] : [never, T_18] : never : never : never : never : never)[0]]?: T_13["states"][
|
|
168
|
+
} ? [T_18, never] : "states" extends keyof T_19["states"][T_18] ? [T_18, never] : [never, T_18] : never : never : never : never : never)[0]]?: T_13["states"][K_3] extends infer T_20 ? T_20 extends T_13["states"][K_3] ? T_20 extends {
|
|
169
169
|
states: Record<infer S, any>;
|
|
170
170
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_21 ? T_21 extends S & string ? T_21 extends any ? T_20["states"][T_21] extends {
|
|
171
171
|
type: "history";
|
|
@@ -175,11 +175,11 @@ declare const machineSetup: {
|
|
|
175
175
|
type: "history";
|
|
176
176
|
} ? [never, never] : T_20 extends infer T_24 ? T_24 extends T_20 ? T_24 extends {
|
|
177
177
|
type: "parallel";
|
|
178
|
-
} ? [T_23, never] : "states" extends keyof T_24["states"][T_23] ? [T_23, never] : [never, T_23] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
178
|
+
} ? [T_23, never] : "states" extends keyof T_24["states"][T_23] ? [T_23, never] : [never, T_23] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_4 in (S & string extends infer T_25 ? T_25 extends S & string ? T_25 extends any ? T_20["states"][T_25] extends {
|
|
179
179
|
type: "history";
|
|
180
180
|
} ? [never, never] : T_20 extends infer T_26 ? T_26 extends T_20 ? T_26 extends {
|
|
181
181
|
type: "parallel";
|
|
182
|
-
} ? [T_25, never] : "states" extends keyof T_26["states"][T_25] ? [T_25, never] : [never, T_25] : never : never : never : never : never)[0]]?: T_20["states"][
|
|
182
|
+
} ? [T_25, never] : "states" extends keyof T_26["states"][T_25] ? [T_25, never] : [never, T_25] : never : never : never : never : never)[0]]?: T_20["states"][K_4] extends infer T_27 ? T_27 extends T_20["states"][K_4] ? T_27 extends {
|
|
183
183
|
states: Record<infer S, any>;
|
|
184
184
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_28 ? T_28 extends S & string ? T_28 extends any ? T_27["states"][T_28] extends {
|
|
185
185
|
type: "history";
|
|
@@ -189,11 +189,11 @@ declare const machineSetup: {
|
|
|
189
189
|
type: "history";
|
|
190
190
|
} ? [never, never] : T_27 extends infer T_31 ? T_31 extends T_27 ? T_31 extends {
|
|
191
191
|
type: "parallel";
|
|
192
|
-
} ? [T_30, never] : "states" extends keyof T_31["states"][T_30] ? [T_30, never] : [never, T_30] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
192
|
+
} ? [T_30, never] : "states" extends keyof T_31["states"][T_30] ? [T_30, never] : [never, T_30] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_5 in (S & string extends infer T_32 ? T_32 extends S & string ? T_32 extends any ? T_27["states"][T_32] extends {
|
|
193
193
|
type: "history";
|
|
194
194
|
} ? [never, never] : T_27 extends infer T_33 ? T_33 extends T_27 ? T_33 extends {
|
|
195
195
|
type: "parallel";
|
|
196
|
-
} ? [T_32, never] : "states" extends keyof T_33["states"][T_32] ? [T_32, never] : [never, T_32] : never : never : never : never : never)[0]]?: T_27["states"][
|
|
196
|
+
} ? [T_32, never] : "states" extends keyof T_33["states"][T_32] ? [T_32, never] : [never, T_32] : never : never : never : never : never)[0]]?: T_27["states"][K_5] extends infer T_34 ? T_34 extends T_27["states"][K_5] ? T_34 extends {
|
|
197
197
|
states: Record<infer S, any>;
|
|
198
198
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_35 ? T_35 extends S & string ? T_35 extends any ? T_34["states"][T_35] extends {
|
|
199
199
|
type: "history";
|
|
@@ -203,11 +203,11 @@ declare const machineSetup: {
|
|
|
203
203
|
type: "history";
|
|
204
204
|
} ? [never, never] : T_34 extends infer T_38 ? T_38 extends T_34 ? T_38 extends {
|
|
205
205
|
type: "parallel";
|
|
206
|
-
} ? [T_37, never] : "states" extends keyof T_38["states"][T_37] ? [T_37, never] : [never, T_37] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
206
|
+
} ? [T_37, never] : "states" extends keyof T_38["states"][T_37] ? [T_37, never] : [never, T_37] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_6 in (S & string extends infer T_39 ? T_39 extends S & string ? T_39 extends any ? T_34["states"][T_39] extends {
|
|
207
207
|
type: "history";
|
|
208
208
|
} ? [never, never] : T_34 extends infer T_40 ? T_40 extends T_34 ? T_40 extends {
|
|
209
209
|
type: "parallel";
|
|
210
|
-
} ? [T_39, never] : "states" extends keyof T_40["states"][T_39] ? [T_39, never] : [never, T_39] : never : never : never : never : never)[0]]?: T_34["states"][
|
|
210
|
+
} ? [T_39, never] : "states" extends keyof T_40["states"][T_39] ? [T_39, never] : [never, T_39] : never : never : never : never : never)[0]]?: T_34["states"][K_6] extends infer T_41 ? T_41 extends T_34["states"][K_6] ? T_41 extends {
|
|
211
211
|
states: Record<infer S, any>;
|
|
212
212
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_42 ? T_42 extends S & string ? T_42 extends any ? T_41["states"][T_42] extends {
|
|
213
213
|
type: "history";
|
|
@@ -217,11 +217,11 @@ declare const machineSetup: {
|
|
|
217
217
|
type: "history";
|
|
218
218
|
} ? [never, never] : T_41 extends infer T_45 ? T_45 extends T_41 ? T_45 extends {
|
|
219
219
|
type: "parallel";
|
|
220
|
-
} ? [T_44, never] : "states" extends keyof T_45["states"][T_44] ? [T_44, never] : [never, T_44] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
220
|
+
} ? [T_44, never] : "states" extends keyof T_45["states"][T_44] ? [T_44, never] : [never, T_44] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_7 in (S & string extends infer T_46 ? T_46 extends S & string ? T_46 extends any ? T_41["states"][T_46] extends {
|
|
221
221
|
type: "history";
|
|
222
222
|
} ? [never, never] : T_41 extends infer T_47 ? T_47 extends T_41 ? T_47 extends {
|
|
223
223
|
type: "parallel";
|
|
224
|
-
} ? [T_46, never] : "states" extends keyof T_47["states"][T_46] ? [T_46, never] : [never, T_46] : never : never : never : never : never)[0]]?: T_41["states"][
|
|
224
|
+
} ? [T_46, never] : "states" extends keyof T_47["states"][T_46] ? [T_46, never] : [never, T_46] : never : never : never : never : never)[0]]?: T_41["states"][K_7] extends infer T_48 ? T_48 extends T_41["states"][K_7] ? T_48 extends {
|
|
225
225
|
states: Record<infer S, any>;
|
|
226
226
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_49 ? T_49 extends S & string ? T_49 extends any ? T_48["states"][T_49] extends {
|
|
227
227
|
type: "history";
|
|
@@ -231,11 +231,11 @@ declare const machineSetup: {
|
|
|
231
231
|
type: "history";
|
|
232
232
|
} ? [never, never] : T_48 extends infer T_52 ? T_52 extends T_48 ? T_52 extends {
|
|
233
233
|
type: "parallel";
|
|
234
|
-
} ? [T_51, never] : "states" extends keyof T_52["states"][T_51] ? [T_51, never] : [never, T_51] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
234
|
+
} ? [T_51, never] : "states" extends keyof T_52["states"][T_51] ? [T_51, never] : [never, T_51] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_8 in (S & string extends infer T_53 ? T_53 extends S & string ? T_53 extends any ? T_48["states"][T_53] extends {
|
|
235
235
|
type: "history";
|
|
236
236
|
} ? [never, never] : T_48 extends infer T_54 ? T_54 extends T_48 ? T_54 extends {
|
|
237
237
|
type: "parallel";
|
|
238
|
-
} ? [T_53, never] : "states" extends keyof T_54["states"][T_53] ? [T_53, never] : [never, T_53] : never : never : never : never : never)[0]]?: T_48["states"][
|
|
238
|
+
} ? [T_53, never] : "states" extends keyof T_54["states"][T_53] ? [T_53, never] : [never, T_53] : never : never : never : never : never)[0]]?: T_48["states"][K_8] extends infer T_55 ? T_55 extends T_48["states"][K_8] ? T_55 extends {
|
|
239
239
|
states: Record<infer S, any>;
|
|
240
240
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_56 ? T_56 extends S & string ? T_56 extends any ? T_55["states"][T_56] extends {
|
|
241
241
|
type: "history";
|
|
@@ -245,11 +245,11 @@ declare const machineSetup: {
|
|
|
245
245
|
type: "history";
|
|
246
246
|
} ? [never, never] : T_55 extends infer T_59 ? T_59 extends T_55 ? T_59 extends {
|
|
247
247
|
type: "parallel";
|
|
248
|
-
} ? [T_58, never] : "states" extends keyof T_59["states"][T_58] ? [T_58, never] : [never, T_58] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
248
|
+
} ? [T_58, never] : "states" extends keyof T_59["states"][T_58] ? [T_58, never] : [never, T_58] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_9 in (S & string extends infer T_60 ? T_60 extends S & string ? T_60 extends any ? T_55["states"][T_60] extends {
|
|
249
249
|
type: "history";
|
|
250
250
|
} ? [never, never] : T_55 extends infer T_61 ? T_61 extends T_55 ? T_61 extends {
|
|
251
251
|
type: "parallel";
|
|
252
|
-
} ? [T_60, never] : "states" extends keyof T_61["states"][T_60] ? [T_60, never] : [never, T_60] : never : never : never : never : never)[0]]?: T_55["states"][
|
|
252
|
+
} ? [T_60, never] : "states" extends keyof T_61["states"][T_60] ? [T_60, never] : [never, T_60] : never : never : never : never : never)[0]]?: T_55["states"][K_9] extends infer T_62 ? T_62 extends T_55["states"][K_9] ? T_62 extends {
|
|
253
253
|
states: Record<infer S, any>;
|
|
254
254
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_63 ? T_63 extends S & string ? T_63 extends any ? T_62["states"][T_63] extends {
|
|
255
255
|
type: "history";
|
|
@@ -259,11 +259,11 @@ declare const machineSetup: {
|
|
|
259
259
|
type: "history";
|
|
260
260
|
} ? [never, never] : T_62 extends infer T_66 ? T_66 extends T_62 ? T_66 extends {
|
|
261
261
|
type: "parallel";
|
|
262
|
-
} ? [T_65, never] : "states" extends keyof T_66["states"][T_65] ? [T_65, never] : [never, T_65] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
262
|
+
} ? [T_65, never] : "states" extends keyof T_66["states"][T_65] ? [T_65, never] : [never, T_65] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_10 in (S & string extends infer T_67 ? T_67 extends S & string ? T_67 extends any ? T_62["states"][T_67] extends {
|
|
263
263
|
type: "history";
|
|
264
264
|
} ? [never, never] : T_62 extends infer T_68 ? T_68 extends T_62 ? T_68 extends {
|
|
265
265
|
type: "parallel";
|
|
266
|
-
} ? [T_67, never] : "states" extends keyof T_68["states"][T_67] ? [T_67, never] : [never, T_67] : never : never : never : never : never)[0]]?: T_62["states"][
|
|
266
|
+
} ? [T_67, never] : "states" extends keyof T_68["states"][T_67] ? [T_67, never] : [never, T_67] : never : never : never : never : never)[0]]?: T_62["states"][K_10] extends infer T_69 ? T_69 extends T_62["states"][K_10] ? T_69 extends {
|
|
267
267
|
states: Record<infer S, any>;
|
|
268
268
|
} ? import("xstate").IsNever<S> extends true ? {} : (S & string extends infer T_70 ? T_70 extends S & string ? T_70 extends any ? T_69["states"][T_70] extends {
|
|
269
269
|
type: "history";
|
|
@@ -273,7 +273,7 @@ declare const machineSetup: {
|
|
|
273
273
|
type: "history";
|
|
274
274
|
} ? [never, never] : T_69 extends infer T_73 ? T_73 extends T_69 ? T_73 extends {
|
|
275
275
|
type: "parallel";
|
|
276
|
-
} ? [T_72, never] : "states" extends keyof T_73["states"][T_72] ? [T_72, never] : [never, T_72] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [
|
|
276
|
+
} ? [T_72, never] : "states" extends keyof T_73["states"][T_72] ? [T_72, never] : [never, T_72] : never : never : never : never : never)[0]> extends false ? import("xstate").ConditionalRequired<{ [K_11 in (S & string extends infer T_74 ? T_74 extends S & string ? T_74 extends any ? T_69["states"][T_74] extends {
|
|
277
277
|
type: "history";
|
|
278
278
|
} ? [never, never] : T_69 extends infer T_75 ? T_75 extends T_69 ? T_75 extends {
|
|
279
279
|
type: "parallel";
|
package/dist/machine/types.d.ts
CHANGED
|
@@ -23,8 +23,9 @@ export type EventsHook = {
|
|
|
23
23
|
headers?: Record<string, string>;
|
|
24
24
|
};
|
|
25
25
|
export declare function sendConversationEndedEvent(eventsHook: EventsHook, data: {
|
|
26
|
-
chatHistory: Record<string, string>[];
|
|
27
|
-
phone: string;
|
|
28
26
|
appRef: string;
|
|
29
|
-
|
|
27
|
+
callRef: string;
|
|
28
|
+
phone: string;
|
|
29
|
+
chatHistory: Record<string, string>[];
|
|
30
|
+
recordingUrl: string;
|
|
30
31
|
}): Promise<void>;
|
|
@@ -23,7 +23,7 @@ const common_1 = require("@fonoster/common");
|
|
|
23
23
|
const logger_1 = require("@fonoster/logger");
|
|
24
24
|
const logger = (0, logger_1.getLogger)({ service: "autopilot", filePath: __filename });
|
|
25
25
|
async function sendConversationEndedEvent(eventsHook, data) {
|
|
26
|
-
const { chatHistory, phone, appRef,
|
|
26
|
+
const { chatHistory, phone, appRef, callRef, recordingUrl } = data;
|
|
27
27
|
if (!eventsHook?.events.includes(common_1.EventsHookAllowedEvents.CONVERSATION_ENDED) &&
|
|
28
28
|
!eventsHook?.events.includes(common_1.EventsHookAllowedEvents.ALL)) {
|
|
29
29
|
return;
|
|
@@ -32,9 +32,10 @@ async function sendConversationEndedEvent(eventsHook, data) {
|
|
|
32
32
|
const params = {
|
|
33
33
|
eventType: common_1.EventsHookAllowedEvents.CONVERSATION_ENDED,
|
|
34
34
|
appRef,
|
|
35
|
-
|
|
35
|
+
callRef,
|
|
36
36
|
phone,
|
|
37
|
-
chatHistory
|
|
37
|
+
chatHistory,
|
|
38
|
+
...(recordingUrl && { recordingUrl })
|
|
38
39
|
};
|
|
39
40
|
try {
|
|
40
41
|
await (0, common_1.sendHttpRequest)({
|
package/dist/voice/Voice.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Voice } from "./types";
|
|
|
3
3
|
declare class VoiceImpl implements Voice {
|
|
4
4
|
private readonly voice;
|
|
5
5
|
private readonly playbackRef;
|
|
6
|
-
|
|
6
|
+
mediaSessionRef: string;
|
|
7
7
|
sgatherStream: {
|
|
8
8
|
stop: () => Promise<void>;
|
|
9
9
|
onData: (cb: (payload: {
|
|
@@ -15,7 +15,7 @@ declare class VoiceImpl implements Voice {
|
|
|
15
15
|
stop: () => Promise<void>;
|
|
16
16
|
onData: (cb: (chunk: Uint8Array) => void) => void;
|
|
17
17
|
};
|
|
18
|
-
constructor(
|
|
18
|
+
constructor(mediaSessionRef: string, voice: VoiceResponse);
|
|
19
19
|
answer(): Promise<void>;
|
|
20
20
|
hangup(): Promise<void>;
|
|
21
21
|
say(text: string): Promise<void>;
|
package/dist/voice/Voice.js
CHANGED
|
@@ -22,9 +22,9 @@ exports.VoiceImpl = void 0;
|
|
|
22
22
|
const common_1 = require("@fonoster/common");
|
|
23
23
|
const uuid_1 = require("uuid");
|
|
24
24
|
class VoiceImpl {
|
|
25
|
-
constructor(
|
|
25
|
+
constructor(mediaSessionRef, voice) {
|
|
26
26
|
this.voice = voice;
|
|
27
|
-
this.
|
|
27
|
+
this.mediaSessionRef = mediaSessionRef;
|
|
28
28
|
this.playbackRef = (0, uuid_1.v4)();
|
|
29
29
|
}
|
|
30
30
|
async answer() {
|
package/dist/voice/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fonoster/autopilot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
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,11 +35,11 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@aws-sdk/client-s3": "^3.958.0",
|
|
37
37
|
"@dmitryrechkin/json-schema-to-zod": "^1.0.1",
|
|
38
|
-
"@fonoster/common": "^0.
|
|
39
|
-
"@fonoster/logger": "^0.
|
|
40
|
-
"@fonoster/sdk": "^0.
|
|
41
|
-
"@fonoster/types": "^0.
|
|
42
|
-
"@fonoster/voice": "^0.
|
|
38
|
+
"@fonoster/common": "^0.17.0",
|
|
39
|
+
"@fonoster/logger": "^0.17.0",
|
|
40
|
+
"@fonoster/sdk": "^0.17.0",
|
|
41
|
+
"@fonoster/types": "^0.17.0",
|
|
42
|
+
"@fonoster/voice": "^0.17.0",
|
|
43
43
|
"@langchain/anthropic": "^1.3.3",
|
|
44
44
|
"@langchain/community": "^1.1.1",
|
|
45
45
|
"@langchain/core": "^1.1.8",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@langchain/textsplitters": "^1.0.1",
|
|
51
51
|
"cheerio": "^1.1.2",
|
|
52
52
|
"dotenv": "^16.6.1",
|
|
53
|
-
"js-yaml": "^4.1.
|
|
53
|
+
"js-yaml": "^4.1.1",
|
|
54
54
|
"langchain": "^1.2.3",
|
|
55
55
|
"moment": "^2.30.1",
|
|
56
56
|
"onnxruntime-node": "1.21.1",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"xstate": "^5.17.3",
|
|
60
60
|
"zod": "^3.25.76"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "4d1a9afaec6f294184386e009d1a4e292fb3583b"
|
|
63
63
|
}
|