@guava-ai/guava-sdk 0.24.0 → 0.25.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.
Files changed (53) hide show
  1. package/README.md +13 -3
  2. package/bin/example-runner.ts +138 -11
  3. package/dist/bin/example-runner.d.ts +23 -6
  4. package/dist/bin/example-runner.js +112 -9
  5. package/dist/bin/example-runner.js.map +1 -1
  6. package/dist/examples/{example.test.js → agent-testing.test.js} +2 -2
  7. package/dist/examples/agent-testing.test.js.map +1 -0
  8. package/dist/examples/multiple-agents.d.ts +1 -0
  9. package/dist/examples/multiple-agents.js +52 -0
  10. package/dist/examples/multiple-agents.js.map +1 -0
  11. package/dist/examples/scheduling-outbound.js +3 -2
  12. package/dist/examples/scheduling-outbound.js.map +1 -1
  13. package/dist/src/agent.d.ts +13 -5
  14. package/dist/src/agent.js +9 -14
  15. package/dist/src/agent.js.map +1 -1
  16. package/dist/src/call.d.ts +3 -0
  17. package/dist/src/call.js +63 -23
  18. package/dist/src/call.js.map +1 -1
  19. package/dist/src/client.d.ts +3 -0
  20. package/dist/src/client.js +6 -0
  21. package/dist/src/client.js.map +1 -1
  22. package/dist/src/example-utils.d.ts +2 -0
  23. package/dist/src/example-utils.js +115 -0
  24. package/dist/src/example-utils.js.map +1 -0
  25. package/dist/src/helpers/llm.d.ts +10 -0
  26. package/dist/src/helpers/llm.js +54 -27
  27. package/dist/src/helpers/llm.js.map +1 -1
  28. package/dist/src/index.d.ts +3 -1
  29. package/dist/src/index.js +4 -1
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/runner.d.ts +10 -0
  32. package/dist/src/runner.js +101 -0
  33. package/dist/src/runner.js.map +1 -0
  34. package/dist/src/testing/session.d.ts +7 -0
  35. package/dist/src/testing/session.js +3 -22
  36. package/dist/src/testing/session.js.map +1 -1
  37. package/dist/src/version.d.ts +1 -1
  38. package/dist/src/version.js +1 -1
  39. package/examples/{example.test.ts → agent-testing.test.ts} +1 -1
  40. package/examples/multiple-agents.ts +18 -0
  41. package/examples/scheduling-outbound.ts +3 -2
  42. package/package.json +5 -1
  43. package/src/agent.ts +13 -21
  44. package/src/call.ts +78 -23
  45. package/src/client.ts +7 -0
  46. package/src/example-utils.ts +87 -0
  47. package/src/helpers/llm.ts +23 -31
  48. package/src/index.ts +3 -1
  49. package/src/runner.ts +39 -0
  50. package/src/testing/session.ts +2 -22
  51. package/src/version.ts +1 -1
  52. package/dist/examples/example.test.js.map +0 -1
  53. /package/dist/examples/{example.test.d.ts → agent-testing.test.d.ts} +0 -0
@@ -1,4 +1,20 @@
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
+ });
2
18
  var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
19
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
20
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
@@ -33,9 +49,28 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
49
  }
34
50
  return useValue ? value : void 0;
35
51
  };
52
+ var __importStar = (this && this.__importStar) || (function () {
53
+ var ownKeys = function(o) {
54
+ ownKeys = Object.getOwnPropertyNames || function (o) {
55
+ var ar = [];
56
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
57
+ return ar;
58
+ };
59
+ return ownKeys(o);
60
+ };
61
+ return function (mod) {
62
+ if (mod && mod.__esModule) return mod;
63
+ var result = {};
64
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
65
+ __setModuleDefault(result, mod);
66
+ return result;
67
+ };
68
+ })();
36
69
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.IntentRecognizer = exports.DatetimeFilter = exports.DocumentQA = void 0;
70
+ exports.IntentRecognizer = exports.DatetimeFilter = exports._filterSchema = exports.DocumentQA = void 0;
38
71
  exports._generate = _generate;
