@botonic/plugin-ai-agents 2.28.0 → 2.30.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.
Files changed (95) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/package.json +7 -5
  3. package/src/index.d.ts +2 -1
  4. package/src/index.js +2 -1
  5. package/src/index.js.map +1 -1
  6. package/src/lib/agents/base-agent.d.ts +25 -0
  7. package/src/lib/agents/base-agent.js +39 -0
  8. package/src/lib/agents/base-agent.js.map +1 -0
  9. package/src/lib/agents/index.d.ts +2 -0
  10. package/src/lib/agents/index.js +3 -0
  11. package/src/lib/agents/index.js.map +1 -0
  12. package/src/lib/agents/router-agent.d.ts +23 -0
  13. package/src/lib/agents/router-agent.js +32 -0
  14. package/src/lib/agents/router-agent.js.map +1 -0
  15. package/src/lib/agents/specialist-agent.d.ts +33 -0
  16. package/src/lib/agents/specialist-agent.js +103 -0
  17. package/src/lib/agents/specialist-agent.js.map +1 -0
  18. package/src/lib/bot-config-tools.d.ts +7 -0
  19. package/src/lib/bot-config-tools.js +11 -0
  20. package/src/lib/bot-config-tools.js.map +1 -0
  21. package/src/lib/constants.d.ts +16 -6
  22. package/src/lib/constants.js +16 -8
  23. package/src/lib/constants.js.map +1 -1
  24. package/src/lib/debug-logger.d.ts +4 -2
  25. package/src/lib/debug-logger.js +20 -22
  26. package/src/lib/debug-logger.js.map +1 -1
  27. package/src/lib/guardrails/input.d.ts +9 -3
  28. package/src/lib/guardrails/input.js +100 -24
  29. package/src/lib/guardrails/input.js.map +1 -1
  30. package/src/lib/index.d.ts +9 -3
  31. package/src/lib/index.js +128 -36
  32. package/src/lib/index.js.map +1 -1
  33. package/src/lib/llm-config.d.ts +31 -0
  34. package/src/lib/llm-config.js +111 -0
  35. package/src/lib/llm-config.js.map +1 -0
  36. package/src/lib/runners/base-runner.d.ts +32 -0
  37. package/src/lib/runners/base-runner.js +182 -0
  38. package/src/lib/runners/base-runner.js.map +1 -0
  39. package/src/lib/runners/index.d.ts +2 -0
  40. package/src/lib/runners/index.js +3 -0
  41. package/src/lib/runners/index.js.map +1 -0
  42. package/src/lib/runners/router-runner.d.ts +8 -0
  43. package/src/lib/runners/router-runner.js +40 -0
  44. package/src/lib/runners/router-runner.js.map +1 -0
  45. package/src/lib/runners/specialist-runner.d.ts +4 -0
  46. package/src/lib/runners/specialist-runner.js +4 -0
  47. package/src/lib/runners/specialist-runner.js.map +1 -0
  48. package/src/lib/services/hubtype-api-client.d.ts +13 -0
  49. package/src/lib/{hubtype-api-client.js → services/hubtype-api-client.js} +32 -51
  50. package/src/lib/services/hubtype-api-client.js.map +1 -0
  51. package/src/lib/services/types.d.ts +71 -0
  52. package/src/lib/services/types.js +10 -0
  53. package/src/lib/services/types.js.map +1 -0
  54. package/src/lib/structured-output/bot-executor.d.ts +15 -0
  55. package/src/lib/structured-output/bot-executor.js +15 -0
  56. package/src/lib/structured-output/bot-executor.js.map +1 -0
  57. package/src/lib/structured-output/carousel.d.ts +8 -78
  58. package/src/lib/structured-output/carousel.js +2 -1
  59. package/src/lib/structured-output/carousel.js.map +1 -1
  60. package/src/lib/structured-output/exit.d.ts +5 -7
  61. package/src/lib/structured-output/exit.js +2 -1
  62. package/src/lib/structured-output/exit.js.map +1 -1
  63. package/src/lib/structured-output/flow-builder-content.d.ts +9 -0
  64. package/src/lib/structured-output/flow-builder-content.js +9 -0
  65. package/src/lib/structured-output/flow-builder-content.js.map +1 -0
  66. package/src/lib/structured-output/index.d.ts +103 -203
  67. package/src/lib/structured-output/index.js +30 -3
  68. package/src/lib/structured-output/index.js.map +1 -1
  69. package/src/lib/structured-output/text-with-buttons.d.ts +11 -41
  70. package/src/lib/structured-output/text-with-buttons.js +8 -1
  71. package/src/lib/structured-output/text-with-buttons.js.map +1 -1
  72. package/src/lib/structured-output/text.d.ts +6 -18
  73. package/src/lib/structured-output/text.js +2 -1
  74. package/src/lib/structured-output/text.js.map +1 -1
  75. package/src/lib/test-llm-config.d.ts +10 -0
  76. package/src/lib/test-llm-config.js +18 -0
  77. package/src/lib/test-llm-config.js.map +1 -0
  78. package/src/lib/tools/index.d.ts +1 -1
  79. package/src/lib/tools/index.js +1 -1
  80. package/src/lib/tools/index.js.map +1 -1
  81. package/src/lib/tools/retrieve-knowledge.d.ts +3 -6
  82. package/src/lib/tools/retrieve-knowledge.js +4 -4
  83. package/src/lib/tools/retrieve-knowledge.js.map +1 -1
  84. package/src/lib/types.d.ts +15 -9
  85. package/src/lib/agent-builder.d.ts +0 -30
  86. package/src/lib/agent-builder.js +0 -111
  87. package/src/lib/agent-builder.js.map +0 -1
  88. package/src/lib/hubtype-api-client.d.ts +0 -22
  89. package/src/lib/hubtype-api-client.js.map +0 -1
  90. package/src/lib/openai.d.ts +0 -1
  91. package/src/lib/openai.js +0 -21
  92. package/src/lib/openai.js.map +0 -1
  93. package/src/lib/runner.d.ts +0 -13
  94. package/src/lib/runner.js +0 -96
  95. package/src/lib/runner.js.map +0 -1
