@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.
- package/README.md +14 -0
- package/lib/cjs/ai-agent-client.d.ts +0 -2
- package/lib/cjs/ai-agent-client.js +4 -5
- package/lib/cjs/ai-agent-client.js.map +1 -1
- package/lib/cjs/constants.d.ts +2 -2
- package/lib/cjs/constants.js +4 -4
- package/lib/cjs/constants.js.map +1 -1
- package/lib/cjs/hubtype-api-client.d.ts +7 -0
- package/lib/cjs/hubtype-api-client.js +37 -0
- package/lib/cjs/hubtype-api-client.js.map +1 -0
- package/lib/cjs/hubtype-client.d.ts +1 -1
- package/lib/cjs/hubtype-client.js +3 -3
- package/lib/cjs/hubtype-client.js.map +1 -1
- package/lib/cjs/index.d.ts +3 -1
- package/lib/cjs/index.js +19 -12
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/tools/custom.d.ts +3 -0
- package/lib/cjs/tools/custom.js +14 -0
- package/lib/cjs/tools/custom.js.map +1 -0
- package/lib/cjs/{tools.js → tools/default.js} +1 -1
- package/lib/cjs/tools/default.js.map +1 -0
- package/lib/cjs/types.d.ts +9 -0
- package/lib/cjs/utils.d.ts +4 -1
- package/lib/cjs/utils.js +6 -2
- package/lib/cjs/utils.js.map +1 -1
- package/lib/esm/ai-agent-client.d.ts +0 -2
- package/lib/esm/ai-agent-client.js +3 -4
- package/lib/esm/ai-agent-client.js.map +1 -1
- package/lib/esm/constants.d.ts +2 -2
- package/lib/esm/constants.js +3 -3
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/hubtype-api-client.d.ts +7 -0
- package/lib/esm/hubtype-api-client.js +33 -0
- package/lib/esm/hubtype-api-client.js.map +1 -0
- package/lib/esm/hubtype-client.d.ts +1 -1
- package/lib/esm/hubtype-client.js +1 -1
- package/lib/esm/hubtype-client.js.map +1 -1
- package/lib/esm/index.d.ts +3 -1
- package/lib/esm/index.js +20 -13
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/tools/custom.d.ts +3 -0
- package/lib/esm/tools/custom.js +10 -0
- package/lib/esm/tools/custom.js.map +1 -0
- package/lib/esm/{tools.js → tools/default.js} +1 -1
- package/lib/esm/tools/default.js.map +1 -0
- package/lib/esm/types.d.ts +9 -0
- package/lib/esm/utils.d.ts +4 -1
- package/lib/esm/utils.js +5 -1
- package/lib/esm/utils.js.map +1 -1
- package/package.json +3 -2
- package/src/ai-agent-client.ts +3 -7
- package/src/constants.ts +5 -4
- package/src/hubtype-api-client.ts +43 -0
- package/src/hubtype-client.ts +1 -1
- package/src/index.ts +30 -13
- package/src/tools/custom.ts +14 -0
- package/src/{tools.ts → tools/default.ts} +1 -0
- package/src/types.ts +11 -0
- package/src/utils.ts +6 -2
- package/lib/cjs/tools.js.map +0 -1
- package/lib/esm/tools.js.map +0 -1
- /package/lib/cjs/{tools.d.ts → tools/default.d.ts} +0 -0
- /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
|
|
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:
|
|
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 &&
|
|
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,
|
|
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"}
|
package/lib/cjs/constants.d.ts
CHANGED
|
@@ -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;
|
package/lib/cjs/constants.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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
|
package/lib/cjs/constants.js.map
CHANGED
|
@@ -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;
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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,
|
|
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"}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -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
|
|
6
|
-
const
|
|
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
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
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);
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,uDAAiD;AACjD,
|
|
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,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"}
|
|
@@ -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"}
|
package/lib/cjs/types.d.ts
CHANGED
|
@@ -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;
|
package/lib/cjs/utils.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import { AzureChatOpenAI } from '@langchain/openai';
|
|
2
|
-
export declare
|
|
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
|
|
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,
|
package/lib/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,8CAAmD;AAEnD,2CAKoB;AAEpB,SAAgB,aAAa,CAAC,
|
|
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:
|
|
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,
|
|
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"}
|
package/lib/esm/constants.d.ts
CHANGED
|
@@ -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;
|
package/lib/esm/constants.js
CHANGED
|
@@ -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
|
package/lib/esm/constants.js.map
CHANGED
|
@@ -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;
|
|
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
|
|
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 +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,
|
|
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"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -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 {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
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
|
package/lib/esm/index.js.map
CHANGED
|
@@ -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,
|
|
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,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"}
|
|
@@ -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"}
|
package/lib/esm/types.d.ts
CHANGED
|
@@ -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;
|
package/lib/esm/utils.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import { AzureChatOpenAI } from '@langchain/openai';
|
|
2
|
-
export declare
|
|
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
|
|
9
|
+
case AiProvider.AzureOpenAI:
|
|
6
10
|
return new AzureChatOpenAI({
|
|
7
11
|
azureOpenAIApiVersion: AZURE_OPENAI_API_VERSION,
|
|
8
12
|
azureOpenAIApiKey: AZURE_OPENAI_API_KEY,
|
package/lib/esm/utils.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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"
|
package/src/ai-agent-client.ts
CHANGED
|
@@ -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:
|
|
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
|
+
}
|
package/src/hubtype-client.ts
CHANGED
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 {
|
|
5
|
-
import {
|
|
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
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
42
|
-
const chatModel = loadChatModel(
|
|
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
|
+
}
|
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
|
|
10
|
+
export enum AiProvider {
|
|
11
|
+
AzureOpenAI = 'azureOpenAI',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function loadChatModel(provider: AiProvider) {
|
|
11
15
|
switch (provider) {
|
|
12
|
-
case
|
|
16
|
+
case AiProvider.AzureOpenAI:
|
|
13
17
|
return new AzureChatOpenAI({
|
|
14
18
|
azureOpenAIApiVersion: AZURE_OPENAI_API_VERSION,
|
|
15
19
|
azureOpenAIApiKey: AZURE_OPENAI_API_KEY,
|
package/lib/cjs/tools.js.map
DELETED
|
@@ -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"}
|
package/lib/esm/tools.js.map
DELETED
|
@@ -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
|