72
+ exports._makeIntentSchema = _makeIntentSchema;
73
+ const z = __importStar(require("zod"));
39
74
  const client_ts_1 = require("../client.js");
40
75
  const telemetry_ts_1 = require("../telemetry.js");
41
76
  const utils_ts_1 = require("../utils.js");
@@ -109,15 +144,10 @@ let DocumentQA = (() => {
109
144
  return DocumentQA = _classThis;
110
145
  })();
111
146
  exports.DocumentQA = DocumentQA;
112
- const _filterSchema = {
113
- type: "object",
114
- properties: {
115
- matching_appointments: { type: "array", items: { type: "string" } },
116
- other_appointments: { type: "array", items: { type: "string" } },
117
- },
118
- required: ["matching_appointments", "other_appointments"],
119
- additionalProperties: false,
120
- };
147
+ exports._filterSchema = z.object({
148
+ matching_appointments: z.array(z.string()),
149
+ other_appointments: z.array(z.string()),
150
+ });
121
151
  let DatetimeFilter = (() => {
122
152
  let _classDecorators = [telemetry_ts_1.telemetryClient.trackClass()];
123
153
  let _classDescriptor;
@@ -154,8 +184,8 @@ Available slots:
154
184
  ${this._slotsStr}
155
185
 
156
186
  Return at most ${maxResults} items per list.`;
157
- const text = await _generate(this._client, prompt, _filterSchema);
158
- const result = JSON.parse(text);
187
+ const text = await _generate(this._client, prompt, z.toJSONSchema(exports._filterSchema));
188
+ const result = exports._filterSchema.parse(JSON.parse(text));
159
189
  return [
160
190
  result.matching_appointments.slice(0, maxResults),
161
191
  result.other_appointments.slice(0, maxResults),
@@ -165,6 +195,15 @@ Return at most ${maxResults} items per list.`;
165
195
  return DatetimeFilter = _classThis;
166
196
  })();
167
197
  exports.DatetimeFilter = DatetimeFilter;
