@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.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/README.md +29 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent-memory.d.ts +118 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +186 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/async-local-storage.d.ts +20 -0
- package/dist/async-local-storage.d.ts.map +1 -0
- package/dist/async-local-storage.js +28 -0
- package/dist/async-local-storage.js.map +1 -0
- package/dist/blender-executor.d.ts +93 -0
- package/dist/blender-executor.d.ts.map +1 -0
- package/dist/blender-executor.js +294 -0
- package/dist/blender-executor.js.map +1 -0
- package/dist/comfy-executor.d.ts +23 -1
- package/dist/comfy-executor.d.ts.map +1 -1
- package/dist/comfy-executor.js +234 -55
- package/dist/comfy-executor.js.map +1 -1
- package/dist/context-packer.d.ts +1 -1
- package/dist/context-packer.d.ts.map +1 -1
- package/dist/context-packer.js +23 -25
- package/dist/context-packer.js.map +1 -1
- package/dist/context.d.ts +954 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2424 -513
- package/dist/context.js.map +1 -1
- package/dist/cost-reconciler.d.ts +32 -0
- package/dist/cost-reconciler.d.ts.map +1 -0
- package/dist/cost-reconciler.js +21 -0
- package/dist/cost-reconciler.js.map +1 -0
- package/dist/entities.d.ts +33 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +43 -0
- package/dist/entities.js.map +1 -0
- package/dist/external-media-fetch.d.ts +29 -0
- package/dist/external-media-fetch.d.ts.map +1 -0
- package/dist/external-media-fetch.js +38 -0
- package/dist/external-media-fetch.js.map +1 -0
- package/dist/generation-receipt.d.ts +86 -0
- package/dist/generation-receipt.d.ts.map +1 -0
- package/dist/generation-receipt.js +137 -0
- package/dist/generation-receipt.js.map +1 -0
- package/dist/generation-registry.d.ts +67 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +126 -0
- package/dist/generation-registry.js.map +1 -0
- package/dist/google/client.d.ts +196 -0
- package/dist/google/client.d.ts.map +1 -0
- package/dist/google/client.js +396 -0
- package/dist/google/client.js.map +1 -0
- package/dist/google/index.d.ts +3 -0
- package/dist/google/index.d.ts.map +1 -0
- package/dist/google/index.js +3 -0
- package/dist/google/index.js.map +1 -0
- package/dist/google/token.d.ts +15 -0
- package/dist/google/token.d.ts.map +1 -0
- package/dist/google/token.js +24 -0
- package/dist/google/token.js.map +1 -0
- package/dist/host-binaries.d.ts +106 -0
- package/dist/host-binaries.d.ts.map +1 -0
- package/dist/host-binaries.js +344 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +74 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +273 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/index.d.ts +56 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -4
- package/dist/index.js.map +1 -1
- package/dist/invocation-account.d.ts +43 -0
- package/dist/invocation-account.d.ts.map +1 -0
- package/dist/invocation-account.js +60 -0
- package/dist/invocation-account.js.map +1 -0
- package/dist/media-ref-bytes.d.ts +19 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +181 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +113 -2
- package/dist/node-executor.d.ts.map +1 -1
- package/dist/permission-gate.d.ts +152 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +87 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/prefixed-storage-adapter.d.ts +33 -0
- package/dist/prefixed-storage-adapter.d.ts.map +1 -0
- package/dist/prefixed-storage-adapter.js +70 -0
- package/dist/prefixed-storage-adapter.js.map +1 -0
- package/dist/prompt-asset-refs.d.ts +222 -0
- package/dist/prompt-asset-refs.d.ts.map +1 -0
- package/dist/prompt-asset-refs.js +751 -0
- package/dist/prompt-asset-refs.js.map +1 -0
- package/dist/provider-cache.d.ts +3 -0
- package/dist/provider-cache.d.ts.map +1 -0
- package/dist/provider-cache.js +8 -0
- package/dist/provider-cache.js.map +1 -0
- package/dist/providers/aki-provider.d.ts +33 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +84 -77
- package/dist/providers/aki-provider.js.map +1 -1
- package/dist/providers/alibaba-provider.d.ts +39 -0
- package/dist/providers/alibaba-provider.d.ts.map +1 -0
- package/dist/providers/alibaba-provider.js +86 -0
- package/dist/providers/alibaba-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +52 -3
- package/dist/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/providers/anthropic-provider.js +1020 -338
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/atlascloud-provider.d.ts +101 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1009 -0
- package/dist/providers/atlascloud-provider.js.map +1 -0
- package/dist/providers/atlascloud-transport.d.ts +100 -0
- package/dist/providers/atlascloud-transport.d.ts.map +1 -0
- package/dist/providers/atlascloud-transport.js +364 -0
- package/dist/providers/atlascloud-transport.js.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.js +104 -0
- package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
- package/dist/providers/audio-mime.d.ts +11 -0
- package/dist/providers/audio-mime.d.ts.map +1 -0
- package/dist/providers/audio-mime.js +46 -0
- package/dist/providers/audio-mime.js.map +1 -0
- package/dist/providers/base-provider.d.ts +481 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1259 -42
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/cassette-provider.d.ts +217 -0
- package/dist/providers/cassette-provider.d.ts.map +1 -0
- package/dist/providers/cassette-provider.js +502 -0
- package/dist/providers/cassette-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +6 -12
- package/dist/providers/cerebras-provider.d.ts.map +1 -1
- package/dist/providers/cerebras-provider.js +8 -33
- package/dist/providers/cerebras-provider.js.map +1 -1
- package/dist/providers/claude-agent-provider.d.ts +131 -68
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1095 -515
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +82 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +492 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +5 -2
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +9 -2
- package/dist/providers/cohere-provider.js.map +1 -1
- package/dist/providers/comfy-cloud-provider.d.ts +30 -0
- package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
- package/dist/providers/comfy-cloud-provider.js +42 -0
- package/dist/providers/comfy-cloud-provider.js.map +1 -0
- package/dist/providers/content-filter.d.ts +46 -0
- package/dist/providers/content-filter.d.ts.map +1 -0
- package/dist/providers/content-filter.js +92 -0
- package/dist/providers/content-filter.js.map +1 -0
- package/dist/providers/context-exceeded.d.ts +37 -0
- package/dist/providers/context-exceeded.d.ts.map +1 -0
- package/dist/providers/context-exceeded.js +114 -0
- package/dist/providers/context-exceeded.js.map +1 -0
- package/dist/providers/context-window.d.ts +44 -0
- package/dist/providers/context-window.d.ts.map +1 -0
- package/dist/providers/context-window.js +145 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/contract/index.d.ts +4 -0
- package/dist/providers/contract/index.d.ts.map +1 -0
- package/dist/providers/contract/index.js +4 -0
- package/dist/providers/contract/index.js.map +1 -0
- package/dist/providers/contract/probe-manifest.d.ts +75 -0
- package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
- package/dist/providers/contract/probe-manifest.js +379 -0
- package/dist/providers/contract/probe-manifest.js.map +1 -0
- package/dist/providers/contract/probe-runner.d.ts +57 -0
- package/dist/providers/contract/probe-runner.d.ts.map +1 -0
- package/dist/providers/contract/probe-runner.js +180 -0
- package/dist/providers/contract/probe-runner.js.map +1 -0
- package/dist/providers/contract/redact.d.ts +29 -0
- package/dist/providers/contract/redact.d.ts.map +1 -0
- package/dist/providers/contract/redact.js +113 -0
- package/dist/providers/contract/redact.js.map +1 -0
- package/dist/providers/core-tools.d.ts +74 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +127 -0
- package/dist/providers/core-tools.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +69 -50
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +207 -397
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +45 -0
- package/dist/providers/credential-check.d.ts.map +1 -0
- package/dist/providers/credential-check.js +159 -0
- package/dist/providers/credential-check.js.map +1 -0
- package/dist/providers/custom-model-kinds.d.ts +33 -0
- package/dist/providers/custom-model-kinds.d.ts.map +1 -0
- package/dist/providers/custom-model-kinds.js +96 -0
- package/dist/providers/custom-model-kinds.js.map +1 -0
- package/dist/providers/custom-openai-provider.d.ts +81 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +182 -0
- package/dist/providers/custom-openai-provider.js.map +1 -0
- package/dist/providers/custom-provider-registry.d.ts +19 -0
- package/dist/providers/custom-provider-registry.d.ts.map +1 -0
- package/dist/providers/custom-provider-registry.js +52 -0
- package/dist/providers/custom-provider-registry.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +8 -14
- package/dist/providers/deepseek-provider.d.ts.map +1 -1
- package/dist/providers/deepseek-provider.js +6 -35
- package/dist/providers/deepseek-provider.js.map +1 -1
- package/dist/providers/defaults.d.ts +12 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +12 -0
- package/dist/providers/defaults.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +49 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +142 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -0
- package/dist/providers/entity-references.d.ts +31 -0
- package/dist/providers/entity-references.d.ts.map +1 -0
- package/dist/providers/entity-references.js +113 -0
- package/dist/providers/entity-references.js.map +1 -0
- package/dist/providers/evolink-provider.d.ts +38 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +304 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +72 -1
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +203 -1
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fal-generations.d.ts +106 -0
- package/dist/providers/fal-generations.d.ts.map +1 -0
- package/dist/providers/fal-generations.js +286 -0
- package/dist/providers/fal-generations.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +171 -7
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1369 -64
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/fal-queue.d.ts +47 -0
- package/dist/providers/fal-queue.d.ts.map +1 -0
- package/dist/providers/fal-queue.js +231 -0
- package/dist/providers/fal-queue.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +148 -8
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1500 -316
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/gmi-provider.d.ts +21 -0
- package/dist/providers/gmi-provider.d.ts.map +1 -0
- package/dist/providers/gmi-provider.js +34 -0
- package/dist/providers/gmi-provider.js.map +1 -0
- package/dist/providers/gpt-image-size.d.ts +3 -0
- package/dist/providers/gpt-image-size.d.ts.map +1 -0
- package/dist/providers/gpt-image-size.js +37 -0
- package/dist/providers/gpt-image-size.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +9 -12
- package/dist/providers/groq-provider.d.ts.map +1 -1
- package/dist/providers/groq-provider.js +19 -33
- package/dist/providers/groq-provider.js.map +1 -1
- package/dist/providers/groq-request.d.ts +38 -0
- package/dist/providers/groq-request.d.ts.map +1 -0
- package/dist/providers/groq-request.js +138 -0
- package/dist/providers/groq-request.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +30 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +131 -0
- package/dist/providers/higgsfield-provider.js.map +1 -0
- package/dist/providers/higgsfield-transport.d.ts +106 -0
- package/dist/providers/higgsfield-transport.d.ts.map +1 -0
- package/dist/providers/higgsfield-transport.js +182 -0
- package/dist/providers/higgsfield-transport.js.map +1 -0
- package/dist/providers/http-transport.d.ts +74 -0
- package/dist/providers/http-transport.d.ts.map +1 -0
- package/dist/providers/http-transport.js +152 -0
- package/dist/providers/http-transport.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +71 -3
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +230 -34
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/image-mime.d.ts +39 -0
- package/dist/providers/image-mime.d.ts.map +1 -0
- package/dist/providers/image-mime.js +111 -0
- package/dist/providers/image-mime.js.map +1 -0
- package/dist/providers/image-ref.d.ts +21 -0
- package/dist/providers/image-ref.d.ts.map +1 -0
- package/dist/providers/image-ref.js +44 -0
- package/dist/providers/image-ref.js.map +1 -0
- package/dist/providers/index.d.ts +84 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +239 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +10 -2
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +16 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +170 -9
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1176 -228
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/kie-webhook-registry.d.ts +28 -0
- package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
- package/dist/providers/kie-webhook-registry.js +91 -0
- package/dist/providers/kie-webhook-registry.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +21 -37
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +43 -354
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.d.ts +4 -7
- package/dist/providers/lmstudio-provider.d.ts.map +1 -1
- package/dist/providers/lmstudio-provider.js +24 -15
- package/dist/providers/lmstudio-provider.js.map +1 -1
- package/dist/providers/manifest-models.d.ts +341 -1
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +1106 -22
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/media-mime.d.ts +14 -0
- package/dist/providers/media-mime.d.ts.map +1 -0
- package/dist/providers/media-mime.js +35 -0
- package/dist/providers/media-mime.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +14 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +76 -46
- package/dist/providers/meshy-provider.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +22 -0
- package/dist/providers/meta-provider.d.ts.map +1 -0
- package/dist/providers/meta-provider.js +54 -0
- package/dist/providers/meta-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +25 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +211 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +6 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +10 -34
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/moonshot-provider.d.ts +11 -15
- package/dist/providers/moonshot-provider.d.ts.map +1 -1
- package/dist/providers/moonshot-provider.js +33 -23
- package/dist/providers/moonshot-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +98 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +479 -0
- package/dist/providers/node-llama-cpp-provider.js.map +1 -0
- package/dist/providers/nodetool-provider.d.ts +49 -0
- package/dist/providers/nodetool-provider.d.ts.map +1 -0
- package/dist/providers/nodetool-provider.js +224 -0
- package/dist/providers/nodetool-provider.js.map +1 -0
- package/dist/providers/oauth/browser-launcher.d.ts +23 -0
- package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
- package/dist/providers/oauth/browser-launcher.js +45 -0
- package/dist/providers/oauth/browser-launcher.js.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.js +133 -0
- package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
- package/dist/providers/oauth/claude-code-login.d.ts +124 -0
- package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-login.js +230 -0
- package/dist/providers/oauth/claude-code-login.js.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
- package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
- package/dist/providers/oauth/errors.d.ts +54 -0
- package/dist/providers/oauth/errors.d.ts.map +1 -0
- package/dist/providers/oauth/errors.js +79 -0
- package/dist/providers/oauth/errors.js.map +1 -0
- package/dist/providers/oauth/index.d.ts +105 -0
- package/dist/providers/oauth/index.d.ts.map +1 -0
- package/dist/providers/oauth/index.js +167 -0
- package/dist/providers/oauth/index.js.map +1 -0
- package/dist/providers/oauth/jwt-claims.d.ts +23 -0
- package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
- package/dist/providers/oauth/jwt-claims.js +67 -0
- package/dist/providers/oauth/jwt-claims.js.map +1 -0
- package/dist/providers/oauth/local-callback-server.d.ts +60 -0
- package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
- package/dist/providers/oauth/local-callback-server.js +148 -0
- package/dist/providers/oauth/local-callback-server.js.map +1 -0
- package/dist/providers/oauth/oauth-client.d.ts +55 -0
- package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/oauth-client.js +161 -0
- package/dist/providers/oauth/oauth-client.js.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.js +265 -0
- package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
- package/dist/providers/oauth/pkce-helper.d.ts +43 -0
- package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
- package/dist/providers/oauth/pkce-helper.js +57 -0
- package/dist/providers/oauth/pkce-helper.js.map +1 -0
- package/dist/providers/oauth/redaction.d.ts +22 -0
- package/dist/providers/oauth/redaction.d.ts.map +1 -0
- package/dist/providers/oauth/redaction.js +59 -0
- package/dist/providers/oauth/redaction.js.map +1 -0
- package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
- package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
- package/dist/providers/oauth/secure-credential-store.js +73 -0
- package/dist/providers/oauth/secure-credential-store.js.map +1 -0
- package/dist/providers/oauth/token-store.d.ts +53 -0
- package/dist/providers/oauth/token-store.d.ts.map +1 -0
- package/dist/providers/oauth/token-store.js +78 -0
- package/dist/providers/oauth/token-store.js.map +1 -0
- package/dist/providers/oauth/types.d.ts +64 -0
- package/dist/providers/oauth/types.d.ts.map +1 -0
- package/dist/providers/oauth/types.js +12 -0
- package/dist/providers/oauth/types.js.map +1 -0
- package/dist/providers/object-tracking.d.ts +47 -0
- package/dist/providers/object-tracking.d.ts.map +1 -0
- package/dist/providers/object-tracking.js +46 -0
- package/dist/providers/object-tracking.js.map +1 -0
- package/dist/providers/offline-model-index.d.ts +20 -0
- package/dist/providers/offline-model-index.d.ts.map +1 -0
- package/dist/providers/offline-model-index.js +112 -0
- package/dist/providers/offline-model-index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +28 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +193 -43
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +57 -0
- package/dist/providers/openai-compat/client.d.ts.map +1 -0
- package/dist/providers/openai-compat/client.js +157 -0
- package/dist/providers/openai-compat/client.js.map +1 -0
- package/dist/providers/openai-compat/decode.d.ts +36 -0
- package/dist/providers/openai-compat/decode.d.ts.map +1 -0
- package/dist/providers/openai-compat/decode.js +55 -0
- package/dist/providers/openai-compat/decode.js.map +1 -0
- package/dist/providers/openai-compat/errors.d.ts +54 -0
- package/dist/providers/openai-compat/errors.d.ts.map +1 -0
- package/dist/providers/openai-compat/errors.js +144 -0
- package/dist/providers/openai-compat/errors.js.map +1 -0
- package/dist/providers/openai-compat/index.d.ts +8 -0
- package/dist/providers/openai-compat/index.d.ts.map +1 -0
- package/dist/providers/openai-compat/index.js +5 -0
- package/dist/providers/openai-compat/index.js.map +1 -0
- package/dist/providers/openai-compat/sse.d.ts +14 -0
- package/dist/providers/openai-compat/sse.d.ts.map +1 -0
- package/dist/providers/openai-compat/sse.js +69 -0
- package/dist/providers/openai-compat/sse.js.map +1 -0
- package/dist/providers/openai-compat/types.d.ts +75 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -0
- package/dist/providers/openai-compat/types.js +9 -0
- package/dist/providers/openai-compat/types.js.map +1 -0
- package/dist/providers/openai-compat-provider.d.ts +90 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -0
- package/dist/providers/openai-compat-provider.js +282 -0
- package/dist/providers/openai-compat-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +89 -26
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +990 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +6 -12
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +24 -53
- package/dist/providers/openrouter-provider.js.map +1 -1
- package/dist/providers/provider-call-failure.d.ts +39 -0
- package/dist/providers/provider-call-failure.d.ts.map +1 -0
- package/dist/providers/provider-call-failure.js +132 -0
- package/dist/providers/provider-call-failure.js.map +1 -0
- package/dist/providers/provider-error.d.ts +59 -0
- package/dist/providers/provider-error.d.ts.map +1 -0
- package/dist/providers/provider-error.js +165 -0
- package/dist/providers/provider-error.js.map +1 -0
- package/dist/providers/provider-generations.d.ts +99 -0
- package/dist/providers/provider-generations.d.ts.map +1 -0
- package/dist/providers/provider-generations.js +71 -0
- package/dist/providers/provider-generations.js.map +1 -0
- package/dist/providers/provider-queue.d.ts +62 -0
- package/dist/providers/provider-queue.d.ts.map +1 -0
- package/dist/providers/provider-queue.js +28 -0
- package/dist/providers/provider-queue.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +33 -14
- package/dist/providers/provider-registry.d.ts.map +1 -1
- package/dist/providers/provider-registry.js +85 -68
- package/dist/providers/provider-registry.js.map +1 -1
- package/dist/providers/provider-request-log.d.ts +53 -0
- package/dist/providers/provider-request-log.d.ts.map +1 -0
- package/dist/providers/provider-request-log.js +157 -0
- package/dist/providers/provider-request-log.js.map +1 -0
- package/dist/providers/provider-session.d.ts +3 -0
- package/dist/providers/provider-session.d.ts.map +1 -0
- package/dist/providers/provider-session.js +10 -0
- package/dist/providers/provider-session.js.map +1 -0
- package/dist/providers/provider-transport.d.ts +11 -0
- package/dist/providers/provider-transport.d.ts.map +1 -0
- package/dist/providers/provider-transport.js +11 -0
- package/dist/providers/provider-transport.js.map +1 -0
- package/dist/providers/python-provider.d.ts +20 -12
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +185 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +89 -7
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +801 -65
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/replicate-retry.d.ts +30 -0
- package/dist/providers/replicate-retry.d.ts.map +1 -0
- package/dist/providers/replicate-retry.js +97 -0
- package/dist/providers/replicate-retry.js.map +1 -0
- package/dist/providers/responses-api.d.ts +27 -0
- package/dist/providers/responses-api.d.ts.map +1 -0
- package/dist/providers/responses-api.js +297 -0
- package/dist/providers/responses-api.js.map +1 -0
- package/dist/providers/reve-provider.d.ts +45 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +159 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +23 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +89 -51
- package/dist/providers/rodin-provider.js.map +1 -1
- package/dist/providers/safe-url.d.ts +70 -0
- package/dist/providers/safe-url.d.ts.map +1 -0
- package/dist/providers/safe-url.js +277 -0
- package/dist/providers/safe-url.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +9 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +86 -10
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/structured-output.d.ts +42 -0
- package/dist/providers/structured-output.d.ts.map +1 -0
- package/dist/providers/structured-output.js +83 -0
- package/dist/providers/structured-output.js.map +1 -0
- package/dist/providers/together-provider.d.ts +19 -16
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +103 -225
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +44 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +239 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +603 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +81 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +27 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +266 -0
- package/dist/providers/useapi-provider.js.map +1 -0
- package/dist/providers/video-duration.d.ts +6 -0
- package/dist/providers/video-duration.d.ts.map +1 -0
- package/dist/providers/video-duration.js +63 -0
- package/dist/providers/video-duration.js.map +1 -0
- package/dist/providers/video-frame-fallback.d.ts +39 -0
- package/dist/providers/video-frame-fallback.d.ts.map +1 -0
- package/dist/providers/video-frame-fallback.js +155 -0
- package/dist/providers/video-frame-fallback.js.map +1 -0
- package/dist/providers/video-frames.d.ts +61 -0
- package/dist/providers/video-frames.d.ts.map +1 -0
- package/dist/providers/video-frames.js +208 -0
- package/dist/providers/video-frames.js.map +1 -0
- package/dist/providers/video-mime.d.ts +14 -0
- package/dist/providers/video-mime.d.ts.map +1 -0
- package/dist/providers/video-mime.js +44 -0
- package/dist/providers/video-mime.js.map +1 -0
- package/dist/providers/video-to-audio.d.ts +34 -0
- package/dist/providers/video-to-audio.d.ts.map +1 -0
- package/dist/providers/video-to-audio.js +62 -0
- package/dist/providers/video-to-audio.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +48 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +10 -2
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +16 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +54 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +299 -22
- package/dist/providers/xai-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +358 -0
- package/dist/python-bridge-base.d.ts.map +1 -0
- package/dist/python-bridge-base.js +1557 -0
- package/dist/python-bridge-base.js.map +1 -0
- package/dist/python-bridge-codec.d.ts +28 -0
- package/dist/python-bridge-codec.d.ts.map +1 -0
- package/dist/python-bridge-codec.js +39 -0
- package/dist/python-bridge-codec.js.map +1 -0
- package/dist/python-bridge-factory.d.ts +52 -0
- package/dist/python-bridge-factory.d.ts.map +1 -0
- package/dist/python-bridge-factory.js +69 -0
- package/dist/python-bridge-factory.js.map +1 -0
- package/dist/python-bridge-framing.d.ts +68 -0
- package/dist/python-bridge-framing.d.ts.map +1 -0
- package/dist/python-bridge-framing.js +91 -0
- package/dist/python-bridge-framing.js.map +1 -0
- package/dist/python-bridge-types.d.ts +545 -2
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js +49 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-graph-resolver.d.ts +57 -0
- package/dist/python-graph-resolver.d.ts.map +1 -0
- package/dist/python-graph-resolver.js +79 -0
- package/dist/python-graph-resolver.js.map +1 -0
- package/dist/python-node-executor.d.ts +36 -4
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +177 -86
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +18 -37
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +148 -475
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/python-websocket-bridge.d.ts +140 -0
- package/dist/python-websocket-bridge.d.ts.map +1 -0
- package/dist/python-websocket-bridge.js +561 -0
- package/dist/python-websocket-bridge.js.map +1 -0
- package/dist/python-worker-stderr.d.ts +4 -0
- package/dist/python-worker-stderr.d.ts.map +1 -0
- package/dist/python-worker-stderr.js +24 -0
- package/dist/python-worker-stderr.js.map +1 -0
- package/dist/recommended-models.d.ts +2 -2
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +24 -4
- package/dist/recommended-models.js.map +1 -1
- package/dist/recoverable-node-error.d.ts +31 -0
- package/dist/recoverable-node-error.d.ts.map +1 -0
- package/dist/recoverable-node-error.js +37 -0
- package/dist/recoverable-node-error.js.map +1 -0
- package/dist/redact-params.d.ts +13 -0
- package/dist/redact-params.d.ts.map +1 -0
- package/dist/redact-params.js +57 -0
- package/dist/redact-params.js.map +1 -0
- package/dist/sandbox-module-catalog.d.ts +43 -0
- package/dist/sandbox-module-catalog.d.ts.map +1 -0
- package/dist/sandbox-module-catalog.js +25 -0
- package/dist/sandbox-module-catalog.js.map +1 -0
- package/dist/storage-workspace.d.ts +59 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +426 -0
- package/dist/storage-workspace.js.map +1 -0
- package/dist/swappable-python-bridge.d.ts +83 -0
- package/dist/swappable-python-bridge.d.ts.map +1 -0
- package/dist/swappable-python-bridge.js +246 -0
- package/dist/swappable-python-bridge.js.map +1 -0
- package/dist/telemetry.d.ts +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +23 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +81 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +130 -0
- package/dist/testing.js.map +1 -0
- package/dist/token-counter.d.ts +30 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +156 -0
- package/dist/token-counter.js.map +1 -0
- package/dist/trace-exporters.d.ts +10 -0
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +59 -20
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +45 -4
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +62 -19
- package/dist/tracing-helpers.js.map +1 -1
- package/dist/turn-budget.d.ts +278 -0
- package/dist/turn-budget.d.ts.map +1 -0
- package/dist/turn-budget.js +365 -0
- package/dist/turn-budget.js.map +1 -0
- package/dist/variable-channel.d.ts +48 -0
- package/dist/variable-channel.d.ts.map +1 -0
- package/dist/variable-channel.js +110 -0
- package/dist/variable-channel.js.map +1 -0
- package/dist/workspace.d.ts +119 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +112 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +107 -19
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python worker bridge using a remote WebSocket transport.
|
|
3
|
+
*
|
|
4
|
+
* Unlike {@link PythonStdioBridge}, this bridge NEVER spawns a process — it
|
|
5
|
+
* connects to an already-running worker (Docker, remote host, sidecar) by URL.
|
|
6
|
+
* The worker lifecycle is owned externally; this bridge only owns the socket.
|
|
7
|
+
*
|
|
8
|
+
* Wire protocol: one WS BINARY message == exactly one msgpack frame. There is
|
|
9
|
+
* NO 4-byte length prefix (that framing belongs to the stdio transport). The
|
|
10
|
+
* worker sends frames via `ws.send(msgpack.packb(msg))`; we decode every
|
|
11
|
+
* incoming binary message with msgpack.decode and feed it to the shared
|
|
12
|
+
* {@link PythonBridgeBase._handleMessage}.
|
|
13
|
+
*
|
|
14
|
+
* Resilience: if the socket drops unexpectedly (worker restart, network blip),
|
|
15
|
+
* the bridge rejects all in-flight requests, emits "exit", and then reconnects
|
|
16
|
+
* with exponential backoff (1s, 2s, 4s, … capped at maxReconnectDelayMs).
|
|
17
|
+
* After a successful reconnect it re-runs discover + worker.status and emits
|
|
18
|
+
* "reconnected". An explicit {@link close} disables reconnect.
|
|
19
|
+
*/
|
|
20
|
+
import { packBridgeMessage, unpackBridgeMessage } from "./python-bridge-codec.js";
|
|
21
|
+
import WebSocket from "ws";
|
|
22
|
+
import { createLogger, safeProcessEnv } from "@nodetool-ai/config";
|
|
23
|
+
import { PythonBridgeBase } from "./python-bridge-base.js";
|
|
24
|
+
const log = createLogger("nodetool.runtime.python-websocket-bridge");
|
|
25
|
+
import { isCallable } from "@nodetool-ai/protocol";
|
|
26
|
+
/** Mirror of the stdio bridge's frame ceiling, used here for `maxPayload`. */
|
|
27
|
+
const MAX_BRIDGE_FRAME_SIZE = Number(safeProcessEnv()["NODETOOL_BRIDGE_MAX_FRAME_SIZE"] ?? 256 * 1024 * 1024);
|
|
28
|
+
const DEFAULT_STARTUP_TIMEOUT_MS = 20000;
|
|
29
|
+
const DEFAULT_RECONNECT_RPC_TIMEOUT_MS = 20000;
|
|
30
|
+
const DEFAULT_MAX_RECONNECT_DELAY_MS = 30000;
|
|
31
|
+
const INITIAL_RECONNECT_DELAY_MS = 1000;
|
|
32
|
+
function attachErrorSinks(ws) {
|
|
33
|
+
try {
|
|
34
|
+
ws.on("error", () => { });
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* best-effort */
|
|
38
|
+
}
|
|
39
|
+
// The raw TCP socket can emit its own error during a CONNECTING teardown.
|
|
40
|
+
// SAFETY: `ws` is a Node `ws` socket, which keeps the underlying TCP
|
|
41
|
+
// socket on `_socket`; the optional declaration and the guard below cover a
|
|
42
|
+
// build that does not.
|
|
43
|
+
const rawSocket = ws._socket;
|
|
44
|
+
if (rawSocket && isCallable(rawSocket.on)) {
|
|
45
|
+
try {
|
|
46
|
+
rawSocket.on("error", () => { });
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
/* best-effort */
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Terminate a socket crash-safely: attach error sinks (see
|
|
55
|
+
* {@link attachErrorSinks}) before terminating so any late CONNECTING-state
|
|
56
|
+
* error is swallowed rather than crashing the process.
|
|
57
|
+
*/
|
|
58
|
+
function crashSafeTerminate(ws) {
|
|
59
|
+
attachErrorSinks(ws);
|
|
60
|
+
try {
|
|
61
|
+
ws.terminate();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
/* best-effort cleanup */
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export class WebsocketPythonBridge extends PythonBridgeBase {
|
|
68
|
+
_ws = null;
|
|
69
|
+
// Mutable so the bridge can be re-pointed at a different worker at runtime via
|
|
70
|
+
// setTarget(); both are captured from options at construction as the default.
|
|
71
|
+
_wsUrl;
|
|
72
|
+
_workerToken;
|
|
73
|
+
_maxReconnectDelayMs;
|
|
74
|
+
_reconnectRpcTimeoutMs;
|
|
75
|
+
_autoReconnect;
|
|
76
|
+
/** Set once close() is called — permanently disables reconnect. */
|
|
77
|
+
_explicitlyClosed = false;
|
|
78
|
+
/** Timer for a pending reconnect attempt, if any. */
|
|
79
|
+
_reconnectTimer = null;
|
|
80
|
+
/** True while a reconnect attempt is in flight (guards overlap). */
|
|
81
|
+
_reconnecting = false;
|
|
82
|
+
/**
|
|
83
|
+
* Monotonic generation for reconnect attempts. Bumped whenever the current
|
|
84
|
+
* attempt is superseded (setTarget re-points the worker, or a teardown
|
|
85
|
+
* abandons it). An in-flight _attemptReconnect captures the epoch at start
|
|
86
|
+
* and, once its RPC settles, bails out if the epoch changed — so a stale
|
|
87
|
+
* attempt can't clobber the state of the one that replaced it.
|
|
88
|
+
*/
|
|
89
|
+
_reconnectEpoch = 0;
|
|
90
|
+
/**
|
|
91
|
+
* True once a connection has been fully established and announced (initial
|
|
92
|
+
* connect() resolved, or a reconnect emitted "reconnected"). Gates the
|
|
93
|
+
* "exit" emission so a socket that drops mid-reconnect — before any
|
|
94
|
+
* "reconnected" was emitted for it — does not produce a duplicate "exit"
|
|
95
|
+
* for consumers pairing exit/reconnected.
|
|
96
|
+
*/
|
|
97
|
+
_announcedConnected = false;
|
|
98
|
+
/** Current backoff delay; doubles each failed attempt. */
|
|
99
|
+
_reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
100
|
+
/**
|
|
101
|
+
* Set while an _openTransport handshake is in flight; invoking it rejects the
|
|
102
|
+
* handshake and crash-safely tears down the CONNECTING socket. Lets close()
|
|
103
|
+
* abort a connect that is still mid-handshake instead of waiting out the full
|
|
104
|
+
* startup timeout.
|
|
105
|
+
*/
|
|
106
|
+
_abortHandshake = null;
|
|
107
|
+
/** Bound listeners for the active socket, removed before replacing it. */
|
|
108
|
+
_messageListener = null;
|
|
109
|
+
_closeListener = null;
|
|
110
|
+
_errorListener = null;
|
|
111
|
+
constructor(options = {}) {
|
|
112
|
+
super(options);
|
|
113
|
+
if (!options.wsUrl) {
|
|
114
|
+
throw new Error("WebsocketPythonBridge requires options.wsUrl — the remote worker WebSocket URL");
|
|
115
|
+
}
|
|
116
|
+
this._wsUrl = options.wsUrl;
|
|
117
|
+
// Shared-secret bearer token: when present, every handshake (connect AND
|
|
118
|
+
// reconnect, both via _openSocket) carries `Authorization: Bearer <token>`.
|
|
119
|
+
// An empty string is treated as unset (no header → worker accepts all).
|
|
120
|
+
this._workerToken = options.workerToken || undefined;
|
|
121
|
+
this._maxReconnectDelayMs =
|
|
122
|
+
options.maxReconnectDelayMs ?? DEFAULT_MAX_RECONNECT_DELAY_MS;
|
|
123
|
+
this._reconnectRpcTimeoutMs =
|
|
124
|
+
options.reconnectRpcTimeoutMs ?? DEFAULT_RECONNECT_RPC_TIMEOUT_MS;
|
|
125
|
+
// WebSocket transport reconnects by default — the worker lives elsewhere
|
|
126
|
+
// and may restart independently. Set autoRestart: false to opt out.
|
|
127
|
+
this._autoReconnect = options.autoRestart ?? true;
|
|
128
|
+
}
|
|
129
|
+
/** The remote worker WebSocket URL this bridge connects to. */
|
|
130
|
+
get wsUrl() {
|
|
131
|
+
return this._wsUrl;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Re-point the bridge at a different worker without restarting the process.
|
|
135
|
+
* Used by the worker-attach flow: attaching a provisioned GPU worker hands its
|
|
136
|
+
* `{wsUrl, token}` here so the live bridge adopts it.
|
|
137
|
+
*
|
|
138
|
+
* No-op when `url` matches the current target (avoids a needless reconnect).
|
|
139
|
+
* Otherwise the current socket is torn down — rejecting any in-flight requests
|
|
140
|
+
* — the new url/token replace the instance fields, and a reconnect is forced
|
|
141
|
+
* through the existing reconnect path so `_openSocket` uses the new values and
|
|
142
|
+
* a successful re-point emits "reconnected" like any other reconnect. An empty
|
|
143
|
+
* or missing token sends no `Authorization` header (worker accepts all).
|
|
144
|
+
*/
|
|
145
|
+
setTarget(url, token) {
|
|
146
|
+
if (url === this._wsUrl)
|
|
147
|
+
return;
|
|
148
|
+
this._wsUrl = url;
|
|
149
|
+
// Match the constructor: an empty string means "no token" (no auth header).
|
|
150
|
+
this._workerToken = token || undefined;
|
|
151
|
+
// Cancel any pending/in-flight reconnect so the next attempt uses the new
|
|
152
|
+
// target and backoff timing is deterministic.
|
|
153
|
+
if (this._reconnectTimer) {
|
|
154
|
+
clearTimeout(this._reconnectTimer);
|
|
155
|
+
this._reconnectTimer = null;
|
|
156
|
+
}
|
|
157
|
+
this._reconnecting = false;
|
|
158
|
+
this._reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
159
|
+
// Abort any in-flight handshake (CONNECTING socket) before tearing down.
|
|
160
|
+
// _teardownSocket only acts on this._ws, but a handshake in progress lives
|
|
161
|
+
// only in the _openTransport closure — without aborting it, its finishSuccess
|
|
162
|
+
// would later set this._ws and clobber the new target's socket.
|
|
163
|
+
if (this._abortHandshake) {
|
|
164
|
+
const abort = this._abortHandshake;
|
|
165
|
+
this._abortHandshake = null;
|
|
166
|
+
abort(new Error("Python worker re-pointed via setTarget"));
|
|
167
|
+
}
|
|
168
|
+
// Tear down the current socket (detaches listeners → no spurious
|
|
169
|
+
// _onUnexpectedClose) and reject in-flight requests, then drive a fresh
|
|
170
|
+
// connect against the new target via the reconnect path.
|
|
171
|
+
this._teardownSocket("Python worker re-pointed via setTarget");
|
|
172
|
+
void this._attemptReconnect();
|
|
173
|
+
}
|
|
174
|
+
// ── Connection lifecycle ────────────────────────────────────────────
|
|
175
|
+
/**
|
|
176
|
+
* Connect to the remote worker. Overrides the base flow so the post-open RPC
|
|
177
|
+
* phase (discover + worker.status) is bounded by a timeout: the startup
|
|
178
|
+
* timeout only covers the TCP/WS handshake, so a worker that accepts the
|
|
179
|
+
* socket but never answers discover would otherwise hang connect() forever.
|
|
180
|
+
* On RPC timeout we tear down the half-open socket (crash-safe) and reject.
|
|
181
|
+
*/
|
|
182
|
+
async connect() {
|
|
183
|
+
this._assertCanConnect();
|
|
184
|
+
await this._openTransport();
|
|
185
|
+
try {
|
|
186
|
+
await this._withRpcTimeout(this._runPostOpenRpc());
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
this._teardownSocket(err instanceof Error ? err.message : "Python worker connect failed");
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
this._announcedConnected = true;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Run discover + worker.status against the freshly-opened socket. discover
|
|
196
|
+
* failures propagate (they mean the worker is unusable); a status failure is
|
|
197
|
+
* tolerated — load_errors will simply be unavailable until the next fetch.
|
|
198
|
+
*/
|
|
199
|
+
async _runPostOpenRpc() {
|
|
200
|
+
await this._discover();
|
|
201
|
+
try {
|
|
202
|
+
// Use the status call bounded by statusTimeoutMs so a worker that
|
|
203
|
+
// answers discover but hangs on status does not stall the RPC phase up
|
|
204
|
+
// to the (larger) reconnectRpcTimeoutMs.
|
|
205
|
+
await this._getWorkerStatusWithTimeout();
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
log.warn("Failed to fetch worker status; load_errors will be unavailable until the next status fetch", err);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Race a post-open RPC promise against the configured RPC timeout. A worker
|
|
213
|
+
* that accepts the socket but never answers (half-open: port up before
|
|
214
|
+
* handlers are registered during a restart) is rejected rather than allowed
|
|
215
|
+
* to hang. A timeout of 0 disables the bound.
|
|
216
|
+
*/
|
|
217
|
+
async _withRpcTimeout(promise) {
|
|
218
|
+
const timeoutMs = this._reconnectRpcTimeoutMs;
|
|
219
|
+
if (timeoutMs <= 0) {
|
|
220
|
+
return promise;
|
|
221
|
+
}
|
|
222
|
+
let timer;
|
|
223
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
224
|
+
timer = setTimeout(() => {
|
|
225
|
+
reject(new Error(`Python worker did not answer discover/status within ${timeoutMs}ms (${this._wsUrl}).`));
|
|
226
|
+
}, timeoutMs);
|
|
227
|
+
});
|
|
228
|
+
try {
|
|
229
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
if (timer)
|
|
233
|
+
clearTimeout(timer);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Detach long-lived listeners, crash-safely terminate the current socket,
|
|
238
|
+
* clear connection state, and reject any requests left in flight (e.g. the
|
|
239
|
+
* discover/status RPCs that timed out, or a user execute that slipped in
|
|
240
|
+
* while the socket was briefly open). Idempotent and safe to call twice.
|
|
241
|
+
*/
|
|
242
|
+
_teardownSocket(reason) {
|
|
243
|
+
if (this._ws) {
|
|
244
|
+
this._detachLongLivedListeners(this._ws);
|
|
245
|
+
crashSafeTerminate(this._ws);
|
|
246
|
+
this._ws = null;
|
|
247
|
+
}
|
|
248
|
+
// Cancel any reconnect armed by a mid-handshake close so a connect() the
|
|
249
|
+
// caller saw fail cannot leave a background reconnect running behind it.
|
|
250
|
+
// _attemptReconnect's catch re-schedules after this returns, so tearing the
|
|
251
|
+
// timer down here does not interfere with the reconnect backoff loop.
|
|
252
|
+
if (this._reconnectTimer) {
|
|
253
|
+
clearTimeout(this._reconnectTimer);
|
|
254
|
+
this._reconnectTimer = null;
|
|
255
|
+
}
|
|
256
|
+
// Supersede any in-flight reconnect: an _attemptReconnect awaiting its RPC
|
|
257
|
+
// captured the old epoch and will no-op when it settles, so it can't clobber
|
|
258
|
+
// a socket opened after this teardown (e.g. by setTarget's fresh attempt).
|
|
259
|
+
this._reconnectEpoch += 1;
|
|
260
|
+
this._connected = false;
|
|
261
|
+
this._rejectAllPending(new Error(reason));
|
|
262
|
+
}
|
|
263
|
+
// ── Transport: open the remote socket ───────────────────────────────
|
|
264
|
+
/**
|
|
265
|
+
* Construct the `ws` WebSocket. The SINGLE place a socket is created — used by
|
|
266
|
+
* both the initial connect and every reconnect (both run through
|
|
267
|
+
* {@link _openTransport}), so the auth header is applied uniformly. When a
|
|
268
|
+
* worker token is configured, send `Authorization: Bearer <token>` on the
|
|
269
|
+
* handshake; otherwise send no header (worker accepts all).
|
|
270
|
+
*/
|
|
271
|
+
_openSocket() {
|
|
272
|
+
return new WebSocket(this._wsUrl, {
|
|
273
|
+
maxPayload: MAX_BRIDGE_FRAME_SIZE,
|
|
274
|
+
headers: this._workerToken
|
|
275
|
+
? { Authorization: `Bearer ${this._workerToken}` }
|
|
276
|
+
: undefined
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
async _openTransport() {
|
|
280
|
+
const startupTimeoutMs = this._options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
|
|
281
|
+
await new Promise((resolve, reject) => {
|
|
282
|
+
let settled = false;
|
|
283
|
+
const ws = this._openSocket();
|
|
284
|
+
ws.binaryType = "nodebuffer";
|
|
285
|
+
const startupTimer = setTimeout(() => {
|
|
286
|
+
finishError(new Error(`Python worker WebSocket did not open within ${startupTimeoutMs}ms (${this._wsUrl}).`));
|
|
287
|
+
}, startupTimeoutMs);
|
|
288
|
+
// Listeners used only during the open handshake; replaced with the
|
|
289
|
+
// long-lived listeners on success.
|
|
290
|
+
const onOpen = () => finishSuccess();
|
|
291
|
+
const onPreOpenError = (err) => finishError(err);
|
|
292
|
+
const onPreOpenClose = () => finishError(new Error(`Python worker WebSocket closed before opening (${this._wsUrl}).`));
|
|
293
|
+
const cleanupHandshake = () => {
|
|
294
|
+
clearTimeout(startupTimer);
|
|
295
|
+
this._abortHandshake = null;
|
|
296
|
+
ws.removeListener("open", onOpen);
|
|
297
|
+
ws.removeListener("error", onPreOpenError);
|
|
298
|
+
ws.removeListener("close", onPreOpenClose);
|
|
299
|
+
};
|
|
300
|
+
const finishError = (err) => {
|
|
301
|
+
if (settled)
|
|
302
|
+
return;
|
|
303
|
+
settled = true;
|
|
304
|
+
cleanupHandshake();
|
|
305
|
+
// cleanupHandshake just removed the only 'error' listener. The socket
|
|
306
|
+
// may still be CONNECTING, in which case terminate() emits a late
|
|
307
|
+
// 'error' that would otherwise crash the process — terminate
|
|
308
|
+
// crash-safely.
|
|
309
|
+
crashSafeTerminate(ws);
|
|
310
|
+
reject(err);
|
|
311
|
+
};
|
|
312
|
+
const finishSuccess = () => {
|
|
313
|
+
if (settled)
|
|
314
|
+
return;
|
|
315
|
+
settled = true;
|
|
316
|
+
cleanupHandshake();
|
|
317
|
+
this._ws = ws;
|
|
318
|
+
this._connected = true;
|
|
319
|
+
this._attachLongLivedListeners(ws);
|
|
320
|
+
resolve();
|
|
321
|
+
};
|
|
322
|
+
// Let close() abort this handshake mid-flight instead of waiting out the
|
|
323
|
+
// full startup timeout.
|
|
324
|
+
this._abortHandshake = finishError;
|
|
325
|
+
// close() may have already fired before we registered the aborter.
|
|
326
|
+
if (this._explicitlyClosed) {
|
|
327
|
+
finishError(new Error(`Python worker WebSocket closed before opening (${this._wsUrl}).`));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
ws.on("open", onOpen);
|
|
331
|
+
ws.on("error", onPreOpenError);
|
|
332
|
+
ws.on("close", onPreOpenClose);
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Wire up the message/close/error handlers for an opened socket. Removed via
|
|
337
|
+
* {@link _detachLongLivedListeners} before any reconnect so listeners never
|
|
338
|
+
* leak across sockets.
|
|
339
|
+
*/
|
|
340
|
+
_attachLongLivedListeners(ws) {
|
|
341
|
+
this._messageListener = (data) => {
|
|
342
|
+
try {
|
|
343
|
+
const buf = this._toUint8Array(data);
|
|
344
|
+
const msg = unpackBridgeMessage(buf);
|
|
345
|
+
// A decoded inbound frame is activity too. Requests are sent once and
|
|
346
|
+
// then answered over minutes — a model download streams progress with
|
|
347
|
+
// no outbound frame at all — so an outbound-only clock freezes while
|
|
348
|
+
// the worker is at its busiest.
|
|
349
|
+
this.emit("activity");
|
|
350
|
+
this._handleMessage(msg);
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
log.error(`Failed to decode WebSocket frame: ${err}`);
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
this._closeListener = () => this._onUnexpectedClose();
|
|
357
|
+
this._errorListener = (err) => {
|
|
358
|
+
log.warn(`Python worker WebSocket error: ${err.message}`);
|
|
359
|
+
this._onUnexpectedClose();
|
|
360
|
+
};
|
|
361
|
+
ws.on("message", this._messageListener);
|
|
362
|
+
ws.on("close", this._closeListener);
|
|
363
|
+
ws.on("error", this._errorListener);
|
|
364
|
+
}
|
|
365
|
+
_detachLongLivedListeners(ws) {
|
|
366
|
+
if (this._messageListener)
|
|
367
|
+
ws.removeListener("message", this._messageListener);
|
|
368
|
+
if (this._closeListener)
|
|
369
|
+
ws.removeListener("close", this._closeListener);
|
|
370
|
+
if (this._errorListener)
|
|
371
|
+
ws.removeListener("error", this._errorListener);
|
|
372
|
+
this._messageListener = null;
|
|
373
|
+
this._closeListener = null;
|
|
374
|
+
this._errorListener = null;
|
|
375
|
+
}
|
|
376
|
+
/** Normalize the various ws RawData shapes into a single Uint8Array. */
|
|
377
|
+
_toUint8Array(data) {
|
|
378
|
+
if (data instanceof ArrayBuffer)
|
|
379
|
+
return new Uint8Array(data);
|
|
380
|
+
if (Array.isArray(data))
|
|
381
|
+
return Buffer.concat(data);
|
|
382
|
+
// Buffer is a Uint8Array subclass; msgpack.decode accepts it directly.
|
|
383
|
+
return data;
|
|
384
|
+
}
|
|
385
|
+
// ── Send ────────────────────────────────────────────────────────────
|
|
386
|
+
_send(msg) {
|
|
387
|
+
if (!this._ws || !this._connected) {
|
|
388
|
+
throw new Error("Not connected to Python worker");
|
|
389
|
+
}
|
|
390
|
+
const payload = packBridgeMessage(msg);
|
|
391
|
+
if (payload.length > MAX_BRIDGE_FRAME_SIZE) {
|
|
392
|
+
throw new Error(`Outgoing Python bridge frame exceeds max size (${payload.length} > ${MAX_BRIDGE_FRAME_SIZE})`);
|
|
393
|
+
}
|
|
394
|
+
// Send as a single binary frame — no length prefix on WebSocket.
|
|
395
|
+
this._ws.send(payload, { binary: true });
|
|
396
|
+
// Every outbound frame to the remote worker is fresh activity. The cost
|
|
397
|
+
// guard's reaper measures idle time from `last_activity_at`, and this bridge
|
|
398
|
+
// is its designated heartbeat source: any host with database access listens
|
|
399
|
+
// for "activity" and touches the worker instance, so an actively-executing
|
|
400
|
+
// worker is never reaped as idle. The listener is
|
|
401
|
+
// `attachWorkerActivityHeartbeat` in @nodetool-ai/compute, wired by the
|
|
402
|
+
// server and by the CLI through `onPythonBridgeCreated`.
|
|
403
|
+
this.emit("activity");
|
|
404
|
+
}
|
|
405
|
+
// ── Unexpected close → reject + reconnect ───────────────────────────
|
|
406
|
+
_onUnexpectedClose() {
|
|
407
|
+
if (this._explicitlyClosed)
|
|
408
|
+
return;
|
|
409
|
+
// Guard re-entrancy: both 'close' and 'error' can fire for one drop.
|
|
410
|
+
if (!this._connected)
|
|
411
|
+
return;
|
|
412
|
+
const reconnecting = this._reconnecting;
|
|
413
|
+
this._connected = false;
|
|
414
|
+
if (this._ws) {
|
|
415
|
+
this._detachLongLivedListeners(this._ws);
|
|
416
|
+
crashSafeTerminate(this._ws);
|
|
417
|
+
this._ws = null;
|
|
418
|
+
}
|
|
419
|
+
// Reject in-flight requests in both cases. When this drop happens during
|
|
420
|
+
// an in-flight reconnect (a fresh socket opened, then dropped while
|
|
421
|
+
// discover/status were running), rejecting the pending discover promise is
|
|
422
|
+
// what kicks _attemptReconnect's catch into owning teardown + backoff +
|
|
423
|
+
// reschedule — so we deliberately do NOT reschedule here, avoiding a race
|
|
424
|
+
// where two paths both grow/skip backoff non-deterministically.
|
|
425
|
+
this._rejectAllPending(new Error("Python worker WebSocket closed unexpectedly"));
|
|
426
|
+
if (reconnecting) {
|
|
427
|
+
// The reconnect attempt owns re-announcement and the next backoff step.
|
|
428
|
+
// Emitting "exit" here would produce a duplicate exit for a connection
|
|
429
|
+
// that was never announced as reconnected.
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
// Only announce "exit" for the drop of a fully-established connection.
|
|
433
|
+
if (this._announcedConnected) {
|
|
434
|
+
this.emit("exit", null);
|
|
435
|
+
}
|
|
436
|
+
if (!this._autoReconnect)
|
|
437
|
+
return;
|
|
438
|
+
// Only auto-reconnect a connection that was fully established. A socket that
|
|
439
|
+
// dropped mid-handshake (during the initial connect's discover/status phase,
|
|
440
|
+
// before it was ever announced) is owned by connect()'s caller: the rejected
|
|
441
|
+
// discover propagates out of connect(), and the caller decides whether to
|
|
442
|
+
// retry. Arming a background reconnect here would race a caller-driven retry
|
|
443
|
+
// into two live sockets. (Mirrors the _announcedConnected exit guard above.)
|
|
444
|
+
if (!this._announcedConnected)
|
|
445
|
+
return;
|
|
446
|
+
this._scheduleReconnect();
|
|
447
|
+
}
|
|
448
|
+
_scheduleReconnect() {
|
|
449
|
+
if (this._explicitlyClosed || !this._autoReconnect)
|
|
450
|
+
return;
|
|
451
|
+
if (this._reconnectTimer || this._reconnecting)
|
|
452
|
+
return;
|
|
453
|
+
const delay = Math.min(this._reconnectDelayMs, this._maxReconnectDelayMs);
|
|
454
|
+
log.info(`Scheduling Python worker WebSocket reconnect in ${delay}ms (${this._wsUrl}).`);
|
|
455
|
+
this._reconnectTimer = setTimeout(() => {
|
|
456
|
+
this._reconnectTimer = null;
|
|
457
|
+
void this._attemptReconnect();
|
|
458
|
+
}, delay);
|
|
459
|
+
}
|
|
460
|
+
async _attemptReconnect() {
|
|
461
|
+
if (this._explicitlyClosed || this._reconnecting)
|
|
462
|
+
return;
|
|
463
|
+
this._reconnecting = true;
|
|
464
|
+
// Snapshot the generation. If setTarget/_teardownSocket supersedes this
|
|
465
|
+
// attempt while its RPC is awaiting, the epoch changes and both the success
|
|
466
|
+
// and failure paths below no-op instead of clobbering the newer attempt's
|
|
467
|
+
// socket/state or arming a duplicate reconnect timer.
|
|
468
|
+
const epoch = ++this._reconnectEpoch;
|
|
469
|
+
try {
|
|
470
|
+
await this._openTransport();
|
|
471
|
+
// Re-run discovery + status against the (possibly new) worker so node
|
|
472
|
+
// metadata and load errors reflect the current process. Bound the RPC
|
|
473
|
+
// phase by a timeout: _openTransport only covers the handshake, so a
|
|
474
|
+
// half-open worker (port up before handlers are registered during a
|
|
475
|
+
// restart) that never answers discover would otherwise wedge the
|
|
476
|
+
// reconnect loop forever with _reconnecting stuck true.
|
|
477
|
+
await this._withRpcTimeout(this._runPostOpenRpc());
|
|
478
|
+
if (epoch !== this._reconnectEpoch || this._explicitlyClosed) {
|
|
479
|
+
// A newer attempt superseded this one, or the bridge was explicitly
|
|
480
|
+
// closed while the RPC was in flight; leave state untouched and do not
|
|
481
|
+
// emit "reconnected" on a dead bridge.
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
// Success: reset backoff and announce.
|
|
485
|
+
this._reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
486
|
+
this._reconnecting = false;
|
|
487
|
+
this._announcedConnected = true;
|
|
488
|
+
log.info(`Python worker WebSocket reconnected (${this._wsUrl}).`);
|
|
489
|
+
this.emit("reconnected");
|
|
490
|
+
}
|
|
491
|
+
catch (err) {
|
|
492
|
+
if (epoch !== this._reconnectEpoch) {
|
|
493
|
+
// This attempt was superseded before its RPC settled. The attempt that
|
|
494
|
+
// replaced it owns _reconnecting/teardown/backoff — do nothing here.
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
// This catch is the single owner of teardown + backoff growth +
|
|
498
|
+
// reschedule for a failed reconnect. _onUnexpectedClose deliberately
|
|
499
|
+
// does NOT reschedule while _reconnecting is true, so backoff timing is
|
|
500
|
+
// deterministic regardless of which event observed the drop first.
|
|
501
|
+
this._reconnecting = false;
|
|
502
|
+
log.warn(`Python worker WebSocket reconnect failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
503
|
+
// Tear down any half-open socket crash-safely (it may still be
|
|
504
|
+
// CONNECTING, or open-but-silent on discover/status).
|
|
505
|
+
this._teardownSocket(err instanceof Error ? err.message : "Python worker reconnect failed");
|
|
506
|
+
if (this._explicitlyClosed || !this._autoReconnect)
|
|
507
|
+
return;
|
|
508
|
+
this._reconnectDelayMs = Math.min(this._reconnectDelayMs * 2, this._maxReconnectDelayMs);
|
|
509
|
+
this._scheduleReconnect();
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
// ── Shutdown ────────────────────────────────────────────────────────
|
|
513
|
+
close() {
|
|
514
|
+
this._explicitlyClosed = true;
|
|
515
|
+
if (this._reconnectTimer) {
|
|
516
|
+
clearTimeout(this._reconnectTimer);
|
|
517
|
+
this._reconnectTimer = null;
|
|
518
|
+
}
|
|
519
|
+
this._reconnecting = false;
|
|
520
|
+
this._announcedConnected = false;
|
|
521
|
+
// Supersede any in-flight reconnect attempt whose post-open RPC is still
|
|
522
|
+
// awaiting: bump the epoch so its success block no-ops instead of emitting
|
|
523
|
+
// "reconnected" / setting _announcedConnected on a bridge that is now
|
|
524
|
+
// explicitly closed.
|
|
525
|
+
this._reconnectEpoch += 1;
|
|
526
|
+
// Abort an in-flight handshake (CONNECTING socket) so a pending connect()
|
|
527
|
+
// rejects immediately instead of waiting out the startup timeout. The
|
|
528
|
+
// aborter crash-safely terminates the CONNECTING socket.
|
|
529
|
+
if (this._abortHandshake) {
|
|
530
|
+
const abort = this._abortHandshake;
|
|
531
|
+
this._abortHandshake = null;
|
|
532
|
+
abort(new Error(`Python worker WebSocket closed before opening (${this._wsUrl}).`));
|
|
533
|
+
}
|
|
534
|
+
if (this._ws) {
|
|
535
|
+
this._detachLongLivedListeners(this._ws);
|
|
536
|
+
// Detaching removed the error listener; close()/terminate() on a socket
|
|
537
|
+
// that is still CONNECTING emits a late 'error' that would crash the
|
|
538
|
+
// process. Attach permanent no-op error sinks first.
|
|
539
|
+
const ws = this._ws;
|
|
540
|
+
attachErrorSinks(ws);
|
|
541
|
+
try {
|
|
542
|
+
ws.close();
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
/* best-effort cleanup */
|
|
546
|
+
}
|
|
547
|
+
try {
|
|
548
|
+
ws.terminate();
|
|
549
|
+
}
|
|
550
|
+
catch {
|
|
551
|
+
/* best-effort cleanup */
|
|
552
|
+
}
|
|
553
|
+
this._ws = null;
|
|
554
|
+
}
|
|
555
|
+
this._connected = false;
|
|
556
|
+
if (this._pending.size > 0 || this._pendingStream.size > 0) {
|
|
557
|
+
this._rejectAllPending(new Error("Python bridge closed"));
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
//# sourceMappingURL=python-websocket-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-websocket-bridge.js","sourceRoot":"","sources":["../src/python-websocket-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-worker-stderr.d.ts","sourceRoot":"","sources":["../src/python-worker-stderr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyBxE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Forward Python worker stderr lines at an appropriate log level. */
|
|
2
|
+
export function logPythonWorkerStderr(line, logger) {
|
|
3
|
+
const trimmed = line.trim();
|
|
4
|
+
if (!trimmed || trimmed === "NODETOOL_STDIO_READY") {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
if (/\| ERROR \|/i.test(trimmed) || /^\[error\]/i.test(trimmed)) {
|
|
8
|
+
logger.error(`[python-worker] ${trimmed}`);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (/\| WARNING \|/i.test(trimmed) || /^\[warning\]/i.test(trimmed)) {
|
|
12
|
+
logger.warn(`[python-worker] ${trimmed}`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (/\| DEBUG \|/i.test(trimmed) || /^\[debug\]/i.test(trimmed)) {
|
|
16
|
+
logger.debug(`[python-worker] ${trimmed}`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Everything else from the worker (explicit INFO lines, raw prints,
|
|
20
|
+
// tracebacks, library output) goes to the main log at info level so no
|
|
21
|
+
// Python-side output is silently dropped at the default log level.
|
|
22
|
+
logger.info(`[python-worker] ${trimmed}`);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=python-worker-stderr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-worker-stderr.js","sourceRoot":"","sources":["../src/python-worker-stderr.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,MAAc;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,sBAAsB,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
import type { UnifiedModel } from "@nodetool-ai/protocol";
|
|
8
8
|
import type { ProviderId } from "./providers/index.js";
|
|
9
9
|
export interface RecommendedUnifiedModel extends UnifiedModel {
|
|
10
|
-
modality: "language" | "image" | "tts" | "asr" | "video";
|
|
11
|
-
task?: "text_generation" | "embedding" | "text_to_image" | "image_to_image" | "text_to_video" | "image_to_video";
|
|
10
|
+
modality: "language" | "image" | "tts" | "asr" | "video" | "music" | "audio_to_audio";
|
|
11
|
+
task?: "text_generation" | "embedding" | "text_to_image" | "image_to_image" | "text_to_video" | "image_to_video" | "video_to_video";
|
|
12
12
|
provider?: ProviderId;
|
|
13
13
|
/** Optional list of platforms this entry is valid on. Undefined = all. */
|
|
14
14
|
supported_systems?: Array<"darwin" | "linux" | "windows">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommended-models.d.ts","sourceRoot":"","sources":["../src/recommended-models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,QAAQ,
|
|
1
|
+
{"version":3,"file":"recommended-models.d.ts","sourceRoot":"","sources":["../src/recommended-models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,QAAQ,EACJ,UAAU,GACV,OAAO,GACP,KAAK,GACL,KAAK,GACL,OAAO,GACP,OAAO,GACP,gBAAgB,CAAC;IACrB,IAAI,CAAC,EACD,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,kBAAkB,EAAE,uBAAuB,EAuJvD,CAAC"}
|