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

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 (46) hide show
  1. package/lib/cjs/ai-agent-client.d.ts +9 -10
  2. package/lib/cjs/ai-agent-client.js +37 -65
  3. package/lib/cjs/ai-agent-client.js.map +1 -1
  4. package/lib/cjs/constants.d.ts +4 -0
  5. package/lib/cjs/constants.js +5 -1
  6. package/lib/cjs/constants.js.map +1 -1
  7. package/lib/cjs/hubtype-client.d.ts +7 -0
  8. package/lib/cjs/hubtype-client.js +37 -0
  9. package/lib/cjs/hubtype-client.js.map +1 -0
  10. package/lib/cjs/index.d.ts +5 -5
  11. package/lib/cjs/index.js +28 -3
  12. package/lib/cjs/index.js.map +1 -1
  13. package/lib/cjs/tools.d.ts +6 -0
  14. package/lib/cjs/tools.js +41 -0
  15. package/lib/cjs/tools.js.map +1 -0
  16. package/lib/cjs/types.d.ts +21 -23
  17. package/lib/cjs/utils.d.ts +2 -0
  18. package/lib/cjs/utils.js +22 -0
  19. package/lib/cjs/utils.js.map +1 -0
  20. package/lib/esm/ai-agent-client.d.ts +9 -10
  21. package/lib/esm/ai-agent-client.js +37 -65
  22. package/lib/esm/ai-agent-client.js.map +1 -1
  23. package/lib/esm/constants.d.ts +4 -0
  24. package/lib/esm/constants.js +4 -0
  25. package/lib/esm/constants.js.map +1 -1
  26. package/lib/esm/hubtype-client.d.ts +7 -0
  27. package/lib/esm/hubtype-client.js +33 -0
  28. package/lib/esm/hubtype-client.js.map +1 -0
  29. package/lib/esm/index.d.ts +5 -5
  30. package/lib/esm/index.js +28 -3
  31. package/lib/esm/index.js.map +1 -1
  32. package/lib/esm/tools.d.ts +6 -0
  33. package/lib/esm/tools.js +38 -0
  34. package/lib/esm/tools.js.map +1 -0
  35. package/lib/esm/types.d.ts +21 -23
  36. package/lib/esm/utils.d.ts +2 -0
  37. package/lib/esm/utils.js +18 -0
  38. package/lib/esm/utils.js.map +1 -0
  39. package/package.json +5 -2
  40. package/src/ai-agent-client.ts +56 -95
  41. package/src/constants.ts +6 -0
  42. package/src/hubtype-client.ts +43 -0
  43. package/src/index.ts +40 -7
  44. package/src/tools.ts +51 -0
  45. package/src/types.ts +27 -21
  46. package/src/utils.ts +24 -0
@@ -1,12 +1,11 @@
1
- import { BotContext } from '@botonic/core';
2
- import { AiAgentArgs, AiAgentResponse } from './types';
1
+ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
2
+ import { StructuredTool } from '@langchain/core/tools';
3
+ import { CompiledStateGraph } from '@langchain/langgraph';
4
+ import { AgenticInputMessage, AgenticOutputMessage, AiAgentArgs } from './types';
3
5
  export declare class AiAgentClient {
4
- private url;
5
- constructor();
6
- getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<AiAgentResponse>;
7
- private agentTestInference;
8
- private agentInference;
9
- private getConfig;
10
- private getData;
11
- private getDataTest;
6
+ name: string;
7
+ instructions: string;
8
+ agent: CompiledStateGraph<any, any>;
9
+ constructor(aiAgentArgs: AiAgentArgs, chatModel: BaseChatModel, tools?: StructuredTool[]);
10
+ runAgent(_messages: AgenticInputMessage[]): Promise<AgenticOutputMessage>;
12
11
  }
