@elizaos/plugin-elizacloud 2.0.0-alpha.8 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +220 -0
- package/auto-enable.ts +17 -0
- package/dist/browser/index.browser.js +2 -21
- package/dist/browser/index.browser.js.map +5 -38
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.node.cjs +12165 -2277
- package/dist/cjs/index.node.js.map +135 -28
- package/dist/cloud/auth.d.ts +19 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +330 -0
- package/dist/cloud/auth.js.map +12 -0
- package/dist/cloud/backup.d.ts +18 -0
- package/dist/cloud/backup.d.ts.map +1 -0
- package/dist/cloud/backup.js +63 -0
- package/dist/cloud/backup.js.map +10 -0
- package/dist/cloud/base-url.d.ts +3 -0
- package/dist/cloud/base-url.d.ts.map +1 -0
- package/dist/cloud/base-url.js +77 -0
- package/dist/cloud/base-url.js.map +10 -0
- package/dist/cloud/bridge-client.d.ts +126 -0
- package/dist/cloud/bridge-client.d.ts.map +1 -0
- package/dist/cloud/bridge-client.js +432 -0
- package/dist/cloud/bridge-client.js.map +11 -0
- package/dist/cloud/cloud-api-key.d.ts +26 -0
- package/dist/cloud/cloud-api-key.d.ts.map +1 -0
- package/dist/cloud/cloud-api-key.js +60 -0
- package/dist/cloud/cloud-api-key.js.map +10 -0
- package/dist/cloud/cloud-manager.d.ts +33 -0
- package/dist/cloud/cloud-manager.d.ts.map +1 -0
- package/dist/cloud/cloud-manager.js +853 -0
- package/dist/cloud/cloud-manager.js.map +16 -0
- package/dist/cloud/cloud-proxy.d.ts +20 -0
- package/dist/cloud/cloud-proxy.d.ts.map +1 -0
- package/dist/cloud/cloud-proxy.js +54 -0
- package/dist/cloud/cloud-proxy.js.map +10 -0
- package/dist/cloud/cloud-wallet.d.ts +94 -0
- package/dist/cloud/cloud-wallet.d.ts.map +1 -0
- package/dist/cloud/cloud-wallet.js +5195 -0
- package/dist/cloud/cloud-wallet.js.map +92 -0
- package/dist/cloud/index.d.ts +9 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +30 -0
- package/dist/cloud/index.js.map +9 -0
- package/dist/cloud/reconnect.d.ts +26 -0
- package/dist/cloud/reconnect.d.ts.map +1 -0
- package/dist/cloud/reconnect.js +104 -0
- package/dist/cloud/reconnect.js.map +10 -0
- package/dist/cloud/validate-url.d.ts +2 -0
- package/dist/cloud/validate-url.d.ts.map +1 -0
- package/dist/cloud/validate-url.js +174 -0
- package/dist/cloud/validate-url.js.map +10 -0
- package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
- package/dist/cloud-providers/cloud-status.js +78 -0
- package/dist/cloud-providers/cloud-status.js.map +10 -0
- package/dist/cloud-providers/container-health.d.ts.map +1 -1
- package/dist/cloud-providers/container-health.js +74 -0
- package/dist/cloud-providers/container-health.js.map +10 -0
- package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
- package/dist/cloud-providers/credit-balance.js +85 -0
- package/dist/cloud-providers/credit-balance.js.map +10 -0
- package/dist/cloud-providers/index.d.ts.map +1 -1
- package/dist/cloud-providers/index.js +24 -0
- package/dist/cloud-providers/index.js.map +9 -0
- package/dist/cloud-providers/model-registry.d.ts.map +1 -1
- package/dist/cloud-providers/model-registry.js +71 -0
- package/dist/cloud-providers/model-registry.js.map +10 -0
- package/dist/index.browser.d.ts +4 -3
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12851 -0
- package/dist/index.js.map +145 -0
- package/dist/index.node.d.ts +14 -2
- package/dist/index.node.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +169 -0
- package/dist/init.js.map +12 -0
- package/dist/lib/cloud-connection.d.ts +78 -0
- package/dist/lib/cloud-connection.d.ts.map +1 -0
- package/dist/lib/cloud-connection.js +731 -0
- package/dist/lib/cloud-connection.js.map +14 -0
- package/dist/lib/cloud-secrets.d.ts +23 -0
- package/dist/lib/cloud-secrets.d.ts.map +1 -0
- package/dist/lib/cloud-secrets.js +64 -0
- package/dist/lib/cloud-secrets.js.map +10 -0
- package/dist/lib/config-env.d.ts +5 -0
- package/dist/lib/config-env.d.ts.map +1 -0
- package/dist/lib/config-env.js +191 -0
- package/dist/lib/config-env.js.map +11 -0
- package/dist/lib/config-like.d.ts +40 -0
- package/dist/lib/config-like.d.ts.map +1 -0
- package/dist/lib/config-like.js +103 -0
- package/dist/lib/config-like.js.map +10 -0
- package/dist/lib/credential-type-map.d.ts +53 -0
- package/dist/lib/credential-type-map.d.ts.map +1 -0
- package/dist/lib/credential-type-map.js +88 -0
- package/dist/lib/credential-type-map.js.map +10 -0
- package/dist/lib/feature-flags.d.ts +2 -0
- package/dist/lib/feature-flags.d.ts.map +1 -0
- package/dist/lib/feature-flags.js +40 -0
- package/dist/lib/feature-flags.js.map +10 -0
- package/dist/lib/http.d.ts +22 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +107 -0
- package/dist/lib/http.js.map +10 -0
- package/dist/lib/server-cloud-tts.d.ts +34 -0
- package/dist/lib/server-cloud-tts.d.ts.map +1 -0
- package/dist/lib/server-cloud-tts.js +549 -0
- package/dist/lib/server-cloud-tts.js.map +13 -0
- package/dist/lib/state-paths.d.ts +4 -0
- package/dist/lib/state-paths.d.ts.map +1 -0
- package/dist/lib/state-paths.js +52 -0
- package/dist/lib/state-paths.js.map +10 -0
- package/dist/lib/tts-debug.d.ts +4 -0
- package/dist/lib/tts-debug.d.ts.map +1 -0
- package/dist/lib/tts-debug.js +57 -0
- package/dist/lib/tts-debug.js.map +10 -0
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/embeddings.js +319 -0
- package/dist/models/embeddings.js.map +13 -0
- package/dist/models/image.d.ts.map +1 -1
- package/dist/models/image.js +374 -0
- package/dist/models/image.js.map +14 -0
- package/dist/models/index.d.ts +1 -2
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1386 -0
- package/dist/models/index.js.map +20 -0
- package/dist/models/research.d.ts.map +1 -1
- package/dist/models/research.js +324 -0
- package/dist/models/research.js.map +13 -0
- package/dist/models/speech.d.ts.map +1 -1
- package/dist/models/speech.js +273 -0
- package/dist/models/speech.js.map +13 -0
- package/dist/models/text.d.ts +5 -2
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/text.js +803 -0
- package/dist/models/text.js.map +15 -0
- package/dist/models/tokenization.d.ts.map +1 -1
- package/dist/models/tokenization.js +65 -0
- package/dist/models/tokenization.js.map +10 -0
- package/dist/models/transcription.d.ts.map +1 -1
- package/dist/models/transcription.js +283 -0
- package/dist/models/transcription.js.map +13 -0
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.node.js +12170 -2266
- package/dist/node/index.node.js.map +135 -28
- package/dist/onboarding.d.ts +35 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +883 -0
- package/dist/onboarding.js.map +14 -0
- package/dist/plugin.d.ts +20 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +7611 -0
- package/dist/plugin.js.map +104 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +127 -0
- package/dist/providers/openai.js.map +11 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +7612 -0
- package/dist/register-routes.js.map +105 -0
- package/dist/routes/cloud-billing-routes.d.ts +9 -0
- package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
- package/dist/routes/cloud-billing-routes.js +807 -0
- package/dist/routes/cloud-billing-routes.js.map +14 -0
- package/dist/routes/cloud-compat-routes.d.ts +10 -0
- package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
- package/dist/routes/cloud-compat-routes.js +538 -0
- package/dist/routes/cloud-compat-routes.js.map +14 -0
- package/dist/routes/cloud-features-routes.d.ts +9 -0
- package/dist/routes/cloud-features-routes.d.ts.map +1 -0
- package/dist/routes/cloud-features-routes.js +124 -0
- package/dist/routes/cloud-features-routes.js.map +11 -0
- package/dist/routes/cloud-provisioning.d.ts +14 -0
- package/dist/routes/cloud-provisioning.d.ts.map +1 -0
- package/dist/routes/cloud-provisioning.js +37 -0
- package/dist/routes/cloud-provisioning.js.map +10 -0
- package/dist/routes/cloud-relay-routes.d.ts +22 -0
- package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
- package/dist/routes/cloud-relay-routes.js +60 -0
- package/dist/routes/cloud-relay-routes.js.map +10 -0
- package/dist/routes/cloud-routes-autonomous.d.ts +83 -0
- package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-routes-autonomous.js +6134 -0
- package/dist/routes/cloud-routes-autonomous.js.map +97 -0
- package/dist/routes/cloud-routes.d.ts +35 -0
- package/dist/routes/cloud-routes.d.ts.map +1 -0
- package/dist/routes/cloud-routes.js +6888 -0
- package/dist/routes/cloud-routes.js.map +100 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts +15 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes-autonomous.js +396 -0
- package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
- package/dist/routes/cloud-status-routes.d.ts +4 -0
- package/dist/routes/cloud-status-routes.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes.js +771 -0
- package/dist/routes/cloud-status-routes.js.map +15 -0
- package/dist/services/cloud-auth.d.ts +140 -5
- package/dist/services/cloud-auth.d.ts.map +1 -1
- package/dist/services/cloud-auth.js +363 -0
- package/dist/services/cloud-auth.js.map +12 -0
- package/dist/services/cloud-backup.d.ts.map +1 -1
- package/dist/services/cloud-backup.js +176 -0
- package/dist/services/cloud-backup.js.map +11 -0
- package/dist/services/cloud-bootstrap.d.ts +38 -0
- package/dist/services/cloud-bootstrap.d.ts.map +1 -0
- package/dist/services/cloud-bootstrap.js +84 -0
- package/dist/services/cloud-bootstrap.js.map +10 -0
- package/dist/services/cloud-bridge.d.ts +1 -1
- package/dist/services/cloud-bridge.d.ts.map +1 -1
- package/dist/services/cloud-bridge.js +308 -0
- package/dist/services/cloud-bridge.js.map +11 -0
- package/dist/services/cloud-container.d.ts.map +1 -1
- package/dist/services/cloud-container.js +241 -0
- package/dist/services/cloud-container.js.map +11 -0
- package/dist/services/cloud-credential-provider.d.ts +55 -0
- package/dist/services/cloud-credential-provider.d.ts.map +1 -0
- package/dist/services/cloud-credential-provider.js +190 -0
- package/dist/services/cloud-credential-provider.js.map +11 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
- package/dist/services/cloud-managed-gateway-relay.js +479 -0
- package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
- package/dist/services/cloud-model-registry.d.ts.map +1 -1
- package/dist/services/cloud-model-registry.js +175 -0
- package/dist/services/cloud-model-registry.js.map +10 -0
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +29 -0
- package/dist/services/index.js.map +9 -0
- package/dist/types/cloud.d.ts +41 -19
- package/dist/types/cloud.d.ts.map +1 -1
- package/dist/types/cloud.js +52 -0
- package/dist/types/cloud.js.map +10 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +9 -0
- package/dist/utils/cloud-api.d.ts +2 -27
- package/dist/utils/cloud-api.d.ts.map +1 -1
- package/dist/utils/cloud-api.js +33 -0
- package/dist/utils/cloud-api.js.map +10 -0
- package/dist/utils/cloud-sdk/client.d.ts +133 -0
- package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/client.js +3561 -0
- package/dist/utils/cloud-sdk/client.js.map +13 -0
- package/dist/utils/cloud-sdk/http.d.ts +37 -0
- package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/http.js +237 -0
- package/dist/utils/cloud-sdk/http.js.map +11 -0
- package/dist/utils/cloud-sdk/index.d.ts +6 -0
- package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/index.js +29 -0
- package/dist/utils/cloud-sdk/index.js.map +9 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts +5377 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/public-routes.js +2950 -0
- package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
- package/dist/utils/cloud-sdk/types.d.ts +655 -0
- package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.js +29 -0
- package/dist/utils/cloud-sdk/types.js.map +10 -0
- package/dist/utils/config.d.ts +7 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +137 -0
- package/dist/utils/config.js.map +10 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/events.js +43 -0
- package/dist/utils/events.js.map +10 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +103 -0
- package/dist/utils/helpers.js.map +10 -0
- package/dist/utils/responses-output.d.ts +13 -0
- package/dist/utils/responses-output.d.ts.map +1 -0
- package/dist/utils/responses-output.js +102 -0
- package/dist/utils/responses-output.js.map +10 -0
- package/dist/utils/sdk-client.d.ts +5 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/dist/utils/sdk-client.js +144 -0
- package/dist/utils/sdk-client.js.map +11 -0
- package/package.json +108 -19
- package/src/cloud/auth.ts +175 -0
- package/src/cloud/backup.ts +46 -0
- package/src/cloud/base-url.ts +62 -0
- package/src/cloud/bridge-client.ts +602 -0
- package/src/cloud/cloud-api-key.ts +80 -0
- package/src/cloud/cloud-manager.ts +163 -0
- package/src/cloud/cloud-proxy.ts +52 -0
- package/src/cloud/cloud-wallet.ts +341 -0
- package/src/cloud/index.ts +28 -0
- package/src/cloud/reconnect.ts +111 -0
- package/src/cloud/validate-url.ts +181 -0
- package/src/cloud-providers/cloud-status.ts +75 -0
- package/src/cloud-providers/container-health.ts +68 -0
- package/src/cloud-providers/credit-balance.ts +70 -0
- package/src/cloud-providers/index.ts +3 -0
- package/src/cloud-providers/model-registry.ts +74 -0
- package/src/index.browser.ts +10 -0
- package/src/index.node.ts +39 -0
- package/src/index.ts +347 -0
- package/src/init.ts +39 -0
- package/src/lib/cloud-connection.ts +663 -0
- package/src/lib/cloud-secrets.ts +58 -0
- package/src/lib/config-env.ts +168 -0
- package/src/lib/config-like.ts +149 -0
- package/src/lib/credential-type-map.ts +130 -0
- package/src/lib/feature-flags.ts +26 -0
- package/src/lib/http.ts +139 -0
- package/src/lib/server-cloud-tts.ts +609 -0
- package/src/lib/state-paths.ts +28 -0
- package/src/lib/tts-debug.ts +34 -0
- package/src/models/embeddings.ts +234 -0
- package/src/models/image.ts +219 -0
- package/src/models/index.ts +16 -0
- package/src/models/research.ts +265 -0
- package/src/models/speech.ts +78 -0
- package/src/models/text.ts +899 -0
- package/src/models/tokenization.ts +67 -0
- package/src/models/transcription.ts +97 -0
- package/src/onboarding.ts +396 -0
- package/src/plugin.ts +243 -0
- package/src/providers/openai.ts +16 -0
- package/src/register-routes.ts +6 -0
- package/src/routes/cloud-billing-routes.ts +754 -0
- package/src/routes/cloud-compat-routes.ts +314 -0
- package/src/routes/cloud-features-routes.ts +57 -0
- package/src/routes/cloud-provisioning.ts +37 -0
- package/src/routes/cloud-relay-routes.ts +89 -0
- package/src/routes/cloud-routes-autonomous.ts +996 -0
- package/src/routes/cloud-routes.ts +576 -0
- package/src/routes/cloud-status-routes-autonomous.ts +234 -0
- package/src/routes/cloud-status-routes.ts +73 -0
- package/src/services/cloud-auth.ts +567 -0
- package/src/services/cloud-backup.ts +208 -0
- package/src/services/cloud-bootstrap.ts +108 -0
- package/src/services/cloud-bridge.ts +386 -0
- package/src/services/cloud-container.ts +297 -0
- package/src/services/cloud-credential-provider.ts +210 -0
- package/src/services/cloud-managed-gateway-relay.ts +663 -0
- package/src/services/cloud-model-registry.ts +202 -0
- package/src/services/index.ts +17 -0
- package/{types → src/types}/cloud.ts +52 -29
- package/{types → src/types}/index.ts +6 -0
- package/src/utils/cloud-api.ts +10 -0
- package/src/utils/cloud-sdk/client.ts +735 -0
- package/src/utils/cloud-sdk/http.ts +291 -0
- package/src/utils/cloud-sdk/index.ts +23 -0
- package/src/utils/cloud-sdk/public-routes.ts +5070 -0
- package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
- package/src/utils/cloud-sdk/types.ts +762 -0
- package/src/utils/config.ts +174 -0
- package/src/utils/events.ts +37 -0
- package/src/utils/helpers.ts +107 -0
- package/src/utils/responses-output.ts +115 -0
- package/src/utils/sdk-client.ts +37 -0
- package/dist/actions/check-credits.d.ts +0 -6
- package/dist/actions/check-credits.d.ts.map +0 -1
- package/dist/actions/freeze-agent.d.ts +0 -9
- package/dist/actions/freeze-agent.d.ts.map +0 -1
- package/dist/actions/index.d.ts +0 -5
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/actions/provision-agent.d.ts +0 -8
- package/dist/actions/provision-agent.d.ts.map +0 -1
- package/dist/actions/resume-agent.d.ts +0 -9
- package/dist/actions/resume-agent.d.ts.map +0 -1
- package/dist/build.d.ts +0 -3
- package/dist/build.d.ts.map +0 -1
- package/dist/generated/specs/specs.d.ts +0 -55
- package/dist/generated/specs/specs.d.ts.map +0 -1
- package/dist/models/object.d.ts +0 -4
- package/dist/models/object.d.ts.map +0 -1
- package/dist/utils/forwarded-settings.d.ts +0 -8
- package/dist/utils/forwarded-settings.d.ts.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
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"],
|
|
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",
|
|
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",
|
|
14
|
+
"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"
|
|
16
|
+
],
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "06464BB61850EEE264756E2164756E21",
|
|
19
|
+
"names": []
|
|
20
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../models/research.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACd,cAAc,EACf,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/models/research.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACd,cAAc,EACf,MAAM,eAAe,CAAC;AAyLvB,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,CAAC,CAoEzB"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __returnValue = (v) => v;
|
|
4
|
+
function __exportSetter(name, newValue) {
|
|
5
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
+
}
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
set: __exportSetter.bind(all, name)
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
18
|
+
|
|
19
|
+
// src/utils/config.ts
|
|
20
|
+
import { logger } from "@elizaos/core";
|
|
21
|
+
import { DEFAULT_ELIZA_CLOUD_TEXT_MODEL } from "@elizaos/core";
|
|
22
|
+
var DEFAULT_ELIZA_CLOUD_LARGE_MODEL = "deepseek/deepseek-v4-pro";
|
|
23
|
+
function getEnvValue(key) {
|
|
24
|
+
if (typeof process === "undefined") {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const value = process.env[key];
|
|
28
|
+
return value === undefined ? undefined : String(value);
|
|
29
|
+
}
|
|
30
|
+
function getSetting(runtime, key, defaultValue) {
|
|
31
|
+
const value = runtime.getSetting(key);
|
|
32
|
+
if (value !== undefined && value !== null) {
|
|
33
|
+
return String(value);
|
|
34
|
+
}
|
|
35
|
+
return getEnvValue(key) ?? defaultValue;
|
|
36
|
+
}
|
|
37
|
+
function isBrowser() {
|
|
38
|
+
return typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined";
|
|
39
|
+
}
|
|
40
|
+
function isProxyMode(runtime) {
|
|
41
|
+
return isBrowser() && !!getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_BASE_URL");
|
|
42
|
+
}
|
|
43
|
+
function getBaseURL(runtime) {
|
|
44
|
+
const browserURL = getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_BASE_URL");
|
|
45
|
+
const baseURL = isBrowser() && browserURL ? browserURL : getSetting(runtime, "ELIZAOS_CLOUD_BASE_URL", "https://www.elizacloud.ai/api/v1");
|
|
46
|
+
return baseURL;
|
|
47
|
+
}
|
|
48
|
+
function getEmbeddingBaseURL(runtime) {
|
|
49
|
+
const embeddingURL = isBrowser() ? getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL") || getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_BASE_URL") : getSetting(runtime, "ELIZAOS_CLOUD_EMBEDDING_URL");
|
|
50
|
+
if (embeddingURL) {
|
|
51
|
+
logger.debug(`[ELIZAOS_CLOUD] Using specific embedding base URL: ${embeddingURL}`);
|
|
52
|
+
return embeddingURL;
|
|
53
|
+
}
|
|
54
|
+
logger.debug("[ELIZAOS_CLOUD] Falling back to general base URL for embeddings.");
|
|
55
|
+
return getBaseURL(runtime);
|
|
56
|
+
}
|
|
57
|
+
function getApiKey(runtime) {
|
|
58
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_API_KEY");
|
|
59
|
+
}
|
|
60
|
+
function getEmbeddingApiKey(runtime) {
|
|
61
|
+
const embeddingApiKey = getSetting(runtime, "ELIZAOS_CLOUD_EMBEDDING_API_KEY");
|
|
62
|
+
if (embeddingApiKey) {
|
|
63
|
+
logger.debug("[ELIZAOS_CLOUD] Using specific embedding API key (present)");
|
|
64
|
+
return embeddingApiKey;
|
|
65
|
+
}
|
|
66
|
+
logger.debug("[ELIZAOS_CLOUD] Falling back to general API key for embeddings.");
|
|
67
|
+
return getApiKey(runtime);
|
|
68
|
+
}
|
|
69
|
+
function getSmallModel(runtime) {
|
|
70
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_SMALL_MODEL") ?? getSetting(runtime, "SMALL_MODEL", DEFAULT_ELIZA_CLOUD_TEXT_MODEL);
|
|
71
|
+
}
|
|
72
|
+
function getNanoModel(runtime) {
|
|
73
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_NANO_MODEL") ?? getSetting(runtime, "NANO_MODEL") ?? getSmallModel(runtime);
|
|
74
|
+
}
|
|
75
|
+
function getMediumModel(runtime) {
|
|
76
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_MEDIUM_MODEL") ?? getSetting(runtime, "MEDIUM_MODEL") ?? getSmallModel(runtime);
|
|
77
|
+
}
|
|
78
|
+
function getLargeModel(runtime) {
|
|
79
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_LARGE_MODEL") ?? getSetting(runtime, "LARGE_MODEL", DEFAULT_ELIZA_CLOUD_LARGE_MODEL);
|
|
80
|
+
}
|
|
81
|
+
function getMegaModel(runtime) {
|
|
82
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_MEGA_MODEL") ?? getSetting(runtime, "MEGA_MODEL") ?? getLargeModel(runtime);
|
|
83
|
+
}
|
|
84
|
+
function getResponseHandlerModel(runtime) {
|
|
85
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL") ?? getSetting(runtime, "ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL") ?? getSetting(runtime, "RESPONSE_HANDLER_MODEL") ?? getSetting(runtime, "SHOULD_RESPOND_MODEL") ?? getSmallModel(runtime);
|
|
86
|
+
}
|
|
87
|
+
function getActionPlannerModel(runtime) {
|
|
88
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_ACTION_PLANNER_MODEL") ?? getSetting(runtime, "ELIZAOS_CLOUD_PLANNER_MODEL") ?? getSetting(runtime, "ACTION_PLANNER_MODEL") ?? getSetting(runtime, "PLANNER_MODEL") ?? getLargeModel(runtime);
|
|
89
|
+
}
|
|
90
|
+
function getResponseModel(runtime) {
|
|
91
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_RESPONSE_MODEL") ?? getSetting(runtime, "RESPONSE_MODEL") ?? getLargeModel(runtime);
|
|
92
|
+
}
|
|
93
|
+
function getImageDescriptionModel(runtime) {
|
|
94
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL", "gpt-5.4-mini");
|
|
95
|
+
}
|
|
96
|
+
function getImageGenerationModel(runtime) {
|
|
97
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL", "google/gemini-2.5-flash-image") ?? "google/gemini-2.5-flash-image";
|
|
98
|
+
}
|
|
99
|
+
function getResearchModel(runtime) {
|
|
100
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_RESEARCH_MODEL") ?? getSetting(runtime, "RESEARCH_MODEL", "o3-deep-research");
|
|
101
|
+
}
|
|
102
|
+
function getTTSModel(runtime) {
|
|
103
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_TTS_MODEL", "gpt-5-mini-tts");
|
|
104
|
+
}
|
|
105
|
+
function getTranscriptionModel(runtime) {
|
|
106
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_TRANSCRIPTION_MODEL", "gpt-5-mini-transcribe");
|
|
107
|
+
}
|
|
108
|
+
function getExperimentalTelemetry(runtime) {
|
|
109
|
+
const setting = getSetting(runtime, "ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY", "false");
|
|
110
|
+
return String(setting).toLowerCase() === "true";
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// src/utils/sdk-client.ts
|
|
114
|
+
import { CloudApiClient, ElizaCloudClient } from "@elizaos/cloud-sdk";
|
|
115
|
+
function trimTrailingSlash(value) {
|
|
116
|
+
return value.replace(/\/+$/, "");
|
|
117
|
+
}
|
|
118
|
+
function apiBaseToSiteBaseUrl(apiBaseUrl) {
|
|
119
|
+
const trimmed = trimTrailingSlash(apiBaseUrl);
|
|
120
|
+
return trimmed.endsWith("/api/v1") ? trimmed.slice(0, -"/api/v1".length) : trimmed;
|
|
121
|
+
}
|
|
122
|
+
function apiKeyForRuntime(runtime, embedding = false) {
|
|
123
|
+
if (isBrowser())
|
|
124
|
+
return;
|
|
125
|
+
return embedding ? getEmbeddingApiKey(runtime) : getApiKey(runtime);
|
|
126
|
+
}
|
|
127
|
+
function createCloudApiClient(runtime, embedding = false) {
|
|
128
|
+
const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);
|
|
129
|
+
return new CloudApiClient(trimTrailingSlash(baseUrl), apiKeyForRuntime(runtime, embedding));
|
|
130
|
+
}
|
|
131
|
+
function createElizaCloudClient(runtime) {
|
|
132
|
+
const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));
|
|
133
|
+
return new ElizaCloudClient({
|
|
134
|
+
apiBaseUrl,
|
|
135
|
+
baseUrl: apiBaseToSiteBaseUrl(apiBaseUrl),
|
|
136
|
+
apiKey: apiKeyForRuntime(runtime)
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// src/utils/events.ts
|
|
141
|
+
import {
|
|
142
|
+
EventType
|
|
143
|
+
} from "@elizaos/core";
|
|
144
|
+
function emitModelUsageEvent(runtime, type, _prompt, usage) {
|
|
145
|
+
const inputTokens = Number(usage.inputTokens || 0);
|
|
146
|
+
const outputTokens = Number(usage.outputTokens || 0);
|
|
147
|
+
const totalTokens = Number(usage.totalTokens != null ? usage.totalTokens : inputTokens + outputTokens);
|
|
148
|
+
const payload = {
|
|
149
|
+
runtime,
|
|
150
|
+
source: "elizacloud",
|
|
151
|
+
type,
|
|
152
|
+
tokens: {
|
|
153
|
+
prompt: inputTokens,
|
|
154
|
+
completion: outputTokens,
|
|
155
|
+
total: totalTokens
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
runtime.emitEvent(EventType.MODEL_USED, payload);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// src/models/research.ts
|
|
162
|
+
import { logger as logger2, ModelType } from "@elizaos/core";
|
|
163
|
+
function normalizeInput(input) {
|
|
164
|
+
if (typeof input !== "string") {
|
|
165
|
+
return input;
|
|
166
|
+
}
|
|
167
|
+
return [
|
|
168
|
+
{
|
|
169
|
+
role: "user",
|
|
170
|
+
content: [
|
|
171
|
+
{
|
|
172
|
+
type: "input_text",
|
|
173
|
+
text: input
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
function buildResearchApiError(status, errorText) {
|
|
180
|
+
try {
|
|
181
|
+
const parsed = JSON.parse(errorText);
|
|
182
|
+
const message = parsed.error?.message;
|
|
183
|
+
const param = parsed.error?.param;
|
|
184
|
+
if (param === "tools.0.type" && message?.includes('expected "function"')) {
|
|
185
|
+
return new Error(`Research API error: ${status} Eliza Cloud /responses rejected deep-research tool types; the provider currently only accepts function tools on this route`);
|
|
186
|
+
}
|
|
187
|
+
} catch {}
|
|
188
|
+
return new Error(`Research API error: ${status} ${errorText}`);
|
|
189
|
+
}
|
|
190
|
+
function parseAnnotations(raw) {
|
|
191
|
+
return raw.filter((a) => a.url !== undefined).map((a) => ({
|
|
192
|
+
url: a.url,
|
|
193
|
+
title: a.title ?? "",
|
|
194
|
+
startIndex: a.start_index ?? 0,
|
|
195
|
+
endIndex: a.end_index ?? 0
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
function parseOutputItems(raw) {
|
|
199
|
+
const items = [];
|
|
200
|
+
for (const item of raw) {
|
|
201
|
+
switch (item.type) {
|
|
202
|
+
case "web_search_call":
|
|
203
|
+
items.push({
|
|
204
|
+
id: item.id ?? "",
|
|
205
|
+
type: "web_search_call",
|
|
206
|
+
status: item.status ?? "completed",
|
|
207
|
+
action: {
|
|
208
|
+
type: item.action?.type ?? "search",
|
|
209
|
+
query: item.action?.query,
|
|
210
|
+
url: item.action?.url
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
break;
|
|
214
|
+
case "file_search_call":
|
|
215
|
+
items.push({
|
|
216
|
+
id: item.id ?? "",
|
|
217
|
+
type: "file_search_call",
|
|
218
|
+
status: item.status ?? "completed",
|
|
219
|
+
query: item.query ?? "",
|
|
220
|
+
results: item.results?.map((r) => ({
|
|
221
|
+
fileId: r.file_id,
|
|
222
|
+
fileName: r.file_name,
|
|
223
|
+
score: r.score
|
|
224
|
+
}))
|
|
225
|
+
});
|
|
226
|
+
break;
|
|
227
|
+
case "code_interpreter_call":
|
|
228
|
+
items.push({
|
|
229
|
+
id: item.id ?? "",
|
|
230
|
+
type: "code_interpreter_call",
|
|
231
|
+
status: item.status ?? "completed",
|
|
232
|
+
code: item.code ?? "",
|
|
233
|
+
output: item.output
|
|
234
|
+
});
|
|
235
|
+
break;
|
|
236
|
+
case "mcp_tool_call":
|
|
237
|
+
items.push({
|
|
238
|
+
id: item.id ?? "",
|
|
239
|
+
type: "mcp_tool_call",
|
|
240
|
+
status: item.status ?? "completed",
|
|
241
|
+
serverLabel: item.server_label ?? "",
|
|
242
|
+
toolName: item.tool_name ?? "",
|
|
243
|
+
arguments: item.arguments ?? {},
|
|
244
|
+
result: item.result
|
|
245
|
+
});
|
|
246
|
+
break;
|
|
247
|
+
case "message": {
|
|
248
|
+
const content = item.content ?? [];
|
|
249
|
+
items.push({
|
|
250
|
+
type: "message",
|
|
251
|
+
content: content.filter((c) => c.type === "output_text").map((c) => ({
|
|
252
|
+
type: "output_text",
|
|
253
|
+
text: c.text ?? "",
|
|
254
|
+
annotations: parseAnnotations(c.annotations ?? [])
|
|
255
|
+
}))
|
|
256
|
+
});
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return items;
|
|
262
|
+
}
|
|
263
|
+
async function handleResearch(runtime, params) {
|
|
264
|
+
const modelName = params.model ?? getResearchModel(runtime);
|
|
265
|
+
logger2.log(`[ELIZAOS_CLOUD] Using RESEARCH model: ${modelName}`);
|
|
266
|
+
const tools = params.tools ?? [{ type: "web_search_preview" }];
|
|
267
|
+
const requestBody = {
|
|
268
|
+
model: modelName,
|
|
269
|
+
input: normalizeInput(params.input),
|
|
270
|
+
tools
|
|
271
|
+
};
|
|
272
|
+
if (params.instructions) {
|
|
273
|
+
requestBody.instructions = params.instructions;
|
|
274
|
+
}
|
|
275
|
+
if (params.background !== undefined) {
|
|
276
|
+
requestBody.background = params.background;
|
|
277
|
+
}
|
|
278
|
+
if (params.maxToolCalls !== undefined) {
|
|
279
|
+
requestBody.max_tool_calls = params.maxToolCalls;
|
|
280
|
+
}
|
|
281
|
+
if (params.reasoningSummary) {
|
|
282
|
+
requestBody.reasoning = { summary: params.reasoningSummary };
|
|
283
|
+
}
|
|
284
|
+
const response = await createCloudApiClient(runtime).requestRaw("POST", "/responses", {
|
|
285
|
+
json: requestBody
|
|
286
|
+
});
|
|
287
|
+
if (!response.ok) {
|
|
288
|
+
const errorText = await response.text();
|
|
289
|
+
throw buildResearchApiError(response.status, errorText);
|
|
290
|
+
}
|
|
291
|
+
const data = await response.json();
|
|
292
|
+
if (data.usage) {
|
|
293
|
+
emitModelUsageEvent(runtime, ModelType.RESEARCH, params.input, {
|
|
294
|
+
inputTokens: data.usage.input_tokens,
|
|
295
|
+
outputTokens: data.usage.output_tokens,
|
|
296
|
+
totalTokens: data.usage.total_tokens
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
const outputItems = parseOutputItems(data.output);
|
|
300
|
+
let text = "";
|
|
301
|
+
const annotations = [];
|
|
302
|
+
for (const item of outputItems) {
|
|
303
|
+
if (item.type === "message") {
|
|
304
|
+
for (const content of item.content) {
|
|
305
|
+
if (content.type === "output_text") {
|
|
306
|
+
text += content.text;
|
|
307
|
+
annotations.push(...content.annotations);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
id: data.id,
|
|
314
|
+
text,
|
|
315
|
+
annotations,
|
|
316
|
+
outputItems,
|
|
317
|
+
status: data.status
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
export {
|
|
321
|
+
handleResearch
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
//# debugId=163F7D32AAF8B0F764756E2164756E21
|