diff --git a/packages/lib-infer-diffusion/index.js b/packages/lib-infer-diffusion/index.js index b33988a9fc..d461258837 100644 --- a/packages/lib-infer-diffusion/index.js +++ b/packages/lib-infer-diffusion/index.js @@ -72,14 +72,15 @@ class ImgStableDiffusion extends BaseInference { // for SD3 split) the caller is using a pure diffusion GGUF that must be // loaded via diffusion_model_path. const isSplitLayout = !!this._llmModel || !!this._t5XxlModel + const resolve = (name) => name ? (path.isAbsolute(name) ? name : path.join(this._diskPath, name)) : '' const configurationParams = { - path: isSplitLayout ? '' : path.join(this._diskPath, this._modelName), - diffusionModelPath: isSplitLayout ? path.join(this._diskPath, this._modelName) : '', - clipLPath: this._clipLModel ? path.join(this._diskPath, this._clipLModel) : '', - clipGPath: this._clipGModel ? path.join(this._diskPath, this._clipGModel) : '', - t5XxlPath: this._t5XxlModel ? path.join(this._diskPath, this._t5XxlModel) : '', - llmPath: this._llmModel ? path.join(this._diskPath, this._llmModel) : '', - vaePath: this._vaeModel ? path.join(this._diskPath, this._vaeModel) : '', + path: isSplitLayout ? '' : resolve(this._modelName), + diffusionModelPath: isSplitLayout ? resolve(this._modelName) : '', + clipLPath: resolve(this._clipLModel), + clipGPath: resolve(this._clipGModel), + t5XxlPath: resolve(this._t5XxlModel), + llmPath: resolve(this._llmModel), + vaePath: resolve(this._vaeModel), config: this._config } diff --git a/packages/sdk/bun.lock b/packages/sdk/bun.lock index ad84c46f9f..4c3f45b73e 100644 --- a/packages/sdk/bun.lock +++ b/packages/sdk/bun.lock @@ -1,10 +1,12 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "@qvac/sdk", "dependencies": { "@qvac/decoder-audio": "^0.3.3", + "@qvac/diffusion-cpp": "file:../lib-infer-diffusion", "@qvac/dl-filesystem": "^0.2.0", "@qvac/embed-llamacpp": "^0.12.0", "@qvac/error": "^0.1.1", @@ -425,8 +427,12 @@ "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.13.0", "", { "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } }, "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw=="], + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@2.0.3", "", {}, "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="], + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], "@hyperswarm/secret-stream": ["@hyperswarm/secret-stream@6.9.1", "", { "dependencies": { "b4a": "^1.1.0", "hypercore-crypto": "^3.3.1", "noise-curve-ed": "^2.0.1", "noise-handshake": "^4.0.0", "sodium-secretstream": "^1.1.0", "sodium-universal": "^5.0.0", "streamx": "^2.14.0", "timeout-refresh": "^2.0.0", "unslab": "^1.3.0" } }, "sha512-xb0S5y3YJwBakD77JOGBHlBxdp63mHClZoXBYoLv+9wH8e054ESKlmQptWqjJK5dv5VMUIVYOJB4MaOpB0JdGw=="], @@ -487,6 +493,12 @@ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@npmcli/config": ["@npmcli/config@8.3.4", "", { "dependencies": { "@npmcli/map-workspaces": "^3.0.2", "@npmcli/package-json": "^5.1.1", "ci-info": "^4.0.0", "ini": "^4.1.2", "nopt": "^7.2.1", "proc-log": "^4.2.0", "semver": "^7.3.5", "walk-up-path": "^3.0.1" } }, "sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw=="], "@npmcli/git": ["@npmcli/git@5.0.8", "", { "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^4.0.0" } }, "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ=="], @@ -505,6 +517,8 @@ "@qvac/decoder-audio": ["@qvac/decoder-audio@0.3.3", "", { "dependencies": { "@qvac/error": "^0.1.0", "@qvac/infer-base": "^0.1.0", "@qvac/logging": "^0.1.0", "@qvac/response": "^0.1.0", "bare-assert": "^1.1.0", "bare-channel": "^5.2.2", "bare-ffmpeg": "^1.0.0-32", "bare-fs": "^4.5.1", "bare-path": "^3.0.0", "bare-process": "^4.2.2", "process": "npm:bare-process@^4.2.2" } }, "sha512-AQoPODGPOM29KZIgN541KwTJ0T0B5mqByMEtBGDXHk5bjB9W7eVfBOKcCM/BJleVqOG5P3fO8sNm+5INuCkadA=="], + "@qvac/diffusion-cpp": ["@qvac/diffusion-cpp@file:../lib-infer-diffusion", { "dependencies": { "@qvac/infer-base": "^0.2.2", "bare-path": "^3.0.0", "bare-process": "^4.2.2" }, "devDependencies": { "@types/node": "^24.2.1", "bare-buffer": "^3.4.2", "bare-fs": "^4.5.1", "bare-os": "^3.7.1", "bare-subprocess": "^5.2.2", "bare-url": "^2.1.6", "brittle": "^3.19.1", "cmake-bare": "1.7.5", "cmake-vcpkg": "^1.1.0", "standard": "^17.0.0", "typescript": "^5.9.2" } }], + "@qvac/dl-base": ["@qvac/dl-base@0.2.0", "", { "dependencies": { "@qvac/logging": "^0.1.0", "ready-resource": "^1.1.1" } }, "sha512-825Ip15M5MoDflHCggl3X9FDx9e5WoypiEy0BGqIn1fBXqGNho0PETqYZI4c3laPwUEAl3w3GsGPcoJQ9CKWmQ=="], "@qvac/dl-filesystem": ["@qvac/dl-filesystem@0.2.0", "", { "dependencies": { "@qvac/dl-base": "^0.2.0", "@qvac/error": "^0.1.0", "bare-fs": "^4.5.2", "bare-path": "^3.0.0" } }, "sha512-15Pk7gcRbNIX3C1j1gGuKg6t6UUYWxt8zi4i1kO6HvTPFSD+HZ3lo3A8XsNw4o1u55tb3ORnE2ry17eBhnYvKg=="], @@ -977,6 +991,8 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], @@ -1035,6 +1051,12 @@ "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + "cmake-bare": ["cmake-bare@1.7.5", "", { "dependencies": { "cmake-npm": "^1.1.0" } }, "sha512-mhA49Qcx5x9Czr0LWqomLxGGlT3lrjc+ygW9olXvFRJn92VAoYQPII8yP3F4bm7gHNofLvCLoD18sFtEqNiKeA=="], + + "cmake-npm": ["cmake-npm@1.1.0", "", {}, "sha512-+mM1ykb4k0bSR5afW0LcVLEf1rd00o95m8PeotnCfXcsnEQ++TKrf86noO4G9uLGrvgKi9kD1BJvaZyN4G8CDw=="], + + "cmake-vcpkg": ["cmake-vcpkg@1.2.0", "", {}, "sha512-ZWcky6eaTEpGeb086JWM4UBQAbQsR7Gee3nsfrjK0MlLtrMtYi7rGuLJ1b1DUY0IOwscMUlNGdSuD/BzzsHlXw=="], + "codecs": ["codecs@3.1.0", "", { "dependencies": { "b4a": "^1.6.3" } }, "sha512-Dqx8NwvBvnMeuPQdVKy/XEF71igjR5apxBvCGeV0pP1tXadOiaLvDTXt7xh+/5wI1ASB195mXQGJbw3Ml4YDWQ=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -1177,6 +1199,10 @@ "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], + "eslint-config-standard": ["eslint-config-standard@17.1.0", "", { "peerDependencies": { "eslint": "^8.0.1", "eslint-plugin-import": "^2.25.2", "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", "eslint-plugin-promise": "^6.0.0" } }, "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q=="], + + "eslint-config-standard-jsx": ["eslint-config-standard-jsx@11.0.0", "", { "peerDependencies": { "eslint": "^8.8.0", "eslint-plugin-react": "^7.28.0" } }, "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ=="], + "eslint-import-context": ["eslint-import-context@0.1.9", "", { "dependencies": { "get-tsconfig": "^4.10.1", "stable-hash-x": "^0.2.0" }, "peerDependencies": { "unrs-resolver": "^1.0.0" }, "optionalPeers": ["unrs-resolver"] }, "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg=="], "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], @@ -1185,12 +1211,20 @@ "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], + "eslint-plugin-es": ["eslint-plugin-es@4.1.0", "", { "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" }, "peerDependencies": { "eslint": ">=4.19.1" } }, "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ=="], + "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], + "eslint-plugin-n": ["eslint-plugin-n@15.7.0", "", { "dependencies": { "builtins": "^5.0.1", "eslint-plugin-es": "^4.1.0", "eslint-utils": "^3.0.0", "ignore": "^5.1.1", "is-core-module": "^2.11.0", "minimatch": "^3.1.2", "resolve": "^1.22.1", "semver": "^7.3.8" }, "peerDependencies": { "eslint": ">=7.0.0" } }, "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q=="], + + "eslint-plugin-promise": ["eslint-plugin-promise@6.6.0", "", { "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ=="], + "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + "eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], @@ -1263,6 +1297,8 @@ "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="], "fb-dotslash": ["fb-dotslash@0.5.8", "", { "bin": { "dotslash": "bin/dotslash" } }, "sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA=="], @@ -1335,6 +1371,8 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + "get-stdin": ["get-stdin@8.0.0", "", {}, "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg=="], + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="], @@ -1357,6 +1395,8 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], @@ -1499,6 +1539,8 @@ "is-options": ["is-options@1.0.2", "", { "dependencies": { "b4a": "^1.1.1" } }, "sha512-u+Ai74c8Q74aS8BuHwPdI1jptGOT1FQXgCq8/zv0xRuE+wRgSMEJLj8lVO8Zp9BeGb29BXY6AsNPinfqjkr7Fg=="], + "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], @@ -1571,6 +1613,8 @@ "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + "json-parse-better-errors": ["json-parse-better-errors@1.0.2", "", {}, "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="], + "json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -1625,6 +1669,8 @@ "llm-splitter": ["llm-splitter@0.2.0", "", {}, "sha512-Yqi947Vk5Ps2YqhOV8K+RR6bseLhZLIVfovpWJH5cT7GE4Pca8/3iny/3oQ47scD7SfQd3whhxMfc+KgxTgDHA=="], + "load-json-file": ["load-json-file@5.3.0", "", { "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^4.0.0", "pify": "^4.0.1", "strip-bom": "^3.0.0", "type-fest": "^0.3.0" } }, "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw=="], + "load-plugin": ["load-plugin@6.0.3", "", { "dependencies": { "@npmcli/config": "^8.0.0", "import-meta-resolve": "^4.0.0" } }, "sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w=="], "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], @@ -1909,10 +1955,14 @@ "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], + "pkg-conf": ["pkg-conf@3.1.0", "", { "dependencies": { "find-up": "^3.0.0", "load-json-file": "^5.2.0" } }, "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ=="], + "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], "pngjs": ["pngjs@3.4.0", "", {}, "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="], @@ -1961,6 +2011,8 @@ "queue": ["queue@6.0.2", "", { "dependencies": { "inherits": "~2.0.3" } }, "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA=="], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "queue-tick": ["queue-tick@1.0.1", "", {}, "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="], "quickbit-native": ["quickbit-native@2.4.8", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-FcCcqI+nIAWGknqhtrYT5TSD7t/N+Xd8ctM+2PrIIBuwOi5hx0SxAvuPtzLIEMfT/2h9+fhBakUe2uALOHX6yw=="], @@ -2013,6 +2065,8 @@ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "regexpp": ["regexpp@3.2.0", "", {}, "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="], + "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], @@ -2063,12 +2117,16 @@ "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], "rocksdb-native": ["rocksdb-native@3.13.0", "", { "dependencies": { "compact-encoding": "^2.15.0", "ready-resource": "^1.0.0", "refcounter": "^1.0.0", "require-addon": "^1.0.2", "resolve-reject-promise": "^1.1.0", "signal-promise": "^1.0.3", "streamx": "^2.16.1" } }, "sha512-KTwrhZtxk5/1quvpLzqrSMQXVctTzrwn+mYFIs1j+hOz1sy3DGv4coKxOLTFfyBeSizfkPF+FtxhTsdRqGpLpQ=="], "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], @@ -2173,6 +2231,10 @@ "stacktrace-parser": ["stacktrace-parser@0.1.11", "", { "dependencies": { "type-fest": "^0.7.1" } }, "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg=="], + "standard": ["standard@17.1.2", "", { "dependencies": { "eslint": "^8.41.0", "eslint-config-standard": "17.1.0", "eslint-config-standard-jsx": "^11.0.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.7.0", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.36.1", "standard-engine": "^15.1.0", "version-guard": "^1.1.1" }, "bin": { "standard": "bin/cmd.cjs" } }, "sha512-WLm12WoXveKkvnPnPnaFUUHuOB2cUdAsJ4AiGHL2G0UNMrcRAWY2WriQaV8IQ3oRmYr0AWUbLNr94ekYFAHOrA=="], + + "standard-engine": ["standard-engine@15.1.0", "", { "dependencies": { "get-stdin": "^8.0.0", "minimist": "^1.2.6", "pkg-conf": "^3.1.0", "xdg-basedir": "^4.0.0" } }, "sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], @@ -2377,6 +2439,8 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + "version-guard": ["version-guard@1.1.3", "", {}, "sha512-JwPr6erhX53EWH/HCSzfy1tTFrtPXUe927wdM1jqBBeYp1OM+qPHjWbsvv6pIBduqdgxxS+ScfG7S28pzyr2DQ=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], @@ -2435,6 +2499,8 @@ "xcode": ["xcode@3.0.1", "", { "dependencies": { "simple-plist": "^1.1.0", "uuid": "^7.0.3" } }, "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA=="], + "xdg-basedir": ["xdg-basedir@4.0.0", "", {}, "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="], + "xml2js": ["xml2js@0.6.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w=="], "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], @@ -2539,6 +2605,10 @@ "@npmcli/promise-spawn/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + "@qvac/diffusion-cpp/@qvac/infer-base": ["@qvac/infer-base@0.2.2", "", { "dependencies": { "@qvac/error": "^0.1.0", "@qvac/logging": "^0.1.0", "bare-events": "2.4.2", "bare-os": "^3.2.0", "bare-path": "^3.0.0" }, "peerDependencies": { "@qvac/dl-hyperdrive": "^0.1.0" } }, "sha512-8D/5PRIy/A+Uhg1ZSoJMu5FSPDHdrMKZoPnAzTZMceikTj+BWwTV//j8pXbRABsjrFbqBegvr/LujirC9I2cRQ=="], + + "@qvac/diffusion-cpp/bare-os": ["bare-os@3.8.0", "", {}, "sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg=="], + "@qvac/embed-llamacpp/@qvac/infer-base": ["@qvac/infer-base@0.2.2", "", { "dependencies": { "@qvac/error": "^0.1.0", "@qvac/logging": "^0.1.0", "bare-events": "2.4.2", "bare-os": "^3.2.0", "bare-path": "^3.0.0" }, "peerDependencies": { "@qvac/dl-hyperdrive": "^0.1.0" } }, "sha512-8D/5PRIy/A+Uhg1ZSoJMu5FSPDHdrMKZoPnAzTZMceikTj+BWwTV//j8pXbRABsjrFbqBegvr/LujirC9I2cRQ=="], "@qvac/llm-llamacpp/@qvac/infer-base": ["@qvac/infer-base@0.2.2", "", { "dependencies": { "@qvac/error": "^0.1.0", "@qvac/logging": "^0.1.0", "bare-events": "2.4.2", "bare-os": "^3.2.0", "bare-path": "^3.0.0" }, "peerDependencies": { "@qvac/dl-hyperdrive": "^0.1.0" } }, "sha512-8D/5PRIy/A+Uhg1ZSoJMu5FSPDHdrMKZoPnAzTZMceikTj+BWwTV//j8pXbRABsjrFbqBegvr/LujirC9I2cRQ=="], @@ -2605,12 +2675,18 @@ "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "eslint-plugin-es/eslint-utils": ["eslint-utils@2.1.0", "", { "dependencies": { "eslint-visitor-keys": "^1.1.0" } }, "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="], + "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-plugin-n/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], + "estree-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -2633,6 +2709,10 @@ "lighthouse-logger/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], + + "load-json-file/type-fest": ["type-fest@0.3.1", "", {}, "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ=="], + "log-symbols/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], "mdast-util-from-markdown/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], @@ -2683,6 +2763,8 @@ "parse-json/type-fest": ["type-fest@3.13.1", "", {}, "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g=="], + "pkg-conf/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -2707,6 +2789,8 @@ "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], + "standard/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], + "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2801,6 +2885,10 @@ "@npmcli/promise-spawn/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], + "@qvac/diffusion-cpp/@qvac/infer-base/bare-events": ["bare-events@2.4.2", "", {}, "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q=="], + + "@qvac/diffusion-cpp/@qvac/infer-base/bare-os": ["bare-os@3.6.2", "", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="], + "@qvac/embed-llamacpp/@qvac/infer-base/bare-events": ["bare-events@2.4.2", "", {}, "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q=="], "@qvac/llm-llamacpp/@qvac/infer-base/bare-events": ["bare-events@2.4.2", "", {}, "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q=="], @@ -2837,6 +2925,8 @@ "connect/finalhandler/statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="], + "eslint-plugin-es/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@1.3.0", "", {}, "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="], + "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], @@ -2871,8 +2961,30 @@ "ora/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], + "pkg-conf/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], + "react-native/babel-plugin-syntax-hermes-parser/hermes-parser": ["hermes-parser@0.32.0", "", { "dependencies": { "hermes-estree": "0.32.0" } }, "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw=="], + "standard/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], + + "standard/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], + + "standard/eslint/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "standard/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], + + "standard/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], + + "standard/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "standard/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], + + "standard/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + + "standard/eslint/globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="], + + "standard/eslint/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "to-vfile/vfile/unist-util-stringify-position": ["unist-util-stringify-position@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.2" } }, "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="], "to-vfile/vfile/vfile-message": ["vfile-message@2.0.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ=="], @@ -2917,8 +3029,18 @@ "ora/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "pkg-conf/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], + + "pkg-conf/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], + "react-native/babel-plugin-syntax-hermes-parser/hermes-parser/hermes-estree": ["hermes-estree@0.32.0", "", {}, "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ=="], + "standard/eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "standard/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], + + "standard/eslint/globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + "unified-engine/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "unified-engine/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -2937,6 +3059,8 @@ "ora/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + "pkg-conf/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "@react-native/community-cli-plugin/@react-native/dev-middleware/serve-static/send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], } } diff --git a/packages/sdk/client/api/generation.ts b/packages/sdk/client/api/generation.ts new file mode 100644 index 0000000000..1d14e7786f --- /dev/null +++ b/packages/sdk/client/api/generation.ts @@ -0,0 +1,199 @@ +import { + generationStreamResponseSchema, + type GenerationStreamRequest, + type GenerationClientParams, + type DiffusionStats, +} from "@/schemas"; +import { stream as streamRpc } from "@/client/rpc/rpc-client"; + +export interface GenerationProgressTick { + step: number; + totalSteps: number; + elapsedMs: number; +} + +interface GenerationResult { + outputStream: AsyncGenerator<{ data: string; outputIndex: number }>; + progressStream: AsyncGenerator; + outputs: Promise; + stats: Promise; +} + +/** + * Generate outputs using a loaded diffusion model. + * + * Supports text-to-image, image-to-image, and (future) video generation. + * img2img is activated by providing `init_image` (and optionally `strength`). + * + * @param params - Generation parameters + * @param params.modelId - The identifier of the loaded diffusion model + * @param params.prompt - Text prompt describing the desired output + * @param params.init_image - Source image for img2img (base64 string or Buffer). Omit for txt2img. + * @param params.strength - How much to transform the source: 0 = keep, 1 = ignore. Only used with init_image. + * @param params.stream - Whether to stream outputs as they arrive (true) or return all at once (false). Defaults to false. + * @returns Object with outputStream generator, progressStream generator, outputs promise, and stats promise + * @example + * ```typescript + * // txt2img (non-streaming) + * const { outputs, stats } = generation({ modelId, prompt: "a cat" }); + * const buffers = await outputs; + * + * // txt2img (streaming with progress) + * const { outputStream, progressStream } = generation({ modelId, prompt: "a cat", stream: true }); + * // consume progress in parallel + * (async () => { for await (const { step, totalSteps } of progressStream) console.log(`${step}/${totalSteps}`); })(); + * for await (const { data, outputIndex } of outputStream) { + * fs.writeFileSync(`output_${outputIndex}.png`, Buffer.from(data, "base64")); + * } + * + * // img2img + * const { outputs } = generation({ + * modelId, + * prompt: "watercolor style", + * init_image: fs.readFileSync("photo.jpg"), + * strength: 0.75, + * }); + * ``` + */ +export function generation(params: GenerationClientParams): GenerationResult { + const { stream: streaming, init_image, ...rest } = params; + + const request: GenerationStreamRequest = { + type: "generationStream", + ...rest, + ...(init_image != null && { + init_image: + typeof init_image === "string" + ? init_image + : init_image.toString("base64"), + }), + }; + + let statsResolver: (value: DiffusionStats | undefined) => void = () => {}; + let statsRejecter: (error: unknown) => void = () => {}; + const statsPromise = new Promise( + (resolve, reject) => { + statsResolver = resolve; + statsRejecter = reject; + }, + ); + statsPromise.catch(() => {}); + + const outputQueue: { data: string; outputIndex: number }[] = []; + const progressQueue: GenerationProgressTick[] = []; + const collectedBuffers: Buffer[] = []; + let outputDone = false; + let progressDone = false; + let outputResolve: (() => void) | null = null; + let progressResolve: (() => void) | null = null; + let streamError: Error | null = null; + + let outputsResolver: (value: Buffer[]) => void = () => {}; + let outputsRejecter: (error: unknown) => void = () => {}; + const outputsPromise = new Promise((resolve, reject) => { + outputsResolver = resolve; + outputsRejecter = reject; + }); + outputsPromise.catch(() => {}); + + const processResponses = async () => { + try { + for await (const response of streamRpc(request)) { + if ( + response && + typeof response === "object" && + "type" in response && + response.type === "generationStream" + ) { + const parsed = generationStreamResponseSchema.parse(response); + + if (parsed.step != null && parsed.totalSteps != null && parsed.elapsedMs != null) { + progressQueue.push({ step: parsed.step, totalSteps: parsed.totalSteps, elapsedMs: parsed.elapsedMs }); + if (progressResolve) { + progressResolve(); + progressResolve = null; + } + } + + if (parsed.data) { + const outputEntry = { data: parsed.data, outputIndex: parsed.outputIndex ?? 0 }; + outputQueue.push(outputEntry); + collectedBuffers.push(Buffer.from(parsed.data, "base64")); + if (outputResolve) { + outputResolve(); + outputResolve = null; + } + } + + if (parsed.done) { + statsResolver(parsed.stats); + outputsResolver(collectedBuffers); + } + } + } + } catch (error) { + streamError = error instanceof Error ? error : new Error(String(error)); + statsRejecter(streamError); + outputsRejecter(streamError); + } + + outputDone = true; + progressDone = true; + if (outputResolve) { + outputResolve(); + outputResolve = null; + } + if (progressResolve) { + progressResolve(); + progressResolve = null; + } + }; + + void processResponses(); + + const progressStream = (async function* (): AsyncGenerator { + while (true) { + if (progressQueue.length > 0) { + yield progressQueue.shift()!; + } else if (progressDone) { + if (streamError) throw streamError; + return; + } else { + await new Promise((resolve) => { progressResolve = resolve; }); + } + } + })(); + + if (streaming) { + const outputStream = (async function* () { + while (true) { + if (outputQueue.length > 0) { + yield outputQueue.shift()!; + } else if (outputDone) { + if (streamError) throw streamError; + return; + } else { + await new Promise((resolve) => { outputResolve = resolve; }); + } + } + })(); + + return { + outputStream, + progressStream, + outputs: outputsPromise, + stats: statsPromise, + }; + } + + const outputStream = (async function* () { + // Empty generator for non-streaming mode + })(); + + return { + outputStream, + progressStream, + outputs: outputsPromise, + stats: statsPromise, + }; +} diff --git a/packages/sdk/client/api/index.ts b/packages/sdk/client/api/index.ts index 28dd4aedf3..888155f11d 100644 --- a/packages/sdk/client/api/index.ts +++ b/packages/sdk/client/api/index.ts @@ -26,6 +26,7 @@ export { textToSpeech } from "./text-to-speech"; export { getModelInfo } from "./get-model-info"; export { ocr } from "./ocr"; export { invokePlugin, invokePluginStream } from "./invoke-plugin"; +export { generation, type GenerationProgressTick } from "./generation"; export { modelRegistryList, modelRegistrySearch, diff --git a/packages/sdk/examples/diffusion-flux2-klein.ts b/packages/sdk/examples/diffusion-flux2-klein.ts new file mode 100644 index 0000000000..1b9593258c --- /dev/null +++ b/packages/sdk/examples/diffusion-flux2-klein.ts @@ -0,0 +1,49 @@ +import { loadModel, unloadModel, generation, FLUX_2_KLEIN_4B_Q4_0, FLUX_2_KLEIN_4B_VAE, QWEN3_4B_Q4_K_M } from "@qvac/sdk"; +import fs from "fs"; +import path from "path"; + +// FLUX.2 [klein] uses a split-layout: separate diffusion model + LLM text encoder + VAE +const diffusionModelSrc = process.argv[2] || FLUX_2_KLEIN_4B_Q4_0; +const llmModelSrc = process.argv[3] || QWEN3_4B_Q4_K_M; +const vaeModelSrc = process.argv[4] || FLUX_2_KLEIN_4B_VAE; +const prompt = process.argv[5] || "a futuristic city at sunset, photorealistic"; +const outputDir = process.argv[6] || "."; + +console.log("Loading FLUX.2 [klein] split-layout model..."); + +const modelId = await loadModel({ + modelSrc: diffusionModelSrc, + modelType: "diffusion", + modelConfig: { + device: "gpu", + threads: 4, + llmModelSrc, + vaeModelSrc, + }, + onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`), +}); +console.log(`Model loaded: ${modelId}`); + +console.log(`\nGenerating: "${prompt}"`); + +const { outputStream, stats } = generation({ + modelId, + prompt, + width: 512, + height: 512, + steps: 20, + guidance: 3.5, + seed: -1, + stream: true, +}); + +for await (const { data, outputIndex } of outputStream) { + const outputPath = path.join(outputDir, `flux2_${outputIndex}.png`); + fs.writeFileSync(outputPath, Buffer.from(data, "base64")); + console.log(`Saved: ${outputPath}`); +} + +console.log("\nStats:", await stats); +await unloadModel({ modelId, clearStorage: false }); +console.log("Done."); +process.exit(0); diff --git a/packages/sdk/examples/diffusion-img2img.ts b/packages/sdk/examples/diffusion-img2img.ts new file mode 100644 index 0000000000..5463bf5335 --- /dev/null +++ b/packages/sdk/examples/diffusion-img2img.ts @@ -0,0 +1,54 @@ +import { loadModel, unloadModel, generation, FLUX_2_KLEIN_4B_Q4_0, FLUX_2_KLEIN_4B_VAE, QWEN3_4B_Q4_K_M } from "@qvac/sdk"; +import fs from "fs"; +import path from "path"; + +const modelSrc = process.argv[2] || FLUX_2_KLEIN_4B_Q4_0; +const inputImagePath = process.argv[3] || path.resolve("examples/image/test.jpg"); + +if (!fs.existsSync(inputImagePath)) { + console.error(`Input image not found: ${inputImagePath}`); + console.error( + "Usage: bun run examples/diffusion-img2img.ts [model-src] [input-image] [prompt] [strength] [output-dir]", + ); + process.exit(1); +} + +const prompt = process.argv[4] || "watercolor painting style"; +const strength = parseFloat(process.argv[5] || "0.75"); +const outputDir = process.argv[6] || "."; + +console.log(`Loading diffusion model...`); +// FLUX.2 models require companion LLM + VAE models +const modelId = await loadModel({ + modelSrc, + modelType: "diffusion", + modelConfig: { device: "gpu", threads: 4, llmModelSrc: QWEN3_4B_Q4_K_M, vaeModelSrc: FLUX_2_KLEIN_4B_VAE }, + onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`), +}); +console.log(`Model loaded: ${modelId}`); + +console.log(`\nimg2img from: ${inputImagePath}`); +console.log(`Prompt: "${prompt}", strength: ${strength}`); + +const { outputs, stats } = generation({ + modelId, + prompt, + init_image: fs.readFileSync(inputImagePath), + strength, + width: 512, + height: 512, + steps: 20, + cfg_scale: 7.0, +}); + +const buffers = await outputs; +for (let i = 0; i < buffers.length; i++) { + const outputPath = path.join(outputDir, `img2img_${i}.png`); + fs.writeFileSync(outputPath, buffers[i]!); + console.log(`Saved: ${outputPath}`); +} + +console.log("\nStats:", await stats); +await unloadModel({ modelId, clearStorage: false }); +console.log("Done."); +process.exit(0); diff --git a/packages/sdk/examples/diffusion-txt2img.ts b/packages/sdk/examples/diffusion-txt2img.ts new file mode 100644 index 0000000000..cff900278b --- /dev/null +++ b/packages/sdk/examples/diffusion-txt2img.ts @@ -0,0 +1,44 @@ +import { loadModel, unloadModel, generation, FLUX_2_KLEIN_4B_Q4_0, FLUX_2_KLEIN_4B_VAE, QWEN3_4B_Q4_K_M } from "@qvac/sdk"; +import fs from "fs"; +import path from "path"; + +const modelSrc = process.argv[2] || FLUX_2_KLEIN_4B_Q4_0; + +const prompt = + process.argv[3] || + "a photo of a cat sitting on a windowsill, golden hour lighting"; +const outputDir = process.argv[4] || "."; + +console.log(`Loading diffusion model...`); +// FLUX.2 models require companion LLM + VAE models +const modelId = await loadModel({ + modelSrc, + modelType: "diffusion", + modelConfig: { device: "gpu", threads: 4, llmModelSrc: QWEN3_4B_Q4_K_M, vaeModelSrc: FLUX_2_KLEIN_4B_VAE }, + onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`), +}); +console.log(`Model loaded: ${modelId}`); + +console.log(`\nGenerating: "${prompt}"`); + +const { outputStream, stats } = generation({ + modelId, + prompt, + width: 512, + height: 512, + steps: 20, + cfg_scale: 7.0, + seed: -1, + stream: true, +}); + +for await (const { data, outputIndex } of outputStream) { + const outputPath = path.join(outputDir, `output_${outputIndex}.png`); + fs.writeFileSync(outputPath, Buffer.from(data, "base64")); + console.log(`Saved: ${outputPath}`); +} + +console.log("\nStats:", await stats); +await unloadModel({ modelId, clearStorage: false }); +console.log("Done."); +process.exit(0); diff --git a/packages/sdk/index.ts b/packages/sdk/index.ts index 8d6f4bc654..b01762d121 100644 --- a/packages/sdk/index.ts +++ b/packages/sdk/index.ts @@ -28,6 +28,8 @@ export { ocr, invokePlugin, invokePluginStream, + generation, + type GenerationProgressTick, modelRegistryList, modelRegistrySearch, modelRegistryGetModel, @@ -71,6 +73,9 @@ export { type OCRClientParams, type OCRTextBlock, type OCROptions, + type GenerationClientParams, + type GenerationStreamResponse, + type DiffusionStats, definePlugin, defineHandler, type QvacPlugin, @@ -84,6 +89,7 @@ export { PLUGIN_NMT, PLUGIN_TTS, PLUGIN_OCR, + PLUGIN_DIFFUSION, SDK_DEFAULT_PLUGINS, type BuiltinPlugin, type ProfilerMode, diff --git a/packages/sdk/models/history/7481157e3.txt b/packages/sdk/models/history/7481157e3.txt new file mode 100644 index 0000000000..865b53a824 --- /dev/null +++ b/packages/sdk/models/history/7481157e3.txt @@ -0,0 +1,17 @@ +commit=7481157e314d68f268a2fcac10af36e576339635 +timestamp=2026-03-19T14:12:56.864Z +previous_count=312 +new_count=322 + +[added] +FLUX_2_KLEIN_4B_VAE +SD_V2_1_1B_Q4_0 +SD_V2_1_1B_Q8_0 +SDXL_BASE_1_0_3B_Q4_0 +SDXL_BASE_1_0_3B_Q8_0 +FLUX_2_KLEIN_4B_Q4_0 +FLUX_2_KLEIN_4B_Q4_K_M +FLUX_2_KLEIN_4B_Q6_K +FLUX_2_KLEIN_4B_Q8_0 +QWEN3_4B_Q4_K_M + diff --git a/packages/sdk/models/history/d514e414.txt b/packages/sdk/models/history/d514e414.txt new file mode 100644 index 0000000000..276d959d19 --- /dev/null +++ b/packages/sdk/models/history/d514e414.txt @@ -0,0 +1,17 @@ +commit=d514e414b345258b6fcac5887261002a8cb5beca +timestamp=2026-03-16T05:58:16.168Z +previous_count=310 +new_count=320 + +[added] +FLUX_2_KLEIN_4B_VAE +SD_V2_1_1B_Q4_0 +SD_V2_1_1B_Q8_0 +SDXL_BASE_1_0_3B_Q4_0 +SDXL_BASE_1_0_3B_Q8_0 +FLUX_2_KLEIN_4B_Q4_0 +FLUX_2_KLEIN_4B_Q4_K_M +FLUX_2_KLEIN_4B_Q6_K +FLUX_2_KLEIN_4B_Q8_0 +QWEN3_4B_Q4_K_M + diff --git a/packages/sdk/models/registry/models.ts b/packages/sdk/models/registry/models.ts index fe90c6501a..985c121a9f 100644 --- a/packages/sdk/models/registry/models.ts +++ b/packages/sdk/models/registry/models.ts @@ -19,6 +19,7 @@ export type RegistryItem = { | "tts" | "ocr" | "parakeet" + | "diffusion" | "other"; expectedSize: number; sha256Checksum: string; @@ -57,6 +58,7 @@ export type ModelConstant = { | "tts" | "ocr" | "parakeet" + | "diffusion" | "other"; engine: string; quantization: string; @@ -64,6 +66,196 @@ export type ModelConstant = { }; export const models = [ + { + name: "FLUX_2_KLEIN_4B_VAE", + registryPath: + "black-forest-labs/FLUX.2-klein-4B/resolve/5e67da950fce4a097bc150c22958a05716994cea/vae/diffusion_pytorch_model.safetensors", + registrySource: "hf", + blobCoreKey: + "6309722b3460d91d38ad7526875ecfa29183245826b717949c55ba443093d963", + blobBlockOffset: 1020767, + blobBlockLength: 2566, + blobByteOffset: 66887747769, + modelId: "diffusion_pytorch_model.safetensors", + addon: "diffusion", + expectedSize: 168120878, + sha256Checksum: + "ca70d2202afe6415bdbcb8793ba8cd99fd159cfe6192381504d6c4d3036e0f04", + engine: "sdcpp-generation", + quantization: "", + params: "", + }, + { + name: "SD_V2_1_1B_Q4_0", + registryPath: + "gpustack/stable-diffusion-v2-1-GGUF/resolve/12ddc22724f6da35f0b6006e459fae66eaf56931/stable-diffusion-v2-1-Q4_0.gguf", + registrySource: "hf", + blobCoreKey: + "6309722b3460d91d38ad7526875ecfa29183245826b717949c55ba443093d963", + blobBlockOffset: 1220879, + blobBlockLength: 33348, + blobByteOffset: 80001604971, + modelId: "stable-diffusion-v2-1-Q4_0.gguf", + addon: "diffusion", + expectedSize: 2185459424, + sha256Checksum: + "27740067fae2c988f64839ae806d989eb6d5aa6cfe5d47c8994c100677ef97e4", + engine: "sdcpp-generation", + quantization: "Q4_0", + params: "1B", + }, + { + name: "SD_V2_1_1B_Q8_0", + registryPath: + "gpustack/stable-diffusion-v2-1-GGUF/resolve/12ddc22724f6da35f0b6006e459fae66eaf56931/stable-diffusion-v2-1-Q8_0.gguf", + registrySource: "hf", + blobCoreKey: + "6309722b3460d91d38ad7526875ecfa29183245826b717949c55ba443093d963", + blobBlockOffset: 1185437, + blobBlockLength: 35442, + blobByteOffset: 77678899947, + modelId: "stable-diffusion-v2-1-Q8_0.gguf", + addon: "diffusion", + expectedSize: 2322705024, + sha256Checksum: + "7b73fa47b4d1401bdf3a0898827fac94bced6633bf64ef7fe55492b6115cc74b", + engine: "sdcpp-generation", + quantization: "Q8_0", + params: "1B", + }, + { + name: "SDXL_BASE_1_0_3B_Q4_0", + registryPath: + "gpustack/stable-diffusion-xl-base-1.0-GGUF/resolve/5f58340891db3ef66a79758c2dcddad92b1de169/stable-diffusion-xl-base-1.0-Q4_0.gguf", + registrySource: "hf", + blobCoreKey: + "6309722b3460d91d38ad7526875ecfa29183245826b717949c55ba443093d963", + blobBlockOffset: 1254227, + blobBlockLength: 60120, + blobByteOffset: 82187064395, + modelId: "stable-diffusion-xl-base-1.0-Q4_0.gguf", + addon: "diffusion", + expectedSize: 3940010720, + sha256Checksum: + "4ab9818c9b3428eca96834c51fe294885608480991463f55bd9be53c822567c3", + engine: "sdcpp-generation", + quantization: "Q4_0", + params: "3B", + }, + { + name: "SDXL_BASE_1_0_3B_Q8_0", + registryPath: + "gpustack/stable-diffusion-xl-base-1.0-GGUF/resolve/5f58340891db3ef66a79758c2dcddad92b1de169/stable-diffusion-xl-base-1.0-Q8_0.gguf", + registrySource: "hf", + blobCoreKey: + "6309722b3460d91d38ad7526875ecfa29183245826b717949c55ba443093d963", + blobBlockOffset: 1314347, + blobBlockLength: 76919, + blobByteOffset: 86127075115, + modelId: "stable-diffusion-xl-base-1.0-Q8_0.gguf", + addon: "diffusion", + expectedSize: 5040957760, + sha256Checksum: + "2ef973152d2fbe27e37e4fd5ec3569dec1f828ee279975e60acc12bc78c9f981", + engine: "sdcpp-generation", + quantization: "Q8_0", + params: "3B", + }, + { + name: "FLUX_2_KLEIN_4B_Q4_0", + registryPath: + "unsloth/FLUX.2-klein-4B-GGUF/resolve/8342a6a97b2d18acae5d62124735c39ba23060e2/flux-2-klein-4b-Q4_0.gguf", + registrySource: "hf", + blobCoreKey: + "d90c0263033385abdb2290a69936d5cef030d5c63c87baa33c3a4a2d01b84ca8", + blobBlockOffset: 101752, + blobBlockLength: 37543, + blobByteOffset: 6666784333, + modelId: "flux-2-klein-4b-Q4_0.gguf", + addon: "diffusion", + expectedSize: 2460394048, + sha256Checksum: + "6b00d254ded73de7e40be79e0682dc8a5e9bd61e5eebe97199ed33615a52ba62", + engine: "sdcpp-generation", + quantization: "Q4_0", + params: "4B", + }, + { + name: "FLUX_2_KLEIN_4B_Q4_K_M", + registryPath: + "unsloth/FLUX.2-klein-4B-GGUF/resolve/8342a6a97b2d18acae5d62124735c39ba23060e2/flux-2-klein-4b-Q4_K_M.gguf", + registrySource: "hf", + blobCoreKey: + "d90c0263033385abdb2290a69936d5cef030d5c63c87baa33c3a4a2d01b84ca8", + blobBlockOffset: 256940, + blobBlockLength: 39739, + blobByteOffset: 16837096717, + modelId: "flux-2-klein-4b-Q4_K_M.gguf", + addon: "diffusion", + expectedSize: 2604311104, + sha256Checksum: + "0b25d143c8469b342bc5af3bce92b783bf6b0636d285f7b2f75e38af63af9a15", + engine: "sdcpp-generation", + quantization: "Q4_K_M", + params: "4B", + }, + { + name: "FLUX_2_KLEIN_4B_Q6_K", + registryPath: + "unsloth/FLUX.2-klein-4B-GGUF/resolve/8342a6a97b2d18acae5d62124735c39ba23060e2/flux-2-klein-4b-Q6_K.gguf", + registrySource: "hf", + blobCoreKey: + "d90c0263033385abdb2290a69936d5cef030d5c63c87baa33c3a4a2d01b84ca8", + blobBlockOffset: 204918, + blobBlockLength: 52022, + blobByteOffset: 13427823309, + modelId: "flux-2-klein-4b-Q6_K.gguf", + addon: "diffusion", + expectedSize: 3409273408, + sha256Checksum: + "fb3b5430d9229f982616c7db084deff1db5035d0cb6558f2d4f704cfe5e609e2", + engine: "sdcpp-generation", + quantization: "Q6_K", + params: "4B", + }, + { + name: "FLUX_2_KLEIN_4B_Q8_0", + registryPath: + "unsloth/FLUX.2-klein-4B-GGUF/resolve/8342a6a97b2d18acae5d62124735c39ba23060e2/flux-2-klein-4b-Q8_0.gguf", + registrySource: "hf", + blobCoreKey: + "d90c0263033385abdb2290a69936d5cef030d5c63c87baa33c3a4a2d01b84ca8", + blobBlockOffset: 139295, + blobBlockLength: 65623, + blobByteOffset: 9127178381, + modelId: "flux-2-klein-4b-Q8_0.gguf", + addon: "diffusion", + expectedSize: 4300644928, + sha256Checksum: + "24a812e8f9b640e21c784164ea48571d8017ca22873696f4badeeabb006d509c", + engine: "sdcpp-generation", + quantization: "Q8_0", + params: "4B", + }, + { + name: "QWEN3_4B_Q4_K_M", + registryPath: + "unsloth/Qwen3-4B-GGUF/resolve/9b5c4f3506ac99d74e59ecd9aa9abb05537b7f59/Qwen3-4B-Q4_K_M.gguf", + registrySource: "hf", + blobCoreKey: + "d90c0263033385abdb2290a69936d5cef030d5c63c87baa33c3a4a2d01b84ca8", + blobBlockOffset: 296679, + blobBlockLength: 38106, + blobByteOffset: 19441407821, + modelId: "Qwen3-4B-Q4_K_M.gguf", + addon: "diffusion", + expectedSize: 2497281312, + sha256Checksum: + "f6f851777709861056efcdad3af01da38b31223a3ba26e61a4f8bf3a2195813a", + engine: "sdcpp-generation", + quantization: "Q4_K_M", + params: "4B", + }, { name: "GTE_LARGE_FP16", registryPath: @@ -292,6 +484,25 @@ export const models = [ quantization: "q8", params: "2B", }, + { + name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16", + registryPath: + "ggml-org/SmolVLM2-500M-Video-Instruct-GGUF/resolve/ccd7aae53bcb1997355c2f094959e72b3642ce17/mmproj-SmolVLM2-500M-Video-Instruct-f16.gguf", + registrySource: "hf", + blobCoreKey: + "4035e66388340ff7c1f291e7c0101855f5d0b2c7085f3ff62213573a2cd5dd17", + blobBlockOffset: 377382, + blobBlockLength: 3044, + blobByteOffset: 24729912473, + modelId: "mmproj-SmolVLM2-500M-Video-Instruct-f16.gguf", + addon: "llm", + expectedSize: 199470624, + sha256Checksum: + "b5dc8ebe7cbeab66a5369693960a52515d7824f13d4063ceca78431f2a6b59b0", + engine: "llamacpp-completion", + quantization: "f16", + params: "500M", + }, { name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0", registryPath: @@ -311,6 +522,25 @@ export const models = [ quantization: "q8_0", params: "500M", }, + { + name: "SMOLVLM2_500M_MULTIMODAL_F16", + registryPath: + "ggml-org/SmolVLM2-500M-Video-Instruct-GGUF/resolve/ccd7aae53bcb1997355c2f094959e72b3642ce17/SmolVLM2-500M-Video-Instruct-f16.gguf", + registrySource: "hf", + blobCoreKey: + "4035e66388340ff7c1f291e7c0101855f5d0b2c7085f3ff62213573a2cd5dd17", + blobBlockOffset: 364863, + blobBlockLength: 12519, + blobByteOffset: 23909487769, + modelId: "SmolVLM2-500M-Video-Instruct-f16.gguf", + addon: "llm", + expectedSize: 820424704, + sha256Checksum: + "80f7e3f04bc2d3324ac1a9f52f5776fe13a69912adf74f8e7edacf773d140d77", + engine: "llamacpp-completion", + quantization: "f16", + params: "500M", + }, { name: "SMOLVLM2_500M_MULTIMODAL_Q8_0", registryPath: @@ -1454,44 +1684,6 @@ export const models = [ quantization: "q4", params: "1.7B", }, - { - name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16", - registryPath: - "ggml-org/SmolVLM2-500M-Video-Instruct-GGUF/resolve/ccd7aae53bcb1997355c2f094959e72b3642ce17/mmproj-SmolVLM2-500M-Video-Instruct-f16.gguf", - registrySource: "hf", - blobCoreKey: - "4035e66388340ff7c1f291e7c0101855f5d0b2c7085f3ff62213573a2cd5dd17", - blobBlockOffset: 377382, - blobBlockLength: 3044, - blobByteOffset: 24729912473, - modelId: "mmproj-SmolVLM2-500M-Video-Instruct-f16.gguf", - addon: "nmt", - expectedSize: 199470624, - sha256Checksum: - "b5dc8ebe7cbeab66a5369693960a52515d7824f13d4063ceca78431f2a6b59b0", - engine: "nmtcpp-translation", - quantization: "f16", - params: "500M", - }, - { - name: "SMOLVLM2_500M_MULTIMODAL_F16", - registryPath: - "ggml-org/SmolVLM2-500M-Video-Instruct-GGUF/resolve/ccd7aae53bcb1997355c2f094959e72b3642ce17/SmolVLM2-500M-Video-Instruct-f16.gguf", - registrySource: "hf", - blobCoreKey: - "4035e66388340ff7c1f291e7c0101855f5d0b2c7085f3ff62213573a2cd5dd17", - blobBlockOffset: 364863, - blobBlockLength: 12519, - blobByteOffset: 23909487769, - modelId: "SmolVLM2-500M-Video-Instruct-f16.gguf", - addon: "nmt", - expectedSize: 820424704, - sha256Checksum: - "80f7e3f04bc2d3324ac1a9f52f5776fe13a69912adf74f8e7edacf773d140d77", - engine: "nmtcpp-translation", - quantization: "f16", - params: "500M", - }, { name: "BERGAMOT_AR_EN_LEX", registryPath: @@ -6529,8 +6721,8 @@ export const models = [ // Individual model constants for direct import/use with loadModel // These contain all metadata and can be used directly: loadModel({ modelSrc: WHISPER_TINY, ... }) -export const GTE_LARGE_FP16 = { - name: "GTE_LARGE_FP16", +export const FLUX_2_KLEIN_4B_VAE = { + name: "FLUX_2_KLEIN_4B_VAE", src: `registry://${models[0].registrySource}/${models[0].registryPath}`, registryPath: models[0].registryPath, registrySource: models[0].registrySource, @@ -6547,8 +6739,8 @@ export const GTE_LARGE_FP16 = { params: models[0].params, } as const; -export const GTE_LARGE_335M_FP16_SHARD = { - name: "GTE_LARGE_335M_FP16_SHARD", +export const SD_V2_1_1B_Q4_0 = { + name: "SD_V2_1_1B_Q4_0", src: `registry://${models[1].registrySource}/${models[1].registryPath}`, registryPath: models[1].registryPath, registrySource: models[1].registrySource, @@ -6565,8 +6757,8 @@ export const GTE_LARGE_335M_FP16_SHARD = { params: models[1].params, } as const; -export const GTE_LARGE_335M_FP16_TENSORS = { - name: "GTE_LARGE_335M_FP16_TENSORS", +export const SD_V2_1_1B_Q8_0 = { + name: "SD_V2_1_1B_Q8_0", src: `registry://${models[2].registrySource}/${models[2].registryPath}`, registryPath: models[2].registryPath, registrySource: models[2].registrySource, @@ -6583,8 +6775,8 @@ export const GTE_LARGE_335M_FP16_TENSORS = { params: models[2].params, } as const; -export const EMBEDDINGGEMMA_300M_BF16 = { - name: "EMBEDDINGGEMMA_300M_BF16", +export const SDXL_BASE_1_0_3B_Q4_0 = { + name: "SDXL_BASE_1_0_3B_Q4_0", src: `registry://${models[3].registrySource}/${models[3].registryPath}`, registryPath: models[3].registryPath, registrySource: models[3].registrySource, @@ -6601,8 +6793,8 @@ export const EMBEDDINGGEMMA_300M_BF16 = { params: models[3].params, } as const; -export const EMBEDDINGGEMMA_300M_F32 = { - name: "EMBEDDINGGEMMA_300M_F32", +export const SDXL_BASE_1_0_3B_Q8_0 = { + name: "SDXL_BASE_1_0_3B_Q8_0", src: `registry://${models[4].registrySource}/${models[4].registryPath}`, registryPath: models[4].registryPath, registrySource: models[4].registrySource, @@ -6619,8 +6811,8 @@ export const EMBEDDINGGEMMA_300M_F32 = { params: models[4].params, } as const; -export const EMBEDDINGGEMMA_300M_Q4_0 = { - name: "EMBEDDINGGEMMA_300M_Q4_0", +export const FLUX_2_KLEIN_4B_Q4_0 = { + name: "FLUX_2_KLEIN_4B_Q4_0", src: `registry://${models[5].registrySource}/${models[5].registryPath}`, registryPath: models[5].registryPath, registrySource: models[5].registrySource, @@ -6637,8 +6829,8 @@ export const EMBEDDINGGEMMA_300M_Q4_0 = { params: models[5].params, } as const; -export const EMBEDDINGGEMMA_300M_Q8_0 = { - name: "EMBEDDINGGEMMA_300M_Q8_0", +export const FLUX_2_KLEIN_4B_Q4_K_M = { + name: "FLUX_2_KLEIN_4B_Q4_K_M", src: `registry://${models[6].registrySource}/${models[6].registryPath}`, registryPath: models[6].registryPath, registrySource: models[6].registrySource, @@ -6655,8 +6847,8 @@ export const EMBEDDINGGEMMA_300M_Q8_0 = { params: models[6].params, } as const; -export const SALAMANDRATA_2B_INST_Q4 = { - name: "SALAMANDRATA_2B_INST_Q4", +export const FLUX_2_KLEIN_4B_Q6_K = { + name: "FLUX_2_KLEIN_4B_Q6_K", src: `registry://${models[7].registrySource}/${models[7].registryPath}`, registryPath: models[7].registryPath, registrySource: models[7].registrySource, @@ -6673,8 +6865,8 @@ export const SALAMANDRATA_2B_INST_Q4 = { params: models[7].params, } as const; -export const SALAMANDRATA_2B_INST_Q8 = { - name: "SALAMANDRATA_2B_INST_Q8", +export const FLUX_2_KLEIN_4B_Q8_0 = { + name: "FLUX_2_KLEIN_4B_Q8_0", src: `registry://${models[8].registrySource}/${models[8].registryPath}`, registryPath: models[8].registryPath, registrySource: models[8].registrySource, @@ -6691,8 +6883,8 @@ export const SALAMANDRATA_2B_INST_Q8 = { params: models[8].params, } as const; -export const MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0 = { - name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0", +export const QWEN3_4B_Q4_K_M = { + name: "QWEN3_4B_Q4_K_M", src: `registry://${models[9].registrySource}/${models[9].registryPath}`, registryPath: models[9].registryPath, registrySource: models[9].registrySource, @@ -6709,8 +6901,8 @@ export const MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0 = { params: models[9].params, } as const; -export const SMOLVLM2_500M_MULTIMODAL_Q8_0 = { - name: "SMOLVLM2_500M_MULTIMODAL_Q8_0", +export const GTE_LARGE_FP16 = { + name: "GTE_LARGE_FP16", src: `registry://${models[10].registrySource}/${models[10].registryPath}`, registryPath: models[10].registryPath, registrySource: models[10].registrySource, @@ -6727,8 +6919,8 @@ export const SMOLVLM2_500M_MULTIMODAL_Q8_0 = { params: models[10].params, } as const; -export const LASER_DOLPHIN_2X7B_INST_Q2_K = { - name: "LASER_DOLPHIN_2X7B_INST_Q2_K", +export const GTE_LARGE_335M_FP16_SHARD = { + name: "GTE_LARGE_335M_FP16_SHARD", src: `registry://${models[11].registrySource}/${models[11].registryPath}`, registryPath: models[11].registryPath, registrySource: models[11].registrySource, @@ -6745,8 +6937,8 @@ export const LASER_DOLPHIN_2X7B_INST_Q2_K = { params: models[11].params, } as const; -export const LLAMA_TOOL_CALLING_1B_INST_Q4_K = { - name: "LLAMA_TOOL_CALLING_1B_INST_Q4_K", +export const GTE_LARGE_335M_FP16_TENSORS = { + name: "GTE_LARGE_335M_FP16_TENSORS", src: `registry://${models[12].registrySource}/${models[12].registryPath}`, registryPath: models[12].registryPath, registrySource: models[12].registrySource, @@ -6763,8 +6955,8 @@ export const LLAMA_TOOL_CALLING_1B_INST_Q4_K = { params: models[12].params, } as const; -export const AFRICAN_4B_TRANSLATION_Q4_K_M = { - name: "AFRICAN_4B_TRANSLATION_Q4_K_M", +export const EMBEDDINGGEMMA_300M_BF16 = { + name: "EMBEDDINGGEMMA_300M_BF16", src: `registry://${models[13].registrySource}/${models[13].registryPath}`, registryPath: models[13].registryPath, registrySource: models[13].registrySource, @@ -6781,8 +6973,8 @@ export const AFRICAN_4B_TRANSLATION_Q4_K_M = { params: models[13].params, } as const; -export const OCR_0_6B_MULTIMODAL_Q4_K_M = { - name: "OCR_0_6B_MULTIMODAL_Q4_K_M", +export const EMBEDDINGGEMMA_300M_F32 = { + name: "EMBEDDINGGEMMA_300M_F32", src: `registry://${models[14].registrySource}/${models[14].registryPath}`, registryPath: models[14].registryPath, registrySource: models[14].registrySource, @@ -6799,8 +6991,8 @@ export const OCR_0_6B_MULTIMODAL_Q4_K_M = { params: models[14].params, } as const; -export const MMPROJ_OCR_0_6B_MULTIMODAL_F16 = { - name: "MMPROJ_OCR_0_6B_MULTIMODAL_F16", +export const EMBEDDINGGEMMA_300M_Q4_0 = { + name: "EMBEDDINGGEMMA_300M_Q4_0", src: `registry://${models[15].registrySource}/${models[15].registryPath}`, registryPath: models[15].registryPath, registrySource: models[15].registrySource, @@ -6817,8 +7009,8 @@ export const MMPROJ_OCR_0_6B_MULTIMODAL_F16 = { params: models[15].params, } as const; -export const BITNET_B1_58_3B_INST_TQ2_0 = { - name: "BITNET_B1_58_3B_INST_TQ2_0", +export const EMBEDDINGGEMMA_300M_Q8_0 = { + name: "EMBEDDINGGEMMA_300M_Q8_0", src: `registry://${models[16].registrySource}/${models[16].registryPath}`, registryPath: models[16].registryPath, registrySource: models[16].registrySource, @@ -6835,8 +7027,8 @@ export const BITNET_B1_58_3B_INST_TQ2_0 = { params: models[16].params, } as const; -export const BITNET_0_7B_INST_TQ2_0 = { - name: "BITNET_0_7B_INST_TQ2_0", +export const SALAMANDRATA_2B_INST_Q4 = { + name: "SALAMANDRATA_2B_INST_Q4", src: `registry://${models[17].registrySource}/${models[17].registryPath}`, registryPath: models[17].registryPath, registrySource: models[17].registrySource, @@ -6853,8 +7045,8 @@ export const BITNET_0_7B_INST_TQ2_0 = { params: models[17].params, } as const; -export const BITNET_1B_INST_TQ2_0 = { - name: "BITNET_1B_INST_TQ2_0", +export const SALAMANDRATA_2B_INST_Q8 = { + name: "SALAMANDRATA_2B_INST_Q8", src: `registry://${models[18].registrySource}/${models[18].registryPath}`, registryPath: models[18].registryPath, registrySource: models[18].registrySource, @@ -6871,8 +7063,8 @@ export const BITNET_1B_INST_TQ2_0 = { params: models[18].params, } as const; -export const DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_SHARD = { - name: "DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_SHARD", +export const MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16 = { + name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16", src: `registry://${models[19].registrySource}/${models[19].registryPath}`, registryPath: models[19].registryPath, registrySource: models[19].registrySource, @@ -6889,8 +7081,8 @@ export const DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_SHARD = { params: models[19].params, } as const; -export const DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_TENSORS = { - name: "DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_TENSORS", +export const MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0 = { + name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0", src: `registry://${models[20].registrySource}/${models[20].registryPath}`, registryPath: models[20].registryPath, registrySource: models[20].registrySource, @@ -6907,8 +7099,8 @@ export const DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_TENSORS = { params: models[20].params, } as const; -export const GPT_OSS_120B_INST_Q4_K_M_SHARD = { - name: "GPT_OSS_120B_INST_Q4_K_M_SHARD", +export const SMOLVLM2_500M_MULTIMODAL_F16 = { + name: "SMOLVLM2_500M_MULTIMODAL_F16", src: `registry://${models[21].registrySource}/${models[21].registryPath}`, registryPath: models[21].registryPath, registrySource: models[21].registrySource, @@ -6925,8 +7117,8 @@ export const GPT_OSS_120B_INST_Q4_K_M_SHARD = { params: models[21].params, } as const; -export const GPT_OSS_120B_INST_Q4_K_M_TENSORS = { - name: "GPT_OSS_120B_INST_Q4_K_M_TENSORS", +export const SMOLVLM2_500M_MULTIMODAL_Q8_0 = { + name: "SMOLVLM2_500M_MULTIMODAL_Q8_0", src: `registry://${models[22].registrySource}/${models[22].registryPath}`, registryPath: models[22].registryPath, registrySource: models[22].registrySource, @@ -6943,8 +7135,8 @@ export const GPT_OSS_120B_INST_Q4_K_M_TENSORS = { params: models[22].params, } as const; -export const LLAMA_3_2_1B_INST_Q4_0_SHARD = { - name: "LLAMA_3_2_1B_INST_Q4_0_SHARD", +export const LASER_DOLPHIN_2X7B_INST_Q2_K = { + name: "LASER_DOLPHIN_2X7B_INST_Q2_K", src: `registry://${models[23].registrySource}/${models[23].registryPath}`, registryPath: models[23].registryPath, registrySource: models[23].registrySource, @@ -6961,8 +7153,8 @@ export const LLAMA_3_2_1B_INST_Q4_0_SHARD = { params: models[23].params, } as const; -export const LLAMA_3_2_1B_INST_Q4_0_TENSORS = { - name: "LLAMA_3_2_1B_INST_Q4_0_TENSORS", +export const LLAMA_TOOL_CALLING_1B_INST_Q4_K = { + name: "LLAMA_TOOL_CALLING_1B_INST_Q4_K", src: `registry://${models[24].registrySource}/${models[24].registryPath}`, registryPath: models[24].registryPath, registrySource: models[24].registrySource, @@ -6979,8 +7171,8 @@ export const LLAMA_3_2_1B_INST_Q4_0_TENSORS = { params: models[24].params, } as const; -export const MEDGEMMA_4B_IT_Q4_1_SHARD = { - name: "MEDGEMMA_4B_IT_Q4_1_SHARD", +export const AFRICAN_4B_TRANSLATION_Q4_K_M = { + name: "AFRICAN_4B_TRANSLATION_Q4_K_M", src: `registry://${models[25].registrySource}/${models[25].registryPath}`, registryPath: models[25].registryPath, registrySource: models[25].registrySource, @@ -6997,8 +7189,8 @@ export const MEDGEMMA_4B_IT_Q4_1_SHARD = { params: models[25].params, } as const; -export const MEDGEMMA_4B_IT_Q4_1_TENSORS = { - name: "MEDGEMMA_4B_IT_Q4_1_TENSORS", +export const OCR_0_6B_MULTIMODAL_Q4_K_M = { + name: "OCR_0_6B_MULTIMODAL_Q4_K_M", src: `registry://${models[26].registrySource}/${models[26].registryPath}`, registryPath: models[26].registryPath, registrySource: models[26].registrySource, @@ -7015,8 +7207,8 @@ export const MEDGEMMA_4B_IT_Q4_1_TENSORS = { params: models[26].params, } as const; -export const MEDGEMMA_4B_IT_Q8_0_SHARD = { - name: "MEDGEMMA_4B_IT_Q8_0_SHARD", +export const MMPROJ_OCR_0_6B_MULTIMODAL_F16 = { + name: "MMPROJ_OCR_0_6B_MULTIMODAL_F16", src: `registry://${models[27].registrySource}/${models[27].registryPath}`, registryPath: models[27].registryPath, registrySource: models[27].registrySource, @@ -7033,8 +7225,8 @@ export const MEDGEMMA_4B_IT_Q8_0_SHARD = { params: models[27].params, } as const; -export const QWEN3_1_7B_INST_Q4_SHARD = { - name: "QWEN3_1_7B_INST_Q4_SHARD", +export const BITNET_B1_58_3B_INST_TQ2_0 = { + name: "BITNET_B1_58_3B_INST_TQ2_0", src: `registry://${models[28].registrySource}/${models[28].registryPath}`, registryPath: models[28].registryPath, registrySource: models[28].registrySource, @@ -7051,9 +7243,9 @@ export const QWEN3_1_7B_INST_Q4_SHARD = { params: models[28].params, } as const; -export const QWEN3_1_7B_INST_Q4_TENSORS = { - name: "QWEN3_1_7B_INST_Q4_TENSORS", - src: `registry://${models[29].registrySource}/${models[29].registryPath}`, +export const BITNET_0_7B_INST_TQ2_0 = { + name: "BITNET_0_7B_INST_TQ2_0", + src: `registry://${models[29].registrySource}/${models[29].registryPath}`, registryPath: models[29].registryPath, registrySource: models[29].registrySource, blobCoreKey: models[29].blobCoreKey, @@ -7069,8 +7261,8 @@ export const QWEN3_1_7B_INST_Q4_TENSORS = { params: models[29].params, } as const; -export const QWEN3_4B_INST_Q4_K_M = { - name: "QWEN3_4B_INST_Q4_K_M", +export const BITNET_1B_INST_TQ2_0 = { + name: "BITNET_1B_INST_TQ2_0", src: `registry://${models[30].registrySource}/${models[30].registryPath}`, registryPath: models[30].registryPath, registrySource: models[30].registrySource, @@ -7087,8 +7279,8 @@ export const QWEN3_4B_INST_Q4_K_M = { params: models[30].params, } as const; -export const QWEN3_4B_INST_Q4_SHARD = { - name: "QWEN3_4B_INST_Q4_SHARD", +export const DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_SHARD = { + name: "DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_SHARD", src: `registry://${models[31].registrySource}/${models[31].registryPath}`, registryPath: models[31].registryPath, registrySource: models[31].registrySource, @@ -7105,8 +7297,8 @@ export const QWEN3_4B_INST_Q4_SHARD = { params: models[31].params, } as const; -export const QWEN3_4B_INST_Q4_TENSORS = { - name: "QWEN3_4B_INST_Q4_TENSORS", +export const DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_TENSORS = { + name: "DOLPHIN_MIXTRAL_2X7B_MOE_Q2_K_TENSORS", src: `registry://${models[32].registrySource}/${models[32].registryPath}`, registryPath: models[32].registryPath, registrySource: models[32].registrySource, @@ -7123,8 +7315,8 @@ export const QWEN3_4B_INST_Q4_TENSORS = { params: models[32].params, } as const; -export const SALAMANDRATA_2B_INST_Q4_SHARD = { - name: "SALAMANDRATA_2B_INST_Q4_SHARD", +export const GPT_OSS_120B_INST_Q4_K_M_SHARD = { + name: "GPT_OSS_120B_INST_Q4_K_M_SHARD", src: `registry://${models[33].registrySource}/${models[33].registryPath}`, registryPath: models[33].registryPath, registrySource: models[33].registrySource, @@ -7141,8 +7333,8 @@ export const SALAMANDRATA_2B_INST_Q4_SHARD = { params: models[33].params, } as const; -export const SALAMANDRATA_2B_INST_Q4_TENSORS = { - name: "SALAMANDRATA_2B_INST_Q4_TENSORS", +export const GPT_OSS_120B_INST_Q4_K_M_TENSORS = { + name: "GPT_OSS_120B_INST_Q4_K_M_TENSORS", src: `registry://${models[34].registrySource}/${models[34].registryPath}`, registryPath: models[34].registryPath, registrySource: models[34].registrySource, @@ -7159,8 +7351,8 @@ export const SALAMANDRATA_2B_INST_Q4_TENSORS = { params: models[34].params, } as const; -export const SALAMANDRATA_2B_INST_Q8_SHARD = { - name: "SALAMANDRATA_2B_INST_Q8_SHARD", +export const LLAMA_3_2_1B_INST_Q4_0_SHARD = { + name: "LLAMA_3_2_1B_INST_Q4_0_SHARD", src: `registry://${models[35].registrySource}/${models[35].registryPath}`, registryPath: models[35].registryPath, registrySource: models[35].registrySource, @@ -7177,8 +7369,8 @@ export const SALAMANDRATA_2B_INST_Q8_SHARD = { params: models[35].params, } as const; -export const QWEN3_8B_INST_Q4_K_M = { - name: "QWEN3_8B_INST_Q4_K_M", +export const LLAMA_3_2_1B_INST_Q4_0_TENSORS = { + name: "LLAMA_3_2_1B_INST_Q4_0_TENSORS", src: `registry://${models[36].registrySource}/${models[36].registryPath}`, registryPath: models[36].registryPath, registrySource: models[36].registrySource, @@ -7195,8 +7387,8 @@ export const QWEN3_8B_INST_Q4_K_M = { params: models[36].params, } as const; -export const MMPROJ_QWEN3VL_2B_MULTIMODAL_Q4_K = { - name: "MMPROJ_QWEN3VL_2B_MULTIMODAL_Q4_K", +export const MEDGEMMA_4B_IT_Q4_1_SHARD = { + name: "MEDGEMMA_4B_IT_Q4_1_SHARD", src: `registry://${models[37].registrySource}/${models[37].registryPath}`, registryPath: models[37].registryPath, registrySource: models[37].registrySource, @@ -7213,8 +7405,8 @@ export const MMPROJ_QWEN3VL_2B_MULTIMODAL_Q4_K = { params: models[37].params, } as const; -export const QWEN3VL_2B_MULTIMODAL_Q4_K = { - name: "QWEN3VL_2B_MULTIMODAL_Q4_K", +export const MEDGEMMA_4B_IT_Q4_1_TENSORS = { + name: "MEDGEMMA_4B_IT_Q4_1_TENSORS", src: `registry://${models[38].registrySource}/${models[38].registryPath}`, registryPath: models[38].registryPath, registrySource: models[38].registrySource, @@ -7231,8 +7423,8 @@ export const QWEN3VL_2B_MULTIMODAL_Q4_K = { params: models[38].params, } as const; -export const GPT_OSS_20B_INST_Q4_K_M = { - name: "GPT_OSS_20B_INST_Q4_K_M", +export const MEDGEMMA_4B_IT_Q8_0_SHARD = { + name: "MEDGEMMA_4B_IT_Q8_0_SHARD", src: `registry://${models[39].registrySource}/${models[39].registryPath}`, registryPath: models[39].registryPath, registrySource: models[39].registrySource, @@ -7249,8 +7441,8 @@ export const GPT_OSS_20B_INST_Q4_K_M = { params: models[39].params, } as const; -export const LLAMA_3_2_1B_INST_Q4_0 = { - name: "LLAMA_3_2_1B_INST_Q4_0", +export const QWEN3_1_7B_INST_Q4_SHARD = { + name: "QWEN3_1_7B_INST_Q4_SHARD", src: `registry://${models[40].registrySource}/${models[40].registryPath}`, registryPath: models[40].registryPath, registrySource: models[40].registrySource, @@ -7267,8 +7459,8 @@ export const LLAMA_3_2_1B_INST_Q4_0 = { params: models[40].params, } as const; -export const MEDGEMMA_4B_IT_Q4_1 = { - name: "MEDGEMMA_4B_IT_Q4_1", +export const QWEN3_1_7B_INST_Q4_TENSORS = { + name: "QWEN3_1_7B_INST_Q4_TENSORS", src: `registry://${models[41].registrySource}/${models[41].registryPath}`, registryPath: models[41].registryPath, registrySource: models[41].registrySource, @@ -7285,8 +7477,8 @@ export const MEDGEMMA_4B_IT_Q4_1 = { params: models[41].params, } as const; -export const MEDGEMMA_4B_IT_Q8_0 = { - name: "MEDGEMMA_4B_IT_Q8_0", +export const QWEN3_4B_INST_Q4_K_M = { + name: "QWEN3_4B_INST_Q4_K_M", src: `registry://${models[42].registrySource}/${models[42].registryPath}`, registryPath: models[42].registryPath, registrySource: models[42].registrySource, @@ -7303,8 +7495,8 @@ export const MEDGEMMA_4B_IT_Q8_0 = { params: models[42].params, } as const; -export const QWEN3_600M_INST_Q4 = { - name: "QWEN3_600M_INST_Q4", +export const QWEN3_4B_INST_Q4_SHARD = { + name: "QWEN3_4B_INST_Q4_SHARD", src: `registry://${models[43].registrySource}/${models[43].registryPath}`, registryPath: models[43].registryPath, registrySource: models[43].registrySource, @@ -7321,8 +7513,8 @@ export const QWEN3_600M_INST_Q4 = { params: models[43].params, } as const; -export const QWEN3_1_7B_INST_Q4 = { - name: "QWEN3_1_7B_INST_Q4", +export const QWEN3_4B_INST_Q4_TENSORS = { + name: "QWEN3_4B_INST_Q4_TENSORS", src: `registry://${models[44].registrySource}/${models[44].registryPath}`, registryPath: models[44].registryPath, registrySource: models[44].registrySource, @@ -7339,8 +7531,8 @@ export const QWEN3_1_7B_INST_Q4 = { params: models[44].params, } as const; -export const MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16 = { - name: "MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16", +export const SALAMANDRATA_2B_INST_Q4_SHARD = { + name: "SALAMANDRATA_2B_INST_Q4_SHARD", src: `registry://${models[45].registrySource}/${models[45].registryPath}`, registryPath: models[45].registryPath, registrySource: models[45].registrySource, @@ -7357,8 +7549,8 @@ export const MMPROJ_SMOLVLM2_500M_MULTIMODAL_F16 = { params: models[45].params, } as const; -export const SMOLVLM2_500M_MULTIMODAL_F16 = { - name: "SMOLVLM2_500M_MULTIMODAL_F16", +export const SALAMANDRATA_2B_INST_Q4_TENSORS = { + name: "SALAMANDRATA_2B_INST_Q4_TENSORS", src: `registry://${models[46].registrySource}/${models[46].registryPath}`, registryPath: models[46].registryPath, registrySource: models[46].registrySource, @@ -7375,8 +7567,8 @@ export const SMOLVLM2_500M_MULTIMODAL_F16 = { params: models[46].params, } as const; -export const BERGAMOT_AR_EN_LEX = { - name: "BERGAMOT_AR_EN_LEX", +export const SALAMANDRATA_2B_INST_Q8_SHARD = { + name: "SALAMANDRATA_2B_INST_Q8_SHARD", src: `registry://${models[47].registrySource}/${models[47].registryPath}`, registryPath: models[47].registryPath, registrySource: models[47].registrySource, @@ -7393,8 +7585,8 @@ export const BERGAMOT_AR_EN_LEX = { params: models[47].params, } as const; -export const BERGAMOT_METADATA = { - name: "BERGAMOT_METADATA", +export const QWEN3_8B_INST_Q4_K_M = { + name: "QWEN3_8B_INST_Q4_K_M", src: `registry://${models[48].registrySource}/${models[48].registryPath}`, registryPath: models[48].registryPath, registrySource: models[48].registrySource, @@ -7411,8 +7603,8 @@ export const BERGAMOT_METADATA = { params: models[48].params, } as const; -export const BERGAMOT_AR_EN = { - name: "BERGAMOT_AR_EN", +export const MMPROJ_QWEN3VL_2B_MULTIMODAL_Q4_K = { + name: "MMPROJ_QWEN3VL_2B_MULTIMODAL_Q4_K", src: `registry://${models[49].registrySource}/${models[49].registryPath}`, registryPath: models[49].registryPath, registrySource: models[49].registrySource, @@ -7429,8 +7621,8 @@ export const BERGAMOT_AR_EN = { params: models[49].params, } as const; -export const BERGAMOT_AR_EN_VOCAB = { - name: "BERGAMOT_AR_EN_VOCAB", +export const QWEN3VL_2B_MULTIMODAL_Q4_K = { + name: "QWEN3VL_2B_MULTIMODAL_Q4_K", src: `registry://${models[50].registrySource}/${models[50].registryPath}`, registryPath: models[50].registryPath, registrySource: models[50].registrySource, @@ -7447,8 +7639,8 @@ export const BERGAMOT_AR_EN_VOCAB = { params: models[50].params, } as const; -export const BERGAMOT_CS_EN_LEX = { - name: "BERGAMOT_CS_EN_LEX", +export const GPT_OSS_20B_INST_Q4_K_M = { + name: "GPT_OSS_20B_INST_Q4_K_M", src: `registry://${models[51].registrySource}/${models[51].registryPath}`, registryPath: models[51].registryPath, registrySource: models[51].registrySource, @@ -7465,8 +7657,8 @@ export const BERGAMOT_CS_EN_LEX = { params: models[51].params, } as const; -export const BERGAMOT_METADATA_1 = { - name: "BERGAMOT_METADATA_1", +export const LLAMA_3_2_1B_INST_Q4_0 = { + name: "LLAMA_3_2_1B_INST_Q4_0", src: `registry://${models[52].registrySource}/${models[52].registryPath}`, registryPath: models[52].registryPath, registrySource: models[52].registrySource, @@ -7483,8 +7675,8 @@ export const BERGAMOT_METADATA_1 = { params: models[52].params, } as const; -export const BERGAMOT_CS_EN = { - name: "BERGAMOT_CS_EN", +export const MEDGEMMA_4B_IT_Q4_1 = { + name: "MEDGEMMA_4B_IT_Q4_1", src: `registry://${models[53].registrySource}/${models[53].registryPath}`, registryPath: models[53].registryPath, registrySource: models[53].registrySource, @@ -7501,8 +7693,8 @@ export const BERGAMOT_CS_EN = { params: models[53].params, } as const; -export const BERGAMOT_CS_EN_VOCAB = { - name: "BERGAMOT_CS_EN_VOCAB", +export const MEDGEMMA_4B_IT_Q8_0 = { + name: "MEDGEMMA_4B_IT_Q8_0", src: `registry://${models[54].registrySource}/${models[54].registryPath}`, registryPath: models[54].registryPath, registrySource: models[54].registrySource, @@ -7519,8 +7711,8 @@ export const BERGAMOT_CS_EN_VOCAB = { params: models[54].params, } as const; -export const BERGAMOT_EN_AR_LEX = { - name: "BERGAMOT_EN_AR_LEX", +export const QWEN3_600M_INST_Q4 = { + name: "QWEN3_600M_INST_Q4", src: `registry://${models[55].registrySource}/${models[55].registryPath}`, registryPath: models[55].registryPath, registrySource: models[55].registrySource, @@ -7537,8 +7729,8 @@ export const BERGAMOT_EN_AR_LEX = { params: models[55].params, } as const; -export const BERGAMOT_METADATA_2 = { - name: "BERGAMOT_METADATA_2", +export const QWEN3_1_7B_INST_Q4 = { + name: "QWEN3_1_7B_INST_Q4", src: `registry://${models[56].registrySource}/${models[56].registryPath}`, registryPath: models[56].registryPath, registrySource: models[56].registrySource, @@ -7555,8 +7747,8 @@ export const BERGAMOT_METADATA_2 = { params: models[56].params, } as const; -export const BERGAMOT_EN_AR = { - name: "BERGAMOT_EN_AR", +export const BERGAMOT_AR_EN_LEX = { + name: "BERGAMOT_AR_EN_LEX", src: `registry://${models[57].registrySource}/${models[57].registryPath}`, registryPath: models[57].registryPath, registrySource: models[57].registrySource, @@ -7573,8 +7765,8 @@ export const BERGAMOT_EN_AR = { params: models[57].params, } as const; -export const BERGAMOT_EN_AR_VOCAB = { - name: "BERGAMOT_EN_AR_VOCAB", +export const BERGAMOT_METADATA = { + name: "BERGAMOT_METADATA", src: `registry://${models[58].registrySource}/${models[58].registryPath}`, registryPath: models[58].registryPath, registrySource: models[58].registrySource, @@ -7591,8 +7783,8 @@ export const BERGAMOT_EN_AR_VOCAB = { params: models[58].params, } as const; -export const BERGAMOT_EN_CS_LEX = { - name: "BERGAMOT_EN_CS_LEX", +export const BERGAMOT_AR_EN = { + name: "BERGAMOT_AR_EN", src: `registry://${models[59].registrySource}/${models[59].registryPath}`, registryPath: models[59].registryPath, registrySource: models[59].registrySource, @@ -7609,8 +7801,8 @@ export const BERGAMOT_EN_CS_LEX = { params: models[59].params, } as const; -export const BERGAMOT_METADATA_3 = { - name: "BERGAMOT_METADATA_3", +export const BERGAMOT_AR_EN_VOCAB = { + name: "BERGAMOT_AR_EN_VOCAB", src: `registry://${models[60].registrySource}/${models[60].registryPath}`, registryPath: models[60].registryPath, registrySource: models[60].registrySource, @@ -7627,8 +7819,8 @@ export const BERGAMOT_METADATA_3 = { params: models[60].params, } as const; -export const BERGAMOT_EN_CS = { - name: "BERGAMOT_EN_CS", +export const BERGAMOT_CS_EN_LEX = { + name: "BERGAMOT_CS_EN_LEX", src: `registry://${models[61].registrySource}/${models[61].registryPath}`, registryPath: models[61].registryPath, registrySource: models[61].registrySource, @@ -7645,8 +7837,8 @@ export const BERGAMOT_EN_CS = { params: models[61].params, } as const; -export const BERGAMOT_EN_ES_LEX = { - name: "BERGAMOT_EN_ES_LEX", +export const BERGAMOT_METADATA_1 = { + name: "BERGAMOT_METADATA_1", src: `registry://${models[62].registrySource}/${models[62].registryPath}`, registryPath: models[62].registryPath, registrySource: models[62].registrySource, @@ -7663,8 +7855,8 @@ export const BERGAMOT_EN_ES_LEX = { params: models[62].params, } as const; -export const BERGAMOT_METADATA_4 = { - name: "BERGAMOT_METADATA_4", +export const BERGAMOT_CS_EN = { + name: "BERGAMOT_CS_EN", src: `registry://${models[63].registrySource}/${models[63].registryPath}`, registryPath: models[63].registryPath, registrySource: models[63].registrySource, @@ -7681,8 +7873,8 @@ export const BERGAMOT_METADATA_4 = { params: models[63].params, } as const; -export const BERGAMOT_EN_ES = { - name: "BERGAMOT_EN_ES", +export const BERGAMOT_CS_EN_VOCAB = { + name: "BERGAMOT_CS_EN_VOCAB", src: `registry://${models[64].registrySource}/${models[64].registryPath}`, registryPath: models[64].registryPath, registrySource: models[64].registrySource, @@ -7699,8 +7891,8 @@ export const BERGAMOT_EN_ES = { params: models[64].params, } as const; -export const BERGAMOT_EN_ES_VOCAB = { - name: "BERGAMOT_EN_ES_VOCAB", +export const BERGAMOT_EN_AR_LEX = { + name: "BERGAMOT_EN_AR_LEX", src: `registry://${models[65].registrySource}/${models[65].registryPath}`, registryPath: models[65].registryPath, registrySource: models[65].registrySource, @@ -7717,8 +7909,8 @@ export const BERGAMOT_EN_ES_VOCAB = { params: models[65].params, } as const; -export const BERGAMOT_EN_FR_LEX = { - name: "BERGAMOT_EN_FR_LEX", +export const BERGAMOT_METADATA_2 = { + name: "BERGAMOT_METADATA_2", src: `registry://${models[66].registrySource}/${models[66].registryPath}`, registryPath: models[66].registryPath, registrySource: models[66].registrySource, @@ -7735,8 +7927,8 @@ export const BERGAMOT_EN_FR_LEX = { params: models[66].params, } as const; -export const BERGAMOT_METADATA_5 = { - name: "BERGAMOT_METADATA_5", +export const BERGAMOT_EN_AR = { + name: "BERGAMOT_EN_AR", src: `registry://${models[67].registrySource}/${models[67].registryPath}`, registryPath: models[67].registryPath, registrySource: models[67].registrySource, @@ -7753,8 +7945,8 @@ export const BERGAMOT_METADATA_5 = { params: models[67].params, } as const; -export const BERGAMOT_EN_FR = { - name: "BERGAMOT_EN_FR", +export const BERGAMOT_EN_AR_VOCAB = { + name: "BERGAMOT_EN_AR_VOCAB", src: `registry://${models[68].registrySource}/${models[68].registryPath}`, registryPath: models[68].registryPath, registrySource: models[68].registrySource, @@ -7771,8 +7963,8 @@ export const BERGAMOT_EN_FR = { params: models[68].params, } as const; -export const BERGAMOT_EN_FR_VOCAB = { - name: "BERGAMOT_EN_FR_VOCAB", +export const BERGAMOT_EN_CS_LEX = { + name: "BERGAMOT_EN_CS_LEX", src: `registry://${models[69].registrySource}/${models[69].registryPath}`, registryPath: models[69].registryPath, registrySource: models[69].registrySource, @@ -7789,8 +7981,8 @@ export const BERGAMOT_EN_FR_VOCAB = { params: models[69].params, } as const; -export const BERGAMOT_EN_IT_LEX = { - name: "BERGAMOT_EN_IT_LEX", +export const BERGAMOT_METADATA_3 = { + name: "BERGAMOT_METADATA_3", src: `registry://${models[70].registrySource}/${models[70].registryPath}`, registryPath: models[70].registryPath, registrySource: models[70].registrySource, @@ -7807,8 +7999,8 @@ export const BERGAMOT_EN_IT_LEX = { params: models[70].params, } as const; -export const BERGAMOT_METADATA_6 = { - name: "BERGAMOT_METADATA_6", +export const BERGAMOT_EN_CS = { + name: "BERGAMOT_EN_CS", src: `registry://${models[71].registrySource}/${models[71].registryPath}`, registryPath: models[71].registryPath, registrySource: models[71].registrySource, @@ -7825,8 +8017,8 @@ export const BERGAMOT_METADATA_6 = { params: models[71].params, } as const; -export const BERGAMOT_EN_IT = { - name: "BERGAMOT_EN_IT", +export const BERGAMOT_EN_ES_LEX = { + name: "BERGAMOT_EN_ES_LEX", src: `registry://${models[72].registrySource}/${models[72].registryPath}`, registryPath: models[72].registryPath, registrySource: models[72].registrySource, @@ -7843,8 +8035,8 @@ export const BERGAMOT_EN_IT = { params: models[72].params, } as const; -export const BERGAMOT_EN_IT_VOCAB = { - name: "BERGAMOT_EN_IT_VOCAB", +export const BERGAMOT_METADATA_4 = { + name: "BERGAMOT_METADATA_4", src: `registry://${models[73].registrySource}/${models[73].registryPath}`, registryPath: models[73].registryPath, registrySource: models[73].registrySource, @@ -7861,8 +8053,8 @@ export const BERGAMOT_EN_IT_VOCAB = { params: models[73].params, } as const; -export const BERGAMOT_EN_JA_LEX = { - name: "BERGAMOT_EN_JA_LEX", +export const BERGAMOT_EN_ES = { + name: "BERGAMOT_EN_ES", src: `registry://${models[74].registrySource}/${models[74].registryPath}`, registryPath: models[74].registryPath, registrySource: models[74].registrySource, @@ -7879,8 +8071,8 @@ export const BERGAMOT_EN_JA_LEX = { params: models[74].params, } as const; -export const BERGAMOT_METADATA_7 = { - name: "BERGAMOT_METADATA_7", +export const BERGAMOT_EN_ES_VOCAB = { + name: "BERGAMOT_EN_ES_VOCAB", src: `registry://${models[75].registrySource}/${models[75].registryPath}`, registryPath: models[75].registryPath, registrySource: models[75].registrySource, @@ -7897,8 +8089,8 @@ export const BERGAMOT_METADATA_7 = { params: models[75].params, } as const; -export const BERGAMOT_EN_JA = { - name: "BERGAMOT_EN_JA", +export const BERGAMOT_EN_FR_LEX = { + name: "BERGAMOT_EN_FR_LEX", src: `registry://${models[76].registrySource}/${models[76].registryPath}`, registryPath: models[76].registryPath, registrySource: models[76].registrySource, @@ -7915,8 +8107,8 @@ export const BERGAMOT_EN_JA = { params: models[76].params, } as const; -export const BERGAMOT_EN_JA_SRCVOCAB = { - name: "BERGAMOT_EN_JA_SRCVOCAB", +export const BERGAMOT_METADATA_5 = { + name: "BERGAMOT_METADATA_5", src: `registry://${models[77].registrySource}/${models[77].registryPath}`, registryPath: models[77].registryPath, registrySource: models[77].registrySource, @@ -7933,8 +8125,8 @@ export const BERGAMOT_EN_JA_SRCVOCAB = { params: models[77].params, } as const; -export const BERGAMOT_EN_JA_TRGVOCAB = { - name: "BERGAMOT_EN_JA_TRGVOCAB", +export const BERGAMOT_EN_FR = { + name: "BERGAMOT_EN_FR", src: `registry://${models[78].registrySource}/${models[78].registryPath}`, registryPath: models[78].registryPath, registrySource: models[78].registrySource, @@ -7951,8 +8143,8 @@ export const BERGAMOT_EN_JA_TRGVOCAB = { params: models[78].params, } as const; -export const BERGAMOT_EN_PT_LEX = { - name: "BERGAMOT_EN_PT_LEX", +export const BERGAMOT_EN_FR_VOCAB = { + name: "BERGAMOT_EN_FR_VOCAB", src: `registry://${models[79].registrySource}/${models[79].registryPath}`, registryPath: models[79].registryPath, registrySource: models[79].registrySource, @@ -7969,8 +8161,8 @@ export const BERGAMOT_EN_PT_LEX = { params: models[79].params, } as const; -export const BERGAMOT_METADATA_8 = { - name: "BERGAMOT_METADATA_8", +export const BERGAMOT_EN_IT_LEX = { + name: "BERGAMOT_EN_IT_LEX", src: `registry://${models[80].registrySource}/${models[80].registryPath}`, registryPath: models[80].registryPath, registrySource: models[80].registrySource, @@ -7987,8 +8179,8 @@ export const BERGAMOT_METADATA_8 = { params: models[80].params, } as const; -export const BERGAMOT_EN_PT = { - name: "BERGAMOT_EN_PT", +export const BERGAMOT_METADATA_6 = { + name: "BERGAMOT_METADATA_6", src: `registry://${models[81].registrySource}/${models[81].registryPath}`, registryPath: models[81].registryPath, registrySource: models[81].registrySource, @@ -8005,8 +8197,8 @@ export const BERGAMOT_EN_PT = { params: models[81].params, } as const; -export const BERGAMOT_EN_PT_VOCAB = { - name: "BERGAMOT_EN_PT_VOCAB", +export const BERGAMOT_EN_IT = { + name: "BERGAMOT_EN_IT", src: `registry://${models[82].registrySource}/${models[82].registryPath}`, registryPath: models[82].registryPath, registrySource: models[82].registrySource, @@ -8023,8 +8215,8 @@ export const BERGAMOT_EN_PT_VOCAB = { params: models[82].params, } as const; -export const BERGAMOT_EN_RU_LEX = { - name: "BERGAMOT_EN_RU_LEX", +export const BERGAMOT_EN_IT_VOCAB = { + name: "BERGAMOT_EN_IT_VOCAB", src: `registry://${models[83].registrySource}/${models[83].registryPath}`, registryPath: models[83].registryPath, registrySource: models[83].registrySource, @@ -8041,8 +8233,8 @@ export const BERGAMOT_EN_RU_LEX = { params: models[83].params, } as const; -export const BERGAMOT_METADATA_9 = { - name: "BERGAMOT_METADATA_9", +export const BERGAMOT_EN_JA_LEX = { + name: "BERGAMOT_EN_JA_LEX", src: `registry://${models[84].registrySource}/${models[84].registryPath}`, registryPath: models[84].registryPath, registrySource: models[84].registrySource, @@ -8059,8 +8251,8 @@ export const BERGAMOT_METADATA_9 = { params: models[84].params, } as const; -export const BERGAMOT_EN_RU = { - name: "BERGAMOT_EN_RU", +export const BERGAMOT_METADATA_7 = { + name: "BERGAMOT_METADATA_7", src: `registry://${models[85].registrySource}/${models[85].registryPath}`, registryPath: models[85].registryPath, registrySource: models[85].registrySource, @@ -8077,8 +8269,8 @@ export const BERGAMOT_EN_RU = { params: models[85].params, } as const; -export const BERGAMOT_EN_RU_VOCAB = { - name: "BERGAMOT_EN_RU_VOCAB", +export const BERGAMOT_EN_JA = { + name: "BERGAMOT_EN_JA", src: `registry://${models[86].registrySource}/${models[86].registryPath}`, registryPath: models[86].registryPath, registrySource: models[86].registrySource, @@ -8095,8 +8287,8 @@ export const BERGAMOT_EN_RU_VOCAB = { params: models[86].params, } as const; -export const BERGAMOT_EN_ZH_LEX = { - name: "BERGAMOT_EN_ZH_LEX", +export const BERGAMOT_EN_JA_SRCVOCAB = { + name: "BERGAMOT_EN_JA_SRCVOCAB", src: `registry://${models[87].registrySource}/${models[87].registryPath}`, registryPath: models[87].registryPath, registrySource: models[87].registrySource, @@ -8113,8 +8305,8 @@ export const BERGAMOT_EN_ZH_LEX = { params: models[87].params, } as const; -export const BERGAMOT_METADATA_10 = { - name: "BERGAMOT_METADATA_10", +export const BERGAMOT_EN_JA_TRGVOCAB = { + name: "BERGAMOT_EN_JA_TRGVOCAB", src: `registry://${models[88].registrySource}/${models[88].registryPath}`, registryPath: models[88].registryPath, registrySource: models[88].registrySource, @@ -8131,8 +8323,8 @@ export const BERGAMOT_METADATA_10 = { params: models[88].params, } as const; -export const BERGAMOT_EN_ZH = { - name: "BERGAMOT_EN_ZH", +export const BERGAMOT_EN_PT_LEX = { + name: "BERGAMOT_EN_PT_LEX", src: `registry://${models[89].registrySource}/${models[89].registryPath}`, registryPath: models[89].registryPath, registrySource: models[89].registrySource, @@ -8149,8 +8341,8 @@ export const BERGAMOT_EN_ZH = { params: models[89].params, } as const; -export const BERGAMOT_EN_ZH_SRCVOCAB = { - name: "BERGAMOT_EN_ZH_SRCVOCAB", +export const BERGAMOT_METADATA_8 = { + name: "BERGAMOT_METADATA_8", src: `registry://${models[90].registrySource}/${models[90].registryPath}`, registryPath: models[90].registryPath, registrySource: models[90].registrySource, @@ -8167,8 +8359,8 @@ export const BERGAMOT_EN_ZH_SRCVOCAB = { params: models[90].params, } as const; -export const BERGAMOT_EN_ZH_TRGVOCAB = { - name: "BERGAMOT_EN_ZH_TRGVOCAB", +export const BERGAMOT_EN_PT = { + name: "BERGAMOT_EN_PT", src: `registry://${models[91].registrySource}/${models[91].registryPath}`, registryPath: models[91].registryPath, registrySource: models[91].registrySource, @@ -8185,8 +8377,8 @@ export const BERGAMOT_EN_ZH_TRGVOCAB = { params: models[91].params, } as const; -export const BERGAMOT_ES_EN_LEX = { - name: "BERGAMOT_ES_EN_LEX", +export const BERGAMOT_EN_PT_VOCAB = { + name: "BERGAMOT_EN_PT_VOCAB", src: `registry://${models[92].registrySource}/${models[92].registryPath}`, registryPath: models[92].registryPath, registrySource: models[92].registrySource, @@ -8203,8 +8395,8 @@ export const BERGAMOT_ES_EN_LEX = { params: models[92].params, } as const; -export const BERGAMOT_METADATA_11 = { - name: "BERGAMOT_METADATA_11", +export const BERGAMOT_EN_RU_LEX = { + name: "BERGAMOT_EN_RU_LEX", src: `registry://${models[93].registrySource}/${models[93].registryPath}`, registryPath: models[93].registryPath, registrySource: models[93].registrySource, @@ -8221,8 +8413,8 @@ export const BERGAMOT_METADATA_11 = { params: models[93].params, } as const; -export const BERGAMOT_ES_EN = { - name: "BERGAMOT_ES_EN", +export const BERGAMOT_METADATA_9 = { + name: "BERGAMOT_METADATA_9", src: `registry://${models[94].registrySource}/${models[94].registryPath}`, registryPath: models[94].registryPath, registrySource: models[94].registrySource, @@ -8239,8 +8431,8 @@ export const BERGAMOT_ES_EN = { params: models[94].params, } as const; -export const BERGAMOT_ES_EN_VOCAB = { - name: "BERGAMOT_ES_EN_VOCAB", +export const BERGAMOT_EN_RU = { + name: "BERGAMOT_EN_RU", src: `registry://${models[95].registrySource}/${models[95].registryPath}`, registryPath: models[95].registryPath, registrySource: models[95].registrySource, @@ -8257,8 +8449,8 @@ export const BERGAMOT_ES_EN_VOCAB = { params: models[95].params, } as const; -export const BERGAMOT_FR_EN_LEX = { - name: "BERGAMOT_FR_EN_LEX", +export const BERGAMOT_EN_RU_VOCAB = { + name: "BERGAMOT_EN_RU_VOCAB", src: `registry://${models[96].registrySource}/${models[96].registryPath}`, registryPath: models[96].registryPath, registrySource: models[96].registrySource, @@ -8275,8 +8467,8 @@ export const BERGAMOT_FR_EN_LEX = { params: models[96].params, } as const; -export const BERGAMOT_METADATA_12 = { - name: "BERGAMOT_METADATA_12", +export const BERGAMOT_EN_ZH_LEX = { + name: "BERGAMOT_EN_ZH_LEX", src: `registry://${models[97].registrySource}/${models[97].registryPath}`, registryPath: models[97].registryPath, registrySource: models[97].registrySource, @@ -8293,8 +8485,8 @@ export const BERGAMOT_METADATA_12 = { params: models[97].params, } as const; -export const BERGAMOT_FR_EN = { - name: "BERGAMOT_FR_EN", +export const BERGAMOT_METADATA_10 = { + name: "BERGAMOT_METADATA_10", src: `registry://${models[98].registrySource}/${models[98].registryPath}`, registryPath: models[98].registryPath, registrySource: models[98].registrySource, @@ -8311,8 +8503,8 @@ export const BERGAMOT_FR_EN = { params: models[98].params, } as const; -export const BERGAMOT_IT_EN_LEX = { - name: "BERGAMOT_IT_EN_LEX", +export const BERGAMOT_EN_ZH = { + name: "BERGAMOT_EN_ZH", src: `registry://${models[99].registrySource}/${models[99].registryPath}`, registryPath: models[99].registryPath, registrySource: models[99].registrySource, @@ -8329,8 +8521,8 @@ export const BERGAMOT_IT_EN_LEX = { params: models[99].params, } as const; -export const BERGAMOT_METADATA_13 = { - name: "BERGAMOT_METADATA_13", +export const BERGAMOT_EN_ZH_SRCVOCAB = { + name: "BERGAMOT_EN_ZH_SRCVOCAB", src: `registry://${models[100].registrySource}/${models[100].registryPath}`, registryPath: models[100].registryPath, registrySource: models[100].registrySource, @@ -8347,8 +8539,8 @@ export const BERGAMOT_METADATA_13 = { params: models[100].params, } as const; -export const BERGAMOT_IT_EN = { - name: "BERGAMOT_IT_EN", +export const BERGAMOT_EN_ZH_TRGVOCAB = { + name: "BERGAMOT_EN_ZH_TRGVOCAB", src: `registry://${models[101].registrySource}/${models[101].registryPath}`, registryPath: models[101].registryPath, registrySource: models[101].registrySource, @@ -8365,8 +8557,8 @@ export const BERGAMOT_IT_EN = { params: models[101].params, } as const; -export const BERGAMOT_IT_EN_VOCAB = { - name: "BERGAMOT_IT_EN_VOCAB", +export const BERGAMOT_ES_EN_LEX = { + name: "BERGAMOT_ES_EN_LEX", src: `registry://${models[102].registrySource}/${models[102].registryPath}`, registryPath: models[102].registryPath, registrySource: models[102].registrySource, @@ -8383,8 +8575,8 @@ export const BERGAMOT_IT_EN_VOCAB = { params: models[102].params, } as const; -export const BERGAMOT_JA_EN_LEX = { - name: "BERGAMOT_JA_EN_LEX", +export const BERGAMOT_METADATA_11 = { + name: "BERGAMOT_METADATA_11", src: `registry://${models[103].registrySource}/${models[103].registryPath}`, registryPath: models[103].registryPath, registrySource: models[103].registrySource, @@ -8401,8 +8593,8 @@ export const BERGAMOT_JA_EN_LEX = { params: models[103].params, } as const; -export const BERGAMOT_METADATA_14 = { - name: "BERGAMOT_METADATA_14", +export const BERGAMOT_ES_EN = { + name: "BERGAMOT_ES_EN", src: `registry://${models[104].registrySource}/${models[104].registryPath}`, registryPath: models[104].registryPath, registrySource: models[104].registrySource, @@ -8419,8 +8611,8 @@ export const BERGAMOT_METADATA_14 = { params: models[104].params, } as const; -export const BERGAMOT_JA_EN = { - name: "BERGAMOT_JA_EN", +export const BERGAMOT_ES_EN_VOCAB = { + name: "BERGAMOT_ES_EN_VOCAB", src: `registry://${models[105].registrySource}/${models[105].registryPath}`, registryPath: models[105].registryPath, registrySource: models[105].registrySource, @@ -8437,8 +8629,8 @@ export const BERGAMOT_JA_EN = { params: models[105].params, } as const; -export const BERGAMOT_JA_EN_VOCAB = { - name: "BERGAMOT_JA_EN_VOCAB", +export const BERGAMOT_FR_EN_LEX = { + name: "BERGAMOT_FR_EN_LEX", src: `registry://${models[106].registrySource}/${models[106].registryPath}`, registryPath: models[106].registryPath, registrySource: models[106].registrySource, @@ -8455,8 +8647,8 @@ export const BERGAMOT_JA_EN_VOCAB = { params: models[106].params, } as const; -export const BERGAMOT_PT_EN_LEX = { - name: "BERGAMOT_PT_EN_LEX", +export const BERGAMOT_METADATA_12 = { + name: "BERGAMOT_METADATA_12", src: `registry://${models[107].registrySource}/${models[107].registryPath}`, registryPath: models[107].registryPath, registrySource: models[107].registrySource, @@ -8473,8 +8665,8 @@ export const BERGAMOT_PT_EN_LEX = { params: models[107].params, } as const; -export const BERGAMOT_METADATA_15 = { - name: "BERGAMOT_METADATA_15", +export const BERGAMOT_FR_EN = { + name: "BERGAMOT_FR_EN", src: `registry://${models[108].registrySource}/${models[108].registryPath}`, registryPath: models[108].registryPath, registrySource: models[108].registrySource, @@ -8491,8 +8683,8 @@ export const BERGAMOT_METADATA_15 = { params: models[108].params, } as const; -export const BERGAMOT_PT_EN = { - name: "BERGAMOT_PT_EN", +export const BERGAMOT_IT_EN_LEX = { + name: "BERGAMOT_IT_EN_LEX", src: `registry://${models[109].registrySource}/${models[109].registryPath}`, registryPath: models[109].registryPath, registrySource: models[109].registrySource, @@ -8509,8 +8701,8 @@ export const BERGAMOT_PT_EN = { params: models[109].params, } as const; -export const BERGAMOT_RU_EN_LEX = { - name: "BERGAMOT_RU_EN_LEX", +export const BERGAMOT_METADATA_13 = { + name: "BERGAMOT_METADATA_13", src: `registry://${models[110].registrySource}/${models[110].registryPath}`, registryPath: models[110].registryPath, registrySource: models[110].registrySource, @@ -8527,8 +8719,8 @@ export const BERGAMOT_RU_EN_LEX = { params: models[110].params, } as const; -export const BERGAMOT_METADATA_16 = { - name: "BERGAMOT_METADATA_16", +export const BERGAMOT_IT_EN = { + name: "BERGAMOT_IT_EN", src: `registry://${models[111].registrySource}/${models[111].registryPath}`, registryPath: models[111].registryPath, registrySource: models[111].registrySource, @@ -8545,8 +8737,8 @@ export const BERGAMOT_METADATA_16 = { params: models[111].params, } as const; -export const BERGAMOT_RU_EN = { - name: "BERGAMOT_RU_EN", +export const BERGAMOT_IT_EN_VOCAB = { + name: "BERGAMOT_IT_EN_VOCAB", src: `registry://${models[112].registrySource}/${models[112].registryPath}`, registryPath: models[112].registryPath, registrySource: models[112].registrySource, @@ -8563,8 +8755,8 @@ export const BERGAMOT_RU_EN = { params: models[112].params, } as const; -export const BERGAMOT_RU_EN_VOCAB = { - name: "BERGAMOT_RU_EN_VOCAB", +export const BERGAMOT_JA_EN_LEX = { + name: "BERGAMOT_JA_EN_LEX", src: `registry://${models[113].registrySource}/${models[113].registryPath}`, registryPath: models[113].registryPath, registrySource: models[113].registrySource, @@ -8581,8 +8773,8 @@ export const BERGAMOT_RU_EN_VOCAB = { params: models[113].params, } as const; -export const BERGAMOT_ZH_EN_LEX = { - name: "BERGAMOT_ZH_EN_LEX", +export const BERGAMOT_METADATA_14 = { + name: "BERGAMOT_METADATA_14", src: `registry://${models[114].registrySource}/${models[114].registryPath}`, registryPath: models[114].registryPath, registrySource: models[114].registrySource, @@ -8599,8 +8791,8 @@ export const BERGAMOT_ZH_EN_LEX = { params: models[114].params, } as const; -export const BERGAMOT_METADATA_17 = { - name: "BERGAMOT_METADATA_17", +export const BERGAMOT_JA_EN = { + name: "BERGAMOT_JA_EN", src: `registry://${models[115].registrySource}/${models[115].registryPath}`, registryPath: models[115].registryPath, registrySource: models[115].registrySource, @@ -8617,8 +8809,8 @@ export const BERGAMOT_METADATA_17 = { params: models[115].params, } as const; -export const BERGAMOT_ZH_EN = { - name: "BERGAMOT_ZH_EN", +export const BERGAMOT_JA_EN_VOCAB = { + name: "BERGAMOT_JA_EN_VOCAB", src: `registry://${models[116].registrySource}/${models[116].registryPath}`, registryPath: models[116].registryPath, registrySource: models[116].registrySource, @@ -8635,8 +8827,8 @@ export const BERGAMOT_ZH_EN = { params: models[116].params, } as const; -export const BERGAMOT_ZH_EN_VOCAB = { - name: "BERGAMOT_ZH_EN_VOCAB", +export const BERGAMOT_PT_EN_LEX = { + name: "BERGAMOT_PT_EN_LEX", src: `registry://${models[117].registrySource}/${models[117].registryPath}`, registryPath: models[117].registryPath, registrySource: models[117].registrySource, @@ -8653,8 +8845,8 @@ export const BERGAMOT_ZH_EN_VOCAB = { params: models[117].params, } as const; -export const MARIAN_EN_HI_INDIC_1B_F16 = { - name: "MARIAN_EN_HI_INDIC_1B_F16", +export const BERGAMOT_METADATA_15 = { + name: "BERGAMOT_METADATA_15", src: `registry://${models[118].registrySource}/${models[118].registryPath}`, registryPath: models[118].registryPath, registrySource: models[118].registrySource, @@ -8671,8 +8863,8 @@ export const MARIAN_EN_HI_INDIC_1B_F16 = { params: models[118].params, } as const; -export const MARIAN_EN_HI_INDIC_200M_F16 = { - name: "MARIAN_EN_HI_INDIC_200M_F16", +export const BERGAMOT_PT_EN = { + name: "BERGAMOT_PT_EN", src: `registry://${models[119].registrySource}/${models[119].registryPath}`, registryPath: models[119].registryPath, registrySource: models[119].registrySource, @@ -8689,8 +8881,8 @@ export const MARIAN_EN_HI_INDIC_200M_F16 = { params: models[119].params, } as const; -export const MARIAN_HI_EN_INDIC_1B_F16 = { - name: "MARIAN_HI_EN_INDIC_1B_F16", +export const BERGAMOT_RU_EN_LEX = { + name: "BERGAMOT_RU_EN_LEX", src: `registry://${models[120].registrySource}/${models[120].registryPath}`, registryPath: models[120].registryPath, registrySource: models[120].registrySource, @@ -8707,8 +8899,8 @@ export const MARIAN_HI_EN_INDIC_1B_F16 = { params: models[120].params, } as const; -export const MARIAN_HI_EN_INDIC_200M_F16 = { - name: "MARIAN_HI_EN_INDIC_200M_F16", +export const BERGAMOT_METADATA_16 = { + name: "BERGAMOT_METADATA_16", src: `registry://${models[121].registrySource}/${models[121].registryPath}`, registryPath: models[121].registryPath, registrySource: models[121].registrySource, @@ -8725,8 +8917,8 @@ export const MARIAN_HI_EN_INDIC_200M_F16 = { params: models[121].params, } as const; -export const MARIAN_HI_HI_INDIC_1B_F16 = { - name: "MARIAN_HI_HI_INDIC_1B_F16", +export const BERGAMOT_RU_EN = { + name: "BERGAMOT_RU_EN", src: `registry://${models[122].registrySource}/${models[122].registryPath}`, registryPath: models[122].registryPath, registrySource: models[122].registrySource, @@ -8743,8 +8935,8 @@ export const MARIAN_HI_HI_INDIC_1B_F16 = { params: models[122].params, } as const; -export const MARIAN_HI_HI_INDIC_320M_F16 = { - name: "MARIAN_HI_HI_INDIC_320M_F16", +export const BERGAMOT_RU_EN_VOCAB = { + name: "BERGAMOT_RU_EN_VOCAB", src: `registry://${models[123].registrySource}/${models[123].registryPath}`, registryPath: models[123].registryPath, registrySource: models[123].registrySource, @@ -8761,8 +8953,8 @@ export const MARIAN_HI_HI_INDIC_320M_F16 = { params: models[123].params, } as const; -export const MARIAN_EN_HI_INDIC_1B_Q4_0 = { - name: "MARIAN_EN_HI_INDIC_1B_Q4_0", +export const BERGAMOT_ZH_EN_LEX = { + name: "BERGAMOT_ZH_EN_LEX", src: `registry://${models[124].registrySource}/${models[124].registryPath}`, registryPath: models[124].registryPath, registrySource: models[124].registrySource, @@ -8779,8 +8971,8 @@ export const MARIAN_EN_HI_INDIC_1B_Q4_0 = { params: models[124].params, } as const; -export const MARIAN_EN_HI_INDIC_200M_Q4_0 = { - name: "MARIAN_EN_HI_INDIC_200M_Q4_0", +export const BERGAMOT_METADATA_17 = { + name: "BERGAMOT_METADATA_17", src: `registry://${models[125].registrySource}/${models[125].registryPath}`, registryPath: models[125].registryPath, registrySource: models[125].registrySource, @@ -8797,8 +8989,8 @@ export const MARIAN_EN_HI_INDIC_200M_Q4_0 = { params: models[125].params, } as const; -export const MARIAN_HI_EN_INDIC_1B_Q4_0 = { - name: "MARIAN_HI_EN_INDIC_1B_Q4_0", +export const BERGAMOT_ZH_EN = { + name: "BERGAMOT_ZH_EN", src: `registry://${models[126].registrySource}/${models[126].registryPath}`, registryPath: models[126].registryPath, registrySource: models[126].registrySource, @@ -8815,8 +9007,8 @@ export const MARIAN_HI_EN_INDIC_1B_Q4_0 = { params: models[126].params, } as const; -export const MARIAN_HI_EN_INDIC_200M_Q4_0 = { - name: "MARIAN_HI_EN_INDIC_200M_Q4_0", +export const BERGAMOT_ZH_EN_VOCAB = { + name: "BERGAMOT_ZH_EN_VOCAB", src: `registry://${models[127].registrySource}/${models[127].registryPath}`, registryPath: models[127].registryPath, registrySource: models[127].registrySource, @@ -8833,8 +9025,8 @@ export const MARIAN_HI_EN_INDIC_200M_Q4_0 = { params: models[127].params, } as const; -export const MARIAN_HI_HI_INDIC_1B_Q4_0 = { - name: "MARIAN_HI_HI_INDIC_1B_Q4_0", +export const MARIAN_EN_HI_INDIC_1B_F16 = { + name: "MARIAN_EN_HI_INDIC_1B_F16", src: `registry://${models[128].registrySource}/${models[128].registryPath}`, registryPath: models[128].registryPath, registrySource: models[128].registrySource, @@ -8851,8 +9043,8 @@ export const MARIAN_HI_HI_INDIC_1B_Q4_0 = { params: models[128].params, } as const; -export const MARIAN_HI_HI_INDIC_320M_Q4_0 = { - name: "MARIAN_HI_HI_INDIC_320M_Q4_0", +export const MARIAN_EN_HI_INDIC_200M_F16 = { + name: "MARIAN_EN_HI_INDIC_200M_F16", src: `registry://${models[129].registrySource}/${models[129].registryPath}`, registryPath: models[129].registryPath, registrySource: models[129].registrySource, @@ -8869,8 +9061,8 @@ export const MARIAN_HI_HI_INDIC_320M_Q4_0 = { params: models[129].params, } as const; -export const MARIAN_OPUS_DE_FR_Q0F16 = { - name: "MARIAN_OPUS_DE_FR_Q0F16", +export const MARIAN_HI_EN_INDIC_1B_F16 = { + name: "MARIAN_HI_EN_INDIC_1B_F16", src: `registry://${models[130].registrySource}/${models[130].registryPath}`, registryPath: models[130].registryPath, registrySource: models[130].registrySource, @@ -8887,8 +9079,8 @@ export const MARIAN_OPUS_DE_FR_Q0F16 = { params: models[130].params, } as const; -export const MARIAN_OPUS_EN_FR_Q0F16 = { - name: "MARIAN_OPUS_EN_FR_Q0F16", +export const MARIAN_HI_EN_INDIC_200M_F16 = { + name: "MARIAN_HI_EN_INDIC_200M_F16", src: `registry://${models[131].registrySource}/${models[131].registryPath}`, registryPath: models[131].registryPath, registrySource: models[131].registrySource, @@ -8905,8 +9097,8 @@ export const MARIAN_OPUS_EN_FR_Q0F16 = { params: models[131].params, } as const; -export const MARIAN_OPUS_EN_PT_Q0F16 = { - name: "MARIAN_OPUS_EN_PT_Q0F16", +export const MARIAN_HI_HI_INDIC_1B_F16 = { + name: "MARIAN_HI_HI_INDIC_1B_F16", src: `registry://${models[132].registrySource}/${models[132].registryPath}`, registryPath: models[132].registryPath, registrySource: models[132].registrySource, @@ -8923,8 +9115,8 @@ export const MARIAN_OPUS_EN_PT_Q0F16 = { params: models[132].params, } as const; -export const MARIAN_OPUS_EN_RU_Q0F16 = { - name: "MARIAN_OPUS_EN_RU_Q0F16", +export const MARIAN_HI_HI_INDIC_320M_F16 = { + name: "MARIAN_HI_HI_INDIC_320M_F16", src: `registry://${models[133].registrySource}/${models[133].registryPath}`, registryPath: models[133].registryPath, registrySource: models[133].registrySource, @@ -8941,8 +9133,8 @@ export const MARIAN_OPUS_EN_RU_Q0F16 = { params: models[133].params, } as const; -export const MARIAN_OPUS_ES_FR_Q0F16 = { - name: "MARIAN_OPUS_ES_FR_Q0F16", +export const MARIAN_EN_HI_INDIC_1B_Q4_0 = { + name: "MARIAN_EN_HI_INDIC_1B_Q4_0", src: `registry://${models[134].registrySource}/${models[134].registryPath}`, registryPath: models[134].registryPath, registrySource: models[134].registrySource, @@ -8959,8 +9151,8 @@ export const MARIAN_OPUS_ES_FR_Q0F16 = { params: models[134].params, } as const; -export const MARIAN_OPUS_FR_DE_Q0F16 = { - name: "MARIAN_OPUS_FR_DE_Q0F16", +export const MARIAN_EN_HI_INDIC_200M_Q4_0 = { + name: "MARIAN_EN_HI_INDIC_200M_Q4_0", src: `registry://${models[135].registrySource}/${models[135].registryPath}`, registryPath: models[135].registryPath, registrySource: models[135].registrySource, @@ -8977,8 +9169,8 @@ export const MARIAN_OPUS_FR_DE_Q0F16 = { params: models[135].params, } as const; -export const MARIAN_OPUS_FR_EN_Q0F16 = { - name: "MARIAN_OPUS_FR_EN_Q0F16", +export const MARIAN_HI_EN_INDIC_1B_Q4_0 = { + name: "MARIAN_HI_EN_INDIC_1B_Q4_0", src: `registry://${models[136].registrySource}/${models[136].registryPath}`, registryPath: models[136].registryPath, registrySource: models[136].registrySource, @@ -8995,8 +9187,8 @@ export const MARIAN_OPUS_FR_EN_Q0F16 = { params: models[136].params, } as const; -export const MARIAN_OPUS_FR_ES_Q0F16 = { - name: "MARIAN_OPUS_FR_ES_Q0F16", +export const MARIAN_HI_EN_INDIC_200M_Q4_0 = { + name: "MARIAN_HI_EN_INDIC_200M_Q4_0", src: `registry://${models[137].registrySource}/${models[137].registryPath}`, registryPath: models[137].registryPath, registrySource: models[137].registrySource, @@ -9013,8 +9205,8 @@ export const MARIAN_OPUS_FR_ES_Q0F16 = { params: models[137].params, } as const; -export const MARIAN_OPUS_PT_EN_Q0F16 = { - name: "MARIAN_OPUS_PT_EN_Q0F16", +export const MARIAN_HI_HI_INDIC_1B_Q4_0 = { + name: "MARIAN_HI_HI_INDIC_1B_Q4_0", src: `registry://${models[138].registrySource}/${models[138].registryPath}`, registryPath: models[138].registryPath, registrySource: models[138].registrySource, @@ -9031,8 +9223,8 @@ export const MARIAN_OPUS_PT_EN_Q0F16 = { params: models[138].params, } as const; -export const MARIAN_OPUS_RU_EN_Q0F16 = { - name: "MARIAN_OPUS_RU_EN_Q0F16", +export const MARIAN_HI_HI_INDIC_320M_Q4_0 = { + name: "MARIAN_HI_HI_INDIC_320M_Q4_0", src: `registry://${models[139].registrySource}/${models[139].registryPath}`, registryPath: models[139].registryPath, registrySource: models[139].registrySource, @@ -9049,8 +9241,8 @@ export const MARIAN_OPUS_RU_EN_Q0F16 = { params: models[139].params, } as const; -export const MARIAN_OPUS_AR_EN_Q4_0 = { - name: "MARIAN_OPUS_AR_EN_Q4_0", +export const MARIAN_OPUS_DE_FR_Q0F16 = { + name: "MARIAN_OPUS_DE_FR_Q0F16", src: `registry://${models[140].registrySource}/${models[140].registryPath}`, registryPath: models[140].registryPath, registrySource: models[140].registrySource, @@ -9067,8 +9259,8 @@ export const MARIAN_OPUS_AR_EN_Q4_0 = { params: models[140].params, } as const; -export const MARIAN_OPUS_DE_EN_Q4_0 = { - name: "MARIAN_OPUS_DE_EN_Q4_0", +export const MARIAN_OPUS_EN_FR_Q0F16 = { + name: "MARIAN_OPUS_EN_FR_Q0F16", src: `registry://${models[141].registrySource}/${models[141].registryPath}`, registryPath: models[141].registryPath, registrySource: models[141].registrySource, @@ -9085,8 +9277,8 @@ export const MARIAN_OPUS_DE_EN_Q4_0 = { params: models[141].params, } as const; -export const MARIAN_OPUS_DE_FR_Q4_0 = { - name: "MARIAN_OPUS_DE_FR_Q4_0", +export const MARIAN_OPUS_EN_PT_Q0F16 = { + name: "MARIAN_OPUS_EN_PT_Q0F16", src: `registry://${models[142].registrySource}/${models[142].registryPath}`, registryPath: models[142].registryPath, registrySource: models[142].registrySource, @@ -9103,8 +9295,8 @@ export const MARIAN_OPUS_DE_FR_Q4_0 = { params: models[142].params, } as const; -export const MARIAN_OPUS_EN_AR_Q4_0 = { - name: "MARIAN_OPUS_EN_AR_Q4_0", +export const MARIAN_OPUS_EN_RU_Q0F16 = { + name: "MARIAN_OPUS_EN_RU_Q0F16", src: `registry://${models[143].registrySource}/${models[143].registryPath}`, registryPath: models[143].registryPath, registrySource: models[143].registrySource, @@ -9121,8 +9313,8 @@ export const MARIAN_OPUS_EN_AR_Q4_0 = { params: models[143].params, } as const; -export const MARIAN_OPUS_EN_DE_Q4_0 = { - name: "MARIAN_OPUS_EN_DE_Q4_0", +export const MARIAN_OPUS_ES_FR_Q0F16 = { + name: "MARIAN_OPUS_ES_FR_Q0F16", src: `registry://${models[144].registrySource}/${models[144].registryPath}`, registryPath: models[144].registryPath, registrySource: models[144].registrySource, @@ -9139,8 +9331,8 @@ export const MARIAN_OPUS_EN_DE_Q4_0 = { params: models[144].params, } as const; -export const MARIAN_OPUS_EN_ES_Q4_0 = { - name: "MARIAN_OPUS_EN_ES_Q4_0", +export const MARIAN_OPUS_FR_DE_Q0F16 = { + name: "MARIAN_OPUS_FR_DE_Q0F16", src: `registry://${models[145].registrySource}/${models[145].registryPath}`, registryPath: models[145].registryPath, registrySource: models[145].registrySource, @@ -9157,8 +9349,8 @@ export const MARIAN_OPUS_EN_ES_Q4_0 = { params: models[145].params, } as const; -export const MARIAN_OPUS_EN_FR_Q4_0 = { - name: "MARIAN_OPUS_EN_FR_Q4_0", +export const MARIAN_OPUS_FR_EN_Q0F16 = { + name: "MARIAN_OPUS_FR_EN_Q0F16", src: `registry://${models[146].registrySource}/${models[146].registryPath}`, registryPath: models[146].registryPath, registrySource: models[146].registrySource, @@ -9175,8 +9367,8 @@ export const MARIAN_OPUS_EN_FR_Q4_0 = { params: models[146].params, } as const; -export const MARIAN_OPUS_EN_IT_Q4_0 = { - name: "MARIAN_OPUS_EN_IT_Q4_0", +export const MARIAN_OPUS_FR_ES_Q0F16 = { + name: "MARIAN_OPUS_FR_ES_Q0F16", src: `registry://${models[147].registrySource}/${models[147].registryPath}`, registryPath: models[147].registryPath, registrySource: models[147].registrySource, @@ -9193,8 +9385,8 @@ export const MARIAN_OPUS_EN_IT_Q4_0 = { params: models[147].params, } as const; -export const MARIAN_OPUS_EN_PT_Q4_0 = { - name: "MARIAN_OPUS_EN_PT_Q4_0", +export const MARIAN_OPUS_PT_EN_Q0F16 = { + name: "MARIAN_OPUS_PT_EN_Q0F16", src: `registry://${models[148].registrySource}/${models[148].registryPath}`, registryPath: models[148].registryPath, registrySource: models[148].registrySource, @@ -9211,8 +9403,8 @@ export const MARIAN_OPUS_EN_PT_Q4_0 = { params: models[148].params, } as const; -export const MARIAN_OPUS_EN_ROA_Q4_0 = { - name: "MARIAN_OPUS_EN_ROA_Q4_0", +export const MARIAN_OPUS_RU_EN_Q0F16 = { + name: "MARIAN_OPUS_RU_EN_Q0F16", src: `registry://${models[149].registrySource}/${models[149].registryPath}`, registryPath: models[149].registryPath, registrySource: models[149].registrySource, @@ -9229,8 +9421,8 @@ export const MARIAN_OPUS_EN_ROA_Q4_0 = { params: models[149].params, } as const; -export const MARIAN_OPUS_EN_RU_Q4_0 = { - name: "MARIAN_OPUS_EN_RU_Q4_0", +export const MARIAN_OPUS_AR_EN_Q4_0 = { + name: "MARIAN_OPUS_AR_EN_Q4_0", src: `registry://${models[150].registrySource}/${models[150].registryPath}`, registryPath: models[150].registryPath, registrySource: models[150].registrySource, @@ -9247,8 +9439,8 @@ export const MARIAN_OPUS_EN_RU_Q4_0 = { params: models[150].params, } as const; -export const MARIAN_OPUS_EN_ZH_Q4_0 = { - name: "MARIAN_OPUS_EN_ZH_Q4_0", +export const MARIAN_OPUS_DE_EN_Q4_0 = { + name: "MARIAN_OPUS_DE_EN_Q4_0", src: `registry://${models[151].registrySource}/${models[151].registryPath}`, registryPath: models[151].registryPath, registrySource: models[151].registrySource, @@ -9265,8 +9457,8 @@ export const MARIAN_OPUS_EN_ZH_Q4_0 = { params: models[151].params, } as const; -export const MARIAN_OPUS_ES_EN_Q4_0 = { - name: "MARIAN_OPUS_ES_EN_Q4_0", +export const MARIAN_OPUS_DE_FR_Q4_0 = { + name: "MARIAN_OPUS_DE_FR_Q4_0", src: `registry://${models[152].registrySource}/${models[152].registryPath}`, registryPath: models[152].registryPath, registrySource: models[152].registrySource, @@ -9283,8 +9475,8 @@ export const MARIAN_OPUS_ES_EN_Q4_0 = { params: models[152].params, } as const; -export const MARIAN_OPUS_ES_FR_Q4_0 = { - name: "MARIAN_OPUS_ES_FR_Q4_0", +export const MARIAN_OPUS_EN_AR_Q4_0 = { + name: "MARIAN_OPUS_EN_AR_Q4_0", src: `registry://${models[153].registrySource}/${models[153].registryPath}`, registryPath: models[153].registryPath, registrySource: models[153].registrySource, @@ -9301,8 +9493,8 @@ export const MARIAN_OPUS_ES_FR_Q4_0 = { params: models[153].params, } as const; -export const MARIAN_OPUS_FR_DE_Q4_0 = { - name: "MARIAN_OPUS_FR_DE_Q4_0", +export const MARIAN_OPUS_EN_DE_Q4_0 = { + name: "MARIAN_OPUS_EN_DE_Q4_0", src: `registry://${models[154].registrySource}/${models[154].registryPath}`, registryPath: models[154].registryPath, registrySource: models[154].registrySource, @@ -9319,8 +9511,8 @@ export const MARIAN_OPUS_FR_DE_Q4_0 = { params: models[154].params, } as const; -export const MARIAN_OPUS_FR_EN_Q4_0 = { - name: "MARIAN_OPUS_FR_EN_Q4_0", +export const MARIAN_OPUS_EN_ES_Q4_0 = { + name: "MARIAN_OPUS_EN_ES_Q4_0", src: `registry://${models[155].registrySource}/${models[155].registryPath}`, registryPath: models[155].registryPath, registrySource: models[155].registrySource, @@ -9337,8 +9529,8 @@ export const MARIAN_OPUS_FR_EN_Q4_0 = { params: models[155].params, } as const; -export const MARIAN_OPUS_FR_ES_Q4_0 = { - name: "MARIAN_OPUS_FR_ES_Q4_0", +export const MARIAN_OPUS_EN_FR_Q4_0 = { + name: "MARIAN_OPUS_EN_FR_Q4_0", src: `registry://${models[156].registrySource}/${models[156].registryPath}`, registryPath: models[156].registryPath, registrySource: models[156].registrySource, @@ -9355,8 +9547,8 @@ export const MARIAN_OPUS_FR_ES_Q4_0 = { params: models[156].params, } as const; -export const MARIAN_OPUS_IT_EN_Q4_0 = { - name: "MARIAN_OPUS_IT_EN_Q4_0", +export const MARIAN_OPUS_EN_IT_Q4_0 = { + name: "MARIAN_OPUS_EN_IT_Q4_0", src: `registry://${models[157].registrySource}/${models[157].registryPath}`, registryPath: models[157].registryPath, registrySource: models[157].registrySource, @@ -9373,8 +9565,8 @@ export const MARIAN_OPUS_IT_EN_Q4_0 = { params: models[157].params, } as const; -export const MARIAN_OPUS_JA_EN_Q4_0 = { - name: "MARIAN_OPUS_JA_EN_Q4_0", +export const MARIAN_OPUS_EN_PT_Q4_0 = { + name: "MARIAN_OPUS_EN_PT_Q4_0", src: `registry://${models[158].registrySource}/${models[158].registryPath}`, registryPath: models[158].registryPath, registrySource: models[158].registrySource, @@ -9391,8 +9583,8 @@ export const MARIAN_OPUS_JA_EN_Q4_0 = { params: models[158].params, } as const; -export const MARIAN_OPUS_ROA_EN_Q4_0 = { - name: "MARIAN_OPUS_ROA_EN_Q4_0", +export const MARIAN_OPUS_EN_ROA_Q4_0 = { + name: "MARIAN_OPUS_EN_ROA_Q4_0", src: `registry://${models[159].registrySource}/${models[159].registryPath}`, registryPath: models[159].registryPath, registrySource: models[159].registrySource, @@ -9409,8 +9601,8 @@ export const MARIAN_OPUS_ROA_EN_Q4_0 = { params: models[159].params, } as const; -export const MARIAN_OPUS_RU_EN_Q4_0 = { - name: "MARIAN_OPUS_RU_EN_Q4_0", +export const MARIAN_OPUS_EN_RU_Q4_0 = { + name: "MARIAN_OPUS_EN_RU_Q4_0", src: `registry://${models[160].registrySource}/${models[160].registryPath}`, registryPath: models[160].registryPath, registrySource: models[160].registrySource, @@ -9427,8 +9619,8 @@ export const MARIAN_OPUS_RU_EN_Q4_0 = { params: models[160].params, } as const; -export const MARIAN_OPUS_ZH_EN_Q4_0 = { - name: "MARIAN_OPUS_ZH_EN_Q4_0", +export const MARIAN_OPUS_EN_ZH_Q4_0 = { + name: "MARIAN_OPUS_EN_ZH_Q4_0", src: `registry://${models[161].registrySource}/${models[161].registryPath}`, registryPath: models[161].registryPath, registrySource: models[161].registrySource, @@ -9445,8 +9637,8 @@ export const MARIAN_OPUS_ZH_EN_Q4_0 = { params: models[161].params, } as const; -export const OCR_CRAFT_DETECTOR = { - name: "OCR_CRAFT_DETECTOR", +export const MARIAN_OPUS_ES_EN_Q4_0 = { + name: "MARIAN_OPUS_ES_EN_Q4_0", src: `registry://${models[162].registrySource}/${models[162].registryPath}`, registryPath: models[162].registryPath, registrySource: models[162].registrySource, @@ -9463,8 +9655,8 @@ export const OCR_CRAFT_DETECTOR = { params: models[162].params, } as const; -export const OCR_LATIN_RECOGNIZER = { - name: "OCR_LATIN_RECOGNIZER", +export const MARIAN_OPUS_ES_FR_Q4_0 = { + name: "MARIAN_OPUS_ES_FR_Q4_0", src: `registry://${models[163].registrySource}/${models[163].registryPath}`, registryPath: models[163].registryPath, registrySource: models[163].registrySource, @@ -9481,8 +9673,8 @@ export const OCR_LATIN_RECOGNIZER = { params: models[163].params, } as const; -export const OCR_ARABIC_RECOGNIZER = { - name: "OCR_ARABIC_RECOGNIZER", +export const MARIAN_OPUS_FR_DE_Q4_0 = { + name: "MARIAN_OPUS_FR_DE_Q4_0", src: `registry://${models[164].registrySource}/${models[164].registryPath}`, registryPath: models[164].registryPath, registrySource: models[164].registrySource, @@ -9499,8 +9691,8 @@ export const OCR_ARABIC_RECOGNIZER = { params: models[164].params, } as const; -export const OCR_BENGALI_RECOGNIZER = { - name: "OCR_BENGALI_RECOGNIZER", +export const MARIAN_OPUS_FR_EN_Q4_0 = { + name: "MARIAN_OPUS_FR_EN_Q4_0", src: `registry://${models[165].registrySource}/${models[165].registryPath}`, registryPath: models[165].registryPath, registrySource: models[165].registrySource, @@ -9517,8 +9709,8 @@ export const OCR_BENGALI_RECOGNIZER = { params: models[165].params, } as const; -export const OCR_CYRILLIC_RECOGNIZER = { - name: "OCR_CYRILLIC_RECOGNIZER", +export const MARIAN_OPUS_FR_ES_Q4_0 = { + name: "MARIAN_OPUS_FR_ES_Q4_0", src: `registry://${models[166].registrySource}/${models[166].registryPath}`, registryPath: models[166].registryPath, registrySource: models[166].registrySource, @@ -9535,8 +9727,8 @@ export const OCR_CYRILLIC_RECOGNIZER = { params: models[166].params, } as const; -export const OCR_DEVANAGARI_RECOGNIZER = { - name: "OCR_DEVANAGARI_RECOGNIZER", +export const MARIAN_OPUS_IT_EN_Q4_0 = { + name: "MARIAN_OPUS_IT_EN_Q4_0", src: `registry://${models[167].registrySource}/${models[167].registryPath}`, registryPath: models[167].registryPath, registrySource: models[167].registrySource, @@ -9553,8 +9745,8 @@ export const OCR_DEVANAGARI_RECOGNIZER = { params: models[167].params, } as const; -export const OCR_JAPANESE_RECOGNIZER = { - name: "OCR_JAPANESE_RECOGNIZER", +export const MARIAN_OPUS_JA_EN_Q4_0 = { + name: "MARIAN_OPUS_JA_EN_Q4_0", src: `registry://${models[168].registrySource}/${models[168].registryPath}`, registryPath: models[168].registryPath, registrySource: models[168].registrySource, @@ -9571,8 +9763,8 @@ export const OCR_JAPANESE_RECOGNIZER = { params: models[168].params, } as const; -export const OCR_KANNADA_RECOGNIZER = { - name: "OCR_KANNADA_RECOGNIZER", +export const MARIAN_OPUS_ROA_EN_Q4_0 = { + name: "MARIAN_OPUS_ROA_EN_Q4_0", src: `registry://${models[169].registrySource}/${models[169].registryPath}`, registryPath: models[169].registryPath, registrySource: models[169].registrySource, @@ -9589,8 +9781,8 @@ export const OCR_KANNADA_RECOGNIZER = { params: models[169].params, } as const; -export const OCR_KOREAN_RECOGNIZER = { - name: "OCR_KOREAN_RECOGNIZER", +export const MARIAN_OPUS_RU_EN_Q4_0 = { + name: "MARIAN_OPUS_RU_EN_Q4_0", src: `registry://${models[170].registrySource}/${models[170].registryPath}`, registryPath: models[170].registryPath, registrySource: models[170].registrySource, @@ -9607,8 +9799,8 @@ export const OCR_KOREAN_RECOGNIZER = { params: models[170].params, } as const; -export const OCR_LATIN_RECOGNIZER_1 = { - name: "OCR_LATIN_RECOGNIZER_1", +export const MARIAN_OPUS_ZH_EN_Q4_0 = { + name: "MARIAN_OPUS_ZH_EN_Q4_0", src: `registry://${models[171].registrySource}/${models[171].registryPath}`, registryPath: models[171].registryPath, registrySource: models[171].registrySource, @@ -9625,8 +9817,8 @@ export const OCR_LATIN_RECOGNIZER_1 = { params: models[171].params, } as const; -export const OCR_TAMIL_RECOGNIZER = { - name: "OCR_TAMIL_RECOGNIZER", +export const OCR_CRAFT_DETECTOR = { + name: "OCR_CRAFT_DETECTOR", src: `registry://${models[172].registrySource}/${models[172].registryPath}`, registryPath: models[172].registryPath, registrySource: models[172].registrySource, @@ -9643,8 +9835,8 @@ export const OCR_TAMIL_RECOGNIZER = { params: models[172].params, } as const; -export const OCR_TELUGU_RECOGNIZER = { - name: "OCR_TELUGU_RECOGNIZER", +export const OCR_LATIN_RECOGNIZER = { + name: "OCR_LATIN_RECOGNIZER", src: `registry://${models[173].registrySource}/${models[173].registryPath}`, registryPath: models[173].registryPath, registrySource: models[173].registrySource, @@ -9661,8 +9853,8 @@ export const OCR_TELUGU_RECOGNIZER = { params: models[173].params, } as const; -export const OCR_THAI_RECOGNIZER = { - name: "OCR_THAI_RECOGNIZER", +export const OCR_ARABIC_RECOGNIZER = { + name: "OCR_ARABIC_RECOGNIZER", src: `registry://${models[174].registrySource}/${models[174].registryPath}`, registryPath: models[174].registryPath, registrySource: models[174].registrySource, @@ -9679,8 +9871,8 @@ export const OCR_THAI_RECOGNIZER = { params: models[174].params, } as const; -export const OCR_ZH_SIM_RECOGNIZER = { - name: "OCR_ZH_SIM_RECOGNIZER", +export const OCR_BENGALI_RECOGNIZER = { + name: "OCR_BENGALI_RECOGNIZER", src: `registry://${models[175].registrySource}/${models[175].registryPath}`, registryPath: models[175].registryPath, registrySource: models[175].registrySource, @@ -9697,8 +9889,8 @@ export const OCR_ZH_SIM_RECOGNIZER = { params: models[175].params, } as const; -export const OCR_ZH_TRA_RECOGNIZER = { - name: "OCR_ZH_TRA_RECOGNIZER", +export const OCR_CYRILLIC_RECOGNIZER = { + name: "OCR_CYRILLIC_RECOGNIZER", src: `registry://${models[176].registrySource}/${models[176].registryPath}`, registryPath: models[176].registryPath, registrySource: models[176].registrySource, @@ -9715,8 +9907,8 @@ export const OCR_ZH_TRA_RECOGNIZER = { params: models[176].params, } as const; -export const OCR_RECOGNIZER_CRNN_MOBILENET_V3_SMALL = { - name: "OCR_RECOGNIZER_CRNN_MOBILENET_V3_SMALL", +export const OCR_DEVANAGARI_RECOGNIZER = { + name: "OCR_DEVANAGARI_RECOGNIZER", src: `registry://${models[177].registrySource}/${models[177].registryPath}`, registryPath: models[177].registryPath, registrySource: models[177].registrySource, @@ -9733,8 +9925,8 @@ export const OCR_RECOGNIZER_CRNN_MOBILENET_V3_SMALL = { params: models[177].params, } as const; -export const OCR_DETECTOR_DB_MOBILENET_V3_LARGE = { - name: "OCR_DETECTOR_DB_MOBILENET_V3_LARGE", +export const OCR_JAPANESE_RECOGNIZER = { + name: "OCR_JAPANESE_RECOGNIZER", src: `registry://${models[178].registrySource}/${models[178].registryPath}`, registryPath: models[178].registryPath, registrySource: models[178].registrySource, @@ -9751,8 +9943,8 @@ export const OCR_DETECTOR_DB_MOBILENET_V3_LARGE = { params: models[178].params, } as const; -export const OCR_DETECTOR_DB_RESNET50 = { - name: "OCR_DETECTOR_DB_RESNET50", +export const OCR_KANNADA_RECOGNIZER = { + name: "OCR_KANNADA_RECOGNIZER", src: `registry://${models[179].registrySource}/${models[179].registryPath}`, registryPath: models[179].registryPath, registrySource: models[179].registrySource, @@ -9769,8 +9961,8 @@ export const OCR_DETECTOR_DB_RESNET50 = { params: models[179].params, } as const; -export const OCR_RECOGNIZER_PARSEQ = { - name: "OCR_RECOGNIZER_PARSEQ", +export const OCR_KOREAN_RECOGNIZER = { + name: "OCR_KOREAN_RECOGNIZER", src: `registry://${models[180].registrySource}/${models[180].registryPath}`, registryPath: models[180].registryPath, registrySource: models[180].registrySource, @@ -9787,8 +9979,8 @@ export const OCR_RECOGNIZER_PARSEQ = { params: models[180].params, } as const; -export const PARAKEET_EOU_DECODER_FP32 = { - name: "PARAKEET_EOU_DECODER_FP32", +export const OCR_LATIN_RECOGNIZER_1 = { + name: "OCR_LATIN_RECOGNIZER_1", src: `registry://${models[181].registrySource}/${models[181].registryPath}`, registryPath: models[181].registryPath, registrySource: models[181].registrySource, @@ -9805,8 +9997,8 @@ export const PARAKEET_EOU_DECODER_FP32 = { params: models[181].params, } as const; -export const PARAKEET_EOU_ENCODER_FP32 = { - name: "PARAKEET_EOU_ENCODER_FP32", +export const OCR_TAMIL_RECOGNIZER = { + name: "OCR_TAMIL_RECOGNIZER", src: `registry://${models[182].registrySource}/${models[182].registryPath}`, registryPath: models[182].registryPath, registrySource: models[182].registrySource, @@ -9823,8 +10015,8 @@ export const PARAKEET_EOU_ENCODER_FP32 = { params: models[182].params, } as const; -export const PARAKEET_EOU_TOKENIZER = { - name: "PARAKEET_EOU_TOKENIZER", +export const OCR_TELUGU_RECOGNIZER = { + name: "OCR_TELUGU_RECOGNIZER", src: `registry://${models[183].registrySource}/${models[183].registryPath}`, registryPath: models[183].registryPath, registrySource: models[183].registrySource, @@ -9841,8 +10033,8 @@ export const PARAKEET_EOU_TOKENIZER = { params: models[183].params, } as const; -export const PARAKEET_SORTFORMER_FP32 = { - name: "PARAKEET_SORTFORMER_FP32", +export const OCR_THAI_RECOGNIZER = { + name: "OCR_THAI_RECOGNIZER", src: `registry://${models[184].registrySource}/${models[184].registryPath}`, registryPath: models[184].registryPath, registrySource: models[184].registrySource, @@ -9859,8 +10051,8 @@ export const PARAKEET_SORTFORMER_FP32 = { params: models[184].params, } as const; -export const PARAKEET_TDT_DECODER_FP32 = { - name: "PARAKEET_TDT_DECODER_FP32", +export const OCR_ZH_SIM_RECOGNIZER = { + name: "OCR_ZH_SIM_RECOGNIZER", src: `registry://${models[185].registrySource}/${models[185].registryPath}`, registryPath: models[185].registryPath, registrySource: models[185].registrySource, @@ -9877,8 +10069,8 @@ export const PARAKEET_TDT_DECODER_FP32 = { params: models[185].params, } as const; -export const PARAKEET_TDT_ENCODER_FP32 = { - name: "PARAKEET_TDT_ENCODER_FP32", +export const OCR_ZH_TRA_RECOGNIZER = { + name: "OCR_ZH_TRA_RECOGNIZER", src: `registry://${models[186].registrySource}/${models[186].registryPath}`, registryPath: models[186].registryPath, registrySource: models[186].registrySource, @@ -9895,8 +10087,8 @@ export const PARAKEET_TDT_ENCODER_FP32 = { params: models[186].params, } as const; -export const PARAKEET_TDT_ENCODER_DATA_FP32 = { - name: "PARAKEET_TDT_ENCODER_DATA_FP32", +export const OCR_RECOGNIZER_CRNN_MOBILENET_V3_SMALL = { + name: "OCR_RECOGNIZER_CRNN_MOBILENET_V3_SMALL", src: `registry://${models[187].registrySource}/${models[187].registryPath}`, registryPath: models[187].registryPath, registrySource: models[187].registrySource, @@ -9913,8 +10105,8 @@ export const PARAKEET_TDT_ENCODER_DATA_FP32 = { params: models[187].params, } as const; -export const PARAKEET_TDT_PREPROCESSOR_FP32 = { - name: "PARAKEET_TDT_PREPROCESSOR_FP32", +export const OCR_DETECTOR_DB_MOBILENET_V3_LARGE = { + name: "OCR_DETECTOR_DB_MOBILENET_V3_LARGE", src: `registry://${models[188].registrySource}/${models[188].registryPath}`, registryPath: models[188].registryPath, registrySource: models[188].registrySource, @@ -9931,8 +10123,8 @@ export const PARAKEET_TDT_PREPROCESSOR_FP32 = { params: models[188].params, } as const; -export const PARAKEET_TDT_VOCAB = { - name: "PARAKEET_TDT_VOCAB", +export const OCR_DETECTOR_DB_RESNET50 = { + name: "OCR_DETECTOR_DB_RESNET50", src: `registry://${models[189].registrySource}/${models[189].registryPath}`, registryPath: models[189].registryPath, registrySource: models[189].registrySource, @@ -9949,8 +10141,8 @@ export const PARAKEET_TDT_VOCAB = { params: models[189].params, } as const; -export const PARAKEET_CTC_FP32 = { - name: "PARAKEET_CTC_FP32", +export const OCR_RECOGNIZER_PARSEQ = { + name: "OCR_RECOGNIZER_PARSEQ", src: `registry://${models[190].registrySource}/${models[190].registryPath}`, registryPath: models[190].registryPath, registrySource: models[190].registrySource, @@ -9967,8 +10159,8 @@ export const PARAKEET_CTC_FP32 = { params: models[190].params, } as const; -export const PARAKEET_CTC_DATA_FP32 = { - name: "PARAKEET_CTC_DATA_FP32", +export const PARAKEET_EOU_DECODER_FP32 = { + name: "PARAKEET_EOU_DECODER_FP32", src: `registry://${models[191].registrySource}/${models[191].registryPath}`, registryPath: models[191].registryPath, registrySource: models[191].registrySource, @@ -9985,8 +10177,8 @@ export const PARAKEET_CTC_DATA_FP32 = { params: models[191].params, } as const; -export const PARAKEET_CTC_TOKENIZER = { - name: "PARAKEET_CTC_TOKENIZER", +export const PARAKEET_EOU_ENCODER_FP32 = { + name: "PARAKEET_EOU_ENCODER_FP32", src: `registry://${models[192].registrySource}/${models[192].registryPath}`, registryPath: models[192].registryPath, registrySource: models[192].registrySource, @@ -10003,8 +10195,8 @@ export const PARAKEET_CTC_TOKENIZER = { params: models[192].params, } as const; -export const PARAKEET_TDT_DECODER_INT8 = { - name: "PARAKEET_TDT_DECODER_INT8", +export const PARAKEET_EOU_TOKENIZER = { + name: "PARAKEET_EOU_TOKENIZER", src: `registry://${models[193].registrySource}/${models[193].registryPath}`, registryPath: models[193].registryPath, registrySource: models[193].registrySource, @@ -10021,8 +10213,8 @@ export const PARAKEET_TDT_DECODER_INT8 = { params: models[193].params, } as const; -export const PARAKEET_TDT_ENCODER_INT8 = { - name: "PARAKEET_TDT_ENCODER_INT8", +export const PARAKEET_SORTFORMER_FP32 = { + name: "PARAKEET_SORTFORMER_FP32", src: `registry://${models[194].registrySource}/${models[194].registryPath}`, registryPath: models[194].registryPath, registrySource: models[194].registrySource, @@ -10039,8 +10231,8 @@ export const PARAKEET_TDT_ENCODER_INT8 = { params: models[194].params, } as const; -export const PARAKEET_TDT_PREPROCESSOR_INT8 = { - name: "PARAKEET_TDT_PREPROCESSOR_INT8", +export const PARAKEET_TDT_DECODER_FP32 = { + name: "PARAKEET_TDT_DECODER_FP32", src: `registry://${models[195].registrySource}/${models[195].registryPath}`, registryPath: models[195].registryPath, registrySource: models[195].registrySource, @@ -10057,8 +10249,8 @@ export const PARAKEET_TDT_PREPROCESSOR_INT8 = { params: models[195].params, } as const; -export const TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32 = { - name: "TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32", +export const PARAKEET_TDT_ENCODER_FP32 = { + name: "PARAKEET_TDT_ENCODER_FP32", src: `registry://${models[196].registrySource}/${models[196].registryPath}`, registryPath: models[196].registryPath, registrySource: models[196].registrySource, @@ -10075,8 +10267,8 @@ export const TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32 = { params: models[196].params, } as const; -export const TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32_DATA = { - name: "TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32_DATA", +export const PARAKEET_TDT_ENCODER_DATA_FP32 = { + name: "PARAKEET_TDT_ENCODER_DATA_FP32", src: `registry://${models[197].registrySource}/${models[197].registryPath}`, registryPath: models[197].registryPath, registrySource: models[197].registrySource, @@ -10093,8 +10285,8 @@ export const TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32_DATA = { params: models[197].params, } as const; -export const TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32 = { - name: "TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32", +export const PARAKEET_TDT_PREPROCESSOR_FP32 = { + name: "PARAKEET_TDT_PREPROCESSOR_FP32", src: `registry://${models[198].registrySource}/${models[198].registryPath}`, registryPath: models[198].registryPath, registrySource: models[198].registrySource, @@ -10111,8 +10303,8 @@ export const TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32 = { params: models[198].params, } as const; -export const TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32_DATA = { - name: "TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32_DATA", +export const PARAKEET_TDT_VOCAB = { + name: "PARAKEET_TDT_VOCAB", src: `registry://${models[199].registrySource}/${models[199].registryPath}`, registryPath: models[199].registryPath, registrySource: models[199].registrySource, @@ -10129,8 +10321,8 @@ export const TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32_DATA = { params: models[199].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16 = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16", +export const PARAKEET_CTC_FP32 = { + name: "PARAKEET_CTC_FP32", src: `registry://${models[200].registrySource}/${models[200].registryPath}`, registryPath: models[200].registryPath, registrySource: models[200].registrySource, @@ -10147,8 +10339,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16 = { params: models[200].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16_DATA = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16_DATA", +export const PARAKEET_CTC_DATA_FP32 = { + name: "PARAKEET_CTC_DATA_FP32", src: `registry://${models[201].registrySource}/${models[201].registryPath}`, registryPath: models[201].registryPath, registrySource: models[201].registrySource, @@ -10165,8 +10357,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16_DATA = { params: models[201].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4 = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4", +export const PARAKEET_CTC_TOKENIZER = { + name: "PARAKEET_CTC_TOKENIZER", src: `registry://${models[202].registrySource}/${models[202].registryPath}`, registryPath: models[202].registryPath, registrySource: models[202].registrySource, @@ -10183,8 +10375,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4 = { params: models[202].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4_DATA = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4_DATA", +export const PARAKEET_TDT_DECODER_INT8 = { + name: "PARAKEET_TDT_DECODER_INT8", src: `registry://${models[203].registrySource}/${models[203].registryPath}`, registryPath: models[203].registryPath, registrySource: models[203].registrySource, @@ -10201,8 +10393,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4_DATA = { params: models[203].params, } as const; -export const TTS_EN_ES_CHATTERBOX_Q4F16 = { - name: "TTS_EN_ES_CHATTERBOX_Q4F16", +export const PARAKEET_TDT_ENCODER_INT8 = { + name: "PARAKEET_TDT_ENCODER_INT8", src: `registry://${models[204].registrySource}/${models[204].registryPath}`, registryPath: models[204].registryPath, registrySource: models[204].registrySource, @@ -10219,8 +10411,8 @@ export const TTS_EN_ES_CHATTERBOX_Q4F16 = { params: models[204].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4F16_DATA = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4F16_DATA", +export const PARAKEET_TDT_PREPROCESSOR_INT8 = { + name: "PARAKEET_TDT_PREPROCESSOR_INT8", src: `registry://${models[205].registrySource}/${models[205].registryPath}`, registryPath: models[205].registryPath, registrySource: models[205].registrySource, @@ -10237,8 +10429,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4F16_DATA = { params: models[205].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32 = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32", +export const TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32 = { + name: "TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32", src: `registry://${models[206].registrySource}/${models[206].registryPath}`, registryPath: models[206].registryPath, registrySource: models[206].registrySource, @@ -10255,8 +10447,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32 = { params: models[206].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32_DATA = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32_DATA", +export const TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32_DATA = { + name: "TTS_MULTILINGUAL_CONDITIONAL_DECODER_CHATTERBOX_FP32_DATA", src: `registry://${models[207].registrySource}/${models[207].registryPath}`, registryPath: models[207].registryPath, registrySource: models[207].registrySource, @@ -10273,8 +10465,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32_DATA = { params: models[207].params, } as const; -export const TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32 = { - name: "TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32", +export const TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32 = { + name: "TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32", src: `registry://${models[208].registrySource}/${models[208].registryPath}`, registryPath: models[208].registryPath, registrySource: models[208].registrySource, @@ -10291,8 +10483,8 @@ export const TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32 = { params: models[208].params, } as const; -export const TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32_DATA = { - name: "TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32_DATA", +export const TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32_DATA = { + name: "TTS_MULTILINGUAL_EMBED_TOKENS_CHATTERBOX_FP32_DATA", src: `registry://${models[209].registrySource}/${models[209].registryPath}`, registryPath: models[209].registryPath, registrySource: models[209].registrySource, @@ -10309,8 +10501,8 @@ export const TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32_DATA = { params: models[209].params, } as const; -export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX = { - name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16 = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16", src: `registry://${models[210].registrySource}/${models[210].registryPath}`, registryPath: models[210].registryPath, registrySource: models[210].registrySource, @@ -10327,8 +10519,8 @@ export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX = { params: models[210].params, } as const; -export const TTS_LATENT_DENOISER_SUPERTONIC_FP32 = { - name: "TTS_LATENT_DENOISER_SUPERTONIC_FP32", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16_DATA = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP16_DATA", src: `registry://${models[211].registrySource}/${models[211].registryPath}`, registryPath: models[211].registryPath, registrySource: models[211].registrySource, @@ -10345,8 +10537,8 @@ export const TTS_LATENT_DENOISER_SUPERTONIC_FP32 = { params: models[211].params, } as const; -export const TTS_LATENT_DENOISER_SUPERTONIC_FP32_DATA = { - name: "TTS_LATENT_DENOISER_SUPERTONIC_FP32_DATA", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4 = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4", src: `registry://${models[212].registrySource}/${models[212].registryPath}`, registryPath: models[212].registryPath, registrySource: models[212].registrySource, @@ -10363,8 +10555,8 @@ export const TTS_LATENT_DENOISER_SUPERTONIC_FP32_DATA = { params: models[212].params, } as const; -export const TTS_TEXT_ENCODER_SUPERTONIC_FP32 = { - name: "TTS_TEXT_ENCODER_SUPERTONIC_FP32", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4_DATA = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4_DATA", src: `registry://${models[213].registrySource}/${models[213].registryPath}`, registryPath: models[213].registryPath, registrySource: models[213].registrySource, @@ -10381,8 +10573,8 @@ export const TTS_TEXT_ENCODER_SUPERTONIC_FP32 = { params: models[213].params, } as const; -export const TTS_TEXT_ENCODER_SUPERTONIC_FP32_DATA = { - name: "TTS_TEXT_ENCODER_SUPERTONIC_FP32_DATA", +export const TTS_EN_ES_CHATTERBOX_Q4F16 = { + name: "TTS_EN_ES_CHATTERBOX_Q4F16", src: `registry://${models[214].registrySource}/${models[214].registryPath}`, registryPath: models[214].registryPath, registrySource: models[214].registrySource, @@ -10399,8 +10591,8 @@ export const TTS_TEXT_ENCODER_SUPERTONIC_FP32_DATA = { params: models[214].params, } as const; -export const TTS_VOICE_DECODER_SUPERTONIC_FP32 = { - name: "TTS_VOICE_DECODER_SUPERTONIC_FP32", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4F16_DATA = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_Q4F16_DATA", src: `registry://${models[215].registrySource}/${models[215].registryPath}`, registryPath: models[215].registryPath, registrySource: models[215].registrySource, @@ -10417,8 +10609,8 @@ export const TTS_VOICE_DECODER_SUPERTONIC_FP32 = { params: models[215].params, } as const; -export const TTS_VOICE_DECODER_SUPERTONIC_FP32_DATA = { - name: "TTS_VOICE_DECODER_SUPERTONIC_FP32_DATA", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32 = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32", src: `registry://${models[216].registrySource}/${models[216].registryPath}`, registryPath: models[216].registryPath, registrySource: models[216].registrySource, @@ -10435,8 +10627,8 @@ export const TTS_VOICE_DECODER_SUPERTONIC_FP32_DATA = { params: models[216].params, } as const; -export const TTS_TOKENIZER_SUPERTONIC = { - name: "TTS_TOKENIZER_SUPERTONIC", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32_DATA = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX_FP32_DATA", src: `registry://${models[217].registrySource}/${models[217].registryPath}`, registryPath: models[217].registryPath, registrySource: models[217].registrySource, @@ -10453,8 +10645,8 @@ export const TTS_TOKENIZER_SUPERTONIC = { params: models[217].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC = { - name: "TTS_VOICE_STYLE_SUPERTONIC", +export const TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32 = { + name: "TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32", src: `registry://${models[218].registrySource}/${models[218].registryPath}`, registryPath: models[218].registryPath, registrySource: models[218].registrySource, @@ -10471,8 +10663,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC = { params: models[218].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_1 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_1", +export const TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32_DATA = { + name: "TTS_MULTILINGUAL_SPEECH_ENCODER_CHATTERBOX_FP32_DATA", src: `registry://${models[219].registrySource}/${models[219].registryPath}`, registryPath: models[219].registryPath, registrySource: models[219].registrySource, @@ -10489,8 +10681,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_1 = { params: models[219].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_2 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_2", +export const TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX = { + name: "TTS_MULTILINGUAL_LANGUAGE_MODEL_CHATTERBOX", src: `registry://${models[220].registrySource}/${models[220].registryPath}`, registryPath: models[220].registryPath, registrySource: models[220].registrySource, @@ -10507,8 +10699,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_2 = { params: models[220].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_3 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_3", +export const TTS_LATENT_DENOISER_SUPERTONIC_FP32 = { + name: "TTS_LATENT_DENOISER_SUPERTONIC_FP32", src: `registry://${models[221].registrySource}/${models[221].registryPath}`, registryPath: models[221].registryPath, registrySource: models[221].registrySource, @@ -10525,8 +10717,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_3 = { params: models[221].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_4 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_4", +export const TTS_LATENT_DENOISER_SUPERTONIC_FP32_DATA = { + name: "TTS_LATENT_DENOISER_SUPERTONIC_FP32_DATA", src: `registry://${models[222].registrySource}/${models[222].registryPath}`, registryPath: models[222].registryPath, registrySource: models[222].registrySource, @@ -10543,8 +10735,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_4 = { params: models[222].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_5 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_5", +export const TTS_TEXT_ENCODER_SUPERTONIC_FP32 = { + name: "TTS_TEXT_ENCODER_SUPERTONIC_FP32", src: `registry://${models[223].registrySource}/${models[223].registryPath}`, registryPath: models[223].registryPath, registrySource: models[223].registrySource, @@ -10561,8 +10753,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_5 = { params: models[223].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_6 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_6", +export const TTS_TEXT_ENCODER_SUPERTONIC_FP32_DATA = { + name: "TTS_TEXT_ENCODER_SUPERTONIC_FP32_DATA", src: `registry://${models[224].registrySource}/${models[224].registryPath}`, registryPath: models[224].registryPath, registrySource: models[224].registrySource, @@ -10579,8 +10771,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_6 = { params: models[224].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_7 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_7", +export const TTS_VOICE_DECODER_SUPERTONIC_FP32 = { + name: "TTS_VOICE_DECODER_SUPERTONIC_FP32", src: `registry://${models[225].registrySource}/${models[225].registryPath}`, registryPath: models[225].registryPath, registrySource: models[225].registrySource, @@ -10597,8 +10789,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_7 = { params: models[225].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_8 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_8", +export const TTS_VOICE_DECODER_SUPERTONIC_FP32_DATA = { + name: "TTS_VOICE_DECODER_SUPERTONIC_FP32_DATA", src: `registry://${models[226].registrySource}/${models[226].registryPath}`, registryPath: models[226].registryPath, registrySource: models[226].registrySource, @@ -10615,8 +10807,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_8 = { params: models[226].params, } as const; -export const TTS_VOICE_STYLE_SUPERTONIC_9 = { - name: "TTS_VOICE_STYLE_SUPERTONIC_9", +export const TTS_TOKENIZER_SUPERTONIC = { + name: "TTS_TOKENIZER_SUPERTONIC", src: `registry://${models[227].registrySource}/${models[227].registryPath}`, registryPath: models[227].registryPath, registrySource: models[227].registrySource, @@ -10633,8 +10825,8 @@ export const TTS_VOICE_STYLE_SUPERTONIC_9 = { params: models[227].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16 = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16", +export const TTS_VOICE_STYLE_SUPERTONIC = { + name: "TTS_VOICE_STYLE_SUPERTONIC", src: `registry://${models[228].registrySource}/${models[228].registryPath}`, registryPath: models[228].registryPath, registrySource: models[228].registrySource, @@ -10651,8 +10843,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16 = { params: models[228].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16_DATA = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16_DATA", +export const TTS_VOICE_STYLE_SUPERTONIC_1 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_1", src: `registry://${models[229].registrySource}/${models[229].registryPath}`, registryPath: models[229].registryPath, registrySource: models[229].registrySource, @@ -10669,8 +10861,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16_DATA = { params: models[229].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4 = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4", +export const TTS_VOICE_STYLE_SUPERTONIC_2 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_2", src: `registry://${models[230].registrySource}/${models[230].registryPath}`, registryPath: models[230].registryPath, registrySource: models[230].registrySource, @@ -10687,8 +10879,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4 = { params: models[230].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4_DATA = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4_DATA", +export const TTS_VOICE_STYLE_SUPERTONIC_3 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_3", src: `registry://${models[231].registrySource}/${models[231].registryPath}`, registryPath: models[231].registryPath, registrySource: models[231].registrySource, @@ -10705,8 +10897,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4_DATA = { params: models[231].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16 = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16", +export const TTS_VOICE_STYLE_SUPERTONIC_4 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_4", src: `registry://${models[232].registrySource}/${models[232].registryPath}`, registryPath: models[232].registryPath, registrySource: models[232].registrySource, @@ -10723,8 +10915,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16 = { params: models[232].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16_DATA = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16_DATA", +export const TTS_VOICE_STYLE_SUPERTONIC_5 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_5", src: `registry://${models[233].registrySource}/${models[233].registryPath}`, registryPath: models[233].registryPath, registrySource: models[233].registrySource, @@ -10741,8 +10933,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16_DATA = { params: models[233].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED", +export const TTS_VOICE_STYLE_SUPERTONIC_6 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_6", src: `registry://${models[234].registrySource}/${models[234].registryPath}`, registryPath: models[234].registryPath, registrySource: models[234].registrySource, @@ -10759,8 +10951,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED = { params: models[234].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED_DATA = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED_DATA", +export const TTS_VOICE_STYLE_SUPERTONIC_7 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_7", src: `registry://${models[235].registrySource}/${models[235].registryPath}`, registryPath: models[235].registryPath, registrySource: models[235].registrySource, @@ -10777,8 +10969,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED_DATA = { params: models[235].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32 = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32", +export const TTS_VOICE_STYLE_SUPERTONIC_8 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_8", src: `registry://${models[236].registrySource}/${models[236].registryPath}`, registryPath: models[236].registryPath, registrySource: models[236].registrySource, @@ -10795,8 +10987,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32 = { params: models[236].params, } as const; -export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32_DATA = { - name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32_DATA", +export const TTS_VOICE_STYLE_SUPERTONIC_9 = { + name: "TTS_VOICE_STYLE_SUPERTONIC_9", src: `registry://${models[237].registrySource}/${models[237].registryPath}`, registryPath: models[237].registryPath, registrySource: models[237].registrySource, @@ -10813,8 +11005,8 @@ export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32_DATA = { params: models[237].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16 = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16 = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16", src: `registry://${models[238].registrySource}/${models[238].registryPath}`, registryPath: models[238].registryPath, registrySource: models[238].registrySource, @@ -10831,8 +11023,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16 = { params: models[238].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16_DATA = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16_DATA", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16_DATA = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP16_DATA", src: `registry://${models[239].registrySource}/${models[239].registryPath}`, registryPath: models[239].registryPath, registrySource: models[239].registrySource, @@ -10849,8 +11041,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16_DATA = { params: models[239].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4 = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4 = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4", src: `registry://${models[240].registrySource}/${models[240].registryPath}`, registryPath: models[240].registryPath, registrySource: models[240].registrySource, @@ -10867,8 +11059,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4 = { params: models[240].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4_DATA = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4_DATA", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4_DATA = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4_DATA", src: `registry://${models[241].registrySource}/${models[241].registryPath}`, registryPath: models[241].registryPath, registrySource: models[241].registrySource, @@ -10885,8 +11077,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4_DATA = { params: models[241].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16 = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16 = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16", src: `registry://${models[242].registrySource}/${models[242].registryPath}`, registryPath: models[242].registryPath, registrySource: models[242].registrySource, @@ -10903,8 +11095,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16 = { params: models[242].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16_DATA = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16_DATA", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16_DATA = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_Q4F16_DATA", src: `registry://${models[243].registrySource}/${models[243].registryPath}`, registryPath: models[243].registryPath, registrySource: models[243].registrySource, @@ -10921,8 +11113,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16_DATA = { params: models[243].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED", src: `registry://${models[244].registrySource}/${models[244].registryPath}`, registryPath: models[244].registryPath, registrySource: models[244].registrySource, @@ -10939,8 +11131,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED = { params: models[244].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED_DATA = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED_DATA", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED_DATA = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_QUANTIZED_DATA", src: `registry://${models[245].registrySource}/${models[245].registryPath}`, registryPath: models[245].registryPath, registrySource: models[245].registrySource, @@ -10957,8 +11149,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED_DATA = { params: models[245].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32 = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32 = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32", src: `registry://${models[246].registrySource}/${models[246].registryPath}`, registryPath: models[246].registryPath, registrySource: models[246].registrySource, @@ -10975,8 +11167,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32 = { params: models[246].params, } as const; -export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32_DATA = { - name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32_DATA", +export const TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32_DATA = { + name: "TTS_CONDITIONAL_DECODER_EN_CHATTERBOX_FP32_DATA", src: `registry://${models[247].registrySource}/${models[247].registryPath}`, registryPath: models[247].registryPath, registrySource: models[247].registrySource, @@ -10993,8 +11185,8 @@ export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32_DATA = { params: models[247].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16 = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16 = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16", src: `registry://${models[248].registrySource}/${models[248].registryPath}`, registryPath: models[248].registryPath, registrySource: models[248].registrySource, @@ -11011,8 +11203,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16 = { params: models[248].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16_DATA = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16_DATA", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16_DATA = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP16_DATA", src: `registry://${models[249].registrySource}/${models[249].registryPath}`, registryPath: models[249].registryPath, registrySource: models[249].registrySource, @@ -11029,8 +11221,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16_DATA = { params: models[249].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4 = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4 = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4", src: `registry://${models[250].registrySource}/${models[250].registryPath}`, registryPath: models[250].registryPath, registrySource: models[250].registrySource, @@ -11047,8 +11239,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4 = { params: models[250].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4_DATA = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4_DATA", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4_DATA = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4_DATA", src: `registry://${models[251].registrySource}/${models[251].registryPath}`, registryPath: models[251].registryPath, registrySource: models[251].registrySource, @@ -11065,8 +11257,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4_DATA = { params: models[251].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16 = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16 = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16", src: `registry://${models[252].registrySource}/${models[252].registryPath}`, registryPath: models[252].registryPath, registrySource: models[252].registrySource, @@ -11083,8 +11275,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16 = { params: models[252].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16_DATA = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16_DATA", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16_DATA = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_Q4F16_DATA", src: `registry://${models[253].registrySource}/${models[253].registryPath}`, registryPath: models[253].registryPath, registrySource: models[253].registrySource, @@ -11101,8 +11293,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16_DATA = { params: models[253].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED", src: `registry://${models[254].registrySource}/${models[254].registryPath}`, registryPath: models[254].registryPath, registrySource: models[254].registrySource, @@ -11119,8 +11311,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED = { params: models[254].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED_DATA = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED_DATA", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED_DATA = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_QUANTIZED_DATA", src: `registry://${models[255].registrySource}/${models[255].registryPath}`, registryPath: models[255].registryPath, registrySource: models[255].registrySource, @@ -11137,8 +11329,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED_DATA = { params: models[255].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32 = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32 = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32", src: `registry://${models[256].registrySource}/${models[256].registryPath}`, registryPath: models[256].registryPath, registrySource: models[256].registrySource, @@ -11155,8 +11347,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32 = { params: models[256].params, } as const; -export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32_DATA = { - name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32_DATA", +export const TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32_DATA = { + name: "TTS_EMBED_TOKENS_EN_CHATTERBOX_FP32_DATA", src: `registry://${models[257].registrySource}/${models[257].registryPath}`, registryPath: models[257].registryPath, registrySource: models[257].registrySource, @@ -11173,8 +11365,8 @@ export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32_DATA = { params: models[257].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16 = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16 = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16", src: `registry://${models[258].registrySource}/${models[258].registryPath}`, registryPath: models[258].registryPath, registrySource: models[258].registrySource, @@ -11191,8 +11383,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16 = { params: models[258].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16_DATA = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16_DATA", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16_DATA = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP16_DATA", src: `registry://${models[259].registrySource}/${models[259].registryPath}`, registryPath: models[259].registryPath, registrySource: models[259].registrySource, @@ -11209,8 +11401,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16_DATA = { params: models[259].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4 = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4 = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4", src: `registry://${models[260].registrySource}/${models[260].registryPath}`, registryPath: models[260].registryPath, registrySource: models[260].registrySource, @@ -11227,8 +11419,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4 = { params: models[260].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4_DATA = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4_DATA", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4_DATA = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4_DATA", src: `registry://${models[261].registrySource}/${models[261].registryPath}`, registryPath: models[261].registryPath, registrySource: models[261].registrySource, @@ -11245,8 +11437,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4_DATA = { params: models[261].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16 = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16 = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16", src: `registry://${models[262].registrySource}/${models[262].registryPath}`, registryPath: models[262].registryPath, registrySource: models[262].registrySource, @@ -11263,8 +11455,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16 = { params: models[262].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16_DATA = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16_DATA", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16_DATA = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_Q4F16_DATA", src: `registry://${models[263].registrySource}/${models[263].registryPath}`, registryPath: models[263].registryPath, registrySource: models[263].registrySource, @@ -11281,8 +11473,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16_DATA = { params: models[263].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED", src: `registry://${models[264].registrySource}/${models[264].registryPath}`, registryPath: models[264].registryPath, registrySource: models[264].registrySource, @@ -11299,8 +11491,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED = { params: models[264].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED_DATA = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED_DATA", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED_DATA = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_QUANTIZED_DATA", src: `registry://${models[265].registrySource}/${models[265].registryPath}`, registryPath: models[265].registryPath, registrySource: models[265].registrySource, @@ -11317,8 +11509,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED_DATA = { params: models[265].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32 = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32 = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32", src: `registry://${models[266].registrySource}/${models[266].registryPath}`, registryPath: models[266].registryPath, registrySource: models[266].registrySource, @@ -11335,8 +11527,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32 = { params: models[266].params, } as const; -export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32_DATA = { - name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32_DATA", +export const TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32_DATA = { + name: "TTS_LANGUAGE_MODEL_EN_CHATTERBOX_FP32_DATA", src: `registry://${models[267].registrySource}/${models[267].registryPath}`, registryPath: models[267].registryPath, registrySource: models[267].registrySource, @@ -11353,8 +11545,8 @@ export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32_DATA = { params: models[267].params, } as const; -export const TTS_TOKENIZER_EN_CHATTERBOX = { - name: "TTS_TOKENIZER_EN_CHATTERBOX", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16 = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16", src: `registry://${models[268].registrySource}/${models[268].registryPath}`, registryPath: models[268].registryPath, registrySource: models[268].registrySource, @@ -11371,8 +11563,8 @@ export const TTS_TOKENIZER_EN_CHATTERBOX = { params: models[268].params, } as const; -export const WHISPER_BASE_Q8_0 = { - name: "WHISPER_BASE_Q8_0", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16_DATA = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP16_DATA", src: `registry://${models[269].registrySource}/${models[269].registryPath}`, registryPath: models[269].registryPath, registrySource: models[269].registrySource, @@ -11389,8 +11581,8 @@ export const WHISPER_BASE_Q8_0 = { params: models[269].params, } as const; -export const WHISPER_BASE_Q0F16 = { - name: "WHISPER_BASE_Q0F16", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4 = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4", src: `registry://${models[270].registrySource}/${models[270].registryPath}`, registryPath: models[270].registryPath, registrySource: models[270].registrySource, @@ -11407,8 +11599,8 @@ export const WHISPER_BASE_Q0F16 = { params: models[270].params, } as const; -export const WHISPER_EN_BASE_Q8_0 = { - name: "WHISPER_EN_BASE_Q8_0", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4_DATA = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4_DATA", src: `registry://${models[271].registrySource}/${models[271].registryPath}`, registryPath: models[271].registryPath, registrySource: models[271].registrySource, @@ -11425,8 +11617,8 @@ export const WHISPER_EN_BASE_Q8_0 = { params: models[271].params, } as const; -export const WHISPER_EN_BASE_Q0F16 = { - name: "WHISPER_EN_BASE_Q0F16", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16 = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16", src: `registry://${models[272].registrySource}/${models[272].registryPath}`, registryPath: models[272].registryPath, registrySource: models[272].registrySource, @@ -11443,8 +11635,8 @@ export const WHISPER_EN_BASE_Q0F16 = { params: models[272].params, } as const; -export const WHISPER_LARGE_V3_TURBO = { - name: "WHISPER_LARGE_V3_TURBO", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16_DATA = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_Q4F16_DATA", src: `registry://${models[273].registrySource}/${models[273].registryPath}`, registryPath: models[273].registryPath, registrySource: models[273].registrySource, @@ -11461,8 +11653,8 @@ export const WHISPER_LARGE_V3_TURBO = { params: models[273].params, } as const; -export const WHISPER_SMALL_Q8_0 = { - name: "WHISPER_SMALL_Q8_0", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED", src: `registry://${models[274].registrySource}/${models[274].registryPath}`, registryPath: models[274].registryPath, registrySource: models[274].registrySource, @@ -11479,8 +11671,8 @@ export const WHISPER_SMALL_Q8_0 = { params: models[274].params, } as const; -export const WHISPER_SMALL_Q0F16 = { - name: "WHISPER_SMALL_Q0F16", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED_DATA = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_QUANTIZED_DATA", src: `registry://${models[275].registrySource}/${models[275].registryPath}`, registryPath: models[275].registryPath, registrySource: models[275].registrySource, @@ -11497,8 +11689,8 @@ export const WHISPER_SMALL_Q0F16 = { params: models[275].params, } as const; -export const WHISPER_EN_SMALL_Q8_0 = { - name: "WHISPER_EN_SMALL_Q8_0", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32 = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32", src: `registry://${models[276].registrySource}/${models[276].registryPath}`, registryPath: models[276].registryPath, registrySource: models[276].registrySource, @@ -11515,8 +11707,8 @@ export const WHISPER_EN_SMALL_Q8_0 = { params: models[276].params, } as const; -export const WHISPER_EN_SMALL_Q0F16 = { - name: "WHISPER_EN_SMALL_Q0F16", +export const TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32_DATA = { + name: "TTS_SPEECH_ENCODER_EN_CHATTERBOX_FP32_DATA", src: `registry://${models[277].registrySource}/${models[277].registryPath}`, registryPath: models[277].registryPath, registrySource: models[277].registrySource, @@ -11533,8 +11725,8 @@ export const WHISPER_EN_SMALL_Q0F16 = { params: models[277].params, } as const; -export const WHISPER_TINY_Q8_0 = { - name: "WHISPER_TINY_Q8_0", +export const TTS_TOKENIZER_EN_CHATTERBOX = { + name: "TTS_TOKENIZER_EN_CHATTERBOX", src: `registry://${models[278].registrySource}/${models[278].registryPath}`, registryPath: models[278].registryPath, registrySource: models[278].registrySource, @@ -11551,8 +11743,8 @@ export const WHISPER_TINY_Q8_0 = { params: models[278].params, } as const; -export const WHISPER_TINY = { - name: "WHISPER_TINY", +export const WHISPER_BASE_Q8_0 = { + name: "WHISPER_BASE_Q8_0", src: `registry://${models[279].registrySource}/${models[279].registryPath}`, registryPath: models[279].registryPath, registrySource: models[279].registrySource, @@ -11569,8 +11761,8 @@ export const WHISPER_TINY = { params: models[279].params, } as const; -export const WHISPER_EN_TINY_Q8_0 = { - name: "WHISPER_EN_TINY_Q8_0", +export const WHISPER_BASE_Q0F16 = { + name: "WHISPER_BASE_Q0F16", src: `registry://${models[280].registrySource}/${models[280].registryPath}`, registryPath: models[280].registryPath, registrySource: models[280].registrySource, @@ -11587,8 +11779,8 @@ export const WHISPER_EN_TINY_Q8_0 = { params: models[280].params, } as const; -export const WHISPER_EN_TINY_Q0F16 = { - name: "WHISPER_EN_TINY_Q0F16", +export const WHISPER_EN_BASE_Q8_0 = { + name: "WHISPER_EN_BASE_Q8_0", src: `registry://${models[281].registrySource}/${models[281].registryPath}`, registryPath: models[281].registryPath, registrySource: models[281].registrySource, @@ -11605,8 +11797,8 @@ export const WHISPER_EN_TINY_Q0F16 = { params: models[281].params, } as const; -export const VAD_SILERO_5_1_2 = { - name: "VAD_SILERO_5_1_2", +export const WHISPER_EN_BASE_Q0F16 = { + name: "WHISPER_EN_BASE_Q0F16", src: `registry://${models[282].registrySource}/${models[282].registryPath}`, registryPath: models[282].registryPath, registrySource: models[282].registrySource, @@ -11623,8 +11815,8 @@ export const VAD_SILERO_5_1_2 = { params: models[282].params, } as const; -export const WHISPER_FRENCH_BASE_F16 = { - name: "WHISPER_FRENCH_BASE_F16", +export const WHISPER_LARGE_V3_TURBO = { + name: "WHISPER_LARGE_V3_TURBO", src: `registry://${models[283].registrySource}/${models[283].registryPath}`, registryPath: models[283].registryPath, registrySource: models[283].registrySource, @@ -11641,8 +11833,8 @@ export const WHISPER_FRENCH_BASE_F16 = { params: models[283].params, } as const; -export const WHISPER_FRENCH_BASE_Q8_0 = { - name: "WHISPER_FRENCH_BASE_Q8_0", +export const WHISPER_SMALL_Q8_0 = { + name: "WHISPER_SMALL_Q8_0", src: `registry://${models[284].registrySource}/${models[284].registryPath}`, registryPath: models[284].registryPath, registrySource: models[284].registrySource, @@ -11659,8 +11851,8 @@ export const WHISPER_FRENCH_BASE_Q8_0 = { params: models[284].params, } as const; -export const WHISPER_FRENCH_TINY_F16 = { - name: "WHISPER_FRENCH_TINY_F16", +export const WHISPER_SMALL_Q0F16 = { + name: "WHISPER_SMALL_Q0F16", src: `registry://${models[285].registrySource}/${models[285].registryPath}`, registryPath: models[285].registryPath, registrySource: models[285].registrySource, @@ -11677,8 +11869,8 @@ export const WHISPER_FRENCH_TINY_F16 = { params: models[285].params, } as const; -export const WHISPER_FRENCH_TINY_Q8_0 = { - name: "WHISPER_FRENCH_TINY_Q8_0", +export const WHISPER_EN_SMALL_Q8_0 = { + name: "WHISPER_EN_SMALL_Q8_0", src: `registry://${models[286].registrySource}/${models[286].registryPath}`, registryPath: models[286].registryPath, registrySource: models[286].registrySource, @@ -11695,8 +11887,8 @@ export const WHISPER_FRENCH_TINY_Q8_0 = { params: models[286].params, } as const; -export const WHISPER_GERMAN_BASE_F16 = { - name: "WHISPER_GERMAN_BASE_F16", +export const WHISPER_EN_SMALL_Q0F16 = { + name: "WHISPER_EN_SMALL_Q0F16", src: `registry://${models[287].registrySource}/${models[287].registryPath}`, registryPath: models[287].registryPath, registrySource: models[287].registrySource, @@ -11713,8 +11905,8 @@ export const WHISPER_GERMAN_BASE_F16 = { params: models[287].params, } as const; -export const WHISPER_GERMAN_BASE_Q8_0 = { - name: "WHISPER_GERMAN_BASE_Q8_0", +export const WHISPER_TINY_Q8_0 = { + name: "WHISPER_TINY_Q8_0", src: `registry://${models[288].registrySource}/${models[288].registryPath}`, registryPath: models[288].registryPath, registrySource: models[288].registrySource, @@ -11731,8 +11923,8 @@ export const WHISPER_GERMAN_BASE_Q8_0 = { params: models[288].params, } as const; -export const WHISPER_GERMAN_TINY_F16 = { - name: "WHISPER_GERMAN_TINY_F16", +export const WHISPER_TINY = { + name: "WHISPER_TINY", src: `registry://${models[289].registrySource}/${models[289].registryPath}`, registryPath: models[289].registryPath, registrySource: models[289].registrySource, @@ -11749,8 +11941,8 @@ export const WHISPER_GERMAN_TINY_F16 = { params: models[289].params, } as const; -export const WHISPER_GERMAN_TINY_Q8_0 = { - name: "WHISPER_GERMAN_TINY_Q8_0", +export const WHISPER_EN_TINY_Q8_0 = { + name: "WHISPER_EN_TINY_Q8_0", src: `registry://${models[290].registrySource}/${models[290].registryPath}`, registryPath: models[290].registryPath, registrySource: models[290].registrySource, @@ -11767,8 +11959,8 @@ export const WHISPER_GERMAN_TINY_Q8_0 = { params: models[290].params, } as const; -export const WHISPER_ITALIAN_BASE_F16 = { - name: "WHISPER_ITALIAN_BASE_F16", +export const WHISPER_EN_TINY_Q0F16 = { + name: "WHISPER_EN_TINY_Q0F16", src: `registry://${models[291].registrySource}/${models[291].registryPath}`, registryPath: models[291].registryPath, registrySource: models[291].registrySource, @@ -11785,8 +11977,8 @@ export const WHISPER_ITALIAN_BASE_F16 = { params: models[291].params, } as const; -export const WHISPER_ITALIAN_BASE_Q8_0 = { - name: "WHISPER_ITALIAN_BASE_Q8_0", +export const VAD_SILERO_5_1_2 = { + name: "VAD_SILERO_5_1_2", src: `registry://${models[292].registrySource}/${models[292].registryPath}`, registryPath: models[292].registryPath, registrySource: models[292].registrySource, @@ -11803,8 +11995,8 @@ export const WHISPER_ITALIAN_BASE_Q8_0 = { params: models[292].params, } as const; -export const WHISPER_ITALIAN_TINY_F16 = { - name: "WHISPER_ITALIAN_TINY_F16", +export const WHISPER_FRENCH_BASE_F16 = { + name: "WHISPER_FRENCH_BASE_F16", src: `registry://${models[293].registrySource}/${models[293].registryPath}`, registryPath: models[293].registryPath, registrySource: models[293].registrySource, @@ -11821,8 +12013,8 @@ export const WHISPER_ITALIAN_TINY_F16 = { params: models[293].params, } as const; -export const WHISPER_ITALIAN_TINY_Q8_0 = { - name: "WHISPER_ITALIAN_TINY_Q8_0", +export const WHISPER_FRENCH_BASE_Q8_0 = { + name: "WHISPER_FRENCH_BASE_Q8_0", src: `registry://${models[294].registrySource}/${models[294].registryPath}`, registryPath: models[294].registryPath, registrySource: models[294].registrySource, @@ -11839,8 +12031,8 @@ export const WHISPER_ITALIAN_TINY_Q8_0 = { params: models[294].params, } as const; -export const WHISPER_JAPANESE_BASE_F16 = { - name: "WHISPER_JAPANESE_BASE_F16", +export const WHISPER_FRENCH_TINY_F16 = { + name: "WHISPER_FRENCH_TINY_F16", src: `registry://${models[295].registrySource}/${models[295].registryPath}`, registryPath: models[295].registryPath, registrySource: models[295].registrySource, @@ -11857,8 +12049,8 @@ export const WHISPER_JAPANESE_BASE_F16 = { params: models[295].params, } as const; -export const WHISPER_JAPANESE_BASE_Q8_0 = { - name: "WHISPER_JAPANESE_BASE_Q8_0", +export const WHISPER_FRENCH_TINY_Q8_0 = { + name: "WHISPER_FRENCH_TINY_Q8_0", src: `registry://${models[296].registrySource}/${models[296].registryPath}`, registryPath: models[296].registryPath, registrySource: models[296].registrySource, @@ -11875,8 +12067,8 @@ export const WHISPER_JAPANESE_BASE_Q8_0 = { params: models[296].params, } as const; -export const WHISPER_JAPANESE_TINY_F16 = { - name: "WHISPER_JAPANESE_TINY_F16", +export const WHISPER_GERMAN_BASE_F16 = { + name: "WHISPER_GERMAN_BASE_F16", src: `registry://${models[297].registrySource}/${models[297].registryPath}`, registryPath: models[297].registryPath, registrySource: models[297].registrySource, @@ -11893,8 +12085,8 @@ export const WHISPER_JAPANESE_TINY_F16 = { params: models[297].params, } as const; -export const WHISPER_JAPANESE_TINY_Q8_0 = { - name: "WHISPER_JAPANESE_TINY_Q8_0", +export const WHISPER_GERMAN_BASE_Q8_0 = { + name: "WHISPER_GERMAN_BASE_Q8_0", src: `registry://${models[298].registrySource}/${models[298].registryPath}`, registryPath: models[298].registryPath, registrySource: models[298].registrySource, @@ -11911,8 +12103,8 @@ export const WHISPER_JAPANESE_TINY_Q8_0 = { params: models[298].params, } as const; -export const WHISPER_NORWEGIAN_TINY = { - name: "WHISPER_NORWEGIAN_TINY", +export const WHISPER_GERMAN_TINY_F16 = { + name: "WHISPER_GERMAN_TINY_F16", src: `registry://${models[299].registrySource}/${models[299].registryPath}`, registryPath: models[299].registryPath, registrySource: models[299].registrySource, @@ -11929,8 +12121,8 @@ export const WHISPER_NORWEGIAN_TINY = { params: models[299].params, } as const; -export const WHISPER_PORTUGUESE_BASE_F16 = { - name: "WHISPER_PORTUGUESE_BASE_F16", +export const WHISPER_GERMAN_TINY_Q8_0 = { + name: "WHISPER_GERMAN_TINY_Q8_0", src: `registry://${models[300].registrySource}/${models[300].registryPath}`, registryPath: models[300].registryPath, registrySource: models[300].registrySource, @@ -11947,8 +12139,8 @@ export const WHISPER_PORTUGUESE_BASE_F16 = { params: models[300].params, } as const; -export const WHISPER_PORTUGUESE_BASE_Q8_0 = { - name: "WHISPER_PORTUGUESE_BASE_Q8_0", +export const WHISPER_ITALIAN_BASE_F16 = { + name: "WHISPER_ITALIAN_BASE_F16", src: `registry://${models[301].registrySource}/${models[301].registryPath}`, registryPath: models[301].registryPath, registrySource: models[301].registrySource, @@ -11965,8 +12157,8 @@ export const WHISPER_PORTUGUESE_BASE_Q8_0 = { params: models[301].params, } as const; -export const WHISPER_PORTUGUESE_TINY_F16 = { - name: "WHISPER_PORTUGUESE_TINY_F16", +export const WHISPER_ITALIAN_BASE_Q8_0 = { + name: "WHISPER_ITALIAN_BASE_Q8_0", src: `registry://${models[302].registrySource}/${models[302].registryPath}`, registryPath: models[302].registryPath, registrySource: models[302].registrySource, @@ -11983,8 +12175,8 @@ export const WHISPER_PORTUGUESE_TINY_F16 = { params: models[302].params, } as const; -export const WHISPER_PORTUGUESE_TINY_Q8_0 = { - name: "WHISPER_PORTUGUESE_TINY_Q8_0", +export const WHISPER_ITALIAN_TINY_F16 = { + name: "WHISPER_ITALIAN_TINY_F16", src: `registry://${models[303].registrySource}/${models[303].registryPath}`, registryPath: models[303].registryPath, registrySource: models[303].registrySource, @@ -12001,8 +12193,8 @@ export const WHISPER_PORTUGUESE_TINY_Q8_0 = { params: models[303].params, } as const; -export const WHISPER_RUSSIAN_BASE_F16 = { - name: "WHISPER_RUSSIAN_BASE_F16", +export const WHISPER_ITALIAN_TINY_Q8_0 = { + name: "WHISPER_ITALIAN_TINY_Q8_0", src: `registry://${models[304].registrySource}/${models[304].registryPath}`, registryPath: models[304].registryPath, registrySource: models[304].registrySource, @@ -12019,8 +12211,8 @@ export const WHISPER_RUSSIAN_BASE_F16 = { params: models[304].params, } as const; -export const WHISPER_RUSSIAN_BASE_Q8_0 = { - name: "WHISPER_RUSSIAN_BASE_Q8_0", +export const WHISPER_JAPANESE_BASE_F16 = { + name: "WHISPER_JAPANESE_BASE_F16", src: `registry://${models[305].registrySource}/${models[305].registryPath}`, registryPath: models[305].registryPath, registrySource: models[305].registrySource, @@ -12037,8 +12229,8 @@ export const WHISPER_RUSSIAN_BASE_Q8_0 = { params: models[305].params, } as const; -export const WHISPER_RUSSIAN_TINY_F16 = { - name: "WHISPER_RUSSIAN_TINY_F16", +export const WHISPER_JAPANESE_BASE_Q8_0 = { + name: "WHISPER_JAPANESE_BASE_Q8_0", src: `registry://${models[306].registrySource}/${models[306].registryPath}`, registryPath: models[306].registryPath, registrySource: models[306].registrySource, @@ -12055,8 +12247,8 @@ export const WHISPER_RUSSIAN_TINY_F16 = { params: models[306].params, } as const; -export const WHISPER_RUSSIAN_TINY_Q8_0 = { - name: "WHISPER_RUSSIAN_TINY_Q8_0", +export const WHISPER_JAPANESE_TINY_F16 = { + name: "WHISPER_JAPANESE_TINY_F16", src: `registry://${models[307].registrySource}/${models[307].registryPath}`, registryPath: models[307].registryPath, registrySource: models[307].registrySource, @@ -12073,8 +12265,8 @@ export const WHISPER_RUSSIAN_TINY_Q8_0 = { params: models[307].params, } as const; -export const WHISPER_SPANISH_TINY_F16 = { - name: "WHISPER_SPANISH_TINY_F16", +export const WHISPER_JAPANESE_TINY_Q8_0 = { + name: "WHISPER_JAPANESE_TINY_Q8_0", src: `registry://${models[308].registrySource}/${models[308].registryPath}`, registryPath: models[308].registryPath, registrySource: models[308].registrySource, @@ -12091,8 +12283,8 @@ export const WHISPER_SPANISH_TINY_F16 = { params: models[308].params, } as const; -export const WHISPER_SPANISH_TINY_Q8_0 = { - name: "WHISPER_SPANISH_TINY_Q8_0", +export const WHISPER_NORWEGIAN_TINY = { + name: "WHISPER_NORWEGIAN_TINY", src: `registry://${models[309].registrySource}/${models[309].registryPath}`, registryPath: models[309].registryPath, registrySource: models[309].registrySource, @@ -12109,8 +12301,8 @@ export const WHISPER_SPANISH_TINY_Q8_0 = { params: models[309].params, } as const; -export const WHISPER_Q8_0 = { - name: "WHISPER_Q8_0", +export const WHISPER_PORTUGUESE_BASE_F16 = { + name: "WHISPER_PORTUGUESE_BASE_F16", src: `registry://${models[310].registrySource}/${models[310].registryPath}`, registryPath: models[310].registryPath, registrySource: models[310].registrySource, @@ -12127,8 +12319,8 @@ export const WHISPER_Q8_0 = { params: models[310].params, } as const; -export const WHISPER_Q8_0_1 = { - name: "WHISPER_Q8_0_1", +export const WHISPER_PORTUGUESE_BASE_Q8_0 = { + name: "WHISPER_PORTUGUESE_BASE_Q8_0", src: `registry://${models[311].registrySource}/${models[311].registryPath}`, registryPath: models[311].registryPath, registrySource: models[311].registrySource, @@ -12145,6 +12337,186 @@ export const WHISPER_Q8_0_1 = { params: models[311].params, } as const; +export const WHISPER_PORTUGUESE_TINY_F16 = { + name: "WHISPER_PORTUGUESE_TINY_F16", + src: `registry://${models[312].registrySource}/${models[312].registryPath}`, + registryPath: models[312].registryPath, + registrySource: models[312].registrySource, + blobCoreKey: models[312].blobCoreKey, + blobBlockOffset: models[312].blobBlockOffset, + blobBlockLength: models[312].blobBlockLength, + blobByteOffset: models[312].blobByteOffset, + modelId: models[312].modelId, + expectedSize: models[312].expectedSize, + sha256Checksum: models[312].sha256Checksum, + addon: models[312].addon, + engine: models[312].engine, + quantization: models[312].quantization, + params: models[312].params, +} as const; + +export const WHISPER_PORTUGUESE_TINY_Q8_0 = { + name: "WHISPER_PORTUGUESE_TINY_Q8_0", + src: `registry://${models[313].registrySource}/${models[313].registryPath}`, + registryPath: models[313].registryPath, + registrySource: models[313].registrySource, + blobCoreKey: models[313].blobCoreKey, + blobBlockOffset: models[313].blobBlockOffset, + blobBlockLength: models[313].blobBlockLength, + blobByteOffset: models[313].blobByteOffset, + modelId: models[313].modelId, + expectedSize: models[313].expectedSize, + sha256Checksum: models[313].sha256Checksum, + addon: models[313].addon, + engine: models[313].engine, + quantization: models[313].quantization, + params: models[313].params, +} as const; + +export const WHISPER_RUSSIAN_BASE_F16 = { + name: "WHISPER_RUSSIAN_BASE_F16", + src: `registry://${models[314].registrySource}/${models[314].registryPath}`, + registryPath: models[314].registryPath, + registrySource: models[314].registrySource, + blobCoreKey: models[314].blobCoreKey, + blobBlockOffset: models[314].blobBlockOffset, + blobBlockLength: models[314].blobBlockLength, + blobByteOffset: models[314].blobByteOffset, + modelId: models[314].modelId, + expectedSize: models[314].expectedSize, + sha256Checksum: models[314].sha256Checksum, + addon: models[314].addon, + engine: models[314].engine, + quantization: models[314].quantization, + params: models[314].params, +} as const; + +export const WHISPER_RUSSIAN_BASE_Q8_0 = { + name: "WHISPER_RUSSIAN_BASE_Q8_0", + src: `registry://${models[315].registrySource}/${models[315].registryPath}`, + registryPath: models[315].registryPath, + registrySource: models[315].registrySource, + blobCoreKey: models[315].blobCoreKey, + blobBlockOffset: models[315].blobBlockOffset, + blobBlockLength: models[315].blobBlockLength, + blobByteOffset: models[315].blobByteOffset, + modelId: models[315].modelId, + expectedSize: models[315].expectedSize, + sha256Checksum: models[315].sha256Checksum, + addon: models[315].addon, + engine: models[315].engine, + quantization: models[315].quantization, + params: models[315].params, +} as const; + +export const WHISPER_RUSSIAN_TINY_F16 = { + name: "WHISPER_RUSSIAN_TINY_F16", + src: `registry://${models[316].registrySource}/${models[316].registryPath}`, + registryPath: models[316].registryPath, + registrySource: models[316].registrySource, + blobCoreKey: models[316].blobCoreKey, + blobBlockOffset: models[316].blobBlockOffset, + blobBlockLength: models[316].blobBlockLength, + blobByteOffset: models[316].blobByteOffset, + modelId: models[316].modelId, + expectedSize: models[316].expectedSize, + sha256Checksum: models[316].sha256Checksum, + addon: models[316].addon, + engine: models[316].engine, + quantization: models[316].quantization, + params: models[316].params, +} as const; + +export const WHISPER_RUSSIAN_TINY_Q8_0 = { + name: "WHISPER_RUSSIAN_TINY_Q8_0", + src: `registry://${models[317].registrySource}/${models[317].registryPath}`, + registryPath: models[317].registryPath, + registrySource: models[317].registrySource, + blobCoreKey: models[317].blobCoreKey, + blobBlockOffset: models[317].blobBlockOffset, + blobBlockLength: models[317].blobBlockLength, + blobByteOffset: models[317].blobByteOffset, + modelId: models[317].modelId, + expectedSize: models[317].expectedSize, + sha256Checksum: models[317].sha256Checksum, + addon: models[317].addon, + engine: models[317].engine, + quantization: models[317].quantization, + params: models[317].params, +} as const; + +export const WHISPER_SPANISH_TINY_F16 = { + name: "WHISPER_SPANISH_TINY_F16", + src: `registry://${models[318].registrySource}/${models[318].registryPath}`, + registryPath: models[318].registryPath, + registrySource: models[318].registrySource, + blobCoreKey: models[318].blobCoreKey, + blobBlockOffset: models[318].blobBlockOffset, + blobBlockLength: models[318].blobBlockLength, + blobByteOffset: models[318].blobByteOffset, + modelId: models[318].modelId, + expectedSize: models[318].expectedSize, + sha256Checksum: models[318].sha256Checksum, + addon: models[318].addon, + engine: models[318].engine, + quantization: models[318].quantization, + params: models[318].params, +} as const; + +export const WHISPER_SPANISH_TINY_Q8_0 = { + name: "WHISPER_SPANISH_TINY_Q8_0", + src: `registry://${models[319].registrySource}/${models[319].registryPath}`, + registryPath: models[319].registryPath, + registrySource: models[319].registrySource, + blobCoreKey: models[319].blobCoreKey, + blobBlockOffset: models[319].blobBlockOffset, + blobBlockLength: models[319].blobBlockLength, + blobByteOffset: models[319].blobByteOffset, + modelId: models[319].modelId, + expectedSize: models[319].expectedSize, + sha256Checksum: models[319].sha256Checksum, + addon: models[319].addon, + engine: models[319].engine, + quantization: models[319].quantization, + params: models[319].params, +} as const; + +export const WHISPER_Q8_0 = { + name: "WHISPER_Q8_0", + src: `registry://${models[320].registrySource}/${models[320].registryPath}`, + registryPath: models[320].registryPath, + registrySource: models[320].registrySource, + blobCoreKey: models[320].blobCoreKey, + blobBlockOffset: models[320].blobBlockOffset, + blobBlockLength: models[320].blobBlockLength, + blobByteOffset: models[320].blobByteOffset, + modelId: models[320].modelId, + expectedSize: models[320].expectedSize, + sha256Checksum: models[320].sha256Checksum, + addon: models[320].addon, + engine: models[320].engine, + quantization: models[320].quantization, + params: models[320].params, +} as const; + +export const WHISPER_Q8_0_1 = { + name: "WHISPER_Q8_0_1", + src: `registry://${models[321].registrySource}/${models[321].registryPath}`, + registryPath: models[321].registryPath, + registrySource: models[321].registrySource, + blobCoreKey: models[321].blobCoreKey, + blobBlockOffset: models[321].blobBlockOffset, + blobBlockLength: models[321].blobBlockLength, + blobByteOffset: models[321].blobByteOffset, + modelId: models[321].modelId, + expectedSize: models[321].expectedSize, + sha256Checksum: models[321].sha256Checksum, + addon: models[321].addon, + engine: models[321].engine, + quantization: models[321].quantization, + params: models[321].params, +} as const; + // Helper function to get model by name export function getModelByName(name: string): RegistryItem | undefined { return models.find((model) => model.name === name); diff --git a/packages/sdk/models/update-models/codegen.ts b/packages/sdk/models/update-models/codegen.ts index f05fcf93ef..1c7b21a64e 100644 --- a/packages/sdk/models/update-models/codegen.ts +++ b/packages/sdk/models/update-models/codegen.ts @@ -85,7 +85,7 @@ export type RegistryItem = { blobBlockLength: number; blobByteOffset: number; modelId: string; - addon: "llm" | "whisper" | "embeddings" | "nmt" | "vad" | "tts" | "ocr" | "parakeet" | "other"; + addon: "llm" | "whisper" | "embeddings" | "nmt" | "vad" | "tts" | "ocr" | "parakeet" | "diffusion" | "other"; expectedSize: number; sha256Checksum: string; engine: string; @@ -114,7 +114,7 @@ export type ModelConstant = { modelId: string; expectedSize: number; sha256Checksum: string; - addon: "llm" | "whisper" | "embeddings" | "nmt" | "vad" | "tts" | "ocr" | "parakeet" | "other"; + addon: "llm" | "whisper" | "embeddings" | "nmt" | "vad" | "tts" | "ocr" | "parakeet" | "diffusion" | "other"; engine: string; quantization: string; params: string; diff --git a/packages/sdk/models/update-models/naming.ts b/packages/sdk/models/update-models/naming.ts index e1948e5e27..7ba23075d9 100644 --- a/packages/sdk/models/update-models/naming.ts +++ b/packages/sdk/models/update-models/naming.ts @@ -153,6 +153,8 @@ function generateBaseName(input: BaseNameInput): string { return generateOcrName(input); case "parakeet": return generateParakeetName(input); + case "diffusion": + return generateDiffusionName(input); default: return cleanPart(input.filename.replace(/\.\w+$/, "")); } @@ -444,6 +446,40 @@ function generateOcrName({ return `OCR_${nameParts.map(cleanPart).join("_")}`; } +function generateDiffusionName({ + filename, + modelName, + quantization, + params, + tags, +}: BaseNameInput): string { + // VAE / auxiliary models (tagged "vae" instead of "generation") + if (tags.includes("vae")) { + const name = modelName || "SD"; + return `${cleanPart(name)}_VAE`; + } + + // Extract family name from filename + let family = filename + .replace(/\.\w+$/, "") + .replace(/^stable-diffusion-xl/i, "SDXL") + .replace(/^stable-diffusion/i, "SD"); + + // Strip trailing params (e.g. "-4b") and quant (e.g. "-Q8_0") from family + // to avoid duplication since they're appended separately + if (params) { + const paramsEsc = params.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + family = family.replace(new RegExp(`[-_]${paramsEsc}[-_].*$`, "i"), ""); + } + if (quantization) { + const quantEsc = quantization.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + family = family.replace(new RegExp(`[-_]${quantEsc}$`, "i"), ""); + } + + const nameParts = [family, params, quantization].filter((p) => p && p !== ""); + return nameParts.map(cleanPart).join("_"); +} + function generateParakeetName({ filename, lowerPath, diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 47a79334a9..e20b2be919 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -44,6 +44,10 @@ "types": "./dist/server/bare/plugins/onnx-ocr/plugin.d.ts", "import": "./dist/server/bare/plugins/onnx-ocr/plugin.js" }, + "./sdcpp-generation/plugin": { + "types": "./dist/server/bare/plugins/sdcpp-generation/plugin.d.ts", + "import": "./dist/server/bare/plugins/sdcpp-generation/plugin.js" + }, "./plugin-utils": { "types": "./dist/schemas/plugin.d.ts", "import": "./dist/schemas/plugin.js" @@ -111,6 +115,7 @@ }, "dependencies": { "@qvac/decoder-audio": "^0.3.3", + "@qvac/diffusion-cpp": "file:../lib-infer-diffusion", "@qvac/dl-filesystem": "^0.2.0", "@qvac/embed-llamacpp": "^0.12.0", "@qvac/error": "^0.1.1", diff --git a/packages/sdk/pear/pre.ts b/packages/sdk/pear/pre.ts index 4f3f8e1295..dd695aa138 100644 --- a/packages/sdk/pear/pre.ts +++ b/packages/sdk/pear/pre.ts @@ -54,6 +54,7 @@ const BUILTIN_PLUGINS = [ "@qvac/sdk/nmtcpp-translation/plugin", "@qvac/sdk/onnx-tts/plugin", "@qvac/sdk/onnx-ocr/plugin", + "@qvac/sdk/sdcpp-generation/plugin", ]; const BUILTIN_PLUGIN_EXPORTS: Record = { @@ -63,6 +64,7 @@ const BUILTIN_PLUGIN_EXPORTS: Record = { "nmtcpp-translation": "nmtPlugin", "onnx-tts": "ttsPlugin", "onnx-ocr": "ocrPlugin", + "sdcpp-generation": "diffusionPlugin", }; const SDK_NAME = "@qvac/sdk"; diff --git a/packages/sdk/schemas/common.ts b/packages/sdk/schemas/common.ts index 5d22c9c029..4f69dd8b4d 100644 --- a/packages/sdk/schemas/common.ts +++ b/packages/sdk/schemas/common.ts @@ -50,6 +50,10 @@ import { getModelInfoResponseSchema, } from "./get-model-info"; import { ocrStreamRequestSchema, ocrStreamResponseSchema } from "./ocr"; +import { + generationStreamRequestSchema, + generationStreamResponseSchema, +} from "./sdcpp-config"; import { pluginInvokeRequestSchema, pluginInvokeResponseSchema, @@ -83,6 +87,7 @@ export const requestSchema = z.union([ deleteCacheRequestSchema, getModelInfoRequestSchema, ocrStreamRequestSchema, + generationStreamRequestSchema, pluginInvokeRequestSchema, pluginInvokeStreamRequestSchema, modelRegistryListRequestSchema, @@ -111,6 +116,7 @@ export const responseSchema = z.discriminatedUnion("type", [ deleteCacheResponseSchema, getModelInfoResponseSchema, ocrStreamResponseSchema, + generationStreamResponseSchema, pluginInvokeResponseSchema, pluginInvokeStreamResponseSchema, modelRegistryListResponseSchema, diff --git a/packages/sdk/schemas/engine-addon-map.ts b/packages/sdk/schemas/engine-addon-map.ts index f4506aac04..9d97275953 100644 --- a/packages/sdk/schemas/engine-addon-map.ts +++ b/packages/sdk/schemas/engine-addon-map.ts @@ -1,5 +1,6 @@ import { ModelType } from "./model-types"; import { + ADDON_DIFFUSION, ADDON_EMBEDDING, ADDON_LLM, ADDON_NMT, @@ -27,6 +28,7 @@ export const ENGINE_TO_ADDON: Record< [ModelType.onnxTts]: "tts", [ModelType.onnxOcr]: "ocr", [ModelType.parakeetTranscription]: "parakeet", + [ModelType.sdcppGeneration]: "diffusion", "onnx-vad": "vad", }; @@ -51,6 +53,8 @@ const LEGACY_ENGINE_TO_CANONICAL: Record = { vad: "onnx-vad", tts: ModelType.onnxTts, ocr: ModelType.onnxOcr, + [ADDON_DIFFUSION]: ModelType.sdcppGeneration, + diffusion: ModelType.sdcppGeneration, }; // Resolves any engine string (legacy or canonical) to a validated canonical engine. diff --git a/packages/sdk/schemas/get-model-info.ts b/packages/sdk/schemas/get-model-info.ts index a2f5839430..708752161d 100644 --- a/packages/sdk/schemas/get-model-info.ts +++ b/packages/sdk/schemas/get-model-info.ts @@ -48,6 +48,7 @@ export const modelInfoSchema = z.object({ "vad", "tts", "ocr", + "diffusion", "other", ]), diff --git a/packages/sdk/schemas/index.ts b/packages/sdk/schemas/index.ts index c652466740..68ab6570d8 100644 --- a/packages/sdk/schemas/index.ts +++ b/packages/sdk/schemas/index.ts @@ -24,6 +24,7 @@ export * from "./text-to-speech"; export * from "./error"; export * from "./rag"; export * from "./ocr"; +export * from "./sdcpp-config"; export * from "./shard"; export { SDK_CLIENT_ERROR_CODES } from "./sdk-errors-client"; export { SDK_SERVER_ERROR_CODES } from "./sdk-errors-server"; diff --git a/packages/sdk/schemas/load-model.ts b/packages/sdk/schemas/load-model.ts index f63369b84c..d879f8a660 100644 --- a/packages/sdk/schemas/load-model.ts +++ b/packages/sdk/schemas/load-model.ts @@ -27,9 +27,11 @@ import { nmtModelTypeSchema, ttsModelTypeSchema, ocrModelTypeSchema, + diffusionModelTypeSchema, ModelType, ModelTypeAliases, } from "./model-types"; +import { sdcppConfigSchema, type SdcppConfig } from "./sdcpp-config"; // Set of all built-in model types (canonical + aliases) for catch-all exclusion const builtInModelTypes = new Set([ @@ -101,6 +103,13 @@ export const loadModelOptionsBaseSchema = z.union([ modelConfig: ocrConfigSchema.partial().strict().optional(), }) .strict(), + z + .object({ + ...loadModelCommonFields, + modelType: diffusionModelTypeSchema, + modelConfig: sdcppConfigSchema.strict().optional(), + }) + .strict(), // Custom plugin catch-all: accepts any modelType string EXCEPT built-ins z.object({ ...loadModelCommonFields, @@ -244,6 +253,23 @@ const loadModelOptionsToRequestBaseSchema = z.union([ withProgress: data.withProgress ?? !!data.onProgress, delegate: data.delegate, })), + z + .object({ + ...loadModelRequestCommonFields, + modelType: diffusionModelTypeSchema, + modelConfig: sdcppConfigSchema.strict().optional(), + }) + .strict() + .transform((data) => ({ + type: "loadModel" as const, + modelType: ModelType.sdcppGeneration, + modelSrc: modelInputToSrcSchema.parse(data.modelSrc), + modelName: modelInputToNameSchema.parse(data.modelSrc), + modelConfig: (data.modelConfig ?? {}) as SdcppConfig, + seed: data.seed ?? false, + withProgress: data.withProgress ?? !!data.onProgress, + delegate: data.delegate, + })), z .object({ ...loadModelRequestCommonFields, @@ -328,6 +354,13 @@ export const loadOcrModelRequestSchema = commonModelConfigSchema }) .strict(); +export const loadDiffusionModelRequestSchema = commonModelConfigSchema + .extend({ + modelType: z.literal(ModelType.sdcppGeneration), + modelConfig: sdcppConfigSchema.optional(), + }) + .strict(); + // Custom plugin catch-all: accepts any modelType string EXCEPT built-ins export const loadCustomPluginModelRequestSchema = commonModelConfigSchema.extend({ @@ -347,6 +380,7 @@ export const loadModelSrcRequestSchema = z loadNmtModelRequestSchema, loadTtsModelRequestSchema, loadOcrModelRequestSchema, + loadDiffusionModelRequestSchema, loadCustomPluginModelRequestSchema, ]) .transform((data) => ({ diff --git a/packages/sdk/schemas/model-types.ts b/packages/sdk/schemas/model-types.ts index d9da65e822..c31cbb66e2 100644 --- a/packages/sdk/schemas/model-types.ts +++ b/packages/sdk/schemas/model-types.ts @@ -14,6 +14,7 @@ export const ModelType = { onnxTts: "onnx-tts", parakeetTranscription: "parakeet-transcription", onnxOcr: "onnx-ocr", + sdcppGeneration: "sdcpp-generation", } as const; // === INTERNAL: Alias keys (backward compat names) === @@ -25,6 +26,7 @@ const AliasKeys = { parakeet: "parakeet", tts: "tts", ocr: "ocr", + diffusion: "diffusion", } as const; // === INTERNAL: Aliases (backward compat mapping) === @@ -40,6 +42,7 @@ export const ModelTypeAliases = { [AliasKeys.parakeet]: ModelType.parakeetTranscription, [AliasKeys.tts]: ModelType.onnxTts, [AliasKeys.ocr]: ModelType.onnxOcr, + [AliasKeys.diffusion]: ModelType.sdcppGeneration, } as const; // === TYPES === @@ -213,3 +216,17 @@ export const ocrModelTypeSchema = modelTypeInputSchema .extract([AliasKeys.ocr, ModelType.onnxOcr]) .describe('OCR model type: "ocr" (alias) or "onnx-ocr" (canonical)'); export type OcrModelTypeInput = z.infer; + +/** + * Diffusion/Image Generation model type schema. + * - Alias: `"diffusion"` → resolves to `"sdcpp-generation"` + * - Canonical: `"sdcpp-generation"` + */ +export const diffusionModelTypeSchema = modelTypeInputSchema + .extract([AliasKeys.diffusion, ModelType.sdcppGeneration]) + .describe( + 'Diffusion model type: "diffusion" (alias) or "sdcpp-generation" (canonical)', + ); +export type DiffusionModelTypeInput = z.infer< + typeof diffusionModelTypeSchema +>; diff --git a/packages/sdk/schemas/plugin.ts b/packages/sdk/schemas/plugin.ts index 96a3ee40a2..f9dc98db41 100644 --- a/packages/sdk/schemas/plugin.ts +++ b/packages/sdk/schemas/plugin.ts @@ -277,6 +277,13 @@ export const PLUGIN_TTS = "@qvac/sdk/onnx-tts/plugin" as const; */ export const PLUGIN_OCR = "@qvac/sdk/onnx-ocr/plugin" as const; +/** + * Image generation plugin (stable-diffusion.cpp). + * Provides: text-to-image, image-to-image generation. + */ +export const PLUGIN_DIFFUSION = + "@qvac/sdk/sdcpp-generation/plugin" as const; + /** * All built-in SDK plugins. * @@ -294,6 +301,7 @@ export const SDK_DEFAULT_PLUGINS = [ PLUGIN_NMT, PLUGIN_TTS, PLUGIN_OCR, + PLUGIN_DIFFUSION, ] as const; export type BuiltinPlugin = (typeof SDK_DEFAULT_PLUGINS)[number]; @@ -322,3 +330,6 @@ export const ADDON_TTS = "@qvac/tts-onnx" as const; /** Native addon package for OCR (ONNX) */ export const ADDON_OCR = "@qvac/ocr-onnx" as const; + +/** Native addon package for image generation (stable-diffusion.cpp) */ +export const ADDON_DIFFUSION = "@qvac/diffusion-cpp" as const; diff --git a/packages/sdk/schemas/registry.ts b/packages/sdk/schemas/registry.ts index 3633f6bfcb..069513aa86 100644 --- a/packages/sdk/schemas/registry.ts +++ b/packages/sdk/schemas/registry.ts @@ -11,6 +11,7 @@ const modelRegistryEntryAddonSchema = z.enum([ "tts", "ocr", "parakeet", + "diffusion", "other", ]); @@ -27,6 +28,7 @@ export const modelRegistryEngineSchema = z.enum([ ModelType.onnxTts, ModelType.onnxOcr, ModelType.parakeetTranscription, + ModelType.sdcppGeneration, "onnx-vad", ]); diff --git a/packages/sdk/schemas/sdcpp-config.ts b/packages/sdk/schemas/sdcpp-config.ts new file mode 100644 index 0000000000..c5a6c61947 --- /dev/null +++ b/packages/sdk/schemas/sdcpp-config.ts @@ -0,0 +1,139 @@ +import { z } from "zod"; +import { modelSrcInputSchema } from "./model-src-utils"; + +export const sdcppConfigSchema = z + .object({ + threads: z.number().optional(), + device: z.enum(["gpu", "cpu"]).optional(), + prediction: z + .enum(["auto", "eps", "v", "edm_v", "flow", "flux_flow", "flux2_flow"]) + .optional(), + wtype: z + .enum(["default", "f32", "f16", "q4_0", "q4_1", "q5_0", "q5_1", "q8_0"]) + .optional(), + rng: z.enum(["cuda", "cpu"]).optional(), + schedule: z + .enum(["default", "discrete", "karras", "exponential", "ays", "gits"]) + .optional(), + clip_on_cpu: z.boolean().optional(), + vae_on_cpu: z.boolean().optional(), + vae_tiling: z.boolean().optional(), + flash_attn: z.boolean().optional(), + verbosity: z.number().optional(), + clipLModelSrc: modelSrcInputSchema.optional(), + clipGModelSrc: modelSrcInputSchema.optional(), + t5XxlModelSrc: modelSrcInputSchema.optional(), + llmModelSrc: modelSrcInputSchema.optional(), + vaeModelSrc: modelSrcInputSchema.optional(), + }); + +export type SdcppConfig = z.infer; + +export const diffusionStatsSchema = z.object({ + generation_time: z.number().optional(), + totalTime: z.number().optional(), + stepsPerSecond: z.number().optional(), + msPerStep: z.number().optional(), + megapixelsPerSecond: z.number().optional(), + totalSteps: z.number().optional(), + totalGenerations: z.number().optional(), + totalImages: z.number().optional(), + totalPixels: z.number().optional(), + modelLoadMs: z.number().optional(), + generationMs: z.number().optional(), + totalGenerationMs: z.number().optional(), + totalWallMs: z.number().optional(), + steps: z.number().optional(), + width: z.number().optional(), + height: z.number().optional(), + seed: z.number().optional(), + output_count: z.number().optional(), +}); + +export type DiffusionStats = z.infer; + +export const generationStreamResponseSchema = z.object({ + type: z.literal("generationStream"), + step: z.number().optional(), + totalSteps: z.number().optional(), + elapsedMs: z.number().optional(), + data: z.string().optional(), + outputIndex: z.number().optional(), + done: z.boolean().optional(), + stats: diffusionStatsSchema.optional(), +}); + +export type GenerationStreamResponse = z.infer< + typeof generationStreamResponseSchema +>; + +export const generationRequestSchema = z.object({ + modelId: z.string(), + prompt: z.string(), + negative_prompt: z.string().optional(), + width: z.number().int().multipleOf(8).optional(), + height: z.number().int().multipleOf(8).optional(), + steps: z.number().int().positive().optional(), + cfg_scale: z.number().optional(), + guidance: z.number().optional(), + sampling_method: z + .enum([ + "euler", + "euler_a", + "heun", + "dpm2", + "dpm++2m", + "dpm++2mv2", + "dpm++2s_a", + "lcm", + "ipndm", + "ipndm_v", + "ddim_trailing", + "tcd", + "res_multistep", + "res_2s", + ]) + .optional(), + scheduler: z + .enum(["default", "discrete", "karras", "exponential", "ays", "gits"]) + .optional(), + seed: z.number().int().optional(), + batch_count: z.number().int().positive().optional(), + vae_tiling: z.boolean().optional(), + cache_preset: z.string().optional(), + init_image: z.string().optional(), + /** img2img denoising strength (0–1). Only valid when init_image is provided. */ + strength: z.number().min(0).max(1).optional(), +}); + +export type GenerationRequest = z.infer; + +// RPC request schema (wire format with `type` literal for routing) +export const generationStreamRequestSchema = generationRequestSchema.extend({ + type: z.literal("generationStream"), +}); + +export type GenerationStreamRequest = z.infer< + typeof generationStreamRequestSchema +>; + +// Client params (no `type` field — added by the client wrapper) +export type GenerationClientParams = { + modelId: string; + prompt: string; + negative_prompt?: string; + width?: number; + height?: number; + steps?: number; + cfg_scale?: number; + guidance?: number; + sampling_method?: GenerationRequest["sampling_method"]; + scheduler?: GenerationRequest["scheduler"]; + seed?: number; + batch_count?: number; + vae_tiling?: boolean; + cache_preset?: string; + init_image?: string | Buffer; + strength?: number; + stream?: boolean; +}; diff --git a/packages/sdk/server/bare/plugins/index.ts b/packages/sdk/server/bare/plugins/index.ts index 8d17b0a3e0..b54a594254 100644 --- a/packages/sdk/server/bare/plugins/index.ts +++ b/packages/sdk/server/bare/plugins/index.ts @@ -5,3 +5,4 @@ export { parakeetPlugin } from "./parakeet-transcription/plugin"; export { nmtPlugin } from "./nmtcpp-translation/plugin"; export { ttsPlugin } from "./onnx-tts/plugin"; export { ocrPlugin } from "./onnx-ocr/plugin"; +export { diffusionPlugin } from "./sdcpp-generation/plugin"; diff --git a/packages/sdk/server/bare/plugins/sdcpp-generation/ops/generation.ts b/packages/sdk/server/bare/plugins/sdcpp-generation/ops/generation.ts new file mode 100644 index 0000000000..1e7f0e85e6 --- /dev/null +++ b/packages/sdk/server/bare/plugins/sdcpp-generation/ops/generation.ts @@ -0,0 +1,73 @@ +import { getModel } from "@/server/bare/registry/model-registry"; +import type { + GenerationRequest, + GenerationStreamResponse, + DiffusionStats, +} from "@/schemas/sdcpp-config"; + +interface ResponseWithStats { + stats?: DiffusionStats; +} + +export async function* generation( + request: GenerationRequest, +): AsyncGenerator { + const model = getModel(request.modelId); + + const runParams: Record = { + prompt: request.prompt, + negative_prompt: request.negative_prompt, + width: request.width, + height: request.height, + steps: request.steps, + cfg_scale: request.cfg_scale, + guidance: request.guidance, + sampling_method: request.sampling_method, + scheduler: request.scheduler, + seed: request.seed, + batch_count: request.batch_count, + vae_tiling: request.vae_tiling, + cache_preset: request.cache_preset, + }; + + const initImage = request.init_image; + if (initImage) { + runParams["init_image"] = new Uint8Array(Buffer.from(initImage, "base64")); + runParams["strength"] = request.strength; + } + + const response = await model.run(runParams); + + let outputIndex = 0; + + for await (const chunk of response.iterate()) { + if (chunk instanceof Uint8Array) { + yield { + type: "generationStream", + data: Buffer.from(chunk).toString("base64"), + outputIndex: outputIndex++, + }; + } else if (typeof chunk === "string") { + try { + const tick = JSON.parse(chunk) as Record; + if ("step" in tick) { + yield { + type: "generationStream", + step: tick["step"] as number, + totalSteps: tick["total"] as number, + elapsedMs: tick["elapsed_ms"] as number, + }; + } + } catch { + // Non-JSON string output — skip + } + } + } + + const responseWithStats = response as unknown as ResponseWithStats; + yield { + type: "generationStream", + done: true, + stats: responseWithStats.stats ?? undefined, + }; +} diff --git a/packages/sdk/server/bare/plugins/sdcpp-generation/plugin.ts b/packages/sdk/server/bare/plugins/sdcpp-generation/plugin.ts new file mode 100644 index 0000000000..746217584c --- /dev/null +++ b/packages/sdk/server/bare/plugins/sdcpp-generation/plugin.ts @@ -0,0 +1,127 @@ +import ImgStableDiffusion from "@qvac/diffusion-cpp"; +import addonLogging from "@qvac/diffusion-cpp/addonLogging"; +import { + definePlugin, + defineHandler, + sdcppConfigSchema, + generationRequestSchema, + generationStreamResponseSchema, + ModelType, + ADDON_DIFFUSION, + type CreateModelParams, + type PluginModelResult, + type ResolveContext, + type ResolveResult, + type SdcppConfig, +} from "@/schemas"; +import { createStreamLogger, registerAddonLogger } from "@/logging"; +import { parseModelPath } from "@/server/utils"; +import { generation } from "./ops/generation"; + +type DiffusionArtifactKey = + | "clipLModelPath" + | "clipGModelPath" + | "t5XxlModelPath" + | "llmModelPath" + | "vaeModelPath"; + +const SRC_TO_ARTIFACT = { + clipLModelSrc: "clipLModelPath", + clipGModelSrc: "clipGModelPath", + t5XxlModelSrc: "t5XxlModelPath", + llmModelSrc: "llmModelPath", + vaeModelSrc: "vaeModelPath", +} as const satisfies Record; + +export const diffusionPlugin = definePlugin({ + modelType: ModelType.sdcppGeneration, + displayName: "Image Generation (stable-diffusion.cpp)", + addonPackage: ADDON_DIFFUSION, + loadConfigSchema: sdcppConfigSchema, + + async resolveConfig( + cfg: SdcppConfig, + ctx: ResolveContext, + ): Promise> { + const srcKeys = new Set(Object.keys(SRC_TO_ARTIFACT)); + const config = Object.fromEntries( + Object.entries(cfg).filter(([key]) => !srcKeys.has(key)), + ) as SdcppConfig; + + const srcEntries = Object.entries(SRC_TO_ARTIFACT).filter( + ([srcKey]) => cfg[srcKey as keyof typeof SRC_TO_ARTIFACT], + ); + + if (srcEntries.length === 0) { + return { config }; + } + + const resolved = await Promise.all( + srcEntries.map(([srcKey]) => + ctx.resolveModelPath(cfg[srcKey as keyof typeof SRC_TO_ARTIFACT]!), + ), + ); + + const artifacts: Partial> = {}; + for (let i = 0; i < srcEntries.length; i++) { + artifacts[srcEntries[i]![1]] = resolved[i]!; + } + + return { config, artifacts }; + }, + + createModel(params: CreateModelParams): PluginModelResult { + const { modelId, modelPath, modelConfig, artifacts } = params; + const config = (modelConfig ?? {}) as SdcppConfig; + const { dirPath, basePath } = parseModelPath(modelPath); + const logger = createStreamLogger(modelId, ModelType.sdcppGeneration); + registerAddonLogger(modelId, ModelType.sdcppGeneration, logger); + + const addonArgs = { + diskPath: dirPath, + modelName: basePath, + logger, + opts: { stats: true }, + ...(artifacts?.["clipLModelPath"] && { clipLModel: artifacts["clipLModelPath"] }), + ...(artifacts?.["clipGModelPath"] && { clipGModel: artifacts["clipGModelPath"] }), + ...(artifacts?.["t5XxlModelPath"] && { t5XxlModel: artifacts["t5XxlModelPath"] }), + ...(artifacts?.["llmModelPath"] && { llmModel: artifacts["llmModelPath"] }), + ...(artifacts?.["vaeModelPath"] && { vaeModel: artifacts["vaeModelPath"] }), + }; + + const addonConfig = Object.fromEntries( + Object.entries({ + threads: config.threads, + device: config.device, + prediction: config.prediction, + wtype: config.wtype, + rng: config.rng, + schedule: config.schedule, + clip_on_cpu: config.clip_on_cpu, + vae_on_cpu: config.vae_on_cpu, + vae_tiling: config.vae_tiling, + flash_attn: config.flash_attn, + verbosity: config.verbosity, + }).filter(([, v]) => v !== undefined), + ); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + const model = new ImgStableDiffusion(addonArgs as any, addonConfig); + + return { model, loader: undefined }; + }, + + handlers: { + generationStream: defineHandler({ + requestSchema: generationRequestSchema, + responseSchema: generationStreamResponseSchema, + streaming: true, + handler: generation, + }), + }, + + logging: { + module: addonLogging, + namespace: ModelType.sdcppGeneration, + }, +}); diff --git a/packages/sdk/server/bare/registry/model-config-utils.ts b/packages/sdk/server/bare/registry/model-config-utils.ts index a78790703a..992be9c448 100644 --- a/packages/sdk/server/bare/registry/model-config-utils.ts +++ b/packages/sdk/server/bare/registry/model-config-utils.ts @@ -12,6 +12,7 @@ import { parakeetRuntimeConfigSchema, } from "@/schemas/transcription-config"; import { ocrConfigSchema } from "@/schemas/ocr"; +import { sdcppConfigSchema } from "@/schemas/sdcpp-config"; export const CANONICAL_TO_ALIAS: Record = { [ModelType.llamacppCompletion]: "llm", @@ -21,6 +22,7 @@ export const CANONICAL_TO_ALIAS: Record = { [ModelType.nmtcppTranslation]: "nmt", [ModelType.onnxTts]: "tts", [ModelType.onnxOcr]: "ocr", + [ModelType.sdcppGeneration]: "diffusion", }; export const MODEL_CONFIG_SCHEMAS: Partial< @@ -31,6 +33,7 @@ export const MODEL_CONFIG_SCHEMAS: Partial< [ModelType.whispercppTranscription]: whisperConfigSchema, [ModelType.parakeetTranscription]: parakeetRuntimeConfigSchema.passthrough(), [ModelType.onnxOcr]: ocrConfigSchema, + [ModelType.sdcppGeneration]: sdcppConfigSchema, }; // Ordered general → specific (later patterns override earlier) diff --git a/packages/sdk/server/bare/registry/model-registry.ts b/packages/sdk/server/bare/registry/model-registry.ts index 3e9c0d187b..f0b3848e69 100644 --- a/packages/sdk/server/bare/registry/model-registry.ts +++ b/packages/sdk/server/bare/registry/model-registry.ts @@ -33,7 +33,7 @@ interface LocalOptions { config: unknown; modelType: CanonicalModelType; name?: string | undefined; - loader: FilesystemDL; + loader: FilesystemDL | undefined; } export interface ModelEntry { @@ -54,7 +54,7 @@ export function registerModel( path: string; config: unknown; modelType: CanonicalModelType; - loader: FilesystemDL; + loader: FilesystemDL | undefined; name?: string | undefined; } | { topic: string; providerPublicKey: string; timeout?: number }, diff --git a/packages/sdk/server/rpc/handler-registry.ts b/packages/sdk/server/rpc/handler-registry.ts index 84259c3f33..34f3171f1c 100644 --- a/packages/sdk/server/rpc/handler-registry.ts +++ b/packages/sdk/server/rpc/handler-registry.ts @@ -19,6 +19,7 @@ import { handleDeleteCache } from "@/server/rpc/handlers/delete-cache"; import { handleTextToSpeech } from "@/server/rpc/handlers/text-to-speech"; import { handleGetModelInfo } from "@/server/rpc/handlers/get-model-info"; import { handleOCRStream } from "@/server/rpc/handlers/ocr-stream"; +import { handleGenerationStream } from "@/server/rpc/handlers/generation-stream"; import { handlePing } from "@/server/rpc/handlers/ping"; import { handlePluginInvoke, @@ -71,6 +72,7 @@ export const registry: Record = { translate: { type: "stream", handler: handleTranslate }, textToSpeech: { type: "stream", handler: handleTextToSpeech }, ocrStream: { type: "stream", handler: handleOCRStream }, + generationStream: { type: "stream", handler: handleGenerationStream }, pluginInvokeStream: { type: "stream", handler: handlePluginInvokeStream }, // Handlers with delegation support diff --git a/packages/sdk/server/rpc/handlers/generation-stream.ts b/packages/sdk/server/rpc/handlers/generation-stream.ts new file mode 100644 index 0000000000..f376e4c108 --- /dev/null +++ b/packages/sdk/server/rpc/handlers/generation-stream.ts @@ -0,0 +1,15 @@ +import type { + GenerationStreamRequest, + GenerationStreamResponse, +} from "@/schemas/sdcpp-config"; +import { dispatchPluginStream } from "@/server/rpc/handlers/plugin-dispatch"; + +export async function* handleGenerationStream( + request: GenerationStreamRequest, +): AsyncGenerator { + yield* dispatchPluginStream( + request.modelId, + "generationStream", + request, + ); +} diff --git a/packages/sdk/server/rpc/handlers/index.ts b/packages/sdk/server/rpc/handlers/index.ts index 0c60a47f9d..f1e23d9f61 100644 --- a/packages/sdk/server/rpc/handlers/index.ts +++ b/packages/sdk/server/rpc/handlers/index.ts @@ -14,6 +14,7 @@ import { handleDeleteCache } from "./delete-cache"; import { handleTextToSpeech } from "./text-to-speech"; import { handleGetModelInfo } from "./get-model-info"; import { handleOCRStream } from "./ocr-stream"; +import { handleGenerationStream } from "./generation-stream"; import { handlePing } from "./ping"; import { handlePluginInvoke, handlePluginInvokeStream } from "./plugin-invoke"; import { @@ -40,6 +41,7 @@ export const handlers = { textToSpeech: handleTextToSpeech, getModelInfo: handleGetModelInfo, ocrStream: handleOCRStream, + generationStream: handleGenerationStream, pluginInvoke: handlePluginInvoke, pluginInvokeStream: handlePluginInvokeStream, modelRegistryList: handleModelRegistryList, diff --git a/packages/sdk/server/worker.ts b/packages/sdk/server/worker.ts index 3ada3e8767..9150559668 100644 --- a/packages/sdk/server/worker.ts +++ b/packages/sdk/server/worker.ts @@ -13,6 +13,7 @@ import { nmtPlugin, ttsPlugin, ocrPlugin, + diffusionPlugin, } from "@/server/bare/plugins"; const { hasRPCConfig } = initializeWorkerCore(); @@ -29,6 +30,7 @@ registerPlugin(parakeetPlugin); registerPlugin(nmtPlugin); registerPlugin(ttsPlugin); registerPlugin(ocrPlugin); +registerPlugin(diffusionPlugin); logger.info( hasRPCConfig diff --git a/packages/sdk/shared-test-data/images/elephant.jpg b/packages/sdk/shared-test-data/images/elephant.jpg new file mode 100644 index 0000000000..5e2a507e98 Binary files /dev/null and b/packages/sdk/shared-test-data/images/elephant.jpg differ diff --git a/packages/sdk/test/unit/sdcpp-plugin.test.ts b/packages/sdk/test/unit/sdcpp-plugin.test.ts new file mode 100644 index 0000000000..296490b189 --- /dev/null +++ b/packages/sdk/test/unit/sdcpp-plugin.test.ts @@ -0,0 +1,839 @@ +// @ts-expect-error brittle has no type declarations +import test from "brittle"; +import { z } from "zod"; +import { + sdcppConfigSchema, + generationRequestSchema, + generationStreamResponseSchema, + diffusionStatsSchema, + modelInfoSchema, + ModelType, + SDK_SERVER_ERROR_CODES, +} from "@/schemas"; +import { + loadModelSrcRequestSchema, + loadModelOptionsBaseSchema, +} from "@/schemas/load-model"; +import { clearPlugins, registerPlugin, hasPlugin } from "@/server/plugins"; +import { + registerModel, + unregisterModel, + type AnyModel, +} from "@/server/bare/registry/model-registry"; +import { handlePluginInvokeStream } from "@/server/rpc/handlers/plugin-invoke"; +import { + PluginResponseValidationFailedError, + PluginRequestValidationFailedError, +} from "@/utils/errors-server"; + +// ============================================ +// sdcppConfigSchema +// ============================================ + +test("sdcppConfigSchema: accepts empty config", (t) => { + const result = sdcppConfigSchema.safeParse({}); + t.is(result.success, true); +}); + +test("sdcppConfigSchema: accepts valid full config", (t) => { + const result = sdcppConfigSchema.safeParse({ + threads: 4, + device: "gpu", + prediction: "flow", + wtype: "q8_0", + rng: "cpu", + schedule: "karras", + clip_on_cpu: true, + vae_on_cpu: false, + vae_tiling: true, + flash_attn: true, + verbosity: 2, + clipLModelSrc: "clip-l.safetensors", + clipGModelSrc: "clip-g.safetensors", + t5XxlModelSrc: "t5xxl.safetensors", + llmModelSrc: "qwen3.gguf", + vaeModelSrc: "vae.safetensors", + }); + t.is(result.success, true); +}); + +test("sdcppConfigSchema: rejects invalid device", (t) => { + const result = sdcppConfigSchema.safeParse({ device: "tpu" }); + t.is(result.success, false); +}); + +test("sdcppConfigSchema: rejects invalid prediction type", (t) => { + const result = sdcppConfigSchema.safeParse({ prediction: "unknown" }); + t.is(result.success, false); +}); + +test("sdcppConfigSchema: rejects invalid wtype", (t) => { + const result = sdcppConfigSchema.safeParse({ wtype: "q3_0" }); + t.is(result.success, false); +}); + +test("sdcppConfigSchema.strict(): rejects unknown keys", (t) => { + const result = sdcppConfigSchema.strict().safeParse({ unknownKey: true }); + t.is(result.success, false); +}); + +// ============================================ +// diffusionStatsSchema +// ============================================ + +test("diffusionStatsSchema: accepts all 18 C++ stats fields", (t) => { + const result = diffusionStatsSchema.safeParse({ + generation_time: 1234.5, + totalTime: 1.234, + stepsPerSecond: 5.6, + msPerStep: 178.5, + megapixelsPerSecond: 0.12, + totalSteps: 20, + totalGenerations: 1, + totalImages: 1, + totalPixels: 262144, + modelLoadMs: 500, + generationMs: 1234, + totalGenerationMs: 1234, + totalWallMs: 1234, + steps: 20, + width: 512, + height: 512, + seed: 42, + output_count: 1, + }); + t.is(result.success, true); +}); + +test("diffusionStatsSchema: accepts empty stats", (t) => { + const result = diffusionStatsSchema.safeParse({}); + t.is(result.success, true); +}); + +test("diffusionStatsSchema: strips unknown fields (no passthrough)", (t) => { + const result = diffusionStatsSchema.safeParse({ + generation_time: 100, + unknownField: "should-be-stripped", + }); + t.is(result.success, true); + if (result.success) { + t.is(result.data.generation_time, 100); + t.absent((result.data as Record)["unknownField"]); + } +}); + +// ============================================ +// generationRequestSchema +// ============================================ + +test("generationRequestSchema: accepts minimal txt2img request", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat sitting on a windowsill", + }); + t.is(result.success, true); +}); + +test("generationRequestSchema: accepts full txt2img request", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat", + negative_prompt: "ugly", + width: 512, + height: 768, + steps: 20, + cfg_scale: 7.0, + guidance: 3.5, + sampling_method: "euler_a", + scheduler: "karras", + seed: 42, + batch_count: 2, + vae_tiling: true, + cache_preset: "fast", + }); + t.is(result.success, true); +}); + +test("generationRequestSchema: accepts img2img request with init_image + strength", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a watercolor cat", + init_image: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk", + strength: 0.75, + }); + t.is(result.success, true); +}); + +test("generationRequestSchema: rejects missing modelId", (t) => { + const result = generationRequestSchema.safeParse({ + prompt: "a cat", + }); + t.is(result.success, false); +}); + +test("generationRequestSchema: rejects missing prompt", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + }); + t.is(result.success, false); +}); + +test("generationRequestSchema: rejects width not multiple of 8", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat", + width: 513, + }); + t.is(result.success, false); +}); + +test("generationRequestSchema: rejects negative steps", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat", + steps: -1, + }); + t.is(result.success, false); +}); + +test("generationRequestSchema: rejects invalid sampling_method", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat", + sampling_method: "ddpm", + }); + t.is(result.success, false); +}); + +test("generationRequestSchema: rejects strength > 1", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat", + init_image: "base64data", + strength: 1.5, + }); + t.is(result.success, false); +}); + +test("generationRequestSchema: rejects strength < 0", (t) => { + const result = generationRequestSchema.safeParse({ + modelId: "model-1", + prompt: "a cat", + init_image: "base64data", + strength: -0.1, + }); + t.is(result.success, false); +}); + +// ============================================ +// generationStreamResponseSchema +// ============================================ + +test("generationStreamResponseSchema: accepts progress tick", (t) => { + const result = generationStreamResponseSchema.safeParse({ + type: "generationStream", + step: 5, + totalSteps: 20, + elapsedMs: 1234, + }); + t.is(result.success, true); +}); + +test("generationStreamResponseSchema: accepts output data chunk", (t) => { + const result = generationStreamResponseSchema.safeParse({ + type: "generationStream", + data: "iVBORw0KGgoAAAANSUhEUg==", + outputIndex: 0, + }); + t.is(result.success, true); +}); + +test("generationStreamResponseSchema: accepts final done chunk with stats", (t) => { + const result = generationStreamResponseSchema.safeParse({ + type: "generationStream", + done: true, + stats: { + generation_time: 1234.5, + steps: 20, + width: 512, + height: 512, + seed: 42, + output_count: 1, + }, + }); + t.is(result.success, true); +}); + +test("generationStreamResponseSchema: rejects wrong type literal", (t) => { + const result = generationStreamResponseSchema.safeParse({ + type: "completionStream", + step: 1, + }); + t.is(result.success, false); +}); + +// ============================================ +// loadModelSrcRequestSchema — diffusion entries +// ============================================ + +test("loadModelSrcRequestSchema: accepts diffusion request with canonical type", (t) => { + const result = loadModelSrcRequestSchema.safeParse({ + type: "loadModel", + modelType: ModelType.sdcppGeneration, + modelSrc: "model.safetensors", + modelConfig: { device: "gpu", threads: 4 }, + }); + t.is(result.success, true); + if (result.success) { + t.is(result.data.modelType, ModelType.sdcppGeneration); + } +}); + +test("loadModelSrcRequestSchema: accepts diffusion request with no modelConfig", (t) => { + const result = loadModelSrcRequestSchema.safeParse({ + type: "loadModel", + modelType: ModelType.sdcppGeneration, + modelSrc: "model.safetensors", + }); + t.is(result.success, true); +}); + +test("loadModelSrcRequestSchema: rejects diffusion request with unknown top-level key", (t) => { + const result = loadModelSrcRequestSchema.safeParse({ + type: "loadModel", + modelType: ModelType.sdcppGeneration, + modelSrc: "model.safetensors", + extraField: true, + }); + t.is(result.success, false); +}); + +test("loadModelSrcRequestSchema: accepts diffusion config with companion sources", (t) => { + const result = loadModelSrcRequestSchema.safeParse({ + type: "loadModel", + modelType: ModelType.sdcppGeneration, + modelSrc: "flux2-klein.gguf", + modelConfig: { + device: "gpu", + clipLModelSrc: "clip-l.safetensors", + vaeModelSrc: "vae.safetensors", + llmModelSrc: "qwen3.gguf", + }, + }); + t.is(result.success, true); +}); + +// ============================================ +// loadModelOptionsBaseSchema — diffusion entries +// ============================================ + +test("loadModelOptionsBaseSchema: accepts diffusion with alias", (t) => { + const result = loadModelOptionsBaseSchema.safeParse({ + modelSrc: "model.safetensors", + modelType: "diffusion", + modelConfig: { device: "cpu" }, + }); + t.is(result.success, true); +}); + +test("loadModelOptionsBaseSchema: rejects diffusion with unknown config key (strict)", (t) => { + const result = loadModelOptionsBaseSchema.safeParse({ + modelSrc: "model.safetensors", + modelType: "diffusion", + modelConfig: { device: "gpu", notAField: true }, + }); + t.is(result.success, false); +}); + +// ============================================ +// Plugin registration & handler dispatch +// ============================================ + +test("diffusion plugin: registers and dispatches generationStream", async function (t) { + clearPlugins(); + const modelId = "test-diffusion-model-1"; + + const mockPlugin = { + modelType: ModelType.sdcppGeneration, + displayName: "Image Generation (stable-diffusion.cpp)", + addonPackage: "@qvac/diffusion-cpp", + loadConfigSchema: sdcppConfigSchema, + createModel: function () { + return { + model: { load: async function () {} }, + loader: undefined, + }; + }, + handlers: { + generationStream: { + requestSchema: generationRequestSchema as z.ZodType, + responseSchema: generationStreamResponseSchema as z.ZodType, + streaming: true, + handler: async function* () { + yield { + type: "generationStream" as const, + step: 1, + totalSteps: 2, + elapsedMs: 100, + }; + yield { + type: "generationStream" as const, + data: "iVBORw0KGgo=", + outputIndex: 0, + }; + yield { + type: "generationStream" as const, + done: true, + stats: { generation_time: 200, steps: 2, width: 512, height: 512 }, + }; + }, + }, + }, + }; + + try { + registerPlugin(mockPlugin); + t.ok(hasPlugin(ModelType.sdcppGeneration)); + + registerModel(modelId, { + model: {} as unknown as AnyModel, + path: "/tmp/model.safetensors", + config: {}, + modelType: ModelType.sdcppGeneration, + loader: undefined, + }); + + const stream = handlePluginInvokeStream({ + type: "pluginInvokeStream", + modelId, + handler: "generationStream", + params: { modelId, prompt: "a cat" }, + }); + + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + + // 3 data chunks + 1 final done:true sentinel + t.is(chunks.length, 4); + + // First chunk: progress tick + t.is(chunks[0]!.done, false); + const progressData = chunks[0]!.result as Record; + t.is(progressData.step, 1); + t.is(progressData.totalSteps, 2); + + // Second chunk: output data + const outputData = chunks[1]!.result as Record; + t.ok(typeof outputData.data === "string"); + t.is(outputData.outputIndex, 0); + + // Third chunk: final stats + const finalData = chunks[2]!.result as Record; + t.is(finalData.done, true); + t.ok(finalData.stats); + const stats = finalData.stats as Record; + t.is(stats.generation_time, 200); + t.is(stats.steps, 2); + + // Last chunk: sentinel + t.is(chunks[3]!.done, true); + t.is(chunks[3]!.result, null); + } finally { + unregisterModel(modelId); + clearPlugins(); + } +}); + +test("diffusion plugin: rejects invalid request schema", async function (t) { + clearPlugins(); + const modelId = "test-diffusion-model-2"; + + const mockPlugin = { + modelType: ModelType.sdcppGeneration, + displayName: "Image Generation", + addonPackage: "@qvac/diffusion-cpp", + loadConfigSchema: sdcppConfigSchema, + createModel: function () { + return { model: { load: async function () {} }, loader: undefined }; + }, + handlers: { + generationStream: { + requestSchema: generationRequestSchema as z.ZodType, + responseSchema: generationStreamResponseSchema as z.ZodType, + streaming: true, + handler: async function* () { + yield { type: "generationStream" as const, done: true }; + }, + }, + }, + }; + + try { + registerPlugin(mockPlugin); + registerModel(modelId, { + model: {} as unknown as AnyModel, + path: "/tmp/model.safetensors", + config: {}, + modelType: ModelType.sdcppGeneration, + loader: undefined, + }); + + const stream = handlePluginInvokeStream({ + type: "pluginInvokeStream", + modelId, + handler: "generationStream", + params: { noModelId: true, noPrompt: true }, + }); + + try { + await stream.next(); + t.fail("Expected request validation to throw"); + } catch (error) { + t.ok(error instanceof PluginRequestValidationFailedError); + t.is( + (error as PluginRequestValidationFailedError).code, + SDK_SERVER_ERROR_CODES.PLUGIN_REQUEST_VALIDATION_FAILED, + ); + } + } finally { + unregisterModel(modelId); + clearPlugins(); + } +}); + +test("diffusion plugin: rejects invalid response from handler", async function (t) { + clearPlugins(); + const modelId = "test-diffusion-model-3"; + + const mockPlugin = { + modelType: ModelType.sdcppGeneration, + displayName: "Image Generation", + addonPackage: "@qvac/diffusion-cpp", + loadConfigSchema: sdcppConfigSchema, + createModel: function () { + return { model: { load: async function () {} }, loader: undefined }; + }, + handlers: { + generationStream: { + requestSchema: generationRequestSchema as z.ZodType, + responseSchema: generationStreamResponseSchema as z.ZodType, + streaming: true, + handler: async function* () { + yield { type: "wrongType", badField: 123 }; + }, + }, + }, + }; + + try { + registerPlugin(mockPlugin); + registerModel(modelId, { + model: {} as unknown as AnyModel, + path: "/tmp/model.safetensors", + config: {}, + modelType: ModelType.sdcppGeneration, + loader: undefined, + }); + + const stream = handlePluginInvokeStream({ + type: "pluginInvokeStream", + modelId, + handler: "generationStream", + params: { modelId, prompt: "a cat" }, + }); + + try { + await stream.next(); + t.fail("Expected response validation to throw"); + } catch (error) { + t.ok(error instanceof PluginResponseValidationFailedError); + t.is( + (error as PluginResponseValidationFailedError).code, + SDK_SERVER_ERROR_CODES.PLUGIN_RESPONSE_VALIDATION_FAILED, + ); + } + } finally { + unregisterModel(modelId); + clearPlugins(); + } +}); + +test("diffusion plugin: stats with all 18 fields passes response validation", async function (t) { + clearPlugins(); + const modelId = "test-diffusion-model-4"; + + const fullStats = { + generation_time: 1234.5, + totalTime: 1.234, + stepsPerSecond: 5.6, + msPerStep: 178.5, + megapixelsPerSecond: 0.12, + totalSteps: 20, + totalGenerations: 1, + totalImages: 1, + totalPixels: 262144, + modelLoadMs: 500, + generationMs: 1234, + totalGenerationMs: 1234, + totalWallMs: 1234, + steps: 20, + width: 512, + height: 512, + seed: 42, + output_count: 1, + }; + + const mockPlugin = { + modelType: ModelType.sdcppGeneration, + displayName: "Image Generation", + addonPackage: "@qvac/diffusion-cpp", + loadConfigSchema: sdcppConfigSchema, + createModel: function () { + return { model: { load: async function () {} }, loader: undefined }; + }, + handlers: { + generationStream: { + requestSchema: generationRequestSchema as z.ZodType, + responseSchema: generationStreamResponseSchema as z.ZodType, + streaming: true, + handler: async function* () { + yield { + type: "generationStream" as const, + done: true, + stats: fullStats, + }; + }, + }, + }, + }; + + try { + registerPlugin(mockPlugin); + registerModel(modelId, { + model: {} as unknown as AnyModel, + path: "/tmp/model.safetensors", + config: {}, + modelType: ModelType.sdcppGeneration, + loader: undefined, + }); + + const stream = handlePluginInvokeStream({ + type: "pluginInvokeStream", + modelId, + handler: "generationStream", + params: { modelId, prompt: "a cat" }, + }); + + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + + // data chunk + sentinel + t.is(chunks.length, 2); + + const statsChunk = chunks[0]!.result as Record; + const receivedStats = statsChunk.stats as Record; + + // Verify all 18 fields survived safeParse validation + t.is(receivedStats.generation_time, 1234.5); + t.is(receivedStats.totalTime, 1.234); + t.is(receivedStats.stepsPerSecond, 5.6); + t.is(receivedStats.msPerStep, 178.5); + t.is(receivedStats.megapixelsPerSecond, 0.12); + t.is(receivedStats.totalSteps, 20); + t.is(receivedStats.totalGenerations, 1); + t.is(receivedStats.totalImages, 1); + t.is(receivedStats.totalPixels, 262144); + t.is(receivedStats.modelLoadMs, 500); + t.is(receivedStats.generationMs, 1234); + t.is(receivedStats.totalGenerationMs, 1234); + t.is(receivedStats.totalWallMs, 1234); + t.is(receivedStats.steps, 20); + t.is(receivedStats.width, 512); + t.is(receivedStats.height, 512); + t.is(receivedStats.seed, 42); + t.is(receivedStats.output_count, 1); + } finally { + unregisterModel(modelId); + clearPlugins(); + } +}); + +// ============================================ +// modelInfoSchema — addon enum includes "diffusion" +// ============================================ + +test("modelInfoSchema: accepts addon 'diffusion'", (t) => { + const result = modelInfoSchema.safeParse({ + name: "flux2-klein", + modelId: "flux2-klein-q4_0", + expectedSize: 1000000, + sha256Checksum: "abc123", + addon: "diffusion", + isCached: true, + isLoaded: false, + cacheFiles: [], + }); + t.is(result.success, true); +}); + +test("modelInfoSchema: rejects addon not in enum", (t) => { + const result = modelInfoSchema.safeParse({ + name: "test", + modelId: "test-id", + expectedSize: 1000, + sha256Checksum: "abc", + addon: "nonexistent", + isCached: false, + isLoaded: false, + cacheFiles: [], + }); + t.is(result.success, false); +}); + +// ============================================ +// generationStream handler dispatch — img2img mode +// ============================================ + +test("diffusion plugin: dispatches generationStream with init_image (img2img)", async function (t) { + clearPlugins(); + const modelId = "test-diffusion-model-5"; + + const mockPlugin = { + modelType: ModelType.sdcppGeneration, + displayName: "Image Generation (stable-diffusion.cpp)", + addonPackage: "@qvac/diffusion-cpp", + loadConfigSchema: sdcppConfigSchema, + createModel: function () { + return { + model: { load: async function () {} }, + loader: undefined, + }; + }, + handlers: { + generationStream: { + requestSchema: generationRequestSchema as z.ZodType, + responseSchema: generationStreamResponseSchema as z.ZodType, + streaming: true, + handler: async function* () { + yield { + type: "generationStream" as const, + step: 1, + totalSteps: 5, + elapsedMs: 50, + }; + yield { + type: "generationStream" as const, + data: "iVBORw0KGgo=", + outputIndex: 0, + }; + yield { + type: "generationStream" as const, + done: true, + stats: { generation_time: 300 }, + }; + }, + }, + }, + }; + + try { + registerPlugin(mockPlugin); + registerModel(modelId, { + model: {} as unknown as AnyModel, + path: "/tmp/model.safetensors", + config: {}, + modelType: ModelType.sdcppGeneration, + loader: undefined, + }); + + const stream = handlePluginInvokeStream({ + type: "pluginInvokeStream", + modelId, + handler: "generationStream", + params: { + modelId, + prompt: "watercolor style", + init_image: "iVBORw0KGgoAAAANSUhEUg==", + strength: 0.75, + }, + }); + + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + + // 3 data chunks + 1 sentinel + t.is(chunks.length, 4); + + // Progress + t.is(chunks[0]!.done, false); + const progress = chunks[0]!.result as Record; + t.is(progress.step, 1); + t.is(progress.totalSteps, 5); + + // Output data + const output = chunks[1]!.result as Record; + t.ok(typeof output.data === "string"); + + // Done + stats + const final = chunks[2]!.result as Record; + t.is(final.done, true); + + // Sentinel + t.is(chunks[3]!.done, true); + t.is(chunks[3]!.result, null); + } finally { + unregisterModel(modelId); + clearPlugins(); + } +}); + +// ============================================ +// resolveConfig — companion source extraction +// ============================================ + +test("sdcppConfigSchema: companion source fields are valid modelSrcInput", (t) => { + const configs = [ + { clipLModelSrc: "clip-l.safetensors" }, + { clipGModelSrc: "registry://clip-g" }, + { t5XxlModelSrc: "t5xxl.gguf" }, + { llmModelSrc: "qwen3-8b.gguf" }, + { vaeModelSrc: "vae.safetensors" }, + { + clipLModelSrc: "clip-l.safetensors", + clipGModelSrc: "clip-g.safetensors", + t5XxlModelSrc: "t5xxl.gguf", + llmModelSrc: "qwen3.gguf", + vaeModelSrc: "vae.safetensors", + }, + ]; + + for (const cfg of configs) { + const result = sdcppConfigSchema.safeParse(cfg); + t.is(result.success, true, `Failed for: ${JSON.stringify(cfg)}`); + } +}); + +test("sdcppConfigSchema: companion sources are stripped from config by resolveConfig contract", (t) => { + const input = { + threads: 4, + device: "gpu" as const, + clipLModelSrc: "clip-l.safetensors", + vaeModelSrc: "vae.safetensors", + }; + + const result = sdcppConfigSchema.safeParse(input); + t.is(result.success, true); + + if (result.success) { + t.is(result.data.threads, 4); + t.is(result.data.device, "gpu"); + t.ok("clipLModelSrc" in result.data); + t.ok("vaeModelSrc" in result.data); + } +}); diff --git a/packages/sdk/test/unit/update-models-naming.test.ts b/packages/sdk/test/unit/update-models-naming.test.ts index 1e3a1d4eb2..2c4b48165f 100644 --- a/packages/sdk/test/unit/update-models-naming.test.ts +++ b/packages/sdk/test/unit/update-models-naming.test.ts @@ -1481,3 +1481,126 @@ test("shard grouping → codegen: generated output includes shardMetadata array" // expectedSize is the sum: 500 + 300 = 800 t.ok(output.includes("expectedSize: 800"), "expectedSize is sum of shards"); }); + +// --------------------------------------------------------------------------- +// Diffusion: Stable Diffusion 2.1 Q8_0 +// --------------------------------------------------------------------------- + +test("diffusion: SD 2.1 Q8_0 — shortens stable-diffusion prefix", (t: any) => { + const coreKey = Buffer.from("aa".repeat(32), "hex"); + + const { model, exportName } = processAndName({ + path: "gpustack/stable-diffusion-v2-1-GGUF/resolve/12ddc22724f6da35f0b6006e459fae66eaf56931/stable-diffusion-v2-1-Q8_0.gguf", + source: "hf", + engine: "@qvac/diffusion-cpp", + license: "openrail++", + name: "", + sizeBytes: 1300000000, + sha256: "aa".repeat(32), + quantization: "Q8_0", + params: "1B", + tags: ["generation", "diffusion"], + blobBinding: { + coreKey, + blockOffset: 100, + blockLength: 50, + byteOffset: 1000000, + byteLength: 1300000000, + }, + }); + + t.is(model.addon, "diffusion"); + t.is(model.engine, "sdcpp-generation"); + t.is(exportName, "SD_V2_1_1B_Q8_0"); +}); + +// --------------------------------------------------------------------------- +// Diffusion: Stable Diffusion XL Q4_0 +// --------------------------------------------------------------------------- + +test("diffusion: SDXL Q4_0 — shortens stable-diffusion-xl prefix", (t: any) => { + const coreKey = Buffer.from("bb".repeat(32), "hex"); + + const { model, exportName } = processAndName({ + path: "gpustack/stable-diffusion-xl-base-1.0-GGUF/resolve/5f58340891db3ef66a79758c2dcddad92b1de169/stable-diffusion-xl-base-1.0-Q4_0.gguf", + source: "hf", + engine: "@qvac/diffusion-cpp", + license: "openrail++", + name: "", + sizeBytes: 3500000000, + sha256: "bb".repeat(32), + quantization: "Q4_0", + params: "3B", + tags: ["generation", "diffusion"], + blobBinding: { + coreKey, + blockOffset: 200, + blockLength: 100, + byteOffset: 2000000, + byteLength: 3500000000, + }, + }); + + t.is(model.addon, "diffusion"); + t.is(exportName, "SDXL_BASE_1_0_3B_Q4_0"); +}); + +// --------------------------------------------------------------------------- +// Diffusion: FLUX.2 Klein 4B Q4_0 +// --------------------------------------------------------------------------- + +test("diffusion: FLUX.2 Klein 4B Q4_0 — strips params+quant from family", (t: any) => { + const coreKey = Buffer.from("cc".repeat(32), "hex"); + + const { model, exportName } = processAndName({ + path: "unsloth/FLUX.2-klein-4B-GGUF/resolve/8342a6a97b2d18acae5d62124735c39ba23060e2/flux-2-klein-4b-Q4_0.gguf", + source: "hf", + engine: "@qvac/diffusion-cpp", + license: "Apache-2.0", + name: "", + sizeBytes: 2500000000, + sha256: "cc".repeat(32), + quantization: "Q4_0", + params: "4B", + tags: ["generation", "diffusion"], + blobBinding: { + coreKey, + blockOffset: 300, + blockLength: 150, + byteOffset: 3000000, + byteLength: 2500000000, + }, + }); + + t.is(model.addon, "diffusion"); + t.is(exportName, "FLUX_2_KLEIN_4B_Q4_0"); +}); + +// --------------------------------------------------------------------------- +// Diffusion: FLUX.2 VAE (tagged "vae") +// --------------------------------------------------------------------------- + +test("diffusion: FLUX.2 VAE — vae tag produces _VAE suffix", (t: any) => { + const coreKey = Buffer.from("dd".repeat(32), "hex"); + + const { model, exportName } = processAndName({ + path: "black-forest-labs/FLUX.2-klein-4B/resolve/5e67da950fce4a097bc150c22958a05716994cea/vae/diffusion_pytorch_model.safetensors", + source: "hf", + engine: "@qvac/diffusion-cpp", + license: "Apache-2.0", + name: "", + sizeBytes: 167000000, + sha256: "dd".repeat(32), + tags: ["vae"], + blobBinding: { + coreKey, + blockOffset: 400, + blockLength: 75, + byteOffset: 4000000, + byteLength: 167000000, + }, + }); + + t.is(model.addon, "diffusion"); + t.is(exportName, "FLUX_2_KLEIN_4B_VAE"); +}); diff --git a/packages/sdk/tests-qvac/tests/desktop/consumer.ts b/packages/sdk/tests-qvac/tests/desktop/consumer.ts index d94580550b..9df3d4655f 100644 --- a/packages/sdk/tests-qvac/tests/desktop/consumer.ts +++ b/packages/sdk/tests-qvac/tests/desktop/consumer.ts @@ -30,6 +30,9 @@ import { PARAKEET_SORTFORMER_FP32, SMOLVLM2_500M_MULTIMODAL_Q8_0, MMPROJ_SMOLVLM2_500M_MULTIMODAL_Q8_0, + FLUX_2_KLEIN_4B_Q4_0, + FLUX_2_KLEIN_4B_VAE, + QWEN3_4B_Q4_K_M, } from "@qvac/sdk"; import * as path from "node:path"; import { ResourceManager } from "../shared/resource-manager.js"; @@ -54,6 +57,7 @@ import { ErrorExecutor } from "../shared/executors/error-executor.js"; import { TtsExecutor } from "../shared/executors/tts-executor.js"; import { ParakeetExecutor } from "./executors/parakeet-executor.js"; import { VisionExecutor } from "./executors/vision-executor.js"; +import { GenerationExecutor } from "./executors/generation-executor.js"; const resources = new ResourceManager(); @@ -216,6 +220,17 @@ resources.define("vision", { }, }); +resources.define("diffusion", { + constant: FLUX_2_KLEIN_4B_Q4_0, + type: "diffusion", + config: { + device: "gpu", + threads: 4, + llmModelSrc: QWEN3_4B_Q4_K_M, + vaeModelSrc: FLUX_2_KLEIN_4B_VAE, + }, +}); + export const executor = createExecutor({ handlers: [ new ModelLoadingExecutor(resources), @@ -240,6 +255,7 @@ export const executor = createExecutor({ new KvCacheExecutor(resources), new ParakeetExecutor(resources), new VisionExecutor(resources), + new GenerationExecutor(resources), ], profiling: { init: () => profiler.enable({ mode: "summary", includeServerBreakdown: true }), diff --git a/packages/sdk/tests-qvac/tests/desktop/executors/generation-executor.ts b/packages/sdk/tests-qvac/tests/desktop/executors/generation-executor.ts new file mode 100644 index 0000000000..a70729b7d3 --- /dev/null +++ b/packages/sdk/tests-qvac/tests/desktop/executors/generation-executor.ts @@ -0,0 +1,228 @@ +// Generation (diffusion) executor +import { generation, type GenerationClientParams } from "@qvac/sdk"; +import * as fs from "node:fs"; +import * as path from "node:path"; +import { + ValidationHelpers, + type TestResult, + type Expectation, +} from "@tetherto/qvac-test-suite"; +import { AbstractModelExecutor } from "../../shared/executors/abstract-model-executor.js"; +import { generationTests } from "../../generation-tests.js"; + +export class GenerationExecutor extends AbstractModelExecutor { + pattern = /^generation-/; + + protected handlers = Object.fromEntries( + generationTests.map((test) => [test.testId, this.generic.bind(this)]), + ) as never; + + async execute( + testId: string, + context: unknown, + params: unknown, + expectation: unknown, + ): Promise { + if (testId === "generation-seed-reproducibility") { + return await this.seedReproducibility(params, expectation); + } + if (testId === "generation-streaming-progress") { + return await this.streamingProgress(params, expectation); + } + if (testId === "generation-stats-present") { + return await this.statsPresent(params, expectation); + } + + const handler = (this.handlers as Record Promise>)[testId]; + if (handler) { + return await handler.call(this, params, expectation); + } + return { passed: false, output: `Unknown test: ${testId}` }; + } + + private buildParams( + modelId: string, + p: Record, + ): GenerationClientParams { + const params: GenerationClientParams = { + modelId, + prompt: p.prompt as string, + }; + + if (p.negative_prompt != null) params.negative_prompt = p.negative_prompt as string; + if (p.width != null) params.width = p.width as number; + if (p.height != null) params.height = p.height as number; + if (p.steps != null) params.steps = p.steps as number; + if (p.cfg_scale != null) params.cfg_scale = p.cfg_scale as number; + if (p.guidance != null) params.guidance = p.guidance as number; + if (p.sampling_method != null) params.sampling_method = p.sampling_method as GenerationClientParams["sampling_method"]; + if (p.scheduler != null) params.scheduler = p.scheduler as GenerationClientParams["scheduler"]; + if (p.seed != null) params.seed = p.seed as number; + if (p.batch_count != null) params.batch_count = p.batch_count as number; + if (p.vae_tiling != null) params.vae_tiling = p.vae_tiling as boolean; + if (p.stream != null) params.stream = p.stream as boolean; + + if (p.initImageFileName) { + const imagePath = path.resolve( + process.cwd(), + "../shared-test-data/images", + p.initImageFileName as string, + ); + params.init_image = fs.readFileSync(imagePath); + params.strength = (p.strength as number) ?? 0.75; + } + + return params; + } + + async generic(params: unknown, expectation: unknown): Promise { + const p = params as Record; + const modelId = await this.resources.ensureLoaded("diffusion"); + + try { + const genParams = this.buildParams(modelId, p); + + if (genParams.stream) { + const { outputStream } = generation(genParams); + const collected: string[] = []; + for await (const { data } of outputStream) { + collected.push(data); + } + return ValidationHelpers.validate( + collected, + expectation as Expectation, + ); + } + + const { outputs } = generation(genParams); + const buffers = await outputs; + return ValidationHelpers.validate(buffers, expectation as Expectation); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + const exp = expectation as Expectation; + if (exp.validation === "throws-error") { + return ValidationHelpers.validate(errorMsg, exp); + } + return { passed: false, output: `Generation failed: ${errorMsg}` }; + } + } + + async seedReproducibility( + params: unknown, + _expectation: unknown, + ): Promise { + const p = params as Record; + const modelId = await this.resources.ensureLoaded("diffusion"); + + try { + const genParams = this.buildParams(modelId, p); + delete genParams.stream; + + const { outputs: outputs1 } = generation(genParams); + const buffers1 = await outputs1; + + const { outputs: outputs2 } = generation(genParams); + const buffers2 = await outputs2; + + if (buffers1.length === 0 || buffers2.length === 0) { + return { passed: false, output: "No outputs generated" }; + } + + const match = + buffers1[0]!.length === buffers2[0]!.length && + buffers1[0]!.every((byte: number, i: number) => byte === buffers2[0]![i]); + + return { + passed: match, + output: match + ? "Same seed produces identical output" + : `Outputs differ: ${buffers1[0]!.length} vs ${buffers2[0]!.length} bytes`, + }; + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + return { + passed: false, + output: `Seed reproducibility failed: ${errorMsg}`, + }; + } + } + + async streamingProgress( + params: unknown, + _expectation: unknown, + ): Promise { + const p = params as Record; + const modelId = await this.resources.ensureLoaded("diffusion"); + + try { + const genParams = this.buildParams(modelId, { ...p, stream: true }); + const { outputStream, progressStream, stats } = generation(genParams); + + const progressTicks: { step: number; totalSteps: number; elapsedMs: number }[] = []; + const progressDone = (async () => { + for await (const tick of progressStream) { + progressTicks.push(tick); + } + })(); + + let outputCount = 0; + for await (const _chunk of outputStream) { + outputCount++; + } + + await progressDone; + const finalStats = await stats; + + const hasOutputs = outputCount > 0; + const hasStats = finalStats != null; + const hasProgress = progressTicks.length > 0; + const progressValid = progressTicks.every( + (t) => typeof t.step === "number" && typeof t.totalSteps === "number" && typeof t.elapsedMs === "number", + ); + + return { + passed: hasOutputs && hasStats && hasProgress && progressValid, + output: `Received ${outputCount} output(s), ${progressTicks.length} progress tick(s), stats: ${hasStats ? "present" : "missing"}, progress valid: ${progressValid}`, + }; + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + return { + passed: false, + output: `Streaming progress failed: ${errorMsg}`, + }; + } + } + + async statsPresent( + params: unknown, + _expectation: unknown, + ): Promise { + const p = params as Record; + const modelId = await this.resources.ensureLoaded("diffusion"); + + try { + const genParams = this.buildParams(modelId, p); + const { outputs, stats } = generation(genParams); + + await outputs; + const finalStats = await stats; + + if (!finalStats) { + return { passed: false, output: "Stats missing from response" }; + } + + const hasExpectedFields = + typeof finalStats.steps === "number" || + typeof finalStats.generation_time === "number" || + typeof finalStats.totalSteps === "number"; + + return { + passed: hasExpectedFields, + output: `Stats present: ${JSON.stringify(finalStats)}`, + }; + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + return { passed: false, output: `Stats test failed: ${errorMsg}` }; + } + } +} diff --git a/packages/sdk/tests-qvac/tests/desktop/model-manager.ts b/packages/sdk/tests-qvac/tests/desktop/model-manager.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/sdk/tests-qvac/tests/generation-tests.ts b/packages/sdk/tests-qvac/tests/generation-tests.ts new file mode 100644 index 0000000000..a1e2c35c2b --- /dev/null +++ b/packages/sdk/tests-qvac/tests/generation-tests.ts @@ -0,0 +1,245 @@ +// Generation (diffusion) test definitions +import type { TestDefinition } from "@tetherto/qvac-test-suite"; + +const createGenerationTest = ( + testId: string, + params: Record, + expectation: + | { validation: "type"; expectedType: "string" | "number" | "array" } + | { validation: "throws-error"; errorContains: string }, + estimatedDurationMs: number = 120000, +): TestDefinition => ({ + testId, + params, + expectation, + metadata: { + category: "generation", + dependency: "diffusion", + estimatedDurationMs, + }, +}); + +// ---- txt2img ---- + +export const generationBasicTxt2img = createGenerationTest( + "generation-basic-txt2img", + { + prompt: "a solid red square on white background", + width: 256, + height: 256, + steps: 4, + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationDefaultSize = createGenerationTest( + "generation-default-size", + { + prompt: "a blue circle", + width: 256, + height: 256, + steps: 2, + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationNegativePrompt = createGenerationTest( + "generation-negative-prompt", + { + prompt: "a landscape painting", + negative_prompt: "blurry, low quality", + width: 256, + height: 256, + steps: 4, + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationCfgScale = createGenerationTest( + "generation-cfg-scale", + { + prompt: "a mountain landscape", + width: 256, + height: 256, + steps: 4, + cfg_scale: 12.0, + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationSamplerEulerA = createGenerationTest( + "generation-sampler-euler-a", + { + prompt: "a green forest", + width: 256, + height: 256, + steps: 4, + sampling_method: "euler_a", + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationSamplerHeun = createGenerationTest( + "generation-sampler-heun", + { + prompt: "a sunset over ocean", + width: 256, + height: 256, + steps: 4, + sampling_method: "heun", + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationSchedulerKarras = createGenerationTest( + "generation-scheduler-karras", + { + prompt: "abstract art", + width: 256, + height: 256, + steps: 4, + scheduler: "karras", + seed: 42, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationSeedReproducibility = createGenerationTest( + "generation-seed-reproducibility", + { + prompt: "a red triangle", + width: 256, + height: 256, + steps: 4, + seed: 12345, + verifySeedReproducibility: true, + }, + { validation: "type", expectedType: "string" }, + 240000, +); + +export const generationBatchCount = createGenerationTest( + "generation-batch-count", + { + prompt: "a simple shape", + width: 256, + height: 256, + steps: 4, + batch_count: 2, + seed: 42, + }, + { validation: "type", expectedType: "array" }, + 240000, +); + +// ---- streaming ---- + +export const generationStreaming = createGenerationTest( + "generation-streaming", + { + prompt: "a yellow star", + width: 256, + height: 256, + steps: 4, + seed: 42, + stream: true, + }, + { validation: "type", expectedType: "array" }, +); + +export const generationStreamingProgress = createGenerationTest( + "generation-streaming-progress", + { + prompt: "a purple diamond", + width: 256, + height: 256, + steps: 4, + seed: 42, + stream: true, + verifyProgress: true, + }, + { validation: "type", expectedType: "string" }, +); + +// ---- img2img ---- + +export const generationImg2img = createGenerationTest( + "generation-img2img", + { + prompt: "watercolor painting style", + width: 256, + height: 256, + steps: 4, + strength: 0.75, + seed: 42, + initImageFileName: "elephant.jpg", + }, + { validation: "type", expectedType: "array" }, +); + +export const generationImg2imgLowStrength = createGenerationTest( + "generation-img2img-low-strength", + { + prompt: "oil painting style", + width: 256, + height: 256, + steps: 4, + strength: 0.3, + seed: 42, + initImageFileName: "elephant.jpg", + }, + { validation: "type", expectedType: "array" }, +); + +// ---- stats ---- + +export const generationStatsPresent = createGenerationTest( + "generation-stats-present", + { + prompt: "a white circle on black background", + width: 256, + height: 256, + steps: 4, + seed: 42, + verifyStats: true, + }, + { validation: "type", expectedType: "string" }, +); + +// ---- error cases ---- + +export const generationEmptyPrompt = createGenerationTest( + "generation-empty-prompt", + { + prompt: "", + width: 256, + height: 256, + steps: 4, + }, + { validation: "type", expectedType: "array" }, + 60000, +); + +export const generationTests = [ + generationBasicTxt2img, + generationDefaultSize, + generationNegativePrompt, + generationCfgScale, + generationSamplerEulerA, + generationSamplerHeun, + generationSchedulerKarras, + generationSeedReproducibility, + generationBatchCount, + generationStreaming, + generationStreamingProgress, + generationImg2img, + generationImg2imgLowStrength, + generationStatsPresent, + generationEmptyPrompt, +]; diff --git a/packages/sdk/tests-qvac/tests/test-definitions.ts b/packages/sdk/tests-qvac/tests/test-definitions.ts index c81fbd1d75..f71f8ed889 100644 --- a/packages/sdk/tests-qvac/tests/test-definitions.ts +++ b/packages/sdk/tests-qvac/tests/test-definitions.ts @@ -20,6 +20,7 @@ import { shardedModelTests } from "./sharded-model-tests.js"; import { httpEmbeddingTests } from "./http-embedding-tests.js"; import { parakeetTests } from "./parakeet-tests.js"; import { visionTests } from "./vision-tests.js"; +import { generationTests } from "./generation-tests.js"; // Model loading tests export const modelLoadLlm: TestDefinition = { @@ -189,6 +190,9 @@ export const tests = [ // TTS tests ...ttsTests, + // Generation (diffusion) tests + ...generationTests, + // Config reload tests ...configReloadTests,