@botonic/plugin-ai-agents 0.56.0-alpha.0 → 0.57.0-rslib-esm.1

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 (216) hide show
  1. package/lib/{cjs/agents → agents}/base-agent.d.ts +4 -4
  2. package/lib/agents/base-agent.js +66 -0
  3. package/lib/agents/base-agent.js.map +1 -0
  4. package/lib/agents/index.d.ts +2 -0
  5. package/lib/agents/index.js +9 -0
  6. package/lib/agents/index.js.map +1 -0
  7. package/lib/{esm/agents → agents}/router-agent.d.ts +5 -5
  8. package/lib/agents/router-agent.js +50 -0
  9. package/lib/agents/router-agent.js.map +1 -0
  10. package/lib/{cjs/agents → agents}/specialist-agent.d.ts +5 -5
  11. package/lib/{cjs/agents → agents}/specialist-agent.js +65 -45
  12. package/lib/agents/specialist-agent.js.map +1 -0
  13. package/lib/{cjs/bot-config-tools.d.ts → bot-config-tools.d.ts} +1 -1
  14. package/lib/bot-config-tools.js +20 -0
  15. package/lib/bot-config-tools.js.map +1 -0
  16. package/lib/constants.js +26 -0
  17. package/lib/constants.js.map +1 -0
  18. package/lib/{esm/debug-logger.d.ts → debug-logger.d.ts} +1 -1
  19. package/lib/{cjs/debug-logger.js → debug-logger.js} +14 -9
  20. package/lib/debug-logger.js.map +1 -0
  21. package/lib/guardrails/index.d.ts +1 -0
  22. package/lib/guardrails/index.js +6 -0
  23. package/lib/guardrails/index.js.map +1 -0
  24. package/lib/{cjs/guardrails → guardrails}/input.d.ts +2 -2
  25. package/lib/guardrails/input.js +119 -0
  26. package/lib/guardrails/input.js.map +1 -0
  27. package/lib/{esm/index.d.ts → index.d.ts} +3 -3
  28. package/lib/{esm/index.js → index.js} +114 -74
  29. package/lib/index.js.map +1 -0
  30. package/lib/{cjs/llm-config.d.ts → llm-config.d.ts} +1 -1
  31. package/lib/llm-config.js +150 -0
  32. package/lib/llm-config.js.map +1 -0
  33. package/lib/{esm/runners → runners}/base-runner.d.ts +3 -3
  34. package/lib/{cjs/runners → runners}/base-runner.js +81 -69
  35. package/lib/runners/base-runner.js.map +1 -0
  36. package/lib/runners/index.d.ts +2 -0
  37. package/lib/runners/index.js +9 -0
  38. package/lib/runners/index.js.map +1 -0
  39. package/lib/{cjs/runners → runners}/router-runner.d.ts +2 -2
  40. package/lib/{cjs/runners → runners}/router-runner.js +19 -14
  41. package/lib/runners/router-runner.js.map +1 -0
  42. package/lib/{esm/runners → runners}/specialist-runner.d.ts +1 -1
  43. package/lib/runners/specialist-runner.js +10 -0
  44. package/lib/runners/specialist-runner.js.map +1 -0
  45. package/lib/{esm/services → services}/hubtype-api-client.d.ts +2 -2
  46. package/lib/services/hubtype-api-client.js +191 -0
  47. package/lib/services/hubtype-api-client.js.map +1 -0
  48. package/lib/{cjs/services → services}/types.d.ts +1 -1
  49. package/lib/services/types.js +13 -0
  50. package/lib/services/types.js.map +1 -0
  51. package/lib/structured-output/bot-executor.js +21 -0
  52. package/lib/structured-output/bot-executor.js.map +1 -0
  53. package/lib/structured-output/carousel.js +26 -0
  54. package/lib/structured-output/carousel.js.map +1 -0
  55. package/lib/structured-output/exit.js +14 -0
  56. package/lib/structured-output/exit.js.map +1 -0
  57. package/lib/{cjs/structured-output → structured-output}/index.d.ts +0 -10
  58. package/lib/structured-output/index.js +55 -0
  59. package/lib/structured-output/index.js.map +1 -0
  60. package/lib/structured-output/text-with-buttons.js +25 -0
  61. package/lib/structured-output/text-with-buttons.js.map +1 -0
  62. package/lib/structured-output/text.js +17 -0
  63. package/lib/structured-output/text.js.map +1 -0
  64. package/lib/{cjs/tools → tools}/index.d.ts +2 -2
  65. package/lib/tools/index.js +8 -0
  66. package/lib/tools/index.js.map +1 -0
  67. package/lib/{cjs/tools → tools}/retrieve-knowledge.d.ts +2 -2
  68. package/lib/tools/retrieve-knowledge.js +40 -0
  69. package/lib/tools/retrieve-knowledge.js.map +1 -0
  70. package/lib/{cjs/types.d.ts → types.d.ts} +3 -3
  71. package/lib/types.js +5 -0
  72. package/lib/types.js.map +1 -0
  73. package/package.json +10 -8
  74. package/src/structured-output/index.ts +0 -2
  75. package/src/types.ts +4 -4
  76. package/lib/cjs/agents/base-agent.js +0 -39
  77. package/lib/cjs/agents/base-agent.js.map +0 -1
  78. package/lib/cjs/agents/index.d.ts +0 -2
  79. package/lib/cjs/agents/index.js +0 -8
  80. package/lib/cjs/agents/index.js.map +0 -1
  81. package/lib/cjs/agents/router-agent.d.ts +0 -25
  82. package/lib/cjs/agents/router-agent.js +0 -33
  83. package/lib/cjs/agents/router-agent.js.map +0 -1
  84. package/lib/cjs/agents/specialist-agent.js.map +0 -1
  85. package/lib/cjs/bot-config-tools.js +0 -18
  86. package/lib/cjs/bot-config-tools.js.map +0 -1
  87. package/lib/cjs/constants.js +0 -25
  88. package/lib/cjs/constants.js.map +0 -1
  89. package/lib/cjs/debug-logger.d.ts +0 -33
  90. package/lib/cjs/debug-logger.js.map +0 -1
  91. package/lib/cjs/guardrails/index.d.ts +0 -1
  92. package/lib/cjs/guardrails/index.js +0 -5
  93. package/lib/cjs/guardrails/index.js.map +0 -1
  94. package/lib/cjs/guardrails/input.js +0 -96
  95. package/lib/cjs/guardrails/input.js.map +0 -1
  96. package/lib/cjs/index.d.ts +0 -22
  97. package/lib/cjs/index.js +0 -219
  98. package/lib/cjs/index.js.map +0 -1
  99. package/lib/cjs/llm-config.js +0 -121
  100. package/lib/cjs/llm-config.js.map +0 -1
  101. package/lib/cjs/runners/base-runner.d.ts +0 -31
  102. package/lib/cjs/runners/base-runner.js.map +0 -1
  103. package/lib/cjs/runners/index.d.ts +0 -2
  104. package/lib/cjs/runners/index.js +0 -8
  105. package/lib/cjs/runners/index.js.map +0 -1
  106. package/lib/cjs/runners/router-runner.js.map +0 -1
  107. package/lib/cjs/runners/specialist-runner.d.ts +0 -4
  108. package/lib/cjs/runners/specialist-runner.js +0 -8
  109. package/lib/cjs/runners/specialist-runner.js.map +0 -1
  110. package/lib/cjs/services/hubtype-api-client.d.ts +0 -13
  111. package/lib/cjs/services/hubtype-api-client.js +0 -176
  112. package/lib/cjs/services/hubtype-api-client.js.map +0 -1
  113. package/lib/cjs/services/types.js +0 -13
  114. package/lib/cjs/services/types.js.map +0 -1
  115. package/lib/cjs/structured-output/bot-executor.js +0 -18
  116. package/lib/cjs/structured-output/bot-executor.js.map +0 -1
  117. package/lib/cjs/structured-output/carousel.js +0 -23
  118. package/lib/cjs/structured-output/carousel.js.map +0 -1
  119. package/lib/cjs/structured-output/exit.js +0 -11
  120. package/lib/cjs/structured-output/exit.js.map +0 -1
  121. package/lib/cjs/structured-output/index.js +0 -45
  122. package/lib/cjs/structured-output/index.js.map +0 -1
  123. package/lib/cjs/structured-output/request-contact-info.d.ts +0 -9
  124. package/lib/cjs/structured-output/request-contact-info.js +0 -14
  125. package/lib/cjs/structured-output/request-contact-info.js.map +0 -1
  126. package/lib/cjs/structured-output/text-with-buttons.js +0 -24
  127. package/lib/cjs/structured-output/text-with-buttons.js.map +0 -1
  128. package/lib/cjs/structured-output/text.js +0 -14
  129. package/lib/cjs/structured-output/text.js.map +0 -1
  130. package/lib/cjs/tools/index.js +0 -8
  131. package/lib/cjs/tools/index.js.map +0 -1
  132. package/lib/cjs/tools/retrieve-knowledge.js +0 -34
  133. package/lib/cjs/tools/retrieve-knowledge.js.map +0 -1
  134. package/lib/cjs/types.js +0 -3
  135. package/lib/cjs/types.js.map +0 -1
  136. package/lib/esm/agents/base-agent.d.ts +0 -28
  137. package/lib/esm/agents/base-agent.js +0 -39
  138. package/lib/esm/agents/base-agent.js.map +0 -1
  139. package/lib/esm/agents/index.d.ts +0 -2
  140. package/lib/esm/agents/index.js +0 -8
  141. package/lib/esm/agents/index.js.map +0 -1
  142. package/lib/esm/agents/router-agent.js +0 -33
  143. package/lib/esm/agents/router-agent.js.map +0 -1
  144. package/lib/esm/agents/specialist-agent.d.ts +0 -39
  145. package/lib/esm/agents/specialist-agent.js +0 -108
  146. package/lib/esm/agents/specialist-agent.js.map +0 -1
  147. package/lib/esm/bot-config-tools.d.ts +0 -7
  148. package/lib/esm/bot-config-tools.js +0 -18
  149. package/lib/esm/bot-config-tools.js.map +0 -1
  150. package/lib/esm/constants.d.ts +0 -21
  151. package/lib/esm/constants.js +0 -25
  152. package/lib/esm/constants.js.map +0 -1
  153. package/lib/esm/debug-logger.js +0 -116
  154. package/lib/esm/debug-logger.js.map +0 -1
  155. package/lib/esm/guardrails/index.d.ts +0 -1
  156. package/lib/esm/guardrails/index.js +0 -5
  157. package/lib/esm/guardrails/index.js.map +0 -1
  158. package/lib/esm/guardrails/input.d.ts +0 -10
  159. package/lib/esm/guardrails/input.js +0 -96
  160. package/lib/esm/guardrails/input.js.map +0 -1
  161. package/lib/esm/index.js.map +0 -1
  162. package/lib/esm/llm-config.d.ts +0 -30
  163. package/lib/esm/llm-config.js +0 -121
  164. package/lib/esm/llm-config.js.map +0 -1
  165. package/lib/esm/runners/base-runner.js +0 -189
  166. package/lib/esm/runners/base-runner.js.map +0 -1
  167. package/lib/esm/runners/index.d.ts +0 -2
  168. package/lib/esm/runners/index.js +0 -8
  169. package/lib/esm/runners/index.js.map +0 -1
  170. package/lib/esm/runners/router-runner.d.ts +0 -8
  171. package/lib/esm/runners/router-runner.js +0 -44
  172. package/lib/esm/runners/router-runner.js.map +0 -1
  173. package/lib/esm/runners/specialist-runner.js +0 -8
  174. package/lib/esm/runners/specialist-runner.js.map +0 -1
  175. package/lib/esm/services/hubtype-api-client.js +0 -176
  176. package/lib/esm/services/hubtype-api-client.js.map +0 -1
  177. package/lib/esm/services/types.d.ts +0 -72
  178. package/lib/esm/services/types.js +0 -13
  179. package/lib/esm/services/types.js.map +0 -1
  180. package/lib/esm/structured-output/bot-executor.d.ts +0 -13
  181. package/lib/esm/structured-output/bot-executor.js +0 -18
  182. package/lib/esm/structured-output/bot-executor.js.map +0 -1
  183. package/lib/esm/structured-output/carousel.d.ts +0 -18
  184. package/lib/esm/structured-output/carousel.js +0 -23
  185. package/lib/esm/structured-output/carousel.js.map +0 -1
  186. package/lib/esm/structured-output/exit.d.ts +0 -6
  187. package/lib/esm/structured-output/exit.js +0 -11
  188. package/lib/esm/structured-output/exit.js.map +0 -1
  189. package/lib/esm/structured-output/index.d.ts +0 -108
  190. package/lib/esm/structured-output/index.js +0 -45
  191. package/lib/esm/structured-output/index.js.map +0 -1
  192. package/lib/esm/structured-output/request-contact-info.d.ts +0 -9
  193. package/lib/esm/structured-output/request-contact-info.js +0 -14
  194. package/lib/esm/structured-output/request-contact-info.js.map +0 -1
  195. package/lib/esm/structured-output/text-with-buttons.d.ts +0 -17
  196. package/lib/esm/structured-output/text-with-buttons.js +0 -24
  197. package/lib/esm/structured-output/text-with-buttons.js.map +0 -1
  198. package/lib/esm/structured-output/text.d.ts +0 -9
  199. package/lib/esm/structured-output/text.js +0 -14
  200. package/lib/esm/structured-output/text.js.map +0 -1
  201. package/lib/esm/tools/index.d.ts +0 -3
  202. package/lib/esm/tools/index.js +0 -8
  203. package/lib/esm/tools/index.js.map +0 -1
  204. package/lib/esm/tools/retrieve-knowledge.d.ts +0 -6
  205. package/lib/esm/tools/retrieve-knowledge.js +0 -34
  206. package/lib/esm/tools/retrieve-knowledge.js.map +0 -1
  207. package/lib/esm/types.d.ts +0 -53
  208. package/lib/esm/types.js +0 -3
  209. package/lib/esm/types.js.map +0 -1
  210. package/src/structured-output/request-contact-info.ts +0 -18
  211. /package/lib/{cjs/constants.d.ts → constants.d.ts} +0 -0
  212. /package/lib/{cjs/structured-output → structured-output}/bot-executor.d.ts +0 -0
  213. /package/lib/{cjs/structured-output → structured-output}/carousel.d.ts +0 -0
  214. /package/lib/{cjs/structured-output → structured-output}/exit.d.ts +0 -0
  215. /package/lib/{cjs/structured-output → structured-output}/text-with-buttons.d.ts +0 -0
  216. /package/lib/{cjs/structured-output → structured-output}/text.d.ts +0 -0