@@ -0,0 +1,182 @@
1
+ import { __awaiter } from "tslib";
2
+ import { InputGuardrailTripwireTriggered, Runner, RunToolCallItem, RunToolCallOutputItem, } from '@openai/agents';
3
+ import { HubtypeApiClient } from '../services/hubtype-api-client';
4
+ import { TrackFeature, TrackProductName } from '../services/types';
5
+ import { RETRIEVE_KNOWLEDGE_TOOL_NAME } from '../tools';
6
+ export class BaseRunner {
7
+ constructor(agent, llmConfig, inferenceId, logger) {
8
+ this.agent = agent;
9
+ this.llmConfig = llmConfig;
10
+ this.inferenceId = inferenceId;
11
+ this.logger = logger;
12
+ }
13
+ run(messages, context) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ const startTime = Date.now();
16
+ this.logger.logRunnerStart(this.llmConfig.modelName, this.llmConfig.modelSettings);
17
+ try {
18
+ const runner = new Runner({
19
+ tracingDisabled: true,
20
+ });
21
+ const result = (yield runner.run(this.agent, messages, {
22
+ context,
23
+ }));
24
+ const endTime = Date.now();
25
+ yield this.sendLlmRunTracking(result, context, startTime, endTime);
26
+ const runResult = this.buildRunResult(result, context, messages.length);
27
+ this.logger.logRunResult(runResult, startTime);
28
+ return runResult;
29
+ }
30
+ catch (error) {
31
+ const runResult = this.handleInputGuardrailTripwireTriggered(error, startTime);
32
+ if (runResult) {
33
+ return runResult;
34
+ }
35
+ this.logger.logRunnerError(startTime, error);
36
+ throw error;
37
+ }
38
+ });
39
+ }
40
+ getToolsExecuted(result, context) {
41
+ var _a;
42
+ const toolResultsByCallId = this.getToolResultsByCallId(result.newItems);
43
+ return (((_a = result.newItems) === null || _a === void 0 ? void 0 : _a.filter(item => item instanceof RunToolCallItem).map((item) => this.getToolExecutionInfo(item, context, toolResultsByCallId)).filter((toolExecution) => toolExecution.toolName !== '')) || []);
44
+ }
45
+ getToolResultsByCallId(newItems = []) {
46
+ const map = new Map();
47
+ for (const item of newItems) {
48
+ if (!(item instanceof RunToolCallOutputItem)) {
49
+ continue;
50
+ }
51
+ const rawItem = item.rawItem;
52
+ const callId = rawItem === null || rawItem === void 0 ? void 0 : rawItem.callId;
53
+ const output = rawItem === null || rawItem === void 0 ? void 0 : rawItem.output;
54
+ if (callId == null || output == null) {
55
+ continue;
56
+ }
57
+ const text = this.extractToolResult(output);
58
+ if (text != null) {
59
+ map.set(callId, text);
60
+ }
61
+ }
62
+ return map;
63
+ }
64
+ extractToolResult(output) {
65
+ if (typeof output === 'string') {
66
+ return output;
67
+ }
68
+ return (output === null || output === void 0 ? void 0 : output.type) === 'text' && typeof (output === null || output === void 0 ? void 0 : output.text) === 'string'
69
+ ? output.text
70
+ : undefined;
71
+ }
72
+ getToolExecutionInfo(item, context, toolResultsByCallId) {
73
+ if (item.rawItem.type !== 'function_call') {
74
+ return {
75
+ toolName: '',
76
+ toolArguments: {},
77
+ };
78
+ }
79
+ const toolName = item.rawItem.name;
80
+ const toolArguments = this.getSafeToolArguments(item.rawItem.arguments);
81
+ const toolResults = item.rawItem.callId
82
+ ? toolResultsByCallId.get(item.rawItem.callId)
83
+ : undefined;
84
+ const toolExecution = {
85
+ toolName,
86
+ toolArguments,
87
+ toolResults,
88
+ };
89
+ if (toolName === RETRIEVE_KNOWLEDGE_TOOL_NAME) {
90
+ return Object.assign(Object.assign({}, toolExecution), { knowledgebaseSourcesIds: context.knowledgeUsed.sourceIds, knowledgebaseChunksIds: context.knowledgeUsed.chunksIds });
91
+ }
92
+ return toolExecution;
93
+ }
94
+ getSafeToolArguments(rawToolArguments) {
95
+ try {
96
+ return JSON.parse(rawToolArguments);
97
+ }
98
+ catch (_error) {
99
+ return {};
100
+ }
101
+ }
102
+ buildRunResult(result, context, memoryLength) {
103
+ var _a;
104
+ const outputMessages = ((_a = result.finalOutput) === null || _a === void 0 ? void 0 : _a.messages) || [];
105
+ const hasExit = outputMessages.length === 0 ||
106
+ outputMessages.some(message => message.type === 'exit');
107
+ return {
108
+ startingAgentName: '',
109
+ lastAgentName: '',
110
+ availableSpecialists: [],
111
+ isTransferredToSpecialist: false,
112
+ messages: hasExit
113
+ ? []
114
+ : outputMessages.filter(message => message.type !== 'exit'),
115
+ toolsExecuted: this.getToolsExecuted(result, context),
116
+ exit: hasExit,
117
+ memoryLength,
118
+ error: false,
119
+ inputGuardrailsTriggered: [],
120
+ outputGuardrailsTriggered: [],
121
+ };
122
+ }
123
+ sendLlmRunTracking(result, context, startTime, endTime) {
124
+ return __awaiter(this, void 0, void 0, function* () {
125
+ var _a, _b, _c;
126
+ const rawResponses = (_a = result.rawResponses) !== null && _a !== void 0 ? _a : [];
127
+ if (rawResponses.length === 0) {
128
+ return;
129
+ }
130
+ const botonicContext = context.botonicContext;
131
+ const botId = botonicContext.session.bot.id;
132
+ const isTest = botonicContext.session.isTestIntegration;
133
+ const totalDuration = endTime - startTime;
134
+ const durationPerCall = Math.round(totalDuration / rawResponses.length);
135
+ const temperature = (_b = this.llmConfig.modelSettings.temperature) !== null && _b !== void 0 ? _b : 0;
136
+ const apiVersion = (_c = this.llmConfig.getApiVersion()) !== null && _c !== void 0 ? _c : 'NOT_API_VERSION_FOR_LITELLM';
137
+ const llmRuns = rawResponses.map(response => {
138
+ var _a, _b;
139
+ return ({
140
+ inference_id: this.inferenceId,
141
+ is_test: isTest,
142
+ product_name: TrackProductName.AI_AGENT,
143
+ deployment_name: this.llmConfig.modelName,
144
+ model_name: (_b = (_a = response.providerData) === null || _a === void 0 ? void 0 : _a['model']) !== null && _b !== void 0 ? _b : this.llmConfig.modelName,
145
+ feature: TrackFeature.AI_AGENT_RUN,
146
+ api_version: apiVersion,
147
+ num_prompt_tokens: response.usage.inputTokens,
148
+ num_completion_tokens: response.usage.outputTokens,
149
+ duration_in_milliseconds: durationPerCall,
150
+ temperature,
151
+ error: null,
152
+ });
153
+ });
154
+ const client = new HubtypeApiClient(botonicContext);
155
+ yield client.trackLlmRuns(botId, {
156
+ llm_runs: llmRuns,
157
+ });
158
+ });
159
+ }
160
+ handleInputGuardrailTripwireTriggered(error, startTime) {
161
+ if (error instanceof InputGuardrailTripwireTriggered) {
162
+ const runResult = {
163
+ startingAgentName: '',
164
+ lastAgentName: '',
165
+ availableSpecialists: [],
166
+ isTransferredToSpecialist: false,
167
+ messages: [],
168
+ memoryLength: 0,
169
+ toolsExecuted: [],
170
+ exit: true,
171
+ error: false,
172
+ inputGuardrailsTriggered: error.result.output.outputInfo,
173
+ outputGuardrailsTriggered: [],
174
+ };
175
+ this.logger.logGuardrailTriggered();
176
+ this.logger.logRunResult(runResult, startTime);
177
+ return runResult;
178
+ }
179
+ return undefined;
180
+ }
181
+ }
182
+ //# sourceMappingURL=base-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-runner.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/runners/base-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { RouterRunner } from './router-runner';
2
+ export { SpecialistRunner } from './specialist-runner';
@@ -0,0 +1,3 @@
1
+ export { RouterRunner } from './router-runner';
2
+ export { SpecialistRunner } from './specialist-runner';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/runners/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { ResolvedPlugins, UserExtraData } from '@botonic/core';
2
+ import type { AiAgentContext, RunResult } from '../types';
3
+ import { BaseRunner, type RunnerResult } from './base-runner';
4
+ export declare class RouterRunner<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData extends UserExtraData = UserExtraData> extends BaseRunner<TPlugins, TExtraData> {
5
+ protected buildRunResult(result: RunnerResult, context: AiAgentContext<TPlugins, TExtraData>, memoryLength: number): RunResult;
6
+ protected handleInputGuardrailTripwireTriggered(error: unknown, startTime: number): RunResult | undefined;
7
+ private getAvailableSpecialists;
8
+ }
@@ -0,0 +1,40 @@
1
+ import { Handoff } from '@openai/agents';
2
+ import { BaseRunner } from './base-runner';
3
+ export class RouterRunner extends BaseRunner {
4
+ buildRunResult(result, context, memoryLength) {
5
+ var _a, _b, _c;
6
+ const base = super.buildRunResult(result, context, memoryLength);
7
+ const availableSpecialists = this.getAvailableSpecialists();
8
+ const startingAgentName = (_a = this.agent.name) !== null && _a !== void 0 ? _a : '';
9
+ const lastAgentName = (_c = (_b = result.lastAgent) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';
10
+ return Object.assign(Object.assign({}, base), { startingAgentName,
11
+ lastAgentName,
12
+ availableSpecialists, isTransferredToSpecialist: startingAgentName !== lastAgentName });
13
+ }
14
+ handleInputGuardrailTripwireTriggered(error, startTime) {
15
+ const runResult = super.handleInputGuardrailTripwireTriggered(error, startTime);
16
+ if (runResult) {
17
+ runResult.startingAgentName = this.agent.name;
18
+ runResult.lastAgentName = this.agent.name;
19
+ runResult.availableSpecialists = this.getAvailableSpecialists();
20
+ runResult.isTransferredToSpecialist = false;
21
+ return runResult;
22
+ }
23
+ return undefined;
24
+ }
25
+ getAvailableSpecialists() {
26
+ var _a;
27
+ return ((_a = this.agent.handoffs) !== null && _a !== void 0 ? _a : []).map(
28
+ // biome-ignore lint/suspicious/noExplicitAny: handoff entries use internal SDK types
29
+ (entry) => {
30
+ const isHandoff = entry instanceof Handoff;
31
+ // biome-ignore lint/suspicious/noExplicitAny: SDK types
32
+ const agent = isHandoff ? entry.agent : entry;
33
+ const description = isHandoff
34
+ ? entry.toolDescription
35
+ : agent.handoffDescription;
36
+ return { name: agent.name, description };
37
+ });
38
+ }
39
+ }
40
+ //# sourceMappingURL=router-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-runner.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/runners/router-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAGpD,OAAO,EAAE,UAAU,EAAqB,MAAM,eAAe,CAAA;AAE7D,MAAM,OAAO,YAGX,SAAQ,UAAgC;IACrB,cAAc,CAC/B,MAAoB,EACpB,OAA6C,EAC7C,YAAoB;;QAEpB,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;QAEhE,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC3D,MAAM,iBAAiB,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,mCAAI,EAAE,CAAA;QAC/C,MAAM,aAAa,GAAG,MAAA,MAAA,MAAM,CAAC,SAAS,0CAAE,IAAI,mCAAI,EAAE,CAAA;QAElD,uCACK,IAAI,KACP,iBAAiB;YACjB,aAAa;YACb,oBAAoB,EACpB,yBAAyB,EAAE,iBAAiB,KAAK,aAAa,IAC/D;IACH,CAAC;IAEkB,qCAAqC,CACtD,KAAc,EACd,SAAiB;QAEjB,MAAM,SAAS,GAAG,KAAK,CAAC,qCAAqC,CAC3D,KAAK,EACL,SAAS,CACV,CAAA;QACD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;YAC7C,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;YACzC,SAAS,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;YAC/D,SAAS,CAAC,yBAAyB,GAAG,KAAK,CAAA;YAE3C,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,uBAAuB;;QAC7B,OAAO,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC,GAAG;QACpC,qFAAqF;QACrF,CAAC,KAA0C,EAAE,EAAE;YAC7C,MAAM,SAAS,GAAG,KAAK,YAAY,OAAO,CAAA;YAC1C,wDAAwD;YACxD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,KAAyB,CAAA;YAClE,MAAM,WAAW,GAAG,SAAS;gBAC3B,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAA;YAC5B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAyB,CAAA;QACjE,CAAC,CACF,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { ResolvedPlugins, UserExtraData } from '@botonic/core';
2
+ import { BaseRunner } from './base-runner';
3
+ export declare class SpecialistRunner<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData extends UserExtraData = UserExtraData> extends BaseRunner<TPlugins, TExtraData> {
4
+ }
@@ -0,0 +1,4 @@
1
+ import { BaseRunner } from './base-runner';
2
+ export class SpecialistRunner extends BaseRunner {
3
+ }
4
+ //# sourceMappingURL=specialist-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specialist-runner.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/runners/specialist-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,OAAO,gBAGX,SAAQ,UAAgC;CAAG"}
@@ -0,0 +1,13 @@
1
+ import type { BotonicContext } from '@botonic/core';
2
+ import { HubtypeAssistantMessage } from '@botonic/shared';
3
+ import type { Chunk, MemoryOptions } from '../types';
4
+ import type { GetMessagesV2Result, TrackLlmRunsData } from './types';
5
+ export declare class HubtypeApiClient {
6
+ private readonly botonicContext;
7
+ constructor(botonicContext: BotonicContext);
8
+ retrieveSimilarChunks(query: string, sourceIds: string[]): Promise<Chunk[]>;
9
+ getMessagesV2(botonicContext: BotonicContext, options: MemoryOptions, previousHubtypeMessages: HubtypeAssistantMessage[]): Promise<GetMessagesV2Result>;
10
+ private formatMessageV2;
11
+ private formatMessage;
12
+ trackLlmRuns(botId: string, data: TrackLlmRunsData): Promise<void>;
13
+ }
@@ -32,67 +32,25 @@ export class HubtypeApiClient {
32
32
  return chunks;
33
33
  });
