@fonoster/autopilot 0.7.11 → 0.7.13
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/dist/Autopilot.d.ts +1 -0
- package/dist/Autopilot.js +4 -0
- package/dist/envs.d.ts +1 -0
- package/dist/envs.js +5 -1
- package/dist/handleVoiceRequest.js +4 -0
- package/dist/loadAssistantConfig.js +26 -1
- package/dist/machine/machine.js +26 -18
- package/dist/models/createPromptTemplate.js +2 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +1 -0
- package/package.json +6 -6
package/dist/Autopilot.d.ts
CHANGED
package/dist/Autopilot.js
CHANGED
|
@@ -43,6 +43,10 @@ class Autopilot {
|
|
|
43
43
|
this.setupVoiceStream();
|
|
44
44
|
this.setupSpeechGathering();
|
|
45
45
|
}
|
|
46
|
+
stop() {
|
|
47
|
+
logger.verbose("stopping autopilot");
|
|
48
|
+
this.actor.stop();
|
|
49
|
+
}
|
|
46
50
|
async setupVoiceStream() {
|
|
47
51
|
const { voice, vad } = this.params;
|
|
48
52
|
const stream = await voice.stream();
|
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.OPENAI_API_KEY = exports.GROQ_API_KEY = void 0;
|
|
6
|
+
exports.OPENAI_API_KEY = exports.GROQ_API_KEY = exports.ASSISTANT = void 0;
|
|
7
7
|
/*
|
|
8
8
|
* Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
|
|
9
9
|
* http://github.com/fonoster/fonoster
|
|
@@ -23,9 +23,13 @@ exports.OPENAI_API_KEY = exports.GROQ_API_KEY = void 0;
|
|
|
23
23
|
* limitations under the License.
|
|
24
24
|
*/
|
|
25
25
|
const path_1 = require("path");
|
|
26
|
+
const common_1 = require("@fonoster/common");
|
|
26
27
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
27
28
|
if (process.env.NODE_ENV === "dev") {
|
|
28
29
|
dotenv_1.default.config({ path: (0, path_1.join)(process.cwd(), ".env") });
|
|
29
30
|
}
|
|
31
|
+
(0, common_1.assertEnvsAreSet)(["ASSISTANT"]);
|
|
32
|
+
(0, common_1.assertFileExists)(process.env.ASSISTANT);
|
|
33
|
+
exports.ASSISTANT = process.env.ASSISTANT;
|
|
30
34
|
exports.GROQ_API_KEY = process.env.GROQ_API_KEY;
|
|
31
35
|
exports.OPENAI_API_KEY = process.env.OPENAI_API_KEY;
|
|
@@ -42,6 +42,7 @@ exports.handleVoiceRequest = handleVoiceRequest;
|
|
|
42
42
|
* See the License for the specific language governing permissions and
|
|
43
43
|
* limitations under the License.
|
|
44
44
|
*/
|
|
45
|
+
const common_1 = require("@fonoster/common");
|
|
45
46
|
const logger_1 = require("@fonoster/logger");
|
|
46
47
|
const createLanguageModel_1 = require("./createLanguageModel");
|
|
47
48
|
const loadAssistantConfig_1 = require("./loadAssistantConfig");
|
|
@@ -63,4 +64,7 @@ async function handleVoiceRequest(req, res) {
|
|
|
63
64
|
languageModel
|
|
64
65
|
});
|
|
65
66
|
autopilot.start();
|
|
67
|
+
res.on(common_1.StreamEvent.END, () => {
|
|
68
|
+
autopilot.stop();
|
|
69
|
+
});
|
|
66
70
|
}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.loadAssistantConfig = loadAssistantConfig;
|
|
4
27
|
/*
|
|
@@ -19,8 +42,10 @@ exports.loadAssistantConfig = loadAssistantConfig;
|
|
|
19
42
|
* See the License for the specific language governing permissions and
|
|
20
43
|
* limitations under the License.
|
|
21
44
|
*/
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const envs_1 = require("./envs");
|
|
22
47
|
const _1 = require(".");
|
|
23
48
|
function loadAssistantConfig() {
|
|
24
|
-
const assistantPath =
|
|
49
|
+
const assistantPath = path.resolve(process.cwd(), envs_1.ASSISTANT);
|
|
25
50
|
return (0, _1.loadAndValidateAssistant)(assistantPath);
|
|
26
51
|
}
|
package/dist/machine/machine.js
CHANGED
|
@@ -71,27 +71,35 @@ const machine = (0, xstate_1.setup)({
|
|
|
71
71
|
logger.verbose("response from language model", {
|
|
72
72
|
speechResponseTime
|
|
73
73
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
74
|
+
try {
|
|
75
|
+
if (response.type === "say" && !response.content) {
|
|
76
|
+
logger.verbose("call might already be hung up");
|
|
77
|
+
(0, xstate_1.raise)({ type: "USER_REQUEST_PROCESSED" });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
else if (response.type === "hangup") {
|
|
81
|
+
const message = context.goodbyeMessage;
|
|
82
|
+
await context.voice.say(message);
|
|
83
|
+
await context.voice.hangup();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
else if (response.type === "transfer") {
|
|
87
|
+
const message = context.transferMessage;
|
|
88
|
+
await context.voice.say(message);
|
|
89
|
+
await context.voice.transfer(context.transferPhoneNumber, {
|
|
90
|
+
record: true,
|
|
91
|
+
timeout: 30
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
await context.voice.say(response.content);
|
|
84
96
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
await context.voice.transfer(context.transferPhoneNumber, {
|
|
89
|
-
record: true,
|
|
90
|
-
timeout: 30
|
|
97
|
+
catch (error) {
|
|
98
|
+
logger.error("error processing user request", {
|
|
99
|
+
error
|
|
91
100
|
});
|
|
92
|
-
|
|
101
|
+
await context.voice.say(context.systemErrorMessage);
|
|
93
102
|
}
|
|
94
|
-
await context.voice.say(response.content);
|
|
95
103
|
(0, xstate_1.raise)({ type: "USER_REQUEST_PROCESSED" });
|
|
96
104
|
},
|
|
97
105
|
announceIdleTimeout: async ({ context }) => {
|
|
@@ -25,6 +25,8 @@ function createPromptTemplate(systemTemplate) {
|
|
|
25
25
|
new prompts_1.MessagesPlaceholder("history"),
|
|
26
26
|
prompts_1.SystemMessagePromptTemplate.fromTemplate(systemTemplate),
|
|
27
27
|
prompts_1.SystemMessagePromptTemplate.fromTemplate("{context}"),
|
|
28
|
+
// This is how the model will know the current date
|
|
29
|
+
prompts_1.SystemMessagePromptTemplate.fromTemplate(`current date:${new Date().toISOString()}`),
|
|
28
30
|
prompts_1.HumanMessagePromptTemplate.fromTemplate("{input}")
|
|
29
31
|
]);
|
|
30
32
|
}
|
package/dist/server.d.ts
CHANGED
package/dist/server.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fonoster/autopilot",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.13",
|
|
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",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"generate:readme": "node ../../.scripts/gen-readme.js"
|
|
19
19
|
},
|
|
20
20
|
"bin": {
|
|
21
|
-
"autopilot": "./dist/
|
|
21
|
+
"autopilot": "./dist/server.js"
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
24
|
"dist",
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"url": "https://github.com/fonoster/fonoster/issues"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@fonoster/common": "^0.7.
|
|
39
|
-
"@fonoster/logger": "^0.7.
|
|
40
|
-
"@fonoster/voice": "^0.7.
|
|
38
|
+
"@fonoster/common": "^0.7.13",
|
|
39
|
+
"@fonoster/logger": "^0.7.13",
|
|
40
|
+
"@fonoster/voice": "^0.7.13",
|
|
41
41
|
"@langchain/community": "^0.2.31",
|
|
42
42
|
"@langchain/core": "^0.2.32",
|
|
43
43
|
"@langchain/groq": "^0.0.17",
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"typescript": "^5.5.4"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "3f7651d82bbfc749049bd355386f63f1bec3e0d6"
|
|
58
58
|
}
|