@@ -0,0 +1,119 @@
1
+ import { Agent, Runner } from "@openai/agents";
2
+ import { z } from "zod";
3
+ import { LLM_PROVIDERS, isProd } from "../constants.js";
4
+ import { HubtypeApiClient } from "../services/hubtype-api-client.js";
5
+ import { TrackFeature, TrackProductName } from "../services/types.js";
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ async function createInputGuardrails(rules, llmConfig, trackingContext) {
18
+ if (rules.length === 0) {
19
+ return [];
20
+ }
21
+ return [
22
+ await buildInputGuardrail(rules, llmConfig, trackingContext)
23
+ ];
24
+ }
25
+ async function buildInputGuardrail(rules, llmConfig, trackingContext) {
26
+ const outputType = z.object(Object.fromEntries(rules.map((rule)=>[
27
+ rule.name,
28
+ z.boolean().describe(rule.description)
29
+ ])));
30
+ const modelSettings = createInputGuardrailModelSettings(llmConfig);
31
+ const agent = new Agent({
32
+ name: 'InputGuardrail',
33
+ model: await llmConfig.getModel(),
34
+ modelSettings,
35
+ instructions: 'Check if the user triggers some of the following guardrails.',
36
+ outputType
37
+ });
38
+ return {
39
+ name: 'InputGuardrail',
40
+ execute: async ({ input, context })=>{
41
+ const lastMessage = input[input.length - 1];
42
+ const runner = new Runner({
43
+ tracingDisabled: true
44
+ });
45
+ const startTime = Date.now();
46
+ const result = await runner.run(agent, [
47
+ lastMessage
48
+ ], {
49
+ context
50
+ });
51
+ const endTime = Date.now();
52
+ await sendGuardrailLlmRunTracking(result, trackingContext, llmConfig, startTime, endTime);
53
+ const finalOutput = result.finalOutput;
54
+ if (finalOutput === undefined) {
55
+ throw new Error('Guardrail agent failed to produce output');
56
+ }
57
+ const triggered = Object.values(finalOutput).some((value)=>value === true);
58
+ const triggeredGuardrails = Object.keys(finalOutput).filter((key)=>finalOutput[key] === true);
59
+ return {
60
+ outputInfo: triggeredGuardrails,
61
+ tripwireTriggered: triggered
62
+ };
63
+ }
64
+ };
65
+ }
66
+ function createInputGuardrailModelSettings(llmConfig) {
67
+ const modelSettings = {
68
+ ...llmConfig.modelSettings,
69
+ toolChoice: undefined
70
+ };
71
+ if (llmConfig.modelSettings.reasoning) {
72
+ modelSettings.reasoning = {
73
+ ...llmConfig.modelSettings.reasoning
74
+ };
75
+ }
76
+ if (llmConfig.modelSettings.text) {
77
+ modelSettings.text = {
78
+ ...llmConfig.modelSettings.text
79
+ };
80
+ }
81
+ return modelSettings;
82
+ }
83
+ async function sendGuardrailLlmRunTracking(result, trackingContext, llmConfig, startTime, endTime) {
84
+ if (!isProd) {
85
+ return;
86
+ }
87
+ if (llmConfig.getProviderName() === LLM_PROVIDERS.LITELLM) {
88
+ return;
89
+ }
90
+ const rawResponses = result.rawResponses ?? [];
91
+ if (rawResponses.length === 0) {
92
+ return;
93
+ }
94
+ const totalDuration = endTime - startTime;
95
+ const durationPerCall = Math.round(totalDuration / rawResponses.length);
96
+ const temperature = llmConfig.modelSettings.temperature ?? 0;
97
+ const llmRuns = rawResponses.map((response)=>({
98
+ inference_id: trackingContext.inferenceId,
99
+ is_test: trackingContext.isTest,
100
+ product_name: TrackProductName.AI_AGENT,
101
+ deployment_name: llmConfig.modelName,
102
+ model_name: response.providerData?.model ?? llmConfig.modelName,
103
+ feature: TrackFeature.AI_AGENT_GUARDRAIL,
104
+ api_version: llmConfig.getApiVersion(),
105
+ num_prompt_tokens: response.usage.inputTokens,
106
+ num_completion_tokens: response.usage.outputTokens,
107
+ duration_in_milliseconds: durationPerCall,
108
+ temperature,
109
+ error: null
110
+ }));
111
+ const client = new HubtypeApiClient(trackingContext.authToken);
112
+ await client.trackLlmRuns(trackingContext.botId, {
113
+ llm_runs: llmRuns
114
+ });
115
+ }
116
+
117
+ export { createInputGuardrails };
118
+
119
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails/input.js","sources":["../../src/guardrails/input.ts"],"sourcesContent":["import {\n Agent,\n type InputGuardrail,\n type ModelSettings,\n Runner,\n type UserMessageItem,\n} from '@openai/agents'\nimport { z } from 'zod'\nimport { isProd, LLM_PROVIDERS } from '../constants'\nimport type { LLMConfig } from '../llm-config'\nimport { HubtypeApiClient } from '../services/hubtype-api-client'\nimport { TrackFeature, TrackProductName } from '../services/types'\nimport type { GuardrailRule, ResultRawResponse } from '../types'\n\nexport interface GuardrailTrackingContext {\n botId: string\n isTest: boolean\n authToken: string\n inferenceId: string\n}\n\nexport async function createInputGuardrails(\n rules: GuardrailRule[],\n llmConfig: LLMConfig,\n trackingContext: GuardrailTrackingContext\n): Promise<InputGuardrail[]> {\n if (rules.length === 0) {\n return []\n }\n\n return [await buildInputGuardrail(rules, llmConfig, trackingContext)]\n}\n\nasync function buildInputGuardrail(\n rules: GuardrailRule[],\n llmConfig: LLMConfig,\n trackingContext: GuardrailTrackingContext\n): Promise<InputGuardrail> {\n const outputType = z.object(\n Object.fromEntries(\n rules.map(rule => [rule.name, z.boolean().describe(rule.description)])\n )\n )\n const modelSettings = createInputGuardrailModelSettings(llmConfig)\n\n const agent = new Agent({\n name: 'InputGuardrail',\n model: await llmConfig.getModel(),\n modelSettings,\n instructions:\n 'Check if the user triggers some of the following guardrails.',\n outputType,\n })\n\n return {\n name: 'InputGuardrail',\n execute: async ({ input, context }) => {\n const lastMessage = input[input.length - 1] as UserMessageItem\n const runner = new Runner({\n tracingDisabled: true,\n })\n const startTime = Date.now()\n const result = await runner.run(agent, [lastMessage], { context })\n const endTime = Date.now()\n\n await sendGuardrailLlmRunTracking(\n result,\n trackingContext,\n llmConfig,\n startTime,\n endTime\n )\n\n const finalOutput = result.finalOutput as Record<string, boolean>\n if (finalOutput === undefined) {\n throw new Error('Guardrail agent failed to produce output')\n }\n const triggered = Object.values(finalOutput).some(value => value === true)\n const triggeredGuardrails = Object.keys(finalOutput).filter(\n key => finalOutput[key] === true\n )\n return {\n outputInfo: triggeredGuardrails,\n tripwireTriggered: triggered,\n }\n },\n }\n}\n\nfunction createInputGuardrailModelSettings(\n llmConfig: LLMConfig\n): ModelSettings {\n const modelSettings: ModelSettings = {\n ...llmConfig.modelSettings,\n toolChoice: undefined,\n }\n if (llmConfig.modelSettings.reasoning) {\n modelSettings.reasoning = { ...llmConfig.modelSettings.reasoning }\n }\n if (llmConfig.modelSettings.text) {\n modelSettings.text = { ...llmConfig.modelSettings.text }\n }\n return modelSettings\n}\n\nasync function sendGuardrailLlmRunTracking(\n result: {\n rawResponses?: ResultRawResponse[]\n },\n trackingContext: GuardrailTrackingContext,\n llmConfig: LLMConfig,\n startTime: number,\n endTime: number\n): Promise<void> {\n if (!isProd) {\n return\n }\n if (llmConfig.getProviderName() === LLM_PROVIDERS.LITELLM) {\n return\n }\n const rawResponses = result.rawResponses ?? []\n if (rawResponses.length === 0) {\n return\n }\n const totalDuration = endTime - startTime\n const durationPerCall = Math.round(totalDuration / rawResponses.length)\n const temperature =\n (llmConfig.modelSettings.temperature as number | undefined) ?? 0\n const llmRuns = rawResponses.map(response => ({\n inference_id: trackingContext.inferenceId,\n is_test: trackingContext.isTest,\n product_name: TrackProductName.AI_AGENT,\n deployment_name: llmConfig.modelName,\n model_name:\n (response.providerData?.model as string | undefined) ??\n llmConfig.modelName,\n feature: TrackFeature.AI_AGENT_GUARDRAIL,\n api_version: llmConfig.getApiVersion(),\n num_prompt_tokens: response.usage.inputTokens,\n num_completion_tokens: response.usage.outputTokens,\n duration_in_milliseconds: durationPerCall,\n temperature,\n error: null,\n }))\n\n const client = new HubtypeApiClient(trackingContext.authToken)\n await client.trackLlmRuns(trackingContext.botId, {\n llm_runs: llmRuns,\n })\n}\n"],"names":["Agent","Runner","z","isProd","LLM_PROVIDERS","HubtypeApiClient","TrackFeature","TrackProductName","createInputGuardrails","rules","llmConfig","trackingContext","buildInputGuardrail","outputType","Object","rule","modelSettings","createInputGuardrailModelSettings","agent","input","context","lastMessage","runner","startTime","Date","result","endTime","sendGuardrailLlmRunTracking","finalOutput","undefined","Error","triggered","value","triggeredGuardrails","key","rawResponses","totalDuration","durationPerCall","Math","temperature","llmRuns","response","client"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type AiAgentArgs, type BotContext, type Plugin, type ResolvedPlugins } from '@botonic/core';
2
- import type { CustomTool, InferenceResponse, PluginAiAgentOptions } from './types';
2
+ import type { CustomTool, InferenceResponse, PluginAiAgentOptions } from './types.js';
3
3
  export default class BotonicPluginAiAgents<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> implements Plugin {
4
4
  private readonly authToken?;
5
5
  private readonly memory;
@@ -18,5 +18,5 @@ export default class BotonicPluginAiAgents<TPlugins extends ResolvedPlugins = Re
18
18
  private getMessages;
19
19
  private buildTools;
20
20
  }