@@ -2,77 +2,49 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AiAgentClient = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable @typescript-eslint/naming-convention */
6
- const core_1 = require("@botonic/core");
7
- const axios_1 = tslib_1.__importDefault(require("axios"));
8
- const constants_1 = require("./constants");
9
- const errors_1 = require("./errors");
5
+ const messages_1 = require("@langchain/core/messages");
6
+ const prebuilt_1 = require("@langchain/langgraph/prebuilt");
7
+ const tools_1 = require("./tools");
10
8
  class AiAgentClient {
11
- constructor() {
12
- this.url = `${constants_1.HUBTYPE_API_URL}/external/v1/ai/agent`;
13
- }
14
- getInference(request, aiAgentArgs) {
15
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
- if ((0, core_1.isDev)(request.session)) {
17
- return this.agentTestInference(request, aiAgentArgs);
18
- }
19
- return this.agentInference(request, aiAgentArgs);
20
- });
21
- }
22
- agentTestInference(request, aiAgentArgs) {
23
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
24
- const config = this.getConfig(request);
25
- const data = this.getDataTest(request, aiAgentArgs);
26
- const response = yield axios_1.default.post(`${this.url}/test/`, data, config);
27
- return response.data;
9
+ constructor(aiAgentArgs, chatModel, tools = []) {
10
+ this.name = aiAgentArgs.name;
11
+ this.instructions = aiAgentArgs.instructions;
12
+ this.agent = (0, prebuilt_1.createReactAgent)({
13
+ llm: chatModel,
14
+ tools: tools,
15
+ prompt: this.instructions,
28
16
  });
29
17
  }
30
- agentInference(request, aiAgentArgs) {
18
+ runAgent(_messages) {
31
19
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
32
- const config = this.getConfig(request);
33
- const data = this.getData(request, aiAgentArgs);
34
- const response = yield axios_1.default.post(`${this.url}/run/`, data, config);
35
- return response.data;
20
+ const response = yield this.agent.invoke({
21
+ messages: _messages.map((message) => ({
22
+ role: message.role,
23
+ content: message.content,
24
+ })),
25
+ });
26
+ const lastMessage = response.messages.at(-1);
27
+ if (lastMessage instanceof messages_1.ToolMessage) {
28
+ if (lastMessage.name && tools_1.EXIT_TOOLS.includes(lastMessage.name)) {
29
+ return {
30
+ role: 'exit',
31
+ };
32
+ }
33
+ return {
34
+ role: 'tool',
35
+ toolName: lastMessage.name,
36
+ toolOutput: lastMessage.content,
37
+ };
38
+ }
39
+ if (lastMessage instanceof messages_1.AIMessage) {
40
+ return {
41
+ role: 'assistant',
42
+ content: lastMessage.content,
43
+ };
44
+ }
45
+ throw new Error('Last message is not a valid message');
36
46
  });
37
47
  }
38
- getConfig(request) {
39
- return {
40
- headers: {
41
- Authorization: `Bearer ${request.session._access_token}`,
42
- 'Content-Type': 'application/json',
43
- },
44
- };
45
- }
46
- getData(request, aiAgentArgs) {
47
- if (!request.input.data) {
48
- throw new errors_1.AiAgentError('No input data provided');
49
- }
50
- return {
51
- message: request.input.message_id,
52
- memory_length: 10,
53
- name: aiAgentArgs.name,
54
- instructions: aiAgentArgs.instructions,
55
- };
56
- }
57
- getDataTest(request, aiAgentArgs) {
58
- if (!request.input.data) {
59
- throw new errors_1.AiAgentError('No input data provided');
60
- }
61
- // TODO: We can get messages from localStorage in Dev mode and transform them to the correct format {role: MessageRole, content: string}
62
- // if (isDev(request.session)) {
63
- // const messages = localStorage.getItem('botonicState').
64
- // }
65
- return {
66
- messages: [
67
- {
68
- role: 'user',
69
- content: request.input.data,
70
- },
71
- ],
72
- name: aiAgentArgs.name,
73
- instructions: aiAgentArgs.instructions,
74
- };
75
- }
76
48
  }
77
49
  exports.AiAgentClient = AiAgentClient;
