@botonic/plugin-ai-agents 0.43.0-beta.0 → 0.44.0-alpha.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 (65) hide show
  1. package/lib/cjs/agent-builder.d.ts +14 -3
  2. package/lib/cjs/agent-builder.js +43 -13
  3. package/lib/cjs/agent-builder.js.map +1 -1
  4. package/lib/cjs/constants.d.ts +3 -0
  5. package/lib/cjs/constants.js +6 -1
  6. package/lib/cjs/constants.js.map +1 -1
  7. package/lib/cjs/guardrails/input.js +4 -6
  8. package/lib/cjs/guardrails/input.js.map +1 -1
  9. package/lib/cjs/hubtype-api-client.js +97 -106
  10. package/lib/cjs/hubtype-api-client.js.map +1 -1
  11. package/lib/cjs/index.js +63 -62
  12. package/lib/cjs/index.js.map +1 -1
  13. package/lib/cjs/openai.js +19 -5
  14. package/lib/cjs/openai.js.map +1 -1
  15. package/lib/cjs/runner.js +39 -38
  16. package/lib/cjs/runner.js.map +1 -1
  17. package/lib/cjs/tools/retrieve-knowledge.d.ts +8 -1
  18. package/lib/cjs/tools/retrieve-knowledge.js +5 -5
  19. package/lib/cjs/tools/retrieve-knowledge.js.map +1 -1
  20. package/lib/cjs/types.d.ts +2 -3
  21. package/lib/esm/agent-builder.d.ts +14 -3
  22. package/lib/esm/agent-builder.js +57 -23
  23. package/lib/esm/agent-builder.js.map +1 -1
  24. package/lib/esm/constants.d.ts +3 -0
  25. package/lib/esm/constants.js +15 -7
  26. package/lib/esm/constants.js.map +1 -1
  27. package/lib/esm/guardrails/index.js +4 -1
  28. package/lib/esm/guardrails/index.js.map +1 -1
  29. package/lib/esm/guardrails/input.js +11 -9
  30. package/lib/esm/guardrails/input.js.map +1 -1
  31. package/lib/esm/hubtype-api-client.js +105 -110
  32. package/lib/esm/hubtype-api-client.js.map +1 -1
  33. package/lib/esm/index.js +76 -72
  34. package/lib/esm/index.js.map +1 -1
  35. package/lib/esm/openai.js +33 -15
  36. package/lib/esm/openai.js.map +1 -1
  37. package/lib/esm/runner.js +47 -42
  38. package/lib/esm/runner.js.map +1 -1
  39. package/lib/esm/structured-output/carousel.js +15 -12
  40. package/lib/esm/structured-output/carousel.js.map +1 -1
  41. package/lib/esm/structured-output/exit.js +7 -3
  42. package/lib/esm/structured-output/exit.js.map +1 -1
  43. package/lib/esm/structured-output/index.js +10 -7
  44. package/lib/esm/structured-output/index.js.map +1 -1
  45. package/lib/esm/structured-output/text-with-buttons.js +12 -8
  46. package/lib/esm/structured-output/text-with-buttons.js.map +1 -1
  47. package/lib/esm/structured-output/text.js +8 -5
  48. package/lib/esm/structured-output/text.js.map +1 -1
  49. package/lib/esm/tools/index.js +6 -2
  50. package/lib/esm/tools/index.js.map +1 -1
  51. package/lib/esm/tools/retrieve-knowledge.d.ts +8 -1
  52. package/lib/esm/tools/retrieve-knowledge.js +15 -12
  53. package/lib/esm/tools/retrieve-knowledge.js.map +1 -1
  54. package/lib/esm/types.d.ts +2 -3
  55. package/lib/esm/types.js +2 -1
  56. package/package.json +5 -5
  57. package/src/agent-builder.ts +79 -26
  58. package/src/constants.ts +7 -0
  59. package/src/guardrails/input.ts +1 -1
  60. package/src/hubtype-api-client.ts +21 -14
  61. package/src/index.ts +10 -10
  62. package/src/openai.ts +19 -3
  63. package/src/runner.ts +15 -6
  64. package/src/tools/retrieve-knowledge.ts +3 -2
  65. package/src/types.ts +4 -3
