@guava-ai/guava-sdk 0.23.0 → 0.24.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/dist/examples/help-desk.js +22 -8
- package/dist/examples/help-desk.js.map +1 -1
- package/dist/examples/property-insurance.js +14 -3
- package/dist/examples/property-insurance.js.map +1 -1
- package/dist/examples/restaurant-waitlist.js +9 -1
- package/dist/examples/restaurant-waitlist.js.map +1 -1
- package/dist/examples/scheduling-outbound.js +2 -4
- package/dist/examples/scheduling-outbound.js.map +1 -1
- package/dist/src/action-item.d.ts +4 -4
- package/dist/src/action-item.js +1 -1
- package/dist/src/action-item.js.map +1 -1
- package/dist/src/agent.d.ts +18 -6
- package/dist/src/agent.js +269 -121
- package/dist/src/agent.js.map +1 -1
- package/dist/src/call.d.ts +9 -1
- package/dist/src/call.js +24 -1
- package/dist/src/call.js.map +1 -1
- package/dist/src/commands.d.ts +37 -9
- package/dist/src/commands.js +13 -3
- package/dist/src/commands.js.map +1 -1
- package/dist/src/events.d.ts +28 -1
- package/dist/src/events.js +10 -2
- package/dist/src/events.js.map +1 -1
- package/dist/src/health.d.ts +35 -0
- package/dist/src/health.js +99 -0
- package/dist/src/health.js.map +1 -0
- package/dist/src/helpers/index.d.ts +1 -0
- package/dist/src/helpers/index.js +9 -0
- package/dist/src/helpers/index.js.map +1 -0
- package/dist/src/helpers/llm.d.ts +33 -1
- package/dist/src/helpers/llm.js +220 -0
- package/dist/src/helpers/llm.js.map +1 -1
- package/dist/src/helpers/server-rag.d.ts +25 -0
- package/dist/src/helpers/server-rag.js +119 -0
- package/dist/src/helpers/server-rag.js.map +1 -0
- package/dist/src/socket/protocol.d.ts +4 -4
- package/dist/src/testing/mocks.d.ts +6 -0
- package/dist/src/testing/mocks.js +12 -0
- package/dist/src/testing/mocks.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/examples/help-desk.ts +21 -12
- package/examples/property-insurance.ts +15 -3
- package/examples/restaurant-waitlist.ts +10 -1
- package/examples/scheduling-outbound.ts +2 -4
- package/package.json +5 -1
- package/src/action-item.ts +1 -1
- package/src/agent.ts +261 -127
- package/src/call.ts +37 -1
- package/src/commands.ts +16 -2
- package/src/events.ts +11 -1
- package/src/health.ts +120 -0
- package/src/helpers/index.ts +2 -0
- package/src/helpers/llm.ts +178 -1
- package/src/helpers/server-rag.ts +132 -0
- package/src/testing/mocks.ts +17 -0
- package/src/version.ts +1 -1
|
@@ -36,23 +36,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.agent = void 0;
|
|
37
37
|
exports.run = run;
|
|
38
38
|
const guava = __importStar(require("@guava-ai/guava-sdk"));
|
|
39
|
-
const
|
|
39
|
+
const helpers_1 = require("@guava-ai/guava-sdk/helpers");
|
|
40
|
+
const helpers_2 = require("@guava-ai/guava-sdk/helpers");
|
|
40
41
|
const example_data_1 = require("@guava-ai/guava-sdk/example-data");
|
|
41
|
-
const guava_sdk_1 = require("@guava-ai/guava-sdk");
|
|
42
42
|
exports.agent = new guava.Agent({
|
|
43
43
|
name: "Nova",
|
|
44
44
|
organization: "Clearfield Home & Living",
|
|
45
45
|
purpose: "Answer questions and route callers to the appropriate department.",
|
|
46
46
|
});
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const documentQA = new helpers_1.DocumentQA({
|
|
48
|
+
documents: example_data_1.FURNITURE_RETAILER_QA,
|
|
49
|
+
namespace: "clearfield-home-living-qa",
|
|
50
|
+
});
|
|
51
|
+
const intentRecognizer = new helpers_2.IntentRecognizer([
|
|
52
|
+
"sales",
|
|
53
|
+
"delivery-and-returns",
|
|
54
|
+
"account-management",
|
|
55
|
+
"other",
|
|
56
|
+
]);
|
|
50
57
|
exports.agent.onQuestion(async (_call, question) => {
|
|
51
58
|
return await documentQA.ask(question);
|
|
52
59
|
});
|
|
53
60
|
exports.agent.onActionRequest(async (_call, request) => {
|
|
54
|
-
|
|
55
|
-
return { key };
|
|
61
|
+
return await intentRecognizer.classify(request);
|
|
56
62
|
});
|
|
57
63
|
exports.agent.onAction("sales", async (call) => {
|
|
58
64
|
call.transfer("+15555555555", "Notify the caller that you will be transferring them to the Sales department.");
|
|
@@ -73,6 +79,14 @@ async function run(args) {
|
|
|
73
79
|
else if (args.includes("--phone")) {
|
|
74
80
|
exports.agent.listenPhone(process.env.GUAVA_AGENT_NUMBER);
|
|
75
81
|
}
|
|
82
|
+
else if (args.includes("--sip")) {
|
|
83
|
+
const sipCode = args[args.indexOf("--sip") + 1];
|
|
84
|
+
if (!sipCode) {
|
|
85
|
+
console.error("Error: --sip requires a SIP code argument.");
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
await exports.agent.listenSip(sipCode);
|
|
89
|
+
}
|
|
76
90
|
else if (args.includes("--local")) {
|
|
77
91
|
await exports.agent.callLocal();
|
|
78
92
|
}
|
|
@@ -80,7 +94,7 @@ async function run(args) {
|
|
|
80
94
|
await exports.agent.chat();
|
|
81
95
|
}
|
|
82
96
|
else {
|
|
83
|
-
console.error("Usage: guava-example help-desk --phone | --webrtc | --local | --chat");
|
|
97
|
+
console.error("Usage: guava-example help-desk --phone | --webrtc | --sip | --local | --chat");
|
|
84
98
|
process.exit(1);
|
|
85
99
|
}
|
|
86
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-desk.js","sourceRoot":"","sources":["../../examples/help-desk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"help-desk.js","sourceRoot":"","sources":["../../examples/help-desk.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.run = run;
|
|
37
37
|
const guava = __importStar(require("@guava-ai/guava-sdk"));
|
|
38
|
-
const
|
|
38
|
+
const helpers_1 = require("@guava-ai/guava-sdk/helpers");
|
|
39
39
|
const example_data_1 = require("@guava-ai/guava-sdk/example-data");
|
|
40
40
|
const agent = new guava.Agent({
|
|
41
41
|
organization: "Harper Valley Property Insurance",
|
|
@@ -43,7 +43,10 @@ const agent = new guava.Agent({
|
|
|
43
43
|
});
|
|
44
44
|
// This is a built-in knowledge base helper that we will use for this example.
|
|
45
45
|
// You can use any RAG system you prefer.
|
|
46
|
-
const documentQA = new
|
|
46
|
+
const documentQA = new helpers_1.DocumentQA({
|
|
47
|
+
documents: example_data_1.PROPERTY_INSURANCE_POLICY,
|
|
48
|
+
namespace: "harper-valley-property-insurance",
|
|
49
|
+
});
|
|
47
50
|
// When the Agent is asked a question that it cannot answer, it will invoke the on_question callback.
|
|
48
51
|
agent.onQuestion(async (call, question) => {
|
|
49
52
|
// Forward the Agent's question to the knowledge base and return the answer.
|
|
@@ -57,6 +60,14 @@ async function run(args) {
|
|
|
57
60
|
else if (args.includes("--phone")) {
|
|
58
61
|
agent.listenPhone(process.env.GUAVA_AGENT_NUMBER);
|
|
59
62
|
}
|
|
63
|
+
else if (args.includes("--sip")) {
|
|
64
|
+
const sipCode = args[args.indexOf("--sip") + 1];
|
|
65
|
+
if (!sipCode) {
|
|
66
|
+
console.error("Error: --sip requires a SIP code argument.");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
await agent.listenSip(sipCode);
|
|
70
|
+
}
|
|
60
71
|
else if (args.includes("--local")) {
|
|
61
72
|
await agent.callLocal();
|
|
62
73
|
}
|
|
@@ -64,7 +75,7 @@ async function run(args) {
|
|
|
64
75
|
await agent.chat();
|
|
65
76
|
}
|
|
66
77
|
else {
|
|
67
|
-
console.error("Usage: guava-example property-insurance --phone | --webrtc | --local | --chat");
|
|
78
|
+
console.error("Usage: guava-example property-insurance --phone | --webrtc | --sip | --local | --chat");
|
|
68
79
|
process.exit(1);
|
|
69
80
|
}
|
|
70
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-insurance.js","sourceRoot":"","sources":["../../examples/property-insurance.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"property-insurance.js","sourceRoot":"","sources":["../../examples/property-insurance.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,kBAsBC;AA7CD,2DAA6C;AAC7C,yDAAyD;AACzD,mEAA6E;AAE7E,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,EAAE,kCAAkC;IAChD,OAAO,EAAE,wFAAwF;CAClG,CAAC,CAAC;AAEH,8EAA8E;AAC9E,yCAAyC;AACzC,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC;IAChC,SAAS,EAAE,wCAAyB;IACpC,SAAS,EAAE,kCAAkC;CAC9C,CAAC,CAAC;AAEH,qGAAqG;AACrG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAgB,EAAE,QAAgB,EAAE,EAAE;IAC5D,4EAA4E;IAC5E,2DAA2D;IAC3D,OAAO,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEI,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAmB,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,uFAAuF,CACxF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -75,6 +75,14 @@ async function run(args) {
|
|
|
75
75
|
else if (args.includes("--phone")) {
|
|
76
76
|
agent.listenPhone(process.env.GUAVA_AGENT_NUMBER);
|
|
77
77
|
}
|
|
78
|
+
else if (args.includes("--sip")) {
|
|
79
|
+
const sipCode = args[args.indexOf("--sip") + 1];
|
|
80
|
+
if (!sipCode) {
|
|
81
|
+
console.error("Error: --sip requires a SIP code argument.");
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
await agent.listenSip(sipCode);
|
|
85
|
+
}
|
|
78
86
|
else if (args.includes("--local")) {
|
|
79
87
|
await agent.callLocal();
|
|
80
88
|
}
|
|
@@ -82,7 +90,7 @@ async function run(args) {
|
|
|
82
90
|
await agent.chat();
|
|
83
91
|
}
|
|
84
92
|
else {
|
|
85
|
-
console.error("Usage: guava-example restaurant-waitlist --phone | --webrtc | --local | --chat");
|
|
93
|
+
console.error("Usage: guava-example restaurant-waitlist --phone | --webrtc | --sip | --local | --chat");
|
|
86
94
|
process.exit(1);
|
|
87
95
|
}
|
|
88
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restaurant-waitlist.js","sourceRoot":"","sources":["../../examples/restaurant-waitlist.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,
|
|
1
|
+
{"version":3,"file":"restaurant-waitlist.js","sourceRoot":"","sources":["../../examples/restaurant-waitlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,15 +35,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.run = run;
|
|
37
37
|
const guava = __importStar(require("@guava-ai/guava-sdk"));
|
|
38
|
-
const
|
|
38
|
+
const helpers_1 = require("@guava-ai/guava-sdk/helpers");
|
|
39
39
|
const example_data_1 = require("@guava-ai/guava-sdk/example-data");
|
|
40
40
|
const agent = new guava.Agent({
|
|
41
41
|
organization: "Bright Smile Dental",
|
|
42
42
|
purpose: "You are calling patients to help them schedule a dental appointment",
|
|
43
43
|
});
|
|
44
|
-
const datetimeFilter = new
|
|
45
|
-
sourceList: (0, example_data_1.mockAppointmentsForFuture)(),
|
|
46
|
-
});
|
|
44
|
+
const datetimeFilter = new helpers_1.DatetimeFilter((0, example_data_1.mockAppointmentsForFuture)());
|
|
47
45
|
agent.onCallStart(async (call) => {
|
|
48
46
|
await call.reachPerson(await call.getVariable("patientName"));
|
|
49
47
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling-outbound.js","sourceRoot":"","sources":["../../examples/scheduling-outbound.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"scheduling-outbound.js","sourceRoot":"","sources":["../../examples/scheduling-outbound.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,kBAkBC;AA7DD,2DAA6C;AAC7C,yDAA6D;AAC7D,mEAA6E;AAE7E,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,qEAAqE;CAC/E,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,wBAAc,CAAC,IAAA,wCAAyB,GAAE,CAAC,CAAC;AAEvE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAgB,EAAE,EAAE;IAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAC7D,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,IAAgB,EAAE,OAAe,EAAE,EAAE;IAC9D,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC;YACjB,MAAM,EAAE,sBAAsB;YAC9B,SAAS,EAAE;gBACT,+EAA+E;gBAC/E,KAAK,CAAC,KAAK,CAAC;oBACV,GAAG,EAAE,kBAAkB;oBACvB,SAAS,EAAE,eAAe;oBAC1B,WAAW,EAAE,uCAAuC;oBACpD,UAAU,EAAE,IAAI;iBACjB,CAAC;gBACF,iGAAiG;aAClG;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,cAAc,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEI,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,kBAAkB,CAAC;QAC3E,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAE1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,EAAE;QACxD,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
|
-
export declare const FieldItemType: z.ZodUnion<z.ZodLiteral<"text" | "date" | "
|
|
2
|
+
export declare const FieldItemType: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
3
3
|
export type FieldItemType = z.input<typeof FieldItemType>;
|
|
4
4
|
export type ChoiceGenerator = (query: string) => Promise<[string[], string[]]>;
|
|
5
5
|
export declare const FieldItem: z.ZodObject<{
|
|
@@ -7,7 +7,7 @@ export declare const FieldItem: z.ZodObject<{
|
|
|
7
7
|
key: z.ZodString;
|
|
8
8
|
description: z.ZodDefault<z.ZodString>;
|
|
9
9
|
question: z.ZodDefault<z.ZodString>;
|
|
10
|
-
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "
|
|
10
|
+
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
11
11
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
12
12
|
choices: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
13
13
|
choiceGenerator: z.ZodOptional<z.ZodCustom<ChoiceGenerator, ChoiceGenerator>>;
|
|
@@ -19,7 +19,7 @@ export declare const SerializableFieldItem: z.ZodObject<{
|
|
|
19
19
|
key: z.ZodString;
|
|
20
20
|
description: z.ZodDefault<z.ZodString>;
|
|
21
21
|
question: z.ZodDefault<z.ZodString>;
|
|
22
|
-
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "
|
|
22
|
+
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
23
23
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
24
24
|
choices: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
25
25
|
is_search_field: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -42,7 +42,7 @@ export declare const ActionItem: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
42
42
|
key: z.ZodString;
|
|
43
43
|
description: z.ZodDefault<z.ZodString>;
|
|
44
44
|
question: z.ZodDefault<z.ZodString>;
|
|
45
|
-
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "
|
|
45
|
+
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
46
46
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
47
47
|
choices: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
48
48
|
is_search_field: z.ZodDefault<z.ZodBoolean>;
|
package/dist/src/action-item.js
CHANGED
|
@@ -37,7 +37,7 @@ exports.ActionItem = exports.TodoItem = exports.SayItem = exports.SerializableFi
|
|
|
37
37
|
exports.Field = Field;
|
|
38
38
|
exports.Say = Say;
|
|
39
39
|
const z = __importStar(require("zod"));
|
|
40
|
-
exports.FieldItemType = z.union(["text", "date", "
|
|
40
|
+
exports.FieldItemType = z.union(["text", "date", "integer", "digit_sequence", "multiple_choice", "calendar_slot"].map((val) => z.literal(val)));
|
|
41
41
|
exports.FieldItem = z
|
|
42
42
|
.object({
|
|
43
43
|
item_type: z.literal("field"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-item.js","sourceRoot":"","sources":["../../src/action-item.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,sBAqBC;AAED,kBAKC;AA3FD,uCAAyB;AAEZ,QAAA,aAAa,GAAG,CAAC,CAAC,KAAK,CACjC,CAAC,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"action-item.js","sourceRoot":"","sources":["../../src/action-item.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type AgentSpeechEvent, type BotSessionEnded, type CallerSpeechEvent, type DTMFPressedEvent, type EscalateEvent } from "./events.ts";
|
|
2
|
+
import { HealthContext } from "./health.ts";
|
|
1
3
|
import { Call } from "./index.ts";
|
|
2
|
-
import { type CallerSpeechEvent, type AgentSpeechEvent, type BotSessionEnded, type DTMFPressedEvent } from "./events.ts";
|
|
3
4
|
import type { CallInfo } from "./socket/call-info.ts";
|
|
4
5
|
import { TestSession } from "./testing/session.ts";
|
|
5
6
|
export type { CallInfo } from "./socket/call-info.ts";
|
|
@@ -16,11 +17,15 @@ export type InboundConnection = {
|
|
|
16
17
|
agent_number: string;
|
|
17
18
|
} | {
|
|
18
19
|
webrtc_code: string;
|
|
20
|
+
} | {
|
|
21
|
+
sip_code: string;
|
|
19
22
|
};
|
|
20
23
|
export declare class Agent {
|
|
21
24
|
private _name?;
|
|
22
25
|
private _organization?;
|
|
23
26
|
private _purpose?;
|
|
27
|
+
private _voice?;
|
|
28
|
+
private _acceptDtmfForNumbers;
|
|
24
29
|
private _logger;
|
|
25
30
|
private _client;
|
|
26
31
|
private _onCallReceived;
|
|
@@ -34,12 +39,16 @@ export declare class Agent {
|
|
|
34
39
|
private _onActionRequested?;
|
|
35
40
|
private _onActionGeneric?;
|
|
36
41
|
private _onActionHandlers;
|
|
42
|
+
private _onValidateHandlers;
|
|
37
43
|
private _onSessionEnd?;
|
|
44
|
+
private _onEscalate?;
|
|
38
45
|
private _onDtmf?;
|
|
39
46
|
constructor(args?: {
|
|
40
47
|
name?: string;
|
|
41
48
|
organization?: string;
|
|
42
49
|
purpose?: string;
|
|
50
|
+
voice?: string;
|
|
51
|
+
acceptDtmf?: boolean;
|
|
43
52
|
});
|
|
44
53
|
onCallReceived(callback: (callInfo: CallInfo) => Promise<IncomingCallAction>): void;
|
|
45
54
|
onCallStart(callback: (call: Call) => Promise<void>): void;
|
|
@@ -48,11 +57,13 @@ export declare class Agent {
|
|
|
48
57
|
onQuestion(callback: (call: Call, question: string) => Promise<string>): void;
|
|
49
58
|
onTaskComplete(callback: (call: Call, taskId: string) => Promise<void>): void;
|
|
50
59
|
onTaskComplete(taskName: string, callback: (call: Call) => Promise<void>): void;
|
|
60
|
+
onValidate(fieldKey: string, callback: (call: Call, value: unknown) => Promise<true | [false, string]>): void;
|
|
51
61
|
onSearchQuery(fieldKey: string, callback: (call: Call, query: string) => Promise<[string[], string[]]>): void;
|
|
52
|
-
onActionRequest(callback: (call: Call, intentSummary: string) => Promise<SuggestedAction | undefined>): void;
|
|
62
|
+
onActionRequest(callback: (call: Call, intentSummary: string) => Promise<SuggestedAction | SuggestedAction[] | null | undefined>): void;
|
|
53
63
|
onAction(callback: (call: Call, actionKey: string) => Promise<void>): void;
|
|
54
64
|
onAction(actionKey: string, callback: (call: Call) => Promise<void>): void;
|
|
55
65
|
onSessionEnd(callback: (call: Call, event: BotSessionEnded) => Promise<void>): void;
|
|
66
|
+
onEscalate(callback: (call: Call, event: EscalateEvent) => Promise<void>): void;
|
|
56
67
|
onDtmf(callback: (call: Call, event: DTMFPressedEvent) => Promise<void>): void;
|
|
57
68
|
get handlers(): {
|
|
58
69
|
onCallReceived: (callInfo: CallInfo) => Promise<IncomingCallAction>;
|
|
@@ -62,18 +73,19 @@ export declare class Agent {
|
|
|
62
73
|
onQuestion: (call: Call, question: string) => Promise<string>;
|
|
63
74
|
onTaskComplete: (taskId: string, call: Call) => Promise<void>;
|
|
64
75
|
onSearchQuery: (fieldKey: string, call: Call, query: string) => Promise<[string[], string[]]>;
|
|
65
|
-
onActionRequest: (call: Call, intentSummary: string) => Promise<SuggestedAction | undefined>;
|
|
76
|
+
onActionRequest: (call: Call, intentSummary: string) => Promise<SuggestedAction | SuggestedAction[] | null | undefined>;
|
|
66
77
|
onAction: (actionKey: string, call: Call) => Promise<void>;
|
|
67
78
|
onSessionEnd: (call: Call, event: BotSessionEnded) => Promise<void>;
|
|
68
79
|
};
|
|
69
80
|
onReachPerson(callback: (call: Call, availability: string) => Promise<void>): void;
|
|
70
81
|
listenPhone(phoneNumber: string): Promise<void>;
|
|
71
82
|
listenWebrtc(webrtcCode?: string): Promise<void>;
|
|
83
|
+
listenSip(sipCode: string): Promise<void>;
|
|
72
84
|
callLocal(): Promise<void>;
|
|
73
85
|
private _dispatchEvent;
|
|
74
|
-
_initCall(variables?: Record<string, any>): Promise<Call>;
|
|
75
|
-
_attachToCall(callId: string, initialVariables?: Record<string, any>, testSession?: TestSession, route?: string): Promise<void>;
|
|
76
|
-
_listenInbound(conn: InboundConnection): Promise<void>;
|
|
86
|
+
_initCall(callId: string, callInfo: CallInfo, variables?: Record<string, any>): Promise<Call>;
|
|
87
|
+
_attachToCall(callId: string, callInfo: CallInfo, initialVariables?: Record<string, any>, testSession?: TestSession, route?: string): Promise<void>;
|
|
88
|
+
_listenInbound(healthCtx: HealthContext, conn: InboundConnection): Promise<void>;
|
|
77
89
|
private _handleAssignedCall;
|
|
78
90
|
/**
|
|
79
91
|
* @description use the Guava API to call out to a number
|