78
50
  //# sourceMappingURL=ai-agent-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-client.js","sourceRoot":"","sources":["../../src/ai-agent-client.ts"],"names":[],"mappings":";;;;AAAA,yDAAyD;AACzD,wCAAiD;AACjD,0DAAyB;AAEzB,2CAA6C;AAC7C,qCAAuC;AASvC,MAAa,aAAa;IAGxB;QACE,IAAI,CAAC,GAAG,GAAG,GAAG,2BAAe,uBAAuB,CAAA;IACtD,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,IAAI,IAAA,YAAK,EAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;aACrD;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAClD,CAAC;KAAA;IAEa,kBAAkB,CAC9B,OAAmB,EACnB,WAAwB;;YAExB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YACnD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,GAAG,QAAQ,EACnB,IAAI,EACJ,MAAM,CACP,CAAA;YAED,OAAO,QAAQ,CAAC,IAAI,CAAA;QACtB,CAAC;KAAA;IAEa,cAAc,CAC1B,OAAmB,EACnB,WAAwB;;YAExB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YAC/C,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,GAAG,OAAO,EAClB,IAAI,EACJ,MAAM,CACP,CAAA;YAED,OAAO,QAAQ,CAAC,IAAI,CAAA;QACtB,CAAC;KAAA;IAEO,SAAS,CAAC,OAAmB;QACnC,OAAO;YACL,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;gBACxD,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAA;IACH,CAAC;IAEO,OAAO,CACb,OAAmB,EACnB,WAAwB;QAExB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,MAAM,IAAI,qBAAY,CAAC,wBAAwB,CAAC,CAAA;SACjD;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACjC,aAAa,EAAE,EAAE;YACjB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAA;IACH,CAAC;IAEO,WAAW,CACjB,OAAmB,EACnB,WAAwB;QAExB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,MAAM,IAAI,qBAAY,CAAC,wBAAwB,CAAC,CAAA;SACjD;QAED,wIAAwI;QACxI,gCAAgC;QAChC,2DAA2D;QAC3D,IAAI;QAEJ,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBAC5B;aACF;YACD,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAA;IACH,CAAC;CACF;AAjGD,sCAiGC"}
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 +1,5 @@
1
1
  export declare const HUBTYPE_API_URL: string;
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
+ export declare const AZURE_OPENAI_API_BASE: string | undefined;
@@ -1,5 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HUBTYPE_API_URL = void 0;
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;
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;
8
+ exports.AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE;
5
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"}
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"}
@@ -0,0 +1,7 @@
1
+ import { BotContext } from '@botonic/core';
2
+ import { AgenticInputMessage } from './types';
3
+ export declare class HubtypeClient {
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.HubtypeClient = 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 HubtypeClient {
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.HubtypeClient = HubtypeClient;
37
+ //# sourceMappingURL=hubtype-client.js.map
@@ -0,0 +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,9 +1,9 @@
1
1
  import { BotContext, Plugin } from '@botonic/core';
2
- import { AiAgentClient } from './ai-agent-client';
3
- import { AiAgentArgs, AiAgentResponse } from './types';
2
+ import { AgenticOutputMessage, AiAgentArgs, PluginAiAgentOptions } from './types';
4
3
  export default class BotonicPluginAiAgents implements Plugin {
5
- aiAgentClient: AiAgentClient;
6
- constructor();
4
+ private readonly authToken?;
5
+ constructor(options?: PluginAiAgentOptions);
7
6
  pre(): void;
8
- getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<AiAgentResponse>;
7
+ getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<AgenticOutputMessage | undefined>;
9
8
  }
9
+ export * from './types';
package/lib/cjs/index.js CHANGED
@@ -2,18 +2,43 @@
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");
7
+ const utils_1 = require("./utils");
8
+ const isProd = process.env.NODE_ENV === 'production';
5
9
  class BotonicPluginAiAgents {
6
- constructor() {
7
- this.aiAgentClient = new ai_agent_client_1.AiAgentClient();
10
+ constructor(options) {
11
+ this.authToken = options === null || options === void 0 ? void 0 : options.authToken;
8
12
  }
9
13
  pre() {
10
14
  return;
11
15
  }
12
16
  getInference(request, aiAgentArgs) {
13
17
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
14
- return this.aiAgentClient.getInference(request, aiAgentArgs);
18
+ try {
19
+ const authToken = isProd ? request.session._access_token : this.authToken;
20
+ if (!authToken) {
21
+ throw new Error('Auth token is required');
22
+ }
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
+ ]);
33
+ return yield aiAgentClient.runAgent(messages);
34
+ }
35
+ catch (error) {
36
+ console.error('error plugin returns undefined', error);
37
+ return undefined;
38
+ }
15
39
  });
16
40
  }
17
41
  }
18
42
  exports.default = BotonicPluginAiAgents;