34
34
  }
35
- getMessages(botonicContext, maxMemoryLength) {
35
+ getMessagesV2(botonicContext, options, previousHubtypeMessages) {
36
36
  return __awaiter(this, void 0, void 0, function* () {
37
- const url = `${this.botonicContext.settings.hubtypeApiUrl}/external/v1/ai/agent/message_history/`;
38
- const headers = {
39
- 'Content-Type': 'application/json',
40
- Authorization: `Bearer ${this.botonicContext.secrets.hubtypeAccessToken}`,
41
- };
42
- const params = new URLSearchParams({
43
- last_message_id: botonicContext.input.messageId || '',
44
- num_messages: maxMemoryLength.toString(),
45
- });
46
- const urlWithParams = `${url}?${params.toString()}`;
47
- try {
48
- const response = yield fetch(urlWithParams, {
49
- method: 'GET',
50
- headers,
51
- });
52
- if (!response.ok) {
53
- throw new Error(`Failed to get messages: ${response.statusText}`);
54
- }
55
- const data = yield response.json();
56
- const messages = data.messages;
57
- return messages.map(message => this.formatMessage(message));
58
- }
59
- catch (error) {
60
- console.error(error);
61
- throw new Error('Failed to get messages from Hubtype');
62
- }
63
- });
64
- }
65
- getMessagesV2(botonicContext_1) {
66
- return __awaiter(this, arguments, void 0, function* (botonicContext, options = {}) {
37
+ var _a;
67
38
  const url = `${this.botonicContext.settings.hubtypeApiUrl}/external/v2/ai/agent/message_history/`;
68
39
  const headers = {
69
40
  'Content-Type': 'application/json',
70
41
  Authorization: `Bearer ${this.botonicContext.secrets.hubtypeAccessToken}`,
71
42
  };
72
- const params = Object.assign(Object.assign(Object.assign(Object.assign({ last_message_id: botonicContext.input.messageId || '' }, (options.maxMessages !== undefined && {
43
+ const params = {
44
+ last_message_id: (_a = botonicContext.input.messageId) !== null && _a !== void 0 ? _a : 'NO_MESSAGE_ID',
73
45
  max_messages: options.maxMessages,
74
- })), (options.includeToolCalls !== undefined && {
75
46
  include_tool_calls: options.includeToolCalls,
76
- })), (options.maxFullToolResults !== undefined && {
77
47
  max_full_tool_results: options.maxFullToolResults,
78
- })), (options.debugMode !== undefined && {
79
48
  debug_mode: options.debugMode,
80
- }));
49
+ };
81
50
  try {
82
- const searchParams = new URLSearchParams();
83
- searchParams.set('last_message_id', params.last_message_id);
84
- if (params.max_messages !== undefined) {
85
- searchParams.set('max_messages', params.max_messages.toString());
86
- }
87
- if (params.include_tool_calls !== undefined) {
88
- searchParams.set('include_tool_calls', params.include_tool_calls.toString());
89
- }
90
- if (params.max_full_tool_results !== undefined) {
91
- searchParams.set('max_full_tool_results', params.max_full_tool_results.toString());
92
- }
93
- if (params.debug_mode !== undefined) {
94
- searchParams.set('debug_mode', params.debug_mode.toString());
95
- }
51
+ const searchParams = new URLSearchParams(Object.entries(params)
52
+ .filter(([, value]) => value !== undefined)
53
+ .map(([key, value]) => [key, String(value)]));
96
54
  const urlWithParams = `${url}?${searchParams.toString()}`;
97
55
  const response = yield fetch(urlWithParams, {
98
56
  method: 'GET',
@@ -103,7 +61,7 @@ export class HubtypeApiClient {
103
61
  }
104
62
  const data = yield response.json();
105
63
  const { messages, conversation_id, truncated } = data;
106
- const formattedMessages = messages
64
+ const formattedMessages = [...messages, ...previousHubtypeMessages]
107
65
  .map((message) => this.formatMessageV2(message))
108
66
  .filter((message) => message !== null);
109
67
  return {
@@ -201,5 +159,28 @@ export class HubtypeApiClient {
201
159
  throw new Error('Invalid message role');
202
160
  }
203
161
  }
162
+ trackLlmRuns(botId, data) {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ // Not stop the bot execution if the tracking fails, just log the error
165
+ try {
166
+ const url = `${this.botonicContext.settings.hubtypeApiUrl}/external/v2/conversational_apps/${botId}/track_llm_runs/`;
167
+ const headers = {
168
+ 'Content-Type': 'application/json',
169
+ Authorization: `Bearer ${this.botonicContext.secrets.hubtypeAccessToken}`,
170
+ };
171
+ const response = yield fetch(url, {
172
+ method: 'POST',
173
+ headers,
174
+ body: JSON.stringify(data),
175
+ });
176
+ if (!response.ok) {
177
+ throw new Error(`Failed to track LLM runs to Hubtype: ${response.status} ${response.statusText}`);
178
+ }
179
+ }
180
+ catch (error) {
181
+ console.error(error);
182
+ }
183
+ });
184
+ }
204
185
  }
205
186
  //# sourceMappingURL=hubtype-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubtype-api-client.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/services/hubtype-api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { HubtypeAssistantMessage, HubtypeUserMessage } from '@botonic/shared';
2
+ import { AgenticInputMessage } from '../types';
3
+ export declare enum TrackProductName {
4
+ AI_AGENT = "ai_agent"
5
+ }
6
+ export declare enum TrackFeature {
7
+ AI_AGENT_RUN = "ai_agent_run",
8
+ AI_AGENT_GUARDRAIL = "ai_agent_guardrail"
9
+ }
10
+ export interface LlmRunData {
11
+ inference_id: string;
12
+ is_test: boolean;
13
+ product_name: string;
14
+ deployment_name: string;
15
+ model_name: string;
16
+ feature: string;
17
+ api_version: string;
18
+ num_prompt_tokens: number;
19
+ num_completion_tokens: number;
20
+ duration_in_milliseconds: number;
21
+ temperature: number;
22
+ error: string | null;
23
+ }
24
+ export interface TrackLlmRunsData {
25
+ llm_runs: LlmRunData[];
26
+ }
27
+ export type HubtypeMessage = HubtypeAssistantMessage | HubtypeUserMessage;
28
+ export interface HubtypeToolCall {
29
+ id: string;
30
+ type: 'function';
31
+ function: {
32
+ name: string;
33
+ arguments: string;
34
+ };
35
+ }
36
+ export interface HubtypeUserMessageV2 {
37
+ role: 'user';
38
+ content: string | null;
39
+ }
40
+ export interface HubtypeAssistantMessageV2 {
41
+ role: 'assistant';
42
+ content: string | null;
43
+ tool_calls?: HubtypeToolCall[] | null;
44
+ }
45
+ export interface HubtypeToolMessageV2 {
46
+ role: 'tool';
47
+ content: string | null;
48
+ tool_call_id: string;
49
+ }
50
+ export interface HubtypeSystemMessageV2 {
51
+ role: 'system';
52
+ content: string | null;
53
+ }
54
+ export type HubtypeMessageV2 = HubtypeUserMessageV2 | HubtypeAssistantMessageV2 | HubtypeToolMessageV2 | HubtypeSystemMessageV2;
55
+ export interface MessageHistoryResponseV2 {
56
+ messages: HubtypeMessageV2[];
57
+ conversation_id: string | null;
58
+ truncated: boolean;
59
+ }
60
+ export interface GetMessagesV2Result {
61
+ messages: AgenticInputMessage[];
62
+ conversationId: string | null;
63
+ truncated: boolean;
64
+ }
65
+ export interface MessageHistoryV2Params {
66
+ last_message_id: string;
67
+ max_messages?: number;
68
+ include_tool_calls?: boolean;
69
+ max_full_tool_results?: number;
70
+ debug_mode?: boolean;
71
+ }
@@ -0,0 +1,10 @@
1
+ export var TrackProductName;
2
+ (function (TrackProductName) {
3
+ TrackProductName["AI_AGENT"] = "ai_agent";
4
+ })(TrackProductName || (TrackProductName = {}));
5
+ export var TrackFeature;
6
+ (function (TrackFeature) {
7
+ TrackFeature["AI_AGENT_RUN"] = "ai_agent_run";
8
+ TrackFeature["AI_AGENT_GUARDRAIL"] = "ai_agent_guardrail";
9
+ })(TrackFeature || (TrackFeature = {}));
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/services/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAN,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;AACvB,CAAC,EAFW,gBAAgB,KAAhB,gBAAgB,QAE3B;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAA6B,CAAA;IAC7B,yDAAyC,CAAA;AAC3C,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB"}
@@ -0,0 +1,15 @@
1
+ import { BotExecutorMessage, OutputAiAgentMessageType } from '@botonic/shared';
2
+ import z from 'zod';
3
+ export type { BotExecutorMessage };
4
+ export declare const BotExecutorSchema: z.ZodObject<{
5
+ type: z.ZodEnum<{
6
+ botExecutor: OutputAiAgentMessageType.BotExecutor;
7
+ }>;
8
+ content: z.ZodObject<{
9
+ text: z.ZodString;
10
+ buttons: z.ZodArray<z.ZodObject<{
11
+ text: z.ZodString;
12
+ payload: z.ZodString;
13
+ }, z.core.$strip>>;
14
+ }, z.core.$strip>;
15
+ }, z.core.$strip>;
@@ -0,0 +1,15 @@
1
+ import { OutputAiAgentMessageType } from '@botonic/shared';
2
+ import z from 'zod';
3
+ export const BotExecutorSchema = z
4
+ .object({
5
+ type: z.enum([OutputAiAgentMessageType.BotExecutor]),
6
+ content: z.object({
7
+ text: z.string(),
8
+ buttons: z.array(z.object({
9
+ text: z.string(),
10
+ payload: z.string(),
11
+ })),
12
+ }),
13
+ })
14
+ .describe('A text message with buttons to allow the bot to execute a specific action. Use it only when asked explicitly in the prompt');
15
+ //# sourceMappingURL=bot-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-executor.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-ai-agents/src/lib/structured-output/bot-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,CAAC,MAAM,KAAK,CAAA;AAInB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB,CAAC,CACH;KACF,CAAC;CACH,CAAC;KACD,QAAQ,CACP,4HAA4H,CAC7H,CAAA"}
@@ -1,8 +1,10 @@
1
- import { CarouselMessage } from '@botonic/shared';
1
+ import { CarouselMessage, OutputAiAgentMessageType } from '@botonic/shared';
2
2
  import { z } from 'zod';
3
3
  export type { CarouselMessage };
4
4
  export declare const CarouselSchema: z.ZodObject<{
5
- type: z.ZodEnum<["carousel"]>;
5
+ type: z.ZodEnum<{
6
+ carousel: OutputAiAgentMessageType.Carousel;
7
+ }>;
6
8
  content: z.ZodObject<{
7
9
  text: z.ZodOptional<z.ZodNullable<z.ZodString>>;
8
10
  elements: z.ZodArray<z.ZodObject<{
@@ -12,79 +14,7 @@ export declare const CarouselSchema: z.ZodObject<{
12
14
  button: z.ZodObject<{
13
15
  text: z.ZodString;
14
16
  url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
15
- }, "strip", z.ZodTypeAny, {
16
- text: string;
17
- url?: string | null | undefined;
18
- }, {
19
- text: string;
20
- url?: string | null | undefined;
21
- }>;
22
- }, "strip", z.ZodTypeAny, {
23
- title: string;
24
- subtitle: string;
25
- image: string;
26
- button: {
27
- text: string;
28
- url?: string | null | undefined;
29
- };
30
- }, {
31
- title: string;
32
- subtitle: string;
33
- image: string;
34
- button: {
35
- text: string;
36
- url?: string | null | undefined;
37
- };
38
- }>, "many">;
39
- }, "strip", z.ZodTypeAny, {
40
- elements: {
41
- title: string;
42
- subtitle: string;
43
- image: string;
44
- button: {
45
- text: string;
46
- url?: string | null | undefined;
47
- };
48
- }[];
49
- text?: string | null | undefined;
50
- }, {
51
- elements: {
52
- title: string;
53
- subtitle: string;
54
- image: string;
55
- button: {
56
- text: string;
57
- url?: string | null | undefined;
58
- };
59
- }[];
60
- text?: string | null | undefined;
61
- }>;
62
- }, "strip", z.ZodTypeAny, {
63
- type: "carousel";
64
- content: {
65
- elements: {
66
- title: string;
67
- subtitle: string;
68
- image: string;
69
- button: {
70
- text: string;
71
- url?: string | null | undefined;
72
- };
73
- }[];
74
- text?: string | null | undefined;
75
- };
76
- }, {
77
- type: "carousel";
78
- content: {
79
- elements: {
80
- title: string;
81
- subtitle: string;
82
- image: string;
83
- button: {
84
- text: string;
85
- url?: string | null | undefined;
86
- };
87
- }[];
88
- text?: string | null | undefined;
89
- };
90
- }>;
17
+ }, z.core.$strip>;
18
+ }, z.core.$strip>>;
19
+ }, z.core.$strip>;
20
+ }, z.core.$strip>;
@@ -1,7 +1,8 @@
1
+ import { OutputAiAgentMessageType } from '@botonic/shared';
1
2
  import { z } from 'zod';
2
3
  export const CarouselSchema = z
3
4
  .object({
4
- type: z.enum(['carousel']),
5
+ type: z.enum([OutputAiAgentMessageType.Carousel]),
5
6
  content: z.object({
6
7
  text: z.string().nullable().optional(),
7
8
  elements: z.array(z.object({