@botonic/plugin-ai-agents 0.36.0-alpha.2 → 0.36.0-alpha.3

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 (63) hide show
  1. package/README.md +14 -0
  2. package/lib/cjs/ai-agent-client.d.ts +0 -2
  3. package/lib/cjs/ai-agent-client.js +4 -5
  4. package/lib/cjs/ai-agent-client.js.map +1 -1
  5. package/lib/cjs/constants.d.ts +2 -2
  6. package/lib/cjs/constants.js +4 -4
  7. package/lib/cjs/constants.js.map +1 -1
  8. package/lib/cjs/hubtype-api-client.d.ts +7 -0
  9. package/lib/cjs/hubtype-api-client.js +37 -0
  10. package/lib/cjs/hubtype-api-client.js.map +1 -0
  11. package/lib/cjs/hubtype-client.d.ts +1 -1
  12. package/lib/cjs/hubtype-client.js +3 -3
  13. package/lib/cjs/hubtype-client.js.map +1 -1
  14. package/lib/cjs/index.d.ts +3 -1
  15. package/lib/cjs/index.js +19 -12
  16. package/lib/cjs/index.js.map +1 -1
  17. package/lib/cjs/tools/custom.d.ts +3 -0
  18. package/lib/cjs/tools/custom.js +14 -0
  19. package/lib/cjs/tools/custom.js.map +1 -0
  20. package/lib/cjs/{tools.js → tools/default.js} +1 -1
  21. package/lib/cjs/tools/default.js.map +1 -0
  22. package/lib/cjs/types.d.ts +9 -0
  23. package/lib/cjs/utils.d.ts +4 -1
  24. package/lib/cjs/utils.js +6 -2
  25. package/lib/cjs/utils.js.map +1 -1
  26. package/lib/esm/ai-agent-client.d.ts +0 -2
  27. package/lib/esm/ai-agent-client.js +3 -4
  28. package/lib/esm/ai-agent-client.js.map +1 -1
  29. package/lib/esm/constants.d.ts +2 -2
  30. package/lib/esm/constants.js +3 -3
  31. package/lib/esm/constants.js.map +1 -1
  32. package/lib/esm/hubtype-api-client.d.ts +7 -0
  33. package/lib/esm/hubtype-api-client.js +33 -0
  34. package/lib/esm/hubtype-api-client.js.map +1 -0
  35. package/lib/esm/hubtype-client.d.ts +1 -1
  36. package/lib/esm/hubtype-client.js +1 -1
  37. package/lib/esm/hubtype-client.js.map +1 -1
  38. package/lib/esm/index.d.ts +3 -1
  39. package/lib/esm/index.js +20 -13
  40. package/lib/esm/index.js.map +1 -1
  41. package/lib/esm/tools/custom.d.ts +3 -0
  42. package/lib/esm/tools/custom.js +10 -0
  43. package/lib/esm/tools/custom.js.map +1 -0
  44. package/lib/esm/{tools.js → tools/default.js} +1 -1
  45. package/lib/esm/tools/default.js.map +1 -0
  46. package/lib/esm/types.d.ts +9 -0
  47. package/lib/esm/utils.d.ts +4 -1
  48. package/lib/esm/utils.js +5 -1
  49. package/lib/esm/utils.js.map +1 -1
  50. package/package.json +3 -2
  51. package/src/ai-agent-client.ts +3 -7
  52. package/src/constants.ts +5 -4
  53. package/src/hubtype-api-client.ts +43 -0
  54. package/src/hubtype-client.ts +1 -1
  55. package/src/index.ts +30 -13
  56. package/src/tools/custom.ts +14 -0
  57. package/src/{tools.ts → tools/default.ts} +1 -0
  58. package/src/types.ts +11 -0
  59. package/src/utils.ts +6 -2
  60. package/lib/cjs/tools.js.map +0 -1
  61. package/lib/esm/tools.js.map +0 -1
  62. /package/lib/cjs/{tools.d.ts → tools/default.d.ts} +0 -0
  63. /package/lib/esm/{tools.d.ts → tools/default.d.ts} +0 -0
package/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # Botonic Plugin AI Agents
2
+
3
+ ## env variables
4
+
5
+ You need this env variables when deploy a bot that use this plugin
6
+
7
+ .env
8
+
9
+ ```
10
+ AZURE_OPENAI_API_KEY='FAKE_API_KEY' // pragma: allowlist secret
11
+ AZURE_OPENAI_API_BASE='FAKE_API_URL_BASE'
12
+ AZURE_OPENAI_API_DEPLOYMENT_NAME='gpt-4o-mini_p1'
13
+ AZURE_OPENAI_API_VERSION='2024-12-01-preview'
14
+ ```
@@ -3,8 +3,6 @@ import { StructuredTool } from '@langchain/core/tools';
3
3
  import { CompiledStateGraph } from '@langchain/langgraph';
4
4
  import { AgenticInputMessage, AgenticOutputMessage, AiAgentArgs } from './types';
