@nodetool-ai/websocket 0.7.0-rc.23 → 0.8.2
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 +82 -14
- 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/error-traces.d.ts +56 -0
- package/dist/error-traces.d.ts.map +1 -0
- package/dist/error-traces.js +179 -0
- package/dist/error-traces.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/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 +307 -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 +219 -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 +628 -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 +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/interrupted-jobs.d.ts +14 -0
- package/dist/interrupted-jobs.d.ts.map +1 -0
- package/dist/interrupted-jobs.js +28 -0
- package/dist/interrupted-jobs.js.map +1 -0
- 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-instances-service.d.ts +1284 -0
- package/dist/lib/app-instances-service.d.ts.map +1 -0
- package/dist/lib/app-instances-service.js +378 -0
- package/dist/lib/app-instances-service.js.map +1 -0
- package/dist/lib/app-run-cancellation.d.ts +4 -0
- package/dist/lib/app-run-cancellation.d.ts.map +1 -0
- package/dist/lib/app-run-cancellation.js +28 -0
- package/dist/lib/app-run-cancellation.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 +354 -0
- package/dist/lib/applications-service.d.ts.map +1 -0
- package/dist/lib/applications-service.js +507 -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 +49 -1
- package/dist/lib/asset-paths.d.ts.map +1 -1
- package/dist/lib/asset-paths.js +127 -31
- 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 +89 -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 +335 -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 +296 -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 +52 -0
- package/dist/lib/example-apps.d.ts.map +1 -0
- package/dist/lib/example-apps.js +192 -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/http-tracing.d.ts +12 -0
- package/dist/lib/http-tracing.d.ts.map +1 -0
- package/dist/lib/http-tracing.js +81 -0
- package/dist/lib/http-tracing.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 +33 -0
- package/dist/lib/media.d.ts.map +1 -0
- package/dist/lib/media.js +110 -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 +102 -0
- package/dist/lib/public-routes.d.ts.map +1 -0
- package/dist/lib/public-routes.js +168 -0
- package/dist/lib/public-routes.js.map +1 -0
- package/dist/lib/public-workflow-share.d.ts +20 -0
- package/dist/lib/public-workflow-share.d.ts.map +1 -0
- package/dist/lib/public-workflow-share.js +45 -0
- package/dist/lib/public-workflow-share.js.map +1 -0
- package/dist/lib/run-trace-live-delivery.d.ts +25 -0
- package/dist/lib/run-trace-live-delivery.d.ts.map +1 -0
- package/dist/lib/run-trace-live-delivery.js +91 -0
- package/dist/lib/run-trace-live-delivery.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/test-ui-run-routes.d.ts +8 -0
- package/dist/lib/test-ui-run-routes.d.ts.map +1 -0
- package/dist/lib/test-ui-run-routes.js +42 -0
- package/dist/lib/test-ui-run-routes.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 +305 -0
- package/dist/lib/thumbnail.js.map +1 -0
- package/dist/lib/timeline-bundle.d.ts +1821 -0
- package/dist/lib/timeline-bundle.d.ts.map +1 -0
- package/dist/lib/timeline-bundle.js +342 -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 +546 -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 +197 -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 +1147 -0
- package/dist/mcp-agent-tools.js.map +1 -0
- package/dist/mcp-client-config.d.ts +64 -0
- package/dist/mcp-client-config.d.ts.map +1 -0
- package/dist/mcp-client-config.js +353 -0
- package/dist/mcp-client-config.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 +61 -5
- package/dist/models-api.d.ts.map +1 -1
- package/dist/models-api.js +182 -689
- 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 +163 -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 +106 -297
- package/dist/plugins/websocket.js.map +1 -1
- package/dist/python-bridge-gate.d.ts +28 -0
- package/dist/python-bridge-gate.d.ts.map +1 -0
- package/dist/python-bridge-gate.js +36 -0
- package/dist/python-bridge-gate.js.map +1 -0
- 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/app-runs.d.ts +4 -0
- package/dist/routes/app-runs.d.ts.map +1 -0
- package/dist/routes/app-runs.js +173 -0
- package/dist/routes/app-runs.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 +32 -0
- package/dist/routes/js-scripts.d.ts.map +1 -0
- package/dist/routes/js-scripts.js +498 -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 +29 -51
- 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/public-shared-workflows.d.ts +16 -0
- package/dist/routes/public-shared-workflows.d.ts.map +1 -0
- package/dist/routes/public-shared-workflows.js +55 -0
- package/dist/routes/public-shared-workflows.js.map +1 -0
- package/dist/routes/run-spans.d.ts +4 -0
- package/dist/routes/run-spans.d.ts.map +1 -0
- package/dist/routes/run-spans.js +53 -0
- package/dist/routes/run-spans.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 +51 -0
- package/dist/routes/timeline-fonts.d.ts.map +1 -0
- package/dist/routes/timeline-fonts.js +195 -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 +950 -47
- 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 +277 -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 +1091 -206
- package/dist/server.js.map +1 -1
- package/dist/session/app-run-fold.d.ts +7 -0
- package/dist/session/app-run-fold.d.ts.map +1 -0
- package/dist/session/app-run-fold.js +45 -0
- package/dist/session/app-run-fold.js.map +1 -0
- 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 +502 -0
- package/dist/session/chat-prompt.js.map +1 -0
- package/dist/session/chat-turn.d.ts +337 -0
- package/dist/session/chat-turn.d.ts.map +1 -0
- package/dist/session/chat-turn.js +3612 -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 +784 -0
- package/dist/session/commands.js.map +1 -0
- package/dist/session/inference.d.ts +218 -0
- package/dist/session/inference.d.ts.map +1 -0
- package/dist/session/inference.js +1143 -0
- package/dist/session/inference.js.map +1 -0
- package/dist/session/job-execution.d.ts +484 -0
- package/dist/session/job-execution.d.ts.map +1 -0
- package/dist/session/job-execution.js +2379 -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 +28 -0
- package/dist/session/model-interfaces.d.ts.map +1 -0
- package/dist/session/model-interfaces.js +133 -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 +14 -0
- package/dist/storage-retention.d.ts.map +1 -0
- package/dist/storage-retention.js +95 -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 +207 -42
- package/dist/test-ui-server.js.map +1 -1
- package/dist/timeline-generation-recovery.d.ts +4 -0
- package/dist/timeline-generation-recovery.d.ts.map +1 -0
- package/dist/timeline-generation-recovery.js +72 -0
- package/dist/timeline-generation-recovery.js.map +1 -0
- 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 +24 -0
- package/dist/trpc/error-logging.d.ts.map +1 -0
- package/dist/trpc/error-logging.js +48 -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 +100 -2540
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +58 -6
- 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/app-instances.d.ts +2269 -0
- package/dist/trpc/routers/app-instances.d.ts.map +1 -0
- package/dist/trpc/routers/app-instances.js +52 -0
- package/dist/trpc/routers/app-instances.js.map +1 -0
- package/dist/trpc/routers/app-runs.d.ts +1092 -0
- package/dist/trpc/routers/app-runs.d.ts.map +1 -0
- package/dist/trpc/routers/app-runs.js +28 -0
- package/dist/trpc/routers/app-runs.js.map +1 -0
- package/dist/trpc/routers/applications.d.ts +2212 -0
- package/dist/trpc/routers/applications.d.ts.map +1 -0
- package/dist/trpc/routers/applications.js +221 -0
- package/dist/trpc/routers/applications.js.map +1 -0
- package/dist/trpc/routers/assets.d.ts +194 -42
- package/dist/trpc/routers/assets.d.ts.map +1 -1
- package/dist/trpc/routers/assets.js +503 -105
- package/dist/trpc/routers/assets.js.map +1 -1
- package/dist/trpc/routers/bug-reports.d.ts +33 -0
- package/dist/trpc/routers/bug-reports.d.ts.map +1 -0
- package/dist/trpc/routers/bug-reports.js +69 -0
- package/dist/trpc/routers/bug-reports.js.map +1 -0
- 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 +29 -0
- package/dist/trpc/routers/documents.js.map +1 -0
- package/dist/trpc/routers/error-traces.d.ts +132 -0
- package/dist/trpc/routers/error-traces.d.ts.map +1 -0
- package/dist/trpc/routers/error-traces.js +118 -0
- package/dist/trpc/routers/error-traces.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/gameDraftHistory.d.ts +8 -0
- package/dist/trpc/routers/gameDraftHistory.d.ts.map +1 -0
- package/dist/trpc/routers/gameDraftHistory.js +40 -0
- package/dist/trpc/routers/gameDraftHistory.js.map +1 -0
- package/dist/trpc/routers/games.d.ts +26502 -0
- package/dist/trpc/routers/games.d.ts.map +1 -0
- package/dist/trpc/routers/games.js +674 -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 +117 -21
- package/dist/trpc/routers/jobs.d.ts.map +1 -1
- package/dist/trpc/routers/jobs.js +191 -30
- 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 +4 -2
- package/dist/trpc/routers/mcp-config.d.ts.map +1 -1
- package/dist/trpc/routers/mcp-config.js +46 -206
- 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 +1544 -249
- package/dist/trpc/routers/models.d.ts.map +1 -1
- package/dist/trpc/routers/models.js +624 -318
- 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/runs.d.ts +472 -0
- package/dist/trpc/routers/runs.d.ts.map +1 -0
- package/dist/trpc/routers/runs.js +40 -0
- package/dist/trpc/routers/runs.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 +180 -10
- package/dist/trpc/routers/settings.d.ts.map +1 -1
- package/dist/trpc/routers/settings.js +125 -33
- package/dist/trpc/routers/settings.js.map +1 -1
- package/dist/trpc/routers/sketch.d.ts +868 -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 +6639 -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 +9085 -0
- package/dist/trpc/routers/timeline.d.ts.map +1 -0
- package/dist/trpc/routers/timeline.js +669 -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 +243 -0
- package/dist/trpc/routers/worker.d.ts.map +1 -0
- package/dist/trpc/routers/worker.js +221 -0
- package/dist/trpc/routers/worker.js.map +1 -0
- package/dist/trpc/routers/workflows.d.ts +428 -187
- package/dist/trpc/routers/workflows.d.ts.map +1 -1
- package/dist/trpc/routers/workflows.js +347 -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 +1139 -0
- package/dist/trpc/sandbox-coverage.js.map +1 -0
- package/dist/websocket-client-session.d.ts +322 -0
- package/dist/websocket-client-session.d.ts.map +1 -0
- package/dist/websocket-client-session.js +1267 -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 +97 -36
- 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,48 @@
|
|
|
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 {
|
|
5
|
+
import { discoverASRModels, discoverVadModels } from "@nodetool-ai/whisper-cpp";
|
|
6
|
+
import { getProvider, getRegisteredProvider, isProviderConfigured, listRegisteredProviderIds, RECOMMENDED_MODELS, OLLAMA_DEFAULT_URL, OllamaProvider, LMSTUDIO_DEFAULT_URL } from "@nodetool-ai/runtime";
|
|
7
|
+
import { getSecret as getStoredSecret } from "@nodetool-ai/models";
|
|
8
|
+
import { syncCustomProviderRegistry } from "../../custom-providers.js";
|
|
9
|
+
function secretResolverFor(userId) {
|
|
10
|
+
return (key) => getStoredSecret(key, userId).then((v) => v ?? undefined);
|
|
11
|
+
}
|
|
5
12
|
const log = createLogger("nodetool.websocket.trpc.models");
|
|
6
|
-
import { readCachedHfModels, searchCachedHfModels, getModelsByHfType,
|
|
7
|
-
import { getTransformersJsCacheDir,
|
|
13
|
+
import { readCachedHfModels, searchCachedHfModels, getModelsByHfType, filterModelsByHfType, deleteCachedHfModel } from "@nodetool-ai/huggingface";
|
|
14
|
+
import { getTransformersJsCacheDir, recommendedFor, scanTransformersJsCache, TJS_MODEL_TYPES } from "@nodetool-ai/transformers-js-nodes";
|
|
8
15
|
import { MODEL_SEARCH_KINDS } from "@nodetool-ai/protocol";
|
|
16
|
+
import { rankedModelKeys } from "../../models-api.js";
|
|
9
17
|
import { access, readdir } from "node:fs/promises";
|
|
10
18
|
import { constants as fsConstants } from "node:fs";
|
|
11
19
|
import { homedir } from "node:os";
|
|
12
|
-
import { basename, join } from "node:path";
|
|
20
|
+
import { basename, join, resolve, sep } from "node:path";
|
|
13
21
|
import { z } from "zod";
|
|
14
|
-
import {
|
|
22
|
+
import { isString } from "../../lib/wire-values.js";
|
|
23
|
+
import { readyProviderExecution, resolveModelExecutionAvailability } from "../../model-execution-availability.js";
|
|
24
|
+
const modelArtifactRefSchema = z.object({
|
|
25
|
+
source: z.literal("huggingface"),
|
|
26
|
+
repo_id: z.string(),
|
|
27
|
+
revision: z.string().nullish(),
|
|
28
|
+
path: z.string().nullish(),
|
|
29
|
+
allow_patterns: z.array(z.string()).nullish(),
|
|
30
|
+
model_type: z.string().nullish()
|
|
31
|
+
});
|
|
32
|
+
const modelAdapterInfoSchema = z.object({
|
|
33
|
+
state: z.enum(["installed", "missing_dependency", "unknown"]),
|
|
34
|
+
reason_code: z.string().nullish(),
|
|
35
|
+
reason: z.string().nullish(),
|
|
36
|
+
artifact_ref: modelArtifactRefSchema.nullish()
|
|
37
|
+
});
|
|
38
|
+
const modelExecutionAvailabilitySchema = z.object({
|
|
39
|
+
kind: z.enum(["local", "server", "api", "unavailable"]),
|
|
40
|
+
state: z.enum(["ready", "download_required", "unavailable"]),
|
|
41
|
+
label: z.enum(["Local", "Server", "API", "Unavailable"]),
|
|
42
|
+
reason: z.string().nullish(),
|
|
43
|
+
execution_site: z.enum(["nodetool_host", "provider"]).nullish(),
|
|
44
|
+
runtime_name: z.string().nullish()
|
|
45
|
+
});
|
|
15
46
|
// ── Local schemas (mirrored in packages/protocol/src/api-schemas/models.ts) ──
|
|
16
47
|
// Mirrors UnifiedModel in @nodetool-ai/protocol. Any field omitted here is
|
|
17
48
|
// stripped by the tRPC output validator — which is exactly how the `provider`
|
|
@@ -43,33 +74,27 @@ const unifiedModelSchema = z.object({
|
|
|
43
74
|
trending_score: z.number().nullish(),
|
|
44
75
|
image: z.string().nullish(),
|
|
45
76
|
supports_tools: z.boolean().nullish(),
|
|
46
|
-
voices: z.array(z.string()).nullish()
|
|
77
|
+
voices: z.array(z.string()).nullish(),
|
|
78
|
+
capabilities: z.array(z.string()).nullish(),
|
|
79
|
+
languages: z.array(z.string()).nullish(),
|
|
80
|
+
sample_rate: z.number().nullish(),
|
|
81
|
+
requires_reference_text: z.boolean().nullish(),
|
|
82
|
+
adapter: modelAdapterInfoSchema.nullish(),
|
|
83
|
+
execution: modelExecutionAvailabilitySchema.nullish(),
|
|
84
|
+
durations: z.array(z.number()).nullish(),
|
|
85
|
+
resolutions: z.array(z.string()).nullish(),
|
|
86
|
+
aspect_ratios: z.array(z.string()).nullish()
|
|
47
87
|
});
|
|
48
88
|
const modelsListOutput = z.array(unifiedModelSchema);
|
|
49
89
|
const providersOutput = z.array(z.object({
|
|
50
90
|
provider: z.string(),
|
|
51
|
-
capabilities: z.array(z.string())
|
|
91
|
+
capabilities: z.array(z.string()),
|
|
92
|
+
access: z.enum(["in_process", "local_service", "remote_api"]).optional(),
|
|
93
|
+
display_name: z.string().optional()
|
|
52
94
|
}));
|
|
53
95
|
const recommendedInput = z.object({
|
|
54
96
|
check_servers: z.boolean().optional().default(false)
|
|
55
97
|
});
|
|
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
98
|
const hfFastCacheStatusItem = z.object({
|
|
74
99
|
key: z.string(),
|
|
75
100
|
repo_id: z.string(),
|
|
@@ -89,28 +114,18 @@ const hfFastCacheStatusOutput = z.array(z.object({
|
|
|
89
114
|
key: z.string(),
|
|
90
115
|
downloaded: z.boolean()
|
|
91
116
|
}));
|
|
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
117
|
const hfSearchInput = z.object({
|
|
111
118
|
query: z.string().optional(),
|
|
112
119
|
type: z.string().optional()
|
|
113
120
|
});
|
|
121
|
+
const hfHubSearchInput = z.object({
|
|
122
|
+
/** Free-text search passed to the Hub's `search` param. */
|
|
123
|
+
query: z.string().optional(),
|
|
124
|
+
/** HF pipeline tag filter, e.g. "audio-text-to-text". */
|
|
125
|
+
pipeline_tag: z.string().optional(),
|
|
126
|
+
/** Max results (Hub caps high; we keep it modest for the UI). */
|
|
127
|
+
limit: z.number().int().min(1).max(100).optional()
|
|
128
|
+
});
|
|
114
129
|
const hfByTypeInput = z.object({
|
|
115
130
|
model_type: z.string().min(1)
|
|
116
131
|
});
|
|
@@ -120,6 +135,33 @@ const tjsByTypeInput = z.object({
|
|
|
120
135
|
const hfDeleteInput = z.object({
|
|
121
136
|
repo_id: z.string().min(1)
|
|
122
137
|
});
|
|
138
|
+
/** Where a model route operates: the local cache (default) or an attached worker. */
|
|
139
|
+
const modelScope = z.enum(["local", "worker"]).default("local");
|
|
140
|
+
/**
|
|
141
|
+
* Resolve the worker bridge for a `scope: "worker"` request. Requires an
|
|
142
|
+
* attached worker whose image speaks the `models.*` bridge protocol; throws a
|
|
143
|
+
* CONFLICT otherwise so the UI can surface a clear reason.
|
|
144
|
+
*/
|
|
145
|
+
async function requireWorkerBridge(ctx) {
|
|
146
|
+
if (!ctx.workerManager) {
|
|
147
|
+
// Server wiring problem, not a runtime state the client can act on.
|
|
148
|
+
throw new TRPCError({
|
|
149
|
+
code: "INTERNAL_SERVER_ERROR",
|
|
150
|
+
message: "Worker support is not configured on this server"
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
const active = await ctx.workerManager.getActiveWorker();
|
|
154
|
+
if (!active) {
|
|
155
|
+
throw new TRPCError({ code: "CONFLICT", message: "No worker attached" });
|
|
156
|
+
}
|
|
157
|
+
if (!ctx.pythonBridge.supportsModelManagement()) {
|
|
158
|
+
throw new TRPCError({
|
|
159
|
+
code: "CONFLICT",
|
|
160
|
+
message: "This worker's image is too old for model management. Upgrade the worker image."
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return ctx.pythonBridge;
|
|
164
|
+
}
|
|
123
165
|
const ollamaModelSchema = z.object({
|
|
124
166
|
type: z.string(),
|
|
125
167
|
name: z.string(),
|
|
@@ -150,7 +192,7 @@ function dedupeModels(models) {
|
|
|
150
192
|
const seen = new Set();
|
|
151
193
|
const deduped = [];
|
|
152
194
|
for (const model of models) {
|
|
153
|
-
const key = `${model.repo_id ?? ""}::${model.path ?? ""}`;
|
|
195
|
+
const key = `${model.provider ?? ""}::${model.repo_id ?? model.id ?? ""}::${model.path ?? ""}`;
|
|
154
196
|
if (!seen.has(key)) {
|
|
155
197
|
seen.add(key);
|
|
156
198
|
deduped.push(model);
|
|
@@ -161,18 +203,43 @@ function dedupeModels(models) {
|
|
|
161
203
|
function normalizePatterns(patterns) {
|
|
162
204
|
if (patterns == null)
|
|
163
205
|
return null;
|
|
164
|
-
if (
|
|
206
|
+
if (isString(patterns))
|
|
165
207
|
return patterns ? [patterns] : null;
|
|
166
208
|
const cleaned = patterns.filter((p) => Boolean(p));
|
|
167
209
|
return cleaned.length > 0 ? cleaned : null;
|
|
168
210
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
function matchesPattern(value, pattern) {
|
|
175
|
-
|
|
211
|
+
// Linear (two-pointer) glob matcher. `*` matches any run of characters, `?`
|
|
212
|
+
// matches a single character; all other characters are literal. This avoids
|
|
213
|
+
// the catastrophic backtracking of a naive `*` -> `.*` regex compiled from
|
|
214
|
+
// client-supplied patterns (ReDoS), while matching the same glob semantics.
|
|
215
|
+
// Exported for regression tests.
|
|
216
|
+
export function matchesPattern(value, pattern) {
|
|
217
|
+
let v = 0;
|
|
218
|
+
let p = 0;
|
|
219
|
+
let starIdx = -1;
|
|
220
|
+
let matchIdx = 0;
|
|
221
|
+
while (v < value.length) {
|
|
222
|
+
if (p < pattern.length && (pattern[p] === "?" || pattern[p] === value[v])) {
|
|
223
|
+
v++;
|
|
224
|
+
p++;
|
|
225
|
+
}
|
|
226
|
+
else if (p < pattern.length && pattern[p] === "*") {
|
|
227
|
+
starIdx = p;
|
|
228
|
+
matchIdx = v;
|
|
229
|
+
p++;
|
|
230
|
+
}
|
|
231
|
+
else if (starIdx !== -1) {
|
|
232
|
+
p = starIdx + 1;
|
|
233
|
+
matchIdx++;
|
|
234
|
+
v = matchIdx;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
while (p < pattern.length && pattern[p] === "*")
|
|
241
|
+
p++;
|
|
242
|
+
return p === pattern.length;
|
|
176
243
|
}
|
|
177
244
|
function isIgnored(path, ignorePatterns) {
|
|
178
245
|
if (!ignorePatterns || ignorePatterns.length === 0)
|
|
@@ -205,6 +272,19 @@ async function pathExists(path) {
|
|
|
205
272
|
return false;
|
|
206
273
|
}
|
|
207
274
|
}
|
|
275
|
+
// Joins a client-supplied relative path under `baseDir` and rejects any result
|
|
276
|
+
// that escapes the base directory (via `..` segments or an absolute path).
|
|
277
|
+
// Returns null when the path would escape — callers treat that as "not found"
|
|
278
|
+
// so a traversal attempt can't be used as a filesystem existence oracle.
|
|
279
|
+
// Exported for regression tests.
|
|
280
|
+
export function safeJoinWithin(baseDir, relativePath) {
|
|
281
|
+
const resolvedBase = resolve(baseDir);
|
|
282
|
+
const full = resolve(resolvedBase, relativePath);
|
|
283
|
+
if (full !== resolvedBase && !full.startsWith(resolvedBase + sep)) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
return full;
|
|
287
|
+
}
|
|
208
288
|
async function listSnapshotDirs(repoId) {
|
|
209
289
|
const snapshotsRoot = join(getHfCacheRoot(), repoToCacheDir(repoId), "snapshots");
|
|
210
290
|
if (!(await pathExists(snapshotsRoot)))
|
|
@@ -216,12 +296,11 @@ async function listSnapshotDirs(repoId) {
|
|
|
216
296
|
}
|
|
217
297
|
async function repoFileInCache(repoId, relativePath) {
|
|
218
298
|
const snapshotDirs = await listSnapshotDirs(repoId);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return false;
|
|
299
|
+
const checks = await Promise.all(snapshotDirs.map((snapshotDir) => {
|
|
300
|
+
const full = safeJoinWithin(snapshotDir, relativePath);
|
|
301
|
+
return full ? pathExists(full) : Promise.resolve(false);
|
|
302
|
+
}));
|
|
303
|
+
return checks.some((exists) => exists);
|
|
225
304
|
}
|
|
226
305
|
async function listRepoCachedFiles(repoId) {
|
|
227
306
|
const snapshotDirs = await listSnapshotDirs(repoId);
|
|
@@ -245,9 +324,6 @@ async function listRepoCachedFiles(repoId) {
|
|
|
245
324
|
}
|
|
246
325
|
return [...collected];
|
|
247
326
|
}
|
|
248
|
-
async function hasCachedFiles(repoId) {
|
|
249
|
-
return (await listRepoCachedFiles(repoId)).length > 0;
|
|
250
|
-
}
|
|
251
327
|
async function isLlamaCppModelCached(repoId, filePath) {
|
|
252
328
|
if (await repoFileInCache(repoId, filePath)) {
|
|
253
329
|
return true;
|
|
@@ -261,30 +337,35 @@ async function isLlamaCppModelCached(repoId, filePath) {
|
|
|
261
337
|
for (const snapshot of snapshots) {
|
|
262
338
|
if (!snapshot.isDirectory())
|
|
263
339
|
continue;
|
|
264
|
-
|
|
340
|
+
const snapshotDir = join(repoDir, snapshot.name);
|
|
341
|
+
const full = safeJoinWithin(snapshotDir, filePath);
|
|
342
|
+
if (full && (await pathExists(full))) {
|
|
265
343
|
return true;
|
|
266
344
|
}
|
|
267
|
-
|
|
345
|
+
// basename() strips any traversal segments, so this join stays contained.
|
|
346
|
+
if (await pathExists(join(snapshotDir, basename(filePath)))) {
|
|
268
347
|
return true;
|
|
269
348
|
}
|
|
270
349
|
}
|
|
271
350
|
return false;
|
|
272
351
|
}
|
|
273
|
-
async function getAvailableProviderIds(userId) {
|
|
352
|
+
export async function getAvailableProviderIds(userId) {
|
|
274
353
|
const ids = listRegisteredProviderIds();
|
|
354
|
+
const getSecret = secretResolverFor(userId);
|
|
275
355
|
const checks = await Promise.all(ids.map(async (id) => ({
|
|
276
356
|
id,
|
|
277
|
-
available: await isProviderConfigured(id,
|
|
357
|
+
available: await isProviderConfigured(id, getSecret)
|
|
278
358
|
})));
|
|
279
359
|
return checks.filter((c) => c.available).map((c) => c.id);
|
|
280
360
|
}
|
|
281
361
|
async function instantiateProvider(provider, userId) {
|
|
282
|
-
|
|
362
|
+
const getSecret = secretResolverFor(userId);
|
|
363
|
+
if (!(await isProviderConfigured(provider, getSecret))) {
|
|
283
364
|
log.debug("Provider not configured", { provider, userId });
|
|
284
365
|
return null;
|
|
285
366
|
}
|
|
286
367
|
try {
|
|
287
|
-
return await getProvider(provider,
|
|
368
|
+
return await getProvider(provider, getSecret);
|
|
288
369
|
}
|
|
289
370
|
catch (error) {
|
|
290
371
|
log.warn("Provider instantiation failed", {
|
|
@@ -356,20 +437,35 @@ async function isServerReachable(url) {
|
|
|
356
437
|
clearTimeout(timer);
|
|
357
438
|
}
|
|
358
439
|
}
|
|
359
|
-
async function getServerAvailability() {
|
|
360
|
-
if (isProduction())
|
|
361
|
-
return { ollama: false, llama_cpp: false };
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
440
|
+
async function getServerAvailability(userId) {
|
|
441
|
+
if (isProduction()) {
|
|
442
|
+
return { ollama: false, llama_cpp: false, lmstudio: false, vllm: false };
|
|
443
|
+
}
|
|
444
|
+
// Resolve URLs the same way getProvider() does: secret store → env →
|
|
445
|
+
// default. Otherwise a user-set URL in Settings → API Keys wouldn't filter
|
|
446
|
+
// the recommended-models list correctly.
|
|
447
|
+
const getSecret = secretResolverFor(userId);
|
|
448
|
+
const resolve = async (key, fallback) => {
|
|
449
|
+
const fromStore = await getSecret(key);
|
|
450
|
+
return (fromStore || process.env[key] || fallback).replace(/\/+$/, "");
|
|
451
|
+
};
|
|
452
|
+
const [ollamaUrl, llamaUrl, lmstudioUrl, vllmUrl] = await Promise.all([
|
|
453
|
+
resolve("OLLAMA_API_URL", OLLAMA_DEFAULT_URL),
|
|
454
|
+
resolve("LLAMA_CPP_URL", ""),
|
|
455
|
+
resolve("LMSTUDIO_API_URL", LMSTUDIO_DEFAULT_URL),
|
|
456
|
+
resolve("VLLM_BASE_URL", "")
|
|
457
|
+
]);
|
|
458
|
+
const [ollama, llama, lmstudio, vllm] = await Promise.all([
|
|
365
459
|
isServerReachable(`${ollamaUrl}/api/tags`),
|
|
366
460
|
llamaUrl
|
|
367
461
|
? isServerReachable(`${llamaUrl}/v1/models`)
|
|
368
|
-
: Promise.resolve(false)
|
|
462
|
+
: Promise.resolve(false),
|
|
463
|
+
isServerReachable(`${lmstudioUrl}/v1/models`),
|
|
464
|
+
vllmUrl ? isServerReachable(`${vllmUrl}/v1/models`) : Promise.resolve(false)
|
|
369
465
|
]);
|
|
370
|
-
return { ollama, llama_cpp: llama };
|
|
466
|
+
return { ollama, llama_cpp: llama, lmstudio, vllm };
|
|
371
467
|
}
|
|
372
|
-
async function serverAllowsModel(model, servers) {
|
|
468
|
+
async function serverAllowsModel(model, servers, userId) {
|
|
373
469
|
if (model.provider === "ollama")
|
|
374
470
|
return servers.ollama ?? false;
|
|
375
471
|
if (model.provider === "llama_cpp")
|
|
@@ -379,22 +475,98 @@ async function serverAllowsModel(model, servers) {
|
|
|
379
475
|
if (model.provider === "vllm")
|
|
380
476
|
return servers.vllm ?? false;
|
|
381
477
|
if (model.provider)
|
|
382
|
-
return await isProviderConfigured(model.provider);
|
|
478
|
+
return await isProviderConfigured(model.provider, secretResolverFor(userId));
|
|
383
479
|
return true;
|
|
384
480
|
}
|
|
385
|
-
async function
|
|
386
|
-
const
|
|
481
|
+
async function withWhisperDownloadStatus(models, userId) {
|
|
482
|
+
const modelsDir = await secretResolverFor(userId)("WHISPER_CPP_MODELS_DIR");
|
|
483
|
+
const whisperFiles = new Map((await Promise.all([
|
|
484
|
+
discoverASRModels(modelsDir),
|
|
485
|
+
discoverVadModels(modelsDir)
|
|
486
|
+
]))
|
|
487
|
+
.flat()
|
|
488
|
+
.map((model) => [model.id.split(/[\\/]/).at(-1), model.id]));
|
|
489
|
+
return Promise.all(models.map(async (model) => model.provider === "whisper_cpp" && model.repo_id && model.path
|
|
490
|
+
? {
|
|
491
|
+
...model,
|
|
492
|
+
id: whisperFiles.get(model.path) ?? model.id,
|
|
493
|
+
downloaded: whisperFiles.has(model.path) ||
|
|
494
|
+
(await repoFileInCache(model.repo_id, model.path))
|
|
495
|
+
}
|
|
496
|
+
: model));
|
|
497
|
+
}
|
|
498
|
+
async function getRecommendedModels(checkServers, userId) {
|
|
499
|
+
const models = await withWhisperDownloadStatus([...RECOMMENDED_MODELS], userId);
|
|
387
500
|
if (!checkServers)
|
|
388
501
|
return models;
|
|
389
|
-
const servers = await getServerAvailability();
|
|
502
|
+
const servers = await getServerAvailability(userId);
|
|
390
503
|
const filtered = [];
|
|
391
504
|
for (const model of models) {
|
|
392
|
-
if (await serverAllowsModel(model, servers)) {
|
|
505
|
+
if (await serverAllowsModel(model, servers, userId)) {
|
|
393
506
|
filtered.push(model);
|
|
394
507
|
}
|
|
395
508
|
}
|
|
396
509
|
return filtered;
|
|
397
510
|
}
|
|
511
|
+
/** Map a HF Hub API model record onto our UnifiedModel shape. */
|
|
512
|
+
function hubModelToUnified(m, fallbackTag) {
|
|
513
|
+
const repoId = m.id ?? m.modelId;
|
|
514
|
+
if (!repoId)
|
|
515
|
+
return null;
|
|
516
|
+
const tag = m.pipeline_tag ?? fallbackTag ?? undefined;
|
|
517
|
+
// Hub pipeline tags are dash-cased ("audio-text-to-text"); our model types
|
|
518
|
+
// are the same task underscore-cased and prefixed "hf.".
|
|
519
|
+
const type = tag ? `hf.${tag.replace(/-/g, "_")}` : "hf.model";
|
|
520
|
+
return {
|
|
521
|
+
id: repoId,
|
|
522
|
+
type,
|
|
523
|
+
name: repoId,
|
|
524
|
+
repo_id: repoId,
|
|
525
|
+
provider: "huggingface",
|
|
526
|
+
downloaded: false,
|
|
527
|
+
pipeline_tag: m.pipeline_tag ?? null,
|
|
528
|
+
tags: m.tags ?? null,
|
|
529
|
+
downloads: m.downloads ?? null,
|
|
530
|
+
likes: m.likes ?? null,
|
|
531
|
+
trending_score: m.trendingScore ?? null
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Search the live HuggingFace Hub (https://huggingface.co/api/models) by
|
|
536
|
+
* free-text and/or pipeline tag. Returns downloadable repos sorted by
|
|
537
|
+
* popularity. Network/HTTP failures degrade to an empty list.
|
|
538
|
+
*/
|
|
539
|
+
async function searchHuggingFaceHub(query, pipelineTag, limit) {
|
|
540
|
+
if (!query && !pipelineTag)
|
|
541
|
+
return [];
|
|
542
|
+
const params = new URLSearchParams();
|
|
543
|
+
if (query)
|
|
544
|
+
params.set("search", query);
|
|
545
|
+
if (pipelineTag)
|
|
546
|
+
params.set("pipeline_tag", pipelineTag);
|
|
547
|
+
params.set("limit", String(limit));
|
|
548
|
+
params.set("sort", "downloads");
|
|
549
|
+
params.set("direction", "-1");
|
|
550
|
+
const headers = { Accept: "application/json" };
|
|
551
|
+
const token = process.env.HF_TOKEN || process.env.HUGGING_FACE_HUB_TOKEN;
|
|
552
|
+
if (token)
|
|
553
|
+
headers.Authorization = `Bearer ${token}`;
|
|
554
|
+
try {
|
|
555
|
+
const res = await fetch(`https://huggingface.co/api/models?${params.toString()}`, { headers });
|
|
556
|
+
if (!res.ok) {
|
|
557
|
+
log.warn("HF Hub search failed: %d %s", res.status, res.statusText);
|
|
558
|
+
return [];
|
|
559
|
+
}
|
|
560
|
+
const data = (await res.json());
|
|
561
|
+
return data
|
|
562
|
+
.map((m) => hubModelToUnified(m, pipelineTag))
|
|
563
|
+
.filter((m) => m !== null);
|
|
564
|
+
}
|
|
565
|
+
catch (err) {
|
|
566
|
+
log.warn("HF Hub search error: %s", err.message);
|
|
567
|
+
return [];
|
|
568
|
+
}
|
|
569
|
+
}
|
|
398
570
|
function selectRecommended(modality, task) {
|
|
399
571
|
return RECOMMENDED_MODELS.filter((model) => model.modality === modality && (!task || model.task === task));
|
|
400
572
|
}
|
|
@@ -426,29 +598,65 @@ function tjsCachedAsRecommended(repoId) {
|
|
|
426
598
|
return out;
|
|
427
599
|
}
|
|
428
600
|
function toUnifiedLanguageModel(model, supportsTools) {
|
|
601
|
+
const registration = getRegisteredProvider(model.provider);
|
|
429
602
|
return {
|
|
430
603
|
id: model.id,
|
|
431
604
|
type: "language_model",
|
|
432
605
|
name: model.name,
|
|
433
606
|
provider: model.provider,
|
|
434
607
|
repo_id: null,
|
|
435
|
-
path:
|
|
608
|
+
path: null,
|
|
436
609
|
downloaded: model.provider === "ollama" || model.provider === "llama_cpp",
|
|
437
610
|
tags: [model.provider],
|
|
438
|
-
supports_tools: supportsTools ?? null
|
|
611
|
+
supports_tools: supportsTools ?? null,
|
|
612
|
+
execution: registration
|
|
613
|
+
? readyProviderExecution(registration.metadata)
|
|
614
|
+
: null
|
|
439
615
|
};
|
|
440
616
|
}
|
|
441
617
|
function toUnifiedModel(model, type) {
|
|
618
|
+
const registration = getRegisteredProvider(model.provider);
|
|
442
619
|
return {
|
|
443
620
|
id: model.id,
|
|
444
621
|
type,
|
|
445
622
|
name: model.name,
|
|
446
623
|
provider: model.provider,
|
|
447
624
|
repo_id: null,
|
|
448
|
-
path:
|
|
449
|
-
downloaded: model.provider === "ollama" ||
|
|
625
|
+
path: null,
|
|
626
|
+
downloaded: model.provider === "ollama" ||
|
|
627
|
+
model.provider === "llama_cpp" ||
|
|
628
|
+
model.provider === "whisper_cpp" ||
|
|
629
|
+
model.provider === "whisper_cpp_server",
|
|
450
630
|
tags: [model.provider],
|
|
451
|
-
voices: model.voices ?? null
|
|
631
|
+
voices: model.voices ?? null,
|
|
632
|
+
capabilities: model.capabilities ?? null,
|
|
633
|
+
languages: model.languages ?? null,
|
|
634
|
+
sample_rate: model.sampleRate ?? null,
|
|
635
|
+
requires_reference_text: model.requiresReferenceText ?? null,
|
|
636
|
+
adapter: model.adapter
|
|
637
|
+
? {
|
|
638
|
+
state: model.adapter.state,
|
|
639
|
+
reason_code: model.adapter.reasonCode ?? null,
|
|
640
|
+
reason: model.adapter.reason ?? null,
|
|
641
|
+
artifact_ref: model.adapter.artifactRef
|
|
642
|
+
? {
|
|
643
|
+
source: model.adapter.artifactRef.source,
|
|
644
|
+
repo_id: model.adapter.artifactRef.repoId,
|
|
645
|
+
revision: model.adapter.artifactRef.revision ?? null,
|
|
646
|
+
path: model.adapter.artifactRef.path ?? null,
|
|
647
|
+
allow_patterns: model.adapter.artifactRef.allowPatterns ?? null,
|
|
648
|
+
model_type: model.adapter.artifactRef.modelType ?? null
|
|
649
|
+
}
|
|
650
|
+
: null
|
|
651
|
+
}
|
|
652
|
+
: null,
|
|
653
|
+
supported_tasks: model.supportedTasks ?? null,
|
|
654
|
+
durations: model.durations ?? null,
|
|
655
|
+
resolutions: model.resolutions ?? null,
|
|
656
|
+
aspect_ratios: model.aspectRatios ?? null,
|
|
657
|
+
execution: registration
|
|
658
|
+
? readyProviderExecution(registration.metadata)
|
|
659
|
+
: null
|
|
452
660
|
};
|
|
453
661
|
}
|
|
454
662
|
function toOllamaModel(model) {
|
|
@@ -462,27 +670,66 @@ function toOllamaModel(model) {
|
|
|
462
670
|
details: {}
|
|
463
671
|
};
|
|
464
672
|
}
|
|
465
|
-
|
|
673
|
+
function providerExecutionMap(configuredProviderIds) {
|
|
674
|
+
const configured = new Set(configuredProviderIds);
|
|
675
|
+
const providers = new Map();
|
|
676
|
+
for (const providerId of listRegisteredProviderIds()) {
|
|
677
|
+
const metadata = getRegisteredProvider(providerId)?.metadata;
|
|
678
|
+
if (!metadata)
|
|
679
|
+
continue;
|
|
680
|
+
providers.set(providerId, {
|
|
681
|
+
...metadata,
|
|
682
|
+
configured: configured.has(providerId)
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
return providers;
|
|
686
|
+
}
|
|
687
|
+
async function resolveProviderModelExecution(models, configuredProviderIds) {
|
|
688
|
+
if (!models.some((model) => model.adapter)) {
|
|
689
|
+
return resolveModelExecutionAvailability(models, providerExecutionMap(configuredProviderIds));
|
|
690
|
+
}
|
|
691
|
+
let cachedModels = [];
|
|
692
|
+
try {
|
|
693
|
+
cachedModels = await readCachedHfModels();
|
|
694
|
+
}
|
|
695
|
+
catch {
|
|
696
|
+
// A failed cache scan means local adapters remain download-required.
|
|
697
|
+
}
|
|
698
|
+
if (models.some((model) => model.adapter?.artifact_ref?.model_type?.startsWith("tjs."))) {
|
|
699
|
+
try {
|
|
700
|
+
const cached = await scanTransformersJsCache(getTransformersJsCacheDir());
|
|
701
|
+
cachedModels.push(...cached.map((c) => tjsRefToUnified({ repo_id: c.repo_id }, "tjs.cached", true, c.size_bytes)));
|
|
702
|
+
}
|
|
703
|
+
catch {
|
|
704
|
+
// Transformers.js adapters remain download-required.
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
return resolveModelExecutionAvailability([...models, ...cachedModels], providerExecutionMap(configuredProviderIds)).slice(0, models.length);
|
|
708
|
+
}
|
|
709
|
+
export async function getAllModels(userId) {
|
|
466
710
|
const all = [];
|
|
467
|
-
all.push(...
|
|
711
|
+
all.push(...(await getRecommendedModels(false, userId)));
|
|
468
712
|
const availableIds = await getAvailableProviderIds(userId);
|
|
469
|
-
|
|
713
|
+
const providerModelsPromises = availableIds.map(async (providerId) => {
|
|
470
714
|
try {
|
|
471
715
|
const instance = await instantiateProvider(providerId, userId);
|
|
472
716
|
if (!instance)
|
|
473
|
-
|
|
717
|
+
return [];
|
|
474
718
|
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
|
-
});
|
|
719
|
+
const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
|
|
720
|
+
return models.map((m, i) => toUnifiedLanguageModel(m, toolFlags[i]));
|
|
481
721
|
}
|
|
482
722
|
catch {
|
|
483
723
|
// Provider unavailable — skip
|
|
724
|
+
return [];
|
|
484
725
|
}
|
|
726
|
+
});
|
|
727
|
+
const providerModelsArrays = await Promise.all(providerModelsPromises);
|
|
728
|
+
for (const models of providerModelsArrays) {
|
|
729
|
+
all.push(...models);
|
|
485
730
|
}
|
|
731
|
+
const localProviderIds = availableIds.filter((providerId) => getRegisteredProvider(providerId)?.metadata.access !== "remote_api");
|
|
732
|
+
all.push(...(await collectProviderCatalogModels(userId, localProviderIds)));
|
|
486
733
|
if (!isProduction()) {
|
|
487
734
|
try {
|
|
488
735
|
const hfModels = await readCachedHfModels();
|
|
@@ -506,27 +753,7 @@ async function getAllModels(userId) {
|
|
|
506
753
|
// Transformers.js cache unavailable — continue without it
|
|
507
754
|
}
|
|
508
755
|
}
|
|
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
|
-
};
|
|
756
|
+
return resolveModelExecutionAvailability(dedupeModels(all), providerExecutionMap(availableIds));
|
|
530
757
|
}
|
|
531
758
|
// ── availableForKind helpers ───────────────────────────────────────
|
|
532
759
|
const availableForKindInput = z.object({
|
|
@@ -538,9 +765,13 @@ const KIND_TO_MODALITY = {
|
|
|
538
765
|
text_to_image: "image",
|
|
539
766
|
image_to_image: "image",
|
|
540
767
|
text_to_speech: "tts",
|
|
768
|
+
text_to_music: "music",
|
|
769
|
+
audio_to_audio: "audio_to_audio",
|
|
541
770
|
speech_to_text: "asr",
|
|
542
771
|
text_to_video: "video",
|
|
543
|
-
image_to_video: "video"
|
|
772
|
+
image_to_video: "video",
|
|
773
|
+
video_to_video: "video",
|
|
774
|
+
reference_to_video: "video"
|
|
544
775
|
};
|
|
545
776
|
async function collectProviderModelsForKind(userId, kind) {
|
|
546
777
|
const out = [];
|
|
@@ -553,7 +784,9 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
553
784
|
switch (kind) {
|
|
554
785
|
case "text_generation": {
|
|
555
786
|
const models = await instance.getAvailableLanguageModels();
|
|
556
|
-
const toolFlags = await Promise.all(models.map((m) => instance
|
|
787
|
+
const toolFlags = await Promise.all(models.map((m) => instance
|
|
788
|
+
.hasToolSupport(m.id)
|
|
789
|
+
.catch(() => null)));
|
|
557
790
|
models.forEach((m, i) => out.push(toUnifiedLanguageModel(m, toolFlags[i])));
|
|
558
791
|
return;
|
|
559
792
|
}
|
|
@@ -579,6 +812,18 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
579
812
|
out.push(toUnifiedModel(m, "tts_model"));
|
|
580
813
|
return;
|
|
581
814
|
}
|
|
815
|
+
case "text_to_music": {
|
|
816
|
+
const models = await instance.getAvailableMusicModels();
|
|
817
|
+
for (const m of models)
|
|
818
|
+
out.push(toUnifiedModel(m, "music_model"));
|
|
819
|
+
return;
|
|
820
|
+
}
|
|
821
|
+
case "audio_to_audio": {
|
|
822
|
+
const models = await instance.getAvailableAudioToAudioModels();
|
|
823
|
+
for (const m of models)
|
|
824
|
+
out.push(toUnifiedModel(m, "audio_to_audio_model"));
|
|
825
|
+
return;
|
|
826
|
+
}
|
|
582
827
|
case "speech_to_text": {
|
|
583
828
|
const models = await instance.getAvailableASRModels();
|
|
584
829
|
for (const m of models)
|
|
@@ -586,7 +831,9 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
586
831
|
return;
|
|
587
832
|
}
|
|
588
833
|
case "text_to_video":
|
|
589
|
-
case "image_to_video":
|
|
834
|
+
case "image_to_video":
|
|
835
|
+
case "video_to_video":
|
|
836
|
+
case "reference_to_video": {
|
|
590
837
|
const models = await instance.getAvailableVideoModels();
|
|
591
838
|
for (const m of models) {
|
|
592
839
|
if (m.supportedTasks && !m.supportedTasks.includes(kind))
|
|
@@ -600,13 +847,45 @@ async function collectProviderModelsForKind(userId, kind) {
|
|
|
600
847
|
}
|
|
601
848
|
return out;
|
|
602
849
|
}
|
|
850
|
+
/**
|
|
851
|
+
* Every remote model the user's configured providers can enumerate, across all
|
|
852
|
+
* non-language-model types (embeddings, images, TTS, music, ASR, video), for the
|
|
853
|
+
* SDK model catalog. Unlike `collectProviderModelsForKind` this makes one pass
|
|
854
|
+
* per provider (each `getAvailable*Models` called once, no task filtering) so
|
|
855
|
+
* text_to_image and image_to_image capable models are both included. Language
|
|
856
|
+
* models are not collected here — `getAllModels` already enumerates them.
|
|
857
|
+
*/
|
|
858
|
+
export async function collectProviderCatalogModels(userId, providerIdsOverride) {
|
|
859
|
+
const providerIds = providerIdsOverride ?? (await getAvailableProviderIds(userId));
|
|
860
|
+
const perProvider = await Promise.all(providerIds.map((providerId) => safeProviderCall("catalogModels", { provider: providerId, userId }, async () => {
|
|
861
|
+
const instance = await instantiateProvider(providerId, userId);
|
|
862
|
+
if (!instance)
|
|
863
|
+
return [];
|
|
864
|
+
const collect = (fetchModels, type) => safeProviderCall(`catalogModels:${type}`, { provider: providerId, userId }, async () => (await fetchModels()).map((m) => toUnifiedModel(m, type)), []);
|
|
865
|
+
const lists = await Promise.all([
|
|
866
|
+
collect(() => instance.getAvailableImageModels(), "image_model"),
|
|
867
|
+
collect(() => instance.getAvailableEmbeddingModels(), "embedding_model"),
|
|
868
|
+
collect(() => instance.getAvailableTTSModels(), "tts_model"),
|
|
869
|
+
collect(() => instance.getAvailableMusicModels(), "music_model"),
|
|
870
|
+
collect(() => instance.getAvailableAudioToAudioModels(), "audio_to_audio_model"),
|
|
871
|
+
collect(() => instance.getAvailableASRModels(), "asr_model"),
|
|
872
|
+
collect(() => instance.getAvailableVideoModels(), "video_model")
|
|
873
|
+
]);
|
|
874
|
+
return lists.flat();
|
|
875
|
+
}, [])));
|
|
876
|
+
return perProvider.flat();
|
|
877
|
+
}
|
|
603
878
|
function curatedForKind(kind) {
|
|
604
879
|
const modality = KIND_TO_MODALITY[kind];
|
|
605
880
|
// 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" &&
|
|
609
|
-
|
|
881
|
+
// tagged with the specific task. TTS, ASR and music entries have no task
|
|
882
|
+
// field — modality alone is enough.
|
|
883
|
+
const taskRequired = kind !== "text_to_speech" &&
|
|
884
|
+
kind !== "speech_to_text" &&
|
|
885
|
+
kind !== "text_to_music";
|
|
886
|
+
return RECOMMENDED_MODELS.filter((r) => r.modality === modality &&
|
|
887
|
+
r.type !== "hf.whisper_cpp_vad" &&
|
|
888
|
+
(!taskRequired || r.task === kind));
|
|
610
889
|
}
|
|
611
890
|
// ── Router ─────────────────────────────────────────────────────────
|
|
612
891
|
export const modelsRouter = router({
|
|
@@ -617,14 +896,26 @@ export const modelsRouter = router({
|
|
|
617
896
|
.output(providersOutput)
|
|
618
897
|
.query(async ({ ctx }) => {
|
|
619
898
|
const userId = ctx.userId;
|
|
899
|
+
// The registry is a process global but a custom provider's catalog is
|
|
900
|
+
// per user, so the caller's own definitions have to be in it before the
|
|
901
|
+
// enumeration below — otherwise a second account's endpoints are the
|
|
902
|
+
// ones listed, or none are after a restart.
|
|
903
|
+
await syncCustomProviderRegistry(userId);
|
|
620
904
|
const infos = [];
|
|
621
|
-
|
|
622
|
-
|
|
905
|
+
const providerIds = await getAvailableProviderIds(userId);
|
|
906
|
+
const instances = await Promise.all(providerIds.map(async (providerId) => ({
|
|
907
|
+
providerId,
|
|
908
|
+
instance: await instantiateProvider(providerId, userId)
|
|
909
|
+
})));
|
|
910
|
+
for (const { providerId, instance } of instances) {
|
|
623
911
|
if (!instance)
|
|
624
912
|
continue;
|
|
913
|
+
const metadata = getRegisteredProvider(providerId)?.metadata;
|
|
625
914
|
infos.push({
|
|
626
915
|
provider: providerId,
|
|
627
|
-
capabilities:
|
|
916
|
+
capabilities: instance.getCapabilities(),
|
|
917
|
+
access: metadata?.access ?? "remote_api",
|
|
918
|
+
display_name: metadata?.displayName ?? providerId
|
|
628
919
|
});
|
|
629
920
|
}
|
|
630
921
|
return infos;
|
|
@@ -634,58 +925,35 @@ export const modelsRouter = router({
|
|
|
634
925
|
*/
|
|
635
926
|
recommended: protectedProcedure
|
|
636
927
|
.input(recommendedInput)
|
|
637
|
-
.
|
|
638
|
-
|
|
928
|
+
.output(modelsListOutput)
|
|
929
|
+
.query(async ({ input, ctx }) => {
|
|
930
|
+
return getRecommendedModels(input.check_servers ?? false, ctx.userId);
|
|
639
931
|
}),
|
|
640
932
|
/**
|
|
641
|
-
*
|
|
642
|
-
|
|
643
|
-
recommendedImage: protectedProcedure
|
|
644
|
-
.query(() => selectRecommended("image")),
|
|
645
|
-
/**
|
|
646
|
-
* Recommended text-to-image models.
|
|
933
|
+
* Every ranked route as a `<provider>:<model_id>` key, best model first.
|
|
934
|
+
* The model menu orders an empty query with it.
|
|
647
935
|
*/
|
|
936
|
+
rankedKeys: protectedProcedure
|
|
937
|
+
.output(z.array(z.string()))
|
|
938
|
+
.query(() => rankedModelKeys()),
|
|
648
939
|
recommendedImageTextToImage: protectedProcedure
|
|
940
|
+
.output(modelsListOutput)
|
|
649
941
|
.query(() => selectRecommended("image", "text_to_image")),
|
|
650
|
-
/**
|
|
651
|
-
* Recommended image-to-image models.
|
|
652
|
-
*/
|
|
653
942
|
recommendedImageImageToImage: protectedProcedure
|
|
943
|
+
.output(modelsListOutput)
|
|
654
944
|
.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
945
|
recommendedLanguageEmbedding: protectedProcedure
|
|
946
|
+
.output(modelsListOutput)
|
|
669
947
|
.query(() => selectRecommended("language", "embedding")),
|
|
670
|
-
|
|
671
|
-
* Recommended ASR models.
|
|
672
|
-
*/
|
|
673
|
-
recommendedAsr: protectedProcedure
|
|
674
|
-
.query(() => selectRecommended("asr")),
|
|
675
|
-
/**
|
|
676
|
-
* Recommended TTS models.
|
|
677
|
-
*/
|
|
948
|
+
recommendedAsr: protectedProcedure.output(modelsListOutput).query(({ ctx }) => withWhisperDownloadStatus(selectRecommended("asr").filter((model) => model.type !== "hf.whisper_cpp_vad"), ctx.userId)),
|
|
678
949
|
recommendedTts: protectedProcedure
|
|
950
|
+
.output(modelsListOutput)
|
|
679
951
|
.query(() => selectRecommended("tts")),
|
|
680
|
-
/**
|
|
681
|
-
* Recommended text-to-video models.
|
|
682
|
-
*/
|
|
683
952
|
recommendedVideoTextToVideo: protectedProcedure
|
|
953
|
+
.output(modelsListOutput)
|
|
684
954
|
.query(() => selectRecommended("video", "text_to_video")),
|
|
685
|
-
/**
|
|
686
|
-
* Recommended image-to-video models.
|
|
687
|
-
*/
|
|
688
955
|
recommendedVideoImageToVideo: protectedProcedure
|
|
956
|
+
.output(modelsListOutput)
|
|
689
957
|
.query(() => selectRecommended("video", "image_to_video")),
|
|
690
958
|
/**
|
|
691
959
|
* All models available to the user for a given task kind. Aggregates the
|
|
@@ -695,6 +963,7 @@ export const modelsRouter = router({
|
|
|
695
963
|
*/
|
|
696
964
|
availableForKind: protectedProcedure
|
|
697
965
|
.input(availableForKindInput)
|
|
966
|
+
.output(modelsListOutput)
|
|
698
967
|
.query(async ({ ctx, input }) => {
|
|
699
968
|
const fromProviders = await collectProviderModelsForKind(ctx.userId, input.kind);
|
|
700
969
|
const curated = curatedForKind(input.kind);
|
|
@@ -713,13 +982,20 @@ export const modelsRouter = router({
|
|
|
713
982
|
* All models (recommended + provider models + HF cached).
|
|
714
983
|
*/
|
|
715
984
|
all: protectedProcedure
|
|
985
|
+
.output(modelsListOutput)
|
|
716
986
|
.query(async ({ ctx }) => getAllModels(ctx.userId)),
|
|
717
987
|
/**
|
|
718
|
-
* HuggingFace cached models.
|
|
988
|
+
* HuggingFace cached models. `scope: "worker"` lists the attached worker's
|
|
989
|
+
* cache via the Python bridge; the default `"local"` scans the local FS.
|
|
719
990
|
*/
|
|
720
991
|
huggingfaceList: protectedProcedure
|
|
992
|
+
.input(z.object({ scope: modelScope }).optional())
|
|
721
993
|
.output(modelsListOutput)
|
|
722
|
-
.query(async () => {
|
|
994
|
+
.query(async ({ ctx, input }) => {
|
|
995
|
+
if (input?.scope === "worker") {
|
|
996
|
+
const bridge = await requireWorkerBridge(ctx);
|
|
997
|
+
return (await bridge.listCachedModels());
|
|
998
|
+
}
|
|
723
999
|
if (isProduction())
|
|
724
1000
|
return [];
|
|
725
1001
|
try {
|
|
@@ -730,12 +1006,17 @@ export const modelsRouter = router({
|
|
|
730
1006
|
}
|
|
731
1007
|
}),
|
|
732
1008
|
/**
|
|
733
|
-
* Delete a HuggingFace cached model.
|
|
1009
|
+
* Delete a HuggingFace cached model. `scope: "worker"` deletes from the
|
|
1010
|
+
* attached worker's cache via the Python bridge.
|
|
734
1011
|
*/
|
|
735
1012
|
huggingfaceDelete: protectedProcedure
|
|
736
|
-
.input(hfDeleteInput)
|
|
1013
|
+
.input(hfDeleteInput.extend({ scope: modelScope }))
|
|
737
1014
|
.output(z.boolean())
|
|
738
|
-
.mutation(async ({ input }) => {
|
|
1015
|
+
.mutation(async ({ ctx, input }) => {
|
|
1016
|
+
if (input.scope === "worker") {
|
|
1017
|
+
const bridge = await requireWorkerBridge(ctx);
|
|
1018
|
+
return bridge.deleteCachedModel(input.repo_id);
|
|
1019
|
+
}
|
|
739
1020
|
if (isProduction())
|
|
740
1021
|
return false;
|
|
741
1022
|
try {
|
|
@@ -765,28 +1046,33 @@ export const modelsRouter = router({
|
|
|
765
1046
|
}
|
|
766
1047
|
}),
|
|
767
1048
|
/**
|
|
768
|
-
* HuggingFace
|
|
1049
|
+
* Search the live HuggingFace Hub by free-text and/or pipeline tag.
|
|
1050
|
+
* Unlike `huggingfaceSearch` (which only scans the local cache), this hits
|
|
1051
|
+
* the online Hub so the Model Manager can browse & download any public repo.
|
|
769
1052
|
*/
|
|
770
|
-
|
|
771
|
-
.input(
|
|
1053
|
+
huggingfaceHubSearch: protectedProcedure
|
|
1054
|
+
.input(hfHubSearchInput)
|
|
772
1055
|
.output(modelsListOutput)
|
|
773
1056
|
.query(async ({ input }) => {
|
|
774
|
-
|
|
775
|
-
return await getModelsByHfType(input.model_type);
|
|
776
|
-
}
|
|
777
|
-
catch {
|
|
778
|
-
return [];
|
|
779
|
-
}
|
|
1057
|
+
return await searchHuggingFaceHub(input.query, input.pipeline_tag, input.limit ?? 50);
|
|
780
1058
|
}),
|
|
781
1059
|
/**
|
|
782
|
-
*
|
|
1060
|
+
* HuggingFace models by type.
|
|
783
1061
|
*/
|
|
784
|
-
|
|
1062
|
+
huggingfaceByType: protectedProcedure
|
|
1063
|
+
.input(hfByTypeInput.extend({ scope: modelScope }))
|
|
785
1064
|
.output(modelsListOutput)
|
|
786
|
-
.query(async () => {
|
|
1065
|
+
.query(async ({ ctx, input }) => {
|
|
1066
|
+
if (input.scope === "worker") {
|
|
1067
|
+
const bridge = await requireWorkerBridge(ctx);
|
|
1068
|
+
// SAFETY: the worker sends full `UnifiedModel` JSON, but the bridge
|
|
1069
|
+
// types the reply as `UnifiedModelLike`, which declares neither `type`
|
|
1070
|
+
// nor `path` — the two fields this filter reads.
|
|
1071
|
+
const cached = (await bridge.listCachedModels());
|
|
1072
|
+
return filterModelsByHfType(cached, input.model_type);
|
|
1073
|
+
}
|
|
787
1074
|
try {
|
|
788
|
-
|
|
789
|
-
return cached.map((c) => tjsRefToUnified({ repo_id: c.repo_id }, "tjs.cached", true, c.size_bytes));
|
|
1075
|
+
return await getModelsByHfType(input.model_type);
|
|
790
1076
|
}
|
|
791
1077
|
catch {
|
|
792
1078
|
return [];
|
|
@@ -799,12 +1085,14 @@ export const modelsRouter = router({
|
|
|
799
1085
|
* Transformers.js cache directory. Recommended entries always appear,
|
|
800
1086
|
* marked `downloaded` based on cache presence; off-list cached repos that
|
|
801
1087
|
* happen to be recommended under another type are NOT shown here (they only
|
|
802
|
-
* show up under their own type
|
|
1088
|
+
* show up under their own type).
|
|
803
1089
|
*/
|
|
804
1090
|
transformersJsByType: protectedProcedure
|
|
805
1091
|
.input(tjsByTypeInput)
|
|
806
1092
|
.output(modelsListOutput)
|
|
807
1093
|
.query(async ({ input }) => {
|
|
1094
|
+
if (isProduction())
|
|
1095
|
+
return [];
|
|
808
1096
|
const modelType = input.model_type;
|
|
809
1097
|
const recs = recommendedFor(modelType);
|
|
810
1098
|
const cacheDir = getTransformersJsCacheDir();
|
|
@@ -841,6 +1129,8 @@ export const modelsRouter = router({
|
|
|
841
1129
|
.input(tjsByTypeInput)
|
|
842
1130
|
.output(modelsListOutput)
|
|
843
1131
|
.query(async ({ input }) => {
|
|
1132
|
+
if (isProduction())
|
|
1133
|
+
return [];
|
|
844
1134
|
const modelType = input.model_type;
|
|
845
1135
|
const recs = recommendedFor(modelType);
|
|
846
1136
|
if (recs.length === 0)
|
|
@@ -850,26 +1140,7 @@ export const modelsRouter = router({
|
|
|
850
1140
|
const cacheSizes = new Map(cached.map((c) => [c.repo_id, c.size_bytes]));
|
|
851
1141
|
return recs.map((ref) => tjsRefToUnified(ref, modelType, cacheSizes.has(ref.repo_id), cacheSizes.get(ref.repo_id) ?? null));
|
|
852
1142
|
}),
|
|
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 () => {
|
|
1143
|
+
ollama: protectedProcedure.output(ollamaModelsOutput).query(async ({ ctx }) => safeProviderCall("ollama models", { provider: "ollama", userId: ctx.userId }, async () => {
|
|
873
1144
|
const instance = await instantiateProvider("ollama", ctx.userId);
|
|
874
1145
|
if (!instance)
|
|
875
1146
|
return [];
|
|
@@ -877,8 +1148,18 @@ export const modelsRouter = router({
|
|
|
877
1148
|
return models.map(toOllamaModel);
|
|
878
1149
|
}, [])),
|
|
879
1150
|
/**
|
|
880
|
-
*
|
|
1151
|
+
* Delete a model from the local Ollama server. Returns false when Ollama is
|
|
1152
|
+
* not configured or does not have the model.
|
|
881
1153
|
*/
|
|
1154
|
+
ollamaDelete: protectedProcedure
|
|
1155
|
+
.input(z.object({ model: z.string().min(1) }))
|
|
1156
|
+
.output(z.boolean())
|
|
1157
|
+
.mutation(async ({ ctx, input }) => safeProviderCall("ollama delete", { provider: "ollama", userId: ctx.userId }, async () => {
|
|
1158
|
+
const instance = await instantiateProvider("ollama", ctx.userId);
|
|
1159
|
+
if (!(instance instanceof OllamaProvider))
|
|
1160
|
+
return false;
|
|
1161
|
+
return instance.deleteModel(input.model);
|
|
1162
|
+
}, false)),
|
|
882
1163
|
llmByProvider: protectedProcedure
|
|
883
1164
|
.input(providerInput)
|
|
884
1165
|
.output(modelsListOutput)
|
|
@@ -887,28 +1168,78 @@ export const modelsRouter = router({
|
|
|
887
1168
|
if (!instance)
|
|
888
1169
|
return [];
|
|
889
1170
|
const models = await instance.getAvailableLanguageModels();
|
|
890
|
-
const toolFlags = await Promise.all(models.map((m) => instance
|
|
891
|
-
.hasToolSupport(m.id)
|
|
892
|
-
.catch(() => null)));
|
|
1171
|
+
const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
|
|
893
1172
|
return models.map((m, i) => toUnifiedLanguageModel(m, toolFlags[i]));
|
|
894
1173
|
}, [])),
|
|
895
1174
|
/**
|
|
896
|
-
*
|
|
1175
|
+
* Aspect ratios / resolutions / (video) durations a given model supports.
|
|
1176
|
+
* Empty arrays are intentional — the client falls back to the full static
|
|
1177
|
+
* lists when a model declares no constraints.
|
|
897
1178
|
*/
|
|
1179
|
+
mediaOptions: protectedProcedure
|
|
1180
|
+
.input(z.object({
|
|
1181
|
+
provider: z.string().min(1),
|
|
1182
|
+
model: z.string().min(1),
|
|
1183
|
+
task: z.enum(["image", "video"])
|
|
1184
|
+
}))
|
|
1185
|
+
.output(z.object({
|
|
1186
|
+
aspectRatios: z.array(z.string()),
|
|
1187
|
+
resolutions: z.array(z.string()),
|
|
1188
|
+
durations: z.array(z.number()).nullish()
|
|
1189
|
+
}))
|
|
1190
|
+
.query(async ({ ctx, input }) => safeProviderCall("mediaOptions", { provider: input.provider, task: input.task, userId: ctx.userId }, async () => {
|
|
1191
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1192
|
+
if (!instance) {
|
|
1193
|
+
return { aspectRatios: [], resolutions: [], durations: null };
|
|
1194
|
+
}
|
|
1195
|
+
if (input.task === "image") {
|
|
1196
|
+
const models = await instance.getAvailableImageModels();
|
|
1197
|
+
const m = models.find((x) => x.id === input.model);
|
|
1198
|
+
return {
|
|
1199
|
+
aspectRatios: m?.aspectRatios ?? [],
|
|
1200
|
+
resolutions: m?.resolutions ?? [],
|
|
1201
|
+
durations: null
|
|
1202
|
+
};
|
|
1203
|
+
}
|
|
1204
|
+
const models = await instance.getAvailableVideoModels();
|
|
1205
|
+
const m = models.find((x) => x.id === input.model);
|
|
1206
|
+
return {
|
|
1207
|
+
aspectRatios: m?.aspectRatios ?? [],
|
|
1208
|
+
resolutions: m?.resolutions ?? [],
|
|
1209
|
+
durations: m?.durations ?? null
|
|
1210
|
+
};
|
|
1211
|
+
}, { aspectRatios: [], resolutions: [], durations: null })),
|
|
898
1212
|
imageByProvider: protectedProcedure
|
|
899
1213
|
.input(providerInput)
|
|
900
1214
|
.output(modelsListOutput)
|
|
901
|
-
.query(async ({ ctx, input }) =>
|
|
902
|
-
const
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
1215
|
+
.query(async ({ ctx, input }) => {
|
|
1216
|
+
const models = await safeProviderCall("imageByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1217
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1218
|
+
if (!instance)
|
|
1219
|
+
return [];
|
|
1220
|
+
const models = await instance.getAvailableImageModels();
|
|
1221
|
+
return models.map((m) => toUnifiedModel(m, "image_model"));
|
|
1222
|
+
}, []);
|
|
1223
|
+
// Only a local model has files to download. Remote catalogs keep the
|
|
1224
|
+
// execution state that toUnifiedModel gave them.
|
|
1225
|
+
return models.some((model) => model.adapter)
|
|
1226
|
+
? resolveProviderModelExecution(models, [input.provider])
|
|
1227
|
+
: models;
|
|
1228
|
+
}),
|
|
1229
|
+
rerankByProvider: protectedProcedure
|
|
1230
|
+
.input(providerInput)
|
|
1231
|
+
.output(modelsListOutput)
|
|
1232
|
+
.query(async ({ ctx, input }) => {
|
|
1233
|
+
const models = await safeProviderCall("rerankByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1234
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1235
|
+
if (!instance)
|
|
1236
|
+
return [];
|
|
1237
|
+
const models = await instance.getAvailableRerankModels();
|
|
1238
|
+
return models.map((m) => toUnifiedModel(m, "rerank_model"));
|
|
1239
|
+
}, []);
|
|
1240
|
+
return resolveProviderModelExecution(models, [input.provider]);
|
|
1241
|
+
}),
|
|
1242
|
+
tts: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
912
1243
|
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
913
1244
|
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("tts (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
914
1245
|
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
@@ -917,52 +1248,90 @@ export const modelsRouter = router({
|
|
|
917
1248
|
const models = await instance.getAvailableTTSModels();
|
|
918
1249
|
return models.map((m) => toUnifiedModel(m, "tts_model"));
|
|
919
1250
|
}, [])));
|
|
920
|
-
return results.flat();
|
|
1251
|
+
return resolveProviderModelExecution(results.flat(), availableIds);
|
|
921
1252
|
}),
|
|
922
|
-
/**
|
|
923
|
-
* TTS models by provider.
|
|
924
|
-
*/
|
|
925
1253
|
ttsByProvider: protectedProcedure
|
|
926
1254
|
.input(providerInput)
|
|
927
1255
|
.output(modelsListOutput)
|
|
928
|
-
.query(async ({ ctx, input }) =>
|
|
1256
|
+
.query(async ({ ctx, input }) => {
|
|
1257
|
+
const models = await safeProviderCall("ttsByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1258
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1259
|
+
if (!instance)
|
|
1260
|
+
return [];
|
|
1261
|
+
const models = await instance.getAvailableTTSModels();
|
|
1262
|
+
return models.map((m) => toUnifiedModel(m, "tts_model"));
|
|
1263
|
+
}, []);
|
|
1264
|
+
return resolveProviderModelExecution(models, [input.provider]);
|
|
1265
|
+
}),
|
|
1266
|
+
music: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
1267
|
+
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
1268
|
+
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("music (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
1269
|
+
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
1270
|
+
if (!instance)
|
|
1271
|
+
return [];
|
|
1272
|
+
const models = await instance.getAvailableMusicModels();
|
|
1273
|
+
return models.map((m) => toUnifiedModel(m, "music_model"));
|
|
1274
|
+
}, [])));
|
|
1275
|
+
return results.flat();
|
|
1276
|
+
}),
|
|
1277
|
+
musicByProvider: protectedProcedure
|
|
1278
|
+
.input(providerInput)
|
|
1279
|
+
.output(modelsListOutput)
|
|
1280
|
+
.query(async ({ ctx, input }) => safeProviderCall("musicByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
929
1281
|
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
930
1282
|
if (!instance)
|
|
931
1283
|
return [];
|
|
932
|
-
const models = await instance.
|
|
933
|
-
return models.map((m) => toUnifiedModel(m, "
|
|
1284
|
+
const models = await instance.getAvailableMusicModels();
|
|
1285
|
+
return models.map((m) => toUnifiedModel(m, "music_model"));
|
|
934
1286
|
}, [])),
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
asr: protectedProcedure.query(async ({ ctx }) => {
|
|
1287
|
+
audioToAudio: protectedProcedure
|
|
1288
|
+
.output(modelsListOutput)
|
|
1289
|
+
.query(async ({ ctx }) => {
|
|
939
1290
|
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
940
|
-
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("
|
|
1291
|
+
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("audioToAudio (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
941
1292
|
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
942
1293
|
if (!instance)
|
|
943
1294
|
return [];
|
|
944
|
-
const models = await instance.
|
|
945
|
-
return models.map((m) => toUnifiedModel(m, "
|
|
1295
|
+
const models = await instance.getAvailableAudioToAudioModels();
|
|
1296
|
+
return models.map((m) => toUnifiedModel(m, "audio_to_audio_model"));
|
|
946
1297
|
}, [])));
|
|
947
1298
|
return results.flat();
|
|
948
1299
|
}),
|
|
949
|
-
|
|
950
|
-
* ASR models by provider.
|
|
951
|
-
*/
|
|
952
|
-
asrByProvider: protectedProcedure
|
|
1300
|
+
audioToAudioByProvider: protectedProcedure
|
|
953
1301
|
.input(providerInput)
|
|
954
1302
|
.output(modelsListOutput)
|
|
955
|
-
.query(async ({ ctx, input }) => safeProviderCall("
|
|
1303
|
+
.query(async ({ ctx, input }) => safeProviderCall("audioToAudioByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
956
1304
|
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
957
1305
|
if (!instance)
|
|
958
1306
|
return [];
|
|
959
|
-
const models = await instance.
|
|
960
|
-
return models.map((m) => toUnifiedModel(m, "
|
|
1307
|
+
const models = await instance.getAvailableAudioToAudioModels();
|
|
1308
|
+
return models.map((m) => toUnifiedModel(m, "audio_to_audio_model"));
|
|
961
1309
|
}, [])),
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
1310
|
+
asr: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
1311
|
+
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
1312
|
+
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("asr (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
1313
|
+
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
1314
|
+
if (!instance)
|
|
1315
|
+
return [];
|
|
1316
|
+
const models = await instance.getAvailableASRModels();
|
|
1317
|
+
return models.map((m) => toUnifiedModel(m, "asr_model"));
|
|
1318
|
+
}, [])));
|
|
1319
|
+
return resolveProviderModelExecution(results.flat(), availableIds);
|
|
1320
|
+
}),
|
|
1321
|
+
asrByProvider: protectedProcedure
|
|
1322
|
+
.input(providerInput)
|
|
1323
|
+
.output(modelsListOutput)
|
|
1324
|
+
.query(async ({ ctx, input }) => {
|
|
1325
|
+
const models = await safeProviderCall("asrByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1326
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1327
|
+
if (!instance)
|
|
1328
|
+
return [];
|
|
1329
|
+
const models = await instance.getAvailableASRModels();
|
|
1330
|
+
return models.map((m) => toUnifiedModel(m, "asr_model"));
|
|
1331
|
+
}, []);
|
|
1332
|
+
return resolveProviderModelExecution(models, [input.provider]);
|
|
1333
|
+
}),
|
|
1334
|
+
video: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
|
|
966
1335
|
const availableIds = await getAvailableProviderIds(ctx.userId);
|
|
967
1336
|
const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("video (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
|
|
968
1337
|
const instance = await instantiateProvider(providerId, ctx.userId);
|
|
@@ -973,9 +1342,6 @@ export const modelsRouter = router({
|
|
|
973
1342
|
}, [])));
|
|
974
1343
|
return results.flat();
|
|
975
1344
|
}),
|
|
976
|
-
/**
|
|
977
|
-
* Video models by provider.
|
|
978
|
-
*/
|
|
979
1345
|
videoByProvider: protectedProcedure
|
|
980
1346
|
.input(providerInput)
|
|
981
1347
|
.output(modelsListOutput)
|
|
@@ -986,61 +1352,19 @@ export const modelsRouter = router({
|
|
|
986
1352
|
const models = await instance.getAvailableVideoModels();
|
|
987
1353
|
return models.map((m) => toUnifiedModel(m, "video_model"));
|
|
988
1354
|
}, [])),
|
|
989
|
-
/**
|
|
990
|
-
* Embedding models by provider.
|
|
991
|
-
*/
|
|
992
1355
|
embeddingByProvider: protectedProcedure
|
|
993
1356
|
.input(providerInput)
|
|
994
1357
|
.output(modelsListOutput)
|
|
995
|
-
.query(async ({ ctx, input }) =>
|
|
996
|
-
const
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
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
|
-
})));
|
|
1358
|
+
.query(async ({ ctx, input }) => {
|
|
1359
|
+
const models = await safeProviderCall("embeddingByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
|
|
1360
|
+
const instance = await instantiateProvider(input.provider, ctx.userId);
|
|
1361
|
+
if (!instance)
|
|
1362
|
+
return [];
|
|
1363
|
+
const models = await instance.getAvailableEmbeddingModels();
|
|
1364
|
+
return models.map((m) => toUnifiedModel(m, "embedding_model"));
|
|
1365
|
+
}, []);
|
|
1366
|
+
return resolveProviderModelExecution(models, [input.provider]);
|
|
1036
1367
|
}),
|
|
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
1368
|
/**
|
|
1045
1369
|
* Fast batch cache status check for multiple models.
|
|
1046
1370
|
*/
|
|
@@ -1084,24 +1408,6 @@ export const modelsRouter = router({
|
|
|
1084
1408
|
.mutation(() => ({
|
|
1085
1409
|
status: "unavailable",
|
|
1086
1410
|
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
|
-
})
|
|
1411
|
+
}))
|
|
1106
1412
|
});
|
|
1107
1413
|
//# sourceMappingURL=models.js.map
|