198
+ function _makeIntentSchema(choiceList) {
199
+ return z
200
+ .object({
201
+ possible_matches: z
202
+ .array(z.enum(choiceList))
203
+ .describe("Choices that could match the caller's intent, ordered by likelihood. Include all plausible matches."),
204
+ })
205
+ .meta({ title: "ChoiceModel" });
206
+ }
168
207
  let IntentRecognizer = (() => {
169
208
  let _classDecorators = [telemetry_ts_1.telemetryClient.trackClass()];
170
209
  let _classDescriptor;
@@ -186,19 +225,7 @@ let IntentRecognizer = (() => {
186
225
  this._client = new client_ts_1.Client();
187
226
  this._intentChoices = intentChoices;
188
227
  const choiceList = Array.isArray(intentChoices) ? intentChoices : Object.keys(intentChoices);
189
- this._schema = {
190
- type: "object",
191
- title: "ChoiceModel",
192
- properties: {
193
- possible_matches: {
194
- type: "array",
195
- items: { type: "string", enum: choiceList },
196
- description: "Choices that could match the caller's intent, ordered by likelihood. Include all plausible matches.",
197
- },
198
- },
199
- required: ["possible_matches"],
200
- additionalProperties: false,
201
- };
228
+ this._schema = _makeIntentSchema(choiceList);
202
229
  }
203
230
  async classify(intent) {
204
231
  const choiceList = Array.isArray(this._intentChoices)
@@ -220,8 +247,8 @@ Rules:
220
247
  .join("\n ");
221
248
  prompt += `\n\nDetailed descriptions of each choice:\n ${descriptionString}`;
222
249
  }
223
- const text = await _generate(this._client, prompt, this._schema);
224
- const keys = JSON.parse(text).possible_matches;
250
+ const text = await _generate(this._client, prompt, z.toJSONSchema(this._schema));
251
+ const { possible_matches: keys } = this._schema.parse(JSON.parse(text));
225
252
  if (!keys.length)
226
253
  return null;
227
254
  if (!Array.isArray(this._intentChoices)) {
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../src/helpers/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../src/helpers/llm.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  export { Client, type InboundConnection } from "./client.ts";
2
+ export { Runner } from "./runner.ts";
2
3
  export type { SmsMessage } from "./sms.ts";
3
4
  export { CallController, type TaskObjective } from "./call-controller.ts";
4
5
  export { Say, Field } from "./action-item.ts";
5
6
  export { Logger, getConsoleLogger, getDefaultLogger } from "./logging.ts";
6
7
  export { Agent, CallInfo } from "./agent.ts";
7
- export { Call } from "./call.ts";
8
+ export { Call, DEFAULT_REACH_PERSON_OUTCOMES } from "./call.ts";
9
+ export type { ReachPersonOutcome } from "./call.ts";
8
10
  export type { BotSessionEnded, TerminationReason, DTMFPressedEvent, DTMFDigit } from "./events.ts";
9
11
  export { TestSession } from "./testing/session.ts";
10
12
  export { MockCall } from "./testing/mocks.ts";
package/dist/src/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockCall = exports.TestSession = exports.Call = exports.Agent = exports.getDefaultLogger = exports.getConsoleLogger = exports.Field = exports.Say = exports.CallController = exports.Client = void 0;
3
+ exports.MockCall = exports.TestSession = exports.DEFAULT_REACH_PERSON_OUTCOMES = exports.Call = exports.Agent = exports.getDefaultLogger = exports.getConsoleLogger = exports.Field = exports.Say = exports.CallController = exports.Runner = exports.Client = void 0;
4
4
  var client_ts_1 = require("./client.js");
5
5
  Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_ts_1.Client; } });
6
+ var runner_ts_1 = require("./runner.js");
7
+ Object.defineProperty(exports, "Runner", { enumerable: true, get: function () { return runner_ts_1.Runner; } });
6
8
  var call_controller_ts_1 = require("./call-controller.js");
7
9
  Object.defineProperty(exports, "CallController", { enumerable: true, get: function () { return call_controller_ts_1.CallController; } });
8
10
  var action_item_ts_1 = require("./action-item.js");
@@ -15,6 +17,7 @@ var agent_ts_1 = require("./agent.js");
15
17
  Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_ts_1.Agent; } });
16
18
  var call_ts_1 = require("./call.js");
17
19
  Object.defineProperty(exports, "Call", { enumerable: true, get: function () { return call_ts_1.Call; } });
20
+ Object.defineProperty(exports, "DEFAULT_REACH_PERSON_OUTCOMES", { enumerable: true, get: function () { return call_ts_1.DEFAULT_REACH_PERSON_OUTCOMES; } });
18
21
  var session_ts_1 = require("./testing/session.js");
19
22
  Object.defineProperty(exports, "TestSession", { enumerable: true, get: function () { return session_ts_1.TestSession; } });