21
- export * from './bot-config-tools';
22
- export * from './types';
21
+ export * from './bot-config-tools.js';
22
+ export * from './types.js';
@@ -1,61 +1,71 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const core_1 = require("@botonic/core");
5
- const agents_1 = require("@openai/agents");
6
- const uuid_1 = require("uuid");
7
- const agents_2 = require("./agents");
8
- const constants_1 = require("./constants");
9
- const debug_logger_1 = require("./debug-logger");
10
- const llm_config_1 = require("./llm-config");
11
- const runners_1 = require("./runners");
12
- const hubtype_api_client_1 = require("./services/hubtype-api-client");
13
- class BotonicPluginAiAgents {
14
- constructor(options) {
15
- this.toolDefinitions = [];
16
- this.authToken = options?.authToken;
17
- this.toolDefinitions = options?.customTools || [];
18
- this.memory = this.getMemoryOptions(options?.memory);
19
- this.timeout = options?.timeout ?? constants_1.DEFAULT_TIMEOUT_16_SECONDS;
20
- this.maxRetries = options?.maxRetries ?? constants_1.DEFAULT_MAX_RETRIES;
21
- this.logger = (0, debug_logger_1.createDebugLogger)(options?.enableDebug ?? false);
22
- this.localStorageKey = options?.localStorageKey ?? 'botonicState';
23
- (0, agents_1.setTracingDisabled)(true);
24
- this.logger.logInitialConfig({
25
- messageHistoryApiVersion: 'v2',
26
- maxRetries: options?.maxRetries ?? constants_1.DEFAULT_MAX_RETRIES,
27
- timeout: options?.timeout ?? constants_1.DEFAULT_TIMEOUT_16_SECONDS,
28
- customToolNames: this.toolDefinitions.map(t => t.name),
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 ?? constants_1.MAX_MEMORY_LENGTH,
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 = constants_1.isProd ? botContext.session._access_token : this.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 = (0, uuid_1.v7)();
59
+ const inferenceId = v7();
49
60
  try {
50
- if (aiAgentArgs.type === core_1.AiAgentType.Specialist) {
61
+ if (aiAgentArgs.type === AiAgentType.Specialist) {
51
62
  return await this.executeSpecialistAIAgent(botContext, aiAgentArgs, authToken, inferenceId);
52
63
  }
53
- if (aiAgentArgs.type === core_1.AiAgentType.Router) {
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 llm_config_1.LLMConfig({
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 => t.name), messages);
110
+ this.logger.logAgentDebugInfo(aiAgentArgs, tools.map((t)=>t.name), messages);
101
111
  // Run agent
102
- const runner = new runners_1.SpecialistRunner(agent, llmConfig, inferenceId, this.logger);
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 llm_config_1.LLMConfig({
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 (0, agents_1.handoff)(agent, {
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 agents_2.RouterAgent.create({
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 runners_1.RouterRunner(routerAgent, llmConfig, inferenceId, this.logger);
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 === core_1.AiAgentType.Specialist ? aiAgentArgs.sourceIds : [];
170
- const specialist = await agents_2.SpecialistAgent.create({
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 { agent: specialistAgent, tools };
201
+ return {
202
+ agent: specialistAgent,
203
+ tools
204
+ };
192
205
  }
193
206
  async getMessages(botContext, authToken, previousHubtypeMessages) {
194
- const hubtypeClient = new hubtype_api_client_1.HubtypeApiClient(authToken);
195
- if (!constants_1.isProd) {
196
- return await hubtypeClient.getLocalMessages(constants_1.MAX_MEMORY_LENGTH, previousHubtypeMessages, this.localStorageKey);
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 === core_1.AiAgentType.Router ? [] : aiAgentArgs.activeTools;
204
- const activeToolNames = activeTools.map(tool => tool.name);
205
- const availableTools = this.toolDefinitions.filter(tool => activeToolNames.includes(tool.name));
206
- return availableTools.map(toolDefinition => {
207
- return (0, agents_1.tool)({
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
- exports.default = BotonicPluginAiAgents;
217
- tslib_1.__exportStar(require("./bot-config-tools"), exports);
218
- tslib_1.__exportStar(require("./types"), exports);
253
+
254
+
255
+
256
+
257
+ export default BotonicPluginAiAgents;
258
+
219
259
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASsB;AAC4C;AAC/B;AAEoB;AAMnC;AACgD;AAC5B;AACkB;AACM;AAWjD,MAAMiB,qBAAqBA;IAgChC,iBAAiBC,MAA+B,EAAiB;QACvE,OAAO;YACL,aAAaA,QAAQ,eAAeP,iBAAiBA;YACrD,kBAAkBO,QAAQ,oBAAoB;YAC9C,oBAAoBA,QAAQ,sBAAsB;YAClD,WAAWA,QAAQ,aAAa;QAClC;IACF;IAEA,MAAY;QACV;IACF;IAEA,MAAM,aACJC,UAA4C,EAC5CC,WAAwB,EACI;QAC5B,MAAMC,YAAYX,MAAMA,GAAGS,WAAW,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS;QAC5E,IAAI,CAACE,WAAW;YACd,MAAM,IAAIC,MAAM;QAClB;QAEA,MAAMC,cAAclB,EAAMA;QAE1B,IAAI;YACF,IAAIe,YAAY,IAAI,KAAKpB,sBAAsB,EAAE;gBAC/C,OAAO,MAAM,IAAI,CAAC,wBAAwB,CACxCmB,YACAC,aACAC,WACAE;YAEJ;YAEA,IAAIH,YAAY,IAAI,KAAKpB,kBAAkB,EAAE;gBAC3C,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpCmB,YACAC,aACAC,WACAE;YAEJ;YAEA,MAAM,IAAID,MAAM;QAClB,EAAE,OAAOE,OAAO;YACdC,QAAQ,KAAK,CAAC,kCAAkCD;YAChD,OAAO;gBACL,UAAU,EAAE;gBACZ,eAAe,EAAE;gBACjB,cAAc;gBACd,MAAM;gBACN,OAAO;gBACP,0BAA0B,EAAE;gBAC5B,2BAA2B,EAAE;gBAC7B,mBAAmB;gBACnB,eAAe;gBACf,sBAAsB,EAAE;gBACxB,2BAA2B;YAC7B;QACF;IACF;IAEA,MAAc,yBACZL,UAA4C,EAC5CC,WAAkC,EAClCC,SAAiB,EACjBE,WAAmB,EACnB;QACA,MAAMG,YAAY,IAAIb,SAASA,CAAC;YAC9B,YAAY,IAAI,CAAC,UAAU;YAC3B,SAAS,IAAI,CAAC,OAAO;YACrB,WAAWO,YAAY,KAAK;YAC5B,WAAWA,YAAY,SAAS;YAChCD;YACA,iBAAiBC,YAAY,eAAe;QAC9C;QAEA,kCAAkC;QAClC,MAAM,EAAEO,KAAK,EAAEC,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC5DT,YACAC,aACAA,YAAY,qBAAqB,IAAI,EAAE,EACvCC,WACAE,aACAG;QAGF,eAAe;QACf,MAAMG,WAAW,MAAM,IAAI,CAAC,WAAW,CACrCV,YACAE,WACAD,YAAY,uBAAuB,IAAI,EAAE;QAG3C,gBAAgB;QAChB,MAAMU,UAAyC;YAC7CT;YACA,eAAe;gBACb,OAAO;gBACP,WAAW,EAAE;gBACb,WAAW,EAAE;gBACb,YAAY,EAAE;YAChB;YACA,SAASF;QACX;QAEA,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAC3BC,aACAO,MAAM,GAAG,CAACI,CAAAA,IAAKA,EAAE,IAAI,GACrBF;QAGF,YAAY;QACZ,MAAMG,SAAS,IAAIjB,gBAAgBA,CACjCa,OACAF,WACAH,aACA,IAAI,CAAC,MAAM;QAEb,OAAO,MAAMS,OAAO,GAAG,CAACH,UAAUC;IACpC;IAEA,MAAc,qBACZX,UAA4C,EAC5CC,WAA8B,EAC9BC,SAAiB,EACjBE,WAAmB,EACnB;QACA,MAAM,EAAEU,WAAW,EAAEC,IAAI,EAAEC,YAAY,EAAE,GAAGf;QAE5C,MAAMM,YAAY,IAAIb,SAASA,CAAC;YAC9B,YAAY,IAAI,CAAC,UAAU;YAC3B,SAAS,IAAI,CAAC,OAAO;YACrB,WAAWO,YAAY,KAAK;YAC5B,WAAWA,YAAY,SAAS;YAChCD;YACA,iBAAiBC,YAAY,eAAe;QAC9C;QAEA,MAAMgB,oBAAoB,MAAMC,QAAQ,GAAG,CACzCJ,YAAY,GAAG,CAAC,OAAMK;YACpB,kFAAkF;YAClF,MAAMC,wBAAwBnB,YAAY,qBAAqB;YAC/D,MAAMoB,kBAAkBpB,YAAY,eAAe;YACnD,MAAMqB,gCACJrB,YAAY,6BAA6B;YAE3C,4EAA4E;YAC5E,MAAMsB,wBAAqC;gBACzC,GAAGJ,cAAc;gBACjBC;gBACAC;gBACAC;YACF;YAEA,MAAM,EAAEb,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,0BAA0B,CACrDT,YACAuB,uBACAtB,YAAY,qBAAqB,IAAI,EAAE,EACvCC,WACAE,aACAG;YAGF,OAAOzB,OAAOA,CAAC2B,OAAO;gBACpB,kBAAkBU,eAAe,IAAI;gBACrC,yBAAyBA,eAAe,WAAW;YACrD;QACF;QAGF,MAAMK,SAAS,MAAMrC,kBAAkB,CAAuB;YAC5D4B;YACAC;YACAT;YACA,UAAUU;YACV,qBAAqBhB,YAAY,mBAAmB,IAAI,EAAE;YAC1D,uBAAuBA,YAAY,qBAAqB,IAAI,EAAE;YAC9D,0BAA0B;gBACxB,OAAOD,WAAW,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChC,QAAQA,WAAW,OAAO,CAAC,mBAAmB;gBAC9CE;gBACAE;YACF;QACF;QAEA,eAAe;QACf,MAAMM,WAAW,MAAM,IAAI,CAAC,WAAW,CACrCV,YACAE,WACAD,YAAY,uBAAuB,IAAI,EAAE;QAG3C,gBAAgB;QAChB,MAAMU,UAAyC;YAC7CT;YACA,eAAe;gBACb,OAAO;gBACP,WAAW,EAAE;gBACb,WAAW,EAAE;gBACb,YAAY,EAAE;YAChB;YACA,SAASF;QACX;QAEA,YAAY;QACZ,MAAMyB,cAAcD,OAAO,QAAQ;QACnC,MAAMX,SAAS,IAAIlB,YAAYA,CAC7B8B,aACAlB,WACAH,aACA,IAAI,CAAC,MAAM;QAGb,OAAO,MAAMS,OAAO,GAAG,CAACH,UAAUC;IACpC;IAEA,MAAc,2BACZX,UAAsB,EACtBC,WAAwB,EACxByB,qBAAuC,EACvCxB,SAAiB,EACjBE,WAAmB,EACnBG,SAAoB,EACpB;QACA,cAAc;QACd,MAAMC,QAAQ,IAAI,CAAC,UAAU,CAACP;QAE9B,cAAc;QACd,MAAM0B,YACJ1B,YAAY,IAAI,KAAKpB,sBAAsB,GAAGoB,YAAY,SAAS,GAAG,EAAE;QAE1E,MAAM2B,aAAa,MAAMxC,sBAAsB,CAAuB;YACpE,MAAMa,YAAY,IAAI;YACtB,cAAcA,YAAY,YAAY;YACtC,OAAOO;YACP,aAAaR,WAAW,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE;YACvD,qBAAqBC,YAAY,mBAAmB,IAAI,EAAE;YAC1D0B;YACA,uBAAuBD,yBAAyB,EAAE;YAClD,kBAAkB1B,WAAW,KAAK,CAAC,OAAO,EAAE;YAC5C,QAAQ,IAAI,CAAC,MAAM;YACnBO;YACA,0BAA0B;gBACxB,OAAOP,WAAW,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChC,QAAQA,WAAW,OAAO,CAAC,mBAAmB;gBAC9CE;gBACAE;YACF;YACA,uBAAuBH,YAAY,qBAAqB;YACxD,+BAA+BA,YAAY,6BAA6B;QAC1E;QACA,MAAM4B,kBAAkBD,WAAW,QAAQ;QAE3C,OAAO;YAAE,OAAOC;YAAiBrB;QAAM;IACzC;IAEA,MAAc,YACZR,UAAsB,EACtBE,SAAiB,EACjB4B,uBAAkD,EAClB;QAChC,MAAMC,gBAAgB,IAAIlC,gBAAgBA,CAACK;QAC3C,IAAI,CAACX,MAAMA,EAAE;YACX,OAAO,MAAMwC,cAAc,gBAAgB,CACzCvC,iBAAiBA,EACjBsC,yBACA,IAAI,CAAC,eAAe;QAExB;QAEA,gBAAgB;QAChB,MAAME,SAAS,MAAMD,cAAc,aAAa,CAC9C/B,YACA,IAAI,CAAC,MAAM,EACX8B;QAEF,OAAOE,OAAO,QAAQ;IACxB;IAEQ,WAAW/B,WAAwB,EAAgC;QACzE,MAAMgC,cACJhC,YAAY,IAAI,KAAKpB,kBAAkB,GAAG,EAAE,GAAGoB,YAAY,WAAW;QACxE,MAAMiC,kBAAkBD,YAAY,GAAG,CAACjD,CAAAA,OAAQA,KAAK,IAAI;QACzD,MAAMmD,iBAAiB,IAAI,CAAC,eAAe,CAAC,MAAM,CAACnD,CAAAA,OACjDkD,gBAAgB,QAAQ,CAAClD,KAAK,IAAI;QAEpC,OAAOmD,eAAe,GAAG,CAACC,CAAAA;YACxB,OAAOpD,WAAIA,CAA0C;gBACnD,MAAMoD,eAAe,IAAI;gBACzB,aAAaA,eAAe,WAAW;gBACvC,YAAYA,eAAe,MAAM;gBACjC,SAASA,eAAe,IAAI;YAC9B;QACF;IACF;IA3TA,YAAYC,OAAoD,CAAE;QARlE,uBAAiB,aAAjB;QACA,uBAAiB,UAAjB;QACA,uBAAiB,UAAjB;QACA,uBAAiB,WAAjB;QACA,uBAAiB,cAAjB;QACA,uBAAO,mBAAsD,EAAE;QAC/D,uBAAiB,mBAAjB;QAGE,IAAI,CAAC,SAAS,GAAGA,SAAS;QAC1B,IAAI,CAAC,eAAe,GAAGA,SAAS,eAAe,EAAE;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAACA,SAAS;QAC7C,IAAI,CAAC,OAAO,GAAGA,SAAS,WAAW/C,0BAA0BA;QAC7D,IAAI,CAAC,UAAU,GAAG+C,SAAS,cAAchD,mBAAmBA;QAC5D,IAAI,CAAC,MAAM,GAAGI,iBAAiBA,CAAC4C,SAAS,eAAe;QACxD,IAAI,CAAC,eAAe,GAAGA,SAAS,mBAAmB;QACnDtD,kBAAkBA,CAAC;QAEnB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC3B,0BAA0B;YAC1B,YAAYsD,SAAS,cAAchD,mBAAmBA;YACtD,SAASgD,SAAS,WAAW/C,0BAA0BA;YACvD,iBAAiB,IAAI,CAAC,eAAe,CAAC,GAAG,CAACsB,CAAAA,IAAKA,EAAE,IAAI;YACrD,QAAQ,IAAI,CAAC,MAAM;QACrB;IACF;AA2SF;AAAC;AAEiC;AACX"}
@@ -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;
@@ -0,0 +1,150 @@
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
+
25
+ class LLMConfig {
26
+ async getModel() {
27
+ return await this.modelProvider.getModel(this.modelName);
28
+ }
29
+ getModelProvider() {
30
+ const client = this.getClient();
31
+ return new OpenAIProvider({
32
+ openAIClient: client,
33
+ useResponses: false
34
+ });
35
+ }
36
+ getProviderName() {
37
+ if (this.botContext.settings.LITELLM_API_URL || LLM_PROVIDER === LLM_PROVIDERS.LITELLM) {
38
+ return LLM_PROVIDERS.LITELLM;
39
+ }
40
+ return LLM_PROVIDER;
41
+ }
42
+ getClient() {
43
+ if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {
44
+ const litellmUrl = this.botContext.settings.LITELLM_API_URL || LLM_API_URL || '';
45
+ return this.getLiteLLMClient(litellmUrl);
46
+ }
47
+ if (LLM_PROVIDER === LLM_PROVIDERS.OPENAI) {
48
+ return this.getOpenAIClient();
49
+ }
50
+ return this.getAzureOpenAiClient();
51
+ }
52
+ buildLiteLLMTags() {
53
+ const botId = this.botContext.session.bot.id;
54
+ const orgId = this.botContext.session.organization_id;
55
+ const parts = [];
56
+ if (botId) {
57
+ parts.push(`${LITELLM_TAG_KEYS.BOT_ID}:${botId}`);
58
+ }
59
+ if (orgId) {
60
+ parts.push(`${LITELLM_TAG_KEYS.ORG_ID}:${orgId}`);
61
+ }
62
+ return parts.length > 0 ? {
63
+ 'x-litellm-tags': parts.join(LITELLM_TAG_KEYS.SEPARATOR)
64
+ } : undefined;
65
+ }
66
+ getLiteLLMClient(litellmUrl) {
67
+ return new openai({
68
+ apiKey: this.botContext.secrets.LITELLM_API_KEY || LLM_API_KEY,
69
+ baseURL: litellmUrl,
70
+ timeout: this.timeout,
71
+ maxRetries: this.maxRetries,
72
+ dangerouslyAllowBrowser: !isProd,
73
+ defaultHeaders: this.buildLiteLLMTags()
74
+ });
75
+ }
76
+ getOpenAIClient() {
77
+ return new openai({
78
+ apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || LLM_API_KEY,
79
+ timeout: this.timeout,
80
+ maxRetries: this.maxRetries,
81
+ dangerouslyAllowBrowser: !isProd
82
+ });
83
+ }
84
+ getAzureOpenAiClient() {
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,
89
+ deployment: this.modelName,
90
+ baseURL,
91
+ timeout: this.timeout,
92
+ maxRetries: this.maxRetries,
93
+ dangerouslyAllowBrowser: !isProd
94
+ });
95
+ }
96
+ getModelSettings(model, verbosity, reasoningEffort) {
97
+ if (model.includes('gpt-4')) {
98
+ return {
99
+ temperature: 0,
100
+ text: {
101
+ verbosity: VerbosityLevel.Medium
102
+ }
103
+ };
104
+ }
105
+ if (reasoningEffort) {
106
+ return {
107
+ reasoning: {
108
+ effort: reasoningEffort
109
+ },
110
+ temperature: 1,
111
+ text: {
112
+ verbosity
113
+ }
114
+ };
115
+ }
116
+ return {
117
+ temperature: 1,
118
+ text: {
119
+ verbosity
120
+ }
121
+ };
122
+ }
123
+ getApiVersion() {
124
+ if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {
125
+ return undefined;
126
+ }
127
+ if (LLM_PROVIDER !== LLM_PROVIDERS.AZURE) {
128
+ return 'NOT_API_VERSION_FOR_OPENAI_PROVIDER';
129
+ }
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);
145
+ }
146
+ }
147
+
148
+ export { LLMConfig };
149
+
150
+ //# sourceMappingURL=llm-config.js.map