5
5
  export declare class AiAgentClient {
6
- name: string;
7
- instructions: string;
8
6
  agent: CompiledStateGraph<any, any>;
9
7
  constructor(aiAgentArgs: AiAgentArgs, chatModel: BaseChatModel, tools?: StructuredTool[]);
10
8
  runAgent(_messages: AgenticInputMessage[]): Promise<AgenticOutputMessage>;
@@ -4,15 +4,14 @@ exports.AiAgentClient = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const messages_1 = require("@langchain/core/messages");
6
6
  const prebuilt_1 = require("@langchain/langgraph/prebuilt");
7
- const tools_1 = require("./tools");
7
+ const default_1 = require("./tools/default");
8
8
  class AiAgentClient {
9
9
  constructor(aiAgentArgs, chatModel, tools = []) {
10
- this.name = aiAgentArgs.name;
11
- this.instructions = aiAgentArgs.instructions;
12
10
  this.agent = (0, prebuilt_1.createReactAgent)({
11
+ name: aiAgentArgs.name,
13
12
  llm: chatModel,
14
13
  tools: tools,
15
- prompt: this.instructions,
14
+ prompt: aiAgentArgs.instructions,
16
15
  });
17
16
  }
18
17
  runAgent(_messages) {
@@ -25,7 +24,7 @@ class AiAgentClient {
25
24
  });
26
25
  const lastMessage = response.messages.at(-1);
27
26
  if (lastMessage instanceof messages_1.ToolMessage) {
28
- if (lastMessage.name && tools_1.EXIT_TOOLS.includes(lastMessage.name)) {
27
+ if (lastMessage.name && default_1.EXIT_TOOLS.includes(lastMessage.name)) {
29
28
  return {
30
29
  role: 'exit',
31
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-client.js","sourceRoot":"","sources":["../../src/ai-agent-client.ts"],"names":[],"mappings":";;;;AACA,uDAGiC;AAGjC,4DAAgE;AAEhE,mCAAoC;AAUpC,MAAa,aAAa;IAKxB,YACE,WAAwB,EACxB,SAAwB,EACxB,QAA0B,EAAE;QAE5B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAA;QAE5C,IAAI,CAAC,KAAK,GAAG,IAAA,2BAAgB,EAAC;YAC5B,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,YAAY;SAC1B,CAAC,CAAA;IACJ,CAAC;IAEK,QAAQ,CACZ,SAAgC;;YAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAA4B,EAAE,EAAE,CAAC,CAAC;oBACzD,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC,CAAC;aACJ,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5C,IAAI,WAAW,YAAY,sBAAoB,EAAE;gBAC/C,IAAI,WAAW,CAAC,IAAI,IAAI,kBAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC7D,OAAO;wBACL,IAAI,EAAE,MAAM;qBACE,CAAA;iBACjB;gBACD,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,UAAU,EAAE,WAAW,CAAC,OAAO;iBACjB,CAAA;aACjB;YAED,IAAI,WAAW,YAAY,oBAAkB,EAAE;gBAC7C,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW,CAAC,OAAO;iBACT,CAAA;aACtB;YAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;KAAA;CACF;AArDD,sCAqDC"}
1
+ {"version":3,"file":"ai-agent-client.js","sourceRoot":"","sources":["../../src/ai-agent-client.ts"],"names":[],"mappings":";;;;AACA,uDAGiC;AAGjC,4DAAgE;AAEhE,6CAA4C;AAU5C,MAAa,aAAa;IAGxB,YACE,WAAwB,EACxB,SAAwB,EACxB,QAA0B,EAAE;QAE5B,IAAI,CAAC,KAAK,GAAG,IAAA,2BAAgB,EAAC;YAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,WAAW,CAAC,YAAY;SACjC,CAAC,CAAA;IACJ,CAAC;IAEK,QAAQ,CACZ,SAAgC;;YAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAA4B,EAAE,EAAE,CAAC,CAAC;oBACzD,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC,CAAC;aACJ,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5C,IAAI,WAAW,YAAY,sBAAoB,EAAE;gBAC/C,IAAI,WAAW,CAAC,IAAI,IAAI,oBAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC7D,OAAO;wBACL,IAAI,EAAE,MAAM;qBACE,CAAA;iBACjB;gBACD,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,UAAU,EAAE,WAAW,CAAC,OAAO;iBACjB,CAAA;aACjB;YAED,IAAI,WAAW,YAAY,oBAAkB,EAAE;gBAC7C,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW,CAAC,OAAO;iBACT,CAAA;aACtB;YAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;KAAA;CACF;AAjDD,sCAiDC"}
@@ -1,5 +1,5 @@
1
1
  export declare const HUBTYPE_API_URL: string;
2
2
  export declare const AZURE_OPENAI_API_KEY: string | undefined;
3
- export declare const AZURE_OPENAI_API_DEPLOYMENT_NAME: string | undefined;
4
- export declare const AZURE_OPENAI_API_VERSION: string | undefined;
5
3
  export declare const AZURE_OPENAI_API_BASE: string | undefined;
4
+ export declare const AZURE_OPENAI_API_DEPLOYMENT_NAME: string;
5
+ export declare const AZURE_OPENAI_API_VERSION: string;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AZURE_OPENAI_API_BASE = exports.AZURE_OPENAI_API_VERSION = exports.AZURE_OPENAI_API_DEPLOYMENT_NAME = exports.AZURE_OPENAI_API_KEY = exports.HUBTYPE_API_URL = void 0;
3
+ exports.AZURE_OPENAI_API_VERSION = exports.AZURE_OPENAI_API_DEPLOYMENT_NAME = exports.AZURE_OPENAI_API_BASE = exports.AZURE_OPENAI_API_KEY = exports.HUBTYPE_API_URL = void 0;
4
4
  exports.HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
5
- exports.AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY;
6
- exports.AZURE_OPENAI_API_DEPLOYMENT_NAME = process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME;
7
- exports.AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION;
5
+ exports.AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY; // pragma: allowlist secret
8
6
  exports.AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE;
7
+ exports.AZURE_OPENAI_API_DEPLOYMENT_NAME = process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-4o-mini_p1';
8
+ exports.AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION || '2024-12-01-preview';
9
9
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE7C,QAAA,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;AACvD,QAAA,gCAAgC,GAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAA;AACjC,QAAA,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAA;AAC/D,QAAA,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE7C,QAAA,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA,CAAC,2BAA2B;AACnF,QAAA,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA;AACzD,QAAA,gCAAgC,GAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,gBAAgB,CAAA;AACrD,QAAA,wBAAwB,GACnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,oBAAoB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { BotContext } from '@botonic/core';
2
+ import { AgenticInputMessage } from './types';
3
+ export declare class HubtypeApiClient {
4
+ private readonly authToken;
5
+ constructor(authToken: string);
6
+ getMessages(request: BotContext, memoryLength: number): Promise<AgenticInputMessage[]>;
7
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HubtypeApiClient = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const constants_1 = require("./constants");
7
+ class HubtypeApiClient {
8
+ constructor(authToken) {
9
+ this.authToken = authToken;
10
+ }
11
+ getMessages(request, memoryLength) {
12
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
13
+ const url = `${constants_1.HUBTYPE_API_URL}/external/v1/ai/agent/message_history/`;
14
+ const headers = {
15
+ 'Content-Type': 'application/json',
16
+ Authorization: `Bearer ${this.authToken}`,
17
+ };
18
+ const params = {
19
+ last_message_id: request.input.message_id,
20
+ num_messages: memoryLength,
21
+ };
22
+ try {
23
+ const messages = yield axios_1.default.get(url, {
24
+ headers,
25
+ params,
26
+ });
27
+ return messages.data.messages;
28
+ }
29
+ catch (error) {
30
+ console.error(error);
31
+ throw new Error('Failed to get messages from Hubtype');
32
+ }
33
+ });
34
+ }
35
+ }
36
+ exports.HubtypeApiClient = HubtypeApiClient;
37
+ //# sourceMappingURL=hubtype-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../src/hubtype-api-client.ts"],"names":[],"mappings":";;;;AACA,0DAAyB;AAEzB,2CAA6C;AAG7C,MAAa,gBAAgB;IAG3B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,WAAW,CACf,OAAmB,EACnB,YAAoB;;YAEpB,MAAM,GAAG,GAAG,GAAG,2BAAe,wCAAwC,CAAA;YACtE,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C,CAAA;YACD,MAAM,MAAM,GAAG;gBACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;gBACzC,YAAY,EAAE,YAAY;aAC3B,CAAA;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,GAAG,EACH;oBACE,OAAO;oBACP,MAAM;iBACP,CACF,CAAA;gBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;aAC9B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;aACvD;QACH,CAAC;KAAA;CACF;AApCD,4CAoCC"}
@@ -1,6 +1,6 @@
1
1
  import { BotContext } from '@botonic/core';
2
2
  import { AgenticInputMessage } from './types';
3
- export declare class HubtypeClient {
3
+ export declare class HubtypeApiClient {
4
4
  private readonly authToken;
5
5
  constructor(authToken: string);
6
6
  getMessages(request: BotContext, memoryLength: number): Promise<AgenticInputMessage[]>;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HubtypeClient = void 0;
3
+ exports.HubtypeApiClient = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const axios_1 = tslib_1.__importDefault(require("axios"));
6
6
  const constants_1 = require("./constants");
7
- class HubtypeClient {
7
+ class HubtypeApiClient {
8
8
  constructor(authToken) {
9
9
  this.authToken = authToken;
10
10
  }
@@ -33,5 +33,5 @@ class HubtypeClient {
33
33
  });
34
34
  }
35
35
  }
36
- exports.HubtypeClient = HubtypeClient;
36
+ exports.HubtypeApiClient = HubtypeApiClient;
37
37
  //# sourceMappingURL=hubtype-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hubtype-client.js","sourceRoot":"","sources":["../../src/hubtype-client.ts"],"names":[],"mappings":";;;;AACA,0DAAyB;AAEzB,2CAA6C;AAG7C,MAAa,aAAa;IAGxB,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,WAAW,CACf,OAAmB,EACnB,YAAoB;;YAEpB,MAAM,GAAG,GAAG,GAAG,2BAAe,wCAAwC,CAAA;YACtE,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C,CAAA;YACD,MAAM,MAAM,GAAG;gBACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;gBACzC,YAAY,EAAE,YAAY;aAC3B,CAAA;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,GAAG,EACH;oBACE,OAAO;oBACP,MAAM;iBACP,CACF,CAAA;gBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;aAC9B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;aACvD;QACH,CAAC;KAAA;CACF;AApCD,sCAoCC"}
1
+ {"version":3,"file":"hubtype-client.js","sourceRoot":"","sources":["../../src/hubtype-client.ts"],"names":[],"mappings":";;;;AACA,0DAAyB;AAEzB,2CAA6C;AAG7C,MAAa,gBAAgB;IAG3B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,WAAW,CACf,OAAmB,EACnB,YAAoB;;YAEpB,MAAM,GAAG,GAAG,GAAG,2BAAe,wCAAwC,CAAA;YACtE,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C,CAAA;YACD,MAAM,MAAM,GAAG;gBACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;gBACzC,YAAY,EAAE,YAAY;aAC3B,CAAA;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,GAAG,EACH;oBACE,OAAO;oBACP,MAAM;iBACP,CACF,CAAA;gBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;aAC9B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;aACvD;QACH,CAAC;KAAA;CACF;AApCD,4CAoCC"}
@@ -1,9 +1,11 @@
1
1
  import { BotContext, Plugin } from '@botonic/core';
2
- import { AgenticOutputMessage, AiAgentArgs, PluginAiAgentOptions } from './types';
2
+ import { AgenticOutputMessage, AiAgentArgs, CustomTool, PluginAiAgentOptions } from './types';
3
3
  export default class BotonicPluginAiAgents implements Plugin {
4
4
  private readonly authToken?;
5
+ customTools: CustomTool[];
5
6
  constructor(options?: PluginAiAgentOptions);
6
7
  pre(): void;
7
8
  getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<AgenticOutputMessage | undefined>;
9
+ private getMessages;
8
10
  }
9
11
  export * from './types';
package/lib/cjs/index.js CHANGED
@@ -2,13 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const ai_agent_client_1 = require("./ai-agent-client");
5
- const hubtype_client_1 = require("./hubtype-client");
6
- const tools_1 = require("./tools");
5
+ const hubtype_api_client_1 = require("./hubtype-api-client");
6
+ const custom_1 = require("./tools/custom");
7
+ const default_1 = require("./tools/default");
7
8
  const utils_1 = require("./utils");
8
9
  const isProd = process.env.NODE_ENV === 'production';
9
10
  class BotonicPluginAiAgents {
10
11
  constructor(options) {
12
+ this.customTools = [];
11
13
  this.authToken = options === null || options === void 0 ? void 0 : options.authToken;
14
+ this.customTools = (options === null || options === void 0 ? void 0 : options.customTools) || [];
12
15
  }
13
16
  pre() {
14
17
  return;
@@ -20,16 +23,11 @@ class BotonicPluginAiAgents {
20
23
  if (!authToken) {
21
24
  throw new Error('Auth token is required');
22
25
  }
23
- const hubtypeClient = new hubtype_client_1.HubtypeClient(authToken);
24
- const messages = isProd
25
- ? yield hubtypeClient.getMessages(request, 10)
26
- : [{ role: 'user', content: request.input.data }];
27
- const customTools = [];
28
- const chatModel = (0, utils_1.loadChatModel)('azureOpenAI');
29
- const aiAgentClient = new ai_agent_client_1.AiAgentClient(aiAgentArgs, chatModel, [
30
- ...customTools,
31
- ...tools_1.MANDATORY_TOOLS,
32
- ]);
26
+ const messages = yield this.getMessages(request, authToken, 10);
27
+ const customTools = this.customTools.map(customTool => (0, custom_1.createCustomTool)(customTool));
28
+ const tools = [...customTools, ...default_1.MANDATORY_TOOLS];
29
+ const chatModel = (0, utils_1.loadChatModel)(utils_1.AiProvider.AzureOpenAI);
30
+ const aiAgentClient = new ai_agent_client_1.AiAgentClient(aiAgentArgs, chatModel, tools);
33
31
  return yield aiAgentClient.runAgent(messages);
34
32
  }
35
33
  catch (error) {
@@ -38,6 +36,15 @@ class BotonicPluginAiAgents {
38
36
  }
39
37
  });
40
38
  }
39
+ getMessages(request, authToken, memoryLength) {
40
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
41
+ if (isProd) {
42
+ const hubtypeClient = new hubtype_api_client_1.HubtypeApiClient(authToken);
43
+ return yield hubtypeClient.getMessages(request, memoryLength);
44
+ }
45
+ return [{ role: 'user', content: request.input.data }];
46
+ });
47
+ }
41
48
  }
42
49
  exports.default = BotonicPluginAiAgents;
43
50
  tslib_1.__exportStar(require("./types"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,uDAAiD;AACjD,qDAAgD;AAChD,mCAAyC;AAOzC,mCAAuC;AAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAEpD,MAAqB,qBAAqB;IAExC,YAAY,OAA8B;QACxC,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA;IACrC,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,IAAI;gBACF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;gBACzE,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;iBAC1C;gBAED,MAAM,aAAa,GAAG,IAAI,8BAAa,CAAC,SAAS,CAAC,CAAA;gBAClD,MAAM,QAAQ,GAAG,MAAM;oBACrB,CAAC,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAiB,CAAC,CAAA;gBAElE,MAAM,WAAW,GAAG,EAAE,CAAA;gBACtB,MAAM,SAAS,GAAG,IAAA,qBAAa,EAAC,aAAa,CAAC,CAAA;gBAC9C,MAAM,aAAa,GAAG,IAAI,+BAAa,CAAC,WAAW,EAAE,SAAS,EAAE;oBAC9D,GAAG,WAAW;oBACd,GAAG,uBAAe;iBACnB,CAAC,CAAA;gBAEF,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;aAC9C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;gBACtD,OAAO,SAAS,CAAA;aACjB;QACH,CAAC;KAAA;CACF;AAtCD,wCAsCC;AAED,kDAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,uDAAiD;AACjD,6DAAuD;AACvD,2CAAiD;AACjD,6CAAiD;AASjD,mCAAmD;AAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAEpD,MAAqB,qBAAqB;IAIxC,YAAY,OAA8B;QAFnC,gBAAW,GAAiB,EAAE,CAAA;QAGnC,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,EAAE,CAAA;IAC/C,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,IAAI;gBACF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;gBACzE,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;iBAC1C;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;gBAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACpD,IAAA,yBAAgB,EAAC,UAAU,CAAC,CAC7B,CAAA;gBAED,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,yBAAe,CAAC,CAAA;gBAClD,MAAM,SAAS,GAAG,IAAA,qBAAa,EAAC,kBAAU,CAAC,WAAW,CAAC,CAAA;gBACvD,MAAM,aAAa,GAAG,IAAI,+BAAa,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;gBAEtE,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;aAC9C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;gBACtD,OAAO,SAAS,CAAA;aACjB;QACH,CAAC;KAAA;IAEa,WAAW,CACvB,OAAmB,EACnB,SAAiB,EACjB,YAAoB;;YAEpB,IAAI,MAAM,EAAE;gBACV,MAAM,aAAa,GAAG,IAAI,qCAAgB,CAAC,SAAS,CAAC,CAAA;gBACrD,OAAO,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;aAC9D;YAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAiB,CAAC,CAAA;QACvE,CAAC;KAAA;CACF;AApDD,wCAoDC;AAED,kDAAuB"}
@@ -0,0 +1,3 @@
1
+ import { DynamicStructuredTool } from '@langchain/core/tools';
2
+ import { CustomTool } from '../types';
3
+ export declare function createCustomTool(customTool: CustomTool): DynamicStructuredTool;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCustomTool = void 0;
4
+ const tools_1 = require("@langchain/core/tools");
5
+ function createCustomTool(customTool) {
6
+ return (0, tools_1.tool)(customTool.func, {
7
+ name: customTool.name,
8
+ description: customTool.description,
9
+ schema: customTool.schema,
10
+ returnDirect: customTool.returnDirect || false,
11
+ });
12
+ }
13
+ exports.createCustomTool = createCustomTool;
14
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/tools/custom.ts"],"names":[],"mappings":";;;AAAA,iDAAmE;AAInE,SAAgB,gBAAgB,CAC9B,UAAsB;IAEtB,OAAO,IAAA,YAAI,EAAC,UAAU,CAAC,IAAI,EAAE;QAC3B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,KAAK;KAC/C,CAAC,CAAA;AACJ,CAAC;AATD,4CASC"}
@@ -38,4 +38,4 @@ exports.EXIT_TOOLS = [
38
38
  exports.outOfContext.name,
39
39
  exports.finishConversation.name,
40
40
  ];
41
- //# sourceMappingURL=tools.js.map
41
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/tools/default.ts"],"names":[],"mappings":";;;;AAAA,iDAA4C;AAC5C,6BAAuB;AAEV,QAAA,mBAAmB,GAAG,IAAA,YAAI,EACrC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,wEAAwE;IAC1E,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAEY,QAAA,YAAY,GAAG,IAAA,YAAI,EAC9B,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,+IAA+I;IACjJ,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAEY,QAAA,kBAAkB,GAAG,IAAA,YAAI,EACpC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAEY,QAAA,eAAe,GAAG;IAC7B,2BAAmB;IACnB,oBAAY;IACZ,0BAAkB;CACnB,CAAA;AAEY,QAAA,UAAU,GAAG;IACxB,2BAAmB,CAAC,IAAI;IACxB,oBAAY,CAAC,IAAI;IACjB,0BAAkB,CAAC,IAAI;CACxB,CAAA"}
@@ -1,5 +1,14 @@
1
+ import { ZodSchema } from 'zod';
1
2
  export interface PluginAiAgentOptions {
2
3
  authToken?: string;
4
+ customTools?: CustomTool[];
5
+ }
6
+ export interface CustomTool {
7
+ name: string;
8
+ description: string;
9
+ schema: ZodSchema;
10
+ returnDirect?: boolean;
11
+ func: (input?: any) => Promise<any>;
3
12
  }
4
13
  export interface AiAgentArgs {
5
14
  name: string;
@@ -1,2 +1,5 @@
1
1
  import { AzureChatOpenAI } from '@langchain/openai';
2
- export declare function loadChatModel(provider: 'azureOpenAI'): AzureChatOpenAI;
2
+ export declare enum AiProvider {
3
+ AzureOpenAI = "azureOpenAI"
4
+ }
5
+ export declare function loadChatModel(provider: AiProvider): AzureChatOpenAI;
package/lib/cjs/utils.js CHANGED
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadChatModel = void 0;
3
+ exports.loadChatModel = exports.AiProvider = void 0;
4
4
  const openai_1 = require("@langchain/openai");
5
5
  const constants_1 = require("./constants");
6
+ var AiProvider;
7
+ (function (AiProvider) {
8
+ AiProvider["AzureOpenAI"] = "azureOpenAI";
9
+ })(AiProvider = exports.AiProvider || (exports.AiProvider = {}));
6
10
  function loadChatModel(provider) {
7
11
  switch (provider) {
8
- case 'azureOpenAI':
12
+ case AiProvider.AzureOpenAI:
9
13
  return new openai_1.AzureChatOpenAI({
10
14
  azureOpenAIApiVersion: constants_1.AZURE_OPENAI_API_VERSION,
11
15
  azureOpenAIApiKey: constants_1.AZURE_OPENAI_API_KEY,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,8CAAmD;AAEnD,2CAKoB;AAEpB,SAAgB,aAAa,CAAC,QAAuB;IACnD,QAAQ,QAAQ,EAAE;QAChB,KAAK,aAAa;YAChB,OAAO,IAAI,wBAAe,CAAC;gBACzB,qBAAqB,EAAE,oCAAwB;gBAC/C,iBAAiB,EAAE,gCAAoB;gBACvC,4BAA4B,EAAE,4CAAgC;gBAC9D,mBAAmB,EAAE,iCAAqB;gBAC1C,WAAW,EAAE,CAAC;gBACd,kBAAkB;aACnB,CAAC,CAAA;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAA;KACxD;AACH,CAAC;AAdD,sCAcC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,8CAAmD;AAEnD,2CAKoB;AAEpB,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,yCAA2B,CAAA;AAC7B,CAAC,EAFW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAErB;AAED,SAAgB,aAAa,CAAC,QAAoB;IAChD,QAAQ,QAAQ,EAAE;QAChB,KAAK,UAAU,CAAC,WAAW;YACzB,OAAO,IAAI,wBAAe,CAAC;gBACzB,qBAAqB,EAAE,oCAAwB;gBAC/C,iBAAiB,EAAE,gCAAoB;gBACvC,4BAA4B,EAAE,4CAAgC;gBAC9D,mBAAmB,EAAE,iCAAqB;gBAC1C,WAAW,EAAE,CAAC;gBACd,kBAAkB;aACnB,CAAC,CAAA;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAA;KACxD;AACH,CAAC;AAdD,sCAcC"}
@@ -3,8 +3,6 @@ import { StructuredTool } from '@langchain/core/tools';
3
3
  import { CompiledStateGraph } from '@langchain/langgraph';
4
4
  import { AgenticInputMessage, AgenticOutputMessage, AiAgentArgs } from './types';
5
5
  export declare class AiAgentClient {
6
- name: string;
7
- instructions: string;
8
6
  agent: CompiledStateGraph<any, any>;
9
7
  constructor(aiAgentArgs: AiAgentArgs, chatModel: BaseChatModel, tools?: StructuredTool[]);
10
8
  runAgent(_messages: AgenticInputMessage[]): Promise<AgenticOutputMessage>;
@@ -1,15 +1,14 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { AIMessage as LangchainAIMessage, ToolMessage as LangchainToolMessage, } from '@langchain/core/messages';
3
3
  import { createReactAgent } from '@langchain/langgraph/prebuilt';
4
- import { EXIT_TOOLS } from './tools';
4
+ import { EXIT_TOOLS } from './tools/default';
5
5
  export class AiAgentClient {
6
6
  constructor(aiAgentArgs, chatModel, tools = []) {
7
- this.name = aiAgentArgs.name;
8
- this.instructions = aiAgentArgs.instructions;
9
7
  this.agent = createReactAgent({
8
+ name: aiAgentArgs.name,
10
9
  llm: chatModel,
11
10
  tools: tools,
12
- prompt: this.instructions,
11
+ prompt: aiAgentArgs.instructions,
13
12
  });
14
13
  }
15
14
  runAgent(_messages) {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-client.js","sourceRoot":"","sources":["../../src/ai-agent-client.ts"],"names":[],"mappings":";AACA,OAAO,EACL,SAAS,IAAI,kBAAkB,EAC/B,WAAW,IAAI,oBAAoB,GACpC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAUpC,MAAM,OAAO,aAAa;IAKxB,YACE,WAAwB,EACxB,SAAwB,EACxB,QAA0B,EAAE;QAE5B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAA;QAE5C,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;YAC5B,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,YAAY;SAC1B,CAAC,CAAA;IACJ,CAAC;IAEK,QAAQ,CACZ,SAAgC;;YAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAA4B,EAAE,EAAE,CAAC,CAAC;oBACzD,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC,CAAC;aACJ,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5C,IAAI,WAAW,YAAY,oBAAoB,EAAE;gBAC/C,IAAI,WAAW,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC7D,OAAO;wBACL,IAAI,EAAE,MAAM;qBACE,CAAA;iBACjB;gBACD,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,UAAU,EAAE,WAAW,CAAC,OAAO;iBACjB,CAAA;aACjB;YAED,IAAI,WAAW,YAAY,kBAAkB,EAAE;gBAC7C,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW,CAAC,OAAO;iBACT,CAAA;aACtB;YAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;KAAA;CACF"}
1
+ {"version":3,"file":"ai-agent-client.js","sourceRoot":"","sources":["../../src/ai-agent-client.ts"],"names":[],"mappings":";AACA,OAAO,EACL,SAAS,IAAI,kBAAkB,EAC/B,WAAW,IAAI,oBAAoB,GACpC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAU5C,MAAM,OAAO,aAAa;IAGxB,YACE,WAAwB,EACxB,SAAwB,EACxB,QAA0B,EAAE;QAE5B,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;YAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,WAAW,CAAC,YAAY;SACjC,CAAC,CAAA;IACJ,CAAC;IAEK,QAAQ,CACZ,SAAgC;;YAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAA4B,EAAE,EAAE,CAAC,CAAC;oBACzD,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC,CAAC;aACJ,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5C,IAAI,WAAW,YAAY,oBAAoB,EAAE;gBAC/C,IAAI,WAAW,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC7D,OAAO;wBACL,IAAI,EAAE,MAAM;qBACE,CAAA;iBACjB;gBACD,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,UAAU,EAAE,WAAW,CAAC,OAAO;iBACjB,CAAA;aACjB;YAED,IAAI,WAAW,YAAY,kBAAkB,EAAE;gBAC7C,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW,CAAC,OAAO;iBACT,CAAA;aACtB;YAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;KAAA;CACF"}
@@ -1,5 +1,5 @@
1
1
  export declare const HUBTYPE_API_URL: string;
2
2
  export declare const AZURE_OPENAI_API_KEY: string | undefined;
3
- export declare const AZURE_OPENAI_API_DEPLOYMENT_NAME: string | undefined;
4
- export declare const AZURE_OPENAI_API_VERSION: string | undefined;
5
3
  export declare const AZURE_OPENAI_API_BASE: string | undefined;
4
+ export declare const AZURE_OPENAI_API_DEPLOYMENT_NAME: string;
5
+ export declare const AZURE_OPENAI_API_VERSION: string;
@@ -1,6 +1,6 @@
1
1
  export const HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
2
- export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY;
3
- export const AZURE_OPENAI_API_DEPLOYMENT_NAME = process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME;
4
- export const AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION;
2
+ export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY; // pragma: allowlist secret
5
3
  export const AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE;
4
+ export const AZURE_OPENAI_API_DEPLOYMENT_NAME = process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-4o-mini_p1';
5
+ export const AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION || '2024-12-01-preview';
6
6
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;AACpE,MAAM,CAAC,MAAM,gCAAgC,GAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAA;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAA;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA,CAAC,2BAA2B;AAChG,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,gBAAgB,CAAA;AAClE,MAAM,CAAC,MAAM,wBAAwB,GACnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,oBAAoB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { BotContext } from '@botonic/core';
2
+ import { AgenticInputMessage } from './types';
3
+ export declare class HubtypeApiClient {
4
+ private readonly authToken;
5
+ constructor(authToken: string);
6
+ getMessages(request: BotContext, memoryLength: number): Promise<AgenticInputMessage[]>;
7
+ }
@@ -0,0 +1,33 @@
1
+ import { __awaiter } from "tslib";
2
+ import axios from 'axios';
3
+ import { HUBTYPE_API_URL } from './constants';
4
+ export class HubtypeApiClient {
5
+ constructor(authToken) {
6
+ this.authToken = authToken;
7
+ }
8
+ getMessages(request, memoryLength) {
9
+ return __awaiter(this, void 0, void 0, function* () {
10
+ const url = `${HUBTYPE_API_URL}/external/v1/ai/agent/message_history/`;
11
+ const headers = {
12
+ 'Content-Type': 'application/json',
13
+ Authorization: `Bearer ${this.authToken}`,
14
+ };
15
+ const params = {
16
+ last_message_id: request.input.message_id,
17
+ num_messages: memoryLength,
18
+ };
19
+ try {
20
+ const messages = yield axios.get(url, {
21
+ headers,
22
+ params,
23
+ });
24
+ return messages.data.messages;
25
+ }
26
+ catch (error) {
27
+ console.error(error);
28
+ throw new Error('Failed to get messages from Hubtype');
29
+ }
30
+ });
31
+ }
32
+ }
33
+ //# sourceMappingURL=hubtype-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../src/hubtype-api-client.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,MAAM,OAAO,gBAAgB;IAG3B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,WAAW,CACf,OAAmB,EACnB,YAAoB;;YAEpB,MAAM,GAAG,GAAG,GAAG,eAAe,wCAAwC,CAAA;YACtE,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C,CAAA;YACD,MAAM,MAAM,GAAG;gBACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;gBACzC,YAAY,EAAE,YAAY;aAC3B,CAAA;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,EACH;oBACE,OAAO;oBACP,MAAM;iBACP,CACF,CAAA;gBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;aAC9B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;aACvD;QACH,CAAC;KAAA;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { BotContext } from '@botonic/core';
2
2
  import { AgenticInputMessage } from './types';
3
- export declare class HubtypeClient {
3
+ export declare class HubtypeApiClient {
4
4
  private readonly authToken;
5
5
  constructor(authToken: string);
6
6
  getMessages(request: BotContext, memoryLength: number): Promise<AgenticInputMessage[]>;
@@ -1,7 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import axios from 'axios';
3
3
  import { HUBTYPE_API_URL } from './constants';
4
- export class HubtypeClient {
4
+ export class HubtypeApiClient {
5
5
  constructor(authToken) {
6
6
  this.authToken = authToken;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hubtype-client.js","sourceRoot":"","sources":["../../src/hubtype-client.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,MAAM,OAAO,aAAa;IAGxB,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,WAAW,CACf,OAAmB,EACnB,YAAoB;;YAEpB,MAAM,GAAG,GAAG,GAAG,eAAe,wCAAwC,CAAA;YACtE,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C,CAAA;YACD,MAAM,MAAM,GAAG;gBACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;gBACzC,YAAY,EAAE,YAAY;aAC3B,CAAA;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,EACH;oBACE,OAAO;oBACP,MAAM;iBACP,CACF,CAAA;gBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;aAC9B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;aACvD;QACH,CAAC;KAAA;CACF"}
1
+ {"version":3,"file":"hubtype-client.js","sourceRoot":"","sources":["../../src/hubtype-client.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,MAAM,OAAO,gBAAgB;IAG3B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,WAAW,CACf,OAAmB,EACnB,YAAoB;;YAEpB,MAAM,GAAG,GAAG,GAAG,eAAe,wCAAwC,CAAA;YACtE,MAAM,OAAO,GAAG;gBACd,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C,CAAA;YACD,MAAM,MAAM,GAAG;gBACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;gBACzC,YAAY,EAAE,YAAY;aAC3B,CAAA;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,EACH;oBACE,OAAO;oBACP,MAAM;iBACP,CACF,CAAA;gBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;aAC9B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;aACvD;QACH,CAAC;KAAA;CACF"}
@@ -1,9 +1,11 @@
1
1
  import { BotContext, Plugin } from '@botonic/core';
2
- import { AgenticOutputMessage, AiAgentArgs, PluginAiAgentOptions } from './types';
2
+ import { AgenticOutputMessage, AiAgentArgs, CustomTool, PluginAiAgentOptions } from './types';
3
3
  export default class BotonicPluginAiAgents implements Plugin {
4
4
  private readonly authToken?;
5
+ customTools: CustomTool[];
5
6
  constructor(options?: PluginAiAgentOptions);
6
7
  pre(): void;
7
8
  getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<AgenticOutputMessage | undefined>;
9
+ private getMessages;
8
10
  }
9
11
  export * from './types';
package/lib/esm/index.js CHANGED
@@ -1,12 +1,15 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { AiAgentClient } from './ai-agent-client';
3
- import { HubtypeClient } from './hubtype-client';
4
- import { MANDATORY_TOOLS } from './tools';
5
- import { loadChatModel } from './utils';
3
+ import { HubtypeApiClient } from './hubtype-api-client';
4
+ import { createCustomTool } from './tools/custom';
5
+ import { MANDATORY_TOOLS } from './tools/default';
6
+ import { AiProvider, loadChatModel } from './utils';
6
7
  const isProd = process.env.NODE_ENV === 'production';
7
8
  export default class BotonicPluginAiAgents {
8
9
  constructor(options) {
10
+ this.customTools = [];
9
11
  this.authToken = options === null || options === void 0 ? void 0 : options.authToken;
12
+ this.customTools = (options === null || options === void 0 ? void 0 : options.customTools) || [];
10
13
  }
11
14
  pre() {
12
15
  return;
@@ -18,16 +21,11 @@ export default class BotonicPluginAiAgents {
18
21
  if (!authToken) {
19
22
  throw new Error('Auth token is required');
20
23
  }
21
- const hubtypeClient = new HubtypeClient(authToken);
22
- const messages = isProd
23
- ? yield hubtypeClient.getMessages(request, 10)
24
- : [{ role: 'user', content: request.input.data }];
25
- const customTools = [];
26
- const chatModel = loadChatModel('azureOpenAI');
27
- const aiAgentClient = new AiAgentClient(aiAgentArgs, chatModel, [
28
- ...customTools,
29
- ...MANDATORY_TOOLS,
30
- ]);
24
+ const messages = yield this.getMessages(request, authToken, 10);
25
+ const customTools = this.customTools.map(customTool => createCustomTool(customTool));
26
+ const tools = [...customTools, ...MANDATORY_TOOLS];
27
+ const chatModel = loadChatModel(AiProvider.AzureOpenAI);
28
+ const aiAgentClient = new AiAgentClient(aiAgentArgs, chatModel, tools);
31
29
  return yield aiAgentClient.runAgent(messages);
32
30
  }
33
31
  catch (error) {
@@ -36,6 +34,15 @@ export default class BotonicPluginAiAgents {
36
34
  }
37
35
  });
38
36
  }
37
+ getMessages(request, authToken, memoryLength) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ if (isProd) {
40
+ const hubtypeClient = new HubtypeApiClient(authToken);
41
+ return yield hubtypeClient.getMessages(request, memoryLength);
42
+ }
43
+ return [{ role: 'user', content: request.input.data }];
44
+ });
45
+ }
39
46
  }
40
47
  export * from './types';
41
48
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAEpD,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAExC,YAAY,OAA8B;QACxC,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA;IACrC,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,IAAI;gBACF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;gBACzE,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;iBAC1C;gBAED,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAA;gBAClD,MAAM,QAAQ,GAAG,MAAM;oBACrB,CAAC,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAiB,CAAC,CAAA;gBAElE,MAAM,WAAW,GAAG,EAAE,CAAA;gBACtB,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;gBAC9C,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE;oBAC9D,GAAG,WAAW;oBACd,GAAG,eAAe;iBACnB,CAAC,CAAA;gBAEF,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;aAC9C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;gBACtD,OAAO,SAAS,CAAA;aACjB;QACH,CAAC;KAAA;CACF;AAED,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AASjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAEpD,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAIxC,YAAY,OAA8B;QAFnC,gBAAW,GAAiB,EAAE,CAAA;QAGnC,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,EAAE,CAAA;IAC/C,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,IAAI;gBACF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;gBACzE,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;iBAC1C;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;gBAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACpD,gBAAgB,CAAC,UAAU,CAAC,CAC7B,CAAA;gBAED,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,eAAe,CAAC,CAAA;gBAClD,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;gBACvD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;gBAEtE,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;aAC9C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;gBACtD,OAAO,SAAS,CAAA;aACjB;QACH,CAAC;KAAA;IAEa,WAAW,CACvB,OAAmB,EACnB,SAAiB,EACjB,YAAoB;;YAEpB,IAAI,MAAM,EAAE;gBACV,MAAM,aAAa,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAA;gBACrD,OAAO,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;aAC9D;YAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAiB,CAAC,CAAA;QACvE,CAAC;KAAA;CACF;AAED,cAAc,SAAS,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { DynamicStructuredTool } from '@langchain/core/tools';
2
+ import { CustomTool } from '../types';
3
+ export declare function createCustomTool(customTool: CustomTool): DynamicStructuredTool;
@@ -0,0 +1,10 @@
1
+ import { tool } from '@langchain/core/tools';
2
+ export function createCustomTool(customTool) {
3
+ return tool(customTool.func, {
4
+ name: customTool.name,
5
+ description: customTool.description,
6
+ schema: customTool.schema,
7
+ returnDirect: customTool.returnDirect || false,
8
+ });
9
+ }
10
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/tools/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAInE,MAAM,UAAU,gBAAgB,CAC9B,UAAsB;IAEtB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QAC3B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,KAAK;KAC/C,CAAC,CAAA;AACJ,CAAC"}
@@ -35,4 +35,4 @@ export const EXIT_TOOLS = [
35
35
  outOfContext.name,
36
36
  finishConversation.name,
37
37
  ];
38
- //# sourceMappingURL=tools.js.map
38
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/tools/default.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CACrC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,wEAAwE;IAC1E,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAC9B,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,+IAA+I;IACjJ,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CACpC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mBAAmB;IACnB,YAAY;IACZ,kBAAkB;CACnB,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mBAAmB,CAAC,IAAI;IACxB,YAAY,CAAC,IAAI;IACjB,kBAAkB,CAAC,IAAI;CACxB,CAAA"}
@@ -1,5 +1,14 @@
1
+ import { ZodSchema } from 'zod';
1
2
  export interface PluginAiAgentOptions {
2
3
  authToken?: string;
4
+ customTools?: CustomTool[];
5
+ }
6
+ export interface CustomTool {
7
+ name: string;
8
+ description: string;
9
+ schema: ZodSchema;
10
+ returnDirect?: boolean;
11
+ func: (input?: any) => Promise<any>;
3
12
  }
4
13
  export interface AiAgentArgs {
5
14
  name: string;
@@ -1,2 +1,5 @@
1
1
  import { AzureChatOpenAI } from '@langchain/openai';
2
- export declare function loadChatModel(provider: 'azureOpenAI'): AzureChatOpenAI;
2
+ export declare enum AiProvider {
3
+ AzureOpenAI = "azureOpenAI"
4
+ }
5
+ export declare function loadChatModel(provider: AiProvider): AzureChatOpenAI;
package/lib/esm/utils.js CHANGED
@@ -1,8 +1,12 @@
1
1
  import { AzureChatOpenAI } from '@langchain/openai';
2
2
  import { AZURE_OPENAI_API_BASE, AZURE_OPENAI_API_DEPLOYMENT_NAME, AZURE_OPENAI_API_KEY, AZURE_OPENAI_API_VERSION, } from './constants';
3
+ export var AiProvider;
4
+ (function (AiProvider) {
5
+ AiProvider["AzureOpenAI"] = "azureOpenAI";
6
+ })(AiProvider || (AiProvider = {}));
3
7
  export function loadChatModel(provider) {
4
8
  switch (provider) {
5
- case 'azureOpenAI':
9
+ case AiProvider.AzureOpenAI:
6
10
  return new AzureChatOpenAI({
7
11
  azureOpenAIApiVersion: AZURE_OPENAI_API_VERSION,
8
12
  azureOpenAIApiKey: AZURE_OPENAI_API_KEY,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAEpB,MAAM,UAAU,aAAa,CAAC,QAAuB;IACnD,QAAQ,QAAQ,EAAE;QAChB,KAAK,aAAa;YAChB,OAAO,IAAI,eAAe,CAAC;gBACzB,qBAAqB,EAAE,wBAAwB;gBAC/C,iBAAiB,EAAE,oBAAoB;gBACvC,4BAA4B,EAAE,gCAAgC;gBAC9D,mBAAmB,EAAE,qBAAqB;gBAC1C,WAAW,EAAE,CAAC;gBACd,kBAAkB;aACnB,CAAC,CAAA;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAA;KACxD;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,yCAA2B,CAAA;AAC7B,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAED,MAAM,UAAU,aAAa,CAAC,QAAoB;IAChD,QAAQ,QAAQ,EAAE;QAChB,KAAK,UAAU,CAAC,WAAW;YACzB,OAAO,IAAI,eAAe,CAAC;gBACzB,qBAAqB,EAAE,wBAAwB;gBAC/C,iBAAiB,EAAE,oBAAoB;gBACvC,4BAA4B,EAAE,gCAAgC;gBAC9D,mBAAmB,EAAE,qBAAqB;gBAC1C,WAAW,EAAE,CAAC;gBACd,kBAAkB;aACnB,CAAC,CAAA;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAA;KACxD;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/plugin-ai-agents",
3
- "version": "0.36.0-alpha.2",
3
+ "version": "0.36.0-alpha.3",
4
4
  "main": "./lib/cjs/index.js",
5
5
  "module": "./lib/esm/index.js",
6
6
  "description": "Use AI Agents to generate your contents",
@@ -18,7 +18,8 @@
18
18
  "@langchain/langgraph": "^0.3.0",
19
19
  "@langchain/openai": "^0.5.12",
20
20
  "axios": "^1.9.0",
21
- "uuid": "^10.0.0"
21
+ "uuid": "^10.0.0",
22
+ "zod": "^3.25.57"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@types/uuid": "^10.0.0"
@@ -7,7 +7,7 @@ import { StructuredTool } from '@langchain/core/tools'
7
7
  import { CompiledStateGraph } from '@langchain/langgraph'
8
8
  import { createReactAgent } from '@langchain/langgraph/prebuilt'
9
9
 
10
- import { EXIT_TOOLS } from './tools'
10
+ import { EXIT_TOOLS } from './tools/default'
11
11
  import {
12
12
  AgenticInputMessage,
13
13
  AgenticOutputMessage,
@@ -18,8 +18,6 @@ import {
18
18
  } from './types'
19
19
 
20
20
  export class AiAgentClient {
21
- public name: string
22
- public instructions: string
23
21
  public agent: CompiledStateGraph<any, any> // TODO: apply RunInput, RunOutput, etc.
24
22
 
25
23
  constructor(
@@ -27,13 +25,11 @@ export class AiAgentClient {
27
25
  chatModel: BaseChatModel,
28
26
  tools: StructuredTool[] = []
29
27
  ) {
30
- this.name = aiAgentArgs.name
31
- this.instructions = aiAgentArgs.instructions
32
-
33
28
  this.agent = createReactAgent({
29
+ name: aiAgentArgs.name,
34
30
  llm: chatModel,
35
31
  tools: tools,
36
- prompt: this.instructions,
32
+ prompt: aiAgentArgs.instructions,
37
33
  })
38
34
  }
39
35
 
package/src/constants.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export const HUBTYPE_API_URL =
2
2
  process.env.HUBTYPE_API_URL || 'https://api.hubtype.com'
3
3
 
4
- export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY
5
- export const AZURE_OPENAI_API_DEPLOYMENT_NAME =
6
- process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME
7
- export const AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION
4
+ export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY // pragma: allowlist secret
8
5
  export const AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE
6
+ export const AZURE_OPENAI_API_DEPLOYMENT_NAME =
7
+ process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-4o-mini_p1'
8
+ export const AZURE_OPENAI_API_VERSION =
9
+ process.env.AZURE_OPENAI_API_VERSION || '2024-12-01-preview'
@@ -0,0 +1,43 @@
1
+ import { BotContext } from '@botonic/core'
2
+ import axios from 'axios'
3
+
4
+ import { HUBTYPE_API_URL } from './constants'
5
+ import { AgenticInputMessage } from './types'
6
+
7
+ export class HubtypeApiClient {
8
+ private readonly authToken: string
9
+
10
+ constructor(authToken: string) {
11
+ this.authToken = authToken
12
+ }
13
+
14
+ async getMessages(
15
+ request: BotContext,
16
+ memoryLength: number
17
+ ): Promise<AgenticInputMessage[]> {
18
+ const url = `${HUBTYPE_API_URL}/external/v1/ai/agent/message_history/`
19
+ const headers = {
20
+ 'Content-Type': 'application/json',
21
+ Authorization: `Bearer ${this.authToken}`,
22
+ }
23
+ const params = {
24
+ last_message_id: request.input.message_id,
25
+ num_messages: memoryLength,
26
+ }
27
+
28
+ try {
29
+ const messages = await axios.get<{ messages: AgenticInputMessage[] }>(
30
+ url,
31
+ {
32
+ headers,
33
+ params,
34
+ }
35
+ )
36
+
37
+ return messages.data.messages
38
+ } catch (error) {
39
+ console.error(error)
40
+ throw new Error('Failed to get messages from Hubtype')
41
+ }
42
+ }
43
+ }
@@ -4,7 +4,7 @@ import axios from 'axios'
4
4
  import { HUBTYPE_API_URL } from './constants'
5
5
  import { AgenticInputMessage } from './types'
6
6
 
7
- export class HubtypeClient {
7
+ export class HubtypeApiClient {
8
8
  private readonly authToken: string
9
9
 
10
10
  constructor(authToken: string) {
package/src/index.ts CHANGED
@@ -1,22 +1,28 @@
1
1
  import { BotContext, Plugin } from '@botonic/core'
2
2
 
3
3
  import { AiAgentClient } from './ai-agent-client'
4
- import { HubtypeClient } from './hubtype-client'
5
- import { MANDATORY_TOOLS } from './tools'
4
+ import { HubtypeApiClient } from './hubtype-api-client'
5
+ import { createCustomTool } from './tools/custom'
6
+ import { MANDATORY_TOOLS } from './tools/default'
6
7
  import {
8
+ AgenticInputMessage,
7
9
  AgenticOutputMessage,
8
10
  AiAgentArgs,
11
+ CustomTool,
9
12
  PluginAiAgentOptions,
10
13
  UserMessage,
11
14
  } from './types'
12
- import { loadChatModel } from './utils'
15
+ import { AiProvider, loadChatModel } from './utils'
13
16
 
14
17
  const isProd = process.env.NODE_ENV === 'production'
15
18
 
16
19
  export default class BotonicPluginAiAgents implements Plugin {
17
20
  private readonly authToken?: string
21
+ public customTools: CustomTool[] = []
22
+
18
23
  constructor(options?: PluginAiAgentOptions) {
19
24
  this.authToken = options?.authToken
25
+ this.customTools = options?.customTools || []
20
26
  }
21
27
 
22
28
  pre(): void {
@@ -33,17 +39,15 @@ export default class BotonicPluginAiAgents implements Plugin {
33
39
  throw new Error('Auth token is required')
34
40
  }
35
41
 
36
- const hubtypeClient = new HubtypeClient(authToken)
37
- const messages = isProd
38
- ? await hubtypeClient.getMessages(request, 10)
39
- : [{ role: 'user', content: request.input.data } as UserMessage]
42
+ const messages = await this.getMessages(request, authToken, 10)
43
+
44
+ const customTools = this.customTools.map(customTool =>
45
+ createCustomTool(customTool)
46
+ )
40
47
 
41
- const customTools = []
42
- const chatModel = loadChatModel('azureOpenAI')
43
- const aiAgentClient = new AiAgentClient(aiAgentArgs, chatModel, [
44
- ...customTools,
45
- ...MANDATORY_TOOLS,
46
- ])
48
+ const tools = [...customTools, ...MANDATORY_TOOLS]
49
+ const chatModel = loadChatModel(AiProvider.AzureOpenAI)
50
+ const aiAgentClient = new AiAgentClient(aiAgentArgs, chatModel, tools)
47
51
 
48
52
  return await aiAgentClient.runAgent(messages)
49
53
  } catch (error) {
@@ -51,6 +55,19 @@ export default class BotonicPluginAiAgents implements Plugin {
51
55
  return undefined
52
56
  }
53
57
  }
58
+
59
+ private async getMessages(
60
+ request: BotContext,
61
+ authToken: string,
62
+ memoryLength: number
63
+ ): Promise<AgenticInputMessage[]> {
64
+ if (isProd) {
65
+ const hubtypeClient = new HubtypeApiClient(authToken)
66
+ return await hubtypeClient.getMessages(request, memoryLength)
67
+ }
68
+
69
+ return [{ role: 'user', content: request.input.data } as UserMessage]
70
+ }
54
71
  }
55
72
 
56
73
  export * from './types'
@@ -0,0 +1,14 @@
1
+ import { DynamicStructuredTool, tool } from '@langchain/core/tools'
2
+
3
+ import { CustomTool } from '../types'
4
+
5
+ export function createCustomTool(
6
+ customTool: CustomTool
7
+ ): DynamicStructuredTool {
8
+ return tool(customTool.func, {
9
+ name: customTool.name,
10
+ description: customTool.description,
11
+ schema: customTool.schema,
12
+ returnDirect: customTool.returnDirect || false,
13
+ })
14
+ }
@@ -44,6 +44,7 @@ export const MANDATORY_TOOLS = [
44
44
  outOfContext,
45
45
  finishConversation,
46
46
  ]
47
+
47
48
  export const EXIT_TOOLS = [
48
49
  handoffToHumanAgent.name,
49
50
  outOfContext.name,
package/src/types.ts CHANGED
@@ -1,6 +1,17 @@
1
+ import { ZodSchema } from 'zod'
1
2
  export interface PluginAiAgentOptions {
2
3
  authToken?: string
4
+ customTools?: CustomTool[]
3
5
  }
6
+
7
+ export interface CustomTool {
8
+ name: string
9
+ description: string
10
+ schema: ZodSchema
11
+ returnDirect?: boolean
12
+ func: (input?: any) => Promise<any>
13
+ }
14
+
4
15
  export interface AiAgentArgs {
5
16
  name: string
6
17
  instructions: string
package/src/utils.ts CHANGED
@@ -7,9 +7,13 @@ import {
7
7
  AZURE_OPENAI_API_VERSION,
8
8
  } from './constants'
9
9
 
10
- export function loadChatModel(provider: 'azureOpenAI') {
10
+ export enum AiProvider {
11
+ AzureOpenAI = 'azureOpenAI',
12
+ }
13
+
14
+ export function loadChatModel(provider: AiProvider) {
11
15
  switch (provider) {
12
- case 'azureOpenAI':
16
+ case AiProvider.AzureOpenAI:
13
17
  return new AzureChatOpenAI({
14
18
  azureOpenAIApiVersion: AZURE_OPENAI_API_VERSION,
15
19
  azureOpenAIApiKey: AZURE_OPENAI_API_KEY,
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":";;;;AAAA,iDAA4C;AAC5C,6BAAuB;AAEV,QAAA,mBAAmB,GAAG,IAAA,YAAI,EACrC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,wEAAwE;IAC1E,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAEY,QAAA,YAAY,GAAG,IAAA,YAAI,EAC9B,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,+IAA+I;IACjJ,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAEY,QAAA,kBAAkB,GAAG,IAAA,YAAI,EACpC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAEY,QAAA,eAAe,GAAG;IAC7B,2BAAmB;IACnB,oBAAY;IACZ,0BAAkB;CACnB,CAAA;AACY,QAAA,UAAU,GAAG;IACxB,2BAAmB,CAAC,IAAI;IACxB,oBAAY,CAAC,IAAI;IACjB,0BAAkB,CAAC,IAAI;CACxB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CACrC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,wEAAwE;IAC1E,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAC9B,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EACT,+IAA+I;IACjJ,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CACpC,GAAS,EAAE;IACT,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,EACD;IACE,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,IAAI;CACnB,CACF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mBAAmB;IACnB,YAAY;IACZ,kBAAkB;CACnB,CAAA;AACD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mBAAmB,CAAC,IAAI;IACxB,YAAY,CAAC,IAAI;IACjB,kBAAkB,CAAC,IAAI;CACxB,CAAA"}
File without changes
File without changes