@botonic/plugin-ai-agents 0.57.0-rslib-esm.2 → 0.57.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 (225) hide show
  1. package/lib/{agents → cjs/agents}/base-agent.d.ts +4 -4
  2. package/lib/cjs/agents/base-agent.js +39 -0
  3. package/lib/cjs/agents/base-agent.js.map +1 -0
  4. package/lib/cjs/agents/index.d.ts +2 -0
  5. package/lib/cjs/agents/index.js +8 -0
  6. package/lib/cjs/agents/index.js.map +1 -0
  7. package/lib/{agents → cjs/agents}/router-agent.d.ts +5 -5
  8. package/lib/cjs/agents/router-agent.js +33 -0
  9. package/lib/cjs/agents/router-agent.js.map +1 -0
  10. package/lib/{agents → cjs/agents}/specialist-agent.d.ts +5 -5
  11. package/lib/{agents → cjs/agents}/specialist-agent.js +45 -65
  12. package/lib/cjs/agents/specialist-agent.js.map +1 -0
  13. package/lib/{bot-config-tools.d.ts → cjs/bot-config-tools.d.ts} +1 -1
  14. package/lib/cjs/bot-config-tools.js +18 -0
  15. package/lib/cjs/bot-config-tools.js.map +1 -0
  16. package/lib/cjs/constants.js +25 -0
  17. package/lib/cjs/constants.js.map +1 -0
  18. package/lib/{debug-logger.d.ts → cjs/debug-logger.d.ts} +1 -1
  19. package/lib/{debug-logger.js → cjs/debug-logger.js} +9 -14
  20. package/lib/cjs/debug-logger.js.map +1 -0
  21. package/lib/cjs/guardrails/index.d.ts +1 -0
  22. package/lib/cjs/guardrails/index.js +5 -0
  23. package/lib/cjs/guardrails/index.js.map +1 -0
  24. package/lib/{guardrails → cjs/guardrails}/input.d.ts +2 -2
  25. package/lib/cjs/guardrails/input.js +96 -0
  26. package/lib/cjs/guardrails/input.js.map +1 -0
  27. package/lib/{index.d.ts → cjs/index.d.ts} +3 -3
  28. package/lib/{index.js → cjs/index.js} +75 -114
  29. package/lib/cjs/index.js.map +1 -0
  30. package/lib/{llm-config.d.ts → cjs/llm-config.d.ts} +1 -1
  31. package/lib/cjs/llm-config.js +121 -0
  32. package/lib/cjs/llm-config.js.map +1 -0
  33. package/lib/{runners → cjs/runners}/base-runner.d.ts +4 -4
  34. package/lib/{runners → cjs/runners}/base-runner.js +74 -81
  35. package/lib/cjs/runners/base-runner.js.map +1 -0
  36. package/lib/cjs/runners/index.d.ts +2 -0
  37. package/lib/cjs/runners/index.js +8 -0
  38. package/lib/cjs/runners/index.js.map +1 -0
  39. package/lib/{runners → cjs/runners}/router-runner.d.ts +2 -2
  40. package/lib/{runners → cjs/runners}/router-runner.js +14 -19
  41. package/lib/cjs/runners/router-runner.js.map +1 -0
  42. package/lib/{runners → cjs/runners}/specialist-runner.d.ts +1 -1
  43. package/lib/cjs/runners/specialist-runner.js +8 -0
  44. package/lib/cjs/runners/specialist-runner.js.map +1 -0
  45. package/lib/{services → cjs/services}/hubtype-api-client.d.ts +2 -2
  46. package/lib/cjs/services/hubtype-api-client.js +176 -0
  47. package/lib/cjs/services/hubtype-api-client.js.map +1 -0
  48. package/lib/{services → cjs/services}/types.d.ts +1 -1
  49. package/lib/cjs/services/types.js +13 -0
  50. package/lib/cjs/services/types.js.map +1 -0
  51. package/lib/cjs/structured-output/bot-executor.js +18 -0
  52. package/lib/cjs/structured-output/bot-executor.js.map +1 -0
  53. package/lib/cjs/structured-output/carousel.js +23 -0
  54. package/lib/cjs/structured-output/carousel.js.map +1 -0
  55. package/lib/cjs/structured-output/do-nothing.d.ts +6 -0
  56. package/lib/cjs/structured-output/do-nothing.js +11 -0
  57. package/lib/cjs/structured-output/do-nothing.js.map +1 -0
  58. package/lib/cjs/structured-output/exit.js +11 -0
  59. package/lib/cjs/structured-output/exit.js.map +1 -0
  60. package/lib/{structured-output → cjs/structured-output}/index.d.ts +4 -0
  61. package/lib/cjs/structured-output/index.js +47 -0
  62. package/lib/cjs/structured-output/index.js.map +1 -0
  63. package/lib/cjs/structured-output/request-contact-info.js +14 -0
  64. package/lib/cjs/structured-output/request-contact-info.js.map +1 -0
  65. package/lib/cjs/structured-output/text-with-buttons.js +24 -0
  66. package/lib/cjs/structured-output/text-with-buttons.js.map +1 -0
  67. package/lib/cjs/structured-output/text.js +14 -0
  68. package/lib/cjs/structured-output/text.js.map +1 -0
  69. package/lib/{tools → cjs/tools}/index.d.ts +2 -2
  70. package/lib/cjs/tools/index.js +8 -0
  71. package/lib/cjs/tools/index.js.map +1 -0
  72. package/lib/{tools → cjs/tools}/retrieve-knowledge.d.ts +2 -2
  73. package/lib/cjs/tools/retrieve-knowledge.js +34 -0
  74. package/lib/cjs/tools/retrieve-knowledge.js.map +1 -0
  75. package/lib/{types.d.ts → cjs/types.d.ts} +1 -1
  76. package/lib/cjs/types.js +3 -0
  77. package/lib/cjs/types.js.map +1 -0
  78. package/lib/esm/agents/base-agent.d.ts +28 -0
  79. package/lib/esm/agents/base-agent.js +39 -0
  80. package/lib/esm/agents/base-agent.js.map +1 -0
  81. package/lib/esm/agents/index.d.ts +2 -0
  82. package/lib/esm/agents/index.js +8 -0
  83. package/lib/esm/agents/index.js.map +1 -0
  84. package/lib/esm/agents/router-agent.d.ts +25 -0
  85. package/lib/esm/agents/router-agent.js +33 -0
  86. package/lib/esm/agents/router-agent.js.map +1 -0
  87. package/lib/esm/agents/specialist-agent.d.ts +39 -0
  88. package/lib/esm/agents/specialist-agent.js +108 -0
  89. package/lib/esm/agents/specialist-agent.js.map +1 -0
  90. package/lib/esm/bot-config-tools.d.ts +7 -0
  91. package/lib/esm/bot-config-tools.js +18 -0
  92. package/lib/esm/bot-config-tools.js.map +1 -0
  93. package/lib/esm/constants.d.ts +21 -0
  94. package/lib/esm/constants.js +25 -0
  95. package/lib/esm/constants.js.map +1 -0
  96. package/lib/esm/debug-logger.d.ts +33 -0
  97. package/lib/esm/debug-logger.js +116 -0
  98. package/lib/esm/debug-logger.js.map +1 -0
  99. package/lib/esm/guardrails/index.d.ts +1 -0
  100. package/lib/esm/guardrails/index.js +5 -0
  101. package/lib/esm/guardrails/index.js.map +1 -0
  102. package/lib/esm/guardrails/input.d.ts +10 -0
  103. package/lib/esm/guardrails/input.js +96 -0
  104. package/lib/esm/guardrails/input.js.map +1 -0
  105. package/lib/esm/index.d.ts +22 -0
  106. package/lib/esm/index.js +220 -0
  107. package/lib/esm/index.js.map +1 -0
  108. package/lib/esm/llm-config.d.ts +30 -0
  109. package/lib/esm/llm-config.js +121 -0
  110. package/lib/esm/llm-config.js.map +1 -0
  111. package/lib/esm/runners/base-runner.d.ts +31 -0
  112. package/lib/esm/runners/base-runner.js +194 -0
  113. package/lib/esm/runners/base-runner.js.map +1 -0
  114. package/lib/esm/runners/index.d.ts +2 -0
  115. package/lib/esm/runners/index.js +8 -0
  116. package/lib/esm/runners/index.js.map +1 -0
  117. package/lib/esm/runners/router-runner.d.ts +8 -0
  118. package/lib/esm/runners/router-runner.js +44 -0
  119. package/lib/esm/runners/router-runner.js.map +1 -0
  120. package/lib/esm/runners/specialist-runner.d.ts +4 -0
  121. package/lib/esm/runners/specialist-runner.js +8 -0
  122. package/lib/esm/runners/specialist-runner.js.map +1 -0
  123. package/lib/esm/services/hubtype-api-client.d.ts +13 -0
  124. package/lib/esm/services/hubtype-api-client.js +176 -0
  125. package/lib/esm/services/hubtype-api-client.js.map +1 -0
  126. package/lib/esm/services/types.d.ts +72 -0
  127. package/lib/esm/services/types.js +13 -0
  128. package/lib/esm/services/types.js.map +1 -0
  129. package/lib/esm/structured-output/bot-executor.d.ts +13 -0
  130. package/lib/esm/structured-output/bot-executor.js +18 -0
  131. package/lib/esm/structured-output/bot-executor.js.map +1 -0
  132. package/lib/esm/structured-output/carousel.d.ts +18 -0
  133. package/lib/esm/structured-output/carousel.js +23 -0
  134. package/lib/esm/structured-output/carousel.js.map +1 -0
  135. package/lib/esm/structured-output/do-nothing.d.ts +6 -0
  136. package/lib/esm/structured-output/do-nothing.js +11 -0
  137. package/lib/esm/structured-output/do-nothing.js.map +1 -0
  138. package/lib/esm/structured-output/exit.d.ts +6 -0
  139. package/lib/esm/structured-output/exit.js +11 -0
  140. package/lib/esm/structured-output/exit.js.map +1 -0
  141. package/lib/esm/structured-output/index.d.ts +112 -0
  142. package/lib/esm/structured-output/index.js +47 -0
  143. package/lib/esm/structured-output/index.js.map +1 -0
  144. package/lib/esm/structured-output/request-contact-info.d.ts +9 -0
  145. package/lib/esm/structured-output/request-contact-info.js +14 -0
  146. package/lib/esm/structured-output/request-contact-info.js.map +1 -0
  147. package/lib/esm/structured-output/text-with-buttons.d.ts +17 -0
  148. package/lib/esm/structured-output/text-with-buttons.js +24 -0
  149. package/lib/esm/structured-output/text-with-buttons.js.map +1 -0
  150. package/lib/esm/structured-output/text.d.ts +9 -0
  151. package/lib/esm/structured-output/text.js +14 -0
  152. package/lib/esm/structured-output/text.js.map +1 -0
  153. package/lib/esm/tools/index.d.ts +3 -0
  154. package/lib/esm/tools/index.js +8 -0
  155. package/lib/esm/tools/index.js.map +1 -0
  156. package/lib/esm/tools/retrieve-knowledge.d.ts +6 -0
  157. package/lib/esm/tools/retrieve-knowledge.js +34 -0
  158. package/lib/esm/tools/retrieve-knowledge.js.map +1 -0
  159. package/lib/esm/types.d.ts +53 -0
  160. package/lib/esm/types.js +3 -0
  161. package/lib/esm/types.js.map +1 -0
  162. package/package.json +10 -12
  163. package/src/index.ts +1 -0
  164. package/src/runners/base-runner.ts +20 -10
  165. package/src/structured-output/do-nothing.ts +12 -0
  166. package/src/structured-output/index.ts +2 -0
  167. package/lib/agents/base-agent.js +0 -66
  168. package/lib/agents/base-agent.js.map +0 -1
  169. package/lib/agents/index.d.ts +0 -2
  170. package/lib/agents/index.js +0 -9
  171. package/lib/agents/index.js.map +0 -1
  172. package/lib/agents/router-agent.js +0 -50
  173. package/lib/agents/router-agent.js.map +0 -1
  174. package/lib/agents/specialist-agent.js.map +0 -1
  175. package/lib/bot-config-tools.js +0 -20
  176. package/lib/bot-config-tools.js.map +0 -1
  177. package/lib/constants.js +0 -26
  178. package/lib/constants.js.map +0 -1
  179. package/lib/debug-logger.js.map +0 -1
  180. package/lib/guardrails/index.d.ts +0 -1
  181. package/lib/guardrails/index.js +0 -6
  182. package/lib/guardrails/index.js.map +0 -1
  183. package/lib/guardrails/input.js +0 -119
  184. package/lib/guardrails/input.js.map +0 -1
  185. package/lib/index.js.map +0 -1
  186. package/lib/llm-config.js +0 -150
  187. package/lib/llm-config.js.map +0 -1
  188. package/lib/runners/base-runner.js.map +0 -1
  189. package/lib/runners/index.d.ts +0 -2
  190. package/lib/runners/index.js +0 -9
  191. package/lib/runners/index.js.map +0 -1
  192. package/lib/runners/router-runner.js.map +0 -1
  193. package/lib/runners/specialist-runner.js +0 -10
  194. package/lib/runners/specialist-runner.js.map +0 -1
  195. package/lib/services/hubtype-api-client.js +0 -191
  196. package/lib/services/hubtype-api-client.js.map +0 -1
  197. package/lib/services/types.js +0 -13
  198. package/lib/services/types.js.map +0 -1
  199. package/lib/structured-output/bot-executor.js +0 -21
  200. package/lib/structured-output/bot-executor.js.map +0 -1
  201. package/lib/structured-output/carousel.js +0 -26
  202. package/lib/structured-output/carousel.js.map +0 -1
  203. package/lib/structured-output/exit.js +0 -14
  204. package/lib/structured-output/exit.js.map +0 -1
  205. package/lib/structured-output/index.js +0 -59
  206. package/lib/structured-output/index.js.map +0 -1
  207. package/lib/structured-output/request-contact-info.js +0 -17
  208. package/lib/structured-output/request-contact-info.js.map +0 -1
  209. package/lib/structured-output/text-with-buttons.js +0 -25
  210. package/lib/structured-output/text-with-buttons.js.map +0 -1
  211. package/lib/structured-output/text.js +0 -17
  212. package/lib/structured-output/text.js.map +0 -1
  213. package/lib/tools/index.js +0 -8
  214. package/lib/tools/index.js.map +0 -1
  215. package/lib/tools/retrieve-knowledge.js +0 -40
  216. package/lib/tools/retrieve-knowledge.js.map +0 -1
  217. package/lib/types.js +0 -5
  218. package/lib/types.js.map +0 -1
  219. /package/lib/{constants.d.ts → cjs/constants.d.ts} +0 -0
  220. /package/lib/{structured-output → cjs/structured-output}/bot-executor.d.ts +0 -0
  221. /package/lib/{structured-output → cjs/structured-output}/carousel.d.ts +0 -0
  222. /package/lib/{structured-output → cjs/structured-output}/exit.d.ts +0 -0
  223. /package/lib/{structured-output → cjs/structured-output}/request-contact-info.d.ts +0 -0
  224. /package/lib/{structured-output → cjs/structured-output}/text-with-buttons.d.ts +0 -0
  225. /package/lib/{structured-output → cjs/structured-output}/text.d.ts +0 -0
