@elizaos/plugin-elizacloud 2.0.0-beta.1 → 2.0.11-beta.7

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 (285) hide show
  1. package/README.md +20 -44
  2. package/auto-enable.ts +10 -5
  3. package/dist/browser/index.browser.js +2 -2
  4. package/dist/browser/index.browser.js.map +4 -4
  5. package/dist/cjs/index.node.cjs +2874 -5915
  6. package/dist/cjs/index.node.js.map +47 -116
  7. package/dist/cloud/auth-service-types.d.ts +8 -0
  8. package/dist/cloud/auth-service-types.d.ts.map +1 -0
  9. package/dist/cloud/auth-service-types.js +36 -0
  10. package/dist/cloud/auth-service-types.js.map +10 -0
  11. package/dist/cloud/auth.js +4 -51
  12. package/dist/cloud/auth.js.map +4 -4
  13. package/dist/cloud/base-url.d.ts +6 -2
  14. package/dist/cloud/base-url.d.ts.map +1 -1
  15. package/dist/cloud/base-url.js +3 -51
  16. package/dist/cloud/base-url.js.map +3 -3
  17. package/dist/cloud/bridge-client.d.ts +3 -3
  18. package/dist/cloud/bridge-client.d.ts.map +1 -1
  19. package/dist/cloud/bridge-client.js +3 -51
  20. package/dist/cloud/bridge-client.js.map +3 -3
  21. package/dist/cloud/clack-observer.d.ts +35 -0
  22. package/dist/cloud/clack-observer.d.ts.map +1 -0
  23. package/dist/cloud/clack-observer.js +143 -0
  24. package/dist/cloud/clack-observer.js.map +10 -0
  25. package/dist/cloud/cloud-manager.js +45 -92
  26. package/dist/cloud/cloud-manager.js.map +6 -6
  27. package/dist/cloud/cloud-wallet.js +2 -4835
  28. package/dist/cloud/cloud-wallet.js.map +3 -82
  29. package/dist/cloud/duffel-client.d.ts +181 -0
  30. package/dist/cloud/duffel-client.d.ts.map +1 -0
  31. package/dist/cloud/duffel-client.js +506 -0
  32. package/dist/cloud/duffel-client.js.map +11 -0
  33. package/dist/cloud/index.d.ts +6 -0
  34. package/dist/cloud/index.d.ts.map +1 -1
  35. package/dist/cloud/index.js +1782 -1
  36. package/dist/cloud/index.js.map +18 -3
  37. package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
  38. package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
  39. package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
  40. package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
  41. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
  42. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
  43. package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
  44. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
  45. package/dist/cloud/managed-payment-clients.d.ts +166 -0
  46. package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
  47. package/dist/cloud/managed-payment-clients.js +238 -0
  48. package/dist/cloud/managed-payment-clients.js.map +11 -0
  49. package/dist/cloud/null-observer.d.ts +35 -0
  50. package/dist/cloud/null-observer.d.ts.map +1 -0
  51. package/dist/cloud/null-observer.js +45 -0
  52. package/dist/cloud/null-observer.js.map +10 -0
  53. package/dist/cloud/setup-observer.d.ts +98 -0
  54. package/dist/cloud/setup-observer.d.ts.map +1 -0
  55. package/dist/cloud/setup-observer.js +2 -0
  56. package/dist/cloud/setup-observer.js.map +9 -0
  57. package/dist/cloud/validate-url.d.ts.map +1 -1
  58. package/dist/cloud/validate-url.js +2 -1
  59. package/dist/cloud/validate-url.js.map +3 -3
  60. package/dist/cloud/x402-payment-handler.d.ts +85 -0
  61. package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
  62. package/dist/cloud/x402-payment-handler.js +119 -0
  63. package/dist/cloud/x402-payment-handler.js.map +10 -0
  64. package/dist/cloud-setup.d.ts +36 -0
  65. package/dist/cloud-setup.d.ts.map +1 -0
  66. package/dist/{onboarding.js → cloud-setup.js} +139 -139
  67. package/dist/cloud-setup.js.map +14 -0
  68. package/dist/cloud-voice-catalog.d.ts +65 -0
  69. package/dist/cloud-voice-catalog.d.ts.map +1 -0
  70. package/dist/cloud-voice-catalog.js +278 -0
  71. package/dist/cloud-voice-catalog.js.map +12 -0
  72. package/dist/index.browser.d.ts +11 -0
  73. package/dist/index.browser.d.ts.map +1 -1
  74. package/dist/index.d.ts +7 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +5416 -8405
  77. package/dist/index.js.map +48 -116
  78. package/dist/index.node.d.ts +8 -1
  79. package/dist/index.node.d.ts.map +1 -1
  80. package/dist/init.js +17 -4
  81. package/dist/init.js.map +4 -4
  82. package/dist/lib/cloud-connection.d.ts +0 -1
  83. package/dist/lib/cloud-connection.d.ts.map +1 -1
  84. package/dist/lib/cloud-connection.js +14 -91
  85. package/dist/lib/cloud-connection.js.map +7 -7
  86. package/dist/lib/cloud-secrets.d.ts +5 -18
  87. package/dist/lib/cloud-secrets.d.ts.map +1 -1
  88. package/dist/lib/cloud-secrets.js +8 -36
  89. package/dist/lib/cloud-secrets.js.map +3 -3
  90. package/dist/lib/config-like.d.ts +1 -1
  91. package/dist/lib/config-like.d.ts.map +1 -1
  92. package/dist/lib/config-like.js +3 -3
  93. package/dist/lib/config-like.js.map +3 -3
  94. package/dist/lib/credential-type-map.d.ts +1 -1
  95. package/dist/lib/credential-type-map.js.map +1 -1
  96. package/dist/lib/http.d.ts +0 -11
  97. package/dist/lib/http.d.ts.map +1 -1
  98. package/dist/lib/http.js.map +2 -2
  99. package/dist/lib/server-cloud-tts.d.ts +12 -25
  100. package/dist/lib/server-cloud-tts.d.ts.map +1 -1
  101. package/dist/lib/server-cloud-tts.js +31 -329
  102. package/dist/lib/server-cloud-tts.js.map +4 -7
  103. package/dist/lib/tts-debug.d.ts +5 -3
  104. package/dist/lib/tts-debug.d.ts.map +1 -1
  105. package/dist/lib/tts-debug.js +1 -34
  106. package/dist/lib/tts-debug.js.map +3 -4
  107. package/dist/models/embeddings.d.ts.map +1 -1
  108. package/dist/models/embeddings.js +79 -69
  109. package/dist/models/embeddings.js.map +6 -6
  110. package/dist/models/image.d.ts.map +1 -1
  111. package/dist/models/image.js +42 -15
  112. package/dist/models/image.js.map +6 -6
  113. package/dist/models/index.js +676 -166
  114. package/dist/models/index.js.map +11 -12
  115. package/dist/models/research.d.ts.map +1 -1
  116. package/dist/models/research.js +24 -7
  117. package/dist/models/research.js.map +6 -6
  118. package/dist/models/speech.d.ts +61 -3
  119. package/dist/models/speech.d.ts.map +1 -1
  120. package/dist/models/speech.js +173 -17
  121. package/dist/models/speech.js.map +5 -5
  122. package/dist/models/text.d.ts +106 -1
  123. package/dist/models/text.d.ts.map +1 -1
  124. package/dist/models/text.js +452 -82
  125. package/dist/models/text.js.map +7 -8
  126. package/dist/models/tokenization.d.ts.map +1 -1
  127. package/dist/models/tokenization.js.map +2 -2
  128. package/dist/models/transcription.d.ts.map +1 -1
  129. package/dist/models/transcription.js +20 -6
  130. package/dist/models/transcription.js.map +5 -5
  131. package/dist/node/index.node.js +2828 -5838
  132. package/dist/node/index.node.js.map +47 -116
  133. package/dist/plugin.d.ts.map +1 -1
  134. package/dist/plugin.js +376 -5050
  135. package/dist/plugin.js.map +16 -92
  136. package/dist/providers/openai.js +11 -2
  137. package/dist/providers/openai.js.map +3 -3
  138. package/dist/register-routes.js +376 -5050
  139. package/dist/register-routes.js.map +16 -92
  140. package/dist/routes/cloud-billing-routes.d.ts.map +1 -1
  141. package/dist/routes/cloud-billing-routes.js +17 -60
  142. package/dist/routes/cloud-billing-routes.js.map +8 -7
  143. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  144. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  145. package/dist/routes/cloud-coding-container-routes.js +214 -0
  146. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  147. package/dist/routes/cloud-compat-routes.d.ts.map +1 -1
  148. package/dist/routes/cloud-compat-routes.js +17 -60
  149. package/dist/routes/cloud-compat-routes.js.map +8 -7
  150. package/dist/routes/cloud-features-routes.js +2 -2
  151. package/dist/routes/cloud-features-routes.js.map +4 -4
  152. package/dist/routes/cloud-relay-routes.d.ts +2 -1
  153. package/dist/routes/cloud-relay-routes.d.ts.map +1 -1
  154. package/dist/routes/cloud-relay-routes.js +84 -2
  155. package/dist/routes/cloud-relay-routes.js.map +5 -4
  156. package/dist/routes/cloud-routes-autonomous.d.ts +3 -4
  157. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -1
  158. package/dist/routes/cloud-routes-autonomous.js +11 -4893
  159. package/dist/routes/cloud-routes-autonomous.js.map +8 -87
  160. package/dist/routes/cloud-routes.d.ts +2 -2
  161. package/dist/routes/cloud-routes.d.ts.map +1 -1
  162. package/dist/routes/cloud-routes.js +343 -5058
  163. package/dist/routes/cloud-routes.js.map +13 -90
  164. package/dist/routes/cloud-status-routes-autonomous.d.ts +1 -2
  165. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -1
  166. package/dist/routes/cloud-status-routes-autonomous.js +4 -51
  167. package/dist/routes/cloud-status-routes-autonomous.js.map +5 -5
  168. package/dist/routes/cloud-status-routes.js +14 -90
  169. package/dist/routes/cloud-status-routes.js.map +7 -7
  170. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  171. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  172. package/dist/routes/home-remote-runner-access-url.js +91 -0
  173. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  174. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  175. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  176. package/dist/routes/travel-provider-relay-routes.js +358 -0
  177. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  178. package/dist/services/cloud-auth.d.ts +1 -1
  179. package/dist/services/cloud-auth.d.ts.map +1 -1
  180. package/dist/services/cloud-auth.js +7 -2
  181. package/dist/services/cloud-auth.js.map +4 -4
  182. package/dist/services/cloud-backup.js.map +2 -2
  183. package/dist/services/cloud-bootstrap.d.ts.map +1 -1
  184. package/dist/services/cloud-bootstrap.js.map +2 -2
  185. package/dist/services/cloud-bridge.js.map +3 -3
  186. package/dist/services/cloud-container.d.ts +5 -1
  187. package/dist/services/cloud-container.d.ts.map +1 -1
  188. package/dist/services/cloud-container.js +52 -1
  189. package/dist/services/cloud-container.js.map +4 -4
  190. package/dist/services/cloud-credential-provider.js.map +2 -2
  191. package/dist/services/cloud-model-registry.js.map +2 -2
  192. package/dist/types/cloud.d.ts +1 -0
  193. package/dist/types/cloud.d.ts.map +1 -1
  194. package/dist/types/cloud.js.map +2 -2
  195. package/dist/types/index.d.ts +1 -1
  196. package/dist/types/index.d.ts.map +1 -1
  197. package/dist/utils/cloud-sdk/client.d.ts.map +1 -1
  198. package/dist/utils/cloud-sdk/client.js +136 -4
  199. package/dist/utils/cloud-sdk/client.js.map +5 -5
  200. package/dist/utils/cloud-sdk/http.js.map +1 -1
  201. package/dist/utils/cloud-sdk/public-routes.d.ts +186 -0
  202. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -1
  203. package/dist/utils/cloud-sdk/public-routes.js +99 -1
  204. package/dist/utils/cloud-sdk/public-routes.js.map +3 -3
  205. package/dist/utils/cloud-sdk/types.d.ts +0 -2
  206. package/dist/utils/cloud-sdk/types.d.ts.map +1 -1
  207. package/dist/utils/cloud-sdk/types.js.map +1 -1
  208. package/dist/utils/config.d.ts +10 -1
  209. package/dist/utils/config.d.ts.map +1 -1
  210. package/dist/utils/config.js +12 -2
  211. package/dist/utils/config.js.map +3 -3
  212. package/dist/utils/events.d.ts +23 -2
  213. package/dist/utils/events.d.ts.map +1 -1
  214. package/dist/utils/events.js +5 -3
  215. package/dist/utils/events.js.map +3 -3
  216. package/dist/utils/sdk-client.d.ts.map +1 -1
  217. package/dist/utils/sdk-client.js +17 -4
  218. package/dist/utils/sdk-client.js.map +4 -4
  219. package/dist/utils/waifu-metering.d.ts +108 -0
  220. package/dist/utils/waifu-metering.d.ts.map +1 -0
  221. package/dist/utils/waifu-metering.js +166 -0
  222. package/dist/utils/waifu-metering.js.map +10 -0
  223. package/package.json +51 -22
  224. package/src/cloud/auth-service-types.ts +24 -0
  225. package/src/cloud/base-url.ts +6 -62
  226. package/src/cloud/clack-observer.ts +189 -0
  227. package/src/cloud/duffel-client.ts +847 -0
  228. package/src/cloud/index.ts +10 -0
  229. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  230. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  231. package/src/cloud/managed-payment-clients.ts +374 -0
  232. package/src/cloud/null-observer.ts +45 -0
  233. package/src/cloud/setup-observer.ts +125 -0
  234. package/src/cloud/validate-url.ts +7 -1
  235. package/src/cloud/x402-payment-handler.ts +215 -0
  236. package/src/cloud-setup.ts +531 -0
  237. package/src/cloud-voice-catalog.test.ts +254 -0
  238. package/src/cloud-voice-catalog.ts +246 -0
  239. package/src/index.browser.ts +29 -0
  240. package/src/index.node.ts +31 -1
  241. package/src/index.ts +76 -4
  242. package/src/lib/cloud-connection.ts +2 -4
  243. package/src/lib/cloud-secrets.ts +10 -54
  244. package/src/lib/config-like.ts +1 -1
  245. package/src/lib/credential-type-map.ts +2 -2
  246. package/src/lib/http.ts +0 -17
  247. package/src/lib/server-cloud-tts.ts +33 -341
  248. package/src/lib/tts-debug.ts +5 -34
  249. package/src/models/embeddings.ts +140 -76
  250. package/src/models/image.ts +29 -14
  251. package/src/models/research.ts +11 -1
  252. package/src/models/speech.ts +269 -23
  253. package/src/models/text.ts +704 -110
  254. package/src/models/tokenization.ts +2 -2
  255. package/src/models/transcription.ts +7 -3
  256. package/src/plugin.ts +38 -0
  257. package/src/routes/cloud-billing-routes.ts +4 -14
  258. package/src/routes/cloud-coding-container-routes.ts +198 -0
  259. package/src/routes/cloud-compat-routes.ts +4 -14
  260. package/src/routes/cloud-features-routes.ts +1 -1
  261. package/src/routes/cloud-relay-routes.ts +47 -1
  262. package/src/routes/cloud-routes-autonomous.ts +7 -10
  263. package/src/routes/cloud-routes.ts +68 -7
  264. package/src/routes/cloud-status-routes-autonomous.ts +6 -2
  265. package/src/routes/home-remote-runner-access-url.ts +83 -0
  266. package/src/routes/travel-provider-relay-routes.ts +193 -0
  267. package/src/services/cloud-auth.ts +9 -2
  268. package/src/services/cloud-bootstrap.ts +1 -3
  269. package/src/services/cloud-bridge.ts +1 -1
  270. package/src/services/cloud-container.ts +93 -0
  271. package/src/services/cloud-credential-provider.ts +1 -1
  272. package/src/services/cloud-model-registry.ts +1 -1
  273. package/src/types/cloud.ts +22 -0
  274. package/src/types/index.ts +19 -0
  275. package/src/utils/cloud-sdk/client.ts +42 -3
  276. package/src/utils/cloud-sdk/public-routes.ts +168 -0
  277. package/src/utils/cloud-sdk/types.ts +0 -2
  278. package/src/utils/config.ts +20 -1
  279. package/src/utils/events.ts +30 -2
  280. package/src/utils/sdk-client.ts +5 -1
  281. package/src/utils/waifu-metering.ts +302 -0
  282. package/dist/onboarding.d.ts +0 -35
  283. package/dist/onboarding.d.ts.map +0 -1
  284. package/dist/onboarding.js.map +0 -14
  285. package/src/onboarding.ts +0 -396