43
+ tslib_1.__exportStar(require("./types"), exports);
19
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,uDAAiD;AAGjD,MAAqB,qBAAqB;IAGxC;QACE,IAAI,CAAC,aAAa,GAAG,IAAI,+BAAa,EAAE,CAAA;IAC1C,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAC9D,CAAC;KAAA;CACF;AAjBD,wCAiBC"}
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"}
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ export declare const handoffToHumanAgent: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, {}, {}, null>;
3
+ export declare const outOfContext: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, {}, {}, null>;
4
+ export declare const finishConversation: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, {}, {}, null>;
5
+ export declare const MANDATORY_TOOLS: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, {}, {}, null>[];
6
+ export declare const EXIT_TOOLS: string[];
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXIT_TOOLS = exports.MANDATORY_TOOLS = exports.finishConversation = exports.outOfContext = exports.handoffToHumanAgent = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tools_1 = require("@langchain/core/tools");
6
+ const zod_1 = require("zod");
7
+ exports.handoffToHumanAgent = (0, tools_1.tool)(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
8
+ return null;
9
+ }), {
10
+ name: 'handoffToHumanAgent',
11
+ schema: zod_1.z.object({}),
12
+ description: 'Use this tool strictly when the user wants to talk with a human agent.',
13
+ returnDirect: true,
14
+ });
15
+ exports.outOfContext = (0, tools_1.tool)(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
16
+ return null;
17
+ }), {
18
+ name: 'outOfContext',
19
+ schema: zod_1.z.object({}),
20
+ description: 'Use this when the user talks about something that is clearly out of your context. Example: "I want to buy a car" when you are a travel agent.',
21
+ returnDirect: true,
22
+ });
23
+ exports.finishConversation = (0, tools_1.tool)(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
24
+ return null;
25
+ }), {
26
+ name: 'finishConversation',
27
+ schema: zod_1.z.object({}),
28
+ description: 'Use this when the user wants to end the conversation.',
29
+ returnDirect: true,
30
+ });
31
+ exports.MANDATORY_TOOLS = [
32
+ exports.handoffToHumanAgent,
33
+ exports.outOfContext,
34
+ exports.finishConversation,
35
+ ];
36
+ exports.EXIT_TOOLS = [
37
+ exports.handoffToHumanAgent.name,
38
+ exports.outOfContext.name,
39
+ exports.finishConversation.name,
40
+ ];
41
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
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,31 +1,29 @@
1
+ export interface PluginAiAgentOptions {
2
+ authToken?: string;
3
+ }
1
4
  export interface AiAgentArgs {
2
5
  name: string;
3
6
  instructions: string;
4
7
  }
