@botonic/plugin-ai-agents 0.40.1 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/constants.js +2 -2
- package/lib/cjs/hubtype-api-client.d.ts +2 -2
- package/lib/cjs/hubtype-api-client.js +7 -3
- package/lib/cjs/hubtype-api-client.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.js +7 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/runner.d.ts +4 -2
- package/lib/cjs/runner.js +34 -8
- package/lib/cjs/runner.js.map +1 -1
- package/lib/cjs/tools/retrieve-knowledge.js +10 -3
- package/lib/cjs/tools/retrieve-knowledge.js.map +1 -1
- package/lib/cjs/types.d.ts +11 -1
- package/lib/esm/constants.js +2 -2
- package/lib/esm/hubtype-api-client.d.ts +2 -2
- package/lib/esm/hubtype-api-client.js +7 -3
- package/lib/esm/hubtype-api-client.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +7 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/runner.d.ts +4 -2
- package/lib/esm/runner.js +34 -8
- package/lib/esm/runner.js.map +1 -1
- package/lib/esm/tools/retrieve-knowledge.js +10 -3
- package/lib/esm/tools/retrieve-knowledge.js.map +1 -1
- package/lib/esm/types.d.ts +11 -1
- package/package.json +5 -5
- package/src/constants.ts +2 -2
- package/src/hubtype-api-client.ts +9 -5
- package/src/index.ts +11 -5
- package/src/runner.ts +51 -12
- package/src/tools/retrieve-knowledge.ts +12 -3
- package/src/types.ts +12 -1
package/lib/cjs/constants.js
CHANGED
|
@@ -4,8 +4,8 @@ exports.MAX_MEMORY_LENGTH = exports.isProd = exports.AZURE_OPENAI_API_VERSION =
|
|
|
4
4
|
exports.HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
|
|
5
5
|
exports.AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY; // pragma: allowlist secret
|
|
6
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-
|
|
8
|
-
exports.AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION || '
|
|
7
|
+
exports.AZURE_OPENAI_API_DEPLOYMENT_NAME = process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-41-mini_p1';
|
|
8
|
+
exports.AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION || '2025-01-01-preview';
|
|
9
9
|
exports.isProd = process.env.NODE_ENV === 'production';
|
|
10
10
|
exports.MAX_MEMORY_LENGTH = 25;
|
|
11
11
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BotContext } from '@botonic/core';
|
|
2
|
-
import { AgenticInputMessage } from './types';
|
|
2
|
+
import { AgenticInputMessage, Chunk } from './types';
|
|
3
3
|
export declare class HubtypeApiClient {
|
|
4
4
|
private readonly authToken;
|
|
5
5
|
constructor(authToken: string);
|
|
6
|
-
retrieveSimilarChunks(query: string,
|
|
6
|
+
retrieveSimilarChunks(query: string, sourceIds: string[]): Promise<Chunk[]>;
|
|
7
7
|
getLocalMessages(maxMemoryLength: number): Promise<AgenticInputMessage[]>;
|
|
8
8
|
getMessages(request: BotContext, maxMemoryLength: number): Promise<AgenticInputMessage[]>;
|
|
9
9
|
private formatMessage;
|
|
@@ -8,7 +8,7 @@ class HubtypeApiClient {
|
|
|
8
8
|
constructor(authToken) {
|
|
9
9
|
this.authToken = authToken;
|
|
10
10
|
}
|
|
11
|
-
retrieveSimilarChunks(query,
|
|
11
|
+
retrieveSimilarChunks(query, sourceIds) {
|
|
12
12
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
13
13
|
const url = `${constants_1.HUBTYPE_API_URL}/external/v1/ai/knowledge_base/similar_chunks/`;
|
|
14
14
|
const headers = {
|
|
@@ -17,11 +17,15 @@ class HubtypeApiClient {
|
|
|
17
17
|
};
|
|
18
18
|
const params = {
|
|
19
19
|
query,
|
|
20
|
-
source_ids:
|
|
20
|
+
source_ids: sourceIds,
|
|
21
21
|
num_chunks: 5,
|
|
22
22
|
};
|
|
23
23
|
const response = yield axios_1.default.post(url, params, { headers });
|
|
24
|
-
|
|
24
|
+
const chunks = response.data.chunks.map((chunk) => ({
|
|
25
|
+
id: chunk.id,
|
|
26
|
+
text: chunk.text,
|
|
27
|
+
}));
|
|
28
|
+
return chunks;
|
|
25
29
|
});
|
|
26
30
|
}
|
|
27
31
|
getLocalMessages(maxMemoryLength) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../src/hubtype-api-client.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AAEzB,2CAA6C;AAe7C,MAAa,gBAAgB;IAG3B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,qBAAqB,CACzB,KAAa,EACb,
|
|
1
|
+
{"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../src/hubtype-api-client.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export default class BotonicPluginAiAgents<TPlugins extends ResolvedPlugins = Re
|
|
|
5
5
|
toolDefinitions: CustomTool<TPlugins, TExtraData>[];
|
|
6
6
|
constructor(options?: PluginAiAgentOptions<TPlugins, TExtraData>);
|
|
7
7
|
pre(): void;
|
|
8
|
-
getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<InferenceResponse>;
|
|
8
|
+
getInference(request: BotContext<TPlugins, TExtraData>, aiAgentArgs: AiAgentArgs): Promise<InferenceResponse>;
|
|
9
9
|
private getMessages;
|
|
10
10
|
private buildTools;
|
|
11
11
|
}
|
package/lib/cjs/index.js
CHANGED
|
@@ -30,8 +30,14 @@ class BotonicPluginAiAgents {
|
|
|
30
30
|
const messages = yield this.getMessages(request, authToken, constants_1.MAX_MEMORY_LENGTH);
|
|
31
31
|
const context = {
|
|
32
32
|
authToken,
|
|
33
|
+
sourceIds: aiAgentArgs.sourceIds || [],
|
|
34
|
+
knowledgeUsed: {
|
|
35
|
+
query: '',
|
|
36
|
+
sourceIds: [],
|
|
37
|
+
chunksIds: [],
|
|
38
|
+
chunkTexts: [],
|
|
39
|
+
},
|
|
33
40
|
request,
|
|
34
|
-
sources: aiAgentArgs.sourceIds || [],
|
|
35
41
|
};
|
|
36
42
|
const runner = new runner_1.AIAgentRunner(agent);
|
|
37
43
|
return yield runner.run(messages, context);
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,2CAAqC;AAErC,mDAAgD;AAChD,2CAAuD;AACvD,6DAAuD;AACvD,qCAAsC;AACtC,qCAAwC;AAUxC,MAAqB,qBAAqB;IAQxC,YAAY,OAAoD;QAFzD,oBAAe,GAAuC,EAAE,CAAA;QAG7D,IAAA,oBAAW,GAAE,CAAA;QACb,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,EAAE,CAAA;IACnD,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/runner.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import { AgenticInputMessage, AIAgent, Context, RunResult } from './types';
|
|
|
3
3
|
export declare class AIAgentRunner<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
|
|
4
4
|
private agent;
|
|
5
5
|
constructor(agent: AIAgent<TPlugins, TExtraData>);
|
|
6
|
-
run(messages: AgenticInputMessage[], context: Context, maxRetries?: number): Promise<RunResult>;
|
|
6
|
+
run(messages: AgenticInputMessage[], context: Context<TPlugins, TExtraData>, maxRetries?: number): Promise<RunResult>;
|
|
7
7
|
private runWithRetry;
|
|
8
|
-
private
|
|
8
|
+
private getToolsExecuted;
|
|
9
|
+
private getToolExecutionInfo;
|
|
10
|
+
private getSafeToolArguments;
|
|
9
11
|
}
|
package/lib/cjs/runner.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AIAgentRunner = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const agents_1 = require("@openai/agents");
|
|
6
|
+
const tools_1 = require("./tools");
|
|
6
7
|
class AIAgentRunner {
|
|
7
8
|
constructor(agent) {
|
|
8
9
|
this.agent = agent;
|
|
@@ -23,7 +24,7 @@ class AIAgentRunner {
|
|
|
23
24
|
const outputMessages = ((_a = result.finalOutput) === null || _a === void 0 ? void 0 : _a.messages) || [];
|
|
24
25
|
const hasExit = outputMessages.length === 0 ||
|
|
25
26
|
outputMessages.some(message => message.type === 'exit');
|
|
26
|
-
const toolsExecuted = this.
|
|
27
|
+
const toolsExecuted = this.getToolsExecuted(result, context);
|
|
27
28
|
return {
|
|
28
29
|
messages: hasExit
|
|
29
30
|
? []
|
|
@@ -55,14 +56,39 @@ class AIAgentRunner {
|
|
|
55
56
|
}
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
+
getToolsExecuted(result, context) {
|
|
59
60
|
var _a;
|
|
60
|
-
return (((_a = result.newItems) === null || _a === void 0 ? void 0 : _a.filter(item => item instanceof agents_1.RunToolCallItem).map((item) =>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return
|
|
65
|
-
|
|
61
|
+
return (((_a = result.newItems) === null || _a === void 0 ? void 0 : _a.filter(item => item instanceof agents_1.RunToolCallItem).map((item) => this.getToolExecutionInfo(item, context)).filter((toolExecution) => toolExecution.toolName !== '')) || []);
|
|
62
|
+
}
|
|
63
|
+
getToolExecutionInfo(item, context) {
|
|
64
|
+
if (item.rawItem.type !== 'function_call') {
|
|
65
|
+
return {
|
|
66
|
+
toolName: '',
|
|
67
|
+
toolArguments: {},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const toolName = item.rawItem.name;
|
|
71
|
+
const toolArguments = this.getSafeToolArguments(item.rawItem.arguments);
|
|
72
|
+
if (toolName === tools_1.retrieveKnowledge.name) {
|
|
73
|
+
return {
|
|
74
|
+
toolName,
|
|
75
|
+
toolArguments,
|
|
76
|
+
knowledgebaseSourcesIds: context.knowledgeUsed.sourceIds,
|
|
77
|
+
knowledgebaseChunksIds: context.knowledgeUsed.chunksIds,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
toolName,
|
|
82
|
+
toolArguments,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
getSafeToolArguments(rawToolArguments) {
|
|
86
|
+
try {
|
|
87
|
+
return JSON.parse(rawToolArguments);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return {};
|
|
91
|
+
}
|
|
66
92
|
}
|
|
67
93
|
}
|
|
68
94
|
exports.AIAgentRunner = AIAgentRunner;
|
package/lib/cjs/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":";;;;AACA,2CAIuB;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,10 +16,17 @@ exports.retrieveKnowledge = (0, agents_1.tool)({
|
|
|
16
16
|
if (!context) {
|
|
17
17
|
throw new Error('Context is required');
|
|
18
18
|
}
|
|
19
|
-
const
|
|
19
|
+
const sourceIds = context.sourceIds;
|
|
20
20
|
const client = new hubtype_api_client_1.HubtypeApiClient(context.authToken);
|
|
21
|
-
const chunks = yield client.retrieveSimilarChunks(query,
|
|
22
|
-
|
|
21
|
+
const chunks = yield client.retrieveSimilarChunks(query, sourceIds);
|
|
22
|
+
const chunkTexts = chunks.map(chunk => chunk.text);
|
|
23
|
+
context.knowledgeUsed = {
|
|
24
|
+
query,
|
|
25
|
+
sourceIds,
|
|
26
|
+
chunksIds: chunks.map(chunk => chunk.id),
|
|
27
|
+
chunkTexts,
|
|
28
|
+
};
|
|
29
|
+
return chunkTexts;
|
|
23
30
|
}),
|
|
24
31
|
});
|
|
25
32
|
//# sourceMappingURL=retrieve-knowledge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieve-knowledge.js","sourceRoot":"","sources":["../../../src/tools/retrieve-knowledge.ts"],"names":[],"mappings":";;;;AAAA,2CAAiD;AACjD,6BAAuB;AAEvB,8DAAwD;AAG3C,QAAA,iBAAiB,GAAG,IAAA,aAAI,EAAoB;IACvD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,CACP,EAAE,KAAK,EAAqB,EAC5B,UAAgC,EACb,EAAE;QACrB,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACvC;QACD,MAAM,
|
|
1
|
+
{"version":3,"file":"retrieve-knowledge.js","sourceRoot":"","sources":["../../../src/tools/retrieve-knowledge.ts"],"names":[],"mappings":";;;;AAAA,2CAAiD;AACjD,6BAAuB;AAEvB,8DAAwD;AAG3C,QAAA,iBAAiB,GAAG,IAAA,aAAI,EAAoB;IACvD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,CACP,EAAE,KAAK,EAAqB,EAC5B,UAAgC,EACb,EAAE;QACrB,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACvC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,qCAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACnE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElD,OAAO,CAAC,aAAa,GAAG;YACtB,KAAK;YACL,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,UAAU;SACX,CAAA;QAED,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;CACF,CAAC,CAAA"}
|
package/lib/cjs/types.d.ts
CHANGED
|
@@ -4,8 +4,14 @@ import { ZodSchema } from 'zod';
|
|
|
4
4
|
import { OutputSchema } from './structured-output';
|
|
5
5
|
export interface Context<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
|
|
6
6
|
authToken: string;
|
|
7
|
+
sourceIds: string[];
|
|
8
|
+
knowledgeUsed: {
|
|
9
|
+
query: string;
|
|
10
|
+
sourceIds: string[];
|
|
11
|
+
chunksIds: string[];
|
|
12
|
+
chunkTexts: string[];
|
|
13
|
+
};
|
|
7
14
|
request: BotContext<TPlugins, TExtraData>;
|
|
8
|
-
sources: string[];
|
|
9
15
|
}
|
|
10
16
|
export type RunContext<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = OpenAIRunContext<Context<TPlugins, TExtraData>>;
|
|
11
17
|
export interface CustomTool<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
|
|
@@ -14,6 +20,10 @@ export interface CustomTool<TPlugins extends ResolvedPlugins = ResolvedPlugins,
|
|
|
14
20
|
schema: ZodSchema;
|
|
15
21
|
func: (input?: any, runContext?: RunContext<TPlugins, TExtraData>) => Promise<any>;
|
|
16
22
|
}
|
|
23
|
+
export interface Chunk {
|
|
24
|
+
id: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}
|
|
17
27
|
export type ContactInfo = Record<string, string>;
|
|
18
28
|
export type Tool<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = OpenAITool<Context<TPlugins, TExtraData>>;
|
|
19
29
|
export type AIAgent<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = Agent<Context<TPlugins, TExtraData>, typeof OutputSchema>;
|
package/lib/esm/constants.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export const HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
|
|
2
2
|
export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY; // pragma: allowlist secret
|
|
3
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-
|
|
5
|
-
export const AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION || '
|
|
4
|
+
export const AZURE_OPENAI_API_DEPLOYMENT_NAME = process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-41-mini_p1';
|
|
5
|
+
export const AZURE_OPENAI_API_VERSION = process.env.AZURE_OPENAI_API_VERSION || '2025-01-01-preview';
|
|
6
6
|
export const isProd = process.env.NODE_ENV === 'production';
|
|
7
7
|
export const MAX_MEMORY_LENGTH = 25;
|
|
8
8
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BotContext } from '@botonic/core';
|
|
2
|
-
import { AgenticInputMessage } from './types';
|
|
2
|
+
import { AgenticInputMessage, Chunk } from './types';
|
|
3
3
|
export declare class HubtypeApiClient {
|
|
4
4
|
private readonly authToken;
|
|
5
5
|
constructor(authToken: string);
|
|
6
|
-
retrieveSimilarChunks(query: string,
|
|
6
|
+
retrieveSimilarChunks(query: string, sourceIds: string[]): Promise<Chunk[]>;
|
|
7
7
|
getLocalMessages(maxMemoryLength: number): Promise<AgenticInputMessage[]>;
|
|
8
8
|
getMessages(request: BotContext, maxMemoryLength: number): Promise<AgenticInputMessage[]>;
|
|
9
9
|
private formatMessage;
|
|
@@ -5,7 +5,7 @@ export class HubtypeApiClient {
|
|
|
5
5
|
constructor(authToken) {
|
|
6
6
|
this.authToken = authToken;
|
|
7
7
|
}
|
|
8
|
-
retrieveSimilarChunks(query,
|
|
8
|
+
retrieveSimilarChunks(query, sourceIds) {
|
|
9
9
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10
10
|
const url = `${HUBTYPE_API_URL}/external/v1/ai/knowledge_base/similar_chunks/`;
|
|
11
11
|
const headers = {
|
|
@@ -14,11 +14,15 @@ export class HubtypeApiClient {
|
|
|
14
14
|
};
|
|
15
15
|
const params = {
|
|
16
16
|
query,
|
|
17
|
-
source_ids:
|
|
17
|
+
source_ids: sourceIds,
|
|
18
18
|
num_chunks: 5,
|
|
19
19
|
};
|
|
20
20
|
const response = yield axios.post(url, params, { headers });
|
|
21
|
-
|
|
21
|
+
const chunks = response.data.chunks.map((chunk) => ({
|
|
22
|
+
id: chunk.id,
|
|
23
|
+
text: chunk.text,
|
|
24
|
+
}));
|
|
25
|
+
return chunks;
|
|
22
26
|
});
|
|
23
27
|
}
|
|
24
28
|
getLocalMessages(maxMemoryLength) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../src/hubtype-api-client.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAe7C,MAAM,OAAO,gBAAgB;IAG3B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEK,qBAAqB,CACzB,KAAa,EACb,
|
|
1
|
+
{"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../src/hubtype-api-client.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export default class BotonicPluginAiAgents<TPlugins extends ResolvedPlugins = Re
|
|
|
5
5
|
toolDefinitions: CustomTool<TPlugins, TExtraData>[];
|
|
6
6
|
constructor(options?: PluginAiAgentOptions<TPlugins, TExtraData>);
|
|
7
7
|
pre(): void;
|
|
8
|
-
getInference(request: BotContext, aiAgentArgs: AiAgentArgs): Promise<InferenceResponse>;
|
|
8
|
+
getInference(request: BotContext<TPlugins, TExtraData>, aiAgentArgs: AiAgentArgs): Promise<InferenceResponse>;
|
|
9
9
|
private getMessages;
|
|
10
10
|
private buildTools;
|
|
11
11
|
}
|
package/lib/esm/index.js
CHANGED
|
@@ -28,8 +28,14 @@ export default class BotonicPluginAiAgents {
|
|
|
28
28
|
const messages = yield this.getMessages(request, authToken, MAX_MEMORY_LENGTH);
|
|
29
29
|
const context = {
|
|
30
30
|
authToken,
|
|
31
|
+
sourceIds: aiAgentArgs.sourceIds || [],
|
|
32
|
+
knowledgeUsed: {
|
|
33
|
+
query: '',
|
|
34
|
+
sourceIds: [],
|
|
35
|
+
chunksIds: [],
|
|
36
|
+
chunkTexts: [],
|
|
37
|
+
},
|
|
31
38
|
request,
|
|
32
|
-
sources: aiAgentArgs.sourceIds || [],
|
|
33
39
|
};
|
|
34
40
|
const runner = new AIAgentRunner(agent);
|
|
35
41
|
return yield runner.run(messages, context);
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAUxC,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAQxC,YAAY,OAAoD;QAFzD,oBAAe,GAAuC,EAAE,CAAA;QAG7D,WAAW,EAAE,CAAA;QACb,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,EAAE,CAAA;IACnD,CAAC;IAED,GAAG;QACD,OAAM;IACR,CAAC;IAEK,YAAY,CAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/runner.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import { AgenticInputMessage, AIAgent, Context, RunResult } from './types';
|
|
|
3
3
|
export declare class AIAgentRunner<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
|
|
4
4
|
private agent;
|
|
5
5
|
constructor(agent: AIAgent<TPlugins, TExtraData>);
|
|
6
|
-
run(messages: AgenticInputMessage[], context: Context, maxRetries?: number): Promise<RunResult>;
|
|
6
|
+
run(messages: AgenticInputMessage[], context: Context<TPlugins, TExtraData>, maxRetries?: number): Promise<RunResult>;
|
|
7
7
|
private runWithRetry;
|
|
8
|
-
private
|
|
8
|
+
private getToolsExecuted;
|
|
9
|
+
private getToolExecutionInfo;
|
|
10
|
+
private getSafeToolArguments;
|
|
9
11
|
}
|
package/lib/esm/runner.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { InputGuardrailTripwireTriggered, Runner, RunToolCallItem, } from '@openai/agents';
|
|
3
|
+
import { retrieveKnowledge } from './tools';
|
|
3
4
|
export class AIAgentRunner {
|
|
4
5
|
constructor(agent) {
|
|
5
6
|
this.agent = agent;
|
|
@@ -20,7 +21,7 @@ export class AIAgentRunner {
|
|
|
20
21
|
const outputMessages = ((_a = result.finalOutput) === null || _a === void 0 ? void 0 : _a.messages) || [];
|
|
21
22
|
const hasExit = outputMessages.length === 0 ||
|
|
22
23
|
outputMessages.some(message => message.type === 'exit');
|
|
23
|
-
const toolsExecuted = this.
|
|
24
|
+
const toolsExecuted = this.getToolsExecuted(result, context);
|
|
24
25
|
return {
|
|
25
26
|
messages: hasExit
|
|
26
27
|
? []
|
|
@@ -52,14 +53,39 @@ export class AIAgentRunner {
|
|
|
52
53
|
}
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
+
getToolsExecuted(result, context) {
|
|
56
57
|
var _a;
|
|
57
|
-
return (((_a = result.newItems) === null || _a === void 0 ? void 0 : _a.filter(item => item instanceof RunToolCallItem).map((item) =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return
|
|
62
|
-
|
|
58
|
+
return (((_a = result.newItems) === null || _a === void 0 ? void 0 : _a.filter(item => item instanceof RunToolCallItem).map((item) => this.getToolExecutionInfo(item, context)).filter((toolExecution) => toolExecution.toolName !== '')) || []);
|
|
59
|
+
}
|
|
60
|
+
getToolExecutionInfo(item, context) {
|
|
61
|
+
if (item.rawItem.type !== 'function_call') {
|
|
62
|
+
return {
|
|
63
|
+
toolName: '',
|
|
64
|
+
toolArguments: {},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const toolName = item.rawItem.name;
|
|
68
|
+
const toolArguments = this.getSafeToolArguments(item.rawItem.arguments);
|
|
69
|
+
if (toolName === retrieveKnowledge.name) {
|
|
70
|
+
return {
|
|
71
|
+
toolName,
|
|
72
|
+
toolArguments,
|
|
73
|
+
knowledgebaseSourcesIds: context.knowledgeUsed.sourceIds,
|
|
74
|
+
knowledgebaseChunksIds: context.knowledgeUsed.chunksIds,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
toolName,
|
|
79
|
+
toolArguments,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
getSafeToolArguments(rawToolArguments) {
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(rawToolArguments);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
63
89
|
}
|
|
64
90
|
}
|
|
65
91
|
//# sourceMappingURL=runner.js.map
|
package/lib/esm/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":";AACA,OAAO,EACL,+BAA+B,EAC/B,MAAM,EACN,eAAe,GAChB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,10 +13,17 @@ export const retrieveKnowledge = tool({
|
|
|
13
13
|
if (!context) {
|
|
14
14
|
throw new Error('Context is required');
|
|
15
15
|
}
|
|
16
|
-
const
|
|
16
|
+
const sourceIds = context.sourceIds;
|
|
17
17
|
const client = new HubtypeApiClient(context.authToken);
|
|
18
|
-
const chunks = yield client.retrieveSimilarChunks(query,
|
|
19
|
-
|
|
18
|
+
const chunks = yield client.retrieveSimilarChunks(query, sourceIds);
|
|
19
|
+
const chunkTexts = chunks.map(chunk => chunk.text);
|
|
20
|
+
context.knowledgeUsed = {
|
|
21
|
+
query,
|
|
22
|
+
sourceIds,
|
|
23
|
+
chunksIds: chunks.map(chunk => chunk.id),
|
|
24
|
+
chunkTexts,
|
|
25
|
+
};
|
|
26
|
+
return chunkTexts;
|
|
20
27
|
}),
|
|
21
28
|
});
|
|
22
29
|
//# sourceMappingURL=retrieve-knowledge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieve-knowledge.js","sourceRoot":"","sources":["../../../src/tools/retrieve-knowledge.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAoB;IACvD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,CACP,EAAE,KAAK,EAAqB,EAC5B,UAAgC,EACb,EAAE;QACrB,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACvC;QACD,MAAM,
|
|
1
|
+
{"version":3,"file":"retrieve-knowledge.js","sourceRoot":"","sources":["../../../src/tools/retrieve-knowledge.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAoB;IACvD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,CACP,EAAE,KAAK,EAAqB,EAC5B,UAAgC,EACb,EAAE;QACrB,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACvC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACnE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElD,OAAO,CAAC,aAAa,GAAG;YACtB,KAAK;YACL,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,UAAU;SACX,CAAA;QAED,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;CACF,CAAC,CAAA"}
|
package/lib/esm/types.d.ts
CHANGED
|
@@ -4,8 +4,14 @@ import { ZodSchema } from 'zod';
|
|
|
4
4
|
import { OutputSchema } from './structured-output';
|
|
5
5
|
export interface Context<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
|
|
6
6
|
authToken: string;
|
|
7
|
+
sourceIds: string[];
|
|
8
|
+
knowledgeUsed: {
|
|
9
|
+
query: string;
|
|
10
|
+
sourceIds: string[];
|
|
11
|
+
chunksIds: string[];
|
|
12
|
+
chunkTexts: string[];
|
|
13
|
+
};
|
|
7
14
|
request: BotContext<TPlugins, TExtraData>;
|
|
8
|
-
sources: string[];
|
|
9
15
|
}
|
|
10
16
|
export type RunContext<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = OpenAIRunContext<Context<TPlugins, TExtraData>>;
|
|
11
17
|
export interface CustomTool<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
|
|
@@ -14,6 +20,10 @@ export interface CustomTool<TPlugins extends ResolvedPlugins = ResolvedPlugins,
|
|
|
14
20
|
schema: ZodSchema;
|
|
15
21
|
func: (input?: any, runContext?: RunContext<TPlugins, TExtraData>) => Promise<any>;
|
|
16
22
|
}
|
|
23
|
+
export interface Chunk {
|
|
24
|
+
id: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}
|
|
17
27
|
export type ContactInfo = Record<string, string>;
|
|
18
28
|
export type Tool<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = OpenAITool<Context<TPlugins, TExtraData>>;
|
|
19
29
|
export type AIAgent<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> = Agent<Context<TPlugins, TExtraData>, typeof OutputSchema>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/plugin-ai-agents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.0",
|
|
4
4
|
"main": "./lib/cjs/index.js",
|
|
5
5
|
"module": "./lib/esm/index.js",
|
|
6
6
|
"description": "Use AI Agents to generate your contents",
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"lint_core": "../../node_modules/.bin/eslint_d --cache --quiet 'src/**/*.ts*'"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@botonic/core": "^0.
|
|
17
|
-
"@openai/agents": "^0.
|
|
16
|
+
"@botonic/core": "^0.41.0",
|
|
17
|
+
"@openai/agents": "^0.1.11",
|
|
18
18
|
"axios": "^1.12.2",
|
|
19
|
-
"openai": "^5.
|
|
19
|
+
"openai": "^5.23.2",
|
|
20
20
|
"uuid": "^10.0.0",
|
|
21
|
-
"zod": "3.25.
|
|
21
|
+
"zod": "3.25.76"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/uuid": "^10.0.0"
|
package/src/constants.ts
CHANGED
|
@@ -4,9 +4,9 @@ export const HUBTYPE_API_URL =
|
|
|
4
4
|
export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY // pragma: allowlist secret
|
|
5
5
|
export const AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE
|
|
6
6
|
export const AZURE_OPENAI_API_DEPLOYMENT_NAME =
|
|
7
|
-
process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-
|
|
7
|
+
process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-41-mini_p1'
|
|
8
8
|
export const AZURE_OPENAI_API_VERSION =
|
|
9
|
-
process.env.AZURE_OPENAI_API_VERSION || '
|
|
9
|
+
process.env.AZURE_OPENAI_API_VERSION || '2025-01-01-preview'
|
|
10
10
|
|
|
11
11
|
export const isProd = process.env.NODE_ENV === 'production'
|
|
12
12
|
|
|
@@ -3,7 +3,7 @@ import { BotContext } from '@botonic/core'
|
|
|
3
3
|
import axios from 'axios'
|
|
4
4
|
|
|
5
5
|
import { HUBTYPE_API_URL } from './constants'
|
|
6
|
-
import { AgenticInputMessage } from './types'
|
|
6
|
+
import { AgenticInputMessage, Chunk } from './types'
|
|
7
7
|
|
|
8
8
|
interface HubtypeAssistantMessage {
|
|
9
9
|
role: 'assistant'
|
|
@@ -26,8 +26,8 @@ export class HubtypeApiClient {
|
|
|
26
26
|
|
|
27
27
|
async retrieveSimilarChunks(
|
|
28
28
|
query: string,
|
|
29
|
-
|
|
30
|
-
): Promise<
|
|
29
|
+
sourceIds: string[]
|
|
30
|
+
): Promise<Chunk[]> {
|
|
31
31
|
const url = `${HUBTYPE_API_URL}/external/v1/ai/knowledge_base/similar_chunks/`
|
|
32
32
|
const headers = {
|
|
33
33
|
'Content-Type': 'application/json',
|
|
@@ -35,11 +35,15 @@ export class HubtypeApiClient {
|
|
|
35
35
|
}
|
|
36
36
|
const params = {
|
|
37
37
|
query,
|
|
38
|
-
source_ids:
|
|
38
|
+
source_ids: sourceIds,
|
|
39
39
|
num_chunks: 5,
|
|
40
40
|
}
|
|
41
41
|
const response = await axios.post(url, params, { headers })
|
|
42
|
-
|
|
42
|
+
const chunks = response.data.chunks.map((chunk: Chunk) => ({
|
|
43
|
+
id: chunk.id,
|
|
44
|
+
text: chunk.text,
|
|
45
|
+
}))
|
|
46
|
+
return chunks
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
async getLocalMessages(
|
package/src/index.ts
CHANGED
|
@@ -34,7 +34,7 @@ export default class BotonicPluginAiAgents<
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
async getInference(
|
|
37
|
-
request: BotContext,
|
|
37
|
+
request: BotContext<TPlugins, TExtraData>,
|
|
38
38
|
aiAgentArgs: AiAgentArgs
|
|
39
39
|
): Promise<InferenceResponse> {
|
|
40
40
|
try {
|
|
@@ -46,7 +46,7 @@ export default class BotonicPluginAiAgents<
|
|
|
46
46
|
const tools = this.buildTools(
|
|
47
47
|
aiAgentArgs.activeTools?.map(tool => tool.name) || []
|
|
48
48
|
)
|
|
49
|
-
const agent = new AIAgentBuilder(
|
|
49
|
+
const agent = new AIAgentBuilder<TPlugins, TExtraData>(
|
|
50
50
|
aiAgentArgs.name,
|
|
51
51
|
aiAgentArgs.instructions,
|
|
52
52
|
tools,
|
|
@@ -60,13 +60,19 @@ export default class BotonicPluginAiAgents<
|
|
|
60
60
|
authToken,
|
|
61
61
|
MAX_MEMORY_LENGTH
|
|
62
62
|
)
|
|
63
|
-
const context: Context = {
|
|
63
|
+
const context: Context<TPlugins, TExtraData> = {
|
|
64
64
|
authToken,
|
|
65
|
+
sourceIds: aiAgentArgs.sourceIds || [],
|
|
66
|
+
knowledgeUsed: {
|
|
67
|
+
query: '',
|
|
68
|
+
sourceIds: [],
|
|
69
|
+
chunksIds: [],
|
|
70
|
+
chunkTexts: [],
|
|
71
|
+
},
|
|
65
72
|
request,
|
|
66
|
-
sources: aiAgentArgs.sourceIds || [],
|
|
67
73
|
}
|
|
68
74
|
|
|
69
|
-
const runner = new AIAgentRunner(agent)
|
|
75
|
+
const runner = new AIAgentRunner<TPlugins, TExtraData>(agent)
|
|
70
76
|
return await runner.run(messages, context)
|
|
71
77
|
} catch (error) {
|
|
72
78
|
console.error('error plugin returns undefined', error)
|
package/src/runner.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ResolvedPlugins } from '@botonic/core'
|
|
1
|
+
import { ResolvedPlugins, ToolExecution } from '@botonic/core'
|
|
2
2
|
import {
|
|
3
3
|
InputGuardrailTripwireTriggered,
|
|
4
4
|
Runner,
|
|
5
5
|
RunToolCallItem,
|
|
6
6
|
} from '@openai/agents'
|
|
7
7
|
|
|
8
|
+
import { retrieveKnowledge } from './tools'
|
|
8
9
|
import {
|
|
9
10
|
AgenticInputMessage,
|
|
10
11
|
AgenticOutputMessage,
|
|
@@ -25,7 +26,7 @@ export class AIAgentRunner<
|
|
|
25
26
|
|
|
26
27
|
async run(
|
|
27
28
|
messages: AgenticInputMessage[],
|
|
28
|
-
context: Context,
|
|
29
|
+
context: Context<TPlugins, TExtraData>,
|
|
29
30
|
maxRetries: number = 1
|
|
30
31
|
): Promise<RunResult> {
|
|
31
32
|
return this.runWithRetry(messages, context, maxRetries, 1)
|
|
@@ -33,7 +34,7 @@ export class AIAgentRunner<
|
|
|
33
34
|
|
|
34
35
|
private async runWithRetry(
|
|
35
36
|
inputMessages: AgenticInputMessage[],
|
|
36
|
-
context: Context,
|
|
37
|
+
context: Context<TPlugins, TExtraData>,
|
|
37
38
|
maxRetries: number,
|
|
38
39
|
attempt: number
|
|
39
40
|
): Promise<RunResult> {
|
|
@@ -47,7 +48,7 @@ export class AIAgentRunner<
|
|
|
47
48
|
const hasExit =
|
|
48
49
|
outputMessages.length === 0 ||
|
|
49
50
|
outputMessages.some(message => message.type === 'exit')
|
|
50
|
-
const toolsExecuted = this.
|
|
51
|
+
const toolsExecuted = this.getToolsExecuted(result, context)
|
|
51
52
|
|
|
52
53
|
return {
|
|
53
54
|
messages: hasExit
|
|
@@ -81,17 +82,55 @@ export class AIAgentRunner<
|
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
private
|
|
85
|
+
private getToolsExecuted(
|
|
86
|
+
result,
|
|
87
|
+
context: Context<TPlugins, TExtraData>
|
|
88
|
+
): ToolExecution[] {
|
|
85
89
|
return (
|
|
86
90
|
result.newItems
|
|
87
91
|
?.filter(item => item instanceof RunToolCallItem)
|
|
88
|
-
.map((item: RunToolCallItem) =>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
.filter((toolName: string) => toolName !== '') || []
|
|
92
|
+
.map((item: RunToolCallItem) =>
|
|
93
|
+
this.getToolExecutionInfo(item as RunToolCallItem, context)
|
|
94
|
+
)
|
|
95
|
+
.filter(
|
|
96
|
+
(toolExecution: ToolExecution) => toolExecution.toolName !== ''
|
|
97
|
+
) || []
|
|
95
98
|
)
|
|
96
99
|
}
|
|
100
|
+
|
|
101
|
+
private getToolExecutionInfo(
|
|
102
|
+
item: RunToolCallItem,
|
|
103
|
+
context: Context<TPlugins, TExtraData>
|
|
104
|
+
): ToolExecution {
|
|
105
|
+
if (item.rawItem.type !== 'function_call') {
|
|
106
|
+
return {
|
|
107
|
+
toolName: '',
|
|
108
|
+
toolArguments: {},
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const toolName = item.rawItem.name
|
|
112
|
+
const toolArguments = this.getSafeToolArguments(item.rawItem.arguments)
|
|
113
|
+
|
|
114
|
+
if (toolName === retrieveKnowledge.name) {
|
|
115
|
+
return {
|
|
116
|
+
toolName,
|
|
117
|
+
toolArguments,
|
|
118
|
+
knowledgebaseSourcesIds: context.knowledgeUsed.sourceIds,
|
|
119
|
+
knowledgebaseChunksIds: context.knowledgeUsed.chunksIds,
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
toolName,
|
|
125
|
+
toolArguments,
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private getSafeToolArguments(rawToolArguments: string): Record<string, any> {
|
|
130
|
+
try {
|
|
131
|
+
return JSON.parse(rawToolArguments)
|
|
132
|
+
} catch (error) {
|
|
133
|
+
return {}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
97
136
|
}
|
|
@@ -19,9 +19,18 @@ export const retrieveKnowledge = tool<any, Context, any>({
|
|
|
19
19
|
if (!context) {
|
|
20
20
|
throw new Error('Context is required')
|
|
21
21
|
}
|
|
22
|
-
const
|
|
22
|
+
const sourceIds = context.sourceIds
|
|
23
23
|
const client = new HubtypeApiClient(context.authToken)
|
|
24
|
-
const chunks = await client.retrieveSimilarChunks(query,
|
|
25
|
-
|
|
24
|
+
const chunks = await client.retrieveSimilarChunks(query, sourceIds)
|
|
25
|
+
const chunkTexts = chunks.map(chunk => chunk.text)
|
|
26
|
+
|
|
27
|
+
context.knowledgeUsed = {
|
|
28
|
+
query,
|
|
29
|
+
sourceIds,
|
|
30
|
+
chunksIds: chunks.map(chunk => chunk.id),
|
|
31
|
+
chunkTexts,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return chunkTexts
|
|
26
35
|
},
|
|
27
36
|
})
|
package/src/types.ts
CHANGED
|
@@ -22,8 +22,14 @@ export interface Context<
|
|
|
22
22
|
TExtraData = any,
|
|
23
23
|
> {
|
|
24
24
|
authToken: string
|
|
25
|
+
sourceIds: string[]
|
|
26
|
+
knowledgeUsed: {
|
|
27
|
+
query: string
|
|
28
|
+
sourceIds: string[]
|
|
29
|
+
chunksIds: string[]
|
|
30
|
+
chunkTexts: string[]
|
|
31
|
+
}
|
|
25
32
|
request: BotContext<TPlugins, TExtraData>
|
|
26
|
-
sources: string[]
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
export type RunContext<
|
|
@@ -44,6 +50,11 @@ export interface CustomTool<
|
|
|
44
50
|
) => Promise<any>
|
|
45
51
|
}
|
|
46
52
|
|
|
53
|
+
export interface Chunk {
|
|
54
|
+
id: string
|
|
55
|
+
text: string
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
export type ContactInfo = Record<string, string>
|
|
48
59
|
|
|
49
60
|
export type Tool<
|