@@ -19,7 +19,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
19
  // src/utils/config.ts
20
20
  import { logger } from "@elizaos/core";
21
21
  import { DEFAULT_ELIZA_CLOUD_TEXT_MODEL } from "@elizaos/core";
22
- var DEFAULT_ELIZA_CLOUD_LARGE_MODEL = "deepseek/deepseek-v4-pro";
22
+ var DEFAULT_ELIZA_CLOUD_LARGE_MODEL = "zai-glm-4.7";
23
23
  function getEnvValue(key) {
24
24
  if (typeof process === "undefined") {
25
25
  return;
@@ -109,9 +109,18 @@ function getExperimentalTelemetry(runtime) {
109
109
  const setting = getSetting(runtime, "ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY", "false");
110
110
  return String(setting).toLowerCase() === "true";
111
111
  }
112
+ function resolveCloudTimeoutMs(envKey, defaultMs) {
113
+ const raw = typeof process !== "undefined" ? process.env[envKey] : undefined;
114
+ if (raw === undefined || raw.trim() === "")
115
+ return defaultMs;
116
+ const parsed = Number.parseInt(raw, 10);
117
+ if (!Number.isFinite(parsed))
118
+ return defaultMs;
119
+ return parsed <= 0 ? undefined : parsed;
120
+ }
112
121
 
113
122
  // src/utils/sdk-client.ts
114
- import { CloudApiClient, ElizaCloudClient } from "@elizaos/cloud-sdk";
123
+ import { ElizaCloudClient } from "@elizaos/cloud-sdk";
115
124
  function trimTrailingSlash(value) {
116
125
  return value.replace(/\/+$/, "");
117
126
  }
@@ -126,7 +135,11 @@ function apiKeyForRuntime(runtime, embedding = false) {
126
135
  }
127
136
  function createCloudApiClient(runtime, embedding = false) {
128
137
  const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);
129
- return new CloudApiClient(trimTrailingSlash(baseUrl), apiKeyForRuntime(runtime, embedding));
138
+ return new ElizaCloudClient({
139
+ apiBaseUrl: trimTrailingSlash(baseUrl),
140
+ baseUrl: apiBaseToSiteBaseUrl(baseUrl),
141
+ apiKey: apiKeyForRuntime(runtime, embedding)
142
+ }).v1;
130
143
  }
131
144
  function createElizaCloudClient(runtime) {
132
145
  const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));
