@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
@@ -1,20 +1,19 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/utils/config.ts", "../src/utils/sdk-client.ts", "../src/utils/events.ts", "../src/models/embeddings.ts", "../src/utils/helpers.ts", "../src/models/image.ts", "../src/models/research.ts", "../src/models/speech.ts", "../src/providers/openai.ts", "../src/utils/responses-output.ts", "../src/models/text.ts"],
3
+ "sources": ["../src/utils/config.ts", "../src/utils/sdk-client.ts", "../src/utils/events.ts", "../src/models/embeddings.ts", "../src/utils/helpers.ts", "../src/models/image.ts", "../src/models/research.ts", "../src/models/speech.ts", "../src/utils/responses-output.ts", "../src/models/text.ts"],
4
4
  "sourcesContent": [
5
- "import type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { DEFAULT_ELIZA_CLOUD_TEXT_MODEL } from \"@elizaos/core\";\n\nexport const DEFAULT_ELIZA_CLOUD_LARGE_MODEL = \"deepseek/deepseek-v4-pro\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n const value = runtime.getSetting(key);\n if (value !== undefined && value !== null) {\n return String(value);\n }\n return getEnvValue(key) ?? defaultValue;\n}\n\nexport function isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { document?: Document }).document !== \"undefined\"\n );\n}\n\nexport function isProxyMode(runtime: IAgentRuntime): boolean {\n return isBrowser() && !!getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n}\n\nexport function getBaseURL(runtime: IAgentRuntime): string {\n const browserURL = getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n const baseURL = (\n isBrowser() && browserURL\n ? browserURL\n : getSetting(runtime, \"ELIZAOS_CLOUD_BASE_URL\", \"https://www.elizacloud.ai/api/v1\")\n ) as string;\n return baseURL;\n}\n\nexport function getEmbeddingBaseURL(runtime: IAgentRuntime): string {\n const embeddingURL = isBrowser()\n ? getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL\") ||\n getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\")\n : getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_URL\");\n if (embeddingURL) {\n logger.debug(`[ELIZAOS_CLOUD] Using specific embedding base URL: ${embeddingURL}`);\n return embeddingURL;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general base URL for embeddings.\");\n return getBaseURL(runtime);\n}\n\nexport function getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, \"ELIZAOS_CLOUD_API_KEY\");\n}\n\nexport function getEmbeddingApiKey(runtime: IAgentRuntime): string | undefined {\n const embeddingApiKey = getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_API_KEY\");\n if (embeddingApiKey) {\n logger.debug(\"[ELIZAOS_CLOUD] Using specific embedding API key (present)\");\n return embeddingApiKey;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general API key for embeddings.\");\n return getApiKey(runtime);\n}\n\nexport function getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_SMALL_MODEL\") ??\n (getSetting(runtime, \"SMALL_MODEL\", DEFAULT_ELIZA_CLOUD_TEXT_MODEL) as string)\n );\n}\n\nexport function getNanoModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_NANO_MODEL\") ??\n getSetting(runtime, \"NANO_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getMediumModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEDIUM_MODEL\") ??\n getSetting(runtime, \"MEDIUM_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_LARGE_MODEL\") ??\n (getSetting(runtime, \"LARGE_MODEL\", DEFAULT_ELIZA_CLOUD_LARGE_MODEL) as string)\n );\n}\n\nexport function getMegaModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEGA_MODEL\") ??\n getSetting(runtime, \"MEGA_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseHandlerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\") ??\n getSetting(runtime, \"RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"SHOULD_RESPOND_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getActionPlannerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_PLANNER_MODEL\") ??\n getSetting(runtime, \"ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"PLANNER_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_MODEL\") ??\n getSetting(runtime, \"RESPONSE_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getImageDescriptionModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\", \"gpt-5.4-mini\") as string;\n}\n\nexport function getImageGenerationModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\", \"google/gemini-2.5-flash-image\") ??\n \"google/gemini-2.5-flash-image\"\n );\n}\n\nexport function getResearchModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESEARCH_MODEL\") ??\n (getSetting(runtime, \"RESEARCH_MODEL\", \"o3-deep-research\") as string)\n );\n}\n\nexport function getTTSModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\") as string;\n}\n\nexport function getTranscriptionModel(runtime: IAgentRuntime): string {\n return getSetting(\n runtime,\n \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n \"gpt-5-mini-transcribe\"\n ) as string;\n}\n\nexport function getExperimentalTelemetry(runtime: IAgentRuntime): boolean {\n const setting = getSetting(runtime, \"ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY\", \"false\");\n return String(setting).toLowerCase() === \"true\";\n}\n",
6
- "import { CloudApiClient, ElizaCloudClient } from \"@elizaos/cloud-sdk\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport {\n getApiKey,\n getBaseURL,\n getEmbeddingApiKey,\n getEmbeddingBaseURL,\n isBrowser,\n} from \"./config\";\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction apiBaseToSiteBaseUrl(apiBaseUrl: string): string {\n const trimmed = trimTrailingSlash(apiBaseUrl);\n return trimmed.endsWith(\"/api/v1\") ? trimmed.slice(0, -\"/api/v1\".length) : trimmed;\n}\n\nfunction apiKeyForRuntime(runtime: IAgentRuntime, embedding = false): string | undefined {\n if (isBrowser()) return undefined;\n return embedding ? getEmbeddingApiKey(runtime) : getApiKey(runtime);\n}\n\nexport function createCloudApiClient(runtime: IAgentRuntime, embedding = false): CloudApiClient {\n const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);\n return new CloudApiClient(trimTrailingSlash(baseUrl), apiKeyForRuntime(runtime, embedding));\n}\n\nexport function createElizaCloudClient(runtime: IAgentRuntime): ElizaCloudClient {\n const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));\n return new ElizaCloudClient({\n apiBaseUrl,\n baseUrl: apiBaseToSiteBaseUrl(apiBaseUrl),\n apiKey: apiKeyForRuntime(runtime),\n });\n}\n",
7
- "import {\n EventType,\n type IAgentRuntime,\n type ModelEventPayload,\n type ModelTypeName,\n} from \"@elizaos/core\";\nimport type { LanguageModelUsage } from \"ai\";\n\nexport function emitModelUsageEvent(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n _prompt: string,\n usage: Partial<LanguageModelUsage> & {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n }\n) {\n const inputTokens = Number(usage.inputTokens || 0);\n const outputTokens = Number(usage.outputTokens || 0);\n const totalTokens = Number(\n usage.totalTokens != null ? usage.totalTokens : inputTokens + outputTokens\n );\n\n const payload: ModelEventPayload = {\n runtime,\n source: \"elizacloud\",\n type,\n tokens: {\n prompt: inputTokens,\n completion: outputTokens,\n total: totalTokens,\n },\n };\n\n runtime.emitEvent(EventType.MODEL_USED, payload);\n}\n",
8
- "import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport { logger, ModelType, VECTOR_DIMS } from \"@elizaos/core\";\nimport { getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst MAX_BATCH_SIZE = 100;\nfunction extractRateLimitInfo(response: Response): {\n remainingRequests?: number;\n remainingTokens?: number;\n limitRequests?: number;\n limitTokens?: number;\n resetRequests?: string;\n resetTokens?: string;\n retryAfter?: number;\n} {\n return {\n remainingRequests:\n parseInt(response.headers.get(\"x-ratelimit-remaining-requests\") || \"\", 10) || undefined,\n remainingTokens:\n parseInt(response.headers.get(\"x-ratelimit-remaining-tokens\") || \"\", 10) || undefined,\n limitRequests:\n parseInt(response.headers.get(\"x-ratelimit-limit-requests\") || \"\", 10) || undefined,\n limitTokens: parseInt(response.headers.get(\"x-ratelimit-limit-tokens\") || \"\", 10) || undefined,\n resetRequests: response.headers.get(\"x-ratelimit-reset-requests\") || undefined,\n resetTokens: response.headers.get(\"x-ratelimit-reset-tokens\") || undefined,\n retryAfter: parseInt(response.headers.get(\"retry-after\") || \"\", 10) || undefined,\n };\n}\n\nfunction getEmbeddingConfig(runtime: IAgentRuntime) {\n const embeddingModelName = getSetting(\n runtime,\n \"ELIZAOS_CLOUD_EMBEDDING_MODEL\",\n \"text-embedding-3-small\"\n );\n const embeddingDimension = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS\", \"1536\") || \"1536\",\n 10\n ) as (typeof VECTOR_DIMS)[keyof typeof VECTOR_DIMS];\n\n if (!Object.values(VECTOR_DIMS).includes(embeddingDimension)) {\n const errorMsg = `Invalid embedding dimension: ${embeddingDimension}. Must be one of: ${Object.values(VECTOR_DIMS).join(\", \")}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n return { embeddingModelName, embeddingDimension };\n}\n\nfunction createErrorVector(dimension: number, marker: number): number[] {\n const vector = Array(dimension).fill(0);\n vector[0] = marker;\n return vector;\n}\n\nexport interface BatchEmbeddingParams {\n texts: string[];\n}\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const { embeddingDimension } = getEmbeddingConfig(runtime);\n\n if (params === null) {\n logger.debug(\"Creating test embedding for initialization\");\n return createErrorVector(embeddingDimension, 0.1);\n }\n\n let text: string;\n if (typeof params === \"string\") {\n text = params;\n } else if (typeof params === \"object\" && params.text) {\n text = params.text;\n } else {\n logger.warn(\"Invalid input format for embedding\");\n return createErrorVector(embeddingDimension, 0.2);\n }\n\n if (!text.trim()) {\n logger.warn(\"Empty text for embedding\");\n return createErrorVector(embeddingDimension, 0.3);\n }\n\n const results = await handleBatchTextEmbedding(runtime, [text]);\n return results[0];\n}\n\nexport interface BatchEmbeddingResult {\n embedding: number[];\n index: number;\n success: boolean;\n error?: string;\n}\n\nexport async function handleBatchTextEmbedding(\n runtime: IAgentRuntime,\n texts: string[]\n): Promise<number[][]> {\n const { embeddingModelName, embeddingDimension } = getEmbeddingConfig(runtime);\n const client = createCloudApiClient(runtime, true);\n\n if (!texts || texts.length === 0) {\n logger.warn(\"[BatchEmbeddings] Empty texts array\");\n return [];\n }\n\n const validTexts: { text: string; originalIndex: number }[] = [];\n const results: number[][] = new Array(texts.length);\n\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i]?.trim();\n if (text) {\n validTexts.push({ text, originalIndex: i });\n } else {\n results[i] = createErrorVector(embeddingDimension, 0.3);\n }\n }\n\n if (validTexts.length === 0) {\n logger.warn(\"[BatchEmbeddings] All texts were empty\");\n return results;\n }\n\n for (let batchStart = 0; batchStart < validTexts.length; batchStart += MAX_BATCH_SIZE) {\n const batchEnd = Math.min(batchStart + MAX_BATCH_SIZE, validTexts.length);\n const batch = validTexts.slice(batchStart, batchEnd);\n const batchTexts = batch.map((b) => b.text);\n\n logger.info(\n `[BatchEmbeddings] Processing batch ${Math.floor(batchStart / MAX_BATCH_SIZE) + 1}/${Math.ceil(validTexts.length / MAX_BATCH_SIZE)}: ${batch.length} texts`\n );\n\n try {\n const response = await client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n },\n });\n\n const rateLimitInfo = extractRateLimitInfo(response);\n\n if (rateLimitInfo.remainingRequests !== undefined && rateLimitInfo.remainingRequests < 50) {\n logger.warn(\n `[BatchEmbeddings] Rate limit: ${rateLimitInfo.remainingRequests}/${rateLimitInfo.limitRequests} requests remaining`\n );\n }\n\n if (response.status === 429) {\n const retryAfter = rateLimitInfo.retryAfter || 30;\n logger.warn(`[BatchEmbeddings] Rate limited, waiting ${retryAfter}s...`);\n await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));\n\n const retryResponse = await client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n },\n });\n\n if (!retryResponse.ok) {\n logger.error(`[BatchEmbeddings] Retry failed: ${retryResponse.status}`);\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.4);\n }\n continue;\n }\n\n const retryData = (await retryResponse.json()) as {\n data: Array<{ embedding: number[]; index: number }>;\n };\n\n if (retryData?.data) {\n for (const item of retryData.data) {\n const originalIndex = batch[item.index].originalIndex;\n results[originalIndex] = item.embedding;\n }\n logger.info(`[BatchEmbeddings] Retry successful for ${batch.length} embeddings`);\n }\n continue;\n }\n\n if (!response.ok) {\n logger.error(`[BatchEmbeddings] API error: ${response.status} - ${response.statusText}`);\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.4);\n }\n continue;\n }\n\n const data = (await response.json()) as {\n data: Array<{ embedding: number[]; index: number }>;\n usage?: { prompt_tokens: number; total_tokens: number };\n };\n\n if (!data?.data || !Array.isArray(data.data)) {\n logger.error(\"[BatchEmbeddings] API returned invalid structure\");\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.5);\n }\n continue;\n }\n\n for (const item of data.data) {\n const originalIndex = batch[item.index].originalIndex;\n results[originalIndex] = item.embedding;\n }\n\n if (data.usage) {\n const usage = {\n inputTokens: data.usage.prompt_tokens,\n outputTokens: 0,\n totalTokens: data.usage.total_tokens,\n };\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, `batch:${batch.length}`, usage);\n }\n\n logger.debug(\n `[BatchEmbeddings] Got ${batch.length} embeddings (${embeddingDimension}d), remaining: ${rateLimitInfo.remainingRequests ?? \"unknown\"}`\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[BatchEmbeddings] Error: ${message}`);\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.6);\n }\n }\n }\n\n return results;\n}\n",
5
+ "import type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { DEFAULT_ELIZA_CLOUD_TEXT_MODEL } from \"@elizaos/core\";\n\nexport const DEFAULT_ELIZA_CLOUD_LARGE_MODEL = \"zai-glm-4.7\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n const value = runtime.getSetting(key);\n if (value !== undefined && value !== null) {\n return String(value);\n }\n return getEnvValue(key) ?? defaultValue;\n}\n\nexport function isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { document?: Document }).document !== \"undefined\"\n );\n}\n\nexport function isProxyMode(runtime: IAgentRuntime): boolean {\n return isBrowser() && !!getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n}\n\nexport function getBaseURL(runtime: IAgentRuntime): string {\n const browserURL = getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n const baseURL = (\n isBrowser() && browserURL\n ? browserURL\n : getSetting(runtime, \"ELIZAOS_CLOUD_BASE_URL\", \"https://www.elizacloud.ai/api/v1\")\n ) as string;\n return baseURL;\n}\n\nexport function getEmbeddingBaseURL(runtime: IAgentRuntime): string {\n const embeddingURL = isBrowser()\n ? getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL\") ||\n getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\")\n : getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_URL\");\n if (embeddingURL) {\n logger.debug(`[ELIZAOS_CLOUD] Using specific embedding base URL: ${embeddingURL}`);\n return embeddingURL;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general base URL for embeddings.\");\n return getBaseURL(runtime);\n}\n\nexport function getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, \"ELIZAOS_CLOUD_API_KEY\");\n}\n\nexport function getEmbeddingApiKey(runtime: IAgentRuntime): string | undefined {\n const embeddingApiKey = getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_API_KEY\");\n if (embeddingApiKey) {\n logger.debug(\"[ELIZAOS_CLOUD] Using specific embedding API key (present)\");\n return embeddingApiKey;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general API key for embeddings.\");\n return getApiKey(runtime);\n}\n\nexport function getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_SMALL_MODEL\") ??\n (getSetting(runtime, \"SMALL_MODEL\", DEFAULT_ELIZA_CLOUD_TEXT_MODEL) as string)\n );\n}\n\nexport function getNanoModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_NANO_MODEL\") ??\n getSetting(runtime, \"NANO_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getMediumModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEDIUM_MODEL\") ??\n getSetting(runtime, \"MEDIUM_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_LARGE_MODEL\") ??\n (getSetting(runtime, \"LARGE_MODEL\", DEFAULT_ELIZA_CLOUD_LARGE_MODEL) as string)\n );\n}\n\nexport function getMegaModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEGA_MODEL\") ??\n getSetting(runtime, \"MEGA_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseHandlerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\") ??\n getSetting(runtime, \"RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"SHOULD_RESPOND_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getActionPlannerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_PLANNER_MODEL\") ??\n getSetting(runtime, \"ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"PLANNER_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_MODEL\") ??\n getSetting(runtime, \"RESPONSE_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getImageDescriptionModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\", \"gpt-5.4-mini\") as string;\n}\n\nexport function getImageGenerationModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\", \"google/gemini-2.5-flash-image\") ??\n \"google/gemini-2.5-flash-image\"\n );\n}\n\nexport function getResearchModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESEARCH_MODEL\") ??\n (getSetting(runtime, \"RESEARCH_MODEL\", \"o3-deep-research\") as string)\n );\n}\n\nexport function getTTSModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\") as string;\n}\n\nexport function getTranscriptionModel(runtime: IAgentRuntime): string {\n return getSetting(\n runtime,\n \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n \"gpt-5-mini-transcribe\"\n ) as string;\n}\n\nexport function getExperimentalTelemetry(runtime: IAgentRuntime): boolean {\n const setting = getSetting(runtime, \"ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY\", \"false\");\n return String(setting).toLowerCase() === \"true\";\n}\n\n/**\n * Resolve a client-side timeout (ms) for a cloud model round-trip from `envKey`,\n * falling back to `defaultMs`. `0`/negative/non-numeric → undefined (opt out).\n *\n * cloud-sdk applies NO default timeout (a fetch with no signal hangs until the\n * platform default), so turn-blocking calls (TTS/STT in a voice turn, deep\n * research) need an explicit ceiling or a stalled gateway hangs the turn.\n */\nexport function resolveCloudTimeoutMs(\n envKey: string,\n defaultMs: number\n): number | undefined {\n const raw = typeof process !== \"undefined\" ? process.env[envKey] : undefined;\n if (raw === undefined || raw.trim() === \"\") return defaultMs;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed)) return defaultMs;\n return parsed <= 0 ? undefined : parsed;\n}\n",
6
+ "import { CloudApiClient, ElizaCloudClient } from \"@elizaos/cloud-sdk\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport {\n getApiKey,\n getBaseURL,\n getEmbeddingApiKey,\n getEmbeddingBaseURL,\n isBrowser,\n} from \"./config\";\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction apiBaseToSiteBaseUrl(apiBaseUrl: string): string {\n const trimmed = trimTrailingSlash(apiBaseUrl);\n return trimmed.endsWith(\"/api/v1\") ? trimmed.slice(0, -\"/api/v1\".length) : trimmed;\n}\n\nfunction apiKeyForRuntime(runtime: IAgentRuntime, embedding = false): string | undefined {\n if (isBrowser()) return undefined;\n return embedding ? getEmbeddingApiKey(runtime) : getApiKey(runtime);\n}\n\nexport function createCloudApiClient(runtime: IAgentRuntime, embedding = false): CloudApiClient {\n const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);\n return new ElizaCloudClient({\n apiBaseUrl: trimTrailingSlash(baseUrl),\n baseUrl: apiBaseToSiteBaseUrl(baseUrl),\n apiKey: apiKeyForRuntime(runtime, embedding),\n }).v1;\n}\n\nexport function createElizaCloudClient(runtime: IAgentRuntime): ElizaCloudClient {\n const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));\n return new ElizaCloudClient({\n apiBaseUrl,\n baseUrl: apiBaseToSiteBaseUrl(apiBaseUrl),\n apiKey: apiKeyForRuntime(runtime),\n });\n}\n",
7
+ "import {\n EventType,\n type IAgentRuntime,\n type ModelEventPayload,\n type ModelTypeName,\n} from \"@elizaos/core\";\nimport type { LanguageModelUsage } from \"ai\";\n\n/**\n * Extra metadata that rides along with a {@link ModelEventPayload} so that\n * downstream consumers (e.g. the waifu metering bridge) can attribute spend\n * to a concrete model id and, when the cloud surfaces it, the authoritative\n * post-markup USD cost it just debited from the org's credit balance.\n *\n * These are additive fields layered onto the standard payload — the core\n * {@link ModelEventPayload} shape is unchanged for every other listener.\n */\nexport interface ModelUsageEventMeta {\n /** Resolved provider model id, e.g. \"anthropic/claude-opus-4.7\". */\n modelName?: string;\n /**\n * Authoritative USD cost the metered gateway charged for this call, when\n * available (e.g. from a `usage.cost_usd` field or `X-Eliza-Cost-Usd`\n * response header). Undefined when the cloud does not surface it; consumers\n * then fall back to a token-based estimate.\n */\n costUsd?: number;\n}\n\nexport type ModelUsageEventPayload = ModelEventPayload & ModelUsageEventMeta;\n\nexport function emitModelUsageEvent(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n _prompt: string,\n usage: Partial<LanguageModelUsage> & {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n },\n meta: ModelUsageEventMeta = {}\n) {\n const inputTokens = Number(usage.inputTokens || 0);\n const outputTokens = Number(usage.outputTokens || 0);\n const totalTokens = Number(\n usage.totalTokens != null ? usage.totalTokens : inputTokens + outputTokens\n );\n\n const payload: ModelUsageEventPayload = {\n runtime,\n source: \"elizacloud\",\n type,\n tokens: {\n prompt: inputTokens,\n completion: outputTokens,\n total: totalTokens,\n },\n ...(meta.modelName ? { modelName: meta.modelName } : {}),\n ...(typeof meta.costUsd === \"number\" && Number.isFinite(meta.costUsd)\n ? { costUsd: meta.costUsd }\n : {}),\n };\n\n runtime.emitEvent(EventType.MODEL_USED, payload);\n}\n",
8
+ "import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport {\n logger,\n ModelType,\n timeInferenceSpan,\n VECTOR_DIMS,\n} from \"@elizaos/core\";\nimport { getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst MAX_BATCH_SIZE = 100;\n\n// ── Bounded retry/backoff for the /embeddings round-trip ──────────────────\n// Embeddings are off the turn's critical path (queueEmbeddingGeneration is\n// fire-and-forget), so a stall here delays the embedding QUEUE, not a reply.\n// The old behaviour — one blind 30s (or full retry-after) sleep then a single\n// retry — could park the queue for 30s+ on a transient 429. Replaced with\n// bounded exponential backoff + jitter, a CAP on any single wait (so a large\n// server retry-after can't stall the queue indefinitely), and a per-request\n// client-side timeout (the endpoint had none, so a hung gateway hung the\n// queue forever).\n//\n// Handler retries are deliberately SMALL: the EmbeddingGenerationService\n// BatchQueue already wraps generateEmbedding in its own multi-attempt backoff,\n// so this layer absorbs only a single transient burst (one quick retry) and\n// defers sustained pressure to the queue — otherwise the two backoffs compound.\nconst EMBED_MAX_ATTEMPTS = 2;\nconst EMBED_BACKOFF_BASE_MS = 1_000;\nconst EMBED_BACKOFF_CAP_MS = 8_000;\nconst EMBED_REQUEST_TIMEOUT_MS = 60_000;\n\n/**\n * Backoff before the next embedding attempt. Exponential (base·2^attempt) as a\n * floor, honoring the server's `retry-after` when present, but never longer\n * than {@link EMBED_BACKOFF_CAP_MS}; ±25% jitter spreads retries from a burst.\n */\nfunction embeddingBackoffMs(attempt: number, retryAfterSec?: number): number {\n const exp = EMBED_BACKOFF_BASE_MS * 2 ** attempt;\n const serverHint =\n typeof retryAfterSec === \"number\" && retryAfterSec > 0\n ? retryAfterSec * 1000\n : 0;\n const base = Math.min(EMBED_BACKOFF_CAP_MS, Math.max(exp, serverHint));\n return Math.round(base * (1 + Math.random() * 0.25));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction extractRateLimitInfo(response: Response): {\n remainingRequests?: number;\n remainingTokens?: number;\n limitRequests?: number;\n limitTokens?: number;\n resetRequests?: string;\n resetTokens?: string;\n retryAfter?: number;\n} {\n return {\n remainingRequests:\n parseInt(response.headers.get(\"x-ratelimit-remaining-requests\") || \"\", 10) || undefined,\n remainingTokens:\n parseInt(response.headers.get(\"x-ratelimit-remaining-tokens\") || \"\", 10) || undefined,\n limitRequests:\n parseInt(response.headers.get(\"x-ratelimit-limit-requests\") || \"\", 10) || undefined,\n limitTokens: parseInt(response.headers.get(\"x-ratelimit-limit-tokens\") || \"\", 10) || undefined,\n resetRequests: response.headers.get(\"x-ratelimit-reset-requests\") || undefined,\n resetTokens: response.headers.get(\"x-ratelimit-reset-tokens\") || undefined,\n retryAfter: parseInt(response.headers.get(\"retry-after\") || \"\", 10) || undefined,\n };\n}\n\nfunction getEmbeddingConfig(runtime: IAgentRuntime) {\n const embeddingModelName = getSetting(\n runtime,\n \"ELIZAOS_CLOUD_EMBEDDING_MODEL\",\n \"text-embedding-3-small\"\n );\n const embeddingDimension = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS\", \"1536\") || \"1536\",\n 10\n ) as (typeof VECTOR_DIMS)[keyof typeof VECTOR_DIMS];\n\n if (!Object.values(VECTOR_DIMS).includes(embeddingDimension)) {\n const errorMsg = `Invalid embedding dimension: ${embeddingDimension}. Must be one of: ${Object.values(VECTOR_DIMS).join(\", \")}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n return { embeddingModelName, embeddingDimension };\n}\n\n/**\n * The init probe vector. `runtime.ensureEmbeddingDimension()` calls the handler\n * with `null` purely to learn the vector length; it only inspects `.length`, so\n * a deterministic non-zero[0] marker vector is the correct, legitimate response.\n * This is the ONLY place a synthetic vector is returned — every real failure\n * throws so it can never be persisted as a corrupt embedding (Commandment 8).\n */\nfunction createInitProbeVector(dimension: number): number[] {\n const vector = Array(dimension).fill(0);\n vector[0] = 0.1;\n return vector;\n}\n\nexport interface BatchEmbeddingParams {\n texts: string[];\n}\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const { embeddingDimension } = getEmbeddingConfig(runtime);\n\n if (params === null) {\n logger.debug(\"Creating test embedding for initialization\");\n return createInitProbeVector(embeddingDimension);\n }\n\n let text: string;\n if (typeof params === \"string\") {\n text = params;\n } else if (typeof params === \"object\" && params.text) {\n text = params.text;\n } else {\n // A malformed request is a programming error, not a recoverable runtime\n // state. Throw instead of returning a marker vector that would silently\n // corrupt the embedding store (Commandment 8).\n throw new Error(\"Invalid input format for embedding: expected string or { text: string }\");\n }\n\n if (!text.trim()) {\n throw new Error(\"Cannot generate embedding for empty text\");\n }\n\n const results = await handleBatchTextEmbedding(runtime, [text]);\n return results[0];\n}\n\nexport interface BatchEmbeddingResult {\n embedding: number[];\n index: number;\n success: boolean;\n error?: string;\n}\n\nexport async function handleBatchTextEmbedding(\n runtime: IAgentRuntime,\n texts: string[]\n): Promise<number[][]> {\n const { embeddingModelName, embeddingDimension } = getEmbeddingConfig(runtime);\n const client = createCloudApiClient(runtime, true);\n\n if (!texts || texts.length === 0) {\n return [];\n }\n\n // Every text must be non-empty: an empty input cannot produce a meaningful\n // vector, and a marker/zero vector would silently corrupt the store. Surface\n // the bad input to the caller (Commandment 8) instead of papering over it.\n const validTexts: { text: string; originalIndex: number }[] = [];\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i]?.trim();\n if (!text) {\n throw new Error(`Cannot generate embedding for empty text at index ${i}`);\n }\n validTexts.push({ text, originalIndex: i });\n }\n\n const results: number[][] = new Array(texts.length);\n\n for (let batchStart = 0; batchStart < validTexts.length; batchStart += MAX_BATCH_SIZE) {\n const batchEnd = Math.min(batchStart + MAX_BATCH_SIZE, validTexts.length);\n const batch = validTexts.slice(batchStart, batchEnd);\n const batchTexts = batch.map((b) => b.text);\n\n logger.info(\n `[BatchEmbeddings] Processing batch ${Math.floor(batchStart / MAX_BATCH_SIZE) + 1}/${Math.ceil(validTexts.length / MAX_BATCH_SIZE)}: ${batch.length} texts`\n );\n\n try {\n // Records a `cloud.embedding` span on the active per-turn timer when an\n // embedding happens to be on a turn's critical path (most are queued /\n // detached, so this is a no-op there — which is exactly what proves they\n // don't add to turn latency). Retries transient throttling/5xx with\n // bounded exponential backoff (see EMBED_* constants) instead of a single\n // 30s blind sleep.\n let response: Response | null = null;\n for (let attempt = 0; attempt < EMBED_MAX_ATTEMPTS; attempt++) {\n const resp = await timeInferenceSpan(\n \"cloud.embedding\",\n () =>\n client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n },\n timeoutMs: EMBED_REQUEST_TIMEOUT_MS,\n }),\n { batch: batchTexts.length, attempt }\n );\n\n const rateLimitInfo = extractRateLimitInfo(resp);\n if (\n rateLimitInfo.remainingRequests !== undefined &&\n rateLimitInfo.remainingRequests < 50\n ) {\n logger.warn(\n `[BatchEmbeddings] Rate limit: ${rateLimitInfo.remainingRequests}/${rateLimitInfo.limitRequests} requests remaining`\n );\n }\n\n const transient =\n resp.status === 429 ||\n resp.status === 502 ||\n resp.status === 503 ||\n resp.status === 504;\n if (transient && attempt < EMBED_MAX_ATTEMPTS - 1) {\n const delay = embeddingBackoffMs(attempt, rateLimitInfo.retryAfter);\n logger.warn(\n `[BatchEmbeddings] ${resp.status} (attempt ${attempt + 1}/${EMBED_MAX_ATTEMPTS}) — backing off ${delay}ms`\n );\n // Drain the body so the underlying connection can be reused.\n await resp.text().catch(() => undefined);\n await sleep(delay);\n continue;\n }\n response = resp;\n break;\n }\n\n // Type guard: the loop assigns `response` on its final iteration, so this\n // is unreachable in practice.\n if (!response) {\n throw new Error(\"[BatchEmbeddings] No response after retry loop\");\n }\n\n if (!response.ok) {\n // Auth errors (401/403) are non-recoverable with the current key.\n // Every other non-OK status is just as fatal for this batch — neither\n // can produce real vectors. Throw in both cases so the router falls\n // through to the next provider (e.g. local inference) instead of\n // silently persisting marker/zero vectors that corrupt the embedding\n // store. Commandment 8: don't hide broken pipelines behind fallbacks.\n if (response.status === 401 || response.status === 403) {\n throw new Error(\n `[BatchEmbeddings] Authentication failed (${response.status}). ` +\n `Check ELIZAOS_CLOUD_API_KEY or ELIZAOS_CLOUD_EMBEDDING_API_KEY — ` +\n `the current key is not authorized for the embedding endpoint.`\n );\n }\n throw new Error(\n `[BatchEmbeddings] API error: ${response.status} ${response.statusText}`\n );\n }\n\n const data = (await response.json()) as {\n data?: Array<{ embedding: number[]; index: number }>;\n usage?: { prompt_tokens: number; total_tokens: number };\n };\n\n if (!data?.data || !Array.isArray(data.data)) {\n throw new Error(\"[BatchEmbeddings] API returned invalid response structure\");\n }\n\n for (const item of data.data) {\n const originalIndex = batch[item.index].originalIndex;\n results[originalIndex] = item.embedding;\n }\n\n if (data.usage) {\n const usage = {\n inputTokens: data.usage.prompt_tokens,\n outputTokens: 0,\n totalTokens: data.usage.total_tokens,\n };\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, `batch:${batch.length}`, usage);\n }\n\n logger.debug(\n `[BatchEmbeddings] Got ${batch.length} embeddings (${embeddingDimension}d)`\n );\n } catch (error) {\n // Any failure in this batch (HTTP error, transport error, malformed body)\n // means we have no real vectors for it. Log context and re-throw so the\n // router can fall through to another provider; never persist marker/zero\n // vectors that would corrupt the embedding store (Commandment 8).\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[BatchEmbeddings] Batch failed: ${message}`);\n throw error instanceof Error ? error : new Error(message);\n }\n }\n\n return results;\n}\n",
9
9
  "import { logger } from \"@elizaos/core\";\nimport { JSONParseError } from \"ai\";\nimport type { ImageDescriptionResult } from \"../types\";\n\nexport function getJsonRepairFunction(): (params: {\n text: string;\n error: unknown;\n}) => Promise<string | null> {\n return async ({ text, error }: { text: string; error: unknown }) => {\n try {\n if (error instanceof JSONParseError) {\n const cleanedText = text.replace(/```json\\n|\\n```|```/g, \"\");\n JSON.parse(cleanedText);\n return cleanedText;\n }\n return null;\n } catch (jsonError) {\n const message = jsonError instanceof Error ? jsonError.message : String(jsonError);\n logger.warn(`Failed to repair JSON text: ${message}`);\n return null;\n }\n };\n}\n\nexport function detectAudioMimeType(buffer: Buffer): string {\n if (buffer.length < 12) {\n return \"application/octet-stream\";\n }\n\n if (\n buffer[0] === 0x52 &&\n buffer[1] === 0x49 &&\n buffer[2] === 0x46 &&\n buffer[3] === 0x46 &&\n buffer[8] === 0x57 &&\n buffer[9] === 0x41 &&\n buffer[10] === 0x56 &&\n buffer[11] === 0x45\n ) {\n return \"audio/wav\";\n }\n\n if (\n (buffer[0] === 0x49 && buffer[1] === 0x44 && buffer[2] === 0x33) || // ID3\n (buffer[0] === 0xff && (buffer[1] & 0xe0) === 0xe0) // MPEG sync\n ) {\n return \"audio/mpeg\";\n }\n\n if (buffer[0] === 0x4f && buffer[1] === 0x67 && buffer[2] === 0x67 && buffer[3] === 0x53) {\n return \"audio/ogg\";\n }\n\n if (buffer[0] === 0x66 && buffer[1] === 0x4c && buffer[2] === 0x61 && buffer[3] === 0x43) {\n return \"audio/flac\";\n }\n\n if (buffer[4] === 0x66 && buffer[5] === 0x74 && buffer[6] === 0x79 && buffer[7] === 0x70) {\n return \"audio/mp4\";\n }\n\n if (buffer[0] === 0x1a && buffer[1] === 0x45 && buffer[2] === 0xdf && buffer[3] === 0xa3) {\n return \"audio/webm\";\n }\n\n logger.warn(\"Could not detect audio format from buffer, using generic binary type\");\n return \"application/octet-stream\";\n}\n\nexport async function webStreamToNodeStream(webStream: ReadableStream<Uint8Array>) {\n try {\n const { Readable } = await import(\"node:stream\");\n const reader = webStream.getReader();\n\n return new Readable({\n async read() {\n try {\n const { done, value } = await reader.read();\n if (done) {\n this.push(null);\n } else {\n this.push(value);\n }\n } catch (error) {\n this.destroy(error as Error);\n }\n },\n destroy(error, callback) {\n reader.cancel().finally(() => callback(error));\n },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to load node:stream module: ${message}`);\n throw new Error(\n `Cannot convert stream: node:stream module unavailable. This feature requires a Node.js environment.`\n );\n }\n}\n\nexport function parseImageDescriptionResponse(responseText: string): ImageDescriptionResult {\n const titleMatch = responseText.match(/title[:\\s]+(.+?)(?:\\n|$)/i);\n const title = titleMatch?.[1]?.trim() || \"Image Analysis\";\n const description = responseText.replace(/title[:\\s]+(.+?)(?:\\n|$)/i, \"\").trim();\n\n return { title, description };\n}\n",
10
- "import type { IAgentRuntime, ImageDescriptionParams, ImageGenerationParams } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { getImageDescriptionModel, getImageGenerationModel, getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { parseImageDescriptionResponse } from \"../utils/helpers\";\nimport { createElizaCloudClient } from \"../utils/sdk-client\";\n\nexport async function handleImageGeneration(\n runtime: IAgentRuntime,\n params: ImageGenerationParams\n): Promise<{ url: string }[]> {\n const numImages = params.count || 1;\n const size = params.size || \"1024x1024\";\n const prompt = params.prompt;\n const modelName = getImageGenerationModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using IMAGE model: ${modelName}`);\n\n const aspectRatioMap: Record<string, string> = {\n \"1024x1024\": \"1:1\",\n \"1792x1024\": \"16:9\",\n \"1024x1792\": \"9:16\",\n };\n const aspectRatio = aspectRatioMap[size] || \"1:1\";\n\n try {\n const requestBody = {\n prompt: prompt,\n numImages: numImages,\n aspectRatio: aspectRatio,\n model: modelName,\n };\n\n const typedData = await createElizaCloudClient(runtime).generateImage(requestBody);\n\n const result = typedData.images.map((img) => ({\n url: img.url ?? img.image ?? \"\",\n }));\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[ELIZAOS_CLOUD] Image generation error: ${message}`);\n throw error;\n }\n}\n\nexport async function handleImageDescription(\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n): Promise<{ title: string; description: string }> {\n // Honour `DISABLE_IMAGE_DESCRIPTION` (set by the runtime when\n // `features.vision === false`). The runtime exposes it via getSetting; some\n // hosts only set it in process.env. Check both before burning a quota slot.\n // The docs (`docs/runtime/core.md`) already promise this behaviour, but\n // historically only `plugin-discord` honoured it at the call site, leaving\n // every other caller (agent-orchestrator's task validator, vision, lifeops,\n // farcaster, telegram) free to spend the rate-limit budget.\n const disableSetting = getSetting(runtime, \"DISABLE_IMAGE_DESCRIPTION\", \"\");\n const disabled =\n disableSetting === \"true\" ||\n disableSetting === \"1\" ||\n process.env.DISABLE_IMAGE_DESCRIPTION === \"true\" ||\n process.env.DISABLE_IMAGE_DESCRIPTION === \"1\";\n if (disabled) {\n logger.debug(\"[ELIZAOS_CLOUD] IMAGE_DESCRIPTION skipped — DISABLE_IMAGE_DESCRIPTION is set\");\n return {\n title: \"Image description disabled\",\n description: \"Image description is disabled by configuration.\",\n };\n }\n\n let imageUrl: string;\n let promptText: string | undefined;\n const modelName = getImageDescriptionModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using IMAGE_DESCRIPTION model: ${modelName}`);\n const maxTokens = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS\", \"8192\") || \"8192\",\n 10\n );\n\n if (typeof params === \"string\") {\n imageUrl = params;\n promptText = \"Please analyze this image and provide a title and detailed description.\";\n } else {\n imageUrl = params.imageUrl;\n promptText =\n params.prompt || \"Please analyze this image and provide a title and detailed description.\";\n }\n\n const messages = [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: promptText },\n { type: \"image_url\", image_url: { url: imageUrl } },\n ],\n },\n ];\n\n const client = createElizaCloudClient(runtime);\n\n try {\n const requestBody: Record<string, unknown> = {\n model: modelName,\n messages: messages,\n max_tokens: maxTokens,\n };\n\n // On 429, honour the upstream's `retryAfter` instead of retrying on a\n // hardcoded backoff. Hardcoded retries inside the rate-limit window add\n // wasted requests to the same bucket and make the problem worse — see\n // #7374's billing render-loop fix and S33's dashboard 429-aware UX.\n // Strategy: only retry once, only if the upstream signals a short wait\n // (≤5s, i.e. transient burst). Anything longer, bail immediately and let\n // the caller fail fast.\n let response: Response | null = null;\n let attemptedRetry = false;\n for (let attempt = 0; attempt < 2; attempt++) {\n response = await client.routes.postApiV1ChatCompletionsRaw({\n json: requestBody,\n });\n if (response.status !== 429 || attemptedRetry) break;\n\n // `Number(null) === 0`, so guard against a missing header before\n // calling `Number(...)` — otherwise the header path always wins with a\n // bogus `0` and the body fallback becomes unreachable.\n const headerValue = response.headers.get(\"retry-after\");\n const headerRetryAfter =\n headerValue !== null && Number.isFinite(Number(headerValue))\n ? Number(headerValue)\n : undefined;\n let bodyRetryAfter: number | undefined;\n try {\n const peek = (await response.clone().json()) as {\n retryAfter?: unknown;\n };\n bodyRetryAfter =\n typeof peek?.retryAfter === \"number\" && Number.isFinite(peek.retryAfter)\n ? peek.retryAfter\n : undefined;\n } catch {\n // Body wasn't JSON — fall through to header value.\n }\n const retryAfter = headerRetryAfter ?? bodyRetryAfter ?? 0;\n\n if (retryAfter > 0 && retryAfter <= 5) {\n logger.warn(\n `[ELIZAOS_CLOUD] Image analysis rate-limited (429), retrying once after ${retryAfter}s...`\n );\n await new Promise((r) => setTimeout(r, retryAfter * 1000));\n attemptedRetry = true;\n continue;\n }\n // Long rate-limit window: don't burn another bucket slot retrying inside it.\n logger.warn(\n `[ELIZAOS_CLOUD] Image analysis rate-limited (429); upstream retryAfter=${retryAfter || \"unknown\"}s — failing fast`\n );\n break;\n }\n\n if (!response?.ok) {\n const status = response?.status ?? 0;\n if (status === 402) {\n throw new Error(\n \"Eliza Cloud credits exhausted — top up at https://www.elizacloud.ai/dashboard/settings?tab=billing\"\n );\n }\n if (status === 429) {\n throw new Error(\n \"Eliza Cloud rate limit exceeded for image description — try again in a minute\"\n );\n }\n throw new Error(`ElizaOS Cloud API error: ${status}`);\n }\n\n type OpenAIResponseType = {\n choices?: Array<{\n message?: { content?: string };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n };\n\n const typedResult = (await response.json()) as OpenAIResponseType;\n const content = typedResult.choices?.[0]?.message?.content;\n\n if (typedResult.usage) {\n emitModelUsageEvent(\n runtime,\n ModelType.IMAGE_DESCRIPTION,\n typeof params === \"string\" ? params : params.prompt || \"\",\n {\n inputTokens: typedResult.usage.prompt_tokens,\n outputTokens: typedResult.usage.completion_tokens,\n totalTokens: typedResult.usage.total_tokens,\n }\n );\n }\n\n if (!content) {\n return {\n title: \"Failed to analyze image\",\n description: \"No response from API\",\n };\n }\n\n return parseImageDescriptionResponse(content);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error analyzing image: ${message}`);\n return {\n title: \"Failed to analyze image\",\n description: `Error: ${message}`,\n };\n }\n}\n",
11
- "/** Research model handler — calls /responses for deep-research models. */\n\nimport type {\n IAgentRuntime,\n ResearchAnnotation,\n ResearchOutputItem,\n ResearchParams,\n ResearchResult,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { getResearchModel } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\ninterface ResponsesAPIOutput {\n id: string;\n status: string;\n output: Array<{\n type: string;\n id?: string;\n status?: string;\n content?: Array<{\n type: string;\n text?: string;\n annotations?: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>;\n }>;\n action?: {\n type: string;\n query?: string;\n url?: string;\n };\n query?: string;\n results?: Array<{\n file_id: string;\n file_name: string;\n score: number;\n }>;\n code?: string;\n output?: string;\n server_label?: string;\n tool_name?: string;\n arguments?: Record<string, unknown>;\n result?: unknown;\n }>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n };\n}\n\ntype ResponsesAPIInput =\n | string\n | Array<{\n role: \"user\" | \"system\" | \"assistant\";\n content: Array<{\n type: \"input_text\";\n text: string;\n }>;\n }>;\n\nfunction normalizeInput(input: ResearchParams[\"input\"]): ResponsesAPIInput {\n if (typeof input !== \"string\") {\n return input as ResponsesAPIInput;\n }\n\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"input_text\",\n text: input,\n },\n ],\n },\n ];\n}\n\nfunction buildResearchApiError(status: number, errorText: string): Error {\n try {\n const parsed = JSON.parse(errorText) as {\n error?: { message?: string; param?: string; code?: string };\n };\n const message = parsed.error?.message;\n const param = parsed.error?.param;\n if (param === \"tools.0.type\" && message?.includes('expected \"function\"')) {\n return new Error(\n `Research API error: ${status} Eliza Cloud /responses rejected deep-research tool types; the provider currently only accepts function tools on this route`\n );\n }\n } catch {\n // Fall through to the raw error text.\n }\n\n return new Error(`Research API error: ${status} ${errorText}`);\n}\n\nfunction parseAnnotations(\n raw: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>\n): ResearchAnnotation[] {\n return raw\n .filter((a) => a.url !== undefined)\n .map((a) => ({\n url: a.url as string,\n title: a.title ?? \"\",\n startIndex: a.start_index ?? 0,\n endIndex: a.end_index ?? 0,\n }));\n}\n\nfunction parseOutputItems(raw: ResponsesAPIOutput[\"output\"]): ResearchOutputItem[] {\n const items: ResearchOutputItem[] = [];\n\n for (const item of raw) {\n switch (item.type) {\n case \"web_search_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"web_search_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n action: {\n type: (item.action?.type as \"search\" | \"open_page\" | \"find_in_page\") ?? \"search\",\n query: item.action?.query,\n url: item.action?.url,\n },\n });\n break;\n case \"file_search_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"file_search_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n query: item.query ?? \"\",\n results: item.results?.map((r) => ({\n fileId: r.file_id,\n fileName: r.file_name,\n score: r.score,\n })),\n });\n break;\n case \"code_interpreter_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"code_interpreter_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n code: item.code ?? \"\",\n output: item.output,\n });\n break;\n case \"mcp_tool_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"mcp_tool_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n serverLabel: item.server_label ?? \"\",\n toolName: item.tool_name ?? \"\",\n arguments: (item.arguments ?? {}) as Record<string, import(\"@elizaos/core\").JsonValue>,\n result: item.result as import(\"@elizaos/core\").JsonValue | undefined,\n });\n break;\n case \"message\": {\n const content = item.content ?? [];\n items.push({\n type: \"message\",\n content: content\n .filter((c) => c.type === \"output_text\")\n .map((c) => ({\n type: \"output_text\" as const,\n text: c.text ?? \"\",\n annotations: parseAnnotations(c.annotations ?? []),\n })),\n });\n break;\n }\n }\n }\n\n return items;\n}\n\nexport async function handleResearch(\n runtime: IAgentRuntime,\n params: ResearchParams\n): Promise<ResearchResult> {\n const modelName = params.model ?? getResearchModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using RESEARCH model: ${modelName}`);\n\n const tools = params.tools ?? [{ type: \"web_search_preview\" }];\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input: normalizeInput(params.input),\n tools: tools,\n };\n\n if (params.instructions) {\n requestBody.instructions = params.instructions;\n }\n if (params.background !== undefined) {\n requestBody.background = params.background;\n }\n if (params.maxToolCalls !== undefined) {\n requestBody.max_tool_calls = params.maxToolCalls;\n }\n if (params.reasoningSummary) {\n requestBody.reasoning = { summary: params.reasoningSummary };\n }\n\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n json: requestBody,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw buildResearchApiError(response.status, errorText);\n }\n\n const data = (await response.json()) as ResponsesAPIOutput;\n\n if (data.usage) {\n emitModelUsageEvent(runtime, ModelType.RESEARCH, params.input, {\n inputTokens: data.usage.input_tokens,\n outputTokens: data.usage.output_tokens,\n totalTokens: data.usage.total_tokens,\n });\n }\n\n const outputItems = parseOutputItems(data.output);\n\n // Extract final text and annotations from the last message output\n let text = \"\";\n const annotations: ResearchAnnotation[] = [];\n\n for (const item of outputItems) {\n if (item.type === \"message\") {\n for (const content of item.content) {\n if (content.type === \"output_text\") {\n text += content.text;\n annotations.push(...content.annotations);\n }\n }\n }\n }\n\n return {\n id: data.id,\n text,\n annotations,\n outputItems,\n status: data.status as ResearchResult[\"status\"],\n };\n}\n",
12
- "import type { Readable } from \"node:stream\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { OpenAITextToSpeechParams } from \"../types\";\nimport { getSetting, isBrowser } from \"../utils/config\";\nimport { webStreamToNodeStream } from \"../utils/helpers\";\nimport { createElizaCloudClient } from \"../utils/sdk-client\";\n\nasync function fetchTextToSpeech(\n runtime: IAgentRuntime,\n options: OpenAITextToSpeechParams\n): Promise<ReadableStream<Uint8Array> | Readable> {\n const defaultModel = getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\");\n const defaultVoice = getSetting(runtime, \"ELIZAOS_CLOUD_TTS_VOICE\", \"nova\");\n\n const model = options.model || (defaultModel as string);\n const voice = options.voice || (defaultVoice as string);\n const format = options.format || \"mp3\";\n const modelId = model.startsWith(\"elevenlabs/\")\n ? model.split(\"/\").slice(1).join(\"/\")\n : model.startsWith(\"eleven_\")\n ? model\n : undefined;\n const voiceId = voice && voice !== \"nova\" ? voice : undefined;\n\n try {\n const res = await createElizaCloudClient(runtime).routes.postApiV1VoiceTts({\n headers: {\n ...(format === \"mp3\" ? { Accept: \"audio/mpeg\" } : {}),\n },\n json: {\n text: options.text,\n ...(voiceId ? { voiceId } : {}),\n ...(modelId ? { modelId } : {}),\n },\n });\n\n if (!res.ok) {\n const err = await res.text();\n throw new Error(`ElizaOS Cloud TTS error ${res.status}: ${err}`);\n }\n\n if (!res.body) {\n throw new Error(\"ElizaOS Cloud TTS response body is null\");\n }\n\n if (!isBrowser()) {\n return await webStreamToNodeStream(res.body);\n }\n\n return res.body;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to fetch speech from ElizaOS Cloud TTS: ${message}`);\n }\n}\n\nexport async function handleTextToSpeech(\n runtime: IAgentRuntime,\n input: string | OpenAITextToSpeechParams\n): Promise<ReadableStream<Uint8Array> | Readable> {\n const options: OpenAITextToSpeechParams =\n typeof input === \"string\" ? { text: input } : (input as OpenAITextToSpeechParams);\n\n const resolvedModel =\n options.model || (getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\") as string);\n logger.log(`[ELIZAOS_CLOUD] Using TEXT_TO_SPEECH model: ${resolvedModel}`);\n try {\n const speechStream = await fetchTextToSpeech(runtime, options);\n return speechStream;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in TEXT_TO_SPEECH: ${message}`);\n throw error;\n }\n}\n\nexport { fetchTextToSpeech };\n",
13
- "import { createOpenAI } from \"@ai-sdk/openai\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport { getApiKey, getBaseURL, isProxyMode } from \"../utils/config\";\n\nexport function createOpenAIClient(runtime: IAgentRuntime) {\n const baseURL = getBaseURL(runtime);\n const apiKey = getApiKey(runtime) ?? (isProxyMode(runtime) ? \"eliza-proxy\" : undefined);\n // NOTE: Callers must use openai.chat(modelName) instead of openai(modelName)\n // to force the Chat Completions API. The default openai(modelName) routes\n // to the Responses API which does not support presencePenalty,\n // frequencyPenalty, or stopSequences and emits noisy warnings.\n return createOpenAI({\n apiKey: (apiKey ?? \"\") as string,\n baseURL,\n });\n}\n",
10
+ "import type { IAgentRuntime, ImageDescriptionParams, ImageGenerationParams } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport {\n getImageDescriptionModel,\n getImageGenerationModel,\n getSetting,\n resolveCloudTimeoutMs,\n} from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { parseImageDescriptionResponse } from \"../utils/helpers\";\nimport { createElizaCloudClient } from \"../utils/sdk-client\";\n\nexport async function handleImageGeneration(\n runtime: IAgentRuntime,\n params: ImageGenerationParams\n): Promise<{ url: string }[]> {\n const numImages = params.count || 1;\n const size = params.size || \"1024x1024\";\n const prompt = params.prompt;\n const modelName = getImageGenerationModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using IMAGE model: ${modelName}`);\n\n const aspectRatioMap: Record<string, string> = {\n \"1024x1024\": \"1:1\",\n \"1792x1024\": \"16:9\",\n \"1024x1792\": \"9:16\",\n };\n const aspectRatio = aspectRatioMap[size] || \"1:1\";\n\n try {\n const requestBody = {\n prompt: prompt,\n numImages: numImages,\n aspectRatio: aspectRatio,\n model: modelName,\n };\n\n const typedData = await createElizaCloudClient(runtime).generateImage(requestBody);\n\n const result = typedData.images.map((img: { url?: string; image?: string }) => ({\n url: img.url ?? img.image ?? \"\",\n }));\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[ELIZAOS_CLOUD] Image generation error: ${message}`);\n throw error;\n }\n}\n\nexport async function handleImageDescription(\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n): Promise<{ title: string; description: string }> {\n // Honour `DISABLE_IMAGE_DESCRIPTION` (set by the runtime when\n // `features.vision === false`). The runtime exposes it via getSetting; some\n // hosts only set it in process.env. Check both before burning a quota slot.\n // The docs (`docs/runtime/core.md`) already promise this behaviour, but\n // historically only `plugin-discord` honoured it at the call site, leaving\n // every other caller (agent-orchestrator's task validator, vision, lifeops,\n // farcaster, telegram) free to spend the rate-limit budget.\n const disableSetting = getSetting(runtime, \"DISABLE_IMAGE_DESCRIPTION\", \"\");\n const disabled = [disableSetting, process.env.DISABLE_IMAGE_DESCRIPTION].some((value) => {\n const normalized = value?.trim().toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\";\n });\n if (disabled) {\n logger.debug(\"[ELIZAOS_CLOUD] IMAGE_DESCRIPTION skipped — DISABLE_IMAGE_DESCRIPTION is set\");\n return {\n title: \"Image description disabled\",\n description: \"Image description is disabled by configuration.\",\n };\n }\n\n let imageUrl: string;\n let promptText: string | undefined;\n const modelName = getImageDescriptionModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using IMAGE_DESCRIPTION model: ${modelName}`);\n const maxTokens = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS\", \"8192\") || \"8192\",\n 10\n );\n\n if (typeof params === \"string\") {\n imageUrl = params;\n promptText = \"Please analyze this image and provide a title and detailed description.\";\n } else {\n imageUrl = params.imageUrl;\n promptText =\n params.prompt || \"Please analyze this image and provide a title and detailed description.\";\n }\n\n const messages = [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: promptText },\n { type: \"image_url\", image_url: { url: imageUrl } },\n ],\n },\n ];\n\n const client = createElizaCloudClient(runtime);\n\n try {\n const requestBody: Record<string, unknown> = {\n model: modelName,\n messages: messages,\n max_tokens: maxTokens,\n };\n\n // On 429, honour the upstream's `retryAfter` instead of retrying on a\n // hardcoded backoff. Hardcoded retries inside the rate-limit window add\n // wasted requests to the same bucket and make the problem worse — see\n // #7374's billing render-loop fix and S33's dashboard 429-aware UX.\n // Strategy: only retry once, only if the upstream signals a short wait\n // (≤5s, i.e. transient burst). Anything longer, bail immediately and let\n // the caller fail fast.\n let response: Response | null = null;\n let attemptedRetry = false;\n for (let attempt = 0; attempt < 2; attempt++) {\n const attemptResponse = await client.routes.postApiV1ChatCompletionsRaw({\n json: requestBody,\n timeoutMs: resolveCloudTimeoutMs(\"ELIZAOS_CLOUD_IMAGE_TIMEOUT_MS\", 120_000),\n });\n if (!attemptResponse) {\n continue;\n }\n response = attemptResponse;\n if (attemptResponse.status !== 429 || attemptedRetry) break;\n\n // `Number(null) === 0`, so guard against a missing header before\n // calling `Number(...)` — otherwise the header path always wins with a\n // bogus `0` and the body fallback becomes unreachable.\n const headerValue = attemptResponse.headers.get(\"retry-after\");\n const headerRetryAfter =\n headerValue !== null && Number.isFinite(Number(headerValue))\n ? Number(headerValue)\n : undefined;\n let bodyRetryAfter: number | undefined;\n try {\n const peek = (await attemptResponse.clone().json()) as {\n retryAfter?: unknown;\n };\n bodyRetryAfter =\n typeof peek?.retryAfter === \"number\" && Number.isFinite(peek.retryAfter)\n ? peek.retryAfter\n : undefined;\n } catch {\n // Body wasn't JSON — fall through to header value.\n }\n const retryAfter = headerRetryAfter ?? bodyRetryAfter ?? 0;\n\n if (retryAfter > 0 && retryAfter <= 5) {\n logger.warn(\n `[ELIZAOS_CLOUD] Image analysis rate-limited (429), retrying once after ${retryAfter}s...`\n );\n await new Promise((r) => setTimeout(r, retryAfter * 1000));\n attemptedRetry = true;\n continue;\n }\n // Long rate-limit window: don't burn another bucket slot retrying inside it.\n logger.warn(\n `[ELIZAOS_CLOUD] Image analysis rate-limited (429); upstream retryAfter=${retryAfter || \"unknown\"}s — failing fast`\n );\n break;\n }\n\n if (!response) {\n throw new Error(\"ElizaOS Cloud API did not return a response\");\n }\n\n const finalResponse = response;\n\n if (!finalResponse.ok) {\n const status = finalResponse.status;\n if (status === 402) {\n throw new Error(\n \"Eliza Cloud credits exhausted — top up at https://www.elizacloud.ai/dashboard/settings?tab=billing\"\n );\n }\n if (status === 429) {\n throw new Error(\n \"Eliza Cloud rate limit exceeded for image description — try again in a minute\"\n );\n }\n throw new Error(`ElizaOS Cloud API error: ${status}`);\n }\n\n type OpenAIResponseType = {\n choices?: Array<{\n message?: { content?: string };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n };\n\n const typedResult = (await finalResponse.json()) as OpenAIResponseType;\n const content = typedResult.choices?.[0]?.message?.content;\n\n if (typedResult.usage) {\n emitModelUsageEvent(\n runtime,\n ModelType.IMAGE_DESCRIPTION,\n typeof params === \"string\" ? params : params.prompt || \"\",\n {\n inputTokens: typedResult.usage.prompt_tokens,\n outputTokens: typedResult.usage.completion_tokens,\n totalTokens: typedResult.usage.total_tokens,\n }\n );\n }\n\n if (!content) {\n return {\n title: \"Failed to analyze image\",\n description: \"No response from API\",\n };\n }\n\n return parseImageDescriptionResponse(content);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error analyzing image: ${message}`);\n return {\n title: \"Failed to analyze image\",\n description: `Error: ${message}`,\n };\n }\n}\n",
11
+ "/** Research model handler — calls /responses for deep-research models. */\n\nimport type {\n IAgentRuntime,\n ResearchAnnotation,\n ResearchOutputItem,\n ResearchParams,\n ResearchResult,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { getResearchModel, resolveCloudTimeoutMs } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\n// Deep research is a long-running, TURN-BLOCKING call; without a timeout a\n// stalled gateway hangs the turn forever (cloud-sdk applies no default). The\n// default is deliberately generous (10 min) so a legitimately slow run isn't\n// aborted; `ELIZAOS_CLOUD_RESEARCH_TIMEOUT_MS=0` opts out.\nconst DEFAULT_RESEARCH_TIMEOUT_MS = 600_000;\n\ninterface ResponsesAPIOutput {\n id: string;\n status: string;\n output: Array<{\n type: string;\n id?: string;\n status?: string;\n content?: Array<{\n type: string;\n text?: string;\n annotations?: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>;\n }>;\n action?: {\n type: string;\n query?: string;\n url?: string;\n };\n query?: string;\n results?: Array<{\n file_id: string;\n file_name: string;\n score: number;\n }>;\n code?: string;\n output?: string;\n server_label?: string;\n tool_name?: string;\n arguments?: Record<string, unknown>;\n result?: unknown;\n }>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n };\n}\n\ntype ResponsesAPIInput =\n | string\n | Array<{\n role: \"user\" | \"system\" | \"assistant\";\n content: Array<{\n type: \"input_text\";\n text: string;\n }>;\n }>;\n\nfunction normalizeInput(input: ResearchParams[\"input\"]): ResponsesAPIInput {\n if (typeof input !== \"string\") {\n return input as ResponsesAPIInput;\n }\n\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"input_text\",\n text: input,\n },\n ],\n },\n ];\n}\n\nfunction buildResearchApiError(status: number, errorText: string): Error {\n try {\n const parsed = JSON.parse(errorText) as {\n error?: { message?: string; param?: string; code?: string };\n };\n const message = parsed.error?.message;\n const param = parsed.error?.param;\n if (param === \"tools.0.type\" && message?.includes('expected \"function\"')) {\n return new Error(\n `Research API error: ${status} Eliza Cloud /responses rejected deep-research tool types; the provider currently only accepts function tools on this route`\n );\n }\n } catch {\n // Fall through to the raw error text.\n }\n\n return new Error(`Research API error: ${status} ${errorText}`);\n}\n\nfunction parseAnnotations(\n raw: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>\n): ResearchAnnotation[] {\n return raw\n .filter((a) => a.url !== undefined)\n .map((a) => ({\n url: a.url as string,\n title: a.title ?? \"\",\n startIndex: a.start_index ?? 0,\n endIndex: a.end_index ?? 0,\n }));\n}\n\nfunction parseOutputItems(raw: ResponsesAPIOutput[\"output\"]): ResearchOutputItem[] {\n const items: ResearchOutputItem[] = [];\n\n for (const item of raw) {\n switch (item.type) {\n case \"web_search_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"web_search_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n action: {\n type: (item.action?.type as \"search\" | \"open_page\" | \"find_in_page\") ?? \"search\",\n query: item.action?.query,\n url: item.action?.url,\n },\n });\n break;\n case \"file_search_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"file_search_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n query: item.query ?? \"\",\n results: item.results?.map((r) => ({\n fileId: r.file_id,\n fileName: r.file_name,\n score: r.score,\n })),\n });\n break;\n case \"code_interpreter_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"code_interpreter_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n code: item.code ?? \"\",\n output: item.output,\n });\n break;\n case \"mcp_tool_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"mcp_tool_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n serverLabel: item.server_label ?? \"\",\n toolName: item.tool_name ?? \"\",\n arguments: (item.arguments ?? {}) as Record<string, import(\"@elizaos/core\").JsonValue>,\n result: item.result as import(\"@elizaos/core\").JsonValue | undefined,\n });\n break;\n case \"message\": {\n const content = item.content ?? [];\n items.push({\n type: \"message\",\n content: content\n .filter((c) => c.type === \"output_text\")\n .map((c) => ({\n type: \"output_text\" as const,\n text: c.text ?? \"\",\n annotations: parseAnnotations(c.annotations ?? []),\n })),\n });\n break;\n }\n }\n }\n\n return items;\n}\n\nexport async function handleResearch(\n runtime: IAgentRuntime,\n params: ResearchParams\n): Promise<ResearchResult> {\n const modelName = params.model ?? getResearchModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using RESEARCH model: ${modelName}`);\n\n const tools = params.tools ?? [{ type: \"web_search_preview\" }];\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input: normalizeInput(params.input),\n tools: tools,\n };\n\n if (params.instructions) {\n requestBody.instructions = params.instructions;\n }\n if (params.background !== undefined) {\n requestBody.background = params.background;\n }\n if (params.maxToolCalls !== undefined) {\n requestBody.max_tool_calls = params.maxToolCalls;\n }\n if (params.reasoningSummary) {\n requestBody.reasoning = { summary: params.reasoningSummary };\n }\n\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n json: requestBody,\n timeoutMs: resolveCloudTimeoutMs(\n \"ELIZAOS_CLOUD_RESEARCH_TIMEOUT_MS\",\n DEFAULT_RESEARCH_TIMEOUT_MS\n ),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw buildResearchApiError(response.status, errorText);\n }\n\n const data = (await response.json()) as ResponsesAPIOutput;\n\n if (data.usage) {\n emitModelUsageEvent(runtime, ModelType.RESEARCH, params.input, {\n inputTokens: data.usage.input_tokens,\n outputTokens: data.usage.output_tokens,\n totalTokens: data.usage.total_tokens,\n });\n }\n\n const outputItems = parseOutputItems(data.output);\n\n // Extract final text and annotations from the last message output\n let text = \"\";\n const annotations: ResearchAnnotation[] = [];\n\n for (const item of outputItems) {\n if (item.type === \"message\") {\n for (const content of item.content) {\n if (content.type === \"output_text\") {\n text += content.text;\n annotations.push(...content.annotations);\n }\n }\n }\n }\n\n return {\n id: data.id,\n text,\n annotations,\n outputItems,\n status: data.status as ResearchResult[\"status\"],\n };\n}\n",
12
+ "import type { Readable } from \"node:stream\";\nimport type { AudioStreamResult, IAgentRuntime } from \"@elizaos/core\";\nimport { isCloudConnected, logger, toRuntimeSettings } from \"@elizaos/core\";\nimport type { OpenAITextToSpeechParams } from \"../types\";\nimport { getSetting, isBrowser, resolveCloudTimeoutMs } from \"../utils/config\";\nimport { webStreamToNodeStream } from \"../utils/helpers\";\nimport { createElizaCloudClient } from \"../utils/sdk-client\";\n\n/**\n * Narrow client interface the speech handler actually exercises. Lets tests\n * substitute a fake without rebuilding the full SDK surface.\n */\nexport interface CloudTtsClient {\n routes: {\n postApiV1VoiceTts<T = unknown>(options: {\n headers?: Record<string, unknown>;\n json: { text: string; voiceId?: string; modelId?: string };\n timeoutMs?: number;\n }): Promise<T>;\n };\n}\n\ntype CloudTtsClientFactory = (runtime: IAgentRuntime) => CloudTtsClient;\n\nlet cloudTtsClientFactory: CloudTtsClientFactory = (runtime) =>\n createElizaCloudClient(runtime) as unknown as CloudTtsClient;\n\n/**\n * Test seam: substitute the SDK client factory used by `handleTextToSpeech`.\n * Pass `null` to reset to the real `createElizaCloudClient`. Production code\n * should never call this.\n */\nexport function setCloudTtsClientFactoryForTesting(\n factory: CloudTtsClientFactory | null,\n): void {\n if (factory === null) {\n cloudTtsClientFactory = (runtime) =>\n createElizaCloudClient(runtime) as unknown as CloudTtsClient;\n } else {\n cloudTtsClientFactory = factory;\n }\n}\n\n/**\n * Extended TTS params accepted by the cloud handler.\n *\n * The runtime canonical type (`TextToSpeechParams`) only carries `text`, but\n * the cloud TTS upstream maps to ElevenLabs and therefore accepts arbitrary\n * ElevenLabs `voiceId` + `modelId`. We accept those via either OpenAI-style\n * (`voice`, `model`) or ElevenLabs-style (`voiceId`, `modelId`) fields and\n * normalize them to the upstream shape.\n */\nexport interface CloudTextToSpeechParams extends OpenAITextToSpeechParams {\n voiceId?: string;\n modelId?: string;\n}\n\n/**\n * Marker error used so the runtime can fall through to the next TTS handler\n * (e.g. local omnivoice) when Eliza Cloud is not connected.\n */\nexport class CloudTtsUnavailableError extends Error {\n constructor(message = \"Eliza Cloud is not connected\") {\n super(message);\n this.name = \"CloudTtsUnavailableError\";\n }\n}\n\nfunction normalizeTextInput(\n input: string | CloudTextToSpeechParams | OpenAITextToSpeechParams,\n): CloudTextToSpeechParams {\n if (typeof input === \"string\") return { text: input };\n return input as CloudTextToSpeechParams;\n}\n\n/**\n * Pull an ElevenLabs `modelId` out of (in order):\n * 1. options.modelId — explicit ElevenLabs model id\n * 2. options.model with `elevenlabs/` prefix or `eleven_*` shape\n *\n * Returns `undefined` when nothing usable was provided so the upstream\n * can apply its own default (currently `eleven_flash_v2_5`).\n */\nfunction resolveModelId(\n options: CloudTextToSpeechParams,\n): string | undefined {\n if (options.modelId && options.modelId.trim()) {\n return options.modelId.trim();\n }\n const model = options.model?.trim();\n if (!model) return undefined;\n if (model.startsWith(\"elevenlabs/\")) {\n return model.split(\"/\").slice(1).join(\"/\");\n }\n if (model.startsWith(\"eleven_\")) {\n return model;\n }\n return undefined;\n}\n\n/**\n * Pull an ElevenLabs `voiceId` out of (in order):\n * 1. options.voiceId — explicit ElevenLabs voice id (preferred)\n * 2. options.voice — OpenAI-style voice name (rejected unless it looks\n * like an ElevenLabs id, i.e. neither an OpenAI alias nor \"nova\")\n *\n * Returns `undefined` when nothing usable was provided so the upstream\n * can apply its own default voice.\n */\nfunction resolveVoiceId(\n options: CloudTextToSpeechParams,\n): string | undefined {\n if (options.voiceId && options.voiceId.trim()) {\n return options.voiceId.trim();\n }\n const voice = options.voice?.trim();\n if (!voice) return undefined;\n // \"nova\" is the OpenAI default — treat as unset so the upstream falls back\n // to the cloud default voice instead of being forwarded as an opaque alias.\n if (voice === \"nova\") return undefined;\n return voice;\n}\n\nasync function fetchTextToSpeech(\n runtime: IAgentRuntime,\n options: CloudTextToSpeechParams,\n): Promise<ReadableStream<Uint8Array> | Readable> {\n const format = options.format || \"mp3\";\n const modelId = resolveModelId(options);\n const voiceId = resolveVoiceId(options);\n\n try {\n const res = (await cloudTtsClientFactory(runtime).routes.postApiV1VoiceTts({\n headers: {\n ...(format === \"mp3\" ? { Accept: \"audio/mpeg\" } : {}),\n },\n json: {\n text: options.text,\n ...(voiceId ? { voiceId } : {}),\n ...(modelId ? { modelId } : {}),\n },\n timeoutMs: resolveCloudTimeoutMs(\"ELIZAOS_CLOUD_TTS_TIMEOUT_MS\", 60_000),\n })) as Response;\n\n if (!res.ok) {\n const err = await res.text();\n throw new Error(`ElizaOS Cloud TTS error ${res.status}: ${err}`);\n }\n\n if (!res.body) {\n throw new Error(\"ElizaOS Cloud TTS response body is null\");\n }\n\n if (!isBrowser()) {\n return await webStreamToNodeStream(res.body);\n }\n\n return res.body;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to fetch speech from ElizaOS Cloud TTS: ${message}`);\n }\n}\n\nfunction toUint8Array(chunk: unknown): Uint8Array {\n if (chunk instanceof Uint8Array) return chunk;\n if (chunk instanceof ArrayBuffer) return new Uint8Array(chunk);\n if (typeof chunk === \"string\") return new TextEncoder().encode(chunk);\n throw new TypeError(`Unexpected TTS chunk type: ${typeof chunk}`);\n}\n\nfunction concatChunks(chunks: Uint8Array[]): Uint8Array {\n const total = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return out;\n}\n\nasync function webStreamToUint8Array(\n stream: ReadableStream<Uint8Array>,\n): Promise<Uint8Array> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n chunks.push(toUint8Array(result.value));\n }\n } finally {\n reader.releaseLock();\n }\n return concatChunks(chunks);\n}\n\nasync function nodeStreamToUint8Array(stream: Readable): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n for await (const chunk of stream) {\n chunks.push(toUint8Array(chunk));\n }\n return concatChunks(chunks);\n}\n\nfunction isReadableStream(\n stream: ReadableStream<Uint8Array> | Readable,\n): stream is ReadableStream<Uint8Array> {\n return typeof (stream as { getReader?: unknown }).getReader === \"function\";\n}\n\nasync function ttsStreamToBytes(\n stream: ReadableStream<Uint8Array> | Readable,\n): Promise<Uint8Array> {\n if (isReadableStream(stream)) {\n return webStreamToUint8Array(stream);\n }\n return nodeStreamToUint8Array(stream);\n}\n\n/**\n * Wrap the upstream TTS byte stream as an {@link AudioStreamResult}: `audioStream`\n * yields each chunk as it arrives (so playback can start on the first byte\n * instead of draining the whole clip via {@link ttsStreamToBytes}), and `bytes`\n * resolves to the full concatenated audio once the stream is consumed.\n */\nfunction buildAudioStreamResult(\n stream: ReadableStream<Uint8Array> | Readable,\n mimeType: string,\n): AudioStreamResult {\n const collected: Uint8Array[] = [];\n let resolveBytes!: (value: Uint8Array) => void;\n let rejectBytes!: (reason: unknown) => void;\n const bytes = new Promise<Uint8Array>((resolve, reject) => {\n resolveBytes = resolve;\n rejectBytes = reject;\n });\n async function* generate(): AsyncGenerator<Uint8Array> {\n try {\n if (isReadableStream(stream)) {\n const reader = stream.getReader();\n try {\n for (;;) {\n const { value, done } = await reader.read();\n if (done) break;\n const chunk = toUint8Array(value);\n collected.push(chunk);\n yield chunk;\n }\n } finally {\n reader.releaseLock();\n }\n } else {\n for await (const value of stream) {\n const chunk = toUint8Array(value);\n collected.push(chunk);\n yield chunk;\n }\n }\n resolveBytes(concatChunks(collected));\n } catch (err) {\n rejectBytes(err);\n throw err;\n }\n }\n return { audioStream: generate(), bytes, mimeType };\n}\n\n/**\n * TEXT_TO_SPEECH handler for plugin-elizacloud.\n *\n * Behavior:\n * - When Eliza Cloud is **not** connected, throws `CloudTtsUnavailableError`\n * so the runtime's model-handler fallback chain can pick the next\n * provider (e.g. local omnivoice, ElevenLabs direct, etc.).\n * - When connected, forwards `text`, `voiceId`, and `modelId` to the\n * upstream cloud TTS proxy and returns the audio stream.\n *\n * Accepts both OpenAI-style (`voice` / `model`) and ElevenLabs-style\n * (`voiceId` / `modelId`) input fields. ElevenLabs-style wins when both are\n * present.\n */\nexport async function handleTextToSpeech(\n runtime: IAgentRuntime,\n input: string | CloudTextToSpeechParams | OpenAITextToSpeechParams,\n): Promise<Uint8Array | AudioStreamResult> {\n if (!isCloudConnected(toRuntimeSettings(runtime))) {\n throw new CloudTtsUnavailableError(\n \"Eliza Cloud is not connected — falling through to next TTS handler\",\n );\n }\n\n const options = normalizeTextInput(input);\n // Explicit opt-in only (NOT the generic `stream` that useModel auto-injects\n // from an ambient text-streaming turn) so byte-expecting callers like the\n // GENERATE_MEDIA action keep getting a buffer.\n const wantsStream =\n typeof input === \"object\" &&\n input !== null &&\n (input as { audioStream?: boolean }).audioStream === true;\n\n const resolvedModel =\n options.modelId ||\n options.model ||\n (getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"eleven_flash_v2_5\") as string);\n logger.log(`[ELIZAOS_CLOUD] Using TEXT_TO_SPEECH model: ${resolvedModel}`);\n try {\n const speechStream = await fetchTextToSpeech(runtime, options);\n if (wantsStream) {\n const format = options.format || \"mp3\";\n const mimeType = format === \"mp3\" ? \"audio/mpeg\" : `audio/${format}`;\n return buildAudioStreamResult(speechStream, mimeType);\n }\n return ttsStreamToBytes(speechStream);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in TEXT_TO_SPEECH: ${message}`);\n throw error;\n }\n}\n\nexport { fetchTextToSpeech };\n",
14
13
  "type JsonRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): JsonRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as JsonRecord;\n}\n\nfunction normalizeContentItems(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") return [{ type: \"text\", text: value }];\n return value && typeof value === \"object\" ? [value] : [];\n}\n\nfunction extractTextFromContentItem(value: unknown): string[] {\n if (typeof value === \"string\") {\n return [value];\n }\n\n const record = asRecord(value);\n if (!record) return [];\n\n const text =\n typeof record.text === \"string\"\n ? record.text\n : typeof record.output_text === \"string\"\n ? record.output_text\n : typeof record.content === \"string\"\n ? record.content\n : \"\";\n const type = typeof record.type === \"string\" ? record.type : undefined;\n\n if (text && (!type || type === \"output_text\" || type === \"text\")) {\n return [text];\n }\n\n return [];\n}\n\nfunction extractTextFromOutputItem(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) return [];\n\n const directContent = normalizeContentItems(record.content);\n if (directContent.length > 0) {\n return directContent.flatMap(extractTextFromContentItem);\n }\n\n const nestedMessage = asRecord(record.message);\n if (nestedMessage) {\n return normalizeContentItems(nestedMessage.content).flatMap(extractTextFromContentItem);\n }\n\n const type = typeof record.type === \"string\" ? record.type : undefined;\n const text =\n typeof record.text === \"string\"\n ? record.text\n : typeof record.output_text === \"string\"\n ? record.output_text\n : \"\";\n if (text && (type === \"output_text\" || type === \"text\")) {\n return [text];\n }\n\n return [];\n}\n\nfunction extractTextFromChoice(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) return [];\n\n if (typeof record.text === \"string\" && record.text) {\n return [record.text];\n }\n\n const message = asRecord(record.message);\n if (!message) {\n return [];\n }\n\n return normalizeContentItems(message.content).flatMap(extractTextFromContentItem);\n}\n\n/**\n * Recover text from Responses-style payloads, tolerating both the documented\n * `output_text` field and the common structured `output` item variants.\n *\n * Cloud responses sometimes carry the same body in BOTH `output_text` AND\n * `output[]`/`choices[]`. Joining segments in that case duplicates the model\n * output downstream (caller sees `…json{…}\\n``````json{…}…`), which then\n * trips JSON.parse with \"Unrecognized token '`'\" because of the run of\n * backticks where the two copies meet. Prefer the first non-empty source\n * instead of joining.\n */\nexport function extractResponsesOutputText(data: unknown): string {\n const record = asRecord(data);\n if (!record) return \"\";\n\n if (typeof record.output_text === \"string\" && record.output_text.trim()) {\n return record.output_text;\n }\n\n if (Array.isArray(record.output)) {\n const fromOutput = record.output.flatMap(extractTextFromOutputItem).join(\"\");\n if (fromOutput.trim()) return fromOutput;\n }\n\n if (Array.isArray(record.choices)) {\n const fromChoices = record.choices.flatMap(extractTextFromChoice).join(\"\");\n if (fromChoices.trim()) return fromChoices;\n }\n\n return \"\";\n}\n",
15
- "import type {\n GenerateTextParams,\n IAgentRuntime,\n ModelTypeName,\n TextStreamResult,\n} from \"@elizaos/core\";\nimport {\n buildCanonicalSystemPrompt,\n logger,\n ModelType,\n renderChatMessagesForPrompt,\n resolveEffectiveSystemPrompt,\n} from \"@elizaos/core\";\nimport type { LanguageModel } from \"ai\";\nimport { createOpenAIClient } from \"../providers/openai\";\nimport {\n getActionPlannerModel,\n getExperimentalTelemetry,\n getLargeModel,\n getMediumModel,\n getMegaModel,\n getNanoModel,\n getResponseHandlerModel,\n getSmallModel,\n} from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { extractResponsesOutputText } from \"../utils/responses-output\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst TEXT_NANO_MODEL_TYPE = (ModelType.TEXT_NANO ?? \"TEXT_NANO\") as ModelTypeName;\nconst TEXT_MEDIUM_MODEL_TYPE = (ModelType.TEXT_MEDIUM ?? \"TEXT_MEDIUM\") as ModelTypeName;\nconst TEXT_SMALL_MODEL_TYPE = ModelType.TEXT_SMALL;\nconst TEXT_LARGE_MODEL_TYPE = ModelType.TEXT_LARGE;\nconst TEXT_MEGA_MODEL_TYPE = (ModelType.TEXT_MEGA ?? \"TEXT_MEGA\") as ModelTypeName;\nconst RESPONSE_HANDLER_MODEL_TYPE = (ModelType.RESPONSE_HANDLER ??\n \"RESPONSE_HANDLER\") as ModelTypeName;\nconst ACTION_PLANNER_MODEL_TYPE = (ModelType.ACTION_PLANNER ?? \"ACTION_PLANNER\") as ModelTypeName;\n\ntype ResponsesApiResponse = Record<string, unknown> & {\n error?: {\n message?: string;\n };\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n } & Record<string, unknown>;\n};\n\n/**\n * Models that are known to be reasoning-class and don't support temperature.\n * These are models that use chain-of-thought internally and reject\n */\nconst REASONING_MODEL_PATTERNS = [\n \"o1\",\n \"o3\",\n \"o4\",\n \"deepseek-r1\",\n \"deepseek-reasoner\",\n \"claude-opus-4.7\",\n \"claude-opus-4-7\",\n \"gpt-5\",\n] as const;\nconst RESPONSES_ROUTED_PREFIXES = [\"openai/\", \"anthropic/\"] as const;\ntype ChatAttachment = {\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n};\n\ntype GenerateTextParamsWithAttachments = GenerateTextParams & {\n attachments?: ChatAttachment[];\n};\n\ntype GenerateTextParamsWithNativeOptions = GenerateTextParamsWithAttachments & {\n messages?: unknown[];\n tools?: unknown;\n toolChoice?: unknown;\n responseSchema?: unknown;\n providerOptions?: Record<string, unknown>;\n};\n\ntype NativeTokenUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n cacheReadInputTokens?: number;\n cacheCreationInputTokens?: number;\n};\n\ntype NativeGenerateTextResult = {\n text: string;\n toolCalls: unknown[];\n finishReason?: string;\n usage?: NativeTokenUsage;\n providerMetadata?: unknown;\n};\n\ntype NativeGenerateTextModelResult = NativeGenerateTextResult & string;\n\ntype NativeToolCall = {\n type: \"tool-call\";\n toolCallId: string;\n toolName: string;\n input: unknown;\n};\n\ntype ChatCompletionsResponse = Record<string, unknown> & {\n error?: {\n message?: string;\n };\n choices?: Array<{\n text?: string;\n finish_reason?: string;\n message?: {\n content?: unknown;\n tool_calls?: unknown[];\n };\n }>;\n usage?: Record<string, unknown>;\n};\n\nfunction buildUserContent(params: GenerateTextParamsWithAttachments) {\n const content: Array<\n | { type: \"text\"; text: string }\n | {\n type: \"file\";\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n }\n > = [{ type: \"text\", text: params.prompt ?? \"\" }];\n\n for (const attachment of params.attachments ?? []) {\n content.push({\n type: \"file\",\n data: attachment.data,\n mediaType: attachment.mediaType,\n ...(attachment.filename ? { filename: attachment.filename } : {}),\n });\n }\n\n return content;\n}\n\nfunction isReasoningModel(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return REASONING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));\n}\n\nfunction supportsStopSequences(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return !RESPONSES_ROUTED_PREFIXES.some((prefix) => lower.startsWith(prefix));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction recordAt(value: Record<string, unknown>, key: string): Record<string, unknown> {\n return asRecord(value[key]);\n}\n\nfunction firstString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nfunction firstNumber(...values: unknown[]): number | undefined {\n for (const value of values) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n }\n return undefined;\n}\n\nfunction parseJsonIfPossible(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value ?? {};\n }\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n}\n\nfunction stringifyMessageContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n if (content == null) {\n return \"\";\n }\n return typeof content === \"object\" ? JSON.stringify(content) : String(content);\n}\n\nfunction hasNativeTransportOptions(params: GenerateTextParamsWithNativeOptions): boolean {\n return Boolean(\n params.messages ||\n params.tools ||\n params.toolChoice ||\n params.responseSchema ||\n params.providerOptions\n );\n}\n\nfunction shouldReturnNativeResult(params: GenerateTextParamsWithNativeOptions): boolean {\n return Boolean(params.messages || params.tools || params.toolChoice || params.responseSchema);\n}\n\nfunction buildNativeMessages(\n params: GenerateTextParamsWithNativeOptions,\n promptText: string,\n systemPrompt?: string\n): Array<Record<string, unknown>> {\n if (Array.isArray(params.messages) && params.messages.length > 0) {\n const messages = params.messages.map((message) =>\n isRecord(message)\n ? { ...message }\n : { role: \"user\", content: stringifyMessageContent(message) }\n );\n const first = asRecord(messages[0]);\n if (systemPrompt && first.role !== \"system\") {\n return [{ role: \"system\", content: systemPrompt }, ...messages];\n }\n return messages;\n }\n\n const messages: Array<Record<string, unknown>> = [];\n if (systemPrompt) {\n messages.push({ role: \"system\", content: systemPrompt });\n }\n messages.push({ role: \"user\", content: promptText });\n return messages;\n}\n\nfunction unwrapJsonSchema(value: unknown): unknown {\n const record = asRecord(value);\n return record.schema ?? record.jsonSchema ?? value;\n}\n\nfunction normalizeNativeTools(tools: unknown): unknown[] | undefined {\n if (!tools) {\n return undefined;\n }\n\n if (Array.isArray(tools)) {\n return tools;\n }\n\n const toolSet = asRecord(tools);\n const normalized: unknown[] = [];\n for (const [name, rawTool] of Object.entries(toolSet)) {\n const tool = asRecord(rawTool);\n const inputSchema = unwrapJsonSchema(\n tool.inputSchema ?? tool.parameters ?? tool.schema ?? { type: \"object\" }\n );\n normalized.push({\n type: \"function\",\n function: {\n name,\n ...(typeof tool.description === \"string\" ? { description: tool.description } : {}),\n parameters: inputSchema,\n },\n });\n }\n\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeNativeToolChoice(toolChoice: unknown): unknown {\n if (!toolChoice) {\n return undefined;\n }\n\n if (\n typeof toolChoice === \"string\" &&\n (toolChoice === \"auto\" || toolChoice === \"none\" || toolChoice === \"required\")\n ) {\n return toolChoice;\n }\n\n const choice = asRecord(toolChoice);\n if (choice.type === \"function\") {\n return toolChoice;\n }\n if (choice.type === \"tool\") {\n const toolName = firstString(choice.toolName, choice.name);\n return toolName ? { type: \"function\", function: { name: toolName } } : toolChoice;\n }\n\n const functionChoice = asRecord(choice.function);\n const toolName = firstString(choice.toolName, choice.name, functionChoice.name);\n return toolName ? { type: \"function\", function: { name: toolName } } : toolChoice;\n}\n\nfunction buildNativeResponseFormat(responseSchema: unknown): unknown {\n if (!responseSchema) {\n return undefined;\n }\n\n const schemaRecord = asRecord(responseSchema);\n if (schemaRecord.responseFormat) {\n return schemaRecord.responseFormat;\n }\n\n const schemaOptions =\n \"schema\" in schemaRecord\n ? {\n schema: schemaRecord.schema,\n name: firstString(schemaRecord.name) ?? \"structured_response\",\n description: firstString(schemaRecord.description),\n }\n : { schema: responseSchema, name: \"structured_response\", description: undefined };\n\n return {\n type: \"json_schema\",\n json_schema: {\n name: schemaOptions.name,\n ...(schemaOptions.description ? { description: schemaOptions.description } : {}),\n schema: schemaOptions.schema,\n },\n };\n}\n\nfunction resolvePromptCacheKey(providerOptions: Record<string, unknown>): string | undefined {\n const eliza = recordAt(providerOptions, \"eliza\");\n const openrouter = recordAt(providerOptions, \"openrouter\");\n const openai = recordAt(providerOptions, \"openai\");\n const cerebras = recordAt(providerOptions, \"cerebras\");\n\n return firstString(\n providerOptions.promptCacheKey,\n providerOptions.prompt_cache_key,\n eliza.promptCacheKey,\n eliza.prompt_cache_key,\n openrouter.promptCacheKey,\n openrouter.prompt_cache_key,\n openai.promptCacheKey,\n openai.prompt_cache_key,\n cerebras.promptCacheKey,\n cerebras.prompt_cache_key\n );\n}\n\nfunction resolveNativeProviderOptions(\n params: GenerateTextParamsWithNativeOptions\n): Record<string, unknown> | undefined {\n const raw = asRecord(params.providerOptions);\n if (Object.keys(raw).length === 0) {\n return undefined;\n }\n\n const { agentName: _agentName, eliza: _eliza, ...rest } = raw;\n const providerOptions: Record<string, unknown> = { ...rest };\n const promptCacheKey = resolvePromptCacheKey(raw);\n\n if (promptCacheKey) {\n providerOptions.openai = {\n ...recordAt(providerOptions, \"openai\"),\n promptCacheKey,\n prompt_cache_key: promptCacheKey,\n };\n providerOptions.openrouter = {\n ...recordAt(providerOptions, \"openrouter\"),\n promptCacheKey,\n prompt_cache_key: promptCacheKey,\n };\n providerOptions.cerebras = {\n ...recordAt(providerOptions, \"cerebras\"),\n prompt_cache_key: promptCacheKey,\n };\n }\n\n return Object.keys(providerOptions).length > 0 ? providerOptions : undefined;\n}\n\nfunction applyOpenRouterPassthroughFields(\n requestBody: Record<string, unknown>,\n providerOptions: Record<string, unknown> | undefined\n): void {\n if (!providerOptions) {\n return;\n }\n\n const openrouter = recordAt(providerOptions, \"openrouter\");\n if (Object.keys(openrouter).length > 0) {\n const provider = openrouter.provider;\n if (provider !== undefined) {\n requestBody.provider = provider;\n }\n for (const key of [\"models\", \"route\", \"transforms\", \"reasoning\"] as const) {\n if (openrouter[key] !== undefined) {\n requestBody[key] = openrouter[key];\n }\n }\n }\n\n const gateway = providerOptions.gateway;\n if (gateway !== undefined) {\n requestBody.gateway = gateway;\n }\n}\n\nfunction buildNativeRequestBody(\n params: GenerateTextParamsWithNativeOptions,\n modelName: string,\n promptText: string,\n systemPrompt?: string\n): Record<string, unknown> {\n const providerOptions = resolveNativeProviderOptions(params);\n const promptCacheKey = providerOptions ? resolvePromptCacheKey(providerOptions) : undefined;\n const tools = normalizeNativeTools(params.tools);\n const toolChoice = normalizeNativeToolChoice(params.toolChoice);\n const responseFormat = buildNativeResponseFormat(params.responseSchema);\n const requestBody: Record<string, unknown> = {\n model: modelName,\n messages: buildNativeMessages(params, promptText, systemPrompt),\n max_tokens: params.maxTokens ?? 8192,\n };\n\n if (!isReasoningModel(modelName) && typeof params.temperature === \"number\") {\n requestBody.temperature = params.temperature;\n }\n if (tools) {\n requestBody.tools = tools;\n }\n if (toolChoice) {\n requestBody.tool_choice = toolChoice;\n }\n if (responseFormat) {\n requestBody.response_format = responseFormat;\n }\n if (providerOptions) {\n requestBody.providerOptions = providerOptions;\n requestBody.provider_options = providerOptions;\n }\n if (promptCacheKey) {\n requestBody.promptCacheKey = promptCacheKey;\n requestBody.prompt_cache_key = promptCacheKey;\n }\n\n applyOpenRouterPassthroughFields(requestBody, providerOptions);\n return requestBody;\n}\n\nfunction extractTextFromContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n if (!Array.isArray(content)) {\n return \"\";\n }\n return content\n .map((item) => {\n if (typeof item === \"string\") return item;\n const record = asRecord(item);\n return firstString(record.text, record.output_text, record.content) ?? \"\";\n })\n .join(\"\");\n}\n\nfunction extractChatCompletionText(data: ChatCompletionsResponse): string {\n const firstChoice = data.choices?.[0];\n if (!firstChoice) {\n return \"\";\n }\n return firstString(firstChoice.text, extractTextFromContent(firstChoice.message?.content)) ?? \"\";\n}\n\nfunction extractNativeToolCalls(data: ChatCompletionsResponse): NativeToolCall[] {\n const rawCalls = data.choices?.[0]?.message?.tool_calls ?? [];\n if (!Array.isArray(rawCalls)) {\n return [];\n }\n\n return rawCalls\n .map<NativeToolCall | undefined>((rawCall) => {\n const call = asRecord(rawCall);\n const fn = recordAt(call, \"function\");\n const toolName = firstString(call.name, call.toolName, fn.name);\n if (!toolName) {\n return undefined;\n }\n return {\n type: \"tool-call\",\n toolCallId: firstString(call.id, call.toolCallId) ?? `call_${toolName}`,\n toolName,\n input: parseJsonIfPossible(call.input ?? call.arguments ?? fn.arguments ?? {}),\n };\n })\n .filter((call): call is NativeToolCall => call !== undefined);\n}\n\nfunction convertNativeUsage(usage: unknown): NativeTokenUsage | undefined {\n const root = asRecord(usage);\n if (Object.keys(root).length === 0) {\n return undefined;\n }\n\n const inputTokenDetails = recordAt(root, \"inputTokenDetails\");\n const promptTokenDetails = recordAt(root, \"prompt_tokens_details\");\n const inputTokenDetailsSnake = recordAt(root, \"input_tokens_details\");\n const promptTokens =\n firstNumber(root.inputTokens, root.input_tokens, root.promptTokens, root.prompt_tokens) ?? 0;\n const completionTokens =\n firstNumber(\n root.outputTokens,\n root.output_tokens,\n root.completionTokens,\n root.completion_tokens\n ) ?? 0;\n const cacheReadInputTokens = firstNumber(\n root.cacheReadInputTokens,\n root.cache_read_input_tokens,\n root.cachedInputTokens,\n root.cached_input_tokens,\n root.cachedTokens,\n root.cached_tokens,\n inputTokenDetails.cacheReadTokens,\n inputTokenDetails.cachedInputTokens,\n inputTokenDetails.cachedTokens,\n promptTokenDetails.cached_tokens,\n inputTokenDetailsSnake.cache_read_input_tokens,\n inputTokenDetailsSnake.cached_tokens\n );\n const cacheCreationInputTokens = firstNumber(\n root.cacheCreationInputTokens,\n root.cache_creation_input_tokens,\n root.cacheWriteInputTokens,\n root.cache_write_input_tokens,\n inputTokenDetails.cacheCreationInputTokens,\n inputTokenDetails.cacheCreationTokens,\n inputTokenDetails.cacheWriteTokens,\n inputTokenDetailsSnake.cache_creation_input_tokens\n );\n\n return {\n promptTokens,\n completionTokens,\n totalTokens:\n firstNumber(root.totalTokens, root.total_tokens) ?? promptTokens + completionTokens,\n cachedPromptTokens: cacheReadInputTokens,\n cacheReadInputTokens,\n cacheCreationInputTokens,\n };\n}\n\ntype TextModelType =\n | typeof TEXT_NANO_MODEL_TYPE\n | typeof TEXT_MEDIUM_MODEL_TYPE\n | typeof TEXT_SMALL_MODEL_TYPE\n | typeof TEXT_LARGE_MODEL_TYPE\n | typeof TEXT_MEGA_MODEL_TYPE\n | typeof RESPONSE_HANDLER_MODEL_TYPE\n | typeof ACTION_PLANNER_MODEL_TYPE;\n\nfunction getPurposeForModelType(modelType: TextModelType): string {\n switch (modelType) {\n case RESPONSE_HANDLER_MODEL_TYPE:\n return \"should_respond\";\n case ACTION_PLANNER_MODEL_TYPE:\n return \"action_planner\";\n default:\n return \"response\";\n }\n}\n\nfunction getModelNameForType(runtime: IAgentRuntime, modelType: TextModelType): string {\n switch (modelType) {\n case TEXT_NANO_MODEL_TYPE:\n return getNanoModel(runtime);\n case TEXT_MEDIUM_MODEL_TYPE:\n return getMediumModel(runtime);\n case TEXT_SMALL_MODEL_TYPE:\n return getSmallModel(runtime);\n case TEXT_LARGE_MODEL_TYPE:\n return getLargeModel(runtime);\n case TEXT_MEGA_MODEL_TYPE:\n return getMegaModel(runtime);\n case RESPONSE_HANDLER_MODEL_TYPE:\n return getResponseHandlerModel(runtime);\n case ACTION_PLANNER_MODEL_TYPE:\n return getActionPlannerModel(runtime);\n default:\n return getLargeModel(runtime);\n }\n}\n\nfunction buildGenerateParams(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n) {\n const paramsWithAttachments = params as GenerateTextParamsWithAttachments;\n const prompt = params.prompt ?? \"\";\n const maxTokens = params.maxTokens ?? 8192;\n\n const openai = createOpenAIClient(runtime);\n const modelName = getModelNameForType(runtime, modelType);\n const experimentalTelemetry = getExperimentalTelemetry(runtime);\n const userContent =\n (paramsWithAttachments.attachments?.length ?? 0) > 0\n ? buildUserContent(paramsWithAttachments)\n : undefined;\n\n // Use openai.chat() (Chat Completions API) instead of openai.languageModel()\n // (Responses API). The Responses API unconditionally rejects presencePenalty,\n // frequencyPenalty, and stopSequences for ALL models, emitting noisy warnings.\n // The Chat Completions API supports these features natively and handles\n // reasoning models gracefully when the params are omitted.\n const model = openai.chat(modelName) as LanguageModel;\n\n // Reasoning models don't support temperature, frequency/presence penalties,\n // or stopSequences. Detect via model name patterns.\n const reasoning = isReasoningModel(modelName);\n const stopSequences =\n !reasoning &&\n supportsStopSequences(modelName) &&\n Array.isArray(params.stopSequences) &&\n params.stopSequences.length > 0\n ? params.stopSequences\n : undefined;\n const systemPrompt = resolveEffectiveSystemPrompt({\n params,\n fallback: buildCanonicalSystemPrompt({ character: runtime.character }),\n });\n const promptText =\n renderChatMessagesForPrompt(params.messages, {\n omitDuplicateSystem: systemPrompt,\n }) ?? prompt;\n\n const generateParams = {\n model,\n ...(userContent\n ? { messages: [{ role: \"user\" as const, content: userContent }] }\n : { prompt: promptText }),\n system: systemPrompt,\n ...(stopSequences ? { stopSequences } : {}),\n maxOutputTokens: maxTokens,\n experimental_telemetry: {\n isEnabled: experimentalTelemetry,\n },\n };\n\n return { generateParams, modelName, modelType, prompt: promptText, systemPrompt };\n}\n\nasync function generateTextWithModel(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n const { modelName, prompt, systemPrompt } = buildGenerateParams(runtime, modelType, params);\n const paramsWithNative = params as GenerateTextParamsWithNativeOptions;\n\n logger.debug(`[ELIZAOS_CLOUD] Generating text with ${modelType} model: ${modelName}`);\n\n if (params.stream) {\n logger.debug(\n \"[ELIZAOS_CLOUD] Streaming text disabled for responses compatibility; falling back to buffered response.\"\n );\n }\n\n logger.log(`[ELIZAOS_CLOUD] Using ${modelType} model: ${modelName}`);\n logger.log(prompt);\n\n if (hasNativeTransportOptions(paramsWithNative)) {\n const nativeResult = await generateNativeChatCompletion(runtime, modelType, paramsWithNative, {\n modelName,\n prompt,\n systemPrompt,\n });\n return shouldReturnNativeResult(paramsWithNative)\n ? (nativeResult as NativeGenerateTextModelResult)\n : nativeResult.text;\n }\n\n const reasoning = isReasoningModel(modelName);\n const input: Array<{\n role: \"system\" | \"user\";\n content: Array<{ type: \"input_text\"; text: string }>;\n }> = [];\n if (systemPrompt) {\n input.push({\n role: \"system\",\n content: [{ type: \"input_text\", text: systemPrompt }],\n });\n }\n input.push({\n role: \"user\",\n content: [{ type: \"input_text\", text: prompt }],\n });\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input,\n max_output_tokens: params.maxTokens ?? 8192,\n };\n if (!reasoning && typeof params.temperature === \"number\") {\n requestBody.temperature = params.temperature;\n }\n\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n headers: {\n \"X-Eliza-Llm-Purpose\": getPurposeForModelType(modelType),\n \"X-Eliza-Model-Type\": modelType,\n },\n json: requestBody,\n });\n const responseText = await response.text();\n let data: ResponsesApiResponse = {};\n if (responseText) {\n try {\n data = JSON.parse(responseText) as ResponsesApiResponse;\n } catch (parseErr) {\n logger.error(\n `[ELIZAOS_CLOUD] Failed to parse responses JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n\n if (!response.ok) {\n const errorBody = typeof data === \"object\" && data ? data.error : undefined;\n const errorMessage =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(errorMessage) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) {\n requestError.error = errorBody;\n }\n throw requestError;\n }\n\n if (data.usage) {\n emitModelUsageEvent(runtime, modelType, prompt, {\n inputTokens: data.usage.input_tokens ?? 0,\n outputTokens: data.usage.output_tokens ?? 0,\n totalTokens: data.usage.total_tokens ?? 0,\n });\n }\n\n const text = extractResponsesOutputText(data);\n if (!text.trim()) {\n throw new Error(\"elizaOS Cloud returned no text response\");\n }\n\n return text;\n}\n\nasync function generateNativeChatCompletion(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParamsWithNativeOptions,\n context: {\n modelName: string;\n prompt: string;\n systemPrompt?: string;\n }\n): Promise<NativeGenerateTextResult> {\n const requestBody = buildNativeRequestBody(\n params,\n context.modelName,\n context.prompt,\n context.systemPrompt\n );\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/chat/completions\", {\n headers: {\n \"X-Eliza-Llm-Purpose\": getPurposeForModelType(modelType),\n \"X-Eliza-Model-Type\": modelType,\n },\n json: requestBody,\n });\n const responseText = await response.text();\n let data: ChatCompletionsResponse = {};\n if (responseText) {\n try {\n data = JSON.parse(responseText) as ChatCompletionsResponse;\n } catch (parseErr) {\n logger.error(\n `[ELIZAOS_CLOUD] Failed to parse chat completions JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n\n if (!response.ok) {\n const errorBody = typeof data === \"object\" && data ? data.error : undefined;\n const errorMessage =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(errorMessage) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) {\n requestError.error = errorBody;\n }\n throw requestError;\n }\n\n const usage = convertNativeUsage(data.usage);\n if (usage) {\n emitModelUsageEvent(runtime, modelType, context.prompt, usage);\n }\n\n const text = extractChatCompletionText(data);\n const toolCalls = extractNativeToolCalls(data);\n if (!text.trim() && toolCalls.length === 0) {\n throw new Error(\"elizaOS Cloud returned no text or tool calls\");\n }\n\n return {\n text,\n toolCalls,\n finishReason: data.choices?.[0]?.finish_reason,\n usage,\n providerMetadata: {\n modelName: context.modelName,\n usage: data.usage,\n },\n };\n}\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_SMALL_MODEL_TYPE, params);\n}\n\nexport async function handleTextNano(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_NANO_MODEL_TYPE, params);\n}\n\nexport async function handleTextMedium(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEDIUM_MODEL_TYPE, params);\n}\n\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_LARGE_MODEL_TYPE, params);\n}\n\nexport async function handleTextMega(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEGA_MODEL_TYPE, params);\n}\n\nexport async function handleResponseHandler(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, RESPONSE_HANDLER_MODEL_TYPE, params);\n}\n\nexport async function handleActionPlanner(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, ACTION_PLANNER_MODEL_TYPE, params);\n}\n"
14
+ "import type {\n GenerateTextParams,\n IAgentRuntime,\n ModelTypeName,\n TextStreamResult,\n TokenUsage,\n} from \"@elizaos/core\";\nimport {\n buildCanonicalSystemPrompt,\n logger,\n ModelType,\n recordInferenceSpan,\n renderChatMessagesForPrompt,\n resolveEffectiveSystemPrompt,\n Semaphore,\n timeInferenceSpan,\n} from \"@elizaos/core\";\nimport {\n getActionPlannerModel,\n getLargeModel,\n getMediumModel,\n getMegaModel,\n getNanoModel,\n getResponseHandlerModel,\n getSmallModel,\n} from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { extractResponsesOutputText } from \"../utils/responses-output\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst TEXT_NANO_MODEL_TYPE = (ModelType.TEXT_NANO ?? \"TEXT_NANO\") as ModelTypeName;\nconst TEXT_MEDIUM_MODEL_TYPE = (ModelType.TEXT_MEDIUM ?? \"TEXT_MEDIUM\") as ModelTypeName;\nconst TEXT_SMALL_MODEL_TYPE = ModelType.TEXT_SMALL;\nconst TEXT_LARGE_MODEL_TYPE = ModelType.TEXT_LARGE;\nconst TEXT_MEGA_MODEL_TYPE = (ModelType.TEXT_MEGA ?? \"TEXT_MEGA\") as ModelTypeName;\nconst RESPONSE_HANDLER_MODEL_TYPE = (ModelType.RESPONSE_HANDLER ??\n \"RESPONSE_HANDLER\") as ModelTypeName;\nconst ACTION_PLANNER_MODEL_TYPE = (ModelType.ACTION_PLANNER ?? \"ACTION_PLANNER\") as ModelTypeName;\n\n/**\n * Per-process cap on CONCURRENT native cloud text calls.\n *\n * Covers BOTH native cloud text routes that share the one cerebras key:\n * the `/chat/completions` round-trip (native-transport callers) AND the\n * `/responses` round-trip (bare-`{ prompt }` callers, incl. the primary reply\n * action). Same model name -> same shared key -> same concurrency budget, so\n * both routes must funnel through this one semaphore or a bare-prompt call can\n * still push the key over its limit.\n *\n * The per-turn burst that triggers the 429 comes from the prompt BATCHER\n * (`dynamicPromptExecFromState`, which always sets providerOptions -> native\n * `/chat/completions`) and the merged evaluator call — NOT from composeState\n * providers (no provider calls `useModel` during composeState). Firing those\n * at once overruns the ONE shared cerebras key's concurrent-request limit\n * -> 429 -> 3 retries x backoff -> 30-63s of latency. Capping in-flight calls\n * through a small semaphore keeps each call ~3s with no 429, without needing\n * more keys or backend changes.\n *\n * Default is a SAFETY CEILING, not full serialization: the paid cerebras key\n * (1000 req/min) and leaner per-turn call counts make the 429 risk small, so\n * the default of 8 leaves the typical 1-3 concurrent calls/turn untouched while\n * still bounding a pathological burst. The limiter is process-global and keys\n * on native transport, not the model, so it also bounds non-cerebras native\n * calls (e.g. zai-glm-4.7) — a high default avoids serializing those. Set\n * `ELIZAOS_CLOUD_NATIVE_CONCURRENCY` (positive integer) to tighten it (1 = fully\n * serialize) on a cerebras-bottlenecked single-key deployment, or raise it for\n * more parallelism. Embeddings use a SEPARATE `/embeddings` route\n * (embeddings.ts) and are intentionally NOT gated here.\n */\nconst NATIVE_CONCURRENCY_ENV = \"ELIZAOS_CLOUD_NATIVE_CONCURRENCY\";\nconst DEFAULT_NATIVE_CONCURRENCY = 8;\n\n/**\n * Client-side timeout for cloud text round-trips. Without this the handler\n * passes no `timeoutMs`/`signal` to `requestRaw`, so a hung/slow gateway holds\n * the concurrency permit AND stalls the whole turn until fetch's own (very\n * long) default. `ELIZAOS_CLOUD_TEXT_TIMEOUT_MS` overrides; `0`/negative opts\n * out (no client-side timeout).\n */\nconst TEXT_TIMEOUT_ENV = \"ELIZAOS_CLOUD_TEXT_TIMEOUT_MS\";\nconst DEFAULT_TEXT_TIMEOUT_MS = 120_000;\n\nexport function resolveTextTimeoutMs(): number | undefined {\n const raw =\n typeof process !== \"undefined\" ? process.env[TEXT_TIMEOUT_ENV] : undefined;\n if (raw === undefined || raw.trim() === \"\") return DEFAULT_TEXT_TIMEOUT_MS;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed)) return DEFAULT_TEXT_TIMEOUT_MS;\n return parsed <= 0 ? undefined : parsed;\n}\n\n/**\n * Token-by-token streaming of the native `/chat/completions` round-trip. On by\n * default so the user-visible reply renders from the first token instead of\n * waiting for the whole generation. `ELIZAOS_CLOUD_STREAMING=0`/`false`/`off`\n * forces the buffered path (kill-switch). Streaming only engages when the\n * runtime actually requests it (`params.stream`), so non-streaming callers\n * (connectors with no UI stream) are unaffected.\n */\nconst STREAMING_ENV = \"ELIZAOS_CLOUD_STREAMING\";\n\nexport function resolveStreamingEnabled(): boolean {\n const raw = typeof process !== \"undefined\" ? process.env[STREAMING_ENV] : undefined;\n if (raw === undefined) return true;\n const v = raw.trim().toLowerCase();\n return v !== \"0\" && v !== \"false\" && v !== \"off\";\n}\n\n/**\n * Combine the runtime's abort signal with the client-side timeout into one\n * signal for `requestRaw`. A stream is long-lived, so it should abort on EITHER\n * a caller cancel OR the timeout — `requestRaw` honors only a single signal, so\n * merge them here.\n */\nfunction buildStreamAbortSignal(\n abortSignal: AbortSignal | undefined,\n timeoutMs: number | undefined\n): AbortSignal | undefined {\n const timeoutSig =\n typeof timeoutMs === \"number\" && timeoutMs > 0\n ? AbortSignal.timeout(timeoutMs)\n : undefined;\n if (abortSignal && timeoutSig) return AbortSignal.any([abortSignal, timeoutSig]);\n return abortSignal ?? timeoutSig;\n}\n\nlet nativeChatLimiter: Semaphore | null = null;\n\nfunction resolveNativeConcurrency(): number {\n const raw =\n typeof process !== \"undefined\" ? process.env[NATIVE_CONCURRENCY_ENV] : undefined;\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_NATIVE_CONCURRENCY;\n}\n\nfunction getNativeChatLimiter(): Semaphore {\n if (!nativeChatLimiter) {\n nativeChatLimiter = new Semaphore(resolveNativeConcurrency());\n }\n return nativeChatLimiter;\n}\n\n/**\n * Run a single cerebras-bound network round-trip under the shared per-process\n * concurrency cap. Hold the permit only across `fn` (the `requestRaw` call);\n * release the instant the server responds so response-body parsing runs\n * unguarded. `finally` frees the permit even on throw so a failed call never\n * starves the queue. Used by BOTH native text routes (`/chat/completions` and\n * `/responses`) so every cerebras text call shares one budget.\n *\n * Exported for unit tests that drive the shared cap directly.\n *\n * `label` (e.g. `responses` / `chat/completions`) tags the latency spans this\n * records on the active per-turn inference timer: `cloud.semaphore-wait` (time\n * spent queued for a permit — non-zero means the cap is serializing) and\n * `cloud.http:<label>` (the network round-trip). Both are no-ops when no turn\n * timer is active.\n */\nexport async function withNativeChatLimit<T>(\n fn: () => Promise<T>,\n label = \"native\"\n): Promise<T> {\n const limiter = getNativeChatLimiter();\n const waitStartedAt = Date.now();\n await limiter.acquire();\n recordInferenceSpan(\"cloud.semaphore-wait\", Date.now() - waitStartedAt, {\n route: label,\n });\n try {\n return await timeInferenceSpan(`cloud.http:${label}`, fn, { route: label });\n } finally {\n limiter.release();\n }\n}\n\n/**\n * Test-only: discard the cached limiter so the next call re-reads the env knob.\n * Production code never needs this — the knob is read once per process.\n */\nexport function __resetNativeChatLimiterForTests(): void {\n nativeChatLimiter = null;\n}\n\ntype ResponsesApiResponse = Record<string, unknown> & {\n error?: {\n message?: string;\n };\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n } & Record<string, unknown>;\n};\n\n/**\n * Models that are known to be reasoning-class and don't support temperature.\n * These are models that use chain-of-thought internally and reject\n */\nconst REASONING_MODEL_PATTERNS = [\n \"o1\",\n \"o3\",\n \"o4\",\n \"deepseek-r1\",\n \"deepseek-reasoner\",\n \"claude-opus-4.7\",\n \"claude-opus-4-7\",\n \"gpt-5\",\n] as const;\ntype ChatAttachment = {\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n};\n\ntype GenerateTextParamsWithAttachments = GenerateTextParams & {\n attachments?: ChatAttachment[];\n};\n\ntype GenerateTextParamsWithNativeOptions = GenerateTextParamsWithAttachments & {\n messages?: unknown[];\n tools?: unknown;\n toolChoice?: unknown;\n responseSchema?: unknown;\n providerOptions?: Record<string, unknown>;\n};\n\ntype NativeTokenUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n cacheReadInputTokens?: number;\n cacheCreationInputTokens?: number;\n};\n\ntype NativeGenerateTextResult = {\n text: string;\n toolCalls: unknown[];\n finishReason?: string;\n usage?: NativeTokenUsage;\n providerMetadata?: unknown;\n};\n\ntype NativeGenerateTextModelResult = NativeGenerateTextResult & string;\n\ntype NativeToolCall = {\n type: \"tool-call\";\n toolCallId: string;\n toolName: string;\n input: unknown;\n};\n\ntype ChatCompletionsResponse = Record<string, unknown> & {\n error?: {\n message?: string;\n };\n choices?: Array<{\n text?: string;\n finish_reason?: string;\n message?: {\n content?: unknown;\n tool_calls?: unknown[];\n };\n }>;\n usage?: Record<string, unknown>;\n};\n\n/**\n * Eliza-Cloud-hosted `eliza-1` model ids that run a fork of llama-server (or\n * vLLM with the eliza1 parsers) capable of honoring the `x-eliza-span-samplers`\n * header. Other upstreams (OpenAI / Anthropic / generic OpenRouter) strip\n * unknown headers safely, but to keep the wire surface narrow we only attach\n * the per-span sampler plan when the resolved model is one we know honors it.\n *\n * The \"we know\" bound is conservative — extend the prefix list when a new\n * fork-built deployment lands. The fallback is \"do not send the header\" which\n * preserves today's behavior on every other provider.\n */\nconst SPAN_SAMPLER_HONORING_MODEL_PREFIXES = [\n \"vast/eliza-1-\",\n \"elizaos/eliza-1-\",\n \"eliza-1-\",\n] as const;\n\nfunction isSpanSamplerHonoringModel(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return SPAN_SAMPLER_HONORING_MODEL_PREFIXES.some((prefix) =>\n lower.startsWith(prefix),\n );\n}\n\n/**\n * Build the `x-eliza-span-samplers` HTTP header value from a {@link SpanSamplerPlan}.\n * Returns `undefined` when there is no plan or no overrides — narrow the wire\n * surface so non-eliza providers never see a stray fork-extension header.\n *\n * Wire schema (snake_case):\n * { overrides: [{ span_index, temperature, top_k?, top_p? }, ...], strict?: boolean }\n */\nfunction buildSpanSamplerHeader(\n plan: GenerateTextParams[\"spanSamplerPlan\"],\n): string | undefined {\n if (!plan || plan.overrides.length === 0) return undefined;\n const overrides = plan.overrides.map((o) => {\n const wire: Record<string, unknown> = {\n span_index: o.spanIndex,\n temperature: o.temperature,\n };\n if (typeof o.topK === \"number\") wire.top_k = o.topK;\n if (typeof o.topP === \"number\") wire.top_p = o.topP;\n return wire;\n });\n const body: Record<string, unknown> = { overrides };\n if (plan.strict === true) body.strict = true;\n return JSON.stringify(body);\n}\n\n/**\n * Extract the authoritative USD cost the metered cloud gateway charged for a\n * request, when it surfaces one. The gateway is the only honest source of USD\n * (it owns the model-pricing table + platform markup); we prefer it over any\n * client-side token estimate. Checks the response body `usage.cost_usd` first,\n * then the `X-Eliza-Cost-Usd` response header. Returns undefined when neither\n * is present so consumers fall back to a token-based estimate.\n */\nfunction extractCostUsd(\n usage: unknown,\n response?: { headers?: { get?: (name: string) => string | null } }\n): number | undefined {\n const fromBody = firstNumber(\n asRecord(usage).cost_usd,\n asRecord(usage).costUsd,\n asRecord(usage).cost\n );\n if (typeof fromBody === \"number\" && Number.isFinite(fromBody)) {\n return fromBody;\n }\n const header = response?.headers?.get?.(\"X-Eliza-Cost-Usd\");\n if (header) {\n const parsed = Number(header);\n if (Number.isFinite(parsed)) return parsed;\n }\n return undefined;\n}\n\nfunction isReasoningModel(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return REASONING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction recordAt(value: Record<string, unknown>, key: string): Record<string, unknown> {\n return asRecord(value[key]);\n}\n\nfunction firstString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nfunction firstNumber(...values: unknown[]): number | undefined {\n for (const value of values) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n }\n return undefined;\n}\n\nfunction parseJsonIfPossible(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value ?? {};\n }\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n}\n\nfunction stringifyMessageContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n if (content == null) {\n return \"\";\n }\n return typeof content === \"object\" ? JSON.stringify(content) : String(content);\n}\n\nfunction hasNativeTransportOptions(params: GenerateTextParamsWithNativeOptions): boolean {\n return Boolean(\n params.messages ||\n params.tools ||\n params.toolChoice ||\n params.responseSchema ||\n params.providerOptions\n );\n}\n\nfunction shouldReturnNativeResult(params: GenerateTextParamsWithNativeOptions): boolean {\n return Boolean(params.messages || params.tools || params.toolChoice || params.responseSchema);\n}\n\nfunction buildNativeMessages(\n params: GenerateTextParamsWithNativeOptions,\n promptText: string,\n systemPrompt?: string\n): Array<Record<string, unknown>> {\n if (Array.isArray(params.messages) && params.messages.length > 0) {\n const messages = params.messages.map((message) =>\n isRecord(message)\n ? { ...message }\n : { role: \"user\", content: stringifyMessageContent(message) }\n );\n const first = asRecord(messages[0]);\n if (systemPrompt && first.role !== \"system\") {\n return [{ role: \"system\", content: systemPrompt }, ...messages];\n }\n return messages;\n }\n\n const messages: Array<Record<string, unknown>> = [];\n if (systemPrompt) {\n messages.push({ role: \"system\", content: systemPrompt });\n }\n messages.push({ role: \"user\", content: promptText });\n return messages;\n}\n\nfunction unwrapJsonSchema(value: unknown): unknown {\n const record = asRecord(value);\n return record.schema ?? record.jsonSchema ?? value;\n}\n\n// Normalize a single tool entry into the OpenAI `{ type, function }` wire\n// shape. Accepts BOTH the already-nested form (`{ type: \"function\", function:\n// { name, parameters } }`) and core's FLAT `ToolDefinition` envelope\n// (`{ name, type: \"function\", parameters }`, e.g. createHandleResponseTool /\n// the action planner). Returning the flat form verbatim made the cloud gateway\n// read `tool.function.name` on an undefined `function` → \"Cannot read\n// properties of undefined (reading 'name')\". Returns undefined for entries with\n// no resolvable name so they are dropped rather than crashing downstream.\nfunction normalizeNativeToolEntry(\n rawTool: unknown,\n fallbackName?: string\n): Record<string, unknown> | undefined {\n const tool = asRecord(rawTool);\n const nested = asRecord(tool.function);\n const name = firstString(nested.name, tool.name, fallbackName);\n if (!name) {\n return undefined;\n }\n const description = firstString(nested.description, tool.description);\n const inputSchema = unwrapJsonSchema(\n nested.parameters ??\n tool.inputSchema ??\n tool.parameters ??\n tool.schema ?? { type: \"object\" }\n );\n return {\n type: \"function\",\n function: {\n name,\n ...(description ? { description } : {}),\n parameters: inputSchema,\n },\n };\n}\n\nexport function normalizeNativeTools(tools: unknown): unknown[] | undefined {\n if (!tools) {\n return undefined;\n }\n\n if (Array.isArray(tools)) {\n const normalized = tools\n .map((tool) => normalizeNativeToolEntry(tool))\n .filter((tool): tool is Record<string, unknown> => tool !== undefined);\n return normalized.length > 0 ? normalized : undefined;\n }\n\n const toolSet = asRecord(tools);\n const normalized: unknown[] = [];\n for (const [name, rawTool] of Object.entries(toolSet)) {\n const entry = normalizeNativeToolEntry(rawTool, name);\n if (entry) {\n normalized.push(entry);\n }\n }\n\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeNativeToolChoice(toolChoice: unknown): unknown {\n if (!toolChoice) {\n return undefined;\n }\n\n if (\n typeof toolChoice === \"string\" &&\n (toolChoice === \"auto\" || toolChoice === \"none\" || toolChoice === \"required\")\n ) {\n return toolChoice;\n }\n\n const choice = asRecord(toolChoice);\n if (choice.type === \"function\") {\n return toolChoice;\n }\n if (choice.type === \"tool\") {\n const toolName = firstString(choice.toolName, choice.name);\n return toolName ? { type: \"function\", function: { name: toolName } } : toolChoice;\n }\n\n const functionChoice = asRecord(choice.function);\n const toolName = firstString(choice.toolName, choice.name, functionChoice.name);\n return toolName ? { type: \"function\", function: { name: toolName } } : toolChoice;\n}\n\nfunction buildNativeResponseFormat(responseSchema: unknown): unknown {\n if (!responseSchema) {\n return undefined;\n }\n\n const schemaRecord = asRecord(responseSchema);\n if (schemaRecord.responseFormat) {\n return schemaRecord.responseFormat;\n }\n\n const schemaOptions =\n \"schema\" in schemaRecord\n ? {\n schema: schemaRecord.schema,\n name: firstString(schemaRecord.name) ?? \"structured_response\",\n description: firstString(schemaRecord.description),\n }\n : { schema: responseSchema, name: \"structured_response\", description: undefined };\n\n return {\n type: \"json_schema\",\n json_schema: {\n name: schemaOptions.name,\n ...(schemaOptions.description ? { description: schemaOptions.description } : {}),\n schema: schemaOptions.schema,\n },\n };\n}\n\nfunction resolvePromptCacheKey(providerOptions: Record<string, unknown>): string | undefined {\n const eliza = recordAt(providerOptions, \"eliza\");\n const openrouter = recordAt(providerOptions, \"openrouter\");\n const openai = recordAt(providerOptions, \"openai\");\n const cerebras = recordAt(providerOptions, \"cerebras\");\n\n return firstString(\n providerOptions.promptCacheKey,\n providerOptions.prompt_cache_key,\n eliza.promptCacheKey,\n eliza.prompt_cache_key,\n openrouter.promptCacheKey,\n openrouter.prompt_cache_key,\n openai.promptCacheKey,\n openai.prompt_cache_key,\n cerebras.promptCacheKey,\n cerebras.prompt_cache_key\n );\n}\n\nfunction resolveNativeProviderOptions(\n params: GenerateTextParamsWithNativeOptions\n): Record<string, unknown> | undefined {\n const raw = asRecord(params.providerOptions);\n if (Object.keys(raw).length === 0) {\n return undefined;\n }\n\n const { agentName: _agentName, eliza: _eliza, ...rest } = raw;\n const providerOptions: Record<string, unknown> = { ...rest };\n const promptCacheKey = resolvePromptCacheKey(raw);\n\n if (promptCacheKey) {\n providerOptions.openai = {\n ...recordAt(providerOptions, \"openai\"),\n promptCacheKey,\n prompt_cache_key: promptCacheKey,\n };\n providerOptions.openrouter = {\n ...recordAt(providerOptions, \"openrouter\"),\n promptCacheKey,\n prompt_cache_key: promptCacheKey,\n };\n providerOptions.cerebras = {\n ...recordAt(providerOptions, \"cerebras\"),\n prompt_cache_key: promptCacheKey,\n };\n }\n\n return Object.keys(providerOptions).length > 0 ? providerOptions : undefined;\n}\n\nfunction applyOpenRouterPassthroughFields(\n requestBody: Record<string, unknown>,\n providerOptions: Record<string, unknown> | undefined\n): void {\n if (!providerOptions) {\n return;\n }\n\n const openrouter = recordAt(providerOptions, \"openrouter\");\n if (Object.keys(openrouter).length > 0) {\n const provider = openrouter.provider;\n if (provider !== undefined) {\n requestBody.provider = provider;\n }\n for (const key of [\"models\", \"route\", \"transforms\", \"reasoning\"] as const) {\n if (openrouter[key] !== undefined) {\n requestBody[key] = openrouter[key];\n }\n }\n }\n\n const gateway = providerOptions.gateway;\n if (gateway !== undefined) {\n requestBody.gateway = gateway;\n }\n}\n\nfunction buildNativeRequestBody(\n params: GenerateTextParamsWithNativeOptions,\n modelName: string,\n promptText: string,\n systemPrompt?: string\n): Record<string, unknown> {\n const providerOptions = resolveNativeProviderOptions(params);\n const promptCacheKey = providerOptions ? resolvePromptCacheKey(providerOptions) : undefined;\n const tools = normalizeNativeTools(params.tools);\n const toolChoice = normalizeNativeToolChoice(params.toolChoice);\n const responseFormat = buildNativeResponseFormat(params.responseSchema);\n const requestBody: Record<string, unknown> = {\n model: modelName,\n messages: buildNativeMessages(params, promptText, systemPrompt),\n max_tokens: params.maxTokens ?? 8192,\n };\n\n if (!isReasoningModel(modelName) && typeof params.temperature === \"number\") {\n requestBody.temperature = params.temperature;\n }\n if (tools) {\n requestBody.tools = tools;\n }\n if (toolChoice) {\n requestBody.tool_choice = toolChoice;\n }\n if (responseFormat) {\n requestBody.response_format = responseFormat;\n }\n if (providerOptions) {\n requestBody.providerOptions = providerOptions;\n requestBody.provider_options = providerOptions;\n }\n if (promptCacheKey) {\n requestBody.promptCacheKey = promptCacheKey;\n requestBody.prompt_cache_key = promptCacheKey;\n }\n\n applyOpenRouterPassthroughFields(requestBody, providerOptions);\n return requestBody;\n}\n\nfunction extractTextFromContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n if (!Array.isArray(content)) {\n return \"\";\n }\n return content\n .map((item) => {\n if (typeof item === \"string\") return item;\n const record = asRecord(item);\n return firstString(record.text, record.output_text, record.content) ?? \"\";\n })\n .join(\"\");\n}\n\nfunction extractChatCompletionText(data: ChatCompletionsResponse): string {\n const firstChoice = data.choices?.[0];\n if (!firstChoice) {\n return \"\";\n }\n return firstString(firstChoice.text, extractTextFromContent(firstChoice.message?.content)) ?? \"\";\n}\n\nfunction extractNativeToolCalls(data: ChatCompletionsResponse): NativeToolCall[] {\n const rawCalls = data.choices?.[0]?.message?.tool_calls ?? [];\n if (!Array.isArray(rawCalls)) {\n return [];\n }\n\n return rawCalls\n .map<NativeToolCall | undefined>((rawCall) => {\n const call = asRecord(rawCall);\n const fn = recordAt(call, \"function\");\n const toolName = firstString(call.name, call.toolName, fn.name);\n if (!toolName) {\n return undefined;\n }\n return {\n type: \"tool-call\",\n toolCallId: firstString(call.id, call.toolCallId) ?? `call_${toolName}`,\n toolName,\n input: parseJsonIfPossible(call.input ?? call.arguments ?? fn.arguments ?? {}),\n };\n })\n .filter((call): call is NativeToolCall => call !== undefined);\n}\n\nfunction convertNativeUsage(usage: unknown): NativeTokenUsage | undefined {\n const root = asRecord(usage);\n if (Object.keys(root).length === 0) {\n return undefined;\n }\n\n const inputTokenDetails = recordAt(root, \"inputTokenDetails\");\n const promptTokenDetails = recordAt(root, \"prompt_tokens_details\");\n const inputTokenDetailsSnake = recordAt(root, \"input_tokens_details\");\n const promptTokens =\n firstNumber(root.inputTokens, root.input_tokens, root.promptTokens, root.prompt_tokens) ?? 0;\n const completionTokens =\n firstNumber(\n root.outputTokens,\n root.output_tokens,\n root.completionTokens,\n root.completion_tokens\n ) ?? 0;\n const cacheReadInputTokens = firstNumber(\n root.cacheReadInputTokens,\n root.cache_read_input_tokens,\n root.cachedInputTokens,\n root.cached_input_tokens,\n root.cachedTokens,\n root.cached_tokens,\n inputTokenDetails.cacheReadTokens,\n inputTokenDetails.cachedInputTokens,\n inputTokenDetails.cachedTokens,\n promptTokenDetails.cached_tokens,\n inputTokenDetailsSnake.cache_read_input_tokens,\n inputTokenDetailsSnake.cached_tokens\n );\n const cacheCreationInputTokens = firstNumber(\n root.cacheCreationInputTokens,\n root.cache_creation_input_tokens,\n root.cacheWriteInputTokens,\n root.cache_write_input_tokens,\n inputTokenDetails.cacheCreationInputTokens,\n inputTokenDetails.cacheCreationTokens,\n inputTokenDetails.cacheWriteTokens,\n inputTokenDetailsSnake.cache_creation_input_tokens\n );\n\n return {\n promptTokens,\n completionTokens,\n totalTokens:\n firstNumber(root.totalTokens, root.total_tokens) ?? promptTokens + completionTokens,\n cachedPromptTokens: cacheReadInputTokens,\n cacheReadInputTokens,\n cacheCreationInputTokens,\n };\n}\n\ntype TextModelType =\n | typeof TEXT_NANO_MODEL_TYPE\n | typeof TEXT_MEDIUM_MODEL_TYPE\n | typeof TEXT_SMALL_MODEL_TYPE\n | typeof TEXT_LARGE_MODEL_TYPE\n | typeof TEXT_MEGA_MODEL_TYPE\n | typeof RESPONSE_HANDLER_MODEL_TYPE\n | typeof ACTION_PLANNER_MODEL_TYPE;\n\nfunction getPurposeForModelType(modelType: TextModelType): string {\n switch (modelType) {\n case RESPONSE_HANDLER_MODEL_TYPE:\n return \"should_respond\";\n case ACTION_PLANNER_MODEL_TYPE:\n return \"action_planner\";\n default:\n return \"response\";\n }\n}\n\nfunction getModelNameForType(runtime: IAgentRuntime, modelType: TextModelType): string {\n switch (modelType) {\n case TEXT_NANO_MODEL_TYPE:\n return getNanoModel(runtime);\n case TEXT_MEDIUM_MODEL_TYPE:\n return getMediumModel(runtime);\n case TEXT_SMALL_MODEL_TYPE:\n return getSmallModel(runtime);\n case TEXT_LARGE_MODEL_TYPE:\n return getLargeModel(runtime);\n case TEXT_MEGA_MODEL_TYPE:\n return getMegaModel(runtime);\n case RESPONSE_HANDLER_MODEL_TYPE:\n return getResponseHandlerModel(runtime);\n case ACTION_PLANNER_MODEL_TYPE:\n return getActionPlannerModel(runtime);\n default:\n return getLargeModel(runtime);\n }\n}\n\n/**\n * Resolve the model name, rendered prompt, and effective system prompt for a\n * cloud text call.\n *\n * This used to also construct a Vercel AI-SDK `LanguageModel` (`openai.chat()`)\n * plus a full `generateParams` object — but the handlers below call the cloud\n * HTTP API directly (`requestRaw` → `/responses` / `/chat/completions`), so that\n * AI-SDK client + params object was built and immediately discarded on every\n * single text generation. Removed: it was pure per-call overhead and a\n * misleading code path when reasoning about which transport actually runs.\n */\nfunction buildGenerateParams(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n) {\n const prompt = params.prompt ?? \"\";\n const modelName = getModelNameForType(runtime, modelType);\n const systemPrompt = resolveEffectiveSystemPrompt({\n params,\n fallback: buildCanonicalSystemPrompt({ character: runtime.character }),\n });\n const promptText =\n renderChatMessagesForPrompt(params.messages, {\n omitDuplicateSystem: systemPrompt,\n }) ?? prompt;\n\n return { modelName, modelType, prompt: promptText, systemPrompt };\n}\n\nasync function generateTextWithModel(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n const { modelName, prompt, systemPrompt } = buildGenerateParams(runtime, modelType, params);\n const paramsWithNative = params as GenerateTextParamsWithNativeOptions;\n\n logger.debug(`[ELIZAOS_CLOUD] Generating text with ${modelType} model: ${modelName}`);\n\n // Stream the user-visible reply token-by-token. Gated to the structured\n // reply path (`streamStructured`, set only by the RESPONSE_HANDLER stage-1\n // call): that call carries a responseSkeleton, so the runtime's field\n // extractor surfaces `replyText` incrementally to the UI. Planner/other\n // native calls (no responseSkeleton) stay buffered — streaming their raw\n // envelope would leak internals to the UI stream. The bare `/responses`\n // route stays buffered too (different SSE schema, not on the reply path).\n const paramsStreaming = params as {\n stream?: boolean;\n streamStructured?: boolean;\n };\n const wantsStream =\n Boolean(paramsStreaming.stream) &&\n paramsStreaming.streamStructured === true &&\n resolveStreamingEnabled();\n\n logger.log(`[ELIZAOS_CLOUD] Using ${modelType} model: ${modelName}`);\n logger.log(prompt);\n\n if (hasNativeTransportOptions(paramsWithNative)) {\n if (wantsStream) {\n return streamNativeChatCompletion(runtime, modelType, paramsWithNative, {\n modelName,\n prompt,\n systemPrompt,\n });\n }\n const nativeResult = await generateNativeChatCompletion(runtime, modelType, paramsWithNative, {\n modelName,\n prompt,\n systemPrompt,\n });\n return shouldReturnNativeResult(paramsWithNative)\n ? (nativeResult as NativeGenerateTextModelResult)\n : nativeResult.text;\n }\n\n const reasoning = isReasoningModel(modelName);\n const input: Array<{\n role: \"system\" | \"user\";\n content: Array<{ type: \"input_text\"; text: string }>;\n }> = [];\n if (systemPrompt) {\n input.push({\n role: \"system\",\n content: [{ type: \"input_text\", text: systemPrompt }],\n });\n }\n input.push({\n role: \"user\",\n content: [{ type: \"input_text\", text: prompt }],\n });\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input,\n max_output_tokens: params.maxTokens ?? 8192,\n };\n if (!reasoning && typeof params.temperature === \"number\") {\n requestBody.temperature = params.temperature;\n }\n\n const responsesHeaders: Record<string, string> = {\n \"X-Eliza-Llm-Purpose\": getPurposeForModelType(modelType),\n \"X-Eliza-Model-Type\": modelType,\n };\n if (isSpanSamplerHonoringModel(modelName)) {\n const samplerHeader = buildSpanSamplerHeader(params.spanSamplerPlan);\n if (samplerHeader) {\n responsesHeaders[\"x-eliza-span-samplers\"] = samplerHeader;\n }\n }\n // Same shared cerebras key as the /chat/completions route, so gate this\n // bare-prompt round-trip through the SAME limiter (parsing stays unguarded).\n const response = await withNativeChatLimit(\n () =>\n createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n headers: responsesHeaders,\n json: requestBody,\n timeoutMs: resolveTextTimeoutMs(),\n }),\n \"responses\"\n );\n const responseText = await response.text();\n let data: ResponsesApiResponse = {};\n if (responseText) {\n try {\n data = JSON.parse(responseText) as ResponsesApiResponse;\n } catch (parseErr) {\n logger.error(\n `[ELIZAOS_CLOUD] Failed to parse responses JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n\n if (!response.ok) {\n const errorBody = typeof data === \"object\" && data ? data.error : undefined;\n const errorMessage =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(errorMessage) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) {\n requestError.error = errorBody;\n }\n throw requestError;\n }\n\n if (data.usage) {\n emitModelUsageEvent(\n runtime,\n modelType,\n prompt,\n {\n inputTokens: data.usage.input_tokens ?? 0,\n outputTokens: data.usage.output_tokens ?? 0,\n totalTokens: data.usage.total_tokens ?? 0,\n },\n {\n modelName: getModelNameForType(runtime, modelType),\n ...(() => {\n const costUsd = extractCostUsd(data.usage, response);\n return typeof costUsd === \"number\" ? { costUsd } : {};\n })(),\n }\n );\n }\n\n const text = extractResponsesOutputText(data);\n if (!text.trim()) {\n throw new Error(\"elizaOS Cloud returned no text response\");\n }\n\n return text;\n}\n\n// Exported for unit tests (the concurrency limiter wrapper). Not part of the\n// plugin's public model-handler surface.\nexport async function generateNativeChatCompletion(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParamsWithNativeOptions,\n context: {\n modelName: string;\n prompt: string;\n systemPrompt?: string;\n }\n): Promise<NativeGenerateTextResult> {\n const requestBody = buildNativeRequestBody(\n params,\n context.modelName,\n context.prompt,\n context.systemPrompt\n );\n const headers: Record<string, string> = {\n \"X-Eliza-Llm-Purpose\": getPurposeForModelType(modelType),\n \"X-Eliza-Model-Type\": modelType,\n };\n // Per-span sampler overrides only ride along when the resolved model is a\n // fork-built eliza-1 deployment that knows how to honor the header. Other\n // upstreams (OpenAI / Anthropic / generic OpenRouter) strip unknown headers\n // safely, but we keep the wire surface narrow until the cloud honor path\n // lands in Wave 3.\n if (isSpanSamplerHonoringModel(context.modelName)) {\n const samplerHeader = buildSpanSamplerHeader(params.spanSamplerPlan);\n if (samplerHeader) {\n headers[\"x-eliza-span-samplers\"] = samplerHeader;\n }\n }\n // Serialize the per-turn batcher/evaluator burst through the SAME shared\n // semaphore the /responses route uses, so N simultaneous native cloud text\n // calls don't overrun the one shared cerebras key's concurrent limit (-> 429\n // -> retries -> 30-63s). The permit is held only across the network\n // round-trip; the text()/JSON parse below runs unguarded.\n const response = await withNativeChatLimit(\n () =>\n createCloudApiClient(runtime).requestRaw(\"POST\", \"/chat/completions\", {\n headers,\n json: requestBody,\n timeoutMs: resolveTextTimeoutMs(),\n }),\n \"chat/completions\"\n );\n const responseText = await response.text();\n let data: ChatCompletionsResponse = {};\n if (responseText) {\n try {\n data = JSON.parse(responseText) as ChatCompletionsResponse;\n } catch (parseErr) {\n logger.error(\n `[ELIZAOS_CLOUD] Failed to parse chat completions JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n\n if (!response.ok) {\n const errorBody = typeof data === \"object\" && data ? data.error : undefined;\n const errorMessage =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(errorMessage) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) {\n requestError.error = errorBody;\n }\n throw requestError;\n }\n\n const usage = convertNativeUsage(data.usage);\n if (usage) {\n emitModelUsageEvent(runtime, modelType, context.prompt, usage, {\n modelName: context.modelName,\n ...(() => {\n const costUsd = extractCostUsd(data.usage, response);\n return typeof costUsd === \"number\" ? { costUsd } : {};\n })(),\n });\n }\n\n const text = extractChatCompletionText(data);\n const toolCalls = extractNativeToolCalls(data);\n if (!text.trim() && toolCalls.length === 0) {\n throw new Error(\"elizaOS Cloud returned no text or tool calls\");\n }\n\n return {\n text,\n toolCalls,\n finishReason: data.choices?.[0]?.finish_reason,\n usage,\n providerMetadata: {\n modelName: context.modelName,\n usage: data.usage,\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Streaming native /chat/completions (token-by-token, OpenAI-compatible SSE)\n// ---------------------------------------------------------------------------\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n}\n\nfunction deferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n const promise = new Promise<T>((r) => {\n resolve = r;\n });\n return { promise, resolve };\n}\n\n/**\n * Parse an OpenAI-compatible SSE byte stream into the decoded JSON frame of\n * each `data:` line. Yields one object per frame; stops at `data: [DONE]`.\n * Tolerates partial reads (buffers across chunk boundaries) and ignores\n * non-`data:` lines (comments, blank separators). Exported for unit tests.\n */\nexport async function* parseOpenAiSseStream(\n body: ReadableStream<Uint8Array>\n): AsyncGenerator<Record<string, unknown>> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n const handle = (line: string): Record<string, unknown> | \"DONE\" | null => {\n const trimmed = line.trimStart();\n if (!trimmed.startsWith(\"data:\")) return null;\n const payload = trimmed.slice(5).trim();\n if (payload === \"\") return null;\n if (payload === \"[DONE]\") return \"DONE\";\n try {\n return JSON.parse(payload) as Record<string, unknown>;\n } catch {\n return null;\n }\n };\n try {\n for (;;) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let nl: number;\n while ((nl = buffer.indexOf(\"\\n\")) >= 0) {\n const line = buffer.slice(0, nl);\n buffer = buffer.slice(nl + 1);\n const frame = handle(line);\n if (frame === \"DONE\") return;\n if (frame) yield frame;\n }\n }\n const tail = handle(buffer);\n if (tail && tail !== \"DONE\") yield tail;\n } finally {\n // cancel() (not just releaseLock()) tears down the underlying connection,\n // so an EARLY consumer break (runtime abort / turn-supersede / a downstream\n // throw closes this generator via .return()) stops the upstream generation\n // instead of letting it run to its natural end and bill tokens nobody reads.\n // On natural completion the stream is already done, so this is a no-op; it\n // also releases the lock. Not threading the abort signal into the fetch on\n // purpose — cancel() gets the teardown without rejecting an in-flight read\n // with AbortError and changing the runtime's quiet-stop semantics.\n try {\n await reader.cancel();\n } catch {\n // Reader already cancelled/released by an upstream abort — nothing to do.\n }\n }\n}\n\ninterface StreamingToolCallAcc {\n id?: string;\n name?: string;\n args: string;\n}\n\n/** Fold one SSE `delta.tool_calls[]` array into the per-index accumulator. */\nexport function accumulateToolCallDeltas(\n acc: Map<number, StreamingToolCallAcc>,\n deltas: unknown\n): void {\n if (!Array.isArray(deltas)) return;\n for (const raw of deltas) {\n const d = asRecord(raw);\n const index = typeof d.index === \"number\" ? d.index : 0;\n const cur = acc.get(index) ?? { args: \"\" };\n const id = firstString(d.id);\n if (id) cur.id = id;\n const fn = recordAt(d, \"function\");\n const name = firstString(fn.name);\n if (name) cur.name = name;\n if (typeof fn.arguments === \"string\") cur.args += fn.arguments;\n acc.set(index, cur);\n }\n}\n\n/** Materialize accumulated tool-call deltas into the buffered-path shape. */\nexport function finalizeStreamedToolCalls(\n acc: Map<number, StreamingToolCallAcc>\n): NativeToolCall[] {\n const out: NativeToolCall[] = [];\n for (const [index, c] of [...acc.entries()].sort((a, b) => a[0] - b[0])) {\n if (!c.name) continue;\n out.push({\n type: \"tool-call\",\n toolCallId: c.id ?? `call_${c.name}_${index}`,\n toolName: c.name,\n input: parseJsonIfPossible(c.args.trim() === \"\" ? \"{}\" : c.args),\n });\n }\n return out;\n}\n\n/**\n * Streaming variant of {@link generateNativeChatCompletion}: returns a\n * {@link TextStreamResult} whose `textStream` yields `delta.content` as it\n * arrives, so `useModel`'s for-await loop streams it to the UI from the first\n * token. Falls back to a single-chunk buffered result if the gateway answers\n * non-SSE (self-healing). The shared concurrency permit is held for the whole\n * stream lifetime (released in the generator's `finally`), not just until\n * headers arrive — otherwise the cap would under-count in-flight requests.\n */\nexport async function streamNativeChatCompletion(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParamsWithNativeOptions,\n context: { modelName: string; prompt: string; systemPrompt?: string }\n): Promise<TextStreamResult> {\n const requestBody = buildNativeRequestBody(\n params,\n context.modelName,\n context.prompt,\n context.systemPrompt\n );\n requestBody.stream = true;\n // OpenAI-compatible: ask the server to include a final usage-only frame so we\n // can meter the streamed call accurately.\n requestBody.stream_options = { include_usage: true };\n\n const headers: Record<string, string> = {\n \"X-Eliza-Llm-Purpose\": getPurposeForModelType(modelType),\n \"X-Eliza-Model-Type\": modelType,\n };\n if (isSpanSamplerHonoringModel(context.modelName)) {\n const samplerHeader = buildSpanSamplerHeader(params.spanSamplerPlan);\n if (samplerHeader) {\n headers[\"x-eliza-span-samplers\"] = samplerHeader;\n }\n }\n\n const abortSignal = (params as { signal?: AbortSignal }).signal;\n const signal = buildStreamAbortSignal(abortSignal, resolveTextTimeoutMs());\n\n const limiter = getNativeChatLimiter();\n const waitStartedAt = Date.now();\n await limiter.acquire();\n recordInferenceSpan(\"cloud.semaphore-wait\", Date.now() - waitStartedAt, {\n route: \"chat/completions:stream\",\n });\n let permitReleased = false;\n const releasePermit = (): void => {\n if (!permitReleased) {\n permitReleased = true;\n limiter.release();\n }\n };\n\n let response: Response;\n try {\n response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/chat/completions\", {\n headers,\n json: requestBody,\n ...(signal ? { signal } : {}),\n });\n } catch (err) {\n releasePermit();\n throw err;\n }\n\n if (!response.ok) {\n let errorBody: { message?: string } | undefined;\n try {\n const errText = await response.text();\n if (errText) {\n errorBody = (JSON.parse(errText) as ChatCompletionsResponse).error;\n }\n } catch {\n // Non-JSON error body — fall through to the status-coded message.\n }\n releasePermit();\n const message =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(message) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) requestError.error = errorBody;\n throw requestError;\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const isSse = contentType.includes(\"text/event-stream\") && response.body !== null;\n\n // Self-healing fallback: gateway answered with a buffered JSON body despite\n // the stream request. Yield it as a single chunk so the streaming contract\n // (and the structured-field extractor downstream) still works.\n if (!isSse) {\n const bufferedText = await response.text();\n releasePermit();\n let data: ChatCompletionsResponse = {};\n if (bufferedText) {\n try {\n data = JSON.parse(bufferedText) as ChatCompletionsResponse;\n } catch (parseErr) {\n logger.error(\n `[ELIZAOS_CLOUD] Failed to parse buffered chat completions JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n const text = extractChatCompletionText(data);\n const toolCalls = extractNativeToolCalls(data);\n const usage = convertNativeUsage(data.usage);\n if (usage) {\n emitModelUsageEvent(runtime, modelType, context.prompt, usage, {\n modelName: context.modelName,\n ...(() => {\n const costUsd = extractCostUsd(data.usage, response);\n return typeof costUsd === \"number\" ? { costUsd } : {};\n })(),\n });\n }\n if (!text.trim() && toolCalls.length === 0) {\n throw new Error(\"elizaOS Cloud returned no text or tool calls\");\n }\n async function* single(): AsyncGenerator<string> {\n if (text) yield text;\n }\n return {\n textStream: single(),\n text: Promise.resolve(text),\n usage: Promise.resolve(usage),\n finishReason: Promise.resolve(data.choices?.[0]?.finish_reason),\n toolCalls: Promise.resolve(toolCalls),\n providerMetadata: { modelName: context.modelName, usage: data.usage },\n };\n }\n\n const body = response.body as ReadableStream<Uint8Array>;\n const toolAcc = new Map<number, StreamingToolCallAcc>();\n let accumulated = \"\";\n let nativeUsage: NativeTokenUsage | undefined;\n let rawUsage: unknown;\n let finishReason: string | undefined;\n\n const textD = deferred<string>();\n const usageD = deferred<TokenUsage | undefined>();\n const finishD = deferred<string | undefined>();\n const toolCallsD = deferred<NativeToolCall[]>();\n\n async function* generate(): AsyncGenerator<string> {\n try {\n for await (const frame of parseOpenAiSseStream(body)) {\n if (frame.error) {\n const message = asRecord(frame.error).message;\n throw new Error(\n typeof message === \"string\" && message.trim()\n ? message.trim()\n : \"elizaOS Cloud stream error\"\n );\n }\n const choices = Array.isArray(frame.choices) ? frame.choices : [];\n const choice = asRecord(choices[0]);\n const delta = recordAt(choice, \"delta\");\n // Raw (un-trimmed) content — inter-token whitespace is significant.\n if (typeof delta.content === \"string\" && delta.content.length > 0) {\n accumulated += delta.content;\n yield delta.content;\n }\n if (delta.tool_calls) {\n accumulateToolCallDeltas(toolAcc, delta.tool_calls);\n }\n const fr = firstString(choice.finish_reason);\n if (fr) finishReason = fr;\n if (frame.usage) {\n rawUsage = frame.usage;\n nativeUsage = convertNativeUsage(frame.usage);\n }\n }\n } finally {\n releasePermit();\n const toolCalls = finalizeStreamedToolCalls(toolAcc);\n textD.resolve(accumulated);\n usageD.resolve(nativeUsage);\n finishD.resolve(finishReason);\n toolCallsD.resolve(toolCalls);\n if (nativeUsage) {\n emitModelUsageEvent(runtime, modelType, context.prompt, nativeUsage, {\n modelName: context.modelName,\n ...(() => {\n const costUsd = extractCostUsd(rawUsage, response);\n return typeof costUsd === \"number\" ? { costUsd } : {};\n })(),\n });\n }\n }\n }\n\n return {\n textStream: generate(),\n text: textD.promise,\n usage: usageD.promise,\n finishReason: finishD.promise,\n toolCalls: toolCallsD.promise,\n providerMetadata: { modelName: context.modelName },\n };\n}\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_SMALL_MODEL_TYPE, params);\n}\n\nexport async function handleTextNano(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_NANO_MODEL_TYPE, params);\n}\n\nexport async function handleTextMedium(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEDIUM_MODEL_TYPE, params);\n}\n\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_LARGE_MODEL_TYPE, params);\n}\n\nexport async function handleTextMega(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEGA_MODEL_TYPE, params);\n}\n\nexport async function handleResponseHandler(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, RESPONSE_HANDLER_MODEL_TYPE, params);\n}\n\nexport async function handleActionPlanner(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, ACTION_PLANNER_MODEL_TYPE, params);\n}\n"
16
15
  ],
17
- "mappings": "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",
18
- "debugId": "06464BB61850EEE264756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "14309D70FEEE136A64756E2164756E21",
19
18
  "names": []
20
19
  }