5
- export interface Config {
6
- headers: {
7
- Authorization: string;
8
- 'Content-Type': string;
9
- };
8
+ export interface AgenticBaseMessage {
9
+ role: 'assistant' | 'user' | 'tool' | 'exit';
10
10
  }
11
- export interface AiAgentRequestDataTest {
12
- messages: {
13
- role: MessageRole;
14
- content: string;
15
- }[];
16
- name: string;
17
- instructions: string;
11
+ export interface AssistantMessage extends AgenticBaseMessage {
12
+ role: 'assistant';
13
+ content: string;
18
14
  }
19
- export type MessageRole = 'user' | 'assistant';
20
- export interface AiAgentRequestData {
21
- message: string;
22
- memory_length: number;
23
- name: string;
24
- instructions: string;
15
+ export interface UserMessage extends AgenticBaseMessage {
16
+ role: 'user';
17
+ content: string;
18
+ }
19
+ export interface ToolMessage extends AgenticBaseMessage {
20
+ role: 'tool';
21
+ toolName: string;
22
+ toolOutput: string | null;
25
23
  }
26
- export interface AiAgentResponse {
27
- message: {
28
- role: string;
29
- content: string;
30
- };
24
+ export interface ExitMessage extends AgenticBaseMessage {
25
+ role: 'exit';
31
26
  }
27
+ export type AgenticInputMessage = AssistantMessage | UserMessage;
28
+ export type AgenticOutputMessage = AssistantMessage | ToolMessage | ExitMessage;
29
+ export type AgenticMessage = AssistantMessage | UserMessage | ToolMessage | ExitMessage;
@@ -0,0 +1,2 @@
1
+ import { AzureChatOpenAI } from '@langchain/openai';
2
+ export declare function loadChatModel(provider: 'azureOpenAI'): AzureChatOpenAI;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadChatModel = void 0;
4
+ const openai_1 = require("@langchain/openai");
5
+ const constants_1 = require("./constants");
6
+ function loadChatModel(provider) {
7
+ switch (provider) {
8
+ case 'azureOpenAI':
9
+ return new openai_1.AzureChatOpenAI({
10
+ azureOpenAIApiVersion: constants_1.AZURE_OPENAI_API_VERSION,
11
+ azureOpenAIApiKey: constants_1.AZURE_OPENAI_API_KEY,
12
+ azureOpenAIApiDeploymentName: constants_1.AZURE_OPENAI_API_DEPLOYMENT_NAME,
13
+ azureOpenAIEndpoint: constants_1.AZURE_OPENAI_API_BASE,
14
+ temperature: 0,
15
+ // other params...
16
+ });
17
+ default:
18
+ throw new Error(`Provider ${provider} not supported`);
19
+ }
20
+ }
21
+ exports.loadChatModel = loadChatModel;
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +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,12 +1,11 @@
1
- import { BotContext } from '@botonic/core';
2
- import { AiAgentArgs, AiAgentResponse } from './types';
1
+ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
2
+ import { StructuredTool } from '@langchain/core/tools';
3
+ import { CompiledStateGraph } from '@langchain/langgraph';
4
+ import { AgenticInputMessage, AgenticOutputMessage, AiAgentArgs } from './types';
3
5
  export declare class AiAgentClient {
4
- private url;
5
- constructor();
6
- getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<AiAgentResponse>;
7
- private agentTestInference;
8
- private agentInference;
9
- private getConfig;
10
- private getData;
11
- private getDataTest;
6
+ name: string;
7
+ instructions: string;
8
+ agent: CompiledStateGraph<any, any>;
9
+ constructor(aiAgentArgs: AiAgentArgs, chatModel: BaseChatModel, tools?: StructuredTool[]);
10
+ runAgent(_messages: AgenticInputMessage[]): Promise<AgenticOutputMessage>;
12
11
  }
@@ -1,74 +1,46 @@
1
1
  import { __awaiter } from "tslib";
2
- /* eslint-disable @typescript-eslint/naming-convention */
3
- import { isDev } from '@botonic/core';
4
- import axios from 'axios';
5
- import { HUBTYPE_API_URL } from './constants';
6
- import { AiAgentError } from './errors';
2
+ import { AIMessage as LangchainAIMessage, ToolMessage as LangchainToolMessage, } from '@langchain/core/messages';
3
+ import { createReactAgent } from '@langchain/langgraph/prebuilt';
4
+ import { EXIT_TOOLS } from './tools';
7
5
  export class AiAgentClient {
8
- constructor() {
9
- this.url = `${HUBTYPE_API_URL}/external/v1/ai/agent`;
10
- }
11
- getInference(request, aiAgentArgs) {
12
- return __awaiter(this, void 0, void 0, function* () {
13
- if (isDev(request.session)) {
14
- return this.agentTestInference(request, aiAgentArgs);
15
- }
16
- return this.agentInference(request, aiAgentArgs);
17
- });
18
- }
19
- agentTestInference(request, aiAgentArgs) {
20
- return __awaiter(this, void 0, void 0, function* () {
21
- const config = this.getConfig(request);
22
- const data = this.getDataTest(request, aiAgentArgs);
23
- const response = yield axios.post(`${this.url}/test/`, data, config);
24
- return response.data;
6
+ constructor(aiAgentArgs, chatModel, tools = []) {
7
+ this.name = aiAgentArgs.name;
8
+ this.instructions = aiAgentArgs.instructions;
9
+ this.agent = createReactAgent({
10
+ llm: chatModel,
11
+ tools: tools,
12
+ prompt: this.instructions,
25
13
  });
26
14
  }
27
- agentInference(request, aiAgentArgs) {
15
+ runAgent(_messages) {
28
16
  return __awaiter(this, void 0, void 0, function* () {
29
- const config = this.getConfig(request);
30
- const data = this.getData(request, aiAgentArgs);
31
- const response = yield axios.post(`${this.url}/run/`, data, config);
32
- return response.data;
17
+ const response = yield this.agent.invoke({
18
+ messages: _messages.map((message) => ({
19
+ role: message.role,
20
+ content: message.content,
21
+ })),
22
+ });
23
+ const lastMessage = response.messages.at(-1);
24
+ if (lastMessage instanceof LangchainToolMessage) {
25
+ if (lastMessage.name && EXIT_TOOLS.includes(lastMessage.name)) {
26
+ return {
27
+ role: 'exit',
28
+ };
29
+ }
30
+ return {
31
+ role: 'tool',
32
+ toolName: lastMessage.name,
33
+ toolOutput: lastMessage.content,
34
+ };
35
+ }
36
+ if (lastMessage instanceof LangchainAIMessage) {
37
+ return {
38
+ role: 'assistant',
39
+ content: lastMessage.content,
40
+ };
41
+ }
42
+ throw new Error('Last message is not a valid message');
33
43
  });
34
44
  }
35
- getConfig(request) {
36
- return {
37
- headers: {
38
- Authorization: `Bearer ${request.session._access_token}`,
39
- 'Content-Type': 'application/json',
40
- },
41
- };
42
- }
43
- getData(request, aiAgentArgs) {
44
- if (!request.input.data) {
45
- throw new AiAgentError('No input data provided');
46
- }
47
- return {
48
- message: request.input.message_id,
49
- memory_length: 10,
50
- name: aiAgentArgs.name,
51
- instructions: aiAgentArgs.instructions,
52
- };
53
- }
54
- getDataTest(request, aiAgentArgs) {
55
- if (!request.input.data) {
56
- throw new AiAgentError('No input data provided');
57
- }
58
- // TODO: We can get messages from localStorage in Dev mode and transform them to the correct format {role: MessageRole, content: string}
59
- // if (isDev(request.session)) {
60
- // const messages = localStorage.getItem('botonicState').
61
- // }
62
- return {
63
- messages: [
64
- {
65
- role: 'user',
66
- content: request.input.data,
67
- },
68
- ],
69
- name: aiAgentArgs.name,
70
- instructions: aiAgentArgs.instructions,
71
- };
72
- }
73
45
  }
74
46
  //# sourceMappingURL=ai-agent-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-client.js","sourceRoot":"","sources":["../../src/ai-agent-client.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,OAAO,EAAc,KAAK,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AASvC,MAAM,OAAO,aAAa;IAGxB;QACE,IAAI,CAAC,GAAG,GAAG,GAAG,eAAe,uBAAuB,CAAA;IACtD,CAAC;IAEK,YAAY,CAChB,OAAmB,EACnB,WAAwB;;YAExB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;aACrD;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAClD,CAAC;KAAA;IAEa,kBAAkB,CAC9B,OAAmB,EACnB,WAAwB;;YAExB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,GAAG,QAAQ,EACnB,IAAI,EACJ,MAAM,CACP,CAAA;YAED,OAAO,QAAQ,CAAC,IAAI,CAAA;QACtB,CAAC;KAAA;IAEa,cAAc,CAC1B,OAAmB,EACnB,WAAwB;;YAExB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,GAAG,OAAO,EAClB,IAAI,EACJ,MAAM,CACP,CAAA;YAED,OAAO,QAAQ,CAAC,IAAI,CAAA;QACtB,CAAC;KAAA;IAEO,SAAS,CAAC,OAAmB;QACnC,OAAO;YACL,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;gBACxD,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAA;IACH,CAAC;IAEO,OAAO,CACb,OAAmB,EACnB,WAAwB;QAExB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAA;SACjD;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACjC,aAAa,EAAE,EAAE;YACjB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAA;IACH,CAAC;IAEO,WAAW,CACjB,OAAmB,EACnB,WAAwB;QAExB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAA;SACjD;QAED,wIAAwI;QACxI,gCAAgC;QAChC,2DAA2D;QAC3D,IAAI;QAEJ,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBAC5B;aACF;YACD,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAA;IACH,CAAC;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,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 +1,5 @@
1
1
  export declare const HUBTYPE_API_URL: string;
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
+ export declare const AZURE_OPENAI_API_BASE: string | undefined;
@@ -1,2 +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;
5
+ export const AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE;
2
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"}
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"}
@@ -0,0 +1,7 @@
1
+ import { BotContext } from '@botonic/core';
2
+ import { AgenticInputMessage } from './types';
3
+ export declare class HubtypeClient {
4
+ private readonly authToken;
5
+ constructor(authToken: string);
6
+ getMessages(request: BotContext, memoryLength: number): Promise<AgenticInputMessage[]>;
7
+ }