@@ -141,7 +154,7 @@ function createElizaCloudClient(runtime) {
141
154
  import {
142
155
  EventType
143
156
  } from "@elizaos/core";
144
- function emitModelUsageEvent(runtime, type, _prompt, usage) {
157
+ function emitModelUsageEvent(runtime, type, _prompt, usage, meta = {}) {
145
158
  const inputTokens = Number(usage.inputTokens || 0);
146
159
  const outputTokens = Number(usage.outputTokens || 0);
147
160
  const totalTokens = Number(usage.totalTokens != null ? usage.totalTokens : inputTokens + outputTokens);
@@ -153,22 +166,13 @@ function emitModelUsageEvent(runtime, type, _prompt, usage) {
153
166
  prompt: inputTokens,
154
167
  completion: outputTokens,
155
168
  total: totalTokens
156
- }
169
+ },
170
+ ...meta.modelName ? { modelName: meta.modelName } : {},
171
+ ...typeof meta.costUsd === "number" && Number.isFinite(meta.costUsd) ? { costUsd: meta.costUsd } : {}
157
172
  };
158
173
  runtime.emitEvent(EventType.MODEL_USED, payload);
159
174
  }
160
175
 
161
- // src/providers/openai.ts
162
- import { createOpenAI } from "@ai-sdk/openai";
163
- function createOpenAIClient(runtime) {
164
- const baseURL = getBaseURL(runtime);
165
- const apiKey = getApiKey(runtime) ?? (isProxyMode(runtime) ? "eliza-proxy" : undefined);
166
- return createOpenAI({
167
- apiKey: apiKey ?? "",
168
- baseURL
169
- });
170
- }
171
-
172
176
  // src/utils/responses-output.ts
