@nodetool-ai/websocket 0.7.0-rc.22 → 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 +50 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent/run-node-tool.d.ts +39 -0
- package/dist/agent/run-node-tool.d.ts.map +1 -0
- package/dist/agent/run-node-tool.js +55 -0
- package/dist/agent/run-node-tool.js.map +1 -0
- package/dist/chat-prediction-forwarder.d.ts +13 -0
- package/dist/chat-prediction-forwarder.d.ts.map +1 -0
- package/dist/chat-prediction-forwarder.js +22 -0
- package/dist/chat-prediction-forwarder.js.map +1 -0
- package/dist/chat-tool-call-repair.d.ts +45 -0
- package/dist/chat-tool-call-repair.d.ts.map +1 -0
- package/dist/chat-tool-call-repair.js +100 -0
- package/dist/chat-tool-call-repair.js.map +1 -0
- package/dist/chat-turn-registry.d.ts +169 -0
- package/dist/chat-turn-registry.d.ts.map +1 -0
- package/dist/chat-turn-registry.js +326 -0
- package/dist/chat-turn-registry.js.map +1 -0
- package/dist/collection-api.d.ts +2 -2
- package/dist/collection-api.d.ts.map +1 -1
- package/dist/collection-api.js +44 -13
- package/dist/collection-api.js.map +1 -1
- package/dist/configured-providers.d.ts +52 -0
- package/dist/configured-providers.d.ts.map +1 -0
- package/dist/configured-providers.js +85 -0
- package/dist/configured-providers.js.map +1 -0
- package/dist/cors.d.ts +22 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +91 -0
- package/dist/cors.js.map +1 -0
- package/dist/credit-gate.d.ts +36 -0
- package/dist/credit-gate.d.ts.map +1 -0
- package/dist/credit-gate.js +76 -0
- package/dist/credit-gate.js.map +1 -0
- package/dist/custom-providers.d.ts +40 -0
- package/dist/custom-providers.d.ts.map +1 -0
- package/dist/custom-providers.js +134 -0
- package/dist/custom-providers.js.map +1 -0
- package/dist/debug-sessions.d.ts +10 -0
- package/dist/debug-sessions.d.ts.map +1 -0
- package/dist/debug-sessions.js +9 -0
- package/dist/debug-sessions.js.map +1 -0
- package/dist/drain.d.ts +34 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +68 -0
- package/dist/drain.js.map +1 -0
- package/dist/e2e-server.d.ts +30 -0
- package/dist/e2e-server.d.ts.map +1 -0
- package/dist/e2e-server.js +111 -0
- package/dist/e2e-server.js.map +1 -0
- package/dist/example-workflows.d.ts +20 -0
- package/dist/example-workflows.d.ts.map +1 -0
- package/dist/example-workflows.js +123 -0
- package/dist/example-workflows.js.map +1 -0
- package/dist/extension-cdp-bridge.d.ts +85 -0
- package/dist/extension-cdp-bridge.d.ts.map +1 -0
- package/dist/extension-cdp-bridge.js +163 -0
- package/dist/extension-cdp-bridge.js.map +1 -0
- package/dist/external-mcp.d.ts +58 -0
- package/dist/external-mcp.d.ts.map +1 -0
- package/dist/external-mcp.js +288 -0
- package/dist/external-mcp.js.map +1 -0
- package/dist/fake-runtime.d.ts +114 -0
- package/dist/fake-runtime.d.ts.map +1 -0
- package/dist/fake-runtime.js +270 -0
- package/dist/fake-runtime.js.map +1 -0
- package/dist/file-api.d.ts +4 -7
- package/dist/file-api.d.ts.map +1 -1
- package/dist/file-api.js +122 -39
- package/dist/file-api.js.map +1 -1
- package/dist/frontend-renderer-registry.d.ts +75 -0
- package/dist/frontend-renderer-registry.d.ts.map +1 -0
- package/dist/frontend-renderer-registry.js +111 -0
- package/dist/frontend-renderer-registry.js.map +1 -0
- package/dist/generation-recovery.d.ts +13 -0
- package/dist/generation-recovery.d.ts.map +1 -0
- package/dist/generation-recovery.js +197 -0
- package/dist/generation-recovery.js.map +1 -0
- package/dist/headless-job-runner.d.ts +71 -0
- package/dist/headless-job-runner.d.ts.map +1 -0
- package/dist/headless-job-runner.js +198 -0
- package/dist/headless-job-runner.js.map +1 -0
- package/dist/http-api.d.ts +157 -24
- package/dist/http-api.d.ts.map +1 -1
- package/dist/http-api.js +613 -646
- package/dist/http-api.js.map +1 -1
- package/dist/http-body-schemas.d.ts +109 -0
- package/dist/http-body-schemas.d.ts.map +1 -0
- package/dist/http-body-schemas.js +146 -0
- package/dist/http-body-schemas.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/job-control.d.ts +57 -0
- package/dist/job-control.d.ts.map +1 -0
- package/dist/job-control.js +134 -0
- package/dist/job-control.js.map +1 -0
- package/dist/job-queue.d.ts +47 -0
- package/dist/job-queue.d.ts.map +1 -0
- package/dist/job-queue.js +52 -0
- package/dist/job-queue.js.map +1 -0
- package/dist/job-run-registry.d.ts +176 -0
- package/dist/job-run-registry.d.ts.map +1 -0
- package/dist/job-run-registry.js +312 -0
- package/dist/job-run-registry.js.map +1 -0
- package/dist/lib/app-build-service.d.ts +16 -0
- package/dist/lib/app-build-service.d.ts.map +1 -0
- package/dist/lib/app-build-service.js +39 -0
- package/dist/lib/app-build-service.js.map +1 -0
- package/dist/lib/app-debug-service.d.ts +16 -0
- package/dist/lib/app-debug-service.d.ts.map +1 -0
- package/dist/lib/app-debug-service.js +48 -0
- package/dist/lib/app-debug-service.js.map +1 -0
- package/dist/lib/app-deployment-service.d.ts +82 -0
- package/dist/lib/app-deployment-service.d.ts.map +1 -0
- package/dist/lib/app-deployment-service.js +282 -0
- package/dist/lib/app-deployment-service.js.map +1 -0
- package/dist/lib/app-run-server.d.ts +7 -0
- package/dist/lib/app-run-server.d.ts.map +1 -0
- package/dist/lib/app-run-server.js +6 -0
- package/dist/lib/app-run-server.js.map +1 -0
- package/dist/lib/app-session-scope.d.ts +91 -0
- package/dist/lib/app-session-scope.d.ts.map +1 -0
- package/dist/lib/app-session-scope.js +91 -0
- package/dist/lib/app-session-scope.js.map +1 -0
- package/dist/lib/applications-service.d.ts +173 -0
- package/dist/lib/applications-service.d.ts.map +1 -0
- package/dist/lib/applications-service.js +491 -0
- package/dist/lib/applications-service.js.map +1 -0
- package/dist/lib/asset-duration.d.ts +7 -0
- package/dist/lib/asset-duration.d.ts.map +1 -0
- package/dist/lib/asset-duration.js +24 -0
- package/dist/lib/asset-duration.js.map +1 -0
- package/dist/lib/asset-export.d.ts +34 -0
- package/dist/lib/asset-export.d.ts.map +1 -0
- package/dist/lib/asset-export.js +113 -0
- package/dist/lib/asset-export.js.map +1 -0
- package/dist/lib/asset-model-interface.d.ts +41 -0
- package/dist/lib/asset-model-interface.d.ts.map +1 -0
- package/dist/lib/asset-model-interface.js +74 -0
- package/dist/lib/asset-model-interface.js.map +1 -0
- package/dist/lib/asset-paths.d.ts +52 -0
- package/dist/lib/asset-paths.d.ts.map +1 -1
- package/dist/lib/asset-paths.js +145 -1
- package/dist/lib/asset-paths.js.map +1 -1
- package/dist/lib/asset-response.d.ts +12 -0
- package/dist/lib/asset-response.d.ts.map +1 -0
- package/dist/lib/asset-response.js +88 -0
- package/dist/lib/asset-response.js.map +1 -0
- package/dist/lib/audio-peaks.d.ts +23 -0
- package/dist/lib/audio-peaks.d.ts.map +1 -0
- package/dist/lib/audio-peaks.js +331 -0
- package/dist/lib/audio-peaks.js.map +1 -0
- package/dist/lib/bridge.d.ts +9 -1
- package/dist/lib/bridge.d.ts.map +1 -1
- package/dist/lib/bridge.js +27 -4
- package/dist/lib/bridge.js.map +1 -1
- package/dist/lib/compression.d.ts +3 -0
- package/dist/lib/compression.d.ts.map +1 -0
- package/dist/lib/compression.js +3 -0
- package/dist/lib/compression.js.map +1 -0
- package/dist/lib/document-model-interfaces.d.ts +30 -0
- package/dist/lib/document-model-interfaces.d.ts.map +1 -0
- package/dist/lib/document-model-interfaces.js +295 -0
- package/dist/lib/document-model-interfaces.js.map +1 -0
- package/dist/lib/env-config.d.ts +9 -0
- package/dist/lib/env-config.d.ts.map +1 -0
- package/dist/lib/env-config.js +18 -0
- package/dist/lib/env-config.js.map +1 -0
- package/dist/lib/example-apps.d.ts +43 -0
- package/dist/lib/example-apps.d.ts.map +1 -0
- package/dist/lib/example-apps.js +145 -0
- package/dist/lib/example-apps.js.map +1 -0
- package/dist/lib/example-games.d.ts +5 -0
- package/dist/lib/example-games.d.ts.map +1 -0
- package/dist/lib/example-games.js +13 -0
- package/dist/lib/example-games.js.map +1 -0
- package/dist/lib/example-recipes.d.ts +33 -0
- package/dist/lib/example-recipes.d.ts.map +1 -0
- package/dist/lib/example-recipes.js +213 -0
- package/dist/lib/example-recipes.js.map +1 -0
- package/dist/lib/example-storyboards.d.ts +40 -0
- package/dist/lib/example-storyboards.d.ts.map +1 -0
- package/dist/lib/example-storyboards.js +131 -0
- package/dist/lib/example-storyboards.js.map +1 -0
- package/dist/lib/example-thumbnail.d.ts +21 -0
- package/dist/lib/example-thumbnail.d.ts.map +1 -0
- package/dist/lib/example-thumbnail.js +50 -0
- package/dist/lib/example-thumbnail.js.map +1 -0
- package/dist/lib/example-timelines.d.ts +9 -0
- package/dist/lib/example-timelines.d.ts.map +1 -0
- package/dist/lib/example-timelines.js +25 -0
- package/dist/lib/example-timelines.js.map +1 -0
- package/dist/lib/extension-dist.d.ts +24 -0
- package/dist/lib/extension-dist.d.ts.map +1 -0
- package/dist/lib/extension-dist.js +67 -0
- package/dist/lib/extension-dist.js.map +1 -0
- package/dist/lib/external-asset-lookup.d.ts +30 -0
- package/dist/lib/external-asset-lookup.d.ts.map +1 -0
- package/dist/lib/external-asset-lookup.js +99 -0
- package/dist/lib/external-asset-lookup.js.map +1 -0
- package/dist/lib/external-assets.d.ts +13 -0
- package/dist/lib/external-assets.d.ts.map +1 -0
- package/dist/lib/external-assets.js +46 -0
- package/dist/lib/external-assets.js.map +1 -0
- package/dist/lib/fly-replay.d.ts +34 -0
- package/dist/lib/fly-replay.d.ts.map +1 -0
- package/dist/lib/fly-replay.js +111 -0
- package/dist/lib/fly-replay.js.map +1 -0
- package/dist/lib/http-rate-limit.d.ts +32 -0
- package/dist/lib/http-rate-limit.d.ts.map +1 -0
- package/dist/lib/http-rate-limit.js +47 -0
- package/dist/lib/http-rate-limit.js.map +1 -0
- package/dist/lib/instance-id.d.ts +25 -0
- package/dist/lib/instance-id.d.ts.map +1 -0
- package/dist/lib/instance-id.js +44 -0
- package/dist/lib/instance-id.js.map +1 -0
- package/dist/lib/link-codes.d.ts +82 -0
- package/dist/lib/link-codes.d.ts.map +1 -0
- package/dist/lib/link-codes.js +100 -0
- package/dist/lib/link-codes.js.map +1 -0
- package/dist/lib/local-asset-upload.d.ts +5 -0
- package/dist/lib/local-asset-upload.d.ts.map +1 -0
- package/dist/lib/local-asset-upload.js +69 -0
- package/dist/lib/local-asset-upload.js.map +1 -0
- package/dist/lib/local-file-access.d.ts +31 -0
- package/dist/lib/local-file-access.d.ts.map +1 -0
- package/dist/lib/local-file-access.js +169 -0
- package/dist/lib/local-file-access.js.map +1 -0
- package/dist/lib/localhost-trust.d.ts +59 -0
- package/dist/lib/localhost-trust.d.ts.map +1 -0
- package/dist/lib/localhost-trust.js +139 -0
- package/dist/lib/localhost-trust.js.map +1 -0
- package/dist/lib/mcp-mount.d.ts +25 -0
- package/dist/lib/mcp-mount.d.ts.map +1 -0
- package/dist/lib/mcp-mount.js +32 -0
- package/dist/lib/mcp-mount.js.map +1 -0
- package/dist/lib/media-size.d.ts +21 -0
- package/dist/lib/media-size.d.ts.map +1 -0
- package/dist/lib/media-size.js +48 -0
- package/dist/lib/media-size.js.map +1 -0
- package/dist/lib/media.d.ts +38 -0
- package/dist/lib/media.d.ts.map +1 -0
- package/dist/lib/media.js +146 -0
- package/dist/lib/media.js.map +1 -0
- package/dist/lib/package-asset-export.d.ts +83 -0
- package/dist/lib/package-asset-export.d.ts.map +1 -0
- package/dist/lib/package-asset-export.js +212 -0
- package/dist/lib/package-asset-export.js.map +1 -0
- package/dist/lib/package-assets.d.ts +41 -0
- package/dist/lib/package-assets.d.ts.map +1 -0
- package/dist/lib/package-assets.js +155 -0
- package/dist/lib/package-assets.js.map +1 -0
- package/dist/lib/project-delete.d.ts +11 -0
- package/dist/lib/project-delete.d.ts.map +1 -0
- package/dist/lib/project-delete.js +67 -0
- package/dist/lib/project-delete.js.map +1 -0
- package/dist/lib/project-document-copy.d.ts +31 -0
- package/dist/lib/project-document-copy.d.ts.map +1 -0
- package/dist/lib/project-document-copy.js +473 -0
- package/dist/lib/project-document-copy.js.map +1 -0
- package/dist/lib/public-app-assets.d.ts +8 -0
- package/dist/lib/public-app-assets.d.ts.map +1 -0
- package/dist/lib/public-app-assets.js +77 -0
- package/dist/lib/public-app-assets.js.map +1 -0
- package/dist/lib/public-routes.d.ts +95 -0
- package/dist/lib/public-routes.d.ts.map +1 -0
- package/dist/lib/public-routes.js +154 -0
- package/dist/lib/public-routes.js.map +1 -0
- package/dist/lib/runtime-detection.d.ts +17 -0
- package/dist/lib/runtime-detection.d.ts.map +1 -0
- package/dist/lib/runtime-detection.js +90 -0
- package/dist/lib/runtime-detection.js.map +1 -0
- package/dist/lib/storage-access.d.ts +21 -0
- package/dist/lib/storage-access.d.ts.map +1 -0
- package/dist/lib/storage-access.js +74 -0
- package/dist/lib/storage-access.js.map +1 -0
- package/dist/lib/storage.d.ts +9 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +28 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/storyboard-export.d.ts +64 -0
- package/dist/lib/storyboard-export.d.ts.map +1 -0
- package/dist/lib/storyboard-export.js +183 -0
- package/dist/lib/storyboard-export.js.map +1 -0
- package/dist/lib/style-presets.d.ts +34 -0
- package/dist/lib/style-presets.d.ts.map +1 -0
- package/dist/lib/style-presets.js +62 -0
- package/dist/lib/style-presets.js.map +1 -0
- package/dist/lib/temp-url-resolver.d.ts +35 -0
- package/dist/lib/temp-url-resolver.d.ts.map +1 -0
- package/dist/lib/temp-url-resolver.js +88 -0
- package/dist/lib/temp-url-resolver.js.map +1 -0
- package/dist/lib/thumbnail.d.ts +74 -0
- package/dist/lib/thumbnail.d.ts.map +1 -0
- package/dist/lib/thumbnail.js +302 -0
- package/dist/lib/thumbnail.js.map +1 -0
- package/dist/lib/timeline-bundle.d.ts +1689 -0
- package/dist/lib/timeline-bundle.d.ts.map +1 -0
- package/dist/lib/timeline-bundle.js +330 -0
- package/dist/lib/timeline-bundle.js.map +1 -0
- package/dist/lib/video-proxy.d.ts +114 -0
- package/dist/lib/video-proxy.d.ts.map +1 -0
- package/dist/lib/video-proxy.js +545 -0
- package/dist/lib/video-proxy.js.map +1 -0
- package/dist/lib/wire-values.d.ts +31 -0
- package/dist/lib/wire-values.d.ts.map +1 -0
- package/dist/lib/wire-values.js +49 -0
- package/dist/lib/wire-values.js.map +1 -0
- package/dist/lib/workflow-bundle.d.ts +102 -0
- package/dist/lib/workflow-bundle.d.ts.map +1 -0
- package/dist/lib/workflow-bundle.js +306 -0
- package/dist/lib/workflow-bundle.js.map +1 -0
- package/dist/lib/workflow-service.d.ts +82 -0
- package/dist/lib/workflow-service.d.ts.map +1 -0
- package/dist/lib/workflow-service.js +194 -0
- package/dist/lib/workflow-service.js.map +1 -0
- package/dist/lib/workflow-workspace.d.ts +20 -0
- package/dist/lib/workflow-workspace.d.ts.map +1 -0
- package/dist/lib/workflow-workspace.js +65 -0
- package/dist/lib/workflow-workspace.js.map +1 -0
- package/dist/lib/ws-connection-health.d.ts +10 -0
- package/dist/lib/ws-connection-health.d.ts.map +1 -0
- package/dist/lib/ws-connection-health.js +38 -0
- package/dist/lib/ws-connection-health.js.map +1 -0
- package/dist/lib/ws-rate-limit.d.ts +22 -0
- package/dist/lib/ws-rate-limit.d.ts.map +1 -0
- package/dist/lib/ws-rate-limit.js +45 -0
- package/dist/lib/ws-rate-limit.js.map +1 -0
- package/dist/lib/ws-upgrade.d.ts +40 -0
- package/dist/lib/ws-upgrade.d.ts.map +1 -0
- package/dist/lib/ws-upgrade.js +66 -0
- package/dist/lib/ws-upgrade.js.map +1 -0
- package/dist/lib/zip-stream.d.ts +46 -0
- package/dist/lib/zip-stream.d.ts.map +1 -0
- package/dist/lib/zip-stream.js +140 -0
- package/dist/lib/zip-stream.js.map +1 -0
- package/dist/mcp-agent-tools.d.ts +56 -0
- package/dist/mcp-agent-tools.d.ts.map +1 -0
- package/dist/mcp-agent-tools.js +1216 -0
- package/dist/mcp-agent-tools.js.map +1 -0
- package/dist/mcp-server.d.ts +56 -7
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +255 -762
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tool-deps.d.ts +20 -0
- package/dist/mcp-tool-deps.d.ts.map +1 -0
- package/dist/mcp-tool-deps.js +61 -0
- package/dist/mcp-tool-deps.js.map +1 -0
- package/dist/messagepack.d.ts +7 -0
- package/dist/messagepack.d.ts.map +1 -0
- package/dist/messagepack.js +19 -0
- package/dist/messagepack.js.map +1 -0
- package/dist/model-download-runtime.d.ts +9 -0
- package/dist/model-download-runtime.d.ts.map +1 -0
- package/dist/model-download-runtime.js +77 -0
- package/dist/model-download-runtime.js.map +1 -0
- package/dist/model-execution-availability.d.ts +14 -0
- package/dist/model-execution-availability.d.ts.map +1 -0
- package/dist/model-execution-availability.js +161 -0
- package/dist/model-execution-availability.js.map +1 -0
- package/dist/models-api.d.ts +51 -5
- package/dist/models-api.d.ts.map +1 -1
- package/dist/models-api.js +160 -690
- package/dist/models-api.js.map +1 -1
- package/dist/node-registry-setup.d.ts +84 -0
- package/dist/node-registry-setup.d.ts.map +1 -0
- package/dist/node-registry-setup.js +256 -0
- package/dist/node-registry-setup.js.map +1 -0
- package/dist/oauth/cimd.d.ts +28 -0
- package/dist/oauth/cimd.d.ts.map +1 -0
- package/dist/oauth/cimd.js +177 -0
- package/dist/oauth/cimd.js.map +1 -0
- package/dist/oauth/gate.d.ts +38 -0
- package/dist/oauth/gate.d.ts.map +1 -0
- package/dist/oauth/gate.js +77 -0
- package/dist/oauth/gate.js.map +1 -0
- package/dist/oauth/metadata.d.ts +35 -0
- package/dist/oauth/metadata.d.ts.map +1 -0
- package/dist/oauth/metadata.js +56 -0
- package/dist/oauth/metadata.js.map +1 -0
- package/dist/oauth/pending-store.d.ts +79 -0
- package/dist/oauth/pending-store.d.ts.map +1 -0
- package/dist/oauth/pending-store.js +133 -0
- package/dist/oauth/pending-store.js.map +1 -0
- package/dist/oauth/pkce.d.ts +16 -0
- package/dist/oauth/pkce.d.ts.map +1 -0
- package/dist/oauth/pkce.js +29 -0
- package/dist/oauth/pkce.js.map +1 -0
- package/dist/oauth/validate.d.ts +25 -0
- package/dist/oauth/validate.d.ts.map +1 -0
- package/dist/oauth/validate.js +62 -0
- package/dist/oauth/validate.js.map +1 -0
- package/dist/oauth/www-authenticate.d.ts +9 -0
- package/dist/oauth/www-authenticate.d.ts.map +1 -0
- package/dist/oauth/www-authenticate.js +33 -0
- package/dist/oauth/www-authenticate.js.map +1 -0
- package/dist/oauth-api.d.ts +19 -0
- package/dist/oauth-api.d.ts.map +1 -1
- package/dist/oauth-api.js +531 -12
- package/dist/oauth-api.js.map +1 -1
- package/dist/openai-api.d.ts.map +1 -1
- package/dist/openai-api.js +4 -9
- package/dist/openai-api.js.map +1 -1
- package/dist/pack-snapshot.d.ts +24 -0
- package/dist/pack-snapshot.d.ts.map +1 -0
- package/dist/pack-snapshot.js +35 -0
- package/dist/pack-snapshot.js.map +1 -0
- package/dist/plugins/websocket.d.ts +21 -4
- package/dist/plugins/websocket.d.ts.map +1 -1
- package/dist/plugins/websocket.js +136 -290
- package/dist/plugins/websocket.js.map +1 -1
- package/dist/resolve-media-urls.d.ts +17 -3
- package/dist/resolve-media-urls.d.ts.map +1 -1
- package/dist/resolve-media-urls.js +117 -31
- package/dist/resolve-media-urls.js.map +1 -1
- package/dist/resource-events.d.ts +28 -0
- package/dist/resource-events.d.ts.map +1 -0
- package/dist/resource-events.js +20 -0
- package/dist/resource-events.js.map +1 -0
- package/dist/routes/account.d.ts +100 -0
- package/dist/routes/account.d.ts.map +1 -0
- package/dist/routes/account.js +197 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/applications.d.ts +36 -0
- package/dist/routes/applications.d.ts.map +1 -0
- package/dist/routes/applications.js +183 -0
- package/dist/routes/applications.js.map +1 -0
- package/dist/routes/assets.d.ts +3 -3
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/assets.js +78 -44
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/atlascloud-webhook.d.ts +93 -0
- package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
- package/dist/routes/atlascloud-webhook.js +369 -0
- package/dist/routes/atlascloud-webhook.js.map +1 -0
- package/dist/routes/collections.d.ts.map +1 -1
- package/dist/routes/config.d.ts +26 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +64 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/documents.d.ts +27 -0
- package/dist/routes/documents.d.ts.map +1 -0
- package/dist/routes/documents.js +155 -0
- package/dist/routes/documents.js.map +1 -0
- package/dist/routes/fal-credits.d.ts +4 -0
- package/dist/routes/fal-credits.d.ts.map +1 -0
- package/dist/routes/fal-credits.js +101 -0
- package/dist/routes/fal-credits.js.map +1 -0
- package/dist/routes/fal-pricing-estimate.d.ts +4 -0
- package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
- package/dist/routes/fal-pricing-estimate.js +114 -0
- package/dist/routes/fal-pricing-estimate.js.map +1 -0
- package/dist/routes/fal-pricing.d.ts +4 -0
- package/dist/routes/fal-pricing.d.ts.map +1 -0
- package/dist/routes/fal-pricing.js +93 -0
- package/dist/routes/fal-pricing.js.map +1 -0
- package/dist/routes/fal-webhook.d.ts +102 -0
- package/dist/routes/fal-webhook.d.ts.map +1 -0
- package/dist/routes/fal-webhook.js +379 -0
- package/dist/routes/fal-webhook.js.map +1 -0
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +4 -3
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/health.d.ts +1 -0
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +41 -7
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/integrations.d.ts +39 -0
- package/dist/routes/integrations.d.ts.map +1 -0
- package/dist/routes/integrations.js +211 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/js-scripts.d.ts +26 -0
- package/dist/routes/js-scripts.d.ts.map +1 -0
- package/dist/routes/js-scripts.js +116 -0
- package/dist/routes/js-scripts.js.map +1 -0
- package/dist/routes/kie-credits.d.ts +4 -0
- package/dist/routes/kie-credits.d.ts.map +1 -0
- package/dist/routes/kie-credits.js +93 -0
- package/dist/routes/kie-credits.js.map +1 -0
- package/dist/routes/kie-pricing.d.ts +4 -0
- package/dist/routes/kie-pricing.d.ts.map +1 -0
- package/dist/routes/kie-pricing.js +45 -0
- package/dist/routes/kie-pricing.js.map +1 -0
- package/dist/routes/kie-webhook.d.ts +4 -0
- package/dist/routes/kie-webhook.d.ts.map +1 -0
- package/dist/routes/kie-webhook.js +70 -0
- package/dist/routes/kie-webhook.js.map +1 -0
- package/dist/routes/nodes.d.ts.map +1 -1
- package/dist/routes/nodes.js +6 -59
- package/dist/routes/nodes.js.map +1 -1
- package/dist/routes/oauth-as.d.ts +30 -0
- package/dist/routes/oauth-as.d.ts.map +1 -0
- package/dist/routes/oauth-as.js +412 -0
- package/dist/routes/oauth-as.js.map +1 -0
- package/dist/routes/oauth.d.ts.map +1 -1
- package/dist/routes/openai.d.ts.map +1 -1
- package/dist/routes/public-apps.d.ts +27 -0
- package/dist/routes/public-apps.d.ts.map +1 -0
- package/dist/routes/public-apps.js +99 -0
- package/dist/routes/public-apps.js.map +1 -0
- package/dist/routes/sandbox-modules.d.ts +17 -0
- package/dist/routes/sandbox-modules.d.ts.map +1 -0
- package/dist/routes/sandbox-modules.js +85 -0
- package/dist/routes/sandbox-modules.js.map +1 -0
- package/dist/routes/sdk-v1.d.ts +24 -0
- package/dist/routes/sdk-v1.d.ts.map +1 -0
- package/dist/routes/sdk-v1.js +320 -0
- package/dist/routes/sdk-v1.js.map +1 -0
- package/dist/routes/storage.d.ts.map +1 -1
- package/dist/routes/storyboards.d.ts +16 -0
- package/dist/routes/storyboards.d.ts.map +1 -0
- package/dist/routes/storyboards.js +97 -0
- package/dist/routes/storyboards.js.map +1 -0
- package/dist/routes/timeline-animations.d.ts +23 -0
- package/dist/routes/timeline-animations.d.ts.map +1 -0
- package/dist/routes/timeline-animations.js +99 -0
- package/dist/routes/timeline-animations.js.map +1 -0
- package/dist/routes/timeline-audio-bake.d.ts +51 -0
- package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
- package/dist/routes/timeline-audio-bake.js +110 -0
- package/dist/routes/timeline-audio-bake.js.map +1 -0
- package/dist/routes/timeline-fonts.d.ts +29 -0
- package/dist/routes/timeline-fonts.d.ts.map +1 -0
- package/dist/routes/timeline-fonts.js +64 -0
- package/dist/routes/timeline-fonts.js.map +1 -0
- package/dist/routes/timeline-isolate-subject.d.ts +55 -0
- package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
- package/dist/routes/timeline-isolate-subject.js +128 -0
- package/dist/routes/timeline-isolate-subject.js.map +1 -0
- package/dist/routes/timeline-track-object.d.ts +39 -0
- package/dist/routes/timeline-track-object.d.ts.map +1 -0
- package/dist/routes/timeline-track-object.js +97 -0
- package/dist/routes/timeline-track-object.js.map +1 -0
- package/dist/routes/timelines.d.ts +18 -0
- package/dist/routes/timelines.d.ts.map +1 -0
- package/dist/routes/timelines.js +191 -0
- package/dist/routes/timelines.js.map +1 -0
- package/dist/routes/workflows.d.ts +6 -9
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +100 -11
- package/dist/routes/workflows.js.map +1 -1
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/run-supervisor.d.ts +30 -0
- package/dist/run-supervisor.d.ts.map +1 -0
- package/dist/run-supervisor.js +86 -0
- package/dist/run-supervisor.js.map +1 -0
- package/dist/sandbox-catalog.d.ts +28 -0
- package/dist/sandbox-catalog.d.ts.map +1 -0
- package/dist/sandbox-catalog.js +74 -0
- package/dist/sandbox-catalog.js.map +1 -0
- package/dist/screenshot-projects.d.ts +27 -0
- package/dist/screenshot-projects.d.ts.map +1 -0
- package/dist/screenshot-projects.js +880 -0
- package/dist/screenshot-projects.js.map +1 -0
- package/dist/screenshot-server.js +947 -43
- package/dist/screenshot-server.js.map +1 -1
- package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
- package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
- package/dist/sdk/sdk-cached-model-inventory.js +51 -0
- package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
- package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
- package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
- package/dist/sdk/sdk-capabilities-service.js +47 -0
- package/dist/sdk/sdk-capabilities-service.js.map +1 -0
- package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
- package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
- package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
- package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
- package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
- package/dist/sdk/sdk-execution-target-readiness.js +50 -0
- package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
- package/dist/sdk/sdk-feature-flags.d.ts +18 -0
- package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
- package/dist/sdk/sdk-feature-flags.js +30 -0
- package/dist/sdk/sdk-feature-flags.js.map +1 -0
- package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
- package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
- package/dist/sdk/sdk-huggingface-download-state.js +25 -0
- package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
- package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
- package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
- package/dist/sdk/sdk-live-runner-registry.js +26 -0
- package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
- package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
- package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
- package/dist/sdk/sdk-model-catalog-service.js +219 -0
- package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
- package/dist/sdk/sdk-model-download-service.d.ts +39 -0
- package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
- package/dist/sdk/sdk-model-download-service.js +274 -0
- package/dist/sdk/sdk-model-download-service.js.map +1 -0
- package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
- package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-model-requirement-probe.js +120 -0
- package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
- package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
- package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
- package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
- package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
- package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
- package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
- package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
- package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
- package/dist/sdk/sdk-preflight-service.d.ts +61 -0
- package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-service.js +104 -0
- package/dist/sdk/sdk-preflight-service.js.map +1 -0
- package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
- package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
- package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
- package/dist/sdk/sdk-route-policy.d.ts +3 -0
- package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
- package/dist/sdk/sdk-route-policy.js +18 -0
- package/dist/sdk/sdk-route-policy.js.map +1 -0
- package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
- package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
- package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
- package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
- package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
- package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
- package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
- package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
- package/dist/sdk/sdk-static-preflight-service.js +492 -0
- package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
- package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
- package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
- package/dist/sdk/sdk-temporary-asset-service.js +33 -0
- package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
- package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
- package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-handler-map.js +37 -0
- package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
- package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
- package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-service-error.js +62 -0
- package/dist/sdk/sdk-v1-service-error.js.map +1 -0
- package/dist/sdk/sdk-v1-service.d.ts +74 -0
- package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-service.js +219 -0
- package/dist/sdk/sdk-v1-service.js.map +1 -0
- package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
- package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
- package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
- package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
- package/dist/server.js +1019 -201
- package/dist/server.js.map +1 -1
- package/dist/session/asset-autosave.d.ts +80 -0
- package/dist/session/asset-autosave.d.ts.map +1 -0
- package/dist/session/asset-autosave.js +456 -0
- package/dist/session/asset-autosave.js.map +1 -0
- package/dist/session/chat-compaction.d.ts +107 -0
- package/dist/session/chat-compaction.d.ts.map +1 -0
- package/dist/session/chat-compaction.js +191 -0
- package/dist/session/chat-compaction.js.map +1 -0
- package/dist/session/chat-history.d.ts +75 -0
- package/dist/session/chat-history.d.ts.map +1 -0
- package/dist/session/chat-history.js +194 -0
- package/dist/session/chat-history.js.map +1 -0
- package/dist/session/chat-prompt.d.ts +45 -0
- package/dist/session/chat-prompt.d.ts.map +1 -0
- package/dist/session/chat-prompt.js +480 -0
- package/dist/session/chat-prompt.js.map +1 -0
- package/dist/session/chat-turn.d.ts +336 -0
- package/dist/session/chat-turn.d.ts.map +1 -0
- package/dist/session/chat-turn.js +3516 -0
- package/dist/session/chat-turn.js.map +1 -0
- package/dist/session/client-session.d.ts +59 -0
- package/dist/session/client-session.d.ts.map +1 -0
- package/dist/session/client-session.js +2 -0
- package/dist/session/client-session.js.map +1 -0
- package/dist/session/commands.d.ts +133 -0
- package/dist/session/commands.d.ts.map +1 -0
- package/dist/session/commands.js +778 -0
- package/dist/session/commands.js.map +1 -0
- package/dist/session/inference.d.ts +213 -0
- package/dist/session/inference.d.ts.map +1 -0
- package/dist/session/inference.js +1072 -0
- package/dist/session/inference.js.map +1 -0
- package/dist/session/job-execution.d.ts +477 -0
- package/dist/session/job-execution.d.ts.map +1 -0
- package/dist/session/job-execution.js +2089 -0
- package/dist/session/job-execution.js.map +1 -0
- package/dist/session/media-generation.d.ts +94 -0
- package/dist/session/media-generation.d.ts.map +1 -0
- package/dist/session/media-generation.js +234 -0
- package/dist/session/media-generation.js.map +1 -0
- package/dist/session/model-interfaces.d.ts +27 -0
- package/dist/session/model-interfaces.d.ts.map +1 -0
- package/dist/session/model-interfaces.js +132 -0
- package/dist/session/model-interfaces.js.map +1 -0
- package/dist/session/sanitize.d.ts +7 -0
- package/dist/session/sanitize.d.ts.map +1 -0
- package/dist/session/sanitize.js +64 -0
- package/dist/session/sanitize.js.map +1 -0
- package/dist/settings-registry.d.ts +6 -15
- package/dist/settings-registry.d.ts.map +1 -1
- package/dist/settings-registry.js +6 -103
- package/dist/settings-registry.js.map +1 -1
- package/dist/storage-api.d.ts +20 -0
- package/dist/storage-api.d.ts.map +1 -1
- package/dist/storage-api.js +260 -77
- package/dist/storage-api.js.map +1 -1
- package/dist/storage-retention.d.ts +9 -0
- package/dist/storage-retention.d.ts.map +1 -0
- package/dist/storage-retention.js +74 -0
- package/dist/storage-retention.js.map +1 -0
- package/dist/system-stats.d.ts +52 -0
- package/dist/system-stats.d.ts.map +1 -0
- package/dist/system-stats.js +134 -0
- package/dist/system-stats.js.map +1 -0
- package/dist/test-ui-server.d.ts +46 -0
- package/dist/test-ui-server.d.ts.map +1 -1
- package/dist/test-ui-server.js +188 -41
- package/dist/test-ui-server.js.map +1 -1
- package/dist/triggers/boot.d.ts +73 -0
- package/dist/triggers/boot.d.ts.map +1 -0
- package/dist/triggers/boot.js +149 -0
- package/dist/triggers/boot.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +234 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -0
- package/dist/triggers/dispatcher.js +525 -0
- package/dist/triggers/dispatcher.js.map +1 -0
- package/dist/triggers/file-watch.d.ts +90 -0
- package/dist/triggers/file-watch.d.ts.map +1 -0
- package/dist/triggers/file-watch.js +405 -0
- package/dist/triggers/file-watch.js.map +1 -0
- package/dist/triggers/registration-sync.d.ts +34 -0
- package/dist/triggers/registration-sync.d.ts.map +1 -0
- package/dist/triggers/registration-sync.js +162 -0
- package/dist/triggers/registration-sync.js.map +1 -0
- package/dist/triggers/schedule-timing.d.ts +52 -0
- package/dist/triggers/schedule-timing.d.ts.map +1 -0
- package/dist/triggers/schedule-timing.js +90 -0
- package/dist/triggers/schedule-timing.js.map +1 -0
- package/dist/triggers/scheduler.d.ts +55 -0
- package/dist/triggers/scheduler.d.ts.map +1 -0
- package/dist/triggers/scheduler.js +122 -0
- package/dist/triggers/scheduler.js.map +1 -0
- package/dist/triggers/settle.d.ts +66 -0
- package/dist/triggers/settle.d.ts.map +1 -0
- package/dist/triggers/settle.js +99 -0
- package/dist/triggers/settle.js.map +1 -0
- package/dist/triggers/stores.d.ts +38 -0
- package/dist/triggers/stores.d.ts.map +1 -0
- package/dist/triggers/stores.js +168 -0
- package/dist/triggers/stores.js.map +1 -0
- package/dist/triggers/webhook-route.d.ts +49 -0
- package/dist/triggers/webhook-route.d.ts.map +1 -0
- package/dist/triggers/webhook-route.js +148 -0
- package/dist/triggers/webhook-route.js.map +1 -0
- package/dist/trpc/context.d.ts +52 -5
- package/dist/trpc/context.d.ts.map +1 -1
- package/dist/trpc/context.js +4 -1
- package/dist/trpc/context.js.map +1 -1
- package/dist/trpc/error-formatter.d.ts.map +1 -1
- package/dist/trpc/error-formatter.js +23 -2
- package/dist/trpc/error-formatter.js.map +1 -1
- package/dist/trpc/error-logging.d.ts +14 -0
- package/dist/trpc/error-logging.d.ts.map +1 -0
- package/dist/trpc/error-logging.js +27 -0
- package/dist/trpc/error-logging.js.map +1 -0
- package/dist/trpc/index.d.ts +2 -2
- package/dist/trpc/index.d.ts.map +1 -1
- package/dist/trpc/index.js +0 -2
- package/dist/trpc/index.js.map +1 -1
- package/dist/trpc/middleware.d.ts +6 -3
- package/dist/trpc/middleware.d.ts.map +1 -1
- package/dist/trpc/router.d.ts +29791 -1303
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +46 -3
- package/dist/trpc/router.js.map +1 -1
- package/dist/trpc/routers/agent-access.d.ts +149 -0
- package/dist/trpc/routers/agent-access.d.ts.map +1 -0
- package/dist/trpc/routers/agent-access.js +224 -0
- package/dist/trpc/routers/agent-access.js.map +1 -0
- package/dist/trpc/routers/applications.d.ts +1117 -0
- package/dist/trpc/routers/applications.d.ts.map +1 -0
- package/dist/trpc/routers/applications.js +218 -0
- package/dist/trpc/routers/applications.js.map +1 -0
- package/dist/trpc/routers/assets.d.ts +184 -42
- package/dist/trpc/routers/assets.d.ts.map +1 -1
- package/dist/trpc/routers/assets.js +499 -105
- package/dist/trpc/routers/assets.js.map +1 -1
- package/dist/trpc/routers/code-gen.d.ts +99 -0
- package/dist/trpc/routers/code-gen.d.ts.map +1 -0
- package/dist/trpc/routers/code-gen.js +164 -0
- package/dist/trpc/routers/code-gen.js.map +1 -0
- package/dist/trpc/routers/collections.d.ts +1 -26
- package/dist/trpc/routers/collections.d.ts.map +1 -1
- package/dist/trpc/routers/collections.js +145 -78
- package/dist/trpc/routers/collections.js.map +1 -1
- package/dist/trpc/routers/costs.d.ts +40 -96
- package/dist/trpc/routers/costs.d.ts.map +1 -1
- package/dist/trpc/routers/costs.js +14 -89
- package/dist/trpc/routers/costs.js.map +1 -1
- package/dist/trpc/routers/credits.d.ts +110 -0
- package/dist/trpc/routers/credits.d.ts.map +1 -0
- package/dist/trpc/routers/credits.js +69 -0
- package/dist/trpc/routers/credits.js.map +1 -0
- package/dist/trpc/routers/custom-providers.d.ts +88 -0
- package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
- package/dist/trpc/routers/custom-providers.js +140 -0
- package/dist/trpc/routers/custom-providers.js.map +1 -0
- package/dist/trpc/routers/documents.d.ts +61 -0
- package/dist/trpc/routers/documents.d.ts.map +1 -0
- package/dist/trpc/routers/documents.js +23 -0
- package/dist/trpc/routers/documents.js.map +1 -0
- package/dist/trpc/routers/extension.d.ts +24 -0
- package/dist/trpc/routers/extension.d.ts.map +1 -0
- package/dist/trpc/routers/extension.js +28 -0
- package/dist/trpc/routers/extension.js.map +1 -0
- package/dist/trpc/routers/external-mcp.d.ts +108 -0
- package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
- package/dist/trpc/routers/external-mcp.js +70 -0
- package/dist/trpc/routers/external-mcp.js.map +1 -0
- package/dist/trpc/routers/files.d.ts +9 -2
- package/dist/trpc/routers/files.d.ts.map +1 -1
- package/dist/trpc/routers/files.js +67 -37
- package/dist/trpc/routers/files.js.map +1 -1
- package/dist/trpc/routers/fonts.d.ts +30 -0
- package/dist/trpc/routers/fonts.d.ts.map +1 -0
- package/dist/trpc/routers/fonts.js +112 -0
- package/dist/trpc/routers/fonts.js.map +1 -0
- package/dist/trpc/routers/games.d.ts +7610 -0
- package/dist/trpc/routers/games.d.ts.map +1 -0
- package/dist/trpc/routers/games.js +456 -0
- package/dist/trpc/routers/games.js.map +1 -0
- package/dist/trpc/routers/integrations.d.ts +86 -0
- package/dist/trpc/routers/integrations.d.ts.map +1 -0
- package/dist/trpc/routers/integrations.js +129 -0
- package/dist/trpc/routers/integrations.js.map +1 -0
- package/dist/trpc/routers/jobs.d.ts +88 -27
- package/dist/trpc/routers/jobs.d.ts.map +1 -1
- package/dist/trpc/routers/jobs.js +113 -35
- package/dist/trpc/routers/jobs.js.map +1 -1
- package/dist/trpc/routers/js-scripts.d.ts +410 -0
- package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
- package/dist/trpc/routers/js-scripts.js +303 -0
- package/dist/trpc/routers/js-scripts.js.map +1 -0
- package/dist/trpc/routers/mcp-config.d.ts +1 -1
- package/dist/trpc/routers/mcp-config.js +5 -3
- package/dist/trpc/routers/mcp-config.js.map +1 -1
- package/dist/trpc/routers/memories.d.ts +79 -0
- package/dist/trpc/routers/memories.d.ts.map +1 -0
- package/dist/trpc/routers/memories.js +66 -0
- package/dist/trpc/routers/memories.js.map +1 -0
- package/dist/trpc/routers/messages.d.ts +4 -77
- package/dist/trpc/routers/messages.d.ts.map +1 -1
- package/dist/trpc/routers/messages.js +9 -58
- package/dist/trpc/routers/messages.js.map +1 -1
- package/dist/trpc/routers/models.d.ts +1403 -238
- package/dist/trpc/routers/models.d.ts.map +1 -1
- package/dist/trpc/routers/models.js +532 -294
- package/dist/trpc/routers/models.js.map +1 -1
- package/dist/trpc/routers/nodes.d.ts +32 -16
- package/dist/trpc/routers/nodes.d.ts.map +1 -1
- package/dist/trpc/routers/nodes.js +70 -31
- package/dist/trpc/routers/nodes.js.map +1 -1
- package/dist/trpc/routers/packs.d.ts +184 -0
- package/dist/trpc/routers/packs.d.ts.map +1 -0
- package/dist/trpc/routers/packs.js +259 -0
- package/dist/trpc/routers/packs.js.map +1 -0
- package/dist/trpc/routers/projects.d.ts +422 -0
- package/dist/trpc/routers/projects.d.ts.map +1 -0
- package/dist/trpc/routers/projects.js +373 -0
- package/dist/trpc/routers/projects.js.map +1 -0
- package/dist/trpc/routers/resources.d.ts +120 -0
- package/dist/trpc/routers/resources.d.ts.map +1 -0
- package/dist/trpc/routers/resources.js +212 -0
- package/dist/trpc/routers/resources.js.map +1 -0
- package/dist/trpc/routers/scripts.d.ts +1116 -0
- package/dist/trpc/routers/scripts.d.ts.map +1 -0
- package/dist/trpc/routers/scripts.js +131 -0
- package/dist/trpc/routers/scripts.js.map +1 -0
- package/dist/trpc/routers/segmentation.d.ts +62 -0
- package/dist/trpc/routers/segmentation.d.ts.map +1 -0
- package/dist/trpc/routers/segmentation.js +146 -0
- package/dist/trpc/routers/segmentation.js.map +1 -0
- package/dist/trpc/routers/settings.d.ts +177 -10
- package/dist/trpc/routers/settings.d.ts.map +1 -1
- package/dist/trpc/routers/settings.js +123 -33
- package/dist/trpc/routers/settings.js.map +1 -1
- package/dist/trpc/routers/sketch.d.ts +854 -0
- package/dist/trpc/routers/sketch.d.ts.map +1 -0
- package/dist/trpc/routers/sketch.js +617 -0
- package/dist/trpc/routers/sketch.js.map +1 -0
- package/dist/trpc/routers/skills.d.ts +76 -22
- package/dist/trpc/routers/skills.d.ts.map +1 -1
- package/dist/trpc/routers/skills.js +195 -170
- package/dist/trpc/routers/skills.js.map +1 -1
- package/dist/trpc/routers/storage.d.ts +3 -30
- package/dist/trpc/routers/storage.d.ts.map +1 -1
- package/dist/trpc/routers/storage.js +60 -117
- package/dist/trpc/routers/storage.js.map +1 -1
- package/dist/trpc/routers/storyboards.d.ts +5907 -0
- package/dist/trpc/routers/storyboards.d.ts.map +1 -0
- package/dist/trpc/routers/storyboards.js +156 -0
- package/dist/trpc/routers/storyboards.js.map +1 -0
- package/dist/trpc/routers/threads.d.ts +33 -21
- package/dist/trpc/routers/threads.d.ts.map +1 -1
- package/dist/trpc/routers/threads.js +36 -30
- package/dist/trpc/routers/threads.js.map +1 -1
- package/dist/trpc/routers/timeline.d.ts +8516 -0
- package/dist/trpc/routers/timeline.d.ts.map +1 -0
- package/dist/trpc/routers/timeline.js +493 -0
- package/dist/trpc/routers/timeline.js.map +1 -0
- package/dist/trpc/routers/triggers.d.ts +46 -0
- package/dist/trpc/routers/triggers.d.ts.map +1 -0
- package/dist/trpc/routers/triggers.js +117 -0
- package/dist/trpc/routers/triggers.js.map +1 -0
- package/dist/trpc/routers/users.d.ts +1 -14
- package/dist/trpc/routers/users.d.ts.map +1 -1
- package/dist/trpc/routers/users.js +1 -12
- package/dist/trpc/routers/users.js.map +1 -1
- package/dist/trpc/routers/worker.d.ts +242 -0
- package/dist/trpc/routers/worker.d.ts.map +1 -0
- package/dist/trpc/routers/worker.js +220 -0
- package/dist/trpc/routers/worker.js.map +1 -0
- package/dist/trpc/routers/workflows.d.ts +385 -197
- package/dist/trpc/routers/workflows.d.ts.map +1 -1
- package/dist/trpc/routers/workflows.js +326 -345
- package/dist/trpc/routers/workflows.js.map +1 -1
- package/dist/trpc/routers/workspace.d.ts +59 -33
- package/dist/trpc/routers/workspace.d.ts.map +1 -1
- package/dist/trpc/routers/workspace.js +230 -93
- package/dist/trpc/routers/workspace.js.map +1 -1
- package/dist/trpc/sandbox-coverage.d.ts +64 -0
- package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
- package/dist/trpc/sandbox-coverage.js +1049 -0
- package/dist/trpc/sandbox-coverage.js.map +1 -0
- package/dist/websocket-client-session.d.ts +320 -0
- package/dist/websocket-client-session.d.ts.map +1 -0
- package/dist/websocket-client-session.js +1253 -0
- package/dist/websocket-client-session.js.map +1 -0
- package/dist/workflow-interface-service.d.ts +87 -0
- package/dist/workflow-interface-service.d.ts.map +1 -0
- package/dist/workflow-interface-service.js +131 -0
- package/dist/workflow-interface-service.js.map +1 -0
- package/dist/workspace-api.d.ts.map +1 -1
- package/dist/workspace-api.js +33 -23
- package/dist/workspace-api.js.map +1 -1
- package/dist/ws-adapter.d.ts +46 -3
- package/dist/ws-adapter.d.ts.map +1 -1
- package/dist/ws-adapter.js +164 -26
- package/dist/ws-adapter.js.map +1 -1
- package/package.json +81 -35
- package/dist/agent/agent-runtime.d.ts +0 -47
- package/dist/agent/agent-runtime.d.ts.map +0 -1
- package/dist/agent/agent-runtime.js +0 -579
- package/dist/agent/agent-runtime.js.map +0 -1
- package/dist/agent/codex-agent.d.ts +0 -41
- package/dist/agent/codex-agent.d.ts.map +0 -1
- package/dist/agent/codex-agent.js +0 -334
- package/dist/agent/codex-agent.js.map +0 -1
- package/dist/agent/index.d.ts +0 -6
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -4
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/llm-agent.d.ts +0 -51
- package/dist/agent/llm-agent.d.ts.map +0 -1
- package/dist/agent/llm-agent.js +0 -526
- package/dist/agent/llm-agent.js.map +0 -1
- package/dist/agent/mcp-tool-server.d.ts +0 -33
- package/dist/agent/mcp-tool-server.d.ts.map +0 -1
- package/dist/agent/mcp-tool-server.js +0 -292
- package/dist/agent/mcp-tool-server.js.map +0 -1
- package/dist/agent/opencode-agent.d.ts +0 -32
- package/dist/agent/opencode-agent.d.ts.map +0 -1
- package/dist/agent/opencode-agent.js +0 -332
- package/dist/agent/opencode-agent.js.map +0 -1
- package/dist/agent/pi-agent.d.ts +0 -42
- package/dist/agent/pi-agent.d.ts.map +0 -1
- package/dist/agent/pi-agent.js +0 -429
- package/dist/agent/pi-agent.js.map +0 -1
- package/dist/agent/sdk-provider.d.ts +0 -46
- package/dist/agent/sdk-provider.d.ts.map +0 -1
- package/dist/agent/sdk-provider.js +0 -50
- package/dist/agent/sdk-provider.js.map +0 -1
- package/dist/agent/socket-route.d.ts +0 -11
- package/dist/agent/socket-route.d.ts.map +0 -1
- package/dist/agent/socket-route.js +0 -262
- package/dist/agent/socket-route.js.map +0 -1
- package/dist/agent/transport.d.ts +0 -39
- package/dist/agent/transport.d.ts.map +0 -1
- package/dist/agent/transport.js +0 -17
- package/dist/agent/transport.js.map +0 -1
- package/dist/agent/types.d.ts +0 -11
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -10
- package/dist/agent/types.js.map +0 -1
- package/dist/routes/jobs.d.ts +0 -16
- package/dist/routes/jobs.d.ts.map +0 -1
- package/dist/routes/jobs.js +0 -25
- package/dist/routes/jobs.js.map +0 -1
- package/dist/trpc/routers/sandboxes.d.ts +0 -64
- package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
- package/dist/trpc/routers/sandboxes.js +0 -327
- package/dist/trpc/routers/sandboxes.js.map +0 -1
- package/dist/unified-websocket-runner.d.ts +0 -280
- package/dist/unified-websocket-runner.d.ts.map +0 -1
- package/dist/unified-websocket-runner.js +0 -3840
- package/dist/unified-websocket-runner.js.map +0 -1
|
@@ -1,17 +1,44 @@
|
|
|
1
1
|
import { router } from "../index.js";
|
|
2
2
|
import { protectedProcedure } from "../middleware.js";
|
|
3
|
+
import { TRPCError } from "@trpc/server";
|
|
3
4
|
import { createLogger } from "@nodetool-ai/config";
|
|
4
|
-
import { getProvider, isProviderConfigured, listRegisteredProviderIds,
|
|
5
|
+
import { getProvider, getRegisteredProvider, isProviderConfigured, listRegisteredProviderIds, RECOMMENDED_MODELS, OLLAMA_DEFAULT_URL, OllamaProvider, LMSTUDIO_DEFAULT_URL } from "@nodetool-ai/runtime";
|
|
6
|
+
import { getSecret as getStoredSecret } from "@nodetool-ai/models";
|
|
7
|
+
import { syncCustomProviderRegistry } from "../../custom-providers.js";
|
|
8
|
+
function secretResolverFor(userId) {
|
|
9
|
+
return (key) => getStoredSecret(key, userId).then((v) => v ?? undefined);
|
|
10
|
+
}
|
|
5
11
|
const log = createLogger("nodetool.websocket.trpc.models");
|
|
6
|
-
import { readCachedHfModels, searchCachedHfModels, getModelsByHfType,
|
|
7
|
-
import { getTransformersJsCacheDir,
|
|
12
|
+
import { readCachedHfModels, searchCachedHfModels, getModelsByHfType, filterModelsByHfType, deleteCachedHfModel } from "@nodetool-ai/huggingface";
|
|
13
|
+
import { getTransformersJsCacheDir, recommendedFor, scanTransformersJsCache, TJS_MODEL_TYPES } from "@nodetool-ai/transformers-js-nodes";
|
|
8
14
|
import { MODEL_SEARCH_KINDS } from "@nodetool-ai/protocol";
|
|
9
15
|
import { access, readdir } from "node:fs/promises";
|
|
10
16
|
import { constants as fsConstants } from "node:fs";
|
|
11
17
|
import { homedir } from "node:os";
|
|
12
|
-
import { basename, join } from "node:path";
|
|
18
|
+
import { basename, join, resolve, sep } from "node:path";
|
|
13
19
|
import { z } from "zod";
|
|
14
|
-
import {
|
|
20
|
+
import { isString } from "../../lib/wire-values.js";
|
|
21
|
+
import { readyProviderExecution, resolveModelExecutionAvailability } from "../../model-execution-availability.js";
|
|
22
|
+
const modelArtifactRefSchema = z.object({
|
|
23
|
+
source: z.literal("huggingface"),
|
|
24
|
+
repo_id: z.string(),
|
|
25
|
+
revision: z.string().nullish(),
|
|
26
|
+
path: z.string().nullish()
|
|
27
|
+
});
|
|
28
|
+
const modelAdapterInfoSchema = z.object({
|
|
29
|
+
state: z.enum(["installed", "missing_dependency", "unknown"]),
|
|
30
|
+
reason_code: z.string().nullish(),
|
|
31
|
+
reason: z.string().nullish(),
|
|
32
|
+
artifact_ref: modelArtifactRefSchema.nullish()
|
|
33
|
+
});
|
|
34
|
+
const modelExecutionAvailabilitySchema = z.object({
|
|
35
|
+
kind: z.enum(["local", "server", "api", "unavailable"]),
|
|
36
|
+
state: z.enum(["ready", "download_required", "unavailable"]),
|
|
37
|
+
label: z.enum(["Local", "Server", "API", "Unavailable"]),
|
|
38
|
+
reason: z.string().nullish(),
|
|
39
|
+
execution_site: z.enum(["nodetool_host", "provider"]).nullish(),
|
|
40
|
+
runtime_name: z.string().nullish()
|
|
41
|
+
});
|
|
15
42
|
// ── Local schemas (mirrored in packages/protocol/src/api-schemas/models.ts) ──
|
|
16
43
|
// Mirrors UnifiedModel in @nodetool-ai/protocol. Any field omitted here is
|
|
17
44
|
// stripped by the tRPC output validator — which is exactly how the `provider`
|
|
@@ -43,33 +70,27 @@ const unifiedModelSchema = z.object({
|
|
|
43
70
|
trending_score: z.number().nullish(),
|
|
44
71
|
image: z.string().nullish(),
|
|
45
72
|
supports_tools: z.boolean().nullish(),
|
|
46
|
-
voices: z.array(z.string()).nullish()
|
|
73
|
+
voices: z.array(z.string()).nullish(),
|
|
74
|
+
capabilities: z.array(z.string()).nullish(),
|
|
75
|
+
languages: z.array(z.string()).nullish(),
|
|
76
|
+
sample_rate: z.number().nullish(),
|
|
77
|
+
requires_reference_text: z.boolean().nullish(),
|
|
78
|
+
adapter: modelAdapterInfoSchema.nullish(),
|
|
79
|
+
execution: modelExecutionAvailabilitySchema.nullish(),
|
|
80
|
+
durations: z.array(z.number()).nullish(),
|
|
81
|
+
resolutions: z.array(z.string()).nullish(),
|
|
82
|
+
aspect_ratios: z.array(z.string()).nullish()
|
|
47
83
|
});
|
|
48
84
|
const modelsListOutput = z.array(unifiedModelSchema);
|
|
49
85
|
const providersOutput = z.array(z.object({
|
|
50
86
|
provider: z.string(),
|
|
51
|
-
capabilities: z.array(z.string())
|
|
87
|
+
capabilities: z.array(z.string()),
|
|
88
|
+
access: z.enum(["in_process", "local_service", "remote_api"]).optional(),
|
|
89
|
+
display_name: z.string().optional()
|
|
52
90
|
}));
|
|
53
91
|
const recommendedInput = z.object({
|
|
54
92
|
check_servers: z.boolean().optional().default(false)
|
|
55
93
|
});
|
|
56
|
-
const hfCacheCheckInput = z.object({
|
|
57
|
-
repo_id: z.string().min(1),
|
|
58
|
-
allow_pattern: z
|
|
59
|
-
.union([z.string(), z.array(z.string())])
|
|
60
|
-
.nullable()
|
|
61
|
-
.optional(),
|
|
62
|
-
ignore_pattern: z
|
|
63
|
-
.union([z.string(), z.array(z.string())])
|
|
64
|
-
.nullable()
|
|
65
|
-
.optional()
|
|
66
|
-
});
|
|
67
|
-
const hfCacheCheckOutput = z.object({
|
|
68
|
-
repo_id: z.string(),
|
|
69
|
-
all_present: z.boolean(),
|
|
70
|
-
total_files: z.number(),
|
|
71
|
-
missing: z.array(z.string())
|
|
72
|
-
});
|
|
73
94
|
const hfFastCacheStatusItem = z.object({
|
|
74
95
|
key: z.string(),
|
|
75
96
|
repo_id: z.string(),
|
|
@@ -89,28 +110,18 @@ const hfFastCacheStatusOutput = z.array(z.object({
|
|
|
89
110
|
key: z.string(),
|
|
90
111
|
downloaded: z.boolean()
|
|
91
112
|
}));
|
|
92
|
-
const tryCacheFilesInput = z.array(z.object({
|
|
93
|
-
repo_id: z.string().optional(),
|
|
94
|
-
path: z.string().optional()
|
|
95
|
-
}));
|
|
96
|
-
const tryCacheFilesOutput = z.array(z.object({
|
|
97
|
-
repo_id: z.string(),
|
|
98
|
-
path: z.string(),
|
|
99
|
-
downloaded: z.boolean()
|
|
100
|
-
}));
|
|
101
|
-
const tryCacheReposInput = z.array(z.string());
|
|
102
|
-
const tryCacheReposOutput = z.array(z.object({
|
|
103
|
-
repo_id: z.string(),
|
|
104
|
-
downloaded: z.boolean()
|
|
105
|
-
}));
|
|
106
|
-
const hfFileInfoInput = z.array(z.object({
|
|
107
|
-
repo_id: z.string(),
|
|
108
|
-
path: z.string()
|
|
109
|
-
}));
|
|
110
113
|
const hfSearchInput = z.object({
|
|
111
114
|
query: z.string().optional(),
|
|
112
115
|
type: z.string().optional()
|
|
113
116
|
});
|
|
117
|
+
const hfHubSearchInput = z.object({
|
|
118
|
+
/** Free-text search passed to the Hub's `search` param. */
|
|
119
|
+
query: z.string().optional(),
|
|
120
|
+
/** HF pipeline tag filter, e.g. "audio-text-to-text". */
|
|
121
|
+
pipeline_tag: z.string().optional(),
|
|
122
|
+
/** Max results (Hub caps high; we keep it modest for the UI). */
|
|
123
|
+
limit: z.number().int().min(1).max(100).optional()
|
|
124
|
+
});
|
|
114
125
|
const hfByTypeInput = z.object({
|
|
115
126
|
model_type: z.string().min(1)
|
|
116
127
|
});
|
|
@@ -120,6 +131,33 @@ const tjsByTypeInput = z.object({
|
|
|
120
131
|
const hfDeleteInput = z.object({
|
|
121
132
|
repo_id: z.string().min(1)
|
|
122
133
|
});
|
|
134
|
+
/** Where a model route operates: the local cache (default) or an attached worker. */
|
|
135
|
+
const modelScope = z.enum(["local", "worker"]).default("local");
|
|
136
|
+
/**
|
|
137
|
+
* Resolve the worker bridge for a `scope: "worker"` request. Requires an
|
|
138
|
+
* attached worker whose image speaks the `models.*` bridge protocol; throws a
|
|
139
|
+
* CONFLICT otherwise so the UI can surface a clear reason.
|
|
140
|
+
*/
|
|
141
|
+
async function requireWorkerBridge(ctx) {
|
|
142
|
+
if (!ctx.workerManager) {
|
|
143
|
+
// Server wiring problem, not a runtime state the client can act on.
|
|
144
|
+
throw new TRPCError({
|
|
145
|
+
code: "INTERNAL_SERVER_ERROR",
|
|
146
|
+
message: "Worker support is not configured on this server"
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const active = await ctx.workerManager.getActiveWorker();
|
|
150
|
+
if (!active) {
|
|
151
|
+
throw new TRPCError({ code: "CONFLICT", message: "No worker attached" });
|
|
152
|
+
}
|
|
153
|
+
if (!ctx.pythonBridge.supportsModelManagement()) {
|
|
154
|
+
throw new TRPCError({
|
|
155
|
+
code: "CONFLICT",
|
|
156
|
+
message: "This worker's image is too old for model management. Upgrade the worker image."
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return ctx.pythonBridge;
|
|
160
|
+
}
|
|
123
161
|
const ollamaModelSchema = z.object({
|
|
124
162
|
type: z.string(),
|
|
125
163
|
name: z.string(),
|
|
@@ -150,7 +188,7 @@ function dedupeModels(models) {
|
|
|
150
188
|
const seen = new Set();
|
|
151
189
|
const deduped = [];
|
|
152
190
|
for (const model of models) {
|
|
153
|
-
const key = `${model.repo_id ?? ""}::${model.path ?? ""}`;
|
|
191
|
+
const key = `${model.provider ?? ""}::${model.repo_id ?? model.id ?? ""}::${model.path ?? ""}`;
|
|
154
192
|
if (!seen.has(key)) {
|
|
155
193
|
seen.add(key);
|
|
156
194
|
deduped.push(model);
|
|
@@ -161,18 +199,43 @@ function dedupeModels(models) {
|
|
|
161
199
|
function normalizePatterns(patterns) {
|
|
162
200
|
if (patterns == null)
|
|
163
201
|
return null;
|
|
164
|
-
if (
|
|
202
|
+
if (isString(patterns))
|
|
165
203
|
return patterns ? [patterns] : null;
|
|
166
204
|
const cleaned = patterns.filter((p) => Boolean(p));
|
|
167
205
|
return cleaned.length > 0 ? cleaned : null;
|
|
168
206
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
function matchesPattern(value, pattern) {
|
|
175
|
-
|
|
207
|
+
// Linear (two-pointer) glob matcher. `*` matches any run of characters, `?`
|
|
208
|
+
// matches a single character; all other characters are literal. This avoids
|
|
209
|
+
// the catastrophic backtracking of a naive `*` -> `.*` regex compiled from
|
|
210
|
+
// client-supplied patterns (ReDoS), while matching the same glob semantics.
|
|
211
|
+
// Exported for regression tests.
|
|
212
|
+
export function matchesPattern(value, pattern) {
|
|
213
|
+
let v = 0;
|
|
214
|
+
let p = 0;
|
|
215
|
+
let starIdx = -1;
|
|
216
|
+
let matchIdx = 0;
|
|
217
|
+
while (v < value.length) {
|
|
218
|
+
if (p < pattern.length && (pattern[p] === "?" || pattern[p] === value[v])) {
|
|
219
|
+
v++;
|
|
220
|
+
p++;
|
|
221
|
+
}
|
|
222
|
+
else if (p < pattern.length && pattern[p] === "*") {
|
|
223
|
+
starIdx = p;
|
|
224
|
+
matchIdx = v;
|
|
225
|
+
p++;
|
|
226
|
+
}
|
|
227
|
+
else if (starIdx !== -1) {
|
|
228
|
+
p = starIdx + 1;
|
|
229
|
+
matchIdx++;
|
|
230
|
+
v = matchIdx;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
while (p < pattern.length && pattern[p] === "*")
|
|
237
|
+
p++;
|
|
238
|
+
return p === pattern.length;
|
|
176
239
|
}
|
|
177
240
|
function isIgnored(path, ignorePatterns) {
|
|
178
241
|
if (!ignorePatterns || ignorePatterns.length === 0)
|
|
@@ -205,6 +268,19 @@ async function pathExists(path) {
|
|
|
205
268
|
return false;
|
|
206
269
|
}
|
|
207
270
|
}
|
|
271
|
+
// Joins a client-supplied relative path under `baseDir` and rejects any result
|
|
272
|
+
// that escapes the base directory (via `..` segments or an absolute path).
|
|
273
|
+
// Returns null when the path would escape — callers treat that as "not found"
|
|
274
|
+
// so a traversal attempt can't be used as a filesystem existence oracle.
|
|
275
|
+
// Exported for regression tests.
|
|
276
|
+
export function safeJoinWithin(baseDir, relativePath) {
|
|
277
|
+
const resolvedBase = resolve(baseDir);
|
|
278
|
+
const full = resolve(resolvedBase, relativePath);
|
|
279
|
+
if (full !== resolvedBase && !full.startsWith(resolvedBase + sep)) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
return full;
|
|
283
|
+
}
|
|
208
284
|
async function listSnapshotDirs(repoId) {
|
|
209
285
|
const snapshotsRoot = join(getHfCacheRoot(), repoToCacheDir(repoId), "snapshots");
|
|
210
286
|
if (!(await pathExists(snapshotsRoot)))
|
|
@@ -216,12 +292,11 @@ async function listSnapshotDirs(repoId) {
|
|
|
216
292
|
}
|
|
217
293
|
async function repoFileInCache(repoId, relativePath) {
|
|
218
294
|
const snapshotDirs = await listSnapshotDirs(repoId);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return false;
|
|
295
|
+
const checks = await Promise.all(snapshotDirs.map((snapshotDir) => {
|
|
296
|
+
const full = safeJoinWithin(snapshotDir, relativePath);
|
|
297
|
+
return full ? pathExists(full) : Promise.resolve(false);
|
|
298
|
+
}));
|
|
299
|
+
return checks.some((exists) => exists);
|
|
225
300
|
}
|
|
226
301
|
async function listRepoCachedFiles(repoId) {
|
|
227
302
|
const snapshotDirs = await listSnapshotDirs(repoId);
|
|
@@ -245,9 +320,6 @@ async function listRepoCachedFiles(repoId) {
|
|
|
245
320
|
}
|
|
246
321
|
return [...collected];
|
|
247
322
|
}
|
|
248
|
-
async function hasCachedFiles(repoId) {
|
|
249
|
-
return (await listRepoCachedFiles(repoId)).length > 0;
|
|
250
|
-
}
|
|
251
323
|
async function isLlamaCppModelCached(repoId, filePath) {
|
|
252
324
|
if (await repoFileInCache(repoId, filePath)) {
|
|
253
325
|
return true;
|
|
@@ -261,30 +333,35 @@ async function isLlamaCppModelCached(repoId, filePath) {
|
|
|
261
333
|
for (const snapshot of snapshots) {
|
|
262
334
|
if (!snapshot.isDirectory())
|
|
263
335
|
continue;
|
|
264
|
-
|
|
336
|
+
const snapshotDir = join(repoDir, snapshot.name);
|
|
337
|
+
const full = safeJoinWithin(snapshotDir, filePath);
|
|
338
|
+
if (full && (await pathExists(full))) {
|
|
265
339
|
return true;
|
|
266
340
|
}
|
|
267
|
-
|
|
341
|
+
// basename() strips any traversal segments, so this join stays contained.
|
|
342
|
+
if (await pathExists(join(snapshotDir, basename(filePath)))) {
|
|
268
343
|
return true;
|
|
269
344
|
}
|
|
270
345
|
}
|
|
271
346
|
return false;
|
|
272
347
|
}
|
|
273
|
-
async function getAvailableProviderIds(userId) {
|
|
348
|
+
export async function getAvailableProviderIds(userId) {
|
|
274
349
|
const ids = listRegisteredProviderIds();
|
|
350
|
+
const getSecret = secretResolverFor(userId);
|
|
275
351
|
const checks = await Promise.all(ids.map(async (id) => ({
|
|
276
352
|
id,
|
|
277
|
-
available: await isProviderConfigured(id,
|
|
353
|
+
available: await isProviderConfigured(id, getSecret)
|
|
278
354
|
})));
|
|
279
355
|
return checks.filter((c) => c.available).map((c) => c.id);
|
|
280
356
|
}
|
|
281
357
|
async function instantiateProvider(provider, userId) {
|
|
282
|
-
|
|
358
|
+
const getSecret = secretResolverFor(userId);
|
|
359
|
+
if (!(await isProviderConfigured(provider, getSecret))) {
|
|
283
360
|
log.debug("Provider not configured", { provider, userId });
|
|
284
361
|
return null;
|
|
285
362
|
}
|
|
286
363
|
try {
|
|
287
|
-
return await getProvider(provider,
|
|
364
|
+
return await getProvider(provider, getSecret);
|
|
288
365
|
}
|
|
289
366
|
catch (error) {
|
|
290
367
|
log.warn("Provider instantiation failed", {
|
|
@@ -356,20 +433,35 @@ async function isServerReachable(url) {
|
|
|
356
433
|
clearTimeout(timer);
|
|
357
434
|
}
|
|
358
435
|
}
|
|
359
|
-
async function getServerAvailability() {
|
|
360
|
-
if (isProduction())
|
|
361
|
-
return { ollama: false, llama_cpp: false };
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
436
|
+
async function getServerAvailability(userId) {
|
|
437
|
+
if (isProduction()) {
|
|
438
|
+
return { ollama: false, llama_cpp: false, lmstudio: false, vllm: false };
|
|
439
|
+
}
|
|
440
|
+
// Resolve URLs the same way getProvider() does: secret store → env →
|
|
441
|
+
// default. Otherwise a user-set URL in Settings → API Keys wouldn't filter
|
|
442
|
+
// the recommended-models list correctly.
|
|
443
|
+
const getSecret = secretResolverFor(userId);
|
|
444
|
+
const resolve = async (key, fallback) => {
|
|
445
|
+
const fromStore = await getSecret(key);
|
|
446
|
+
return (fromStore || process.env[key] || fallback).replace(/\/+$/, "");
|
|
447
|
+
};
|
|
448
|
+
const [ollamaUrl, llamaUrl, lmstudioUrl, vllmUrl] = await Promise.all([
|
|
449
|
+
resolve("OLLAMA_API_URL", OLLAMA_DEFAULT_URL),
|
|
450
|
+
resolve("LLAMA_CPP_URL", ""),
|
|
451
|
+
resolve("LMSTUDIO_API_URL", LMSTUDIO_DEFAULT_URL),
|
|
452
|
+
resolve("VLLM_BASE_URL", "")
|
|
453
|
+
]);
|
|
454
|
+
const [ollama, llama, lmstudio, vllm] = await Promise.all([
|
|
365
455
|
isServerReachable(`${ollamaUrl}/api/tags`),
|
|
366
456
|
llamaUrl
|
|
367
457
|
? isServerReachable(`${llamaUrl}/v1/models`)
|
|
368
|
-
: Promise.resolve(false)
|
|
458
|
+
: Promise.resolve(false),
|
|
459
|
+
isServerReachable(`${lmstudioUrl}/v1/models`),
|
|
460
|
+
vllmUrl ? isServerReachable(`${vllmUrl}/v1/models`) : Promise.resolve(false)
|
|
369
461
|
]);
|
|
370
|
-
return { ollama, llama_cpp: llama };
|
|
462
|
+
return { ollama, llama_cpp: llama, lmstudio, vllm };
|
|
371
463
|
}
|
|
372
|
-
async function serverAllowsModel(model, servers) {
|
|
464
|
+
async function serverAllowsModel(model, servers, userId) {
|
|
373
465
|
if (model.provider === "ollama")
|
|
374
466
|
return servers.ollama ?? false;
|
|
375
467
|
if (model.provider === "llama_cpp")
|
|
@@ -379,22 +471,81 @@ async function serverAllowsModel(model, servers) {
|
|
|
379
471
|
if (model.provider === "vllm")
|
|
380
472
|
return servers.vllm ?? false;
|
|
381
473
|
if (model.provider)
|
|
382
|
-
return await isProviderConfigured(model.provider);
|
|
474
|
+
return await isProviderConfigured(model.provider, secretResolverFor(userId));
|
|
383
475
|
return true;
|
|
384
476
|
}
|
|
385
|
-
async function getRecommendedModels(checkServers) {
|
|
477
|
+
async function getRecommendedModels(checkServers, userId) {
|
|
386
478
|
const models = [...RECOMMENDED_MODELS];
|
|
387
479
|
if (!checkServers)
|
|
388
480
|
return models;
|
|
389
|
-
const servers = await getServerAvailability();
|
|
481
|
+
const servers = await getServerAvailability(userId);
|
|
390
482
|
const filtered = [];
|
|
391
483
|
for (const model of models) {
|
|
392
|
-
if (await serverAllowsModel(model, servers)) {
|
|
484
|
+
if (await serverAllowsModel(model, servers, userId)) {
|
|
393
485
|
filtered.push(model);
|
|
394
486
|
}
|
|
395
487
|
}
|
|
396
488
|
return filtered;
|
|
397
489
|
}
|
|
490
|
+
/** Map a HF Hub API model record onto our UnifiedModel shape. */
|
|
491
|
+
function hubModelToUnified(m, fallbackTag) {
|
|
492
|
+
const repoId = m.id ?? m.modelId;
|
|
493
|
+
if (!repoId)
|
|
494
|
+
return null;
|
|
495
|
+
const tag = m.pipeline_tag ?? fallbackTag ?? undefined;
|
|
496
|
+
// Hub pipeline tags are dash-cased ("audio-text-to-text"); our model types
|
|
497
|
+
// are the same task underscore-cased and prefixed "hf.".
|
|
498
|
+
const type = tag ? `hf.${tag.replace(/-/g, "_")}` : "hf.model";
|
|
499
|
+
return {
|
|
500
|
+
id: repoId,
|
|
501
|
+
type,
|
|
502
|
+
name: repoId,
|
|
503
|
+
repo_id: repoId,
|
|
504
|
+
provider: "huggingface",
|
|
505
|
+
downloaded: false,
|
|
506
|
+
pipeline_tag: m.pipeline_tag ?? null,
|
|
507
|
+
tags: m.tags ?? null,
|
|
508
|
+
downloads: m.downloads ?? null,
|
|
509
|
+
likes: m.likes ?? null,
|
|
510
|
+
trending_score: m.trendingScore ?? null
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Search the live HuggingFace Hub (https://huggingface.co/api/models) by
|
|
515
|
+
* free-text and/or pipeline tag. Returns downloadable repos sorted by
|
|
516
|
+
* popularity. Network/HTTP failures degrade to an empty list.
|
|
517
|
+
*/
|
|
518
|
+
async function searchHuggingFaceHub(query, pipelineTag, limit) {
|
|
519
|
+
if (!query && !pipelineTag)
|
|
520
|
+
return [];
|
|
521
|
+
const params = new URLSearchParams();
|
|
522
|
+
if (query)
|
|
523
|
+
params.set("search", query);
|
|
524
|
+
if (pipelineTag)
|
|
525
|
+
params.set("pipeline_tag", pipelineTag);
|
|
526
|
+
params.set("limit", String(limit));
|
|
527
|
+
params.set("sort", "downloads");
|
|
528
|
+
params.set("direction", "-1");
|
|
529
|
+
const headers = { Accept: "application/json" };
|
|
530
|
+
const token = process.env.HF_TOKEN || process.env.HUGGING_FACE_HUB_TOKEN;
|
|
531
|
+
if (token)
|
|
532
|
+
headers.Authorization = `Bearer ${token}`;
|
|
533
|
+
try {
|
|
534
|
+
const res = await fetch(`https://huggingface.co/api/models?${params.toString()}`, { headers });
|
|
535
|
+
if (!res.ok) {
|
|
536
|
+
log.warn("HF Hub search failed: %d %s", res.status, res.statusText);
|
|
537
|
+
return [];
|
|
538
|
+
}
|
|
539
|
+
const data = (await res.json());
|
|
540
|
+
return data
|
|
541
|
+
.map((m) => hubModelToUnified(m, pipelineTag))
|
|
542
|
+
.filter((m) => m !== null);
|
|
543
|
+
}
|
|
544
|
+
catch (err) {
|
|
545
|
+
log.warn("HF Hub search error: %s", err.message);
|
|
546
|
+
return [];
|
|
547
|
+
}
|
|
548
|
+
}
|
|
398
549
|
function selectRecommended(modality, task) {
|
|
399
550
|
return RECOMMENDED_MODELS.filter((model) => model.modality === modality && (!task || model.task === task));
|
|
400
551
|
}
|
|
@@ -426,29 +577,60 @@ function tjsCachedAsRecommended(repoId) {
|
|
|
426
577
|
return out;
|
|
427
578
|
}
|
|
428
579
|
function toUnifiedLanguageModel(model, supportsTools) {
|
|
580
|
+
const registration = getRegisteredProvider(model.provider);
|
|
429
581
|
return {
|
|
430
582
|
id: model.id,
|
|
431
583
|
type: "language_model",
|
|
432
584
|
name: model.name,
|
|
433
585
|
provider: model.provider,
|
|
434
586
|
repo_id: null,
|
|
435
|
-
path:
|
|
587
|
+
path: null,
|
|
436
588
|
downloaded: model.provider === "ollama" || model.provider === "llama_cpp",
|
|
437
589
|
tags: [model.provider],
|
|
438
|
-
supports_tools: supportsTools ?? null
|
|
590
|
+
supports_tools: supportsTools ?? null,
|
|
591
|
+
execution: registration
|
|
592
|
+
? readyProviderExecution(registration.metadata)
|
|
593
|
+
: null
|
|
439
594
|
};
|
|
440
595
|
}
|
|
441
596
|
function toUnifiedModel(model, type) {
|
|
597
|
+
const registration = getRegisteredProvider(model.provider);
|
|
442
598
|
return {
|
|
443
599
|
id: model.id,
|
|
444
600
|
type,
|
|
445
601
|
name: model.name,
|
|
446
602
|
provider: model.provider,
|
|
447
603
|
repo_id: null,
|
|
448
|
-
path:
|
|
604
|
+
path: null,
|
|
449
605
|
downloaded: model.provider === "ollama" || model.provider === "llama_cpp",
|
|
450
606
|
tags: [model.provider],
|
|
451
|
-
voices: model.voices ?? null
|
|
607
|
+
voices: model.voices ?? null,
|
|
608
|
+
capabilities: model.capabilities ?? null,
|
|
609
|
+
languages: model.languages ?? null,
|
|
610
|
+
sample_rate: model.sampleRate ?? null,
|
|
611
|
+
requires_reference_text: model.requiresReferenceText ?? null,
|
|
612
|
+
adapter: model.adapter
|
|
613
|
+
? {
|
|
614
|
+
state: model.adapter.state,
|
|
615
|
+
reason_code: model.adapter.reasonCode ?? null,
|
|
616
|
+
reason: model.adapter.reason ?? null,
|
|
617
|
+
artifact_ref: model.adapter.artifactRef
|
|
618
|
+
? {
|
|
619
|
+
source: model.adapter.artifactRef.source,
|
|
620
|
+
repo_id: model.adapter.artifactRef.repoId,
|
|
621
|
+
revision: model.adapter.artifactRef.revision ?? null,
|
|
622
|
+
path: model.adapter.artifactRef.path ?? null
|
|
623
|
+
}
|
|
624
|
+
: null
|
|
625
|
+
}
|
|
626
|
+
: null,
|
|
627
|
+
supported_tasks: model.supportedTasks ?? null,
|
|
628
|
+
durations: model.durations ?? null,
|
|
629
|
+
resolutions: model.resolutions ?? null,
|
|
630
|
+
aspect_ratios: model.aspectRatios ?? null,
|
|
631
|
+
execution: registration
|
|
632
|
+
? readyProviderExecution(registration.metadata)
|
|
633
|
+
: null
|
|
452
634
|
};
|
|
453
635
|
}
|
|
454
636
|
function toOllamaModel(model) {
|
|
@@ -462,27 +644,57 @@ function toOllamaModel(model) {
|
|
|
462
644
|
details: {}
|
|
463
645
|
};
|
|
464
646
|
}
|
|
465
|
-
|
|
647
|
+
function providerExecutionMap(configuredProviderIds) {
|
|
648
|
+
const configured = new Set(configuredProviderIds);
|
|
649
|
+
const providers = new Map();
|
|
650
|
+
for (const providerId of listRegisteredProviderIds()) {
|
|
651
|
+
const metadata = getRegisteredProvider(providerId)?.metadata;
|
|
652
|
+
if (!metadata)
|
|
653
|
+
continue;
|
|
654
|
+
providers.set(providerId, {
|
|
655
|
+
...metadata,
|
|
656
|
+
configured: configured.has(providerId)
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
return providers;
|
|
660
|
+
}
|
|
661
|
+
async function resolveProviderModelExecution(models, configuredProviderIds) {
|
|
662
|
+
if (!models.some((model) => model.adapter)) {
|
|
663
|
+
return resolveModelExecutionAvailability(models, providerExecutionMap(configuredProviderIds));
|
|
664
|
+
}
|
|
665
|
+
let cachedModels = [];
|
|
666
|
+
try {
|
|
667
|
+
cachedModels = await readCachedHfModels();
|
|
668
|
+
}
|
|
669
|
+
catch {
|
|
670
|
+
// A failed cache scan means local adapters remain download-required.
|
|
671
|
+
}
|
|
672
|
+
return resolveModelExecutionAvailability([...models, ...cachedModels], providerExecutionMap(configuredProviderIds)).slice(0, models.length);
|
|
673
|
+
}
|
|
674
|
+
export async function getAllModels(userId) {
|
|
466
675
|
const all = [];
|
|
467
676
|
all.push(...RECOMMENDED_MODELS);
|
|
468
677
|
const availableIds = await getAvailableProviderIds(userId);
|
|
469
|
-
|
|
678
|
+
const providerModelsPromises = availableIds.map(async (providerId) => {
|
|
470
679
|
try {
|
|
471
680
|
const instance = await instantiateProvider(providerId, userId);
|
|
472
681
|
if (!instance)
|
|
473
|
-
|
|
682
|
+
return [];
|
|
474
683
|
const models = await instance.getAvailableLanguageModels();
|
|
475
|
-
const toolFlags = await Promise.all(models.map((m) => instance
|
|
476
|
-
|
|
477
|
-
.catch(() => null)));
|
|
478
|
-
models.forEach((m, i) => {
|
|
479
|
-
all.push(toUnifiedLanguageModel(m, toolFlags[i]));
|
|
480
|
-
});
|
|
684
|
+
const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
|
|
685
|
+
return models.map((m, i) => toUnifiedLanguageModel(m, toolFlags[i]));
|
|
481
686
|
}
|
|
482
687
|
catch {
|
|
483
688
|
// Provider unavailable — skip
|
|
689
|
+
return [];
|
|
484
690
|
}
|
|
691
|
+
});
|
|
692
|
+
const providerModelsArrays = await Promise.all(providerModelsPromises);
|
|
693
|
+
for (const models of providerModelsArrays) {
|
|
694
|
+
all.push(...models);
|
|
485
695
|
}
|
|
696
|
+
const localProviderIds = availableIds.filter((providerId) => getRegisteredProvider(providerId)?.metadata.access !== "remote_api");
|
|
697
|
+
all.push(...(await collectProviderCatalogModels(userId, localProviderIds)));
|
|
486
698
|
if (!isProduction()) {
|
|
487
699
|
try {
|
|
488
700
|
const hfModels = await readCachedHfModels();
|
|
@@ -506,27 +718,7 @@ async function getAllModels(userId) {
|
|
|
506
718
|
// Transformers.js cache unavailable — continue without it
|
|
507
719
|
}
|
|
508
720
|
}
|
|
509
|
-
return dedupeModels(all);
|
|
510
|
-
}
|
|
511
|
-
async function checkHfCache(body) {
|
|
512
|
-
const allowPatterns = normalizePatterns(body.allow_pattern);
|
|
513
|
-
const ignorePatterns = normalizePatterns(body.ignore_pattern);
|
|
514
|
-
const files = await listRepoCachedFiles(body.repo_id);
|
|
515
|
-
const missing = [];
|
|
516
|
-
if (allowPatterns) {
|
|
517
|
-
for (const pattern of allowPatterns) {
|
|
518
|
-
const matched = files.some((path) => matchesPattern(path, pattern) && !isIgnored(path, ignorePatterns));
|
|
519
|
-
if (!matched) {
|
|
520
|
-
missing.push(pattern);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
return {
|
|
525
|
-
repo_id: body.repo_id,
|
|
526
|
-
all_present: missing.length === 0,
|
|
527
|
-
total_files: files.length,
|
|
528
|
-
missing
|
|
529
|
-
};
|
|
721
|
+
return resolveModelExecutionAvailability(dedupeModels(all), providerExecutionMap(availableIds));
|
|
530
722
|
}
|
|
531
723
|
// ── availableForKind helpers ───────────────────────────────────────
|
|
532
724
|
const availableForKindInput = z.object({
|
|
@@ -538,9 +730,13 @@ const KIND_TO_MODALITY = {
|
|
|
538
730
|
text_to_image: "image",
|
|
539
731
|
image_to_image: "image",
|
|
540
732
|
text_to_speech: "tts",
|
|
733
|
+
text_to_music: "music",
|
|
734
|
+
audio_to_audio: "audio_to_audio",
|
|
541
735
|
speech_to_text: "asr",
|
|
542
736
|
text_to_video: "video",
|
|
543
|
-
image_to_video: "video"
|
|
737
|
+
image_to_video: "video",
|
|
738
|
+
video_to_video: "video",
|
|
739
|
+
reference_to_video: "video"
|
|
544
740
|
};
|
|
545
741
|
async function collectProviderModelsForKind(userId, kind) {
|
|
546
742
|
const out = [];
|
|
@@ -553,7 +749,9 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
553
749
|
switch (kind) {
|
|
554
750
|
case "text_generation": {
|
|
555
751
|
const models = await instance.getAvailableLanguageModels();
|
|
556
|
-
const toolFlags = await Promise.all(models.map((m) => instance
|
|
752
|
+
const toolFlags = await Promise.all(models.map((m) => instance
|
|
753
|
+
.hasToolSupport(m.id)
|
|
754
|
+
.catch(() => null)));
|
|
557
755
|
models.forEach((m, i) => out.push(toUnifiedLanguageModel(m, toolFlags[i])));
|
|
558
756
|
return;
|
|
559
757
|
}
|
|
@@ -579,6 +777,18 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
579
777
|
out.push(toUnifiedModel(m, "tts_model"));
|
|
580
778
|
return;
|
|
581
779
|
}
|
|
780
|
+
case "text_to_music": {
|
|
781
|
+
const models = await instance.getAvailableMusicModels();
|
|
782
|
+
for (const m of models)
|
|
783
|
+
out.push(toUnifiedModel(m, "music_model"));
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
786
|
+
case "audio_to_audio": {
|
|
787
|
+
const models = await instance.getAvailableAudioToAudioModels();
|
|
788
|
+
for (const m of models)
|
|
789
|
+
out.push(toUnifiedModel(m, "audio_to_audio_model"));
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
582
792
|
case "speech_to_text": {
|
|
583
793
|
const models = await instance.getAvailableASRModels();
|
|
584
794
|
for (const m of models)
|
|
@@ -586,7 +796,9 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
586
796
|
return;
|
|
587
797
|
}
|
|
588
798
|
case "text_to_video":
|
|
589
|
-
case "image_to_video":
|
|
799
|
+
case "image_to_video":
|
|
800
|
+
case "video_to_video":
|
|
801
|
+
case "reference_to_video": {
|
|
590
802
|
const models = await instance.getAvailableVideoModels();
|
|
591
803
|
for (const m of models) {
|
|
592
804
|
if (m.supportedTasks && !m.supportedTasks.includes(kind))
|
|
@@ -600,12 +812,42 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
600
812
|
}
|
|
601
813
|
return out;
|
|
602
814
|
}
|
|
815
|
+
/**
|
|
816
|
+
* Every remote model the user's configured providers can enumerate, across all
|
|
817
|
+
* non-language-model types (embeddings, images, TTS, music, ASR, video), for the
|
|
818
|
+
* SDK model catalog. Unlike `collectProviderModelsForKind` this makes one pass
|
|
819
|
+
* per provider (each `getAvailable*Models` called once, no task filtering) so
|
|
820
|
+
* text_to_image and image_to_image capable models are both included. Language
|
|
821
|
+
* models are not collected here — `getAllModels` already enumerates them.
|
|
822
|
+
*/
|
|
823
|
+
export async function collectProviderCatalogModels(userId, providerIdsOverride) {
|
|
824
|
+
const providerIds = providerIdsOverride ?? (await getAvailableProviderIds(userId));
|
|
825
|
+
const perProvider = await Promise.all(providerIds.map((providerId) => safeProviderCall("catalogModels", { provider: providerId, userId }, async () => {
|
|
826
|
+
const instance = await instantiateProvider(providerId, userId);
|
|
827
|
+
if (!instance)
|
|
828
|
+
return [];
|
|
829
|
+
const collect = (fetchModels, type) => safeProviderCall(`catalogModels:${type}`, { provider: providerId, userId }, async () => (await fetchModels()).map((m) => toUnifiedModel(m, type)), []);
|
|
830
|
+
const lists = await Promise.all([
|
|
831
|
+
collect(() => instance.getAvailableImageModels(), "image_model"),
|
|
832
|
+
collect(() => instance.getAvailableEmbeddingModels(), "embedding_model"),
|
|
833
|
+
collect(() => instance.getAvailableTTSModels(), "tts_model"),
|
|
834
|
+
collect(() => instance.getAvailableMusicModels(), "music_model"),
|
|
835
|
+
collect(() => instance.getAvailableAudioToAudioModels(), "audio_to_audio_model"),
|
|
836
|
+
collect(() => instance.getAvailableASRModels(), "asr_model"),
|
|
837
|
+
collect(() => instance.getAvailableVideoModels(), "video_model")
|
|
838
|
+
]);
|
|
839
|
+
return lists.flat();
|
|
840
|
+
}, [])));
|
|
841
|
+
return perProvider.flat();
|
|
842
|
+
}
|
|
603
843
|
function curatedForKind(kind) {
|
|
604
844
|
const modality = KIND_TO_MODALITY[kind];
|
|
605
845
|
// For text_generation/embedding/image/video, RECOMMENDED_MODELS entries are
|
|
606
|
-
// tagged with the specific task. TTS and
|
|
607
|
-
// modality alone is enough.
|
|
608
|
-
const taskRequired = kind !== "text_to_speech" &&
|
|
846
|
+
// tagged with the specific task. TTS, ASR and music entries have no task
|
|
847
|
+
// field — modality alone is enough.
|
|
848
|
+
const taskRequired = kind !== "text_to_speech" &&
|
|
849
|
+
kind !== "speech_to_text" &&
|
|
850
|
+
kind !== "text_to_music";
|
|
609
851
|
return RECOMMENDED_MODELS.filter((r) => r.modality === modality && (!taskRequired || r.task === kind));
|
|
610
852
|
}
|
|
611
853
|
// ── Router ─────────────────────────────────────────────────────────
|
|
@@ -617,14 +859,26 @@ export const modelsRouter = router({
|
|
|
617
859
|
.output(providersOutput)
|
|
618
860
|
.query(async ({ ctx }) => {
|
|
619
861
|
const userId = ctx.userId;
|
|
862
|
+
// The registry is a process global but a custom provider's catalog is
|
|
863
|
+
// per user, so the caller's own definitions have to be in it before the
|
|
864
|
+
// enumeration below — otherwise a second account's endpoints are the
|
|
865
|
+
// ones listed, or none are after a restart.
|
|
866
|
+
await syncCustomProviderRegistry(userId);
|
|
620
867
|
const infos = [];
|
|
621
|
-
|
|
622
|
-
|
|
868
|
+
const providerIds = await getAvailableProviderIds(userId);
|
|
869
|
+
const instances = await Promise.all(providerIds.map(async (providerId) => ({
|
|
870
|
+
providerId,
|
|
871
|
+
instance: await instantiateProvider(providerId, userId)
|
|
872
|
+
})));
|
|
873
|
+
for (const { providerId, instance } of instances) {
|
|
623
874
|
if (!instance)
|
|
624
875
|
continue;
|
|
876
|
+
const metadata = getRegisteredProvider(providerId)?.metadata;
|
|
625
877
|
infos.push({
|
|
626
878
|
provider: providerId,
|
|
627
|
-
capabilities:
|
|
879
|
+
capabilities: instance.getCapabilities(),
|
|
880
|
+
access: metadata?.access ?? "remote_api",
|
|
881
|
+
display_name: metadata?.displayName ?? providerId
|
|
628
882
|
});
|
|
629
883
|
}
|
|
630
884
|
return infos;
|
|
@@ -634,58 +888,30 @@ export const modelsRouter = router({
|
|
|
634
888
|
*/
|
|
635
889
|
recommended: protectedProcedure
|
|
636
890
|
.input(recommendedInput)
|
|
637
|
-
.
|
|
638
|
-
|
|
891
|
+
.output(modelsListOutput)
|
|
892
|
+
.query(async ({ input, ctx }) => {
|
|
893
|
+
return getRecommendedModels(input.check_servers ?? false, ctx.userId);
|
|
639
894
|
}),
|
|
640
|
-
/**
|
|
641
|
-
* Recommended image models (all tasks).
|
|
642
|
-
*/
|
|
643
|
-
recommendedImage: protectedProcedure
|
|
644
|
-
.query(() => selectRecommended("image")),
|
|
645
|
-
/**
|
|
646
|
-
* Recommended text-to-image models.
|
|
647
|
-
*/
|
|
648
895
|
recommendedImageTextToImage: protectedProcedure
|
|
896
|
+
.output(modelsListOutput)
|
|
649
897
|
.query(() => selectRecommended("image", "text_to_image")),
|
|
650
|
-
/**
|
|
651
|
-
* Recommended image-to-image models.
|
|
652
|
-
*/
|
|
653
898
|
recommendedImageImageToImage: protectedProcedure
|
|
899
|
+
.output(modelsListOutput)
|
|
654
900
|
.query(() => selectRecommended("image", "image_to_image")),
|
|
655
|
-
/**
|
|
656
|
-
* Recommended language models (all tasks).
|
|
657
|
-
*/
|
|
658
|
-
recommendedLanguage: protectedProcedure
|
|
659
|
-
.query(() => selectRecommended("language")),
|
|
660
|
-
/**
|
|
661
|
-
* Recommended text-generation models.
|
|
662
|
-
*/
|
|
663
|
-
recommendedLanguageTextGeneration: protectedProcedure
|
|
664
|
-
.query(() => selectRecommended("language", "text_generation")),
|
|
665
|
-
/**
|
|
666
|
-
* Recommended embedding models.
|
|
667
|
-
*/
|
|
668
901
|
recommendedLanguageEmbedding: protectedProcedure
|
|
902
|
+
.output(modelsListOutput)
|
|
669
903
|
.query(() => selectRecommended("language", "embedding")),
|
|
670
|
-
/**
|
|
671
|
-
* Recommended ASR models.
|
|
672
|
-
*/
|
|
673
904
|
recommendedAsr: protectedProcedure
|
|
905
|
+
.output(modelsListOutput)
|
|
674
906
|
.query(() => selectRecommended("asr")),
|
|
675
|
-
/**
|
|
676
|
-
* Recommended TTS models.
|
|
677
|
-
*/
|
|
678
907
|
recommendedTts: protectedProcedure
|
|
908
|
+
.output(modelsListOutput)
|
|
679
909
|
.query(() => selectRecommended("tts")),
|
|
680
|
-
/**
|
|
681
|
-
* Recommended text-to-video models.
|
|
682
|
-
*/
|
|
683
910
|
recommendedVideoTextToVideo: protectedProcedure
|
|
911
|
+
.output(modelsListOutput)
|
|
684
912
|
.query(() => selectRecommended("video", "text_to_video")),
|
|
685
|
-
/**
|
|
686
|
-
* Recommended image-to-video models.
|
|
687
|
-
*/
|
|
688
913
|
recommendedVideoImageToVideo: protectedProcedure
|
|
914
|
+
.output(modelsListOutput)
|
|
689
915
|
.query(() => selectRecommended("video", "image_to_video")),
|
|
690
916
|
/**
|
|
691
917
|
* All models available to the user for a given task kind. Aggregates the
|
|
@@ -695,6 +921,7 @@ export const modelsRouter = router({
|
|
|
695
921
|
*/
|
|
696
922
|
availableForKind: protectedProcedure
|
|
697
923
|
.input(availableForKindInput)
|
|
924
|
+
.output(modelsListOutput)
|
|
698
925
|
.query(async ({ ctx, input }) => {
|
|
699
926
|
const fromProviders = await collectProviderModelsForKind(ctx.userId, input.kind);
|
|
700
927
|
const curated = curatedForKind(input.kind);
|
|
@@ -713,13 +940,20 @@ export const modelsRouter = router({
|
|
|
713
940
|
* All models (recommended + provider models + HF cached).
|
|
714
941
|
*/
|
|
715
942
|
all: protectedProcedure
|
|
943
|
+
.output(modelsListOutput)
|
|
716
944
|
.query(async ({ ctx }) => getAllModels(ctx.userId)),
|
|
717
945
|
/**
|
|
718
|
-
* HuggingFace cached models.
|
|
946
|
+
* HuggingFace cached models. `scope: "worker"` lists the attached worker's
|
|
947
|
+
* cache via the Python bridge; the default `"local"` scans the local FS.
|
|
719
948
|
*/
|
|
720
949
|
huggingfaceList: protectedProcedure
|
|
950
|
+
.input(z.object({ scope: modelScope }).optional())
|
|
721
951
|
.output(modelsListOutput)
|
|
722
|
-
.query(async () => {
|
|
952
|
+
.query(async ({ ctx, input }) => {
|
|
953
|
+
if (input?.scope === "worker") {
|
|
954
|
+
const bridge = await requireWorkerBridge(ctx);
|
|
955
|
+
return (await bridge.listCachedModels());
|
|
956
|
+
}
|
|
723
957
|
if (isProduction())
|
|
724
958
|
return [];
|
|
725
959
|
try {
|
|
@@ -730,12 +964,17 @@ export const modelsRouter = router({
|
|
|
730
964
|
}
|
|
731
965
|
}),
|
|
732
966
|
/**
|
|
733
|
-
* Delete a HuggingFace cached model.
|
|
967
|
+
* Delete a HuggingFace cached model. `scope: "worker"` deletes from the
|
|
968
|
+
* attached worker's cache via the Python bridge.
|
|
734
969
|
*/
|
|
735
970
|
huggingfaceDelete: protectedProcedure
|
|
736
|
-
.input(hfDeleteInput)
|
|
971
|
+
.input(hfDeleteInput.extend({ scope: modelScope }))
|
|
737
972
|
.output(z.boolean())
|
|
738
|
-
.mutation(async ({ input }) => {
|
|
973
|
+
.mutation(async ({ ctx, input }) => {
|
|
974
|
+
if (input.scope === "worker") {
|
|
975
|
+
const bridge = await requireWorkerBridge(ctx);
|
|
976
|
+
return bridge.deleteCachedModel(input.repo_id);
|
|
977
|
+
}
|
|
739
978
|
if (isProduction())
|
|
740
979
|
return false;
|
|
741
980
|
try {
|
|
@@ -765,28 +1004,33 @@ export const modelsRouter = router({
|
|
|
765
1004
|
}
|
|
766
1005
|
}),
|
|
767
1006
|
/**
|
|
768
|
-
* HuggingFace
|
|
1007
|
+
* Search the live HuggingFace Hub by free-text and/or pipeline tag.
|
|
1008
|
+
* Unlike `huggingfaceSearch` (which only scans the local cache), this hits
|
|
1009
|
+
* the online Hub so the Model Manager can browse & download any public repo.
|
|
769
1010
|
*/
|
|
770
|
-
|
|
771
|
-
.input(
|
|
1011
|
+
huggingfaceHubSearch: protectedProcedure
|
|
1012
|
+
.input(hfHubSearchInput)
|
|
772
1013
|
.output(modelsListOutput)
|
|
773
1014
|
.query(async ({ input }) => {
|
|
774
|
-
|
|
775
|
-
return await getModelsByHfType(input.model_type);
|
|
776
|
-
}
|
|
777
|
-
catch {
|
|
778
|
-
return [];
|
|
779
|
-
}
|
|
1015
|
+
return await searchHuggingFaceHub(input.query, input.pipeline_tag, input.limit ?? 50);
|
|
780
1016
|
}),
|
|
781
1017
|
/**
|
|
782
|
-
*
|
|
1018
|
+
* HuggingFace models by type.
|
|
783
1019
|
*/
|
|
784
|
-
|
|
1020
|
+
huggingfaceByType: protectedProcedure
|
|
1021
|
+
.input(hfByTypeInput.extend({ scope: modelScope }))
|
|
785
1022
|
.output(modelsListOutput)
|
|
786
|
-
.query(async () => {
|
|
1023
|
+
.query(async ({ ctx, input }) => {
|
|
1024
|
+
if (input.scope === "worker") {
|
|
1025
|
+
const bridge = await requireWorkerBridge(ctx);
|
|
1026
|
+
// SAFETY: the worker sends full `UnifiedModel` JSON, but the bridge
|
|
1027
|
+
// types the reply as `UnifiedModelLike`, which declares neither `type`
|
|
1028
|
+
// nor `path` — the two fields this filter reads.
|
|
1029
|
+
const cached = (await bridge.listCachedModels());
|
|
1030
|
+
return filterModelsByHfType(cached, input.model_type);
|
|
1031
|
+
}
|
|
787
1032
|
try {
|
|
788
|
-
|
|
789
|
-
return cached.map((c) => tjsRefToUnified({ repo_id: c.repo_id }, "tjs.cached", true, c.size_bytes));
|
|
1033
|
+
return await getModelsByHfType(input.model_type);
|
|
790
1034
|
}
|
|
791
1035
|
catch {
|
|
792
1036
|
return [];
|
|
@@ -799,12 +1043,14 @@ export const modelsRouter = router({
|
|
|
799
1043
|
* Transformers.js cache directory. Recommended entries always appear,
|
|
800
1044
|
* marked `downloaded` based on cache presence; off-list cached repos that
|
|
801
1045
|
* happen to be recommended under another type are NOT shown here (they only
|
|
802
|
-
* show up under their own type
|
|
1046
|
+
* show up under their own type).
|
|
803
1047
|
*/
|
|
804
1048
|
transformersJsByType: protectedProcedure
|
|
805
1049
|
.input(tjsByTypeInput)
|
|
806
1050
|
.output(modelsListOutput)
|
|
807
1051
|
.query(async ({ input }) => {
|
|
1052
|
+
if (isProduction())
|
|
1053
|
+
return [];
|
|
808
1054
|
const modelType = input.model_type;
|
|
809
1055
|
const recs = recommendedFor(modelType);
|
|
810
1056
|
const cacheDir = getTransformersJsCacheDir();
|
|
@@ -841,6 +1087,8 @@ export const modelsRouter = router({
|
|
|
841
1087
|
.input(tjsByTypeInput)
|
|
842
1088
|
.output(modelsListOutput)
|
|
843
1089
|
.query(async ({ input }) => {
|
|
1090
|
+
if (isProduction())
|
|
1091
|
+
return [];
|
|
844
1092
|
const modelType = input.model_type;
|
|
845
1093
|
const recs = recommendedFor(modelType);
|
|
846
1094
|
if (recs.length === 0)
|
|
@@ -850,26 +1098,7 @@ export const modelsRouter = router({
|
|
|
850
1098
|
const cacheSizes = new Map(cached.map((c) => [c.repo_id, c.size_bytes]));
|
|
851
1099
|
return recs.map((ref) => tjsRefToUnified(ref, modelType, cacheSizes.has(ref.repo_id), cacheSizes.get(ref.repo_id) ?? null));
|
|
852
1100
|
}),
|
|
853
|
-
|
|
854
|
-
* Check whether a single Transformers.js repo is present in the cache.
|
|
855
|
-
*/
|
|
856
|
-
transformersJsIsCached: protectedProcedure
|
|
857
|
-
.input(z.object({ repo_id: z.string().min(1) }))
|
|
858
|
-
.output(z.boolean())
|
|
859
|
-
.query(async ({ input }) => {
|
|
860
|
-
try {
|
|
861
|
-
return await isRepoCached(getTransformersJsCacheDir(), input.repo_id);
|
|
862
|
-
}
|
|
863
|
-
catch {
|
|
864
|
-
return false;
|
|
865
|
-
}
|
|
866
|
-
}),
|
|
867
|
-
/**
|
|
868
|
-
* Ollama models.
|
|
869
|
-
*/
|
|
870
|
-
ollama: protectedProcedure
|
|
871
|
-
.output(ollamaModelsOutput)
|
|
872
|
-
.query(async ({ ctx }) => safeProviderCall("ollama models", { provider: "ollama", userId: ctx.userId }, async () => {
|
|
1101
|
+
ollama: protectedProcedure.output(ollamaModelsOutput).query(async ({ ctx }) => safeProviderCall("ollama models", { provider: "ollama", userId: ctx.userId }, async () => {
|
|
873
1102
|
const instance = await instantiateProvider("ollama", ctx.userId);
|
|
874
1103
|
if (!instance)
|
|
875
1104
|
return [];
|
|
@@ -877,8 +1106,18 @@ export const modelsRouter = router({
|
|
|
877
1106
|
return models.map(toOllamaModel);
|
|
878
1107
|
}, [])),
|
|
879
1108
|
/**
|
|
880
|
-
*
|
|
1109
|
+
* Delete a model from the local Ollama server. Returns false when Ollama is
|
|
1110
|
+
* not configured or does not have the model.
|
|
881
1111
|
*/
|
|
1112
|
+
ollamaDelete: protectedProcedure
|
|
1113
|
+
.input(z.object({ model: z.string().min(1) }))
|
|
1114
|
+
.output(z.boolean())
|
|
1115
|
+
.mutation(async ({ ctx, input }) => safeProviderCall("ollama delete", { provider: "ollama", userId: ctx.userId }, async () => {
|
|
1116
|
+
const instance = await instantiateProvider("ollama", ctx.userId);
|
|
1117
|
+
if (!(instance instanceof OllamaProvider))
|
|
1118
|
+
return false;
|
|
1119
|
+
return instance.deleteModel(input.model);
|
|
1120
|
+
}, false)),
|
|
882
1121
|
llmByProvider: protectedProcedure
|
|
883
1122
|
.input(providerInput)
|
|
884
1123
|
.output(modelsListOutput)
|
|
@@ -887,14 +1126,47 @@ export const modelsRouter = router({
|
|
|
887
1126
|
if (!instance)
|
|
888
1127
|
return [];
|
|
889
1128
|
const models = await instance.getAvailableLanguageModels();
|
|
890
|
-
const toolFlags = await Promise.all(models.map((m) => instance
|
|
891
|
-
.hasToolSupport(m.id)
|
|
892
|
-
.catch(() => null)));
|
|
1129
|
+
const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
|
|
893
1130
|
return models.map((m, i) => toUnifiedLanguageModel(m, toolFlags[i]));
|
|
894
1131
|
}, [])),
|
|
895
1132
|
/**
|
|
896
|
-
*
|
|
1133
|
+
* Aspect ratios / resolutions / (video) durations a given model supports.
|
|
1134
|
+
* Empty arrays are intentional — the client falls back to the full static
|
|
1135
|
+
* lists when a model declares no constraints.
|
|
897
1136
|
*/
|
|
1137
|
+
mediaOptions: protectedProcedure
|
|
1138
|
+
.input(z.object({
|
|
1139
|
+
provider: z.string().min(1),
|
|
1140
|
+
model: z.string().min(1),
|
|
1141
|
+
task: z.enum(["image", "video"])
|
|
1142
|
+
}))
|
|
1143
|
+
.output(z.object({
|
|
1144
|
+
aspectRatios: z.array(z.string()),
|
|
1145
|
+
resolutions: z.array(z.string()),
|
|
1146
|
+
durations: z.array(z.number()).nullish()
|
|
1147
|
+
}))
|
|
1148
|
+
.query(async ({ ctx, input }) => safeProviderCall("mediaOptions", { provider: input.provider, task: input.task, userId: ctx.userId }, async () => {
|
|
1149
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1150
|
+
if (!instance) {
|
|
1151
|
+
return { aspectRatios: [], resolutions: [], durations: null };
|
|
1152
|
+
}
|
|
1153
|
+
if (input.task === "image") {
|
|
1154
|
+
const models = await instance.getAvailableImageModels();
|
|
1155
|
+
const m = models.find((x) => x.id === input.model);
|
|
1156
|
+
return {
|
|
1157
|
+
aspectRatios: m?.aspectRatios ?? [],
|
|
1158
|
+
resolutions: m?.resolutions ?? [],
|
|
1159
|
+
durations: null
|
|
1160
|
+
};
|
|
1161
|
+
}
|
|
1162
|
+
const models = await instance.getAvailableVideoModels();
|
|
1163
|
+
const m = models.find((x) => x.id === input.model);
|
|
1164
|
+
return {
|
|
1165
|
+
aspectRatios: m?.aspectRatios ?? [],
|
|
1166
|
+
resolutions: m?.resolutions ?? [],
|
|
1167
|
+
durations: m?.durations ?? null
|
|
1168
|
+
};
|
|
1169
|
+
}, { aspectRatios: [], resolutions: [], durations: null })),
|
|
898
1170
|
imageByProvider: protectedProcedure
|
|
899
1171
|
.input(providerInput)
|
|
900
1172
|
.output(modelsListOutput)
|
|
@@ -905,10 +1177,7 @@ export const modelsRouter = router({
|
|
|
905
1177
|
const models = await instance.getAvailableImageModels();
|
|
906
1178
|
return models.map((m) => toUnifiedModel(m, "image_model"));
|
|
907
1179
|
}, [])),
|
|
908
|
-
|
|
909
|
-
* All TTS models across all providers.
|
|
910
|
-
*/
|
|
911
|
-
tts: protectedProcedure.query(async ({ ctx }) => {
|
|
1180
|
+
tts: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
912
1181
|
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
913
1182
|
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("tts (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
914
1183
|
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
@@ -917,25 +1186,66 @@ export const modelsRouter = router({
|
|
|
917
1186
|
const models = await instance.getAvailableTTSModels();
|
|
918
1187
|
return models.map((m) => toUnifiedModel(m, "tts_model"));
|
|
919
1188
|
}, [])));
|
|
920
|
-
return results.flat();
|
|
1189
|
+
return resolveProviderModelExecution(results.flat(), availableIds);
|
|
921
1190
|
}),
|
|
922
|
-
/**
|
|
923
|
-
* TTS models by provider.
|
|
924
|
-
*/
|
|
925
1191
|
ttsByProvider: protectedProcedure
|
|
926
1192
|
.input(providerInput)
|
|
927
1193
|
.output(modelsListOutput)
|
|
928
|
-
.query(async ({ ctx, input }) =>
|
|
1194
|
+
.query(async ({ ctx, input }) => {
|
|
1195
|
+
const models = await safeProviderCall("ttsByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1196
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1197
|
+
if (!instance)
|
|
1198
|
+
return [];
|
|
1199
|
+
const models = await instance.getAvailableTTSModels();
|
|
1200
|
+
return models.map((m) => toUnifiedModel(m, "tts_model"));
|
|
1201
|
+
}, []);
|
|
1202
|
+
return resolveProviderModelExecution(models, [input.provider]);
|
|
1203
|
+
}),
|
|
1204
|
+
music: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
1205
|
+
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
1206
|
+
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("music (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
1207
|
+
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
1208
|
+
if (!instance)
|
|
1209
|
+
return [];
|
|
1210
|
+
const models = await instance.getAvailableMusicModels();
|
|
1211
|
+
return models.map((m) => toUnifiedModel(m, "music_model"));
|
|
1212
|
+
}, [])));
|
|
1213
|
+
return results.flat();
|
|
1214
|
+
}),
|
|
1215
|
+
musicByProvider: protectedProcedure
|
|
1216
|
+
.input(providerInput)
|
|
1217
|
+
.output(modelsListOutput)
|
|
1218
|
+
.query(async ({ ctx, input }) => safeProviderCall("musicByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
929
1219
|
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
930
1220
|
if (!instance)
|
|
931
1221
|
return [];
|
|
932
|
-
const models = await instance.
|
|
933
|
-
return models.map((m) => toUnifiedModel(m, "
|
|
1222
|
+
const models = await instance.getAvailableMusicModels();
|
|
1223
|
+
return models.map((m) => toUnifiedModel(m, "music_model"));
|
|
934
1224
|
}, [])),
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
1225
|
+
audioToAudio: protectedProcedure
|
|
1226
|
+
.output(modelsListOutput)
|
|
1227
|
+
.query(async ({ ctx }) => {
|
|
1228
|
+
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
1229
|
+
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("audioToAudio (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
1230
|
+
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
1231
|
+
if (!instance)
|
|
1232
|
+
return [];
|
|
1233
|
+
const models = await instance.getAvailableAudioToAudioModels();
|
|
1234
|
+
return models.map((m) => toUnifiedModel(m, "audio_to_audio_model"));
|
|
1235
|
+
}, [])));
|
|
1236
|
+
return results.flat();
|
|
1237
|
+
}),
|
|
1238
|
+
audioToAudioByProvider: protectedProcedure
|
|
1239
|
+
.input(providerInput)
|
|
1240
|
+
.output(modelsListOutput)
|
|
1241
|
+
.query(async ({ ctx, input }) => safeProviderCall("audioToAudioByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1242
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1243
|
+
if (!instance)
|
|
1244
|
+
return [];
|
|
1245
|
+
const models = await instance.getAvailableAudioToAudioModels();
|
|
1246
|
+
return models.map((m) => toUnifiedModel(m, "audio_to_audio_model"));
|
|
1247
|
+
}, [])),
|
|
1248
|
+
asr: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
939
1249
|
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
940
1250
|
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("asr (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
941
1251
|
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
@@ -946,9 +1256,6 @@ export const modelsRouter = router({
|
|
|
946
1256
|
}, [])));
|
|
947
1257
|
return results.flat();
|
|
948
1258
|
}),
|
|
949
|
-
/**
|
|
950
|
-
* ASR models by provider.
|
|
951
|
-
*/
|
|
952
1259
|
asrByProvider: protectedProcedure
|
|
953
1260
|
.input(providerInput)
|
|
954
1261
|
.output(modelsListOutput)
|
|
@@ -959,10 +1266,7 @@ export const modelsRouter = router({
|
|
|
959
1266
|
const models = await instance.getAvailableASRModels();
|
|
960
1267
|
return models.map((m) => toUnifiedModel(m, "asr_model"));
|
|
961
1268
|
}, [])),
|
|
962
|
-
|
|
963
|
-
* All video models across all providers.
|
|
964
|
-
*/
|
|
965
|
-
video: protectedProcedure.query(async ({ ctx }) => {
|
|
1269
|
+
video: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
966
1270
|
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
967
1271
|
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("video (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
968
1272
|
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
@@ -973,9 +1277,6 @@ export const modelsRouter = router({
|
|
|
973
1277
|
}, [])));
|
|
974
1278
|
return results.flat();
|
|
975
1279
|
}),
|
|
976
|
-
/**
|
|
977
|
-
* Video models by provider.
|
|
978
|
-
*/
|
|
979
1280
|
videoByProvider: protectedProcedure
|
|
980
1281
|
.input(providerInput)
|
|
981
1282
|
.output(modelsListOutput)
|
|
@@ -986,9 +1287,6 @@ export const modelsRouter = router({
|
|
|
986
1287
|
const models = await instance.getAvailableVideoModels();
|
|
987
1288
|
return models.map((m) => toUnifiedModel(m, "video_model"));
|
|
988
1289
|
}, [])),
|
|
989
|
-
/**
|
|
990
|
-
* Embedding models by provider.
|
|
991
|
-
*/
|
|
992
1290
|
embeddingByProvider: protectedProcedure
|
|
993
1291
|
.input(providerInput)
|
|
994
1292
|
.output(modelsListOutput)
|
|
@@ -999,48 +1297,6 @@ export const modelsRouter = router({
|
|
|
999
1297
|
const models = await instance.getAvailableEmbeddingModels();
|
|
1000
1298
|
return models.map((m) => toUnifiedModel(m, "embedding_model"));
|
|
1001
1299
|
}, [])),
|
|
1002
|
-
/**
|
|
1003
|
-
* Ollama model info (stub).
|
|
1004
|
-
*/
|
|
1005
|
-
ollamaModelInfo: protectedProcedure.output(z.null()).query(() => null),
|
|
1006
|
-
/**
|
|
1007
|
-
* Check whether specific files exist in the HuggingFace cache.
|
|
1008
|
-
*/
|
|
1009
|
-
huggingfaceTryCacheFiles: protectedProcedure
|
|
1010
|
-
.input(tryCacheFilesInput)
|
|
1011
|
-
.output(tryCacheFilesOutput)
|
|
1012
|
-
.mutation(async ({ input }) => {
|
|
1013
|
-
return Promise.all(input.map(async (entry) => {
|
|
1014
|
-
const repoId = entry.repo_id ?? "";
|
|
1015
|
-
const repoPath = entry.path ?? "";
|
|
1016
|
-
return {
|
|
1017
|
-
repo_id: repoId,
|
|
1018
|
-
path: repoPath,
|
|
1019
|
-
downloaded: repoId.length > 0 && repoPath.length > 0
|
|
1020
|
-
? await repoFileInCache(repoId, repoPath)
|
|
1021
|
-
: false
|
|
1022
|
-
};
|
|
1023
|
-
}));
|
|
1024
|
-
}),
|
|
1025
|
-
/**
|
|
1026
|
-
* Check whether repos have cached files.
|
|
1027
|
-
*/
|
|
1028
|
-
huggingfaceTryCacheRepos: protectedProcedure
|
|
1029
|
-
.input(tryCacheReposInput)
|
|
1030
|
-
.output(tryCacheReposOutput)
|
|
1031
|
-
.mutation(async ({ input }) => {
|
|
1032
|
-
return Promise.all(input.map(async (repoId) => ({
|
|
1033
|
-
repo_id: repoId,
|
|
1034
|
-
downloaded: await hasCachedFiles(repoId)
|
|
1035
|
-
})));
|
|
1036
|
-
}),
|
|
1037
|
-
/**
|
|
1038
|
-
* Detailed check whether specific patterns exist in the HuggingFace cache.
|
|
1039
|
-
*/
|
|
1040
|
-
huggingfaceCheckCache: protectedProcedure
|
|
1041
|
-
.input(hfCacheCheckInput)
|
|
1042
|
-
.output(hfCacheCheckOutput)
|
|
1043
|
-
.mutation(async ({ input }) => checkHfCache(input)),
|
|
1044
1300
|
/**
|
|
1045
1301
|
* Fast batch cache status check for multiple models.
|
|
1046
1302
|
*/
|
|
@@ -1084,24 +1340,6 @@ export const modelsRouter = router({
|
|
|
1084
1340
|
.mutation(() => ({
|
|
1085
1341
|
status: "unavailable",
|
|
1086
1342
|
message: "Streaming Ollama model pulls are not available in the TS standalone server. Use the Ollama API directly or the Python backend."
|
|
1087
|
-
}))
|
|
1088
|
-
/**
|
|
1089
|
-
* Get HuggingFace file info (size, sha256, etc.).
|
|
1090
|
-
*/
|
|
1091
|
-
huggingfaceFileInfo: protectedProcedure
|
|
1092
|
-
.input(hfFileInfoInput)
|
|
1093
|
-
.output(z.array(z.record(z.string(), z.unknown())))
|
|
1094
|
-
.mutation(async ({ input }) => {
|
|
1095
|
-
if (isProduction())
|
|
1096
|
-
return [];
|
|
1097
|
-
try {
|
|
1098
|
-
const token = (await getSecret("HF_TOKEN", "1")) ?? undefined;
|
|
1099
|
-
const infos = await getHuggingfaceFileInfos(input.map((i) => ({ repo_id: i.repo_id, path: i.path })), token);
|
|
1100
|
-
return infos;
|
|
1101
|
-
}
|
|
1102
|
-
catch {
|
|
1103
|
-
return [];
|
|
1104
|
-
}
|
|
1105
|
-
})
|
|
1343
|
+
}))
|
|
1106
1344
|
});
|
|
1107
1345
|
//# sourceMappingURL=models.js.map
|