20
23
  var mocks_ts_1 = require("./testing/mocks.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,mGAAA,MAAM,OAAA;AAEf,2DAA0E;AAAjE,oHAAA,cAAc,OAAA;AACvB,mDAA8C;AAArC,qGAAA,GAAG,OAAA;AAAE,uGAAA,KAAK,OAAA;AACnB,2CAA0E;AAAzD,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACnD,uCAA6C;AAApC,iGAAA,KAAK,OAAA;AACd,qCAAiC;AAAxB,+FAAA,IAAI,OAAA;AAEb,mDAAmD;AAA1C,yGAAA,WAAW,OAAA;AACpB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,2DAA0E;AAAjE,oHAAA,cAAc,OAAA;AACvB,mDAA8C;AAArC,qGAAA,GAAG,OAAA;AAAE,uGAAA,KAAK,OAAA;AACnB,2CAA0E;AAAzD,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACnD,uCAA6C;AAApC,iGAAA,KAAK,OAAA;AACd,qCAAgE;AAAvD,+FAAA,IAAI,OAAA;AAAE,wHAAA,6BAA6B,OAAA;AAG5C,mDAAmD;AAA1C,yGAAA,WAAW,OAAA;AACpB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Agent } from "./agent.ts";
2
+ export declare class Runner {
3
+ private _healthCtx;
4
+ private _tasks;
5
+ listenPhone(agent: Agent, agentNumber: string): this;
6
+ listenWebrtc(agent: Agent, webrtcCode?: string): this;
7
+ listenSip(agent: Agent, sipCode: string): this;
8
+ attachCampaign(agent: Agent, campaignCode: string): this;
9
+ run(): Promise<void>;
10
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
3
+ if (value !== null && value !== void 0) {
4
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
5
+ var dispose, inner;
6
+ if (async) {
7
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
8
+ dispose = value[Symbol.asyncDispose];
9
+ }
10
+ if (dispose === void 0) {
11
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
12
+ dispose = value[Symbol.dispose];
13
+ if (async) inner = dispose;
14
+ }
15
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
16
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
17
+ env.stack.push({ value: value, dispose: dispose, async: async });
18
+ }
19
+ else if (async) {
20
+ env.stack.push({ async: true });
21
+ }
22
+ return value;
23
+ };
24
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
25
+ return function (env) {
26
+ function fail(e) {
27
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
28
+ env.hasError = true;
29
+ }
30
+ var r, s = 0;
31
+ function next() {
32
+ while (r = env.stack.pop()) {
33
+ try {
34
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
35
+ if (r.dispose) {
36
+ var result = r.dispose.call(r.value);
37
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
38
+ }
39
+ else s |= 1;
40
+ }
41
+ catch (e) {
42
+ fail(e);
43
+ }
44
+ }
45
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
46
+ if (env.hasError) throw env.error;
47
+ }
48
+ return next();
49
+ };
50
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
51
+ var e = new Error(message);
52
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
53
+ });
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ exports.Runner = void 0;
56
+ const health_ts_1 = require("./health.js");
57
+ class Runner {
58
+ _healthCtx = new health_ts_1.MultiHealthContext();
59
+ _tasks = [];
60
+ listenPhone(agent, agentNumber) {
61
+ const ctx = this._healthCtx.createCtx();
62
+ this._tasks.push(() => agent._listenInbound(ctx, { agent_number: agentNumber }));
63
+ return this;
64
+ }
65
+ listenWebrtc(agent, webrtcCode) {
66
+ const ctx = this._healthCtx.createCtx();
67
+ this._tasks.push(async () => {
68
+ const code = webrtcCode ?? (await agent._client.createWebrtcAgent(3600));
69
+ return agent._listenInbound(ctx, { webrtc_code: code });
70
+ });
71
+ return this;
72
+ }
73
+ listenSip(agent, sipCode) {
74
+ const ctx = this._healthCtx.createCtx();
75
+ this._tasks.push(() => agent._listenInbound(ctx, { sip_code: sipCode }));
76
+ return this;
77
+ }
78
+ attachCampaign(agent, campaignCode) {
79
+ const ctx = this._healthCtx.createCtx();
80
+ this._tasks.push(() => agent._serveCampaign(ctx, campaignCode));
81
+ return this;
82
+ }
83
+ async run() {
84
+ const env_1 = { stack: [], error: void 0, hasError: false };
85
+ try {
86
+ const _server = __addDisposableResource(env_1, await (0, health_ts_1.getHealthServer)(this._healthCtx), true);
87
+ await Promise.all(this._tasks.map((task) => task()));
88
+ }
89
+ catch (e_1) {
90
+ env_1.error = e_1;
91
+ env_1.hasError = true;
92
+ }
93
+ finally {
94
+ const result_1 = __disposeResources(env_1);
95
+ if (result_1)
96
+ await result_1;
97
+ }
98
+ }
99
+ }
100
+ exports.Runner = Runner;
101
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAAkE;AAElE,MAAa,MAAM;IACT,UAAU,GAAG,IAAI,8BAAkB,EAAE,CAAC;IACtC,MAAM,GAA+B,EAAE,CAAC;IAEhD,WAAW,CAAC,KAAY,EAAE,WAAmB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAY,EAAE,UAAmB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,GAAG,UAAU,IAAI,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAY,EAAE,OAAe;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,KAAY,EAAE,YAAoB;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG;;;YACP,MAAY,OAAO,kCAAG,MAAM,IAAA,2BAAe,EAAC,IAAI,CAAC,UAAU,CAAC,OAAA,CAAC;YAC7D,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;;;;;;;;;;KACtD;CACF;AAnCD,wBAmCC"}
@@ -1,6 +1,13 @@
1
1
  import type WebSocket from "ws";
2
+ import * as z from "zod";
2
3
  import { type BotTTS, type InjectASR, TestingEvent } from "./protocol.ts";
3
4
  import type { Client } from "../client.ts";
5
+ export declare const _evalResponseSchema: z.ZodObject<{
6
+ results: z.ZodArray<z.ZodObject<{
7
+ passed: z.ZodBoolean;
8
+ reasoning: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strip>>;
10
+ }, z.core.$strip>;
4
11
  export declare class TestSession {
5
12
  private readonly _ws;
6
13
  private readonly _client;
@@ -33,12 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.TestSession = void 0;
36
+ exports.TestSession = exports._evalResponseSchema = void 0;
37
37
  const node_crypto_1 = require("node:crypto");
38
38
  const z = __importStar(require("zod"));
39
39
  const protocol_ts_1 = require("./protocol.js");
40
40
  const llm_ts_1 = require("../helpers/llm.js");
41
- const _evalResponseSchema = z.object({
41
+ exports._evalResponseSchema = z.object({
42
42
  results: z.array(z.object({
43
43
  passed: z.boolean(),
44
44
  reasoning: z.string().optional(),
@@ -170,26 +170,7 @@ ${transcript || "(empty — no conversation occurred)"}
170
170
 
171
171
  Criteria:
172
172
  ${criteriaList}`;
173
- const evalSchema = {
174
- type: "object",
175
- properties: {
176
- results: {
177
- type: "array",
178
- items: {
179
- type: "object",
180
- properties: {
181
- passed: { type: "boolean" },
182
- reasoning: { type: "string" },
183
- },
184
- required: ["passed"],
185
- additionalProperties: false,
186
- },
187
- },
188
- },
189
- required: ["results"],
190
- additionalProperties: false,
191
- };
192
- const evalResponse = _evalResponseSchema.parse(JSON.parse(await (0, llm_ts_1._generate)(this._client, prompt, evalSchema)));
173
+ const evalResponse = exports._evalResponseSchema.parse(JSON.parse(await (0, llm_ts_1._generate)(this._client, prompt, z.toJSONSchema(exports._evalResponseSchema))));
193
174
  if (evalResponse.results.length !== allCriteria.length) {
194
175
  throw new Error(`Evaluation returned ${evalResponse.results.length} results for ${allCriteria.length} criteria.`);
195
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/testing/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/testing/session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.24.0";
1
+ export declare const SDK_VERSION = "0.25.0";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SDK_VERSION = void 0;
4
- exports.SDK_VERSION = "0.24.0";
4
+ exports.SDK_VERSION = "0.25.0";
5
5
  //# sourceMappingURL=version.js.map
@@ -10,7 +10,7 @@ import { agent } from "@guava-ai/guava-sdk/examples/help-desk";
10
10
  describe("HelpDeskAgent", () => {
11
11
  test("handler unit test - new purchase routes to sales", async () => {
12
12
  const suggestion = await agent.handlers.onActionRequest(new MockCall(), "make a new purchase");
13
- expect(suggestion).toHaveProperty("key", "sales");
13
+ expect(suggestion).toContainEqual({ key: "sales" });
14
14
  });
15
15
 
16
16
  test("new purchase routes to sales", async () => {
@@ -0,0 +1,18 @@
1
+ import * as guava from "@guava-ai/guava-sdk";
2
+
3
+ const agentA = new guava.Agent({
4
+ name: "Grace",
5
+ purpose: "You are a helpful voice agent.",
6
+ });
7
+
8
+ const agentB = new guava.Agent({
9
+ name: "Jordan",
10
+ purpose: "You are a helpful voice agent.",
11
+ });
12
+
13
+ export async function run(_args: string[]) {
14
+ const runner = new guava.Runner();
15
+ runner.listenPhone(agentA, process.env.GUAVA_AGENT_NUMBER!);
16
+ runner.listenWebrtc(agentB);
17
+ await runner.run();
18
+ }
@@ -1,6 +1,7 @@
1
1
  import * as guava from "@guava-ai/guava-sdk";
2
2
  import { DatetimeFilter } from "@guava-ai/guava-sdk/helpers";
3
3
  import { mockAppointmentsForFuture } from "@guava-ai/guava-sdk/example-data";
4
+ import { getAgentNumber } from "@guava-ai/guava-sdk/example-utils";
4
5
 
5
6
  const agent = new guava.Agent({
6
7
  organization: "Bright Smile Dental",
@@ -33,7 +34,7 @@ agent.onReachPerson(async (call: guava.Call, outcome: string) => {
33
34
  ],
34
35
  });
35
36
  } else {
36
- await call.hangup("Apologize for your mistake and hang up the call.");
37
+ await call.hangup("Appropriately end the call.");
37
38
  }
38
39
  });
39
40
 
@@ -56,7 +57,7 @@ export async function run(args: string[]) {
56
57
  process.exit(1);
57
58
  }
58
59
 
59
- agent.callPhone(process.env.GUAVA_AGENT_NUMBER, toNumber, {
60
+ agent.callPhone(await getAgentNumber(), toNumber, {
60
61
  patientName: patientName,
61
62
  });
62
63
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@guava-ai/guava-sdk",
3
3
  "description": "The official TypeScript SDK for building Guava voice agents.",
4
4
  "homepage": "https://docs.goguava.ai/typescript-sdk/",
5
- "version": "0.24.0",
5
+ "version": "0.25.0",
6
6
  "type": "commonjs",
7
7
  "main": "dist/src/index.js",
8
8
  "types": "dist/src/index.d.ts",
@@ -23,6 +23,10 @@
23
23
  "types": "./dist/src/example-data.d.ts",
24
24
  "default": "./dist/src/example-data.js"
25
25
  },
26
+ "./example-utils": {
27
+ "types": "./dist/src/example-utils.d.ts",
28
+ "default": "./dist/src/example-utils.js"
29
+ },
26
30
  "./examples/help-desk": {
27
31
  "types": "./dist/examples/help-desk.d.ts",
28
32
  "default": "./dist/examples/help-desk.js"
package/src/agent.ts CHANGED
@@ -31,9 +31,15 @@ import { telemetryClient } from "./telemetry.ts";
31
31
  import { runChat } from "./testing/chat.ts";
32
32
  import { SessionStarted } from "./testing/protocol.ts";
33
33
  import { TestSession } from "./testing/session.ts";
34
+ import * as z from "zod";
34
35
  import { fetchOrThrow, getBaseUrl } from "./utils.ts";
35
36
  import { runWebrtcHelper } from "./webrtc-helper.ts";
36
37
 
38
+ export const _roleplayActionSchema = z.object({
39
+ action: z.enum(["speak", "hangup"]),
40
+ utterance: z.string().optional(),
41
+ });
42
+
37
43
  export type { CallInfo } from "./socket/call-info.ts";
38
44
 
39
45
  export type IncomingCallAction = { action: "accept" } | { action: "decline" };
@@ -57,7 +63,7 @@ export class Agent {
57
63
  private _acceptDtmfForNumbers: boolean;
58
64
  private _logger: Logger;
59
65
 
60
- private _client: Client = new Client();
66
+ _client: Client = new Client();
61
67
 
62
68
  private _onCallReceived: (callInfo: CallInfo) => Promise<IncomingCallAction> = async () => ({
63
69
  action: "accept",
@@ -572,12 +578,12 @@ export class Agent {
572
578
  * @description use the Guava API to call out to a number
573
579
  */
574
580
  async callPhone(
575
- fromNumber: string | undefined,
581
+ fromNumber: string,
576
582
  toNumber: string,
577
583
  variables: Record<string, any> = {},
578
584
  ): Promise<void> {
579
585
  const url = new URL("v2/create-outbound", this._client.getHttpBase());
580
- if (fromNumber) url.searchParams.set("from_number", fromNumber);
586
+ url.searchParams.set("from_number", fromNumber);
581
587
  url.searchParams.set("to_number", toNumber);
582
588
 
583
589
  const response = await fetchOrThrow(url, {
@@ -681,16 +687,6 @@ export class Agent {
681
687
  roleplayPrompt: string,
682
688
  variables: Record<string, any> = {},
683
689
  ): Promise<TestSession> {
684
- const roleplaySchema = {
685
- type: "object",
686
- properties: {
687
- action: { type: "string", enum: ["speak", "hangup"] },
688
- utterance: { type: "string" },
689
- },
690
- required: ["action"],
691
- additionalProperties: false,
692
- };
693
-
694
690
  return this.test(async (session) => {
695
691
  let snapshotLen = 0;
696
692
  try {
@@ -714,8 +710,8 @@ ${transcript || "(The agent has not spoken yet)"}
714
710
 
715
711
  Choose "speak" and provide your next utterance, or choose "hangup" if the conversation has naturally concluded.`;
716
712
 
717
- const raw = await _generate(this._client, prompt, roleplaySchema);
718
- const action = JSON.parse(raw) as { action: string; utterance?: string };
713
+ const raw = await _generate(this._client, prompt, z.toJSONSchema(_roleplayActionSchema));
714
+ const action = _roleplayActionSchema.parse(JSON.parse(raw));
719
715
 
720
716
  if (action.action === "hangup") {
721
717
  this._logger.info("(Roleplay Session) [caller hangs up]");
@@ -803,7 +799,7 @@ Choose "speak" and provide your next utterance, or choose "hangup" if the conver
803
799
  return cloned;
804
800
  }
805
801
 
806
- private async _serveCampaign(healthCtx: HealthContext, campaignCode: string): Promise<void> {
802
+ async _serveCampaign(healthCtx: HealthContext, campaignCode: string): Promise<void> {
807
803
  try {
808
804
  const campaignUrl = new URL(`v1/campaigns/${campaignCode}`, this._client.getHttpBase());
809
805
  const campaignResponse = await fetchOrThrow(campaignUrl, {
@@ -898,11 +894,7 @@ Choose "speak" and provide your next utterance, or choose "hangup" if the conver
898
894
  }
899
895
 
900
896
  /** @deprecated Use {@link callPhone} instead. */
901
- async outboundPhone(
902
- fromNumber: string | undefined,
903
- toNumber: string,
904
- variables: Record<string, any> = {},
905
- ) {
897
+ async outboundPhone(fromNumber: string, toNumber: string, variables: Record<string, any> = {}) {
906
898
  return this.callPhone(fromNumber, toNumber, variables);
907
899
  }
908
900
  }