173
177
  function asRecord(value) {
174
178
  if (!value || typeof value !== "object" || Array.isArray(value)) {
@@ -254,8 +258,11 @@ import {
254
258
  buildCanonicalSystemPrompt,
255
259
  logger as logger2,
256
260
  ModelType,
261
+ recordInferenceSpan,
257
262
  renderChatMessagesForPrompt,
258
- resolveEffectiveSystemPrompt
263
+ resolveEffectiveSystemPrompt,
264
+ Semaphore,
265
+ timeInferenceSpan
259
266
  } from "@elizaos/core";
260
267
  var TEXT_NANO_MODEL_TYPE = ModelType.TEXT_NANO ?? "TEXT_NANO";
261
268
  var TEXT_MEDIUM_MODEL_TYPE = ModelType.TEXT_MEDIUM ?? "TEXT_MEDIUM";
@@ -264,6 +271,61 @@ var TEXT_LARGE_MODEL_TYPE = ModelType.TEXT_LARGE;
264
271
  var TEXT_MEGA_MODEL_TYPE = ModelType.TEXT_MEGA ?? "TEXT_MEGA";
265
272
  var RESPONSE_HANDLER_MODEL_TYPE = ModelType.RESPONSE_HANDLER ?? "RESPONSE_HANDLER";
266
273
  var ACTION_PLANNER_MODEL_TYPE = ModelType.ACTION_PLANNER ?? "ACTION_PLANNER";
274
+ var NATIVE_CONCURRENCY_ENV = "ELIZAOS_CLOUD_NATIVE_CONCURRENCY";
275
+ var DEFAULT_NATIVE_CONCURRENCY = 8;
276
+ var TEXT_TIMEOUT_ENV = "ELIZAOS_CLOUD_TEXT_TIMEOUT_MS";
277
+ var DEFAULT_TEXT_TIMEOUT_MS = 120000;
278
+ function resolveTextTimeoutMs() {
279
+ const raw = typeof process !== "undefined" ? process.env[TEXT_TIMEOUT_ENV] : undefined;
280
+ if (raw === undefined || raw.trim() === "")
281
+ return DEFAULT_TEXT_TIMEOUT_MS;
282
+ const parsed = Number.parseInt(raw, 10);
283
+ if (!Number.isFinite(parsed))
284
+ return DEFAULT_TEXT_TIMEOUT_MS;
285
+ return parsed <= 0 ? undefined : parsed;
286
+ }
287
+ var STREAMING_ENV = "ELIZAOS_CLOUD_STREAMING";
288
+ function resolveStreamingEnabled() {
289
+ const raw = typeof process !== "undefined" ? process.env[STREAMING_ENV] : undefined;
290
+ if (raw === undefined)
291
+ return true;
292
+ const v = raw.trim().toLowerCase();
293
+ return v !== "0" && v !== "false" && v !== "off";
294
+ }
295
+ function buildStreamAbortSignal(abortSignal, timeoutMs) {
296
+ const timeoutSig = typeof timeoutMs === "number" && timeoutMs > 0 ? AbortSignal.timeout(timeoutMs) : undefined;
297
+ if (abortSignal && timeoutSig)
298
+ return AbortSignal.any([abortSignal, timeoutSig]);
299
+ return abortSignal ?? timeoutSig;
300
+ }
301
+ var nativeChatLimiter = null;
302
+ function resolveNativeConcurrency() {
303
+ const raw = typeof process !== "undefined" ? process.env[NATIVE_CONCURRENCY_ENV] : undefined;
304
+ const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;
305
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_NATIVE_CONCURRENCY;
306
+ }
307
+ function getNativeChatLimiter() {
308
+ if (!nativeChatLimiter) {
309
+ nativeChatLimiter = new Semaphore(resolveNativeConcurrency());
310
+ }
311
+ return nativeChatLimiter;
312
+ }
313
+ async function withNativeChatLimit(fn, label = "native") {
314
+ const limiter = getNativeChatLimiter();
315
+ const waitStartedAt = Date.now();
316
+ await limiter.acquire();
317
+ recordInferenceSpan("cloud.semaphore-wait", Date.now() - waitStartedAt, {
318
+ route: label
319
+ });
320
+ try {
321
+ return await timeInferenceSpan(`cloud.http:${label}`, fn, { route: label });
322
+ } finally {
323
+ limiter.release();
324
+ }
325
+ }
326
+ function __resetNativeChatLimiterForTests() {
327
+ nativeChatLimiter = null;
328
+ }
267
329
  var REASONING_MODEL_PATTERNS = [
268
330
  "o1",
269
331
  "o3",
@@ -274,27 +336,51 @@ var REASONING_MODEL_PATTERNS = [
274
336
  "claude-opus-4-7",
275
337
  "gpt-5"
276
338
  ];
277
- var RESPONSES_ROUTED_PREFIXES = ["openai/", "anthropic/"];
278
- function buildUserContent(params) {
279
- const content = [{ type: "text", text: params.prompt ?? "" }];
280
- for (const attachment of params.attachments ?? []) {
281
- content.push({
282
- type: "file",
283
- data: attachment.data,
284
- mediaType: attachment.mediaType,
285
- ...attachment.filename ? { filename: attachment.filename } : {}
286
- });
339
+ var SPAN_SAMPLER_HONORING_MODEL_PREFIXES = [
340
+ "vast/eliza-1-",
341
+ "elizaos/eliza-1-",
342
+ "eliza-1-"
343
+ ];
344
+ function isSpanSamplerHonoringModel(modelName) {
345
+ const lower = modelName.toLowerCase();
346
+ return SPAN_SAMPLER_HONORING_MODEL_PREFIXES.some((prefix) => lower.startsWith(prefix));
347
+ }
348
+ function buildSpanSamplerHeader(plan) {
349
+ if (!plan || plan.overrides.length === 0)
350
+ return;
351
+ const overrides = plan.overrides.map((o) => {
352
+ const wire = {
353
+ span_index: o.spanIndex,
354
+ temperature: o.temperature
355
+ };
356
+ if (typeof o.topK === "number")
357
+ wire.top_k = o.topK;
358
+ if (typeof o.topP === "number")
359
+ wire.top_p = o.topP;
360
+ return wire;
361
+ });
362
+ const body = { overrides };
363
+ if (plan.strict === true)
364
+ body.strict = true;
365
+ return JSON.stringify(body);
366
+ }
367
+ function extractCostUsd(usage, response) {
368
+ const fromBody = firstNumber(asRecord2(usage).cost_usd, asRecord2(usage).costUsd, asRecord2(usage).cost);
369
+ if (typeof fromBody === "number" && Number.isFinite(fromBody)) {
370
+ return fromBody;
371
+ }
372
+ const header = response?.headers?.get?.("X-Eliza-Cost-Usd");
373
+ if (header) {
374
+ const parsed = Number(header);
375
+ if (Number.isFinite(parsed))
376
+ return parsed;
287
377
  }
288
- return content;
378
+ return;
289
379
  }
290
380
  function isReasoningModel(modelName) {
291
381
  const lower = modelName.toLowerCase();
292
382
  return REASONING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));
293
383
  }
294
- function supportsStopSequences(modelName) {
295
- const lower = modelName.toLowerCase();
296
- return !RESPONSES_ROUTED_PREFIXES.some((prefix) => lower.startsWith(prefix));
297
- }
298
384
  function isRecord(value) {
299
385
  return typeof value === "object" && value !== null && !Array.isArray(value);
300
386
  }
@@ -371,26 +457,39 @@ function unwrapJsonSchema(value) {
371
457
  const record = asRecord2(value);
372
458
  return record.schema ?? record.jsonSchema ?? value;
373
459
  }
460
+ function normalizeNativeToolEntry(rawTool, fallbackName) {
461
+ const tool = asRecord2(rawTool);
462
+ const nested = asRecord2(tool.function);
463
+ const name = firstString(nested.name, tool.name, fallbackName);
464
+ if (!name) {
465
+ return;
466
+ }
467
+ const description = firstString(nested.description, tool.description);
468
+ const inputSchema = unwrapJsonSchema(nested.parameters ?? tool.inputSchema ?? tool.parameters ?? tool.schema ?? { type: "object" });
469
+ return {
470
+ type: "function",
471
+ function: {
472
+ name,
473
+ ...description ? { description } : {},
474
+ parameters: inputSchema
475
+ }
476
+ };
477
+ }
374
478
  function normalizeNativeTools(tools) {
375
479
  if (!tools) {
376
480
  return;
377
481
  }
378
482
  if (Array.isArray(tools)) {
379
- return tools;
483
+ const normalized2 = tools.map((tool) => normalizeNativeToolEntry(tool)).filter((tool) => tool !== undefined);
484
+ return normalized2.length > 0 ? normalized2 : undefined;
380
485
  }
381
486
  const toolSet = asRecord2(tools);
382
487
  const normalized = [];
383
488
  for (const [name, rawTool] of Object.entries(toolSet)) {
384
- const tool = asRecord2(rawTool);
385
- const inputSchema = unwrapJsonSchema(tool.inputSchema ?? tool.parameters ?? tool.schema ?? { type: "object" });
386
- normalized.push({
387
- type: "function",
388
- function: {
389
- name,
390
- ...typeof tool.description === "string" ? { description: tool.description } : {},
391
- parameters: inputSchema
392
- }
393
- });
489
+ const entry = normalizeNativeToolEntry(rawTool, name);
490
+ if (entry) {
491
+ normalized.push(entry);
492
+ }
394
493
  }
395
494
  return normalized.length > 0 ? normalized : undefined;
396
495
  }
@@ -616,16 +715,8 @@ function getModelNameForType(runtime, modelType) {
616
715
  }
617
716
  }
618
717
  function buildGenerateParams(runtime, modelType, params) {
619
- const paramsWithAttachments = params;
620
718
  const prompt = params.prompt ?? "";
621
- const maxTokens = params.maxTokens ?? 8192;
622
- const openai = createOpenAIClient(runtime);
623
719
  const modelName = getModelNameForType(runtime, modelType);
624
- const experimentalTelemetry = getExperimentalTelemetry(runtime);
625
- const userContent = (paramsWithAttachments.attachments?.length ?? 0) > 0 ? buildUserContent(paramsWithAttachments) : undefined;
626
- const model = openai.chat(modelName);
627
- const reasoning = isReasoningModel(modelName);
628
- const stopSequences = !reasoning && supportsStopSequences(modelName) && Array.isArray(params.stopSequences) && params.stopSequences.length > 0 ? params.stopSequences : undefined;
629
720
  const systemPrompt = resolveEffectiveSystemPrompt({
630
721
  params,
631
722
  fallback: buildCanonicalSystemPrompt({ character: runtime.character })
@@ -633,28 +724,24 @@ function buildGenerateParams(runtime, modelType, params) {
633
724
  const promptText = renderChatMessagesForPrompt(params.messages, {
634
725
  omitDuplicateSystem: systemPrompt
635
726
  }) ?? prompt;
636
- const generateParams = {
637
- model,
638
- ...userContent ? { messages: [{ role: "user", content: userContent }] } : { prompt: promptText },
639
- system: systemPrompt,
640
- ...stopSequences ? { stopSequences } : {},
641
- maxOutputTokens: maxTokens,
642
- experimental_telemetry: {
643
- isEnabled: experimentalTelemetry
644
- }
645
- };
646
- return { generateParams, modelName, modelType, prompt: promptText, systemPrompt };
727
+ return { modelName, modelType, prompt: promptText, systemPrompt };
647
728
  }
648
729
  async function generateTextWithModel(runtime, modelType, params) {
649
730
  const { modelName, prompt, systemPrompt } = buildGenerateParams(runtime, modelType, params);
650
731
  const paramsWithNative = params;
651
732
  logger2.debug(`[ELIZAOS_CLOUD] Generating text with ${modelType} model: ${modelName}`);
652
- if (params.stream) {
653
- logger2.debug("[ELIZAOS_CLOUD] Streaming text disabled for responses compatibility; falling back to buffered response.");
654
- }
733
+ const paramsStreaming = params;
734
+ const wantsStream = Boolean(paramsStreaming.stream) && paramsStreaming.streamStructured === true && resolveStreamingEnabled();
655
735
  logger2.log(`[ELIZAOS_CLOUD] Using ${modelType} model: ${modelName}`);
656
736
  logger2.log(prompt);
657
737
  if (hasNativeTransportOptions(paramsWithNative)) {
738
+ if (wantsStream) {
739
+ return streamNativeChatCompletion(runtime, modelType, paramsWithNative, {
740
+ modelName,
741
+ prompt,
742
+ systemPrompt
743
+ });
744
+ }
658
745
  const nativeResult = await generateNativeChatCompletion(runtime, modelType, paramsWithNative, {
659
746
  modelName,
660
747
  prompt,
@@ -682,13 +769,21 @@ async function generateTextWithModel(runtime, modelType, params) {
682
769
  if (!reasoning && typeof params.temperature === "number") {
683
770
  requestBody.temperature = params.temperature;
684
771
  }
685
- const response = await createCloudApiClient(runtime).requestRaw("POST", "/responses", {
686
- headers: {
687
- "X-Eliza-Llm-Purpose": getPurposeForModelType(modelType),
688
- "X-Eliza-Model-Type": modelType
689
- },
690
- json: requestBody
691
- });
772
+ const responsesHeaders = {
773
+ "X-Eliza-Llm-Purpose": getPurposeForModelType(modelType),
774
+ "X-Eliza-Model-Type": modelType
775
+ };
776
+ if (isSpanSamplerHonoringModel(modelName)) {
777
+ const samplerHeader = buildSpanSamplerHeader(params.spanSamplerPlan);
778
+ if (samplerHeader) {
779
+ responsesHeaders["x-eliza-span-samplers"] = samplerHeader;
780
+ }
781
+ }
782
+ const response = await withNativeChatLimit(() => createCloudApiClient(runtime).requestRaw("POST", "/responses", {
783
+ headers: responsesHeaders,
784
+ json: requestBody,
785
+ timeoutMs: resolveTextTimeoutMs()
786
+ }), "responses");
692
787
  const responseText = await response.text();
693
788
  let data = {};
694
789
  if (responseText) {
@@ -713,6 +808,12 @@ async function generateTextWithModel(runtime, modelType, params) {
713
808
  inputTokens: data.usage.input_tokens ?? 0,
714
809
  outputTokens: data.usage.output_tokens ?? 0,
715
810
  totalTokens: data.usage.total_tokens ?? 0
811
+ }, {
812
+ modelName: getModelNameForType(runtime, modelType),
813
+ ...(() => {
814
+ const costUsd = extractCostUsd(data.usage, response);
815
+ return typeof costUsd === "number" ? { costUsd } : {};
816
+ })()
716
817
  });
717
818
  }
718
819
  const text = extractResponsesOutputText(data);
@@ -723,13 +824,21 @@ async function generateTextWithModel(runtime, modelType, params) {
723
824
  }
724
825
  async function generateNativeChatCompletion(runtime, modelType, params, context) {
725
826
  const requestBody = buildNativeRequestBody(params, context.modelName, context.prompt, context.systemPrompt);
726
- const response = await createCloudApiClient(runtime).requestRaw("POST", "/chat/completions", {
727
- headers: {
728
- "X-Eliza-Llm-Purpose": getPurposeForModelType(modelType),
729
- "X-Eliza-Model-Type": modelType
730
- },
731
- json: requestBody
732
- });
827
+ const headers = {
828
+ "X-Eliza-Llm-Purpose": getPurposeForModelType(modelType),
829
+ "X-Eliza-Model-Type": modelType
830
+ };
831
+ if (isSpanSamplerHonoringModel(context.modelName)) {
832
+ const samplerHeader = buildSpanSamplerHeader(params.spanSamplerPlan);
833
+ if (samplerHeader) {
834
+ headers["x-eliza-span-samplers"] = samplerHeader;
835
+ }
836
+ }
837
+ const response = await withNativeChatLimit(() => createCloudApiClient(runtime).requestRaw("POST", "/chat/completions", {
838
+ headers,
839
+ json: requestBody,
840
+ timeoutMs: resolveTextTimeoutMs()
841
+ }), "chat/completions");
733
842
  const responseText = await response.text();
734
843
  let data = {};
735
844
  if (responseText) {
@@ -751,7 +860,13 @@ async function generateNativeChatCompletion(runtime, modelType, params, context)
751
860
  }
752
861
  const usage = convertNativeUsage(data.usage);
753
862
  if (usage) {
754
- emitModelUsageEvent(runtime, modelType, context.prompt, usage);
863
+ emitModelUsageEvent(runtime, modelType, context.prompt, usage, {
864
+ modelName: context.modelName,
865
+ ...(() => {
866
+ const costUsd = extractCostUsd(data.usage, response);
867
+ return typeof costUsd === "number" ? { costUsd } : {};
868
+ })()
869
+ });
755
870
  }
756
871
  const text = extractChatCompletionText(data);
757
872
  const toolCalls = extractNativeToolCalls(data);
@@ -769,6 +884,251 @@ async function generateNativeChatCompletion(runtime, modelType, params, context)
769
884
  }
770
885
  };
771
886
  }
887
+ function deferred() {
888
+ let resolve;
889
+ const promise = new Promise((r) => {
890
+ resolve = r;
891
+ });
892
+ return { promise, resolve };
893
+ }
894
+ async function* parseOpenAiSseStream(body) {
895
+ const reader = body.getReader();
896
+ const decoder = new TextDecoder;
897
+ let buffer = "";
898
+ const handle = (line) => {
899
+ const trimmed = line.trimStart();
900
+ if (!trimmed.startsWith("data:"))
901
+ return null;
902
+ const payload = trimmed.slice(5).trim();
903
+ if (payload === "")
904
+ return null;
905
+ if (payload === "[DONE]")
906
+ return "DONE";
907
+ try {
908
+ return JSON.parse(payload);
909
+ } catch {
910
+ return null;
911
+ }
912
+ };
913
+ try {
914
+ for (;; ) {
915
+ const { value, done } = await reader.read();
916
+ if (done)
917
+ break;
918
+ buffer += decoder.decode(value, { stream: true });
919
+ let nl;
920
+ while ((nl = buffer.indexOf(`
921
+ `)) >= 0) {
922
+ const line = buffer.slice(0, nl);
923
+ buffer = buffer.slice(nl + 1);
924
+ const frame = handle(line);
925
+ if (frame === "DONE")
926
+ return;
927
+ if (frame)
928
+ yield frame;
929
+ }
930
+ }
931
+ const tail = handle(buffer);
932
+ if (tail && tail !== "DONE")
933
+ yield tail;
934
+ } finally {
935
+ try {
936
+ await reader.cancel();
937
+ } catch {}
938
+ }
939
+ }
940
+ function accumulateToolCallDeltas(acc, deltas) {
941
+ if (!Array.isArray(deltas))
942
+ return;
943
+ for (const raw of deltas) {
944
+ const d = asRecord2(raw);
945
+ const index = typeof d.index === "number" ? d.index : 0;
946
+ const cur = acc.get(index) ?? { args: "" };
947
+ const id = firstString(d.id);
948
+ if (id)
949
+ cur.id = id;
950
+ const fn = recordAt(d, "function");
951
+ const name = firstString(fn.name);
952
+ if (name)
953
+ cur.name = name;
954
+ if (typeof fn.arguments === "string")
955
+ cur.args += fn.arguments;
956
+ acc.set(index, cur);
957
+ }
958
+ }
959
+ function finalizeStreamedToolCalls(acc) {
960
+ const out = [];
961
+ for (const [index, c] of [...acc.entries()].sort((a, b) => a[0] - b[0])) {
962
+ if (!c.name)
963
+ continue;
964
+ out.push({
965
+ type: "tool-call",
966
+ toolCallId: c.id ?? `call_${c.name}_${index}`,
967
+ toolName: c.name,
968
+ input: parseJsonIfPossible(c.args.trim() === "" ? "{}" : c.args)
969
+ });
970
+ }
971
+ return out;
972
+ }
973
+ async function streamNativeChatCompletion(runtime, modelType, params, context) {
974
+ const requestBody = buildNativeRequestBody(params, context.modelName, context.prompt, context.systemPrompt);
975
+ requestBody.stream = true;
976
+ requestBody.stream_options = { include_usage: true };
977
+ const headers = {
978
+ "X-Eliza-Llm-Purpose": getPurposeForModelType(modelType),
979
+ "X-Eliza-Model-Type": modelType
980
+ };
981
+ if (isSpanSamplerHonoringModel(context.modelName)) {
982
+ const samplerHeader = buildSpanSamplerHeader(params.spanSamplerPlan);
983
+ if (samplerHeader) {
984
+ headers["x-eliza-span-samplers"] = samplerHeader;
985
+ }
986
+ }
987
+ const abortSignal = params.signal;
988
+ const signal = buildStreamAbortSignal(abortSignal, resolveTextTimeoutMs());
989
+ const limiter = getNativeChatLimiter();
990
+ const waitStartedAt = Date.now();
991
+ await limiter.acquire();
992
+ recordInferenceSpan("cloud.semaphore-wait", Date.now() - waitStartedAt, {
993
+ route: "chat/completions:stream"
994
+ });
995
+ let permitReleased = false;
996
+ const releasePermit = () => {
997
+ if (!permitReleased) {
998
+ permitReleased = true;
999
+ limiter.release();
1000
+ }
1001
+ };
1002
+ let response;
1003
+ try {
1004
+ response = await createCloudApiClient(runtime).requestRaw("POST", "/chat/completions", {
1005
+ headers,
1006
+ json: requestBody,
1007
+ ...signal ? { signal } : {}
1008
+ });
1009
+ } catch (err) {
1010
+ releasePermit();
1011
+ throw err;
1012
+ }
1013
+ if (!response.ok) {
1014
+ let errorBody;
1015
+ try {
1016
+ const errText = await response.text();
1017
+ if (errText) {
1018
+ errorBody = JSON.parse(errText).error;
1019
+ }
1020
+ } catch {}
1021
+ releasePermit();
1022
+ const message = typeof errorBody?.message === "string" && errorBody.message.trim() ? errorBody.message.trim() : `elizaOS Cloud error ${response.status}`;
1023
+ const requestError = new Error(message);
1024
+ requestError.status = response.status;
1025
+ if (errorBody)
1026
+ requestError.error = errorBody;
1027
+ throw requestError;
1028
+ }
1029
+ const contentType = response.headers.get("content-type") ?? "";
1030
+ const isSse = contentType.includes("text/event-stream") && response.body !== null;
1031
+ if (!isSse) {
1032
+ const bufferedText = await response.text();
1033
+ releasePermit();
1034
+ let data = {};
1035
+ if (bufferedText) {
1036
+ try {
1037
+ data = JSON.parse(bufferedText);
1038
+ } catch (parseErr) {
1039
+ logger2.error(`[ELIZAOS_CLOUD] Failed to parse buffered chat completions JSON: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
1040
+ }
1041
+ }
1042
+ const text = extractChatCompletionText(data);
1043
+ const toolCalls = extractNativeToolCalls(data);
1044
+ const usage = convertNativeUsage(data.usage);
1045
+ if (usage) {
1046
+ emitModelUsageEvent(runtime, modelType, context.prompt, usage, {
1047
+ modelName: context.modelName,
1048
+ ...(() => {
1049
+ const costUsd = extractCostUsd(data.usage, response);
1050
+ return typeof costUsd === "number" ? { costUsd } : {};
1051
+ })()
1052
+ });
1053
+ }
1054
+ if (!text.trim() && toolCalls.length === 0) {
1055
+ throw new Error("elizaOS Cloud returned no text or tool calls");
1056
+ }
1057
+ async function* single() {
1058
+ if (text)
1059
+ yield text;
1060
+ }
1061
+ return {
1062
+ textStream: single(),
1063
+ text: Promise.resolve(text),
1064
+ usage: Promise.resolve(usage),
1065
+ finishReason: Promise.resolve(data.choices?.[0]?.finish_reason),
1066
+ toolCalls: Promise.resolve(toolCalls),
1067
+ providerMetadata: { modelName: context.modelName, usage: data.usage }
1068
+ };
1069
+ }
1070
+ const body = response.body;
1071
+ const toolAcc = new Map;
1072
+ let accumulated = "";
1073
+ let nativeUsage;
1074
+ let rawUsage;
1075
+ let finishReason;
1076
+ const textD = deferred();
1077
+ const usageD = deferred();
1078
+ const finishD = deferred();
1079
+ const toolCallsD = deferred();
1080
+ async function* generate() {
1081
+ try {
1082
+ for await (const frame of parseOpenAiSseStream(body)) {
1083
+ if (frame.error) {
1084
+ const message = asRecord2(frame.error).message;
1085
+ throw new Error(typeof message === "string" && message.trim() ? message.trim() : "elizaOS Cloud stream error");
1086
+ }
1087
+ const choices = Array.isArray(frame.choices) ? frame.choices : [];
1088
+ const choice = asRecord2(choices[0]);
1089
+ const delta = recordAt(choice, "delta");
1090
+ if (typeof delta.content === "string" && delta.content.length > 0) {
1091
+ accumulated += delta.content;
1092
+ yield delta.content;
1093
+ }
1094
+ if (delta.tool_calls) {
1095
+ accumulateToolCallDeltas(toolAcc, delta.tool_calls);
1096
+ }
1097
+ const fr = firstString(choice.finish_reason);
1098
+ if (fr)
1099
+ finishReason = fr;
1100
+ if (frame.usage) {
1101
+ rawUsage = frame.usage;
1102
+ nativeUsage = convertNativeUsage(frame.usage);
1103
+ }
1104
+ }
1105
+ } finally {
1106
+ releasePermit();
1107
+ const toolCalls = finalizeStreamedToolCalls(toolAcc);
1108
+ textD.resolve(accumulated);
1109
+ usageD.resolve(nativeUsage);
1110
+ finishD.resolve(finishReason);
1111
+ toolCallsD.resolve(toolCalls);
1112
+ if (nativeUsage) {
1113
+ emitModelUsageEvent(runtime, modelType, context.prompt, nativeUsage, {
1114
+ modelName: context.modelName,
1115
+ ...(() => {
1116
+ const costUsd = extractCostUsd(rawUsage, response);
1117
+ return typeof costUsd === "number" ? { costUsd } : {};
1118
+ })()
1119
+ });
1120
+ }
1121
+ }
1122
+ }
1123
+ return {
1124
+ textStream: generate(),
1125
+ text: textD.promise,
1126
+ usage: usageD.promise,
1127
+ finishReason: finishD.promise,
1128
+ toolCalls: toolCallsD.promise,
1129
+ providerMetadata: { modelName: context.modelName }
1130
+ };
1131
+ }
772
1132
  async function handleTextSmall(runtime, params) {
773
1133
  return generateTextWithModel(runtime, TEXT_SMALL_MODEL_TYPE, params);
774
1134
  }
@@ -791,13 +1151,23 @@ async function handleActionPlanner(runtime, params) {
791
1151
  return generateTextWithModel(runtime, ACTION_PLANNER_MODEL_TYPE, params);
792
1152
  }
793
1153
  export {
1154
+ withNativeChatLimit,
1155
+ streamNativeChatCompletion,
1156
+ resolveTextTimeoutMs,
1157
+ resolveStreamingEnabled,
1158
+ parseOpenAiSseStream,
1159
+ normalizeNativeTools,
794
1160
  handleTextSmall,
795
1161
  handleTextNano,
796
1162
  handleTextMega,
797
1163
  handleTextMedium,
798
1164
  handleTextLarge,
799
1165
  handleResponseHandler,
800
- handleActionPlanner
1166
+ handleActionPlanner,
1167
+ generateNativeChatCompletion,
1168
+ finalizeStreamedToolCalls,
1169
+ accumulateToolCallDeltas,
1170
+ __resetNativeChatLimiterForTests
801
1171
  };
802
1172
 
803
- //# debugId=DF0E0E9E46BB9DE664756E2164756E21
1173
+ //# debugId=8C1B68779D60990B64756E2164756E21