package/lib/esm/runner.js CHANGED
@@ -1,54 +1,58 @@
1
- import { __awaiter } from "tslib";
2
- import { InputGuardrailTripwireTriggered, Runner, RunToolCallItem, } from '@openai/agents';
3
- import { retrieveKnowledge } from './tools';
4
- export class AIAgentRunner {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AIAgentRunner = void 0;
4
+ const agents_1 = require("@openai/agents");
5
+ const tools_1 = require("./tools");
6
+ class AIAgentRunner {
5
7
  constructor(agent) {
6
8
  this.agent = agent;
7
9
  }
8
- run(messages, context) {
9
- var _a;
10
- return __awaiter(this, void 0, void 0, function* () {
11
- console.log('Running agent with messages', JSON.stringify(messages, null, 2));
12
- try {
13
- const runner = new Runner({
14
- modelSettings: { temperature: 0 },
15
- });
16
- const result = yield runner.run(this.agent, messages, { context });
17
- const outputMessages = ((_a = result.finalOutput) === null || _a === void 0 ? void 0 : _a.messages) || [];
18
- const hasExit = outputMessages.length === 0 ||
19
- outputMessages.some(message => message.type === 'exit');
20
- const toolsExecuted = this.getToolsExecuted(result, context);
10
+ async run(messages, context) {
11
+ try {
12
+ const runner = new agents_1.Runner({
13
+ modelSettings: { temperature: 0 },
14
+ });
15
+ // Type assertion to bypass strict type checking - the actual return type from runner.run()
16
+ // doesn't perfectly match our interface, but the properties we access are compatible
17
+ const result = (await runner.run(this.agent, messages, {
18
+ context,
19
+ }));
20
+ const outputMessages = result.finalOutput?.messages || [];
21
+ const hasExit = outputMessages.length === 0 ||
22
+ outputMessages.some(message => message.type === 'exit');
23
+ const toolsExecuted = this.getToolsExecuted(result, context);
24
+ return {
25
+ messages: hasExit
26
+ ? []
27
+ : outputMessages.filter(message => message.type !== 'exit'),
28
+ toolsExecuted,
29
+ exit: hasExit,
30
+ memoryLength: messages.length,
31
+ error: false,
32
+ inputGuardrailsTriggered: [],
33
+ outputGuardrailsTriggered: [],
34
+ };
35
+ }
36
+ catch (error) {
37
+ if (error instanceof agents_1.InputGuardrailTripwireTriggered) {
21
38
  return {
22
- messages: hasExit
23
- ? []
24
- : outputMessages.filter(message => message.type !== 'exit'),
25
- toolsExecuted,
26
- exit: hasExit,
27
- memoryLength: messages.length,
39
+ messages: [],
40
+ memoryLength: 0,
41
+ toolsExecuted: [],
42
+ exit: true,
28
43
  error: false,
29
- inputGuardrailsTriggered: [],
44
+ inputGuardrailsTriggered: error.result.output.outputInfo,
30
45
  outputGuardrailsTriggered: [],
31
46
  };
32
47
  }
33
- catch (error) {
34
- if (error instanceof InputGuardrailTripwireTriggered) {
35
- return {
36
- messages: [],
37
- memoryLength: 0,
38
- toolsExecuted: [],
39
- exit: true,
40
- error: false,
41
- inputGuardrailsTriggered: error.result.output.outputInfo,
42
- outputGuardrailsTriggered: [],
43
- };
44
- }
45
- throw error;
46
- }
47
- });
48
+ throw error;
49
+ }
48
50
  }
49
51
  getToolsExecuted(result, context) {
50
- var _a;
51
- return (((_a = result.newItems) === null || _a === void 0 ? void 0 : _a.filter(item => item instanceof RunToolCallItem).map((item) => this.getToolExecutionInfo(item, context)).filter((toolExecution) => toolExecution.toolName !== '')) || []);
52
+ return (result.newItems
53
+ ?.filter(item => item instanceof agents_1.RunToolCallItem)
54
+ .map((item) => this.getToolExecutionInfo(item, context))
55
+ .filter((toolExecution) => toolExecution.toolName !== '') || []);
52
56
  }
53
57
  getToolExecutionInfo(item, context) {
54
58
  if (item.rawItem.type !== 'function_call') {
@@ -59,7 +63,7 @@ export class AIAgentRunner {
59
63
  }
60
64
  const toolName = item.rawItem.name;
61
65
  const toolArguments = this.getSafeToolArguments(item.rawItem.arguments);
62
- if (toolName === retrieveKnowledge.name) {
66
+ if (toolName === tools_1.retrieveKnowledge.name) {
63
67
  return {
64
68
  toolName,
65
69
  toolArguments,
@@ -81,4 +85,5 @@ export class AIAgentRunner {
81
85
  }
82
86
  }
83
87
  }
88
+ exports.AIAgentRunner = AIAgentRunner;
84
89
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,19 @@
1
- import { z } from 'zod';
2
- export const CarouselSchema = z
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CarouselSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.CarouselSchema = zod_1.z
3
6
  .object({
4
- type: z.enum(['carousel']),
5
- content: z.object({
6
- text: z.string().nullable().optional(),
7
- elements: z.array(z.object({
8
- title: z.string(),
9
- subtitle: z.string(),
10
- image: z.string(),
11
- button: z.object({
12
- text: z.string(),
13
- url: z.string().nullable().optional(),
7
+ type: zod_1.z.enum(['carousel']),
8
+ content: zod_1.z.object({
9
+ text: zod_1.z.string().nullable().optional(),
10
+ elements: zod_1.z.array(zod_1.z.object({
11
+ title: zod_1.z.string(),
12
+ subtitle: zod_1.z.string(),
13
+ image: zod_1.z.string(),
14
+ button: zod_1.z.object({
15
+ text: zod_1.z.string(),
16
+ url: zod_1.z.string().nullable().optional(),
14
17
  }),
15
18
  })),
16
19
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../../src/structured-output/carousel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;aACtC,CAAC;SACH,CAAC,CACH;KACF,CAAC;CACH,CAAC;KACD,QAAQ,CAAC,kDAAkD,CAAC,CAAA"}
1
+ {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../../src/structured-output/carousel.ts"],"names":[],"mappings":";;;AACA,6BAAuB;AAIV,QAAA,cAAc,GAAG,OAAC;KAC5B,MAAM,CAAC;IACN,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACtC,QAAQ,EAAE,OAAC,CAAC,KAAK,CACf,OAAC,CAAC,MAAM,CAAC;YACP,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;YACjB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;gBACf,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;gBAChB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;aACtC,CAAC;SACH,CAAC,CACH;KACF,CAAC;CACH,CAAC;KACD,QAAQ,CAAC,kDAAkD,CAAC,CAAA"}
@@ -1,7 +1,11 @@
1
- import z from 'zod';
2
- export const ExitSchema = z
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExitSchema = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const zod_1 = tslib_1.__importDefault(require("zod"));
6
+ exports.ExitSchema = zod_1.default
3
7
  .object({
4
- type: z.enum(['exit']),
8
+ type: zod_1.default.enum(['exit']),
5
9
  })
6
10
  .describe('An exit message. This message should only be used to exit the agent due to out of context or the user asking to exit the conversation');
7
11
  //# sourceMappingURL=exit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exit.js","sourceRoot":"","sources":["../../../src/structured-output/exit.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAA;AAInB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;CACvB,CAAC;KACD,QAAQ,CACP,uIAAuI,CACxI,CAAA"}
1
+ {"version":3,"file":"exit.js","sourceRoot":"","sources":["../../../src/structured-output/exit.ts"],"names":[],"mappings":";;;;AACA,sDAAmB;AAIN,QAAA,UAAU,GAAG,aAAC;KACxB,MAAM,CAAC;IACN,IAAI,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;CACvB,CAAC;KACD,QAAQ,CACP,uIAAuI,CACxI,CAAA"}
@@ -1,11 +1,14 @@
1
- import { z } from 'zod';
2
- import { CarouselSchema } from './carousel';
3
- import { ExitSchema } from './exit';
4
- import { TextSchema } from './text';
5
- import { TextWithButtonsSchema } from './text-with-buttons';
6
- export const OutputSchema = z
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const carousel_1 = require("./carousel");
6
+ const exit_1 = require("./exit");
7
+ const text_1 = require("./text");
8
+ const text_with_buttons_1 = require("./text-with-buttons");
9
+ exports.OutputSchema = zod_1.z
7
10
  .object({
8
- messages: z.array(z.union([TextSchema, TextWithButtonsSchema, CarouselSchema, ExitSchema])),
11
+ messages: zod_1.z.array(zod_1.z.union([text_1.TextSchema, text_with_buttons_1.TextWithButtonsSchema, carousel_1.CarouselSchema, exit_1.ExitSchema])),
9
12
  })
10
13
  .describe('The messages to be sent to the user');
11
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structured-output/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAM3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CACzE;CACF,CAAC;KACD,QAAQ,CAAC,qCAAqC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structured-output/index.ts"],"names":[],"mappings":";;;AACA,6BAAuB;AAEvB,yCAA2C;AAC3C,iCAAmC;AACnC,iCAAmC;AACnC,2DAA2D;AAM9C,QAAA,YAAY,GAAG,OAAC;KAC1B,MAAM,CAAC;IACN,QAAQ,EAAE,OAAC,CAAC,KAAK,CACf,OAAC,CAAC,KAAK,CAAC,CAAC,iBAAU,EAAE,yCAAqB,EAAE,yBAAc,EAAE,iBAAU,CAAC,CAAC,CACzE;CACF,CAAC;KACD,QAAQ,CAAC,qCAAqC,CAAC,CAAA"}
@@ -1,12 +1,16 @@
1
- import z from 'zod';
2
- export const TextWithButtonsSchema = z
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextWithButtonsSchema = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const zod_1 = tslib_1.__importDefault(require("zod"));
6
+ exports.TextWithButtonsSchema = zod_1.default
3
7
  .object({
4
- type: z.enum(['textWithButtons']),
5
- content: z.object({
6
- text: z.string(),
7
- buttons: z.array(z.object({
8
- text: z.string(),
9
- url: z.string().nullable().optional(),
8
+ type: zod_1.default.enum(['textWithButtons']),
9
+ content: zod_1.default.object({
10
+ text: zod_1.default.string(),
11
+ buttons: zod_1.default.array(zod_1.default.object({
12
+ text: zod_1.default.string(),
13
+ url: zod_1.default.string().nullable().optional(),
10
14
  })),
11
15
  }),
12
16
  })
@@ -1 +1 @@
1
- {"version":3,"file":"text-with-buttons.js","sourceRoot":"","sources":["../../../src/structured-output/text-with-buttons.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAA;AAInB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACtC,CAAC,CACH;KACF,CAAC;CACH,CAAC;KACD,QAAQ,CACP,oEAAoE,CACrE,CAAA"}
1
+ {"version":3,"file":"text-with-buttons.js","sourceRoot":"","sources":["../../../src/structured-output/text-with-buttons.ts"],"names":[],"mappings":";;;;AACA,sDAAmB;AAIN,QAAA,qBAAqB,GAAG,aAAC;KACnC,MAAM,CAAC;IACN,IAAI,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACjC,OAAO,EAAE,aAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,aAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,aAAC,CAAC,KAAK,CACd,aAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,aAAC,CAAC,MAAM,EAAE;YAChB,GAAG,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACtC,CAAC,CACH;KACF,CAAC;CACH,CAAC;KACD,QAAQ,CACP,oEAAoE,CACrE,CAAA"}
@@ -1,9 +1,12 @@
1
- import { z } from 'zod';
2
- export const TextSchema = z
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.TextSchema = zod_1.z
3
6
  .object({
4
- type: z.enum(['text']),
5
- content: z.object({
6
- text: z.string(),
7
+ type: zod_1.z.enum(['text']),
8
+ content: zod_1.z.object({
9
+ text: zod_1.z.string(),
7
10
  }),
8
11
  })
9
12
  .describe('A text message');
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/structured-output/text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC;CACH,CAAC;KACD,QAAQ,CAAC,gBAAgB,CAAC,CAAA"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/structured-output/text.ts"],"names":[],"mappings":";;;AACA,6BAAuB;AAIV,QAAA,UAAU,GAAG,OAAC;KACxB,MAAM,CAAC;IACN,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;KACjB,CAAC;CACH,CAAC;KACD,QAAQ,CAAC,gBAAgB,CAAC,CAAA"}
@@ -1,3 +1,7 @@
1
- export { retrieveKnowledge } from './retrieve-knowledge';
2
- export const mandatoryTools = [];
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mandatoryTools = exports.retrieveKnowledge = void 0;
4
+ var retrieve_knowledge_1 = require("./retrieve-knowledge");
5
+ Object.defineProperty(exports, "retrieveKnowledge", { enumerable: true, get: function () { return retrieve_knowledge_1.retrieveKnowledge; } });
6
+ exports.mandatoryTools = [];
3
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,MAAM,CAAC,MAAM,cAAc,GAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":";;;AACA,2DAAwD;AAA/C,uHAAA,iBAAiB,OAAA;AAEb,QAAA,cAAc,GAAW,EAAE,CAAA"}
@@ -1,2 +1,9 @@
1
+ import { z } from 'zod';
1
2
  import { Context } from '../types';
2
- export declare const retrieveKnowledge: import("@openai/agents").FunctionTool<Context<import("@botonic/core").ResolvedPlugins, any>, any, any>;
3
+ export declare const retrieveKnowledge: import("@openai/agents").FunctionTool<Context<import("@botonic/core").ResolvedPlugins, any>, z.ZodObject<{
4
+ query: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ query: string;
7
+ }, {
8
+ query: string;
9
+ }>, string>;
@@ -1,21 +1,24 @@
1
- import { __awaiter } from "tslib";
2
- import { tool } from '@openai/agents';
3
- import { z } from 'zod';
4
- import { HubtypeApiClient } from '../hubtype-api-client';
5
- export const retrieveKnowledge = tool({
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retrieveKnowledge = void 0;
4
+ const agents_1 = require("@openai/agents");
5
+ const zod_1 = require("zod");
6
+ const hubtype_api_client_1 = require("../hubtype-api-client");
7
+ exports.retrieveKnowledge = (0, agents_1.tool)({
6
8
  name: 'retrieve_knowledge',
7
9
  description: 'Consult the knowledge base for information before answering. Use this tool to make sure the information you provide is faithful.',
8
- parameters: z.object({
9
- query: z.string().describe('The query to search the knowledge base for'),
10
+ parameters: zod_1.z.object({
11
+ query: zod_1.z.string().describe('The query to search the knowledge base for'),
10
12
  }),
11
- execute: ({ query }, runContext) => __awaiter(void 0, void 0, void 0, function* () {
12
- const context = runContext === null || runContext === void 0 ? void 0 : runContext.context;
13
+ execute: async (input, runContext) => {
14
+ const context = runContext?.context;
15
+ const query = input.query;
13
16
  if (!context) {
14
17
  throw new Error('Context is required');
15
18
  }
16
19
  const sourceIds = context.sourceIds;
17
- const client = new HubtypeApiClient(context.authToken);
18
- const chunks = yield client.retrieveSimilarChunks(query, sourceIds);
20
+ const client = new hubtype_api_client_1.HubtypeApiClient(context.authToken);
21
+ const chunks = await client.retrieveSimilarChunks(query, sourceIds);
19
22
  const chunkTexts = chunks.map(chunk => chunk.text);
20
23
  context.knowledgeUsed = {
21
24
  query,
@@ -24,6 +27,6 @@ export const retrieveKnowledge = tool({
24
27
  chunkTexts,
25
28
  };
26
29
  return chunkTexts;
27
- }),
30
+ },
28
31
  });
29
32
  //# sourceMappingURL=retrieve-knowledge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retrieve-knowledge.js","sourceRoot":"","sources":["../../../src/tools/retrieve-knowledge.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAoB;IACvD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,CACP,EAAE,KAAK,EAAqB,EAC5B,UAAgC,EACb,EAAE;QACrB,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACvC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACnE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElD,OAAO,CAAC,aAAa,GAAG;YACtB,KAAK;YACL,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,UAAU;SACX,CAAA;QAED,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"retrieve-knowledge.js","sourceRoot":"","sources":["../../../src/tools/retrieve-knowledge.ts"],"names":[],"mappings":";;;AAAA,2CAAiD;AACjD,6BAAuB;AAEvB,8DAAwD;AAG3C,QAAA,iBAAiB,GAAG,IAAA,aAAI,EAAC;IACpC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,KAAK,EACZ,KAAwB,EACxB,UAAgC,EACb,EAAE;QACrB,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,CAAA;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,qCAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACnE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElD,OAAO,CAAC,aAAa,GAAG;YACtB,KAAK;YACL,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,UAAU;SACX,CAAA;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;CACF,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { AgenticOutputMessage, AiAgentArgs, BotContext, GuardrailRule, InferenceResponse, ResolvedPlugins, RunResult } from '@botonic/core';
2
- import { Agent, AgentInputItem, RunContext as OpenAIRunContext, Tool as OpenAITool } from '@openai/agents';
2
+ import { Agent, AgentInputItem, AgentOutputType, RunContext as OpenAIRunContext, Tool as OpenAITool } from '@openai/agents';
3
3
  import { ZodSchema } from 'zod';
4
4
  import { OutputSchema } from './structured-output';
5
5
  export interface Context<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
@@ -24,9 +24,8 @@ export interface Chunk {
24
24
  id: string;
25
25
  text: string;
26
26
  }
27
- export type ContactInfo = Record<string, string>;
28
27
  export type Tool<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = OpenAITool<Context<TPlugins, TExtraData>>;
29
- export type AIAgent<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = Agent<Context<TPlugins, TExtraData>, typeof OutputSchema>;
28
+ export type AIAgent<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = Agent<Context<TPlugins, TExtraData>, AgentOutputType<typeof OutputSchema>>;
30
29
  export type MessageHistoryApiVersion = 'v1' | 'v2';
31
30
  export interface MemoryOptions {
32
31
  maxMessages?: number;
package/lib/esm/types.js CHANGED
@@ -1,2 +1,3 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
2
3
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/plugin-ai-agents",
3
- "version": "0.43.0-beta.0",
3
+ "version": "0.44.0-alpha.0",
4
4
  "main": "./lib/cjs/index.js",
5
5
  "module": "./lib/esm/index.js",
6
6
  "description": "Use AI Agents to generate your contents",
@@ -13,10 +13,10 @@
13
13
  "lint_core": "../../node_modules/.bin/eslint_d --cache --quiet 'src/**/*.ts*'"
14
14
  },
15
15
  "dependencies": {
16
- "@botonic/core": "^0.42.0",
17
- "@openai/agents": "^0.1.11",
18
- "axios": "^1.12.2",
19
- "openai": "^5.23.2",
16
+ "@botonic/core": "^0.44.0-alpha.0",
17
+ "@openai/agents": "^0.3.9",
18
+ "axios": "^1.13.2",
19
+ "openai": "^6.0.0",
20
20
  "uuid": "^10.0.0",
21
21
  "zod": "3.25.76"
22
22
  },
@@ -1,10 +1,29 @@
1
- import { ResolvedPlugins } from '@botonic/core'
2
- import { Agent, InputGuardrail, ModelSettings } from '@openai/agents'
1
+ import { CampaignV2, ContactInfo, ResolvedPlugins } from '@botonic/core'
2
+ import {
3
+ Agent,
4
+ AgentOutputType,
5
+ InputGuardrail,
6
+ ModelSettings,
7
+ } from '@openai/agents'
3
8
 
9
+ import { OPENAI_MODEL, OPENAI_PROVIDER } from './constants'
4
10
  import { createInputGuardrail } from './guardrails'
5
11
  import { OutputSchema } from './structured-output'
6
12
  import { mandatoryTools, retrieveKnowledge } from './tools'
7
- import { AIAgent, ContactInfo, GuardrailRule, Tool } from './types'
13
+ import { AIAgent, Context, GuardrailRule, Tool } from './types'
14
+
15
+ interface AIAgentBuilderOptions<
16
+ TPlugins extends ResolvedPlugins = ResolvedPlugins,
17
+ TExtraData = any,
18
+ > {
19
+ name: string
20
+ instructions: string
21
+ tools: Tool<TPlugins, TExtraData>[]
22
+ campaignContext?: CampaignV2
23
+ contactInfo: ContactInfo[]
24
+ inputGuardrailRules: GuardrailRule[]
25
+ sourceIds: string[]
26
+ }
8
27
 
9
28
  export class AIAgentBuilder<
10
29
  TPlugins extends ResolvedPlugins = ResolvedPlugins,
@@ -15,33 +34,46 @@ export class AIAgentBuilder<
15
34
  private tools: Tool<TPlugins, TExtraData>[]
16
35
  private inputGuardrails: InputGuardrail[]
17
36
 
18
- constructor(
19
- name: string,
20
- instructions: string,
21
- tools: Tool<TPlugins, TExtraData>[],
22
- contactInfo: ContactInfo,
23
- inputGuardrailRules: GuardrailRule[],
24
- sourceIds: string[]
25
- ) {
26
- this.name = name
27
- this.instructions = this.addExtraInstructions(instructions, contactInfo)
28
- this.tools = this.addHubtypeTools(tools, sourceIds)
37
+ constructor(options: AIAgentBuilderOptions<TPlugins, TExtraData>) {
38
+ this.name = options.name
39
+ this.instructions = this.addExtraInstructions(
40
+ options.instructions,
41
+ options.contactInfo,
42
+ options.campaignContext
43
+ )
44
+ this.tools = this.addHubtypeTools(options.tools, options.sourceIds)
29
45
  this.inputGuardrails = []
30
- if (inputGuardrailRules.length > 0) {
31
- const inputGuardrail = createInputGuardrail(inputGuardrailRules)
46
+ if (options.inputGuardrailRules.length > 0) {
47
+ const inputGuardrail = createInputGuardrail(options.inputGuardrailRules)
32
48
  this.inputGuardrails.push(inputGuardrail)
33
49
  }
34
50
  }
35
51
 
36
52
  build(): AIAgent<TPlugins, TExtraData> {
37
- const modelSettings: ModelSettings = {}
53
+ const modelSettings: ModelSettings = {} as ModelSettings
54
+ if (OPENAI_PROVIDER === 'openai') {
55
+ modelSettings.reasoning = { effort: 'none' }
56
+ modelSettings.text = { verbosity: 'medium' }
57
+ }
38
58
 
39
- if (this.tools.includes(retrieveKnowledge)) {
59
+ if (this.tools.includes(retrieveKnowledge) && OPENAI_PROVIDER === 'azure') {
40
60
  modelSettings.toolChoice = retrieveKnowledge.name
41
61
  }
42
62
 
43
- return new Agent({
63
+ // When using standard OpenAI API, we need to specify the model
64
+ // Azure OpenAI uses deployment name instead
65
+ const model = OPENAI_PROVIDER === 'openai' ? OPENAI_MODEL : undefined
66
+
67
+ // TODO: Improve type safety - replace AgentOutputType<any> with AgentOutputType<typeof OutputSchema>
68
+ // Currently using explicit type parameters to avoid type inference issues where Agent constructor
69
+ // infers ZodObject instead of AgentOutputType<typeof OutputSchema>. The explicit type parameters
70
+ // ensure compatibility with AIAgent type definition. Future improvements:
71
+ // 1. Update @openai/agents package to properly infer AgentOutputType from outputType parameter
72
+ // 2. Replace AgentOutputType<any> with AgentOutputType<typeof OutputSchema> once type system allows
73
+ // 3. Consider updating AIAgent type definition if @openai/agents types change significantly
74
+ return new Agent<Context<TPlugins, TExtraData>, AgentOutputType<any>>({
44
75
  name: this.name,
76
+ model,
45
77
  instructions: this.instructions,
46
78
  tools: this.tools,
47
79
  outputType: OutputSchema,
@@ -53,20 +85,34 @@ export class AIAgentBuilder<
53
85
 
54
86
  private addExtraInstructions(
55
87
  initialInstructions: string,
56
- contactInfo: ContactInfo
88
+ contactInfo: ContactInfo[],
89
+ campaignContext?: CampaignV2
57
90
  ): string {
58
- const instructions = `<instructions>\n${initialInstructions}\n</instructions>`
91
+ const instructions = `<instructions>\n${initialInstructions.trim()}\n</instructions>`
59
92
  const metadataInstructions = this.getMetadataInstructions()
60
93
  const contactInfoInstructions = this.getContactInfoInstructions(contactInfo)
94
+ const campaignInstructions = this.getCampaignInstructions(campaignContext)
61
95
  const outputInstructions = this.getOutputInstructions()
62
- return `${instructions}\n\n${metadataInstructions}\n\n${contactInfoInstructions}\n\n${outputInstructions}`
96
+ return `${instructions}\n\n${metadataInstructions}\n\n${contactInfoInstructions}\n\n${campaignInstructions}\n\n${outputInstructions}`
63
97
  }
64
98
 
65
- private getContactInfoInstructions(contactInfo: ContactInfo): string {
66
- const structuredContactInfo = Object.entries(contactInfo)
67
- .map(([key, value]) => `${key}: ${value}`)
99
+ private getContactInfoInstructions(contactInfo: ContactInfo[]): string {
100
+ const structuredContactInfo = contactInfo
101
+ .map(
102
+ info =>
103
+ ` <contact_info>
104
+ <name>${info.name}</name>
105
+ <value>${info.value}</value>
106
+ <type>${info.type}</type>
107
+ ${
108
+ info.description
109
+ ? `<description>${info.description}</description>`
110
+ : ''
111
+ }
112
+ </contact_info>`
113
+ )
68
114
  .join('\n')
69
- return `<contact_info>\n${structuredContactInfo}\n</contact_info>`
115
+ return `<contact_info_fields>\n${structuredContactInfo}</contact_info_fields>`
70
116
  }
71
117
 
72
118
  private getMetadataInstructions(): string {
@@ -74,6 +120,13 @@ export class AIAgentBuilder<
74
120
  return `<metadata>\n${metadata}\n</metadata>`
75
121
  }
76
122
 
123
+ private getCampaignInstructions(campaignContext?: CampaignV2): string {
124
+ if (!campaignContext || !campaignContext.agent_context) {
125
+ return ''
126
+ }
127
+ return `<campaign_context>\n${campaignContext.agent_context}\n</campaign_context>`
128
+ }
129
+
77
130
  private getOutputInstructions(): string {
78
131
  const example = {
79
132
  messages: [
package/src/constants.ts CHANGED
@@ -1,6 +1,13 @@
1
1
  export const HUBTYPE_API_URL =
2
2
  process.env.HUBTYPE_API_URL || 'https://api.hubtype.com'
3
3
 
4
+ // OpenAI Provider Configuration
5
+ export const OPENAI_API_KEY = process.env.OPENAI_API_KEY // pragma: allowlist secret
6
+ export const OPENAI_MODEL = process.env.OPENAI_MODEL || 'gpt-4.1-mini'
7
+ export const OPENAI_PROVIDER: 'openai' | 'azure' =
8
+ (process.env.OPENAI_PROVIDER as 'openai' | 'azure') || 'azure'
9
+
10
+ // Azure OpenAI Configuration
4
11
  export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY // pragma: allowlist secret
5
12
  export const AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE
6
13
  export const AZURE_OPENAI_API_DEPLOYMENT_NAME =
@@ -22,7 +22,7 @@ export function createInputGuardrail(rules: GuardrailRule[]): InputGuardrail {
22
22
  execute: async ({ input, context }) => {
23
23
  const lastMessage = input[input.length - 1] as UserMessageItem
24
24
  const result = await run(agent, [lastMessage], { context })
25
- const finalOutput = result.finalOutput
25
+ const finalOutput = result.finalOutput as Record<string, boolean>
26
26
  if (finalOutput === undefined) {
27
27
  throw new Error('Guardrail agent failed to produce output')
28
28
  }