package/lib/llm-config.js DELETED
@@ -1,150 +0,0 @@
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
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"runners/base-runner.js","sources":["../../src/runners/base-runner.ts"],"sourcesContent":["import type {\n OutputMessage,\n ResolvedPlugins,\n ToolExecution,\n} from '@botonic/core'\nimport {\n InputGuardrailTripwireTriggered,\n RunContext,\n Runner,\n RunToolCallItem,\n RunToolCallOutputItem,\n} from '@openai/agents'\nimport { isProd, LLM_PROVIDERS } from '../constants'\nimport type { DebugLogger } from '../debug-logger'\nimport type { LLMConfig } from '../llm-config'\nimport { HubtypeApiClient } from '../services/hubtype-api-client'\nimport { TrackFeature, TrackProductName } from '../services/types'\nimport { RETRIEVE_KNOWLEDGE_TOOL_NAME } from '../tools'\nimport type {\n AgenticInputMessage,\n AgenticOutputMessage,\n AIAgent,\n Context,\n ResultRawResponse,\n RunResult,\n} from '../types'\n\n// Minimal interface matching the properties we actually use from Runner.run() result.\n// This bypasses strict type checking while maintaining type safety for accessed properties.\nexport interface RunnerResult {\n finalOutput?: {\n messages?: OutputMessage[]\n }\n rawResponses?: ResultRawResponse[]\n newItems?: unknown[]\n lastAgent?: { name?: string }\n // biome-ignore lint/suspicious/noExplicitAny: state is a complex internal type\n state?: any\n}\n\nexport abstract class BaseRunner<\n TPlugins extends ResolvedPlugins = ResolvedPlugins,\n TExtraData = unknown,\n> {\n protected agent: AIAgent<TPlugins, TExtraData>\n protected llmConfig: LLMConfig\n protected inferenceId: string\n protected logger: DebugLogger\n\n constructor(\n agent: AIAgent<TPlugins, TExtraData>,\n llmConfig: LLMConfig,\n inferenceId: string,\n logger: DebugLogger\n ) {\n this.agent = agent\n this.llmConfig = llmConfig\n this.inferenceId = inferenceId\n this.logger = logger\n }\n\n async run(\n messages: AgenticInputMessage[],\n context: Context<TPlugins, TExtraData>\n ): Promise<RunResult> {\n const startTime = Date.now()\n\n const runContext = new RunContext(context)\n const prompt = (await this.agent.getSystemPrompt(runContext)) ?? ''\n this.logger.logRunnerStart(\n this.llmConfig.modelName,\n this.llmConfig.modelSettings,\n prompt\n )\n\n try {\n const runner = new Runner({\n tracingDisabled: true,\n })\n const result = (await runner.run(this.agent, messages, {\n context,\n })) as RunnerResult\n const endTime = Date.now()\n\n await this.sendLlmRunTracking(result, context, startTime, endTime)\n\n const runResult = this.buildRunResult(result, context, messages.length)\n\n this.logger.logRunResult(runResult, startTime)\n\n return runResult\n } catch (error) {\n const runResult = this.handleInputGuardrailTripwireTriggered(\n error,\n startTime\n )\n if (runResult) {\n return runResult\n }\n\n this.logger.logRunnerError(startTime, error)\n\n throw error\n }\n }\n\n protected getToolsExecuted(\n result: RunnerResult,\n context: Context<TPlugins, TExtraData>\n ): ToolExecution[] {\n const toolResultsByCallId = this.getToolResultsByCallId(result.newItems)\n\n return (\n result.newItems\n ?.filter(item => item instanceof RunToolCallItem)\n .map((item: RunToolCallItem) =>\n this.getToolExecutionInfo(\n item as RunToolCallItem,\n context,\n toolResultsByCallId\n )\n )\n .filter(\n (toolExecution: ToolExecution) => toolExecution.toolName !== ''\n ) || []\n )\n }\n\n private getToolResultsByCallId(\n newItems: unknown[] = []\n ): Map<string, string> {\n const map = new Map<string, string>()\n for (const item of newItems) {\n if (!(item instanceof RunToolCallOutputItem)) {\n continue\n }\n const rawItem = item.rawItem as {\n callId?: string\n output?: string | { type?: string; text?: string }\n }\n const callId = rawItem?.callId\n const output = rawItem?.output\n if (callId == null || output == null) {\n continue\n }\n const text = this.extractToolResult(output)\n if (text != null) {\n map.set(callId, text)\n }\n }\n return map\n }\n\n private extractToolResult(\n output: string | { type?: string; text?: string }\n ): string | undefined {\n if (typeof output === 'string') {\n return output\n }\n return output?.type === 'text' && typeof output?.text === 'string'\n ? output.text\n : undefined\n }\n\n private getToolExecutionInfo(\n item: RunToolCallItem,\n context: Context<TPlugins, TExtraData>,\n toolResultsByCallId: Map<string, string>\n ): ToolExecution {\n if (item.rawItem.type !== 'function_call') {\n return {\n toolName: '',\n toolArguments: {},\n }\n }\n const toolName = item.rawItem.name\n const toolArguments = this.getSafeToolArguments(item.rawItem.arguments)\n const toolResults = item.rawItem.callId\n ? toolResultsByCallId.get(item.rawItem.callId)\n : undefined\n\n const toolExecution: ToolExecution = {\n toolName,\n toolArguments,\n toolResults,\n }\n\n if (toolName === RETRIEVE_KNOWLEDGE_TOOL_NAME) {\n return {\n ...toolExecution,\n knowledgebaseSourcesIds: context.knowledgeUsed.sourceIds,\n knowledgebaseChunksIds: context.knowledgeUsed.chunksIds,\n }\n }\n\n return toolExecution\n }\n\n private getSafeToolArguments(\n rawToolArguments: string\n ): Record<string, unknown> {\n try {\n return JSON.parse(rawToolArguments)\n } catch (_error) {\n return {}\n }\n }\n\n protected buildRunResult(\n result: RunnerResult,\n context: Context<TPlugins, TExtraData>,\n memoryLength: number\n ): RunResult {\n const outputMessages = result.finalOutput?.messages || []\n const hasExit =\n outputMessages.length === 0 ||\n outputMessages.some(message => message.type === 'exit')\n\n return {\n startingAgentName: '',\n lastAgentName: '',\n availableSpecialists: [],\n isTransferredToSpecialist: false,\n messages: hasExit\n ? []\n : (outputMessages.filter(\n message => message.type !== 'exit'\n ) as AgenticOutputMessage[]),\n toolsExecuted: this.getToolsExecuted(result, context),\n exit: hasExit,\n memoryLength,\n error: false,\n inputGuardrailsTriggered: [],\n outputGuardrailsTriggered: [],\n }\n }\n\n private async sendLlmRunTracking(\n result: RunnerResult,\n context: Context<TPlugins, TExtraData>,\n startTime: number,\n endTime: number\n ): Promise<void> {\n if (!isProd) {\n return\n }\n if (this.llmConfig.getProviderName() === LLM_PROVIDERS.LITELLM) {\n return\n }\n const rawResponses = result.rawResponses ?? []\n if (rawResponses.length === 0) {\n return\n }\n const botId = context.request.session.bot.id\n const isTest = context.request.session.is_test_integration\n const totalDuration = endTime - startTime\n const durationPerCall = Math.round(totalDuration / rawResponses.length)\n const temperature =\n (this.llmConfig.modelSettings.temperature as number | undefined) ?? 0\n const llmRuns = rawResponses.map(response => ({\n inference_id: this.inferenceId,\n is_test: isTest,\n product_name: TrackProductName.AI_AGENT,\n deployment_name: this.llmConfig.modelName,\n model_name:\n (response.providerData?.model as string | undefined) ??\n this.llmConfig.modelName,\n feature: TrackFeature.AI_AGENT_RUN,\n api_version: this.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(context.authToken)\n await client.trackLlmRuns(botId, {\n llm_runs: llmRuns,\n })\n }\n\n protected handleInputGuardrailTripwireTriggered(\n error: unknown,\n startTime: number\n ): RunResult | undefined {\n if (error instanceof InputGuardrailTripwireTriggered) {\n const runResult: RunResult = {\n startingAgentName: '',\n lastAgentName: '',\n availableSpecialists: [],\n isTransferredToSpecialist: false,\n messages: [],\n memoryLength: 0,\n toolsExecuted: [],\n exit: true,\n error: false,\n inputGuardrailsTriggered: error.result.output.outputInfo,\n outputGuardrailsTriggered: [],\n }\n\n this.logger.logGuardrailTriggered()\n this.logger.logRunResult(runResult, startTime)\n\n return runResult\n }\n }\n}\n"],"names":["InputGuardrailTripwireTriggered","RunContext","Runner","RunToolCallItem","RunToolCallOutputItem","isProd","LLM_PROVIDERS","HubtypeApiClient","TrackFeature","TrackProductName","RETRIEVE_KNOWLEDGE_TOOL_NAME","BaseRunner","messages","context","startTime","Date","runContext","prompt","runner","result","endTime","runResult","error","toolResultsByCallId","item","toolExecution","newItems","map","Map","rawItem","callId","output","text","undefined","toolName","toolArguments","toolResults","rawToolArguments","JSON","_error","memoryLength","outputMessages","hasExit","message","rawResponses","botId","isTest","totalDuration","durationPerCall","Math","temperature","llmRuns","response","client","agent","llmConfig","inferenceId","logger"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { RouterRunner } from './router-runner.js';
2
- export { SpecialistRunner } from './specialist-runner.js';
@@ -1,9 +0,0 @@
1
-
2
-
3
-
4
-
5
-
6
- export { RouterRunner } from "./router-runner.js";
7
- export { SpecialistRunner } from "./specialist-runner.js";
8
-
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runners/index.js","sources":["../../src/runners/index.ts"],"sourcesContent":["export { RouterRunner } from './router-runner'\nexport { SpecialistRunner } from './specialist-runner'\n"],"names":["RouterRunner","SpecialistRunner"],"mappings":";;AAA8C;AACQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runners/router-runner.js","sources":["../../src/runners/router-runner.ts"],"sourcesContent":["import type { AvailableSpecialist, ResolvedPlugins } from '@botonic/core'\nimport { Handoff } from '@openai/agents'\nimport type { Agent } from '@openai/agents-core'\n\nimport type { Context, RunResult } from '../types'\nimport { BaseRunner, type RunnerResult } from './base-runner'\n\nexport class RouterRunner<\n TPlugins extends ResolvedPlugins = ResolvedPlugins,\n TExtraData = unknown,\n> extends BaseRunner<TPlugins, TExtraData> {\n protected override buildRunResult(\n result: RunnerResult,\n context: Context<TPlugins, TExtraData>,\n memoryLength: number\n ): RunResult {\n const base = super.buildRunResult(result, context, memoryLength)\n\n const availableSpecialists = this.getAvailableSpecialists()\n const startingAgentName = this.agent.name ?? ''\n const lastAgentName = result.lastAgent?.name ?? ''\n\n return {\n ...base,\n startingAgentName,\n lastAgentName,\n availableSpecialists,\n isTransferredToSpecialist: startingAgentName !== lastAgentName,\n }\n }\n\n protected override handleInputGuardrailTripwireTriggered(\n error: unknown,\n startTime: number\n ): RunResult | undefined {\n const runResult = super.handleInputGuardrailTripwireTriggered(\n error,\n startTime\n )\n if (runResult) {\n // Override attributes to match router agent\n runResult.startingAgentName = this.agent.name\n runResult.lastAgentName = this.agent.name\n runResult.availableSpecialists = this.getAvailableSpecialists()\n runResult.isTransferredToSpecialist = false\n\n return runResult\n }\n return undefined\n }\n\n private getAvailableSpecialists(): AvailableSpecialist[] {\n return (this.agent.handoffs ?? []).map(\n (entry: Agent<any, any> | Handoff<any, any>) => {\n const isHandoff = entry instanceof Handoff\n const agent = isHandoff ? entry.agent : (entry as Agent<any, any>)\n const description = isHandoff\n ? entry.toolDescription\n : agent.handoffDescription\n return { name: agent.name, description }\n }\n )\n }\n}\n"],"names":["Handoff","BaseRunner","RouterRunner","result","context","memoryLength","base","availableSpecialists","startingAgentName","lastAgentName","error","startTime","runResult","undefined","entry","isHandoff","agent","description"],"mappings":";;;;;AACwC;AAIqB;AAEtD,MAAME,YAAYA,SAGfD,UAAUA;IACC,eACjBE,MAAoB,EACpBC,OAAsC,EACtCC,YAAoB,EACT;QACX,MAAMC,OAAO,KAAK,CAAC,eAAeH,QAAQC,SAASC;QAEnD,MAAME,uBAAuB,IAAI,CAAC,uBAAuB;QACzD,MAAMC,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;QAC7C,MAAMC,gBAAgBN,OAAO,SAAS,EAAE,QAAQ;QAEhD,OAAO;YACL,GAAGG,IAAI;YACPE;YACAC;YACAF;YACA,2BAA2BC,sBAAsBC;QACnD;IACF;IAEmB,sCACjBC,KAAc,EACdC,SAAiB,EACM;QACvB,MAAMC,YAAY,KAAK,CAAC,sCACtBF,OACAC;QAEF,IAAIC,WAAW;YACb,4CAA4C;YAC5CA,UAAU,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;YAC7CA,UAAU,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;YACzCA,UAAU,oBAAoB,GAAG,IAAI,CAAC,uBAAuB;YAC7DA,UAAU,yBAAyB,GAAG;YAEtC,OAAOA;QACT;QACA,OAAOC;IACT;IAEQ,0BAAiD;QACvD,OAAQ,KAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAC,EAAG,GAAG,CACpC,CAACC;YACC,MAAMC,YAAYD,iBAAiBd,OAAOA;YAC1C,MAAMgB,QAAQD,YAAYD,MAAM,KAAK,GAAIA;YACzC,MAAMG,cAAcF,YAChBD,MAAM,eAAe,GACrBE,MAAM,kBAAkB;YAC5B,OAAO;gBAAE,MAAMA,MAAM,IAAI;gBAAEC;YAAY;QACzC;IAEJ;AACF"}
@@ -1,10 +0,0 @@
1
- import { BaseRunner } from "./base-runner.js";
2
-
3
-
4
-
5
- class SpecialistRunner extends BaseRunner {
6
- }
7
-
8
- export { SpecialistRunner };
9
-
10
- //# sourceMappingURL=specialist-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runners/specialist-runner.js","sources":["../../src/runners/specialist-runner.ts"],"sourcesContent":["import type { ResolvedPlugins } from '@botonic/core'\nimport { BaseRunner } from './base-runner'\n\nexport class SpecialistRunner<\n TPlugins extends ResolvedPlugins = ResolvedPlugins,\n TExtraData = unknown,\n> extends BaseRunner<TPlugins, TExtraData> {}\n"],"names":["BaseRunner","SpecialistRunner"],"mappings":";;;AAC0C;AAEnC,MAAMC,gBAAgBA,SAGnBD,UAAUA;AAAwB"}
@@ -1,191 +0,0 @@
1
- import axios from "axios";
2
- import { HUBTYPE_API_URL } from "../constants.js";
3
-
4
-
5
-
6
- /* eslint-disable @typescript-eslint/naming-convention */ function _define_property(obj, key, value) {
7
- if (key in obj) {
8
- Object.defineProperty(obj, key, {
9
- value: value,
10
- enumerable: true,
11
- configurable: true,
12
- writable: true
13
- });
14
- } else obj[key] = value;
15
- return obj;
16
- }
17
-
18
-
19
- class HubtypeApiClient {
20
- async retrieveSimilarChunks(query, sourceIds) {
21
- const url = `${HUBTYPE_API_URL}/external/v1/ai/knowledge_base/similar_chunks/`;
22
- const headers = {
23
- 'Content-Type': 'application/json',
24
- Authorization: `Bearer ${this.authToken}`
25
- };
26
- const params = {
27
- query,
28
- source_ids: sourceIds,
29
- num_chunks: 5
30
- };
31
- const response = await axios.post(url, params, {
32
- headers
33
- });
34
- const chunks = response.data.chunks.map((chunk)=>({
35
- id: chunk.id,
36
- text: chunk.text
37
- }));
38
- return chunks;
39
- }
40
- async getLocalMessages(maxMemoryLength, previousHubtypeMessages, localStorageKey) {
41
- const localBotonicState = typeof globalThis !== 'undefined' && globalThis.localStorage ? globalThis.localStorage.getItem(localStorageKey) : null;
42
- const botonicState = JSON.parse(localBotonicState || '{}');
43
- const messages = botonicState.messages;
44
- const filteredMessages = messages.filter((message)=>message.data.text).map((message)=>({
45
- role: message.sentBy === 'user' ? 'user' : 'assistant',
46
- content: message.data.text
47
- })).map((message)=>this.formatMessage(message));
48
- const resultMessages = [
49
- ...filteredMessages,
50
- ...previousHubtypeMessages
51
- ];
52
- return resultMessages.slice(-maxMemoryLength);
53
- }
54
- async getMessagesV2(botContext, options, previousHubtypeMessages) {
55
- const url = `${HUBTYPE_API_URL}/external/v2/ai/agent/message_history/`;
56
- const headers = {
57
- 'Content-Type': 'application/json',
58
- Authorization: `Bearer ${this.authToken}`
59
- };
60
- const params = {
61
- last_message_id: botContext.input.message_id,
62
- max_messages: options.maxMessages,
63
- include_tool_calls: options.includeToolCalls,
64
- max_full_tool_results: options.maxFullToolResults,
65
- debug_mode: options.debugMode
66
- };
67
- try {
68
- const response = await axios.get(url, {
69
- headers,
70
- params
71
- });
72
- const { messages, conversation_id, truncated } = response.data;
73
- const formattedMessages = [
74
- ...messages,
75
- ...previousHubtypeMessages
76
- ].map((message)=>this.formatMessageV2(message)).filter((message)=>message !== null);
77
- return {
78
- messages: formattedMessages,
79
- conversationId: conversation_id,
80
- truncated
81
- };
82
- } catch (error) {
83
- console.error(error);
84
- throw new Error('Failed to get messages from Hubtype V2 API');
85
- }
86
- }
87
- formatMessageV2(message) {
88
- switch(message.role){
89
- case 'user':
90
- return {
91
- role: 'user',
92
- content: message.content ?? ''
93
- };
94
- case 'assistant':
95
- {
96
- const assistantMessage = message;
97
- // If assistant message has tool_calls, include them for context
98
- // Using double assertion as the OpenAI API supports this format,
99
- // but the agents SDK types are more restrictive
100
- if (assistantMessage.tool_calls && assistantMessage.tool_calls.length > 0) {
101
- return {
102
- role: 'assistant',
103
- content: assistantMessage.content ?? '',
104
- tool_calls: assistantMessage.tool_calls.map((tc)=>({
105
- id: tc.id,
106
- type: tc.type,
107
- function: {
108
- name: tc.function.name,
109
- arguments: tc.function.arguments
110
- }
111
- }))
112
- };
113
- }
114
- // Regular assistant message without tool_calls
115
- return {
116
- role: 'assistant',
117
- content: [
118
- {
119
- type: 'output_text',
120
- text: assistantMessage.content ?? ''
121
- }
122
- ],
123
- status: 'completed'
124
- };
125
- }
126
- case 'tool':
127
- {
128
- // Tool messages provide context about previous tool executions
129
- // Using double assertion as the OpenAI API supports this format,
130
- // but the agents SDK types are more restrictive
131
- const toolMessage = message;
132
- return {
133
- role: 'tool',
134
- tool_call_id: toolMessage.tool_call_id,
135
- content: toolMessage.content ?? ''
136
- };
137
- }
138
- case 'system':
139
- return {
140
- role: 'system',
141
- content: message.content ?? ''
142
- };
143
- default:
144
- throw new Error(`Invalid message role: ${message.role}`);
145
- }
146
- }
147
- async trackLlmRuns(botId, data) {
148
- // Not stop the bot execution if the tracking fails, just log the error
149
- try {
150
- const url = `${HUBTYPE_API_URL}/external/v2/conversational_apps/${botId}/track_llm_runs/`;
151
- const headers = {
152
- 'Content-Type': 'application/json',
153
- Authorization: `Bearer ${this.authToken}`
154
- };
155
- await axios.post(url, data, {
156
- headers
157
- });
158
- } catch (error) {
159
- console.error('Failed to track LLM runs:', error);
160
- }
161
- }
162
- formatMessage(message) {
163
- if (message.role === 'user') {
164
- return {
165
- content: message.content,
166
- role: 'user'
167
- };
168
- } else if (message.role === 'assistant') {
169
- return {
170
- role: 'assistant',
171
- content: [
172
- {
173
- type: 'output_text',
174
- text: message.content
175
- }
176
- ],
177
- status: 'completed'
178
- };
179
- } else {
180
- throw new Error('Invalid message role');
181
- }
182
- }
183
- constructor(authToken){
184
- _define_property(this, "authToken", void 0);
185
- this.authToken = authToken;
186
- }
187
- }
188
-
189
- export { HubtypeApiClient };
190
-
191
- //# sourceMappingURL=hubtype-api-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services/hubtype-api-client.js","sources":["../../src/services/hubtype-api-client.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { BotContext, HubtypeAssistantMessage } from '@botonic/core'\nimport axios from 'axios'\n\nimport { HUBTYPE_API_URL } from '../constants'\nimport type { AgenticInputMessage, Chunk, MemoryOptions } from '../types'\nimport type {\n GetMessagesV2Result,\n HubtypeAssistantMessageV2,\n HubtypeMessage,\n HubtypeMessageV2,\n HubtypeToolMessageV2,\n MessageHistoryResponseV2,\n MessageHistoryV2Params,\n TrackLlmRunsData,\n} from './types'\n\nexport class HubtypeApiClient {\n private readonly authToken: string\n\n constructor(authToken: string) {\n this.authToken = authToken\n }\n\n async retrieveSimilarChunks(\n query: string,\n sourceIds: string[]\n ): Promise<Chunk[]> {\n const url = `${HUBTYPE_API_URL}/external/v1/ai/knowledge_base/similar_chunks/`\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.authToken}`,\n }\n const params = {\n query,\n source_ids: sourceIds,\n num_chunks: 5,\n }\n const response = await axios.post(url, params, { headers })\n const chunks = response.data.chunks.map((chunk: Chunk) => ({\n id: chunk.id,\n text: chunk.text,\n }))\n return chunks\n }\n\n async getLocalMessages(\n maxMemoryLength: number,\n previousHubtypeMessages: HubtypeAssistantMessage[],\n localStorageKey: string\n ): Promise<AgenticInputMessage[]> {\n const localBotonicState =\n typeof globalThis !== 'undefined' && globalThis.localStorage\n ? globalThis.localStorage.getItem(localStorageKey)\n : null\n const botonicState = JSON.parse(localBotonicState || '{}')\n const messages = botonicState.messages\n const filteredMessages = messages\n .filter(message => message.data.text)\n .map(message => ({\n role: message.sentBy === 'user' ? 'user' : 'assistant',\n content: message.data.text,\n }))\n .map(message => this.formatMessage(message))\n const resultMessages = [...filteredMessages, ...previousHubtypeMessages]\n\n return resultMessages.slice(-maxMemoryLength)\n }\n\n async getMessagesV2(\n botContext: BotContext,\n options: MemoryOptions,\n previousHubtypeMessages: HubtypeAssistantMessage[]\n ): Promise<GetMessagesV2Result> {\n const url = `${HUBTYPE_API_URL}/external/v2/ai/agent/message_history/`\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.authToken}`,\n }\n const params: MessageHistoryV2Params = {\n last_message_id: botContext.input.message_id,\n max_messages: options.maxMessages,\n include_tool_calls: options.includeToolCalls,\n max_full_tool_results: options.maxFullToolResults,\n debug_mode: options.debugMode,\n }\n\n try {\n const response = await axios.get<MessageHistoryResponseV2>(url, {\n headers,\n params,\n })\n const { messages, conversation_id, truncated } = response.data\n const formattedMessages = [...messages, ...previousHubtypeMessages]\n .map(message => this.formatMessageV2(message))\n .filter((message): message is AgenticInputMessage => message !== null)\n\n return {\n messages: formattedMessages,\n conversationId: conversation_id,\n truncated,\n }\n } catch (error) {\n console.error(error)\n throw new Error('Failed to get messages from Hubtype V2 API')\n }\n }\n\n private formatMessageV2(\n message: HubtypeMessageV2\n ): AgenticInputMessage | null {\n switch (message.role) {\n case 'user':\n return {\n role: 'user',\n content: message.content ?? '',\n }\n case 'assistant': {\n const assistantMessage = message as HubtypeAssistantMessageV2\n // If assistant message has tool_calls, include them for context\n // Using double assertion as the OpenAI API supports this format,\n // but the agents SDK types are more restrictive\n if (\n assistantMessage.tool_calls &&\n assistantMessage.tool_calls.length > 0\n ) {\n return {\n role: 'assistant',\n content: assistantMessage.content ?? '',\n tool_calls: assistantMessage.tool_calls.map(tc => ({\n id: tc.id,\n type: tc.type,\n function: {\n name: tc.function.name,\n arguments: tc.function.arguments,\n },\n })),\n } as unknown as AgenticInputMessage\n }\n // Regular assistant message without tool_calls\n return {\n role: 'assistant',\n content: [\n {\n type: 'output_text',\n text: assistantMessage.content ?? '',\n },\n ],\n status: 'completed',\n }\n }\n case 'tool': {\n // Tool messages provide context about previous tool executions\n // Using double assertion as the OpenAI API supports this format,\n // but the agents SDK types are more restrictive\n const toolMessage = message as HubtypeToolMessageV2\n return {\n role: 'tool',\n tool_call_id: toolMessage.tool_call_id,\n content: toolMessage.content ?? '',\n } as unknown as AgenticInputMessage\n }\n case 'system':\n return {\n role: 'system',\n content: message.content ?? '',\n }\n default:\n throw new Error(\n `Invalid message role: ${(message as HubtypeMessageV2).role}`\n )\n }\n }\n\n async trackLlmRuns(botId: string, data: TrackLlmRunsData): Promise<void> {\n // Not stop the bot execution if the tracking fails, just log the error\n try {\n const url = `${HUBTYPE_API_URL}/external/v2/conversational_apps/${botId}/track_llm_runs/`\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.authToken}`,\n }\n await axios.post(url, data, { headers })\n } catch (error) {\n console.error('Failed to track LLM runs:', error)\n }\n }\n\n private formatMessage(message: HubtypeMessage): AgenticInputMessage {\n if (message.role === 'user') {\n return {\n content: message.content,\n role: 'user',\n }\n } else if (message.role === 'assistant') {\n return {\n role: 'assistant',\n content: [\n {\n type: 'output_text',\n text: message.content,\n },\n ],\n status: 'completed',\n }\n } else {\n throw new Error('Invalid message role')\n }\n }\n}\n"],"names":["axios","HUBTYPE_API_URL","HubtypeApiClient","query","sourceIds","url","headers","params","response","chunks","chunk","maxMemoryLength","previousHubtypeMessages","localStorageKey","localBotonicState","globalThis","botonicState","JSON","messages","filteredMessages","message","resultMessages","botContext","options","conversation_id","truncated","formattedMessages","error","console","Error","assistantMessage","tc","toolMessage","botId","data","authToken"],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- var types_TrackProductName = /*#__PURE__*/ function(TrackProductName) {
2
- TrackProductName["AI_AGENT"] = "ai_agent";
3
- return TrackProductName;
4
- }({});
5
- var types_TrackFeature = /*#__PURE__*/ function(TrackFeature) {
6
- TrackFeature["AI_AGENT_RUN"] = "ai_agent_run";
7
- TrackFeature["AI_AGENT_GUARDRAIL"] = "ai_agent_guardrail";
8
- return TrackFeature;
9
- }({});
10
-
11
- export { types_TrackFeature as TrackFeature, types_TrackProductName as TrackProductName };
12
-
13
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services/types.js","sources":["../../src/services/types.ts"],"sourcesContent":["import type { HubtypeAssistantMessage, HubtypeUserMessage } from '@botonic/core'\nimport type { AgenticInputMessage } from '../types'\n\nexport enum TrackProductName {\n AI_AGENT = 'ai_agent',\n}\n\nexport enum TrackFeature {\n AI_AGENT_RUN = 'ai_agent_run',\n AI_AGENT_GUARDRAIL = 'ai_agent_guardrail',\n}\n\nexport interface LlmRunData {\n inference_id: string\n is_test: boolean\n product_name: string\n deployment_name: string\n model_name: string\n feature: string\n api_version?: string\n num_prompt_tokens: number\n num_completion_tokens: number\n duration_in_milliseconds: number\n temperature: number\n error: string | null\n}\n\nexport interface TrackLlmRunsData {\n llm_runs: LlmRunData[]\n}\n\nexport type HubtypeMessage = HubtypeAssistantMessage | HubtypeUserMessage\n\n// V2 API Types\ninterface HubtypeToolCall {\n id: string\n type: 'function'\n function: {\n name: string\n arguments: string\n }\n}\n\ninterface HubtypeUserMessageV2 {\n role: 'user'\n content: string | null\n}\n\nexport interface HubtypeAssistantMessageV2 {\n role: 'assistant'\n content: string | null\n tool_calls?: HubtypeToolCall[] | null\n}\n\nexport interface HubtypeToolMessageV2 {\n role: 'tool'\n content: string | null\n tool_call_id: string\n}\n\ninterface HubtypeSystemMessageV2 {\n role: 'system'\n content: string | null\n}\n\nexport type HubtypeMessageV2 =\n | HubtypeUserMessageV2\n | HubtypeAssistantMessageV2\n | HubtypeToolMessageV2\n | HubtypeSystemMessageV2\n\nexport interface MessageHistoryResponseV2 {\n messages: HubtypeMessageV2[]\n conversation_id: string | null\n truncated: boolean\n}\n\nexport interface GetMessagesV2Result {\n messages: AgenticInputMessage[]\n conversationId: string | null\n truncated: boolean\n}\n\nexport interface MessageHistoryV2Params {\n last_message_id: string\n max_messages?: number\n include_tool_calls?: boolean\n max_full_tool_results?: number\n debug_mode?: boolean\n}\n"],"names":["TrackProductName","TrackFeature"],"mappings":"AAGO,IAAKA,sBAAgBA,0BAAhBA;;WAAAA;MAEX;AAEM,IAAKC,kBAAYA,0BAAZA;;;WAAAA;MAGX"}
@@ -1,21 +0,0 @@
1
- import { OutputMessageType } from "@botonic/core";
2
- import { z } from "zod";
3
-
4
-
5
-
6
-
7
-
8
- const BotExecutorSchema = z.object({
9
- type: z.literal(OutputMessageType.BotExecutor),
10
- content: z.object({
11
- text: z.string(),
12
- buttons: z.array(z.object({
13
- text: z.string(),
14
- payload: z.string()
15
- }))
16
- })
17
- }).describe('A text message with buttons to allow the bot to execute a specific action. Use it only when asked explicitly in the prompt');
18
-
19
- export { BotExecutorSchema };
20
-
21
- //# sourceMappingURL=bot-executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"structured-output/bot-executor.js","sources":["../../src/structured-output/bot-executor.ts"],"sourcesContent":["import { type BotExecutorMessage, OutputMessageType } from '@botonic/core'\nimport { z } from 'zod'\n\nexport type { BotExecutorMessage }\n\nexport const BotExecutorSchema = z\n .object({\n type: z.literal(OutputMessageType.BotExecutor),\n content: z.object({\n text: z.string(),\n buttons: z.array(\n z.object({\n text: z.string(),\n payload: z.string(),\n })\n ),\n }),\n })\n .describe(\n 'A text message with buttons to allow the bot to execute a specific action. Use it only when asked explicitly in the prompt'\n )\n"],"names":["OutputMessageType","z","BotExecutorSchema"],"mappings":";;;;;AAA0E;AACnD;AAIhB,MAAME,iBAAiBA,GAAGD,QACxB,CAAC;IACN,MAAMA,SAAS,CAACD,6BAA6B;IAC7C,SAASC,QAAQ,CAAC;QAChB,MAAMA,QAAQ;QACd,SAASA,OAAO,CACdA,QAAQ,CAAC;YACP,MAAMA,QAAQ;YACd,SAASA,QAAQ;QACnB;IAEJ;AACF,GACC,QAAQ,CACP,8HACD"}
@@ -1,26 +0,0 @@
1
- import { OutputMessageType } from "@botonic/core";
2
- import { z } from "zod";
3
-
4
-
5
-
6
-
7
-
8
- const CarouselSchema = z.object({
9
- type: z.literal(OutputMessageType.Carousel),
10
- content: z.object({
11
- text: z.string().nullable().optional(),
12
- elements: z.array(z.object({
13
- title: z.string(),
14
- subtitle: z.string(),
15
- image: z.string(),
16
- button: z.object({
17
- text: z.string(),
18
- url: z.string().nullable().optional()
19
- })
20
- }))
21
- })
22
- }).describe('A carousel message containing a list of elements');
23
-
24
- export { CarouselSchema };
25
-
26
- //# sourceMappingURL=carousel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"structured-output/carousel.js","sources":["../../src/structured-output/carousel.ts"],"sourcesContent":["import { type CarouselMessage, OutputMessageType } from '@botonic/core'\nimport { z } from 'zod'\n\nexport type { CarouselMessage }\n\nexport const CarouselSchema = z\n .object({\n type: z.literal(OutputMessageType.Carousel),\n content: z.object({\n text: z.string().nullable().optional(),\n elements: z.array(\n z.object({\n title: z.string(),\n subtitle: z.string(),\n image: z.string(),\n button: z.object({\n text: z.string(),\n url: z.string().nullable().optional(),\n }),\n })\n ),\n }),\n })\n .describe('A carousel message containing a list of elements')\n"],"names":["OutputMessageType","z","CarouselSchema"],"mappings":";;;;;AAAuE;AAChD;AAIhB,MAAME,cAAcA,GAAGD,QACrB,CAAC;IACN,MAAMA,SAAS,CAACD,0BAA0B;IAC1C,SAASC,QAAQ,CAAC;QAChB,MAAMA,QAAQ,GAAG,QAAQ,GAAG,QAAQ;QACpC,UAAUA,OAAO,CACfA,QAAQ,CAAC;YACP,OAAOA,QAAQ;YACf,UAAUA,QAAQ;YAClB,OAAOA,QAAQ;YACf,QAAQA,QAAQ,CAAC;gBACf,MAAMA,QAAQ;gBACd,KAAKA,QAAQ,GAAG,QAAQ,GAAG,QAAQ;YACrC;QACF;IAEJ;AACF,GACC,QAAQ,CAAC,oDAAmD"}
@@ -1,14 +0,0 @@
1
- import { OutputMessageType } from "@botonic/core";
2
- import { z } from "zod";
3
-
4
-
5
-
6
-
7
-
8
- const ExitSchema = z.object({
9
- type: z.literal(OutputMessageType.Exit)
10
- }).describe('An exit message. This message should only be used to exit the agent due to out of context or the user asking to exit the conversation');
11
-
12
- export { ExitSchema };
13
-
14
- //# sourceMappingURL=exit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"structured-output/exit.js","sources":["../../src/structured-output/exit.ts"],"sourcesContent":["import { type ExitMessage, OutputMessageType } from '@botonic/core'\nimport { z } from 'zod'\n\nexport type { ExitMessage }\n\nexport const ExitSchema = z\n .object({\n type: z.literal(OutputMessageType.Exit),\n })\n .describe(\n 'An exit message. This message should only be used to exit the agent due to out of context or the user asking to exit the conversation'\n )\n"],"names":["OutputMessageType","z","ExitSchema"],"mappings":";;;;;AAAmE;AAC5C;AAIhB,MAAME,UAAUA,GAAGD,QACjB,CAAC;IACN,MAAMA,SAAS,CAACD,sBAAsB;AACxC,GACC,QAAQ,CACP,yIACD"}
@@ -1,59 +0,0 @@
1
- import { z } from "zod";
2
- import { BotExecutorSchema } from "./bot-executor.js";
3
- import { CarouselSchema } from "./carousel.js";
4
- import { ExitSchema } from "./exit.js";
5
- import { RequestContactInfoSchema } from "./request-contact-info.js";
6
- import { TextSchema } from "./text.js";
7
- import { TextWithButtonsSchema } from "./text-with-buttons.js";
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
- const baseMessageSchemas = [
24
- TextSchema,
25
- TextWithButtonsSchema,
26
- CarouselSchema,
27
- ExitSchema,
28
- BotExecutorSchema,
29
- RequestContactInfoSchema
30
- ];
31
- const OutputSchema = z.object({
32
- messages: z.array(z.union(baseMessageSchemas))
33
- }).describe('The messages to be sent to the user');
34
- function getOutputSchema(externalOutputMessagesSchemas) {
35
- return z.object({
36
- messages: z.array(z.union([
37
- ...baseMessageSchemas,
38
- ...externalOutputMessagesSchemas
39
- ]))
40
- });
41
- }
42
- function getOutputInstructions() {
43
- const example = {
44
- messages: [
45
- {
46
- type: 'text',
47
- content: {
48
- text: 'Hello, how can I help you today?'
49
- }
50
- }
51
- ]
52
- };
53
- const output = `Return a JSON that follows the output schema provided. Never return multiple output schemas concatenated by a line break.\n<example>\n${JSON.stringify(example)}\n</example>`;
54
- return `<output>\n${output}\n</output>`;
55
- }
56
-
57
- export { OutputSchema, getOutputInstructions, getOutputSchema };
58
-
59
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"structured-output/index.js","sources":["../../src/structured-output/index.ts"],"sourcesContent":["import type { OutputMessage } from '@botonic/core'\nimport { z } from 'zod'\nimport { BotExecutorSchema } from './bot-executor'\nimport { CarouselSchema } from './carousel'\nimport { ExitSchema } from './exit'\nimport { RequestContactInfoSchema } from './request-contact-info'\nimport { TextSchema } from './text'\nimport { TextWithButtonsSchema } from './text-with-buttons'\n\nexport interface Output {\n messages: OutputMessage[]\n}\n\nconst baseMessageSchemas = [\n TextSchema,\n TextWithButtonsSchema,\n CarouselSchema,\n ExitSchema,\n BotExecutorSchema,\n RequestContactInfoSchema,\n] as const\nexport const OutputSchema = z\n .object({\n messages: z.array(z.union(baseMessageSchemas)),\n })\n .describe('The messages to be sent to the user')\n\nexport function getOutputSchema(\n externalOutputMessagesSchemas: z.ZodObject<any>[]\n) {\n return z.object({\n messages: z.array(\n z.union([...baseMessageSchemas, ...externalOutputMessagesSchemas])\n ),\n })\n}\n\nexport function getOutputInstructions(): string {\n const example = {\n messages: [\n {\n type: 'text',\n content: {\n text: 'Hello, how can I help you today?',\n },\n },\n ],\n }\n const output = `Return a JSON that follows the output schema provided. Never return multiple output schemas concatenated by a line break.\\n<example>\\n${JSON.stringify(example)}\\n</example>`\n return `<output>\\n${output}\\n</output>`\n}\n"],"names":["z","BotExecutorSchema","CarouselSchema","ExitSchema","RequestContactInfoSchema","TextSchema","TextWithButtonsSchema","baseMessageSchemas","OutputSchema","getOutputSchema","externalOutputMessagesSchemas","getOutputInstructions","example","output","JSON"],"mappings":";;;;;;;;;;;;;;;AACuB;AAC2B;AACP;AACR;AAC8B;AAC9B;AACwB;AAM3D,MAAMO,kBAAkBA,GAAG;IACzBF,UAAUA;IACVC,qBAAqBA;IACrBJ,cAAcA;IACdC,UAAUA;IACVF,iBAAiBA;IACjBG,wBAAwBA;CACzB;AACM,MAAMI,YAAYA,GAAGR,QACnB,CAAC;IACN,UAAUA,OAAO,CAACA,OAAO,CAACO,kBAAkBA;AAC9C,GACC,QAAQ,CAAC,uCAAsC;AAE3C,SAASE,eAAeA,CAC7BC,6BAAiD;IAEjD,OAAOV,QAAQ,CAAC;QACd,UAAUA,OAAO,CACfA,OAAO,CAAC;eAAIO,kBAAkBA;eAAKG;SAA8B;IAErE;AACF;AAEO,SAASC,qBAAqBA;IACnC,MAAMC,UAAU;QACd,UAAU;YACR;gBACE,MAAM;gBACN,SAAS;oBACP,MAAM;gBACR;YACF;SACD;IACH;IACA,MAAMC,SAAS,CAAC,sIAAsI,EAAEC,KAAK,SAAS,CAACF,SAAS,YAAY,CAAC;IAC7L,OAAO,CAAC,UAAU,EAAEC,OAAO,WAAW,CAAC;AACzC"}