@botonic/plugin-ai-agents 0.56.0-alpha.0 → 0.57.0-rslib-esm.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/esm/agents/base-agent.d.ts +4 -4
- package/lib/esm/agents/base-agent.js +47 -20
- package/lib/esm/agents/base-agent.js.map +1 -1
- package/lib/esm/agents/index.d.ts +2 -2
- package/lib/esm/agents/index.js +8 -7
- package/lib/esm/agents/index.js.map +1 -1
- package/lib/esm/agents/router-agent.d.ts +5 -5
- package/lib/esm/agents/router-agent.js +32 -15
- package/lib/esm/agents/router-agent.js.map +1 -1
- package/lib/esm/agents/specialist-agent.d.ts +5 -5
- package/lib/esm/agents/specialist-agent.js +65 -45
- package/lib/esm/agents/specialist-agent.js.map +1 -1
- package/lib/esm/bot-config-tools.d.ts +1 -1
- package/lib/esm/bot-config-tools.js +15 -13
- package/lib/esm/bot-config-tools.js.map +1 -1
- package/lib/esm/constants.js +18 -17
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/debug-logger.d.ts +1 -1
- package/lib/esm/debug-logger.js +14 -9
- package/lib/esm/debug-logger.js.map +1 -1
- package/lib/esm/guardrails/index.d.ts +1 -1
- package/lib/esm/guardrails/index.js +5 -4
- package/lib/esm/guardrails/index.js.map +1 -1
- package/lib/esm/guardrails/input.d.ts +2 -2
- package/lib/esm/guardrails/input.js +65 -42
- package/lib/esm/guardrails/input.js.map +1 -1
- package/lib/esm/index.d.ts +3 -3
- package/lib/esm/index.js +114 -74
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/llm-config.d.ts +1 -1
- package/lib/esm/llm-config.js +81 -52
- package/lib/esm/llm-config.js.map +1 -1
- package/lib/esm/package.json +3 -0
- package/lib/esm/runners/base-runner.d.ts +3 -3
- package/lib/esm/runners/base-runner.js +81 -69
- package/lib/esm/runners/base-runner.js.map +1 -1
- package/lib/esm/runners/index.d.ts +2 -2
- package/lib/esm/runners/index.js +8 -7
- package/lib/esm/runners/index.js.map +1 -1
- package/lib/esm/runners/router-runner.d.ts +2 -2
- package/lib/esm/runners/router-runner.js +19 -14
- package/lib/esm/runners/router-runner.js.map +1 -1
- package/lib/esm/runners/specialist-runner.d.ts +1 -1
- package/lib/esm/runners/specialist-runner.js +8 -6
- package/lib/esm/runners/specialist-runner.js.map +1 -1
- package/lib/esm/services/hubtype-api-client.d.ts +2 -2
- package/lib/esm/services/hubtype-api-client.js +110 -95
- package/lib/esm/services/hubtype-api-client.js.map +1 -1
- package/lib/esm/services/types.d.ts +1 -1
- package/lib/esm/services/types.js +9 -9
- package/lib/esm/services/types.js.map +1 -1
- package/lib/esm/structured-output/bot-executor.js +20 -17
- package/lib/esm/structured-output/bot-executor.js.map +1 -1
- package/lib/esm/structured-output/carousel.js +25 -22
- package/lib/esm/structured-output/carousel.js.map +1 -1
- package/lib/esm/structured-output/exit.js +13 -10
- package/lib/esm/structured-output/exit.js.map +1 -1
- package/lib/esm/structured-output/index.d.ts +0 -10
- package/lib/esm/structured-output/index.js +39 -29
- package/lib/esm/structured-output/index.js.map +1 -1
- package/lib/esm/structured-output/text-with-buttons.js +24 -23
- package/lib/esm/structured-output/text-with-buttons.js.map +1 -1
- package/lib/esm/structured-output/text.js +16 -13
- package/lib/esm/structured-output/text.js.map +1 -1
- package/lib/esm/tools/index.d.ts +2 -2
- package/lib/esm/tools/index.js +7 -7
- package/lib/esm/tools/index.js.map +1 -1
- package/lib/esm/tools/retrieve-knowledge.d.ts +2 -2
- package/lib/esm/tools/retrieve-knowledge.js +38 -32
- package/lib/esm/tools/retrieve-knowledge.js.map +1 -1
- package/lib/esm/types.d.ts +3 -3
- package/lib/esm/types.js +4 -2
- package/lib/esm/types.js.map +1 -1
- package/package.json +8 -7
- package/src/structured-output/index.ts +0 -2
- package/src/types.ts +4 -4
- package/lib/cjs/agents/base-agent.d.ts +0 -28
- package/lib/cjs/agents/base-agent.js +0 -39
- package/lib/cjs/agents/base-agent.js.map +0 -1
- package/lib/cjs/agents/index.d.ts +0 -2
- package/lib/cjs/agents/index.js +0 -8
- package/lib/cjs/agents/index.js.map +0 -1
- package/lib/cjs/agents/router-agent.d.ts +0 -25
- package/lib/cjs/agents/router-agent.js +0 -33
- package/lib/cjs/agents/router-agent.js.map +0 -1
- package/lib/cjs/agents/specialist-agent.d.ts +0 -39
- package/lib/cjs/agents/specialist-agent.js +0 -108
- package/lib/cjs/agents/specialist-agent.js.map +0 -1
- package/lib/cjs/bot-config-tools.d.ts +0 -7
- package/lib/cjs/bot-config-tools.js +0 -18
- package/lib/cjs/bot-config-tools.js.map +0 -1
- package/lib/cjs/constants.d.ts +0 -21
- package/lib/cjs/constants.js +0 -25
- package/lib/cjs/constants.js.map +0 -1
- package/lib/cjs/debug-logger.d.ts +0 -33
- package/lib/cjs/debug-logger.js +0 -116
- package/lib/cjs/debug-logger.js.map +0 -1
- package/lib/cjs/guardrails/index.d.ts +0 -1
- package/lib/cjs/guardrails/index.js +0 -5
- package/lib/cjs/guardrails/index.js.map +0 -1
- package/lib/cjs/guardrails/input.d.ts +0 -10
- package/lib/cjs/guardrails/input.js +0 -96
- package/lib/cjs/guardrails/input.js.map +0 -1
- package/lib/cjs/index.d.ts +0 -22
- package/lib/cjs/index.js +0 -219
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/llm-config.d.ts +0 -30
- package/lib/cjs/llm-config.js +0 -121
- package/lib/cjs/llm-config.js.map +0 -1
- package/lib/cjs/runners/base-runner.d.ts +0 -31
- package/lib/cjs/runners/base-runner.js +0 -189
- package/lib/cjs/runners/base-runner.js.map +0 -1
- package/lib/cjs/runners/index.d.ts +0 -2
- package/lib/cjs/runners/index.js +0 -8
- package/lib/cjs/runners/index.js.map +0 -1
- package/lib/cjs/runners/router-runner.d.ts +0 -8
- package/lib/cjs/runners/router-runner.js +0 -44
- package/lib/cjs/runners/router-runner.js.map +0 -1
- package/lib/cjs/runners/specialist-runner.d.ts +0 -4
- package/lib/cjs/runners/specialist-runner.js +0 -8
- package/lib/cjs/runners/specialist-runner.js.map +0 -1
- package/lib/cjs/services/hubtype-api-client.d.ts +0 -13
- package/lib/cjs/services/hubtype-api-client.js +0 -176
- package/lib/cjs/services/hubtype-api-client.js.map +0 -1
- package/lib/cjs/services/types.d.ts +0 -72
- package/lib/cjs/services/types.js +0 -13
- package/lib/cjs/services/types.js.map +0 -1
- package/lib/cjs/structured-output/bot-executor.d.ts +0 -13
- package/lib/cjs/structured-output/bot-executor.js +0 -18
- package/lib/cjs/structured-output/bot-executor.js.map +0 -1
- package/lib/cjs/structured-output/carousel.d.ts +0 -18
- package/lib/cjs/structured-output/carousel.js +0 -23
- package/lib/cjs/structured-output/carousel.js.map +0 -1
- package/lib/cjs/structured-output/exit.d.ts +0 -6
- package/lib/cjs/structured-output/exit.js +0 -11
- package/lib/cjs/structured-output/exit.js.map +0 -1
- package/lib/cjs/structured-output/index.d.ts +0 -108
- package/lib/cjs/structured-output/index.js +0 -45
- package/lib/cjs/structured-output/index.js.map +0 -1
- package/lib/cjs/structured-output/request-contact-info.d.ts +0 -9
- package/lib/cjs/structured-output/request-contact-info.js +0 -14
- package/lib/cjs/structured-output/request-contact-info.js.map +0 -1
- package/lib/cjs/structured-output/text-with-buttons.d.ts +0 -17
- package/lib/cjs/structured-output/text-with-buttons.js +0 -24
- package/lib/cjs/structured-output/text-with-buttons.js.map +0 -1
- package/lib/cjs/structured-output/text.d.ts +0 -9
- package/lib/cjs/structured-output/text.js +0 -14
- package/lib/cjs/structured-output/text.js.map +0 -1
- package/lib/cjs/tools/index.d.ts +0 -3
- package/lib/cjs/tools/index.js +0 -8
- package/lib/cjs/tools/index.js.map +0 -1
- package/lib/cjs/tools/retrieve-knowledge.d.ts +0 -6
- package/lib/cjs/tools/retrieve-knowledge.js +0 -34
- package/lib/cjs/tools/retrieve-knowledge.js.map +0 -1
- package/lib/cjs/types.d.ts +0 -53
- package/lib/cjs/types.js +0 -3
- package/lib/cjs/types.js.map +0 -1
- package/lib/esm/structured-output/request-contact-info.d.ts +0 -9
- package/lib/esm/structured-output/request-contact-info.js +0 -14
- package/lib/esm/structured-output/request-contact-info.js.map +0 -1
- package/src/structured-output/request-contact-info.ts +0 -18
package/lib/esm/index.js
CHANGED
|
@@ -1,61 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
memory: this.memory,
|
|
1
|
+
import { AiAgentType } from "@botonic/core";
|
|
2
|
+
import { handoff, setTracingDisabled, tool as agents_tool } from "@openai/agents";
|
|
3
|
+
import { v7 } from "uuid";
|
|
4
|
+
import { RouterAgent, SpecialistAgent } from "./agents/index.js";
|
|
5
|
+
import { DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT_16_SECONDS, MAX_MEMORY_LENGTH, isProd } from "./constants.js";
|
|
6
|
+
import { createDebugLogger } from "./debug-logger.js";
|
|
7
|
+
import { LLMConfig } from "./llm-config.js";
|
|
8
|
+
import { RouterRunner, SpecialistRunner } from "./runners/index.js";
|
|
9
|
+
import { HubtypeApiClient } from "./services/hubtype-api-client.js";
|
|
10
|
+
|
|
11
|
+
export * from "./bot-config-tools.js";
|
|
12
|
+
export * from "./types.js";
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
function _define_property(obj, key, value) {
|
|
23
|
+
if (key in obj) {
|
|
24
|
+
Object.defineProperty(obj, key, {
|
|
25
|
+
value: value,
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true
|
|
30
29
|
});
|
|
31
|
-
}
|
|
30
|
+
} else obj[key] = value;
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class BotonicPluginAiAgents {
|
|
32
43
|
getMemoryOptions(memory) {
|
|
33
44
|
return {
|
|
34
|
-
maxMessages: memory?.maxMessages ??
|
|
45
|
+
maxMessages: memory?.maxMessages ?? MAX_MEMORY_LENGTH,
|
|
35
46
|
includeToolCalls: memory?.includeToolCalls ?? true,
|
|
36
47
|
maxFullToolResults: memory?.maxFullToolResults ?? 1,
|
|
37
|
-
debugMode: memory?.debugMode ?? false
|
|
48
|
+
debugMode: memory?.debugMode ?? false
|
|
38
49
|
};
|
|
39
50
|
}
|
|
40
51
|
pre() {
|
|
41
52
|
return;
|
|
42
53
|
}
|
|
43
54
|
async getInference(botContext, aiAgentArgs) {
|
|
44
|
-
const authToken =
|
|
55
|
+
const authToken = isProd ? botContext.session._access_token : this.authToken;
|
|
45
56
|
if (!authToken) {
|
|
46
57
|
throw new Error('Auth token is required');
|
|
47
58
|
}
|
|
48
|
-
const inferenceId =
|
|
59
|
+
const inferenceId = v7();
|
|
49
60
|
try {
|
|
50
|
-
if (aiAgentArgs.type ===
|
|
61
|
+
if (aiAgentArgs.type === AiAgentType.Specialist) {
|
|
51
62
|
return await this.executeSpecialistAIAgent(botContext, aiAgentArgs, authToken, inferenceId);
|
|
52
63
|
}
|
|
53
|
-
if (aiAgentArgs.type ===
|
|
64
|
+
if (aiAgentArgs.type === AiAgentType.Router) {
|
|
54
65
|
return await this.executeRouterAIAgent(botContext, aiAgentArgs, authToken, inferenceId);
|
|
55
66
|
}
|
|
56
67
|
throw new Error('Invalid agent type');
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
68
|
+
} catch (error) {
|
|
59
69
|
console.error('error plugin returns undefined', error);
|
|
60
70
|
return {
|
|
61
71
|
messages: [],
|
|
@@ -68,18 +78,18 @@ class BotonicPluginAiAgents {
|
|
|
68
78
|
startingAgentName: '',
|
|
69
79
|
lastAgentName: '',
|
|
70
80
|
availableSpecialists: [],
|
|
71
|
-
isTransferredToSpecialist: false
|
|
81
|
+
isTransferredToSpecialist: false
|
|
72
82
|
};
|
|
73
83
|
}
|
|
74
84
|
}
|
|
75
85
|
async executeSpecialistAIAgent(botContext, aiAgentArgs, authToken, inferenceId) {
|
|
76
|
-
const llmConfig = new
|
|
86
|
+
const llmConfig = new LLMConfig({
|
|
77
87
|
maxRetries: this.maxRetries,
|
|
78
88
|
timeout: this.timeout,
|
|
79
89
|
modelName: aiAgentArgs.model,
|
|
80
90
|
verbosity: aiAgentArgs.verbosity,
|
|
81
91
|
botContext,
|
|
82
|
-
reasoningEffort: aiAgentArgs.reasoningEffort
|
|
92
|
+
reasoningEffort: aiAgentArgs.reasoningEffort
|
|
83
93
|
});
|
|
84
94
|
// Get LLM config, tools and agent
|
|
85
95
|
const { tools, agent } = await this.getSpecialistAgentAndTools(botContext, aiAgentArgs, aiAgentArgs.outputMessagesSchemas || [], authToken, inferenceId, llmConfig);
|
|
@@ -92,27 +102,27 @@ class BotonicPluginAiAgents {
|
|
|
92
102
|
query: '',
|
|
93
103
|
sourceIds: [],
|
|
94
104
|
chunksIds: [],
|
|
95
|
-
chunkTexts: []
|
|
105
|
+
chunkTexts: []
|
|
96
106
|
},
|
|
97
|
-
request: botContext
|
|
107
|
+
request: botContext
|
|
98
108
|
};
|
|
99
109
|
// Log agent debug info
|
|
100
|
-
this.logger.logAgentDebugInfo(aiAgentArgs, tools.map(t
|
|
110
|
+
this.logger.logAgentDebugInfo(aiAgentArgs, tools.map((t)=>t.name), messages);
|
|
101
111
|
// Run agent
|
|
102
|
-
const runner = new
|
|
112
|
+
const runner = new SpecialistRunner(agent, llmConfig, inferenceId, this.logger);
|
|
103
113
|
return await runner.run(messages, context);
|
|
104
114
|
}
|
|
105
115
|
async executeRouterAIAgent(botContext, aiAgentArgs, authToken, inferenceId) {
|
|
106
116
|
const { specialists, name, instructions } = aiAgentArgs;
|
|
107
|
-
const llmConfig = new
|
|
117
|
+
const llmConfig = new LLMConfig({
|
|
108
118
|
maxRetries: this.maxRetries,
|
|
109
119
|
timeout: this.timeout,
|
|
110
120
|
modelName: aiAgentArgs.model,
|
|
111
121
|
verbosity: aiAgentArgs.verbosity,
|
|
112
122
|
botContext,
|
|
113
|
-
reasoningEffort: aiAgentArgs.reasoningEffort
|
|
123
|
+
reasoningEffort: aiAgentArgs.reasoningEffort
|
|
114
124
|
});
|
|
115
|
-
const specialistsAgents = await Promise.all(specialists.map(async (specialistData)
|
|
125
|
+
const specialistsAgents = await Promise.all(specialists.map(async (specialistData)=>{
|
|
116
126
|
// If the forceToolNameOverride is set, we force this override for all specialists
|
|
117
127
|
const forceToolNameOverride = aiAgentArgs.forceToolNameOverride;
|
|
118
128
|
const reasoningEffort = aiAgentArgs.reasoningEffort;
|
|
@@ -122,15 +132,15 @@ class BotonicPluginAiAgents {
|
|
|
122
132
|
...specialistData,
|
|
123
133
|
forceToolNameOverride,
|
|
124
134
|
reasoningEffort,
|
|
125
|
-
disableForceRetrieveKnowledge
|
|
135
|
+
disableForceRetrieveKnowledge
|
|
126
136
|
};
|
|
127
137
|
const { agent } = await this.getSpecialistAgentAndTools(botContext, aiAgentSpecialistArgs, aiAgentArgs.outputMessagesSchemas || [], authToken, inferenceId, llmConfig);
|
|
128
|
-
return
|
|
138
|
+
return handoff(agent, {
|
|
129
139
|
toolNameOverride: specialistData.name,
|
|
130
|
-
toolDescriptionOverride: specialistData.description
|
|
140
|
+
toolDescriptionOverride: specialistData.description
|
|
131
141
|
});
|
|
132
142
|
}));
|
|
133
|
-
const router = await
|
|
143
|
+
const router = await RouterAgent.create({
|
|
134
144
|
name,
|
|
135
145
|
instructions,
|
|
136
146
|
llmConfig,
|
|
@@ -141,8 +151,8 @@ class BotonicPluginAiAgents {
|
|
|
141
151
|
botId: botContext.session.bot.id,
|
|
142
152
|
isTest: botContext.session.is_test_integration,
|
|
143
153
|
authToken,
|
|
144
|
-
inferenceId
|
|
145
|
-
}
|
|
154
|
+
inferenceId
|
|
155
|
+
}
|
|
146
156
|
});
|
|
147
157
|
// Get messages
|
|
148
158
|
const messages = await this.getMessages(botContext, authToken, aiAgentArgs.previousHubtypeMessages || []);
|
|
@@ -153,21 +163,21 @@ class BotonicPluginAiAgents {
|
|
|
153
163
|
query: '',
|
|
154
164
|
sourceIds: [],
|
|
155
165
|
chunksIds: [],
|
|
156
|
-
chunkTexts: []
|
|
166
|
+
chunkTexts: []
|
|
157
167
|
},
|
|
158
|
-
request: botContext
|
|
168
|
+
request: botContext
|
|
159
169
|
};
|
|
160
170
|
// Run agent
|
|
161
171
|
const routerAgent = router.getAgent();
|
|
162
|
-
const runner = new
|
|
172
|
+
const runner = new RouterRunner(routerAgent, llmConfig, inferenceId, this.logger);
|
|
163
173
|
return await runner.run(messages, context);
|
|
164
174
|
}
|
|
165
175
|
async getSpecialistAgentAndTools(botContext, aiAgentArgs, outputMessagesSchemas, authToken, inferenceId, llmConfig) {
|
|
166
176
|
// Build tools
|
|
167
177
|
const tools = this.buildTools(aiAgentArgs);
|
|
168
178
|
// Build agent
|
|
169
|
-
const sourceIds = aiAgentArgs.type ===
|
|
170
|
-
const specialist = await
|
|
179
|
+
const sourceIds = aiAgentArgs.type === AiAgentType.Specialist ? aiAgentArgs.sourceIds : [];
|
|
180
|
+
const specialist = await SpecialistAgent.create({
|
|
171
181
|
name: aiAgentArgs.name,
|
|
172
182
|
instructions: aiAgentArgs.instructions,
|
|
173
183
|
tools: tools,
|
|
@@ -182,38 +192,68 @@ class BotonicPluginAiAgents {
|
|
|
182
192
|
botId: botContext.session.bot.id,
|
|
183
193
|
isTest: botContext.session.is_test_integration,
|
|
184
194
|
authToken,
|
|
185
|
-
inferenceId
|
|
195
|
+
inferenceId
|
|
186
196
|
},
|
|
187
197
|
forceToolNameOverride: aiAgentArgs.forceToolNameOverride,
|
|
188
|
-
disableForceRetrieveKnowledge: aiAgentArgs.disableForceRetrieveKnowledge
|
|
198
|
+
disableForceRetrieveKnowledge: aiAgentArgs.disableForceRetrieveKnowledge
|
|
189
199
|
});
|
|
190
200
|
const specialistAgent = specialist.getAgent();
|
|
191
|
-
return {
|
|
201
|
+
return {
|
|
202
|
+
agent: specialistAgent,
|
|
203
|
+
tools
|
|
204
|
+
};
|
|
192
205
|
}
|
|
193
206
|
async getMessages(botContext, authToken, previousHubtypeMessages) {
|
|
194
|
-
const hubtypeClient = new
|
|
195
|
-
if (!
|
|
196
|
-
return await hubtypeClient.getLocalMessages(
|
|
207
|
+
const hubtypeClient = new HubtypeApiClient(authToken);
|
|
208
|
+
if (!isProd) {
|
|
209
|
+
return await hubtypeClient.getLocalMessages(MAX_MEMORY_LENGTH, previousHubtypeMessages, this.localStorageKey);
|
|
197
210
|
}
|
|
198
211
|
// Default to V2
|
|
199
212
|
const result = await hubtypeClient.getMessagesV2(botContext, this.memory, previousHubtypeMessages);
|
|
200
213
|
return result.messages;
|
|
201
214
|
}
|
|
202
215
|
buildTools(aiAgentArgs) {
|
|
203
|
-
const activeTools = aiAgentArgs.type ===
|
|
204
|
-
const activeToolNames = activeTools.map(tool
|
|
205
|
-
const availableTools = this.toolDefinitions.filter(tool
|
|
206
|
-
return availableTools.map(toolDefinition
|
|
207
|
-
return (
|
|
216
|
+
const activeTools = aiAgentArgs.type === AiAgentType.Router ? [] : aiAgentArgs.activeTools;
|
|
217
|
+
const activeToolNames = activeTools.map((tool)=>tool.name);
|
|
218
|
+
const availableTools = this.toolDefinitions.filter((tool)=>activeToolNames.includes(tool.name));
|
|
219
|
+
return availableTools.map((toolDefinition)=>{
|
|
220
|
+
return agents_tool({
|
|
208
221
|
name: toolDefinition.name,
|
|
209
222
|
description: toolDefinition.description,
|
|
210
223
|
parameters: toolDefinition.schema,
|
|
211
|
-
execute: toolDefinition.func
|
|
224
|
+
execute: toolDefinition.func
|
|
212
225
|
});
|
|
213
226
|
});
|
|
214
227
|
}
|
|
228
|
+
constructor(options){
|
|
229
|
+
_define_property(this, "authToken", void 0);
|
|
230
|
+
_define_property(this, "memory", void 0);
|
|
231
|
+
_define_property(this, "logger", void 0);
|
|
232
|
+
_define_property(this, "timeout", void 0);
|
|
233
|
+
_define_property(this, "maxRetries", void 0);
|
|
234
|
+
_define_property(this, "toolDefinitions", []);
|
|
235
|
+
_define_property(this, "localStorageKey", void 0);
|
|
236
|
+
this.authToken = options?.authToken;
|
|
237
|
+
this.toolDefinitions = options?.customTools || [];
|
|
238
|
+
this.memory = this.getMemoryOptions(options?.memory);
|
|
239
|
+
this.timeout = options?.timeout ?? DEFAULT_TIMEOUT_16_SECONDS;
|
|
240
|
+
this.maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
241
|
+
this.logger = createDebugLogger(options?.enableDebug ?? false);
|
|
242
|
+
this.localStorageKey = options?.localStorageKey ?? 'botonicState';
|
|
243
|
+
setTracingDisabled(true);
|
|
244
|
+
this.logger.logInitialConfig({
|
|
245
|
+
messageHistoryApiVersion: 'v2',
|
|
246
|
+
maxRetries: options?.maxRetries ?? DEFAULT_MAX_RETRIES,
|
|
247
|
+
timeout: options?.timeout ?? DEFAULT_TIMEOUT_16_SECONDS,
|
|
248
|
+
customToolNames: this.toolDefinitions.map((t)=>t.name),
|
|
249
|
+
memory: this.memory
|
|
250
|
+
});
|
|
251
|
+
}
|
|
215
252
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
export default BotonicPluginAiAgents;
|
|
258
|
+
|
|
219
259
|
//# 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":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n type AIAgentRouterArgs,\n type AiAgentArgs,\n type AiAgentSpecialistArgs,\n AiAgentType,\n type BotContext,\n type HubtypeAssistantMessage,\n type Plugin,\n type ResolvedPlugins,\n} from '@botonic/core'\nimport { handoff, setTracingDisabled, tool } from '@openai/agents'\nimport { v7 as uuidv7 } from 'uuid'\nimport type { ZodObject } from 'zod'\nimport { RouterAgent, SpecialistAgent } from './agents'\nimport {\n DEFAULT_MAX_RETRIES,\n DEFAULT_TIMEOUT_16_SECONDS,\n isProd,\n MAX_MEMORY_LENGTH,\n} from './constants'\nimport { createDebugLogger, type DebugLogger } from './debug-logger'\nimport { LLMConfig } from './llm-config'\nimport { RouterRunner, SpecialistRunner } from './runners'\nimport { HubtypeApiClient } from './services/hubtype-api-client'\nimport type {\n AgenticInputMessage,\n Context,\n CustomTool,\n InferenceResponse,\n MemoryOptions,\n PluginAiAgentOptions,\n Tool,\n} from './types'\n\nexport default class BotonicPluginAiAgents<\n TPlugins extends ResolvedPlugins = ResolvedPlugins,\n TExtraData = any,\n> implements Plugin\n{\n private readonly authToken?: string\n private readonly memory: MemoryOptions\n private readonly logger: DebugLogger\n private readonly timeout: number\n private readonly maxRetries: number\n public toolDefinitions: CustomTool<TPlugins, TExtraData>[] = []\n private readonly localStorageKey: string\n\n constructor(options?: PluginAiAgentOptions<TPlugins, TExtraData>) {\n this.authToken = options?.authToken\n this.toolDefinitions = options?.customTools || []\n this.memory = this.getMemoryOptions(options?.memory)\n this.timeout = options?.timeout ?? DEFAULT_TIMEOUT_16_SECONDS\n this.maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES\n this.logger = createDebugLogger(options?.enableDebug ?? false)\n this.localStorageKey = options?.localStorageKey ?? 'botonicState'\n setTracingDisabled(true)\n\n this.logger.logInitialConfig({\n messageHistoryApiVersion: 'v2',\n maxRetries: options?.maxRetries ?? DEFAULT_MAX_RETRIES,\n timeout: options?.timeout ?? DEFAULT_TIMEOUT_16_SECONDS,\n customToolNames: this.toolDefinitions.map(t => t.name),\n memory: this.memory,\n })\n }\n\n private getMemoryOptions(memory?: Partial<MemoryOptions>): MemoryOptions {\n return {\n maxMessages: memory?.maxMessages ?? MAX_MEMORY_LENGTH,\n includeToolCalls: memory?.includeToolCalls ?? true,\n maxFullToolResults: memory?.maxFullToolResults ?? 1,\n debugMode: memory?.debugMode ?? false,\n }\n }\n\n pre(): void {\n return\n }\n\n async getInference(\n botContext: BotContext<TPlugins, TExtraData>,\n aiAgentArgs: AiAgentArgs\n ): Promise<InferenceResponse> {\n const authToken = isProd ? botContext.session._access_token : this.authToken\n if (!authToken) {\n throw new Error('Auth token is required')\n }\n\n const inferenceId = uuidv7()\n\n try {\n if (aiAgentArgs.type === AiAgentType.Specialist) {\n return await this.executeSpecialistAIAgent(\n botContext,\n aiAgentArgs,\n authToken,\n inferenceId\n )\n }\n\n if (aiAgentArgs.type === AiAgentType.Router) {\n return await this.executeRouterAIAgent(\n botContext,\n aiAgentArgs,\n authToken,\n inferenceId\n )\n }\n\n throw new Error('Invalid agent type')\n } catch (error) {\n console.error('error plugin returns undefined', error)\n return {\n messages: [],\n toolsExecuted: [],\n memoryLength: 0,\n exit: true,\n error: true,\n inputGuardrailsTriggered: [],\n outputGuardrailsTriggered: [],\n startingAgentName: '',\n lastAgentName: '',\n availableSpecialists: [],\n isTransferredToSpecialist: false,\n }\n }\n }\n\n private async executeSpecialistAIAgent(\n botContext: BotContext<TPlugins, TExtraData>,\n aiAgentArgs: AiAgentSpecialistArgs,\n authToken: string,\n inferenceId: string\n ) {\n const llmConfig = new LLMConfig({\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n modelName: aiAgentArgs.model,\n verbosity: aiAgentArgs.verbosity,\n botContext,\n reasoningEffort: aiAgentArgs.reasoningEffort,\n })\n\n // Get LLM config, tools and agent\n const { tools, agent } = await this.getSpecialistAgentAndTools(\n botContext,\n aiAgentArgs,\n aiAgentArgs.outputMessagesSchemas || [],\n authToken,\n inferenceId,\n llmConfig\n )\n\n // Get messages\n const messages = await this.getMessages(\n botContext,\n authToken,\n aiAgentArgs.previousHubtypeMessages || []\n )\n\n // Build context\n const context: Context<TPlugins, TExtraData> = {\n authToken,\n knowledgeUsed: {\n query: '',\n sourceIds: [],\n chunksIds: [],\n chunkTexts: [],\n },\n request: botContext,\n }\n\n // Log agent debug info\n this.logger.logAgentDebugInfo(\n aiAgentArgs,\n tools.map(t => t.name),\n messages\n )\n\n // Run agent\n const runner = new SpecialistRunner<TPlugins, TExtraData>(\n agent,\n llmConfig,\n inferenceId,\n this.logger\n )\n return await runner.run(messages, context)\n }\n\n private async executeRouterAIAgent(\n botContext: BotContext<TPlugins, TExtraData>,\n aiAgentArgs: AIAgentRouterArgs,\n authToken: string,\n inferenceId: string\n ) {\n const { specialists, name, instructions } = aiAgentArgs\n\n const llmConfig = new LLMConfig({\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n modelName: aiAgentArgs.model,\n verbosity: aiAgentArgs.verbosity,\n botContext,\n reasoningEffort: aiAgentArgs.reasoningEffort,\n })\n\n const specialistsAgents = await Promise.all(\n specialists.map(async specialistData => {\n // If the forceToolNameOverride is set, we force this override for all specialists\n const forceToolNameOverride = aiAgentArgs.forceToolNameOverride\n const reasoningEffort = aiAgentArgs.reasoningEffort\n const disableForceRetrieveKnowledge =\n aiAgentArgs.disableForceRetrieveKnowledge\n\n // Create AiAgentArgs for the specialist, with values from AIAgentRouterArgs\n const aiAgentSpecialistArgs: AiAgentArgs = {\n ...specialistData,\n forceToolNameOverride,\n reasoningEffort,\n disableForceRetrieveKnowledge,\n }\n\n const { agent } = await this.getSpecialistAgentAndTools(\n botContext,\n aiAgentSpecialistArgs,\n aiAgentArgs.outputMessagesSchemas || [],\n authToken,\n inferenceId,\n llmConfig\n )\n\n return handoff(agent, {\n toolNameOverride: specialistData.name,\n toolDescriptionOverride: specialistData.description,\n })\n })\n )\n\n const router = await RouterAgent.create<TPlugins, TExtraData>({\n name,\n instructions,\n llmConfig,\n handoffs: specialistsAgents,\n inputGuardrailRules: aiAgentArgs.inputGuardrailRules || [],\n outputMessagesSchemas: aiAgentArgs.outputMessagesSchemas || [],\n guardrailTrackingContext: {\n botId: botContext.session.bot.id,\n isTest: botContext.session.is_test_integration,\n authToken,\n inferenceId,\n },\n })\n\n // Get messages\n const messages = await this.getMessages(\n botContext,\n authToken,\n aiAgentArgs.previousHubtypeMessages || []\n )\n\n // Build context\n const context: Context<TPlugins, TExtraData> = {\n authToken,\n knowledgeUsed: {\n query: '',\n sourceIds: [],\n chunksIds: [],\n chunkTexts: [],\n },\n request: botContext,\n }\n\n // Run agent\n const routerAgent = router.getAgent()\n const runner = new RouterRunner<TPlugins, TExtraData>(\n routerAgent,\n llmConfig,\n inferenceId,\n this.logger\n )\n\n return await runner.run(messages, context)\n }\n\n private async getSpecialistAgentAndTools(\n botContext: BotContext,\n aiAgentArgs: AiAgentArgs,\n outputMessagesSchemas: ZodObject<any>[],\n authToken: string,\n inferenceId: string,\n llmConfig: LLMConfig\n ) {\n // Build tools\n const tools = this.buildTools(aiAgentArgs)\n\n // Build agent\n const sourceIds =\n aiAgentArgs.type === AiAgentType.Specialist ? aiAgentArgs.sourceIds : []\n\n const specialist = await SpecialistAgent.create<TPlugins, TExtraData>({\n name: aiAgentArgs.name,\n instructions: aiAgentArgs.instructions,\n tools: tools,\n contactInfo: botContext.session.user.contact_info || [],\n inputGuardrailRules: aiAgentArgs.inputGuardrailRules || [],\n sourceIds,\n outputMessagesSchemas: outputMessagesSchemas || [],\n campaignsContext: botContext.input.context?.campaigns_v2,\n logger: this.logger,\n llmConfig,\n guardrailTrackingContext: {\n botId: botContext.session.bot.id,\n isTest: botContext.session.is_test_integration,\n authToken,\n inferenceId,\n },\n forceToolNameOverride: aiAgentArgs.forceToolNameOverride,\n disableForceRetrieveKnowledge: aiAgentArgs.disableForceRetrieveKnowledge,\n })\n const specialistAgent = specialist.getAgent()\n\n return { agent: specialistAgent, tools }\n }\n\n private async getMessages(\n botContext: BotContext,\n authToken: string,\n previousHubtypeMessages: HubtypeAssistantMessage[]\n ): Promise<AgenticInputMessage[]> {\n const hubtypeClient = new HubtypeApiClient(authToken)\n if (!isProd) {\n return await hubtypeClient.getLocalMessages(\n MAX_MEMORY_LENGTH,\n previousHubtypeMessages,\n this.localStorageKey\n )\n }\n\n // Default to V2\n const result = await hubtypeClient.getMessagesV2(\n botContext,\n this.memory,\n previousHubtypeMessages\n )\n return result.messages\n }\n\n private buildTools(aiAgentArgs: AiAgentArgs): Tool<TPlugins, TExtraData>[] {\n const activeTools =\n aiAgentArgs.type === AiAgentType.Router ? [] : aiAgentArgs.activeTools\n const activeToolNames = activeTools.map(tool => tool.name)\n const availableTools = this.toolDefinitions.filter(tool =>\n activeToolNames.includes(tool.name)\n )\n return availableTools.map(toolDefinition => {\n return tool<any, Context<TPlugins, TExtraData>, any>({\n name: toolDefinition.name,\n description: toolDefinition.description,\n parameters: toolDefinition.schema,\n execute: toolDefinition.func,\n })\n })\n }\n}\n\nexport * from './bot-config-tools'\nexport * from './types'\n"],"names":["AiAgentType","handoff","setTracingDisabled","tool","v7","uuidv7","RouterAgent","SpecialistAgent","DEFAULT_MAX_RETRIES","DEFAULT_TIMEOUT_16_SECONDS","isProd","MAX_MEMORY_LENGTH","createDebugLogger","LLMConfig","RouterRunner","SpecialistRunner","HubtypeApiClient","BotonicPluginAiAgents","memory","botContext","aiAgentArgs","authToken","Error","inferenceId","error","console","llmConfig","tools","agent","messages","context","t","runner","specialists","name","instructions","specialistsAgents","Promise","specialistData","forceToolNameOverride","reasoningEffort","disableForceRetrieveKnowledge","aiAgentSpecialistArgs","router","routerAgent","outputMessagesSchemas","sourceIds","specialist","specialistAgent","previousHubtypeMessages","hubtypeClient","result","activeTools","activeToolNames","availableTools","toolDefinition","options"],"mappings":"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"}
|
package/lib/esm/llm-config.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type BotContext, type ReasoningEffort, VerbosityLevel } from '@botonic/core';
|
|
2
2
|
import { type Model, type ModelProvider, type ModelSettings } from '@openai/agents';
|
|
3
|
-
import { type LLMProviderType } from './constants';
|
|
3
|
+
import { type LLMProviderType } from './constants.js';
|
|
4
4
|
export interface LLMConfigParams {
|
|
5
5
|
maxRetries: number;
|
|
6
6
|
timeout: number;
|
package/lib/esm/llm-config.js
CHANGED
|
@@ -1,44 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { VerbosityLevel } from "@botonic/core";
|
|
2
|
+
import { OpenAIProvider } from "@openai/agents";
|
|
3
|
+
import openai, { AzureOpenAI } from "openai";
|
|
4
|
+
import { LITELLM_TAG_KEYS, LLM_API_KEY, LLM_API_URL, LLM_AZURE_API_VERSION, LLM_OPENAI_MODEL, LLM_PROVIDER, LLM_PROVIDERS, isProd } from "./constants.js";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
function _define_property(obj, key, value) {
|
|
11
|
+
if (key in obj) {
|
|
12
|
+
Object.defineProperty(obj, key, {
|
|
13
|
+
value: value,
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true
|
|
17
|
+
});
|
|
18
|
+
} else obj[key] = value;
|
|
19
|
+
return obj;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
9
25
|
class LLMConfig {
|
|
10
|
-
constructor({ maxRetries, timeout, modelName, verbosity, botContext, reasoningEffort, }) {
|
|
11
|
-
this.maxRetries = maxRetries;
|
|
12
|
-
this.timeout = timeout;
|
|
13
|
-
this.botContext = botContext;
|
|
14
|
-
this.modelName =
|
|
15
|
-
constants_1.LLM_PROVIDER === constants_1.LLM_PROVIDERS.OPENAI ? constants_1.LLM_OPENAI_MODEL : modelName;
|
|
16
|
-
this.modelProvider = this.getModelProvider();
|
|
17
|
-
this.modelSettings = this.getModelSettings(modelName, verbosity, reasoningEffort);
|
|
18
|
-
}
|
|
19
26
|
async getModel() {
|
|
20
27
|
return await this.modelProvider.getModel(this.modelName);
|
|
21
28
|
}
|
|
22
29
|
getModelProvider() {
|
|
23
30
|
const client = this.getClient();
|
|
24
|
-
return new
|
|
31
|
+
return new OpenAIProvider({
|
|
25
32
|
openAIClient: client,
|
|
26
|
-
useResponses: false
|
|
33
|
+
useResponses: false
|
|
27
34
|
});
|
|
28
35
|
}
|
|
29
36
|
getProviderName() {
|
|
30
|
-
if (this.botContext.settings.LITELLM_API_URL ||
|
|
31
|
-
|
|
32
|
-
return constants_1.LLM_PROVIDERS.LITELLM;
|
|
37
|
+
if (this.botContext.settings.LITELLM_API_URL || LLM_PROVIDER === LLM_PROVIDERS.LITELLM) {
|
|
38
|
+
return LLM_PROVIDERS.LITELLM;
|
|
33
39
|
}
|
|
34
|
-
return
|
|
40
|
+
return LLM_PROVIDER;
|
|
35
41
|
}
|
|
36
42
|
getClient() {
|
|
37
|
-
if (this.getProviderName() ===
|
|
38
|
-
const litellmUrl = this.botContext.settings.LITELLM_API_URL ||
|
|
43
|
+
if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {
|
|
44
|
+
const litellmUrl = this.botContext.settings.LITELLM_API_URL || LLM_API_URL || '';
|
|
39
45
|
return this.getLiteLLMClient(litellmUrl);
|
|
40
46
|
}
|
|
41
|
-
if (
|
|
47
|
+
if (LLM_PROVIDER === LLM_PROVIDERS.OPENAI) {
|
|
42
48
|
return this.getOpenAIClient();
|
|
43
49
|
}
|
|
44
50
|
return this.getAzureOpenAiClient();
|
|
@@ -48,74 +54,97 @@ class LLMConfig {
|
|
|
48
54
|
const orgId = this.botContext.session.organization_id;
|
|
49
55
|
const parts = [];
|
|
50
56
|
if (botId) {
|
|
51
|
-
parts.push(`${
|
|
57
|
+
parts.push(`${LITELLM_TAG_KEYS.BOT_ID}:${botId}`);
|
|
52
58
|
}
|
|
53
59
|
if (orgId) {
|
|
54
|
-
parts.push(`${
|
|
60
|
+
parts.push(`${LITELLM_TAG_KEYS.ORG_ID}:${orgId}`);
|
|
55
61
|
}
|
|
56
|
-
return parts.length > 0
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
return parts.length > 0 ? {
|
|
63
|
+
'x-litellm-tags': parts.join(LITELLM_TAG_KEYS.SEPARATOR)
|
|
64
|
+
} : undefined;
|
|
59
65
|
}
|
|
60
66
|
getLiteLLMClient(litellmUrl) {
|
|
61
|
-
return new
|
|
62
|
-
apiKey: this.botContext.secrets.LITELLM_API_KEY ||
|
|
67
|
+
return new openai({
|
|
68
|
+
apiKey: this.botContext.secrets.LITELLM_API_KEY || LLM_API_KEY,
|
|
63
69
|
baseURL: litellmUrl,
|
|
64
70
|
timeout: this.timeout,
|
|
65
71
|
maxRetries: this.maxRetries,
|
|
66
|
-
dangerouslyAllowBrowser: !
|
|
67
|
-
defaultHeaders: this.buildLiteLLMTags()
|
|
72
|
+
dangerouslyAllowBrowser: !isProd,
|
|
73
|
+
defaultHeaders: this.buildLiteLLMTags()
|
|
68
74
|
});
|
|
69
75
|
}
|
|
70
76
|
getOpenAIClient() {
|
|
71
|
-
return new
|
|
72
|
-
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY ||
|
|
77
|
+
return new openai({
|
|
78
|
+
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || LLM_API_KEY,
|
|
73
79
|
timeout: this.timeout,
|
|
74
80
|
maxRetries: this.maxRetries,
|
|
75
|
-
dangerouslyAllowBrowser: !
|
|
81
|
+
dangerouslyAllowBrowser: !isProd
|
|
76
82
|
});
|
|
77
83
|
}
|
|
78
84
|
getAzureOpenAiClient() {
|
|
79
|
-
const baseURL = `${this.botContext.settings.AZURE_OPENAI_API_BASE ||
|
|
80
|
-
return new
|
|
81
|
-
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY ||
|
|
82
|
-
apiVersion: this.botContext.settings.AZURE_OPENAI_API_VERSION ||
|
|
83
|
-
constants_1.LLM_AZURE_API_VERSION,
|
|
85
|
+
const baseURL = `${this.botContext.settings.AZURE_OPENAI_API_BASE || LLM_API_URL}openai/`;
|
|
86
|
+
return new AzureOpenAI({
|
|
87
|
+
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || LLM_API_KEY,
|
|
88
|
+
apiVersion: this.botContext.settings.AZURE_OPENAI_API_VERSION || LLM_AZURE_API_VERSION,
|
|
84
89
|
deployment: this.modelName,
|
|
85
90
|
baseURL,
|
|
86
91
|
timeout: this.timeout,
|
|
87
92
|
maxRetries: this.maxRetries,
|
|
88
|
-
dangerouslyAllowBrowser: !
|
|
93
|
+
dangerouslyAllowBrowser: !isProd
|
|
89
94
|
});
|
|
90
95
|
}
|
|
91
96
|
getModelSettings(model, verbosity, reasoningEffort) {
|
|
92
97
|
if (model.includes('gpt-4')) {
|
|
93
98
|
return {
|
|
94
99
|
temperature: 0,
|
|
95
|
-
text: {
|
|
100
|
+
text: {
|
|
101
|
+
verbosity: VerbosityLevel.Medium
|
|
102
|
+
}
|
|
96
103
|
};
|
|
97
104
|
}
|
|
98
105
|
if (reasoningEffort) {
|
|
99
106
|
return {
|
|
100
|
-
reasoning: {
|
|
107
|
+
reasoning: {
|
|
108
|
+
effort: reasoningEffort
|
|
109
|
+
},
|
|
101
110
|
temperature: 1,
|
|
102
|
-
text: {
|
|
111
|
+
text: {
|
|
112
|
+
verbosity
|
|
113
|
+
}
|
|
103
114
|
};
|
|
104
115
|
}
|
|
105
116
|
return {
|
|
106
117
|
temperature: 1,
|
|
107
|
-
text: {
|
|
118
|
+
text: {
|
|
119
|
+
verbosity
|
|
120
|
+
}
|
|
108
121
|
};
|
|
109
122
|
}
|
|
110
123
|
getApiVersion() {
|
|
111
|
-
if (this.getProviderName() ===
|
|
124
|
+
if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {
|
|
112
125
|
return undefined;
|
|
113
126
|
}
|
|
114
|
-
if (
|
|
127
|
+
if (LLM_PROVIDER !== LLM_PROVIDERS.AZURE) {
|
|
115
128
|
return 'NOT_API_VERSION_FOR_OPENAI_PROVIDER';
|
|
116
129
|
}
|
|
117
|
-
return
|
|
130
|
+
return this.botContext.settings.AZURE_OPENAI_API_VERSION || LLM_AZURE_API_VERSION;
|
|
131
|
+
}
|
|
132
|
+
constructor({ maxRetries, timeout, modelName, verbosity, botContext, reasoningEffort }){
|
|
133
|
+
_define_property(this, "maxRetries", void 0);
|
|
134
|
+
_define_property(this, "timeout", void 0);
|
|
135
|
+
_define_property(this, "botContext", void 0);
|
|
136
|
+
_define_property(this, "modelName", void 0);
|
|
137
|
+
_define_property(this, "modelSettings", void 0);
|
|
138
|
+
_define_property(this, "modelProvider", void 0);
|
|
139
|
+
this.maxRetries = maxRetries;
|
|
140
|
+
this.timeout = timeout;
|
|
141
|
+
this.botContext = botContext;
|
|
142
|
+
this.modelName = LLM_PROVIDER === LLM_PROVIDERS.OPENAI ? LLM_OPENAI_MODEL : modelName;
|
|
143
|
+
this.modelProvider = this.getModelProvider();
|
|
144
|
+
this.modelSettings = this.getModelSettings(modelName, verbosity, reasoningEffort);
|
|
118
145
|
}
|
|
119
146
|
}
|
|
120
|
-
|
|
147
|
+
|
|
148
|
+
export { LLMConfig };
|
|
149
|
+
|
|
121
150
|
//# sourceMappingURL=llm-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-config.js","
|
|
1
|
+
{"version":3,"file":"llm-config.js","sources":["../../src/llm-config.ts"],"sourcesContent":["import {\n type BotContext,\n type ReasoningEffort,\n VerbosityLevel,\n} from '@botonic/core'\nimport {\n type Model,\n type ModelProvider,\n type ModelSettings,\n OpenAIProvider,\n} from '@openai/agents'\nimport OpenAI, { AzureOpenAI } from 'openai'\nimport {\n isProd,\n LITELLM_TAG_KEYS,\n LLM_API_KEY,\n LLM_API_URL,\n LLM_AZURE_API_VERSION,\n LLM_OPENAI_MODEL,\n LLM_PROVIDER,\n LLM_PROVIDERS,\n type LLMProviderType,\n} from './constants'\n\nexport interface LLMConfigParams {\n maxRetries: number\n timeout: number\n modelName: string\n verbosity: VerbosityLevel\n botContext: BotContext\n reasoningEffort?: ReasoningEffort\n}\n\nexport class LLMConfig {\n private readonly maxRetries: number\n private readonly timeout: number\n private readonly botContext: BotContext\n public readonly modelName: string\n public readonly modelSettings: ModelSettings\n public readonly modelProvider: ModelProvider\n\n constructor({\n maxRetries,\n timeout,\n modelName,\n verbosity,\n botContext,\n reasoningEffort,\n }: LLMConfigParams) {\n this.maxRetries = maxRetries\n this.timeout = timeout\n this.botContext = botContext\n this.modelName =\n LLM_PROVIDER === LLM_PROVIDERS.OPENAI ? LLM_OPENAI_MODEL : modelName\n this.modelProvider = this.getModelProvider()\n this.modelSettings = this.getModelSettings(\n modelName,\n verbosity,\n reasoningEffort\n )\n }\n\n async getModel(): Promise<Model> {\n return await this.modelProvider.getModel(this.modelName)\n }\n\n private getModelProvider(): ModelProvider {\n const client = this.getClient()\n return new OpenAIProvider({\n openAIClient: client,\n useResponses: false,\n })\n }\n\n getProviderName(): LLMProviderType {\n if (\n this.botContext.settings.LITELLM_API_URL ||\n LLM_PROVIDER === LLM_PROVIDERS.LITELLM\n ) {\n return LLM_PROVIDERS.LITELLM\n }\n return LLM_PROVIDER\n }\n\n private getClient(): OpenAI | AzureOpenAI {\n if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {\n const litellmUrl =\n this.botContext.settings.LITELLM_API_URL || LLM_API_URL || ''\n return this.getLiteLLMClient(litellmUrl)\n }\n if (LLM_PROVIDER === LLM_PROVIDERS.OPENAI) {\n return this.getOpenAIClient()\n }\n return this.getAzureOpenAiClient()\n }\n\n private buildLiteLLMTags(): { 'x-litellm-tags': string } | undefined {\n const botId = this.botContext.session.bot.id\n const orgId = this.botContext.session.organization_id\n const parts: string[] = []\n if (botId) {\n parts.push(`${LITELLM_TAG_KEYS.BOT_ID}:${botId}`)\n }\n if (orgId) {\n parts.push(`${LITELLM_TAG_KEYS.ORG_ID}:${orgId}`)\n }\n return parts.length > 0\n ? { 'x-litellm-tags': parts.join(LITELLM_TAG_KEYS.SEPARATOR) }\n : undefined\n }\n\n private getLiteLLMClient(litellmUrl: string): OpenAI {\n return new OpenAI({\n apiKey: this.botContext.secrets.LITELLM_API_KEY || LLM_API_KEY,\n baseURL: litellmUrl,\n timeout: this.timeout,\n maxRetries: this.maxRetries,\n dangerouslyAllowBrowser: !isProd,\n defaultHeaders: this.buildLiteLLMTags(),\n })\n }\n\n private getOpenAIClient(): OpenAI {\n return new OpenAI({\n apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || LLM_API_KEY,\n timeout: this.timeout,\n maxRetries: this.maxRetries,\n dangerouslyAllowBrowser: !isProd,\n })\n }\n\n private getAzureOpenAiClient(): AzureOpenAI {\n const baseURL = `${this.botContext.settings.AZURE_OPENAI_API_BASE || LLM_API_URL}openai/`\n\n return new AzureOpenAI({\n apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || LLM_API_KEY,\n apiVersion:\n this.botContext.settings.AZURE_OPENAI_API_VERSION ||\n LLM_AZURE_API_VERSION,\n deployment: this.modelName,\n baseURL,\n timeout: this.timeout,\n maxRetries: this.maxRetries,\n dangerouslyAllowBrowser: !isProd,\n })\n }\n\n private getModelSettings(\n model: string,\n verbosity: VerbosityLevel,\n reasoningEffort?: ReasoningEffort\n ): ModelSettings {\n if (model.includes('gpt-4')) {\n return {\n temperature: 0,\n text: { verbosity: VerbosityLevel.Medium },\n }\n }\n\n if (reasoningEffort) {\n return {\n reasoning: { effort: reasoningEffort },\n temperature: 1,\n text: { verbosity },\n }\n }\n\n return {\n temperature: 1,\n text: { verbosity },\n }\n }\n\n getApiVersion(): string | undefined {\n if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {\n return undefined\n }\n if (LLM_PROVIDER !== LLM_PROVIDERS.AZURE) {\n return 'NOT_API_VERSION_FOR_OPENAI_PROVIDER'\n }\n return (\n this.botContext.settings.AZURE_OPENAI_API_VERSION || LLM_AZURE_API_VERSION\n )\n }\n}\n"],"names":["VerbosityLevel","OpenAIProvider","OpenAI","AzureOpenAI","isProd","LITELLM_TAG_KEYS","LLM_API_KEY","LLM_API_URL","LLM_AZURE_API_VERSION","LLM_OPENAI_MODEL","LLM_PROVIDER","LLM_PROVIDERS","LLMConfig","client","litellmUrl","botId","orgId","parts","undefined","baseURL","model","verbosity","reasoningEffort","maxRetries","timeout","modelName","botContext"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { OutputMessage, ResolvedPlugins, ToolExecution } from '@botonic/core';
|
|
2
|
-
import type { DebugLogger } from '../debug-logger';
|
|
3
|
-
import type { LLMConfig } from '../llm-config';
|
|
4
|
-
import type { AgenticInputMessage, AIAgent, Context, ResultRawResponse, RunResult } from '../types';
|
|
2
|
+
import type { DebugLogger } from '../debug-logger.js';
|
|
3
|
+
import type { LLMConfig } from '../llm-config.js';
|
|
4
|
+
import type { AgenticInputMessage, AIAgent, Context, ResultRawResponse, RunResult } from '../types.js';
|
|
5
5
|
export interface RunnerResult {
|
|
6
6
|
finalOutput?: {
|
|
7
7
|
messages?: OutputMessage[];
|