try fix client
Browse files- package-lock.json +701 -2
- package.json +1 -0
- src/lib/components/MonsterGenerator/MonsterGenerator.svelte +2 -2
- src/lib/components/MonsterGenerator/MonsterResult.svelte +107 -348
- src/lib/components/Piclets/PicletDetail.svelte +0 -1
- src/lib/services/qwen3Client.ts +112 -105
- src/lib/services/textGenerationClient.ts +69 -2
package-lock.json
CHANGED
|
@@ -8,6 +8,7 @@
|
|
| 8 |
"name": "svelte",
|
| 9 |
"version": "0.0.0",
|
| 10 |
"dependencies": {
|
|
|
|
| 11 |
"@imgly/background-removal": "^1.7.0",
|
| 12 |
"dexie": "^4.0.11"
|
| 13 |
},
|
|
@@ -39,6 +40,34 @@
|
|
| 39 |
"node": ">=6.0.0"
|
| 40 |
}
|
| 41 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
"node_modules/@esbuild/aix-ppc64": {
|
| 43 |
"version": "0.25.6",
|
| 44 |
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
|
|
@@ -481,6 +510,26 @@
|
|
| 481 |
"node": ">=18"
|
| 482 |
}
|
| 483 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 484 |
"node_modules/@imgly/background-removal": {
|
| 485 |
"version": "1.7.0",
|
| 486 |
"resolved": "https://registry.npmjs.org/@imgly/background-removal/-/background-removal-1.7.0.tgz",
|
|
@@ -495,6 +544,80 @@
|
|
| 495 |
"onnxruntime-web": "1.21.0"
|
| 496 |
}
|
| 497 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 498 |
"node_modules/@jridgewell/gen-mapping": {
|
| 499 |
"version": "0.3.12",
|
| 500 |
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
|
@@ -534,6 +657,45 @@
|
|
| 534 |
"@jridgewell/sourcemap-codec": "^1.4.14"
|
| 535 |
}
|
| 536 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 537 |
"node_modules/@polka/url": {
|
| 538 |
"version": "1.0.0-next.29",
|
| 539 |
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
|
|
@@ -962,6 +1124,12 @@
|
|
| 962 |
"@types/deep-eql": "*"
|
| 963 |
}
|
| 964 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 965 |
"node_modules/@types/deep-eql": {
|
| 966 |
"version": "4.0.2",
|
| 967 |
"resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
|
|
@@ -976,6 +1144,12 @@
|
|
| 976 |
"dev": true,
|
| 977 |
"license": "MIT"
|
| 978 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 979 |
"node_modules/@types/node": {
|
| 980 |
"version": "24.0.14",
|
| 981 |
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz",
|
|
@@ -985,6 +1159,18 @@
|
|
| 985 |
"undici-types": "~7.8.0"
|
| 986 |
}
|
| 987 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 988 |
"node_modules/@types/whatwg-mimetype": {
|
| 989 |
"version": "3.0.2",
|
| 990 |
"resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
|
|
@@ -1142,6 +1328,57 @@
|
|
| 1142 |
"node": ">=0.4.0"
|
| 1143 |
}
|
| 1144 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1145 |
"node_modules/aria-query": {
|
| 1146 |
"version": "5.3.2",
|
| 1147 |
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
|
|
@@ -1172,6 +1409,19 @@
|
|
| 1172 |
"node": ">= 0.4"
|
| 1173 |
}
|
| 1174 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1175 |
"node_modules/cac": {
|
| 1176 |
"version": "6.7.14",
|
| 1177 |
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
|
|
@@ -1225,6 +1475,46 @@
|
|
| 1225 |
"url": "https://paulmillr.com/funding/"
|
| 1226 |
}
|
| 1227 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1228 |
"node_modules/clsx": {
|
| 1229 |
"version": "2.1.1",
|
| 1230 |
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
|
@@ -1235,6 +1525,33 @@
|
|
| 1235 |
"node": ">=6"
|
| 1236 |
}
|
| 1237 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1238 |
"node_modules/debug": {
|
| 1239 |
"version": "4.4.1",
|
| 1240 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
|
@@ -1279,6 +1596,12 @@
|
|
| 1279 |
"integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
|
| 1280 |
"license": "Apache-2.0"
|
| 1281 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1282 |
"node_modules/es-module-lexer": {
|
| 1283 |
"version": "1.7.0",
|
| 1284 |
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
|
|
@@ -1328,6 +1651,15 @@
|
|
| 1328 |
"@esbuild/win32-x64": "0.25.6"
|
| 1329 |
}
|
| 1330 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1331 |
"node_modules/esm-env": {
|
| 1332 |
"version": "1.2.2",
|
| 1333 |
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
|
|
@@ -1355,6 +1687,15 @@
|
|
| 1355 |
"@types/estree": "^1.0.0"
|
| 1356 |
}
|
| 1357 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1358 |
"node_modules/expect-type": {
|
| 1359 |
"version": "1.2.2",
|
| 1360 |
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
|
|
@@ -1390,6 +1731,12 @@
|
|
| 1390 |
}
|
| 1391 |
}
|
| 1392 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1393 |
"node_modules/fflate": {
|
| 1394 |
"version": "0.8.2",
|
| 1395 |
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
|
|
@@ -1426,6 +1773,24 @@
|
|
| 1426 |
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
| 1427 |
}
|
| 1428 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1429 |
"node_modules/guid-typescript": {
|
| 1430 |
"version": "1.0.9",
|
| 1431 |
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
|
|
@@ -1465,6 +1830,12 @@
|
|
| 1465 |
"dev": true,
|
| 1466 |
"license": "MIT"
|
| 1467 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1468 |
"node_modules/iota-array": {
|
| 1469 |
"version": "1.0.0",
|
| 1470 |
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
|
|
@@ -1477,6 +1848,21 @@
|
|
| 1477 |
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
| 1478 |
"license": "MIT"
|
| 1479 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1480 |
"node_modules/is-reference": {
|
| 1481 |
"version": "3.0.3",
|
| 1482 |
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
|
|
@@ -1568,6 +1954,59 @@
|
|
| 1568 |
"dev": true,
|
| 1569 |
"license": "MIT"
|
| 1570 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1571 |
"node_modules/nanoid": {
|
| 1572 |
"version": "3.3.11",
|
| 1573 |
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
|
@@ -1597,6 +2036,17 @@
|
|
| 1597 |
"is-buffer": "^1.0.2"
|
| 1598 |
}
|
| 1599 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1600 |
"node_modules/onnxruntime-common": {
|
| 1601 |
"version": "1.21.0",
|
| 1602 |
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0.tgz",
|
|
@@ -1619,6 +2069,18 @@
|
|
| 1619 |
"protobufjs": "^7.2.4"
|
| 1620 |
}
|
| 1621 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1622 |
"node_modules/pathe": {
|
| 1623 |
"version": "2.0.3",
|
| 1624 |
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
|
|
@@ -1640,7 +2102,6 @@
|
|
| 1640 |
"version": "1.1.1",
|
| 1641 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
| 1642 |
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
| 1643 |
-
"dev": true,
|
| 1644 |
"license": "ISC"
|
| 1645 |
},
|
| 1646 |
"node_modules/picomatch": {
|
|
@@ -1717,6 +2178,33 @@
|
|
| 1717 |
"node": ">=12.0.0"
|
| 1718 |
}
|
| 1719 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1720 |
"node_modules/readdirp": {
|
| 1721 |
"version": "4.1.2",
|
| 1722 |
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
|
@@ -1731,6 +2219,21 @@
|
|
| 1731 |
"url": "https://paulmillr.com/funding/"
|
| 1732 |
}
|
| 1733 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1734 |
"node_modules/rollup": {
|
| 1735 |
"version": "4.45.1",
|
| 1736 |
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
|
|
@@ -1784,6 +2287,15 @@
|
|
| 1784 |
"node": ">=6"
|
| 1785 |
}
|
| 1786 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1787 |
"node_modules/siginfo": {
|
| 1788 |
"version": "2.0.0",
|
| 1789 |
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
|
|
@@ -1791,6 +2303,18 @@
|
|
| 1791 |
"dev": true,
|
| 1792 |
"license": "ISC"
|
| 1793 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1794 |
"node_modules/sirv": {
|
| 1795 |
"version": "3.0.1",
|
| 1796 |
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz",
|
|
@@ -1823,6 +2347,15 @@
|
|
| 1823 |
"dev": true,
|
| 1824 |
"license": "MIT"
|
| 1825 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1826 |
"node_modules/std-env": {
|
| 1827 |
"version": "3.9.0",
|
| 1828 |
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
|
|
@@ -1830,6 +2363,38 @@
|
|
| 1830 |
"dev": true,
|
| 1831 |
"license": "MIT"
|
| 1832 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1833 |
"node_modules/strip-literal": {
|
| 1834 |
"version": "3.0.0",
|
| 1835 |
"resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
|
|
@@ -1893,6 +2458,12 @@
|
|
| 1893 |
"typescript": ">=5.0.0"
|
| 1894 |
}
|
| 1895 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1896 |
"node_modules/tinybench": {
|
| 1897 |
"version": "2.9.0",
|
| 1898 |
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
|
|
@@ -1964,11 +2535,37 @@
|
|
| 1964 |
"node": ">=6"
|
| 1965 |
}
|
| 1966 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1967 |
"node_modules/typescript": {
|
| 1968 |
"version": "5.8.3",
|
| 1969 |
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
| 1970 |
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
| 1971 |
-
"dev": true,
|
| 1972 |
"license": "Apache-2.0",
|
| 1973 |
"bin": {
|
| 1974 |
"tsc": "bin/tsc",
|
|
@@ -1984,6 +2581,25 @@
|
|
| 1984 |
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
| 1985 |
"license": "MIT"
|
| 1986 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1987 |
"node_modules/vite": {
|
| 1988 |
"version": "6.3.5",
|
| 1989 |
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
|
|
@@ -2202,6 +2818,89 @@
|
|
| 2202 |
"node": ">=8"
|
| 2203 |
}
|
| 2204 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2205 |
"node_modules/zimmerframe": {
|
| 2206 |
"version": "1.1.2",
|
| 2207 |
"resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
|
|
|
|
| 8 |
"name": "svelte",
|
| 9 |
"version": "0.0.0",
|
| 10 |
"dependencies": {
|
| 11 |
+
"@gradio/client": "^1.15.6",
|
| 12 |
"@imgly/background-removal": "^1.7.0",
|
| 13 |
"dexie": "^4.0.11"
|
| 14 |
},
|
|
|
|
| 40 |
"node": ">=6.0.0"
|
| 41 |
}
|
| 42 |
},
|
| 43 |
+
"node_modules/@bundled-es-modules/cookie": {
|
| 44 |
+
"version": "2.0.1",
|
| 45 |
+
"resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz",
|
| 46 |
+
"integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==",
|
| 47 |
+
"license": "ISC",
|
| 48 |
+
"dependencies": {
|
| 49 |
+
"cookie": "^0.7.2"
|
| 50 |
+
}
|
| 51 |
+
},
|
| 52 |
+
"node_modules/@bundled-es-modules/statuses": {
|
| 53 |
+
"version": "1.0.1",
|
| 54 |
+
"resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz",
|
| 55 |
+
"integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==",
|
| 56 |
+
"license": "ISC",
|
| 57 |
+
"dependencies": {
|
| 58 |
+
"statuses": "^2.0.1"
|
| 59 |
+
}
|
| 60 |
+
},
|
| 61 |
+
"node_modules/@bundled-es-modules/tough-cookie": {
|
| 62 |
+
"version": "0.1.6",
|
| 63 |
+
"resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz",
|
| 64 |
+
"integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==",
|
| 65 |
+
"license": "ISC",
|
| 66 |
+
"dependencies": {
|
| 67 |
+
"@types/tough-cookie": "^4.0.5",
|
| 68 |
+
"tough-cookie": "^4.1.4"
|
| 69 |
+
}
|
| 70 |
+
},
|
| 71 |
"node_modules/@esbuild/aix-ppc64": {
|
| 72 |
"version": "0.25.6",
|
| 73 |
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
|
|
|
|
| 510 |
"node": ">=18"
|
| 511 |
}
|
| 512 |
},
|
| 513 |
+
"node_modules/@gradio/client": {
|
| 514 |
+
"version": "1.15.6",
|
| 515 |
+
"resolved": "https://registry.npmjs.org/@gradio/client/-/client-1.15.6.tgz",
|
| 516 |
+
"integrity": "sha512-QDUj2uubhp8emy7vSF/27Pn7X/tTiI2kOIL4ymiqClw9ps3DMZnsmUgKg0JSQ0w/ir71kWV0zcmJLtsy2E+KKw==",
|
| 517 |
+
"license": "ISC",
|
| 518 |
+
"dependencies": {
|
| 519 |
+
"@types/eventsource": "^1.1.15",
|
| 520 |
+
"bufferutil": "^4.0.7",
|
| 521 |
+
"eventsource": "^2.0.2",
|
| 522 |
+
"fetch-event-stream": "^0.1.5",
|
| 523 |
+
"msw": "^2.2.1",
|
| 524 |
+
"semiver": "^1.1.0",
|
| 525 |
+
"textlinestream": "^1.1.1",
|
| 526 |
+
"typescript": "^5.0.0",
|
| 527 |
+
"ws": "^8.13.0"
|
| 528 |
+
},
|
| 529 |
+
"engines": {
|
| 530 |
+
"node": ">=18.0.0"
|
| 531 |
+
}
|
| 532 |
+
},
|
| 533 |
"node_modules/@imgly/background-removal": {
|
| 534 |
"version": "1.7.0",
|
| 535 |
"resolved": "https://registry.npmjs.org/@imgly/background-removal/-/background-removal-1.7.0.tgz",
|
|
|
|
| 544 |
"onnxruntime-web": "1.21.0"
|
| 545 |
}
|
| 546 |
},
|
| 547 |
+
"node_modules/@inquirer/confirm": {
|
| 548 |
+
"version": "5.1.14",
|
| 549 |
+
"resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz",
|
| 550 |
+
"integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==",
|
| 551 |
+
"license": "MIT",
|
| 552 |
+
"dependencies": {
|
| 553 |
+
"@inquirer/core": "^10.1.15",
|
| 554 |
+
"@inquirer/type": "^3.0.8"
|
| 555 |
+
},
|
| 556 |
+
"engines": {
|
| 557 |
+
"node": ">=18"
|
| 558 |
+
},
|
| 559 |
+
"peerDependencies": {
|
| 560 |
+
"@types/node": ">=18"
|
| 561 |
+
},
|
| 562 |
+
"peerDependenciesMeta": {
|
| 563 |
+
"@types/node": {
|
| 564 |
+
"optional": true
|
| 565 |
+
}
|
| 566 |
+
}
|
| 567 |
+
},
|
| 568 |
+
"node_modules/@inquirer/core": {
|
| 569 |
+
"version": "10.1.15",
|
| 570 |
+
"resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz",
|
| 571 |
+
"integrity": "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==",
|
| 572 |
+
"license": "MIT",
|
| 573 |
+
"dependencies": {
|
| 574 |
+
"@inquirer/figures": "^1.0.13",
|
| 575 |
+
"@inquirer/type": "^3.0.8",
|
| 576 |
+
"ansi-escapes": "^4.3.2",
|
| 577 |
+
"cli-width": "^4.1.0",
|
| 578 |
+
"mute-stream": "^2.0.0",
|
| 579 |
+
"signal-exit": "^4.1.0",
|
| 580 |
+
"wrap-ansi": "^6.2.0",
|
| 581 |
+
"yoctocolors-cjs": "^2.1.2"
|
| 582 |
+
},
|
| 583 |
+
"engines": {
|
| 584 |
+
"node": ">=18"
|
| 585 |
+
},
|
| 586 |
+
"peerDependencies": {
|
| 587 |
+
"@types/node": ">=18"
|
| 588 |
+
},
|
| 589 |
+
"peerDependenciesMeta": {
|
| 590 |
+
"@types/node": {
|
| 591 |
+
"optional": true
|
| 592 |
+
}
|
| 593 |
+
}
|
| 594 |
+
},
|
| 595 |
+
"node_modules/@inquirer/figures": {
|
| 596 |
+
"version": "1.0.13",
|
| 597 |
+
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz",
|
| 598 |
+
"integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==",
|
| 599 |
+
"license": "MIT",
|
| 600 |
+
"engines": {
|
| 601 |
+
"node": ">=18"
|
| 602 |
+
}
|
| 603 |
+
},
|
| 604 |
+
"node_modules/@inquirer/type": {
|
| 605 |
+
"version": "3.0.8",
|
| 606 |
+
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz",
|
| 607 |
+
"integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==",
|
| 608 |
+
"license": "MIT",
|
| 609 |
+
"engines": {
|
| 610 |
+
"node": ">=18"
|
| 611 |
+
},
|
| 612 |
+
"peerDependencies": {
|
| 613 |
+
"@types/node": ">=18"
|
| 614 |
+
},
|
| 615 |
+
"peerDependenciesMeta": {
|
| 616 |
+
"@types/node": {
|
| 617 |
+
"optional": true
|
| 618 |
+
}
|
| 619 |
+
}
|
| 620 |
+
},
|
| 621 |
"node_modules/@jridgewell/gen-mapping": {
|
| 622 |
"version": "0.3.12",
|
| 623 |
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
|
|
|
| 657 |
"@jridgewell/sourcemap-codec": "^1.4.14"
|
| 658 |
}
|
| 659 |
},
|
| 660 |
+
"node_modules/@mswjs/interceptors": {
|
| 661 |
+
"version": "0.39.3",
|
| 662 |
+
"resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.3.tgz",
|
| 663 |
+
"integrity": "sha512-9bw/wBL7pblsnOCIqvn1788S9o4h+cC5HWXg0Xhh0dOzsZ53IyfmBM+FYqpDDPbm0xjCqEqvCITloF3Dm4TXRQ==",
|
| 664 |
+
"license": "MIT",
|
| 665 |
+
"dependencies": {
|
| 666 |
+
"@open-draft/deferred-promise": "^2.2.0",
|
| 667 |
+
"@open-draft/logger": "^0.3.0",
|
| 668 |
+
"@open-draft/until": "^2.0.0",
|
| 669 |
+
"is-node-process": "^1.2.0",
|
| 670 |
+
"outvariant": "^1.4.3",
|
| 671 |
+
"strict-event-emitter": "^0.5.1"
|
| 672 |
+
},
|
| 673 |
+
"engines": {
|
| 674 |
+
"node": ">=18"
|
| 675 |
+
}
|
| 676 |
+
},
|
| 677 |
+
"node_modules/@open-draft/deferred-promise": {
|
| 678 |
+
"version": "2.2.0",
|
| 679 |
+
"resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
|
| 680 |
+
"integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
|
| 681 |
+
"license": "MIT"
|
| 682 |
+
},
|
| 683 |
+
"node_modules/@open-draft/logger": {
|
| 684 |
+
"version": "0.3.0",
|
| 685 |
+
"resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
|
| 686 |
+
"integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
|
| 687 |
+
"license": "MIT",
|
| 688 |
+
"dependencies": {
|
| 689 |
+
"is-node-process": "^1.2.0",
|
| 690 |
+
"outvariant": "^1.4.0"
|
| 691 |
+
}
|
| 692 |
+
},
|
| 693 |
+
"node_modules/@open-draft/until": {
|
| 694 |
+
"version": "2.1.0",
|
| 695 |
+
"resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
|
| 696 |
+
"integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
|
| 697 |
+
"license": "MIT"
|
| 698 |
+
},
|
| 699 |
"node_modules/@polka/url": {
|
| 700 |
"version": "1.0.0-next.29",
|
| 701 |
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
|
|
|
|
| 1124 |
"@types/deep-eql": "*"
|
| 1125 |
}
|
| 1126 |
},
|
| 1127 |
+
"node_modules/@types/cookie": {
|
| 1128 |
+
"version": "0.6.0",
|
| 1129 |
+
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
|
| 1130 |
+
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
|
| 1131 |
+
"license": "MIT"
|
| 1132 |
+
},
|
| 1133 |
"node_modules/@types/deep-eql": {
|
| 1134 |
"version": "4.0.2",
|
| 1135 |
"resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
|
|
|
|
| 1144 |
"dev": true,
|
| 1145 |
"license": "MIT"
|
| 1146 |
},
|
| 1147 |
+
"node_modules/@types/eventsource": {
|
| 1148 |
+
"version": "1.1.15",
|
| 1149 |
+
"resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.15.tgz",
|
| 1150 |
+
"integrity": "sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA==",
|
| 1151 |
+
"license": "MIT"
|
| 1152 |
+
},
|
| 1153 |
"node_modules/@types/node": {
|
| 1154 |
"version": "24.0.14",
|
| 1155 |
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz",
|
|
|
|
| 1159 |
"undici-types": "~7.8.0"
|
| 1160 |
}
|
| 1161 |
},
|
| 1162 |
+
"node_modules/@types/statuses": {
|
| 1163 |
+
"version": "2.0.6",
|
| 1164 |
+
"resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz",
|
| 1165 |
+
"integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==",
|
| 1166 |
+
"license": "MIT"
|
| 1167 |
+
},
|
| 1168 |
+
"node_modules/@types/tough-cookie": {
|
| 1169 |
+
"version": "4.0.5",
|
| 1170 |
+
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
|
| 1171 |
+
"integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
|
| 1172 |
+
"license": "MIT"
|
| 1173 |
+
},
|
| 1174 |
"node_modules/@types/whatwg-mimetype": {
|
| 1175 |
"version": "3.0.2",
|
| 1176 |
"resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
|
|
|
|
| 1328 |
"node": ">=0.4.0"
|
| 1329 |
}
|
| 1330 |
},
|
| 1331 |
+
"node_modules/ansi-escapes": {
|
| 1332 |
+
"version": "4.3.2",
|
| 1333 |
+
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
|
| 1334 |
+
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
|
| 1335 |
+
"license": "MIT",
|
| 1336 |
+
"dependencies": {
|
| 1337 |
+
"type-fest": "^0.21.3"
|
| 1338 |
+
},
|
| 1339 |
+
"engines": {
|
| 1340 |
+
"node": ">=8"
|
| 1341 |
+
},
|
| 1342 |
+
"funding": {
|
| 1343 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 1344 |
+
}
|
| 1345 |
+
},
|
| 1346 |
+
"node_modules/ansi-escapes/node_modules/type-fest": {
|
| 1347 |
+
"version": "0.21.3",
|
| 1348 |
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
|
| 1349 |
+
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
|
| 1350 |
+
"license": "(MIT OR CC0-1.0)",
|
| 1351 |
+
"engines": {
|
| 1352 |
+
"node": ">=10"
|
| 1353 |
+
},
|
| 1354 |
+
"funding": {
|
| 1355 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 1356 |
+
}
|
| 1357 |
+
},
|
| 1358 |
+
"node_modules/ansi-regex": {
|
| 1359 |
+
"version": "5.0.1",
|
| 1360 |
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 1361 |
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
| 1362 |
+
"license": "MIT",
|
| 1363 |
+
"engines": {
|
| 1364 |
+
"node": ">=8"
|
| 1365 |
+
}
|
| 1366 |
+
},
|
| 1367 |
+
"node_modules/ansi-styles": {
|
| 1368 |
+
"version": "4.3.0",
|
| 1369 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
| 1370 |
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
| 1371 |
+
"license": "MIT",
|
| 1372 |
+
"dependencies": {
|
| 1373 |
+
"color-convert": "^2.0.1"
|
| 1374 |
+
},
|
| 1375 |
+
"engines": {
|
| 1376 |
+
"node": ">=8"
|
| 1377 |
+
},
|
| 1378 |
+
"funding": {
|
| 1379 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
| 1380 |
+
}
|
| 1381 |
+
},
|
| 1382 |
"node_modules/aria-query": {
|
| 1383 |
"version": "5.3.2",
|
| 1384 |
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
|
|
|
|
| 1409 |
"node": ">= 0.4"
|
| 1410 |
}
|
| 1411 |
},
|
| 1412 |
+
"node_modules/bufferutil": {
|
| 1413 |
+
"version": "4.0.9",
|
| 1414 |
+
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz",
|
| 1415 |
+
"integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==",
|
| 1416 |
+
"hasInstallScript": true,
|
| 1417 |
+
"license": "MIT",
|
| 1418 |
+
"dependencies": {
|
| 1419 |
+
"node-gyp-build": "^4.3.0"
|
| 1420 |
+
},
|
| 1421 |
+
"engines": {
|
| 1422 |
+
"node": ">=6.14.2"
|
| 1423 |
+
}
|
| 1424 |
+
},
|
| 1425 |
"node_modules/cac": {
|
| 1426 |
"version": "6.7.14",
|
| 1427 |
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
|
|
|
|
| 1475 |
"url": "https://paulmillr.com/funding/"
|
| 1476 |
}
|
| 1477 |
},
|
| 1478 |
+
"node_modules/cli-width": {
|
| 1479 |
+
"version": "4.1.0",
|
| 1480 |
+
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
|
| 1481 |
+
"integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
|
| 1482 |
+
"license": "ISC",
|
| 1483 |
+
"engines": {
|
| 1484 |
+
"node": ">= 12"
|
| 1485 |
+
}
|
| 1486 |
+
},
|
| 1487 |
+
"node_modules/cliui": {
|
| 1488 |
+
"version": "8.0.1",
|
| 1489 |
+
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
| 1490 |
+
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
|
| 1491 |
+
"license": "ISC",
|
| 1492 |
+
"dependencies": {
|
| 1493 |
+
"string-width": "^4.2.0",
|
| 1494 |
+
"strip-ansi": "^6.0.1",
|
| 1495 |
+
"wrap-ansi": "^7.0.0"
|
| 1496 |
+
},
|
| 1497 |
+
"engines": {
|
| 1498 |
+
"node": ">=12"
|
| 1499 |
+
}
|
| 1500 |
+
},
|
| 1501 |
+
"node_modules/cliui/node_modules/wrap-ansi": {
|
| 1502 |
+
"version": "7.0.0",
|
| 1503 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
| 1504 |
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
| 1505 |
+
"license": "MIT",
|
| 1506 |
+
"dependencies": {
|
| 1507 |
+
"ansi-styles": "^4.0.0",
|
| 1508 |
+
"string-width": "^4.1.0",
|
| 1509 |
+
"strip-ansi": "^6.0.0"
|
| 1510 |
+
},
|
| 1511 |
+
"engines": {
|
| 1512 |
+
"node": ">=10"
|
| 1513 |
+
},
|
| 1514 |
+
"funding": {
|
| 1515 |
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
| 1516 |
+
}
|
| 1517 |
+
},
|
| 1518 |
"node_modules/clsx": {
|
| 1519 |
"version": "2.1.1",
|
| 1520 |
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
|
|
|
| 1525 |
"node": ">=6"
|
| 1526 |
}
|
| 1527 |
},
|
| 1528 |
+
"node_modules/color-convert": {
|
| 1529 |
+
"version": "2.0.1",
|
| 1530 |
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
| 1531 |
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
| 1532 |
+
"license": "MIT",
|
| 1533 |
+
"dependencies": {
|
| 1534 |
+
"color-name": "~1.1.4"
|
| 1535 |
+
},
|
| 1536 |
+
"engines": {
|
| 1537 |
+
"node": ">=7.0.0"
|
| 1538 |
+
}
|
| 1539 |
+
},
|
| 1540 |
+
"node_modules/color-name": {
|
| 1541 |
+
"version": "1.1.4",
|
| 1542 |
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
| 1543 |
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
| 1544 |
+
"license": "MIT"
|
| 1545 |
+
},
|
| 1546 |
+
"node_modules/cookie": {
|
| 1547 |
+
"version": "0.7.2",
|
| 1548 |
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
|
| 1549 |
+
"integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
|
| 1550 |
+
"license": "MIT",
|
| 1551 |
+
"engines": {
|
| 1552 |
+
"node": ">= 0.6"
|
| 1553 |
+
}
|
| 1554 |
+
},
|
| 1555 |
"node_modules/debug": {
|
| 1556 |
"version": "4.4.1",
|
| 1557 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
|
|
|
| 1596 |
"integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
|
| 1597 |
"license": "Apache-2.0"
|
| 1598 |
},
|
| 1599 |
+
"node_modules/emoji-regex": {
|
| 1600 |
+
"version": "8.0.0",
|
| 1601 |
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
| 1602 |
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
| 1603 |
+
"license": "MIT"
|
| 1604 |
+
},
|
| 1605 |
"node_modules/es-module-lexer": {
|
| 1606 |
"version": "1.7.0",
|
| 1607 |
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
|
|
|
|
| 1651 |
"@esbuild/win32-x64": "0.25.6"
|
| 1652 |
}
|
| 1653 |
},
|
| 1654 |
+
"node_modules/escalade": {
|
| 1655 |
+
"version": "3.2.0",
|
| 1656 |
+
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
| 1657 |
+
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
| 1658 |
+
"license": "MIT",
|
| 1659 |
+
"engines": {
|
| 1660 |
+
"node": ">=6"
|
| 1661 |
+
}
|
| 1662 |
+
},
|
| 1663 |
"node_modules/esm-env": {
|
| 1664 |
"version": "1.2.2",
|
| 1665 |
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
|
|
|
|
| 1687 |
"@types/estree": "^1.0.0"
|
| 1688 |
}
|
| 1689 |
},
|
| 1690 |
+
"node_modules/eventsource": {
|
| 1691 |
+
"version": "2.0.2",
|
| 1692 |
+
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
|
| 1693 |
+
"integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==",
|
| 1694 |
+
"license": "MIT",
|
| 1695 |
+
"engines": {
|
| 1696 |
+
"node": ">=12.0.0"
|
| 1697 |
+
}
|
| 1698 |
+
},
|
| 1699 |
"node_modules/expect-type": {
|
| 1700 |
"version": "1.2.2",
|
| 1701 |
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
|
|
|
|
| 1731 |
}
|
| 1732 |
}
|
| 1733 |
},
|
| 1734 |
+
"node_modules/fetch-event-stream": {
|
| 1735 |
+
"version": "0.1.5",
|
| 1736 |
+
"resolved": "https://registry.npmjs.org/fetch-event-stream/-/fetch-event-stream-0.1.5.tgz",
|
| 1737 |
+
"integrity": "sha512-V1PWovkspxQfssq/NnxoEyQo1DV+MRK/laPuPblIZmSjMN8P5u46OhlFQznSr9p/t0Sp8Uc6SbM3yCMfr0KU8g==",
|
| 1738 |
+
"license": "MIT"
|
| 1739 |
+
},
|
| 1740 |
"node_modules/fflate": {
|
| 1741 |
"version": "0.8.2",
|
| 1742 |
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
|
|
|
|
| 1773 |
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
| 1774 |
}
|
| 1775 |
},
|
| 1776 |
+
"node_modules/get-caller-file": {
|
| 1777 |
+
"version": "2.0.5",
|
| 1778 |
+
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
| 1779 |
+
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
| 1780 |
+
"license": "ISC",
|
| 1781 |
+
"engines": {
|
| 1782 |
+
"node": "6.* || 8.* || >= 10.*"
|
| 1783 |
+
}
|
| 1784 |
+
},
|
| 1785 |
+
"node_modules/graphql": {
|
| 1786 |
+
"version": "16.11.0",
|
| 1787 |
+
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz",
|
| 1788 |
+
"integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==",
|
| 1789 |
+
"license": "MIT",
|
| 1790 |
+
"engines": {
|
| 1791 |
+
"node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
|
| 1792 |
+
}
|
| 1793 |
+
},
|
| 1794 |
"node_modules/guid-typescript": {
|
| 1795 |
"version": "1.0.9",
|
| 1796 |
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
|
|
|
|
| 1830 |
"dev": true,
|
| 1831 |
"license": "MIT"
|
| 1832 |
},
|
| 1833 |
+
"node_modules/headers-polyfill": {
|
| 1834 |
+
"version": "4.0.3",
|
| 1835 |
+
"resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
|
| 1836 |
+
"integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
|
| 1837 |
+
"license": "MIT"
|
| 1838 |
+
},
|
| 1839 |
"node_modules/iota-array": {
|
| 1840 |
"version": "1.0.0",
|
| 1841 |
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
|
|
|
|
| 1848 |
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
| 1849 |
"license": "MIT"
|
| 1850 |
},
|
| 1851 |
+
"node_modules/is-fullwidth-code-point": {
|
| 1852 |
+
"version": "3.0.0",
|
| 1853 |
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
| 1854 |
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
| 1855 |
+
"license": "MIT",
|
| 1856 |
+
"engines": {
|
| 1857 |
+
"node": ">=8"
|
| 1858 |
+
}
|
| 1859 |
+
},
|
| 1860 |
+
"node_modules/is-node-process": {
|
| 1861 |
+
"version": "1.2.0",
|
| 1862 |
+
"resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
|
| 1863 |
+
"integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
|
| 1864 |
+
"license": "MIT"
|
| 1865 |
+
},
|
| 1866 |
"node_modules/is-reference": {
|
| 1867 |
"version": "3.0.3",
|
| 1868 |
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
|
|
|
|
| 1954 |
"dev": true,
|
| 1955 |
"license": "MIT"
|
| 1956 |
},
|
| 1957 |
+
"node_modules/msw": {
|
| 1958 |
+
"version": "2.10.4",
|
| 1959 |
+
"resolved": "https://registry.npmjs.org/msw/-/msw-2.10.4.tgz",
|
| 1960 |
+
"integrity": "sha512-6R1or/qyele7q3RyPwNuvc0IxO8L8/Aim6Sz5ncXEgcWUNxSKE+udriTOWHtpMwmfkLYlacA2y7TIx4cL5lgHA==",
|
| 1961 |
+
"hasInstallScript": true,
|
| 1962 |
+
"license": "MIT",
|
| 1963 |
+
"dependencies": {
|
| 1964 |
+
"@bundled-es-modules/cookie": "^2.0.1",
|
| 1965 |
+
"@bundled-es-modules/statuses": "^1.0.1",
|
| 1966 |
+
"@bundled-es-modules/tough-cookie": "^0.1.6",
|
| 1967 |
+
"@inquirer/confirm": "^5.0.0",
|
| 1968 |
+
"@mswjs/interceptors": "^0.39.1",
|
| 1969 |
+
"@open-draft/deferred-promise": "^2.2.0",
|
| 1970 |
+
"@open-draft/until": "^2.1.0",
|
| 1971 |
+
"@types/cookie": "^0.6.0",
|
| 1972 |
+
"@types/statuses": "^2.0.4",
|
| 1973 |
+
"graphql": "^16.8.1",
|
| 1974 |
+
"headers-polyfill": "^4.0.2",
|
| 1975 |
+
"is-node-process": "^1.2.0",
|
| 1976 |
+
"outvariant": "^1.4.3",
|
| 1977 |
+
"path-to-regexp": "^6.3.0",
|
| 1978 |
+
"picocolors": "^1.1.1",
|
| 1979 |
+
"strict-event-emitter": "^0.5.1",
|
| 1980 |
+
"type-fest": "^4.26.1",
|
| 1981 |
+
"yargs": "^17.7.2"
|
| 1982 |
+
},
|
| 1983 |
+
"bin": {
|
| 1984 |
+
"msw": "cli/index.js"
|
| 1985 |
+
},
|
| 1986 |
+
"engines": {
|
| 1987 |
+
"node": ">=18"
|
| 1988 |
+
},
|
| 1989 |
+
"funding": {
|
| 1990 |
+
"url": "https://github.com/sponsors/mswjs"
|
| 1991 |
+
},
|
| 1992 |
+
"peerDependencies": {
|
| 1993 |
+
"typescript": ">= 4.8.x"
|
| 1994 |
+
},
|
| 1995 |
+
"peerDependenciesMeta": {
|
| 1996 |
+
"typescript": {
|
| 1997 |
+
"optional": true
|
| 1998 |
+
}
|
| 1999 |
+
}
|
| 2000 |
+
},
|
| 2001 |
+
"node_modules/mute-stream": {
|
| 2002 |
+
"version": "2.0.0",
|
| 2003 |
+
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
|
| 2004 |
+
"integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
|
| 2005 |
+
"license": "ISC",
|
| 2006 |
+
"engines": {
|
| 2007 |
+
"node": "^18.17.0 || >=20.5.0"
|
| 2008 |
+
}
|
| 2009 |
+
},
|
| 2010 |
"node_modules/nanoid": {
|
| 2011 |
"version": "3.3.11",
|
| 2012 |
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
|
|
|
| 2036 |
"is-buffer": "^1.0.2"
|
| 2037 |
}
|
| 2038 |
},
|
| 2039 |
+
"node_modules/node-gyp-build": {
|
| 2040 |
+
"version": "4.8.4",
|
| 2041 |
+
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
|
| 2042 |
+
"integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
|
| 2043 |
+
"license": "MIT",
|
| 2044 |
+
"bin": {
|
| 2045 |
+
"node-gyp-build": "bin.js",
|
| 2046 |
+
"node-gyp-build-optional": "optional.js",
|
| 2047 |
+
"node-gyp-build-test": "build-test.js"
|
| 2048 |
+
}
|
| 2049 |
+
},
|
| 2050 |
"node_modules/onnxruntime-common": {
|
| 2051 |
"version": "1.21.0",
|
| 2052 |
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0.tgz",
|
|
|
|
| 2069 |
"protobufjs": "^7.2.4"
|
| 2070 |
}
|
| 2071 |
},
|
| 2072 |
+
"node_modules/outvariant": {
|
| 2073 |
+
"version": "1.4.3",
|
| 2074 |
+
"resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
|
| 2075 |
+
"integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
|
| 2076 |
+
"license": "MIT"
|
| 2077 |
+
},
|
| 2078 |
+
"node_modules/path-to-regexp": {
|
| 2079 |
+
"version": "6.3.0",
|
| 2080 |
+
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
|
| 2081 |
+
"integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
|
| 2082 |
+
"license": "MIT"
|
| 2083 |
+
},
|
| 2084 |
"node_modules/pathe": {
|
| 2085 |
"version": "2.0.3",
|
| 2086 |
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
|
|
|
|
| 2102 |
"version": "1.1.1",
|
| 2103 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
| 2104 |
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
|
|
| 2105 |
"license": "ISC"
|
| 2106 |
},
|
| 2107 |
"node_modules/picomatch": {
|
|
|
|
| 2178 |
"node": ">=12.0.0"
|
| 2179 |
}
|
| 2180 |
},
|
| 2181 |
+
"node_modules/psl": {
|
| 2182 |
+
"version": "1.15.0",
|
| 2183 |
+
"resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
|
| 2184 |
+
"integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
|
| 2185 |
+
"license": "MIT",
|
| 2186 |
+
"dependencies": {
|
| 2187 |
+
"punycode": "^2.3.1"
|
| 2188 |
+
},
|
| 2189 |
+
"funding": {
|
| 2190 |
+
"url": "https://github.com/sponsors/lupomontero"
|
| 2191 |
+
}
|
| 2192 |
+
},
|
| 2193 |
+
"node_modules/punycode": {
|
| 2194 |
+
"version": "2.3.1",
|
| 2195 |
+
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
| 2196 |
+
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
| 2197 |
+
"license": "MIT",
|
| 2198 |
+
"engines": {
|
| 2199 |
+
"node": ">=6"
|
| 2200 |
+
}
|
| 2201 |
+
},
|
| 2202 |
+
"node_modules/querystringify": {
|
| 2203 |
+
"version": "2.2.0",
|
| 2204 |
+
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
|
| 2205 |
+
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
|
| 2206 |
+
"license": "MIT"
|
| 2207 |
+
},
|
| 2208 |
"node_modules/readdirp": {
|
| 2209 |
"version": "4.1.2",
|
| 2210 |
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
|
|
|
| 2219 |
"url": "https://paulmillr.com/funding/"
|
| 2220 |
}
|
| 2221 |
},
|
| 2222 |
+
"node_modules/require-directory": {
|
| 2223 |
+
"version": "2.1.1",
|
| 2224 |
+
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
| 2225 |
+
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
|
| 2226 |
+
"license": "MIT",
|
| 2227 |
+
"engines": {
|
| 2228 |
+
"node": ">=0.10.0"
|
| 2229 |
+
}
|
| 2230 |
+
},
|
| 2231 |
+
"node_modules/requires-port": {
|
| 2232 |
+
"version": "1.0.0",
|
| 2233 |
+
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
| 2234 |
+
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
|
| 2235 |
+
"license": "MIT"
|
| 2236 |
+
},
|
| 2237 |
"node_modules/rollup": {
|
| 2238 |
"version": "4.45.1",
|
| 2239 |
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
|
|
|
|
| 2287 |
"node": ">=6"
|
| 2288 |
}
|
| 2289 |
},
|
| 2290 |
+
"node_modules/semiver": {
|
| 2291 |
+
"version": "1.1.0",
|
| 2292 |
+
"resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz",
|
| 2293 |
+
"integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==",
|
| 2294 |
+
"license": "MIT",
|
| 2295 |
+
"engines": {
|
| 2296 |
+
"node": ">=6"
|
| 2297 |
+
}
|
| 2298 |
+
},
|
| 2299 |
"node_modules/siginfo": {
|
| 2300 |
"version": "2.0.0",
|
| 2301 |
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
|
|
|
|
| 2303 |
"dev": true,
|
| 2304 |
"license": "ISC"
|
| 2305 |
},
|
| 2306 |
+
"node_modules/signal-exit": {
|
| 2307 |
+
"version": "4.1.0",
|
| 2308 |
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
| 2309 |
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
| 2310 |
+
"license": "ISC",
|
| 2311 |
+
"engines": {
|
| 2312 |
+
"node": ">=14"
|
| 2313 |
+
},
|
| 2314 |
+
"funding": {
|
| 2315 |
+
"url": "https://github.com/sponsors/isaacs"
|
| 2316 |
+
}
|
| 2317 |
+
},
|
| 2318 |
"node_modules/sirv": {
|
| 2319 |
"version": "3.0.1",
|
| 2320 |
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz",
|
|
|
|
| 2347 |
"dev": true,
|
| 2348 |
"license": "MIT"
|
| 2349 |
},
|
| 2350 |
+
"node_modules/statuses": {
|
| 2351 |
+
"version": "2.0.2",
|
| 2352 |
+
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
|
| 2353 |
+
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
|
| 2354 |
+
"license": "MIT",
|
| 2355 |
+
"engines": {
|
| 2356 |
+
"node": ">= 0.8"
|
| 2357 |
+
}
|
| 2358 |
+
},
|
| 2359 |
"node_modules/std-env": {
|
| 2360 |
"version": "3.9.0",
|
| 2361 |
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
|
|
|
|
| 2363 |
"dev": true,
|
| 2364 |
"license": "MIT"
|
| 2365 |
},
|
| 2366 |
+
"node_modules/strict-event-emitter": {
|
| 2367 |
+
"version": "0.5.1",
|
| 2368 |
+
"resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
|
| 2369 |
+
"integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
|
| 2370 |
+
"license": "MIT"
|
| 2371 |
+
},
|
| 2372 |
+
"node_modules/string-width": {
|
| 2373 |
+
"version": "4.2.3",
|
| 2374 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
| 2375 |
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
| 2376 |
+
"license": "MIT",
|
| 2377 |
+
"dependencies": {
|
| 2378 |
+
"emoji-regex": "^8.0.0",
|
| 2379 |
+
"is-fullwidth-code-point": "^3.0.0",
|
| 2380 |
+
"strip-ansi": "^6.0.1"
|
| 2381 |
+
},
|
| 2382 |
+
"engines": {
|
| 2383 |
+
"node": ">=8"
|
| 2384 |
+
}
|
| 2385 |
+
},
|
| 2386 |
+
"node_modules/strip-ansi": {
|
| 2387 |
+
"version": "6.0.1",
|
| 2388 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 2389 |
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
| 2390 |
+
"license": "MIT",
|
| 2391 |
+
"dependencies": {
|
| 2392 |
+
"ansi-regex": "^5.0.1"
|
| 2393 |
+
},
|
| 2394 |
+
"engines": {
|
| 2395 |
+
"node": ">=8"
|
| 2396 |
+
}
|
| 2397 |
+
},
|
| 2398 |
"node_modules/strip-literal": {
|
| 2399 |
"version": "3.0.0",
|
| 2400 |
"resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
|
|
|
|
| 2458 |
"typescript": ">=5.0.0"
|
| 2459 |
}
|
| 2460 |
},
|
| 2461 |
+
"node_modules/textlinestream": {
|
| 2462 |
+
"version": "1.1.1",
|
| 2463 |
+
"resolved": "https://registry.npmjs.org/textlinestream/-/textlinestream-1.1.1.tgz",
|
| 2464 |
+
"integrity": "sha512-iBHbi7BQxrFmwZUQJsT0SjNzlLLsXhvW/kg7EyOMVMBIrlnj/qYofwo1LVLZi+3GbUEo96Iu2eqToI2+lZoAEQ==",
|
| 2465 |
+
"license": "MIT"
|
| 2466 |
+
},
|
| 2467 |
"node_modules/tinybench": {
|
| 2468 |
"version": "2.9.0",
|
| 2469 |
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
|
|
|
|
| 2535 |
"node": ">=6"
|
| 2536 |
}
|
| 2537 |
},
|
| 2538 |
+
"node_modules/tough-cookie": {
|
| 2539 |
+
"version": "4.1.4",
|
| 2540 |
+
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
|
| 2541 |
+
"integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
|
| 2542 |
+
"license": "BSD-3-Clause",
|
| 2543 |
+
"dependencies": {
|
| 2544 |
+
"psl": "^1.1.33",
|
| 2545 |
+
"punycode": "^2.1.1",
|
| 2546 |
+
"universalify": "^0.2.0",
|
| 2547 |
+
"url-parse": "^1.5.3"
|
| 2548 |
+
},
|
| 2549 |
+
"engines": {
|
| 2550 |
+
"node": ">=6"
|
| 2551 |
+
}
|
| 2552 |
+
},
|
| 2553 |
+
"node_modules/type-fest": {
|
| 2554 |
+
"version": "4.41.0",
|
| 2555 |
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
|
| 2556 |
+
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
|
| 2557 |
+
"license": "(MIT OR CC0-1.0)",
|
| 2558 |
+
"engines": {
|
| 2559 |
+
"node": ">=16"
|
| 2560 |
+
},
|
| 2561 |
+
"funding": {
|
| 2562 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 2563 |
+
}
|
| 2564 |
+
},
|
| 2565 |
"node_modules/typescript": {
|
| 2566 |
"version": "5.8.3",
|
| 2567 |
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
| 2568 |
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
|
|
|
| 2569 |
"license": "Apache-2.0",
|
| 2570 |
"bin": {
|
| 2571 |
"tsc": "bin/tsc",
|
|
|
|
| 2581 |
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
| 2582 |
"license": "MIT"
|
| 2583 |
},
|
| 2584 |
+
"node_modules/universalify": {
|
| 2585 |
+
"version": "0.2.0",
|
| 2586 |
+
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
|
| 2587 |
+
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
|
| 2588 |
+
"license": "MIT",
|
| 2589 |
+
"engines": {
|
| 2590 |
+
"node": ">= 4.0.0"
|
| 2591 |
+
}
|
| 2592 |
+
},
|
| 2593 |
+
"node_modules/url-parse": {
|
| 2594 |
+
"version": "1.5.10",
|
| 2595 |
+
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
|
| 2596 |
+
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
|
| 2597 |
+
"license": "MIT",
|
| 2598 |
+
"dependencies": {
|
| 2599 |
+
"querystringify": "^2.1.1",
|
| 2600 |
+
"requires-port": "^1.0.0"
|
| 2601 |
+
}
|
| 2602 |
+
},
|
| 2603 |
"node_modules/vite": {
|
| 2604 |
"version": "6.3.5",
|
| 2605 |
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
|
|
|
|
| 2818 |
"node": ">=8"
|
| 2819 |
}
|
| 2820 |
},
|
| 2821 |
+
"node_modules/wrap-ansi": {
|
| 2822 |
+
"version": "6.2.0",
|
| 2823 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
| 2824 |
+
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
| 2825 |
+
"license": "MIT",
|
| 2826 |
+
"dependencies": {
|
| 2827 |
+
"ansi-styles": "^4.0.0",
|
| 2828 |
+
"string-width": "^4.1.0",
|
| 2829 |
+
"strip-ansi": "^6.0.0"
|
| 2830 |
+
},
|
| 2831 |
+
"engines": {
|
| 2832 |
+
"node": ">=8"
|
| 2833 |
+
}
|
| 2834 |
+
},
|
| 2835 |
+
"node_modules/ws": {
|
| 2836 |
+
"version": "8.18.3",
|
| 2837 |
+
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
|
| 2838 |
+
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
| 2839 |
+
"license": "MIT",
|
| 2840 |
+
"engines": {
|
| 2841 |
+
"node": ">=10.0.0"
|
| 2842 |
+
},
|
| 2843 |
+
"peerDependencies": {
|
| 2844 |
+
"bufferutil": "^4.0.1",
|
| 2845 |
+
"utf-8-validate": ">=5.0.2"
|
| 2846 |
+
},
|
| 2847 |
+
"peerDependenciesMeta": {
|
| 2848 |
+
"bufferutil": {
|
| 2849 |
+
"optional": true
|
| 2850 |
+
},
|
| 2851 |
+
"utf-8-validate": {
|
| 2852 |
+
"optional": true
|
| 2853 |
+
}
|
| 2854 |
+
}
|
| 2855 |
+
},
|
| 2856 |
+
"node_modules/y18n": {
|
| 2857 |
+
"version": "5.0.8",
|
| 2858 |
+
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
| 2859 |
+
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
| 2860 |
+
"license": "ISC",
|
| 2861 |
+
"engines": {
|
| 2862 |
+
"node": ">=10"
|
| 2863 |
+
}
|
| 2864 |
+
},
|
| 2865 |
+
"node_modules/yargs": {
|
| 2866 |
+
"version": "17.7.2",
|
| 2867 |
+
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
| 2868 |
+
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
|
| 2869 |
+
"license": "MIT",
|
| 2870 |
+
"dependencies": {
|
| 2871 |
+
"cliui": "^8.0.1",
|
| 2872 |
+
"escalade": "^3.1.1",
|
| 2873 |
+
"get-caller-file": "^2.0.5",
|
| 2874 |
+
"require-directory": "^2.1.1",
|
| 2875 |
+
"string-width": "^4.2.3",
|
| 2876 |
+
"y18n": "^5.0.5",
|
| 2877 |
+
"yargs-parser": "^21.1.1"
|
| 2878 |
+
},
|
| 2879 |
+
"engines": {
|
| 2880 |
+
"node": ">=12"
|
| 2881 |
+
}
|
| 2882 |
+
},
|
| 2883 |
+
"node_modules/yargs-parser": {
|
| 2884 |
+
"version": "21.1.1",
|
| 2885 |
+
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
|
| 2886 |
+
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
|
| 2887 |
+
"license": "ISC",
|
| 2888 |
+
"engines": {
|
| 2889 |
+
"node": ">=12"
|
| 2890 |
+
}
|
| 2891 |
+
},
|
| 2892 |
+
"node_modules/yoctocolors-cjs": {
|
| 2893 |
+
"version": "2.1.2",
|
| 2894 |
+
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
|
| 2895 |
+
"integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
|
| 2896 |
+
"license": "MIT",
|
| 2897 |
+
"engines": {
|
| 2898 |
+
"node": ">=18"
|
| 2899 |
+
},
|
| 2900 |
+
"funding": {
|
| 2901 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 2902 |
+
}
|
| 2903 |
+
},
|
| 2904 |
"node_modules/zimmerframe": {
|
| 2905 |
"version": "1.1.2",
|
| 2906 |
"resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
|
package.json
CHANGED
|
@@ -25,6 +25,7 @@
|
|
| 25 |
"vitest": "^3.2.4"
|
| 26 |
},
|
| 27 |
"dependencies": {
|
|
|
|
| 28 |
"@imgly/background-removal": "^1.7.0",
|
| 29 |
"dexie": "^4.0.11"
|
| 30 |
}
|
|
|
|
| 25 |
"vitest": "^3.2.4"
|
| 26 |
},
|
| 27 |
"dependencies": {
|
| 28 |
+
"@gradio/client": "^1.15.6",
|
| 29 |
"@imgly/background-removal": "^1.7.0",
|
| 30 |
"dexie": "^4.0.11"
|
| 31 |
}
|
src/lib/components/MonsterGenerator/MonsterGenerator.svelte
CHANGED
|
@@ -318,8 +318,8 @@ Focus on: colors, body shape, eyes, limbs, mouth, and key visual features. Omit
|
|
| 318 |
const objectMatch = state.monsterConcept.match(/# Object Caption\s*\n([\s\S]*?)(?=^# )/m);
|
| 319 |
const objectDescription = objectMatch ? objectMatch[1].trim() : '';
|
| 320 |
|
| 321 |
-
// Extract monster name
|
| 322 |
-
const monsterNameMatch = state.monsterConcept.match(
|
| 323 |
const monsterName = monsterNameMatch ? monsterNameMatch[1].trim() : 'Unknown Monster';
|
| 324 |
|
| 325 |
// Debug logging
|
|
|
|
| 318 |
const objectMatch = state.monsterConcept.match(/# Object Caption\s*\n([\s\S]*?)(?=^# )/m);
|
| 319 |
const objectDescription = objectMatch ? objectMatch[1].trim() : '';
|
| 320 |
|
| 321 |
+
// Extract monster name from the Monster Name section - similar to object extraction
|
| 322 |
+
const monsterNameMatch = state.monsterConcept.match(/# Monster Name\s*\n([\s\S]*?)(?=^## |$)/m);
|
| 323 |
const monsterName = monsterNameMatch ? monsterNameMatch[1].trim() : 'Unknown Monster';
|
| 324 |
|
| 325 |
// Debug logging
|
src/lib/components/MonsterGenerator/MonsterResult.svelte
CHANGED
|
@@ -1,7 +1,11 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
import type { MonsterWorkflowState } from '$lib/types';
|
|
|
|
| 3 |
import { saveMonster } from '$lib/db/monsters';
|
| 4 |
import { TYPE_DATA, PicletType } from '$lib/types/picletTypes';
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
interface Props {
|
| 7 |
workflowState: MonsterWorkflowState;
|
|
@@ -11,407 +15,162 @@
|
|
| 11 |
let { workflowState, onReset }: Props = $props();
|
| 12 |
let isSaving = $state(false);
|
| 13 |
let isSaved = $state(false);
|
|
|
|
|
|
|
| 14 |
let saveError: string | null = $state(null);
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
if (value >= 80) return '#007bff'; // very high - blue
|
| 34 |
-
if (value >= 60) return '#28a745'; // high - green
|
| 35 |
-
if (value >= 40) return '#ffc107'; // medium - yellow
|
| 36 |
-
if (value >= 20) return '#fd7e14'; // low - orange
|
| 37 |
-
return '#dc3545'; // very low - red
|
| 38 |
-
}
|
| 39 |
-
|
| 40 |
-
async function saveToCollection() {
|
| 41 |
-
if (!workflowState.monsterImage || !workflowState.imageCaption || !workflowState.monsterConcept || !workflowState.imagePrompt || !workflowState.monsterStats) {
|
| 42 |
-
saveError = 'Missing monster data';
|
| 43 |
-
return;
|
| 44 |
-
}
|
| 45 |
-
|
| 46 |
-
isSaving = true;
|
| 47 |
-
saveError = null;
|
| 48 |
-
|
| 49 |
-
try {
|
| 50 |
-
// Extract monster name from concept (usually first line or after "Monster Name:")
|
| 51 |
-
let monsterName = 'Unknown Monster';
|
| 52 |
-
const conceptLines = workflowState.monsterConcept.split('\n');
|
| 53 |
-
for (const line of conceptLines) {
|
| 54 |
-
if (line.includes('Monster Name:') || line.includes('**Monster Name:**')) {
|
| 55 |
-
monsterName = line.replace(/\*\*Monster Name:\*\*|Monster Name:/g, '').trim();
|
| 56 |
-
break;
|
| 57 |
-
} else if (line.trim() && !line.includes(':')) {
|
| 58 |
-
// First non-empty line without colon might be the name
|
| 59 |
-
monsterName = line.trim();
|
| 60 |
-
break;
|
| 61 |
-
}
|
| 62 |
-
}
|
| 63 |
-
|
| 64 |
-
// Use stats name if available, otherwise use extracted name
|
| 65 |
-
if (workflowState.monsterStats?.name) {
|
| 66 |
-
monsterName = workflowState.monsterStats.name;
|
| 67 |
}
|
| 68 |
-
|
| 69 |
-
const monsterData = {
|
| 70 |
-
name: monsterName,
|
| 71 |
-
imageUrl: workflowState.monsterImage.imageUrl,
|
| 72 |
-
imageData: workflowState.monsterImage.imageData,
|
| 73 |
-
imageCaption: workflowState.imageCaption,
|
| 74 |
-
concept: workflowState.monsterConcept,
|
| 75 |
-
imagePrompt: workflowState.imagePrompt,
|
| 76 |
-
stats: workflowState.monsterStats
|
| 77 |
-
};
|
| 78 |
-
|
| 79 |
-
console.log('Saving monster with data:', {
|
| 80 |
-
...monsterData,
|
| 81 |
-
imageData: monsterData.imageData ? `${monsterData.imageData.substring(0, 50)}... (length: ${monsterData.imageData.length})` : 'null'
|
| 82 |
-
});
|
| 83 |
-
|
| 84 |
-
await saveMonster(monsterData);
|
| 85 |
-
|
| 86 |
-
isSaved = true;
|
| 87 |
-
} catch (err) {
|
| 88 |
-
console.error('Failed to save monster:', err);
|
| 89 |
-
saveError = 'Failed to save monster to collection';
|
| 90 |
-
} finally {
|
| 91 |
-
isSaving = false;
|
| 92 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
}
|
| 94 |
</script>
|
| 95 |
|
| 96 |
-
|
| 97 |
-
<
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
| 107 |
</div>
|
| 108 |
-
{/if}
|
| 109 |
-
|
| 110 |
-
{#if workflowState.monsterStats?.description}
|
| 111 |
-
<p class="monster-description">{workflowState.monsterStats.description}</p>
|
| 112 |
-
{/if}
|
| 113 |
|
| 114 |
-
|
| 115 |
-
<div class="
|
| 116 |
-
<
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
{#if (workflowState.monsterStats as any).picletType}
|
| 123 |
-
<div class="stat-item">
|
| 124 |
-
<TypeBadge type={(workflowState.monsterStats as any).picletType as PicletType} showLabel={true} size="medium" />
|
| 125 |
-
<span class="stat-label">Type</span>
|
| 126 |
-
</div>
|
| 127 |
-
{/if}
|
| 128 |
-
<div class="stat-item">
|
| 129 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.HP}%; background-color: {getStatColor(workflowState.monsterStats.HP)}20"></div>
|
| 130 |
-
<span class="stat-label">HP</span>
|
| 131 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.HP)}">{workflowState.monsterStats.HP}</span>
|
| 132 |
-
</div>
|
| 133 |
-
<div class="stat-item">
|
| 134 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.attack}%; background-color: {getStatColor(workflowState.monsterStats.attack)}20"></div>
|
| 135 |
-
<span class="stat-label">Attack</span>
|
| 136 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.attack)}">{workflowState.monsterStats.attack}</span>
|
| 137 |
-
</div>
|
| 138 |
-
<div class="stat-item">
|
| 139 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.defence}%; background-color: {getStatColor(workflowState.monsterStats.defence)}20"></div>
|
| 140 |
-
<span class="stat-label">Defence</span>
|
| 141 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.defence)}">{workflowState.monsterStats.defence}</span>
|
| 142 |
-
</div>
|
| 143 |
-
<div class="stat-item">
|
| 144 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.speed}%; background-color: {getStatColor(workflowState.monsterStats.speed)}20"></div>
|
| 145 |
-
<span class="stat-label">Speed</span>
|
| 146 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.speed)}">{workflowState.monsterStats.speed}</span>
|
| 147 |
-
</div>
|
| 148 |
-
</div>
|
| 149 |
-
<div class="abilities-section">
|
| 150 |
-
<div class="ability-item">
|
| 151 |
-
<h5>Special Passive Trait</h5>
|
| 152 |
-
<p>{workflowState.monsterStats.specialPassiveTrait}</p>
|
| 153 |
-
</div>
|
| 154 |
-
<div class="ability-item">
|
| 155 |
-
<h5>Attack: {workflowState.monsterStats.attackActionName}</h5>
|
| 156 |
-
<p>{workflowState.monsterStats.attackActionDescription}</p>
|
| 157 |
-
</div>
|
| 158 |
-
<div class="ability-item">
|
| 159 |
-
<h5>Buff: {workflowState.monsterStats.buffActionName}</h5>
|
| 160 |
-
<p>{workflowState.monsterStats.buffActionDescription}</p>
|
| 161 |
-
</div>
|
| 162 |
-
<div class="ability-item">
|
| 163 |
-
<h5>Debuff: {workflowState.monsterStats.debuffActionName}</h5>
|
| 164 |
-
<p>{workflowState.monsterStats.debuffActionDescription}</p>
|
| 165 |
-
</div>
|
| 166 |
-
<div class="ability-item">
|
| 167 |
-
<h5>Ultimate: {workflowState.monsterStats.specialActionName}</h5>
|
| 168 |
-
<p>{workflowState.monsterStats.specialActionDescription}</p>
|
| 169 |
-
</div>
|
| 170 |
-
</div>
|
| 171 |
</div>
|
| 172 |
{/if}
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
Download Monster
|
| 180 |
-
</button>
|
| 181 |
-
<button class="action-button reset" onclick={onReset}>
|
| 182 |
-
<svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor">
|
| 183 |
-
<path d="M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.058 7.293a1 1 0 01-1.414 1.414l-2.35-2.35A1 1 0 011 5.648V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.943 13H13a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z"/>
|
| 184 |
-
</svg>
|
| 185 |
-
Create Another Monster
|
| 186 |
-
</button>
|
| 187 |
</div>
|
| 188 |
-
|
| 189 |
-
{#if saveError}
|
| 190 |
-
<div class="error-message">{saveError}</div>
|
| 191 |
-
{/if}
|
| 192 |
-
</div>
|
| 193 |
|
| 194 |
<style>
|
| 195 |
.result-container {
|
| 196 |
-
max-width:
|
| 197 |
margin: 0 auto;
|
| 198 |
padding: 2rem;
|
| 199 |
-
}
|
| 200 |
-
|
| 201 |
-
h3 {
|
| 202 |
text-align: center;
|
| 203 |
-
color: #333;
|
| 204 |
-
margin-bottom: 2rem;
|
| 205 |
}
|
| 206 |
|
| 207 |
-
.
|
| 208 |
-
|
| 209 |
-
margin-bottom: 3rem;
|
| 210 |
}
|
| 211 |
|
| 212 |
-
.
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
border-radius: 12px;
|
| 216 |
-
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
|
| 217 |
}
|
| 218 |
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
border: 1px solid #e9ecef;
|
| 225 |
}
|
| 226 |
|
| 227 |
-
.
|
| 228 |
-
|
| 229 |
-
color: #495057;
|
| 230 |
font-size: 1.1rem;
|
|
|
|
| 231 |
}
|
| 232 |
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
justify-content: center;
|
| 237 |
-
gap: 1rem;
|
| 238 |
-
flex-wrap: wrap;
|
| 239 |
}
|
| 240 |
|
| 241 |
-
.
|
| 242 |
display: flex;
|
|
|
|
| 243 |
align-items: center;
|
| 244 |
-
gap: 0.5rem;
|
| 245 |
-
padding: 0.8rem 1.5rem;
|
| 246 |
-
border: none;
|
| 247 |
-
border-radius: 6px;
|
| 248 |
-
font-size: 1rem;
|
| 249 |
-
font-weight: 500;
|
| 250 |
-
cursor: pointer;
|
| 251 |
-
transition: all 0.2s;
|
| 252 |
-
}
|
| 253 |
-
|
| 254 |
-
.action-button.download {
|
| 255 |
-
background: #28a745;
|
| 256 |
-
color: white;
|
| 257 |
-
}
|
| 258 |
-
|
| 259 |
-
.action-button.download:hover {
|
| 260 |
-
background: #218838;
|
| 261 |
-
}
|
| 262 |
-
|
| 263 |
-
.action-button.reset {
|
| 264 |
-
background: #6c757d;
|
| 265 |
-
color: white;
|
| 266 |
-
}
|
| 267 |
-
|
| 268 |
-
.action-button.reset:hover {
|
| 269 |
-
background: #5a6268;
|
| 270 |
-
}
|
| 271 |
-
|
| 272 |
-
.action-button:disabled {
|
| 273 |
-
opacity: 0.6;
|
| 274 |
-
cursor: not-allowed;
|
| 275 |
-
}
|
| 276 |
-
|
| 277 |
-
.error-message {
|
| 278 |
-
margin-top: 1rem;
|
| 279 |
-
padding: 0.5rem;
|
| 280 |
-
background: #f8d7da;
|
| 281 |
-
color: #721c24;
|
| 282 |
-
border-radius: 4px;
|
| 283 |
-
text-align: center;
|
| 284 |
-
}
|
| 285 |
-
|
| 286 |
-
@keyframes spin {
|
| 287 |
-
to { transform: rotate(360deg); }
|
| 288 |
-
}
|
| 289 |
-
|
| 290 |
-
.stats-grid {
|
| 291 |
-
display: grid;
|
| 292 |
-
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
| 293 |
gap: 1rem;
|
| 294 |
-
margin
|
| 295 |
-
}
|
| 296 |
-
|
| 297 |
-
.stat-item {
|
| 298 |
-
display: flex;
|
| 299 |
-
flex-direction: column;
|
| 300 |
-
padding: 0.75rem;
|
| 301 |
-
background: white;
|
| 302 |
-
border-radius: 6px;
|
| 303 |
-
border: 1px solid #dee2e6;
|
| 304 |
-
position: relative;
|
| 305 |
-
overflow: hidden;
|
| 306 |
}
|
| 307 |
|
| 308 |
-
.
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
transition: width 0.3s ease;
|
| 314 |
-
z-index: 0;
|
| 315 |
-
}
|
| 316 |
-
|
| 317 |
-
.stat-label {
|
| 318 |
-
font-size: 0.85rem;
|
| 319 |
-
color: #6c757d;
|
| 320 |
-
margin-bottom: 0.25rem;
|
| 321 |
-
position: relative;
|
| 322 |
-
z-index: 1;
|
| 323 |
}
|
| 324 |
|
| 325 |
-
.
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
z-index: 1;
|
| 330 |
}
|
| 331 |
|
| 332 |
-
.
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
border-radius:
|
| 336 |
font-weight: 600;
|
| 337 |
font-size: 1rem;
|
| 338 |
-
|
| 339 |
-
|
| 340 |
-
|
| 341 |
-
.tier-badge.low {
|
| 342 |
-
background: #e0e0e0;
|
| 343 |
-
color: #666;
|
| 344 |
-
}
|
| 345 |
-
|
| 346 |
-
.tier-badge.medium {
|
| 347 |
-
background: #81c784;
|
| 348 |
-
color: white;
|
| 349 |
-
}
|
| 350 |
-
|
| 351 |
-
.tier-badge.high {
|
| 352 |
-
background: #64b5f6;
|
| 353 |
-
color: white;
|
| 354 |
}
|
| 355 |
|
| 356 |
-
.
|
| 357 |
-
background: linear-gradient(135deg, #
|
| 358 |
color: white;
|
| 359 |
-
box-shadow: 0
|
| 360 |
-
}
|
| 361 |
-
|
| 362 |
-
.abilities-section {
|
| 363 |
-
display: grid;
|
| 364 |
-
gap: 1rem;
|
| 365 |
-
}
|
| 366 |
-
|
| 367 |
-
.ability-item {
|
| 368 |
-
background: white;
|
| 369 |
-
padding: 1rem;
|
| 370 |
-
border-radius: 6px;
|
| 371 |
-
border: 1px solid #dee2e6;
|
| 372 |
}
|
| 373 |
|
| 374 |
-
.
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
|
| 378 |
}
|
| 379 |
|
| 380 |
-
.
|
| 381 |
-
|
| 382 |
-
font-size: 0.85rem;
|
| 383 |
-
line-height: 1.4;
|
| 384 |
-
}
|
| 385 |
-
|
| 386 |
-
.saved-message {
|
| 387 |
-
color: #28a745;
|
| 388 |
-
font-size: 0.9rem;
|
| 389 |
-
margin: -0.5rem 0 1.5rem;
|
| 390 |
-
text-align: center;
|
| 391 |
-
}
|
| 392 |
-
|
| 393 |
-
.monster-description {
|
| 394 |
-
text-align: center;
|
| 395 |
-
color: #555;
|
| 396 |
-
font-size: 1rem;
|
| 397 |
-
line-height: 1.5;
|
| 398 |
-
margin: 1rem auto 2rem;
|
| 399 |
-
max-width: 600px;
|
| 400 |
-
font-style: italic;
|
| 401 |
}
|
| 402 |
|
| 403 |
@media (max-width: 768px) {
|
| 404 |
.result-container {
|
| 405 |
padding: 1rem;
|
| 406 |
}
|
| 407 |
-
|
| 408 |
-
.action-buttons {
|
| 409 |
-
flex-direction: column;
|
| 410 |
-
}
|
| 411 |
-
|
| 412 |
-
.action-button {
|
| 413 |
-
width: 100%;
|
| 414 |
-
justify-content: center;
|
| 415 |
-
}
|
| 416 |
}
|
| 417 |
</style>
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
import type { MonsterWorkflowState } from '$lib/types';
|
| 3 |
+
import type { PicletInstance } from '$lib/db/schema';
|
| 4 |
import { saveMonster } from '$lib/db/monsters';
|
| 5 |
import { TYPE_DATA, PicletType } from '$lib/types/picletTypes';
|
| 6 |
+
import { monsterToPicletInstance } from '$lib/db/piclets';
|
| 7 |
+
import PicletCard from '../Piclets/PicletCard.svelte';
|
| 8 |
+
import PicletDetail from '../Piclets/PicletDetail.svelte';
|
| 9 |
|
| 10 |
interface Props {
|
| 11 |
workflowState: MonsterWorkflowState;
|
|
|
|
| 15 |
let { workflowState, onReset }: Props = $props();
|
| 16 |
let isSaving = $state(false);
|
| 17 |
let isSaved = $state(false);
|
| 18 |
+
let picletInstance: PicletInstance | null = $state(null);
|
| 19 |
+
let showDetailView = $state(false);
|
| 20 |
let saveError: string | null = $state(null);
|
| 21 |
+
|
| 22 |
+
// Create piclet instance from the monster data
|
| 23 |
+
$effect(() => {
|
| 24 |
+
if (workflowState.monsterImage && workflowState.monsterConcept && workflowState.monsterStats) {
|
| 25 |
+
try {
|
| 26 |
+
const monster = {
|
| 27 |
+
name: workflowState.monsterStats.name || 'Unknown Monster',
|
| 28 |
+
imageUrl: workflowState.monsterImage.imageUrl,
|
| 29 |
+
imageData: workflowState.monsterImage.imageData,
|
| 30 |
+
imageCaption: workflowState.imageCaption || '',
|
| 31 |
+
concept: workflowState.monsterConcept,
|
| 32 |
+
imagePrompt: workflowState.imagePrompt || '',
|
| 33 |
+
stats: workflowState.monsterStats
|
| 34 |
+
};
|
| 35 |
+
|
| 36 |
+
picletInstance = monsterToPicletInstance(monster);
|
| 37 |
+
} catch (error) {
|
| 38 |
+
console.error('Failed to create piclet instance:', error);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
}
|
| 41 |
+
});
|
| 42 |
+
|
| 43 |
+
function handleCardClick() {
|
| 44 |
+
if (picletInstance) {
|
| 45 |
+
showDetailView = true;
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
function handleCloseDetail() {
|
| 50 |
+
showDetailView = false;
|
| 51 |
}
|
| 52 |
</script>
|
| 53 |
|
| 54 |
+
{#if showDetailView && picletInstance}
|
| 55 |
+
<PicletDetail
|
| 56 |
+
instance={picletInstance}
|
| 57 |
+
onClose={handleCloseDetail}
|
| 58 |
+
/>
|
| 59 |
+
{:else}
|
| 60 |
+
<div class="result-container">
|
| 61 |
+
<div class="success-header">
|
| 62 |
+
<div class="success-icon">✨</div>
|
| 63 |
+
<h2>Success!</h2>
|
| 64 |
+
<p class="success-message">
|
| 65 |
+
You can now encounter <strong>{picletInstance?.nickname || 'this creature'}</strong>!
|
| 66 |
+
</p>
|
| 67 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
+
{#if picletInstance}
|
| 70 |
+
<div class="piclet-preview">
|
| 71 |
+
<PicletCard
|
| 72 |
+
instance={picletInstance}
|
| 73 |
+
size={140}
|
| 74 |
+
onClick={handleCardClick}
|
| 75 |
+
/>
|
| 76 |
+
<p class="tap-hint">Tap to view details</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
</div>
|
| 78 |
{/if}
|
| 79 |
+
|
| 80 |
+
<div class="action-buttons">
|
| 81 |
+
<button class="action-button primary" onclick={onReset}>
|
| 82 |
+
Create Another
|
| 83 |
+
</button>
|
| 84 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
</div>
|
| 86 |
+
{/if}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
<style>
|
| 89 |
.result-container {
|
| 90 |
+
max-width: 500px;
|
| 91 |
margin: 0 auto;
|
| 92 |
padding: 2rem;
|
|
|
|
|
|
|
|
|
|
| 93 |
text-align: center;
|
|
|
|
|
|
|
| 94 |
}
|
| 95 |
|
| 96 |
+
.success-header {
|
| 97 |
+
margin-bottom: 2rem;
|
|
|
|
| 98 |
}
|
| 99 |
|
| 100 |
+
.success-icon {
|
| 101 |
+
font-size: 3rem;
|
| 102 |
+
margin-bottom: 1rem;
|
|
|
|
|
|
|
| 103 |
}
|
| 104 |
|
| 105 |
+
.success-header h2 {
|
| 106 |
+
color: #333;
|
| 107 |
+
margin: 0 0 1rem;
|
| 108 |
+
font-size: 1.8rem;
|
| 109 |
+
font-weight: 600;
|
|
|
|
| 110 |
}
|
| 111 |
|
| 112 |
+
.success-message {
|
| 113 |
+
color: #666;
|
|
|
|
| 114 |
font-size: 1.1rem;
|
| 115 |
+
margin: 0;
|
| 116 |
}
|
| 117 |
|
| 118 |
+
.success-message strong {
|
| 119 |
+
color: #333;
|
| 120 |
+
font-weight: 600;
|
|
|
|
|
|
|
|
|
|
| 121 |
}
|
| 122 |
|
| 123 |
+
.piclet-preview {
|
| 124 |
display: flex;
|
| 125 |
+
flex-direction: column;
|
| 126 |
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
gap: 1rem;
|
| 128 |
+
margin: 2rem 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
}
|
| 130 |
|
| 131 |
+
.tap-hint {
|
| 132 |
+
color: #888;
|
| 133 |
+
font-size: 0.9rem;
|
| 134 |
+
margin: 0;
|
| 135 |
+
font-style: italic;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
}
|
| 137 |
|
| 138 |
+
.action-buttons {
|
| 139 |
+
display: flex;
|
| 140 |
+
justify-content: center;
|
| 141 |
+
margin-top: 2rem;
|
|
|
|
| 142 |
}
|
| 143 |
|
| 144 |
+
.action-button {
|
| 145 |
+
padding: 0.875rem 2rem;
|
| 146 |
+
border: none;
|
| 147 |
+
border-radius: 12px;
|
| 148 |
font-weight: 600;
|
| 149 |
font-size: 1rem;
|
| 150 |
+
cursor: pointer;
|
| 151 |
+
transition: all 0.2s ease;
|
| 152 |
+
min-width: 160px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
}
|
| 154 |
|
| 155 |
+
.action-button.primary {
|
| 156 |
+
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
|
| 157 |
color: white;
|
| 158 |
+
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
}
|
| 160 |
|
| 161 |
+
.action-button.primary:hover {
|
| 162 |
+
background: linear-gradient(135deg, #2563eb, #1e40af);
|
| 163 |
+
transform: translateY(-2px);
|
| 164 |
+
box-shadow: 0 6px 16px rgba(59, 130, 246, 0.4);
|
| 165 |
}
|
| 166 |
|
| 167 |
+
.action-button.primary:active {
|
| 168 |
+
transform: translateY(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
}
|
| 170 |
|
| 171 |
@media (max-width: 768px) {
|
| 172 |
.result-container {
|
| 173 |
padding: 1rem;
|
| 174 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
}
|
| 176 |
</style>
|
src/lib/components/Piclets/PicletDetail.svelte
CHANGED
|
@@ -157,7 +157,6 @@
|
|
| 157 |
</div>
|
| 158 |
{:else if selectedTab === 'stats'}
|
| 159 |
<div class="content-card">
|
| 160 |
-
<h3 class="section-title">Battle Stats</h3>
|
| 161 |
<div class="stats-list">
|
| 162 |
<div class="stat-row">
|
| 163 |
<span>Attack</span>
|
|
|
|
| 157 |
</div>
|
| 158 |
{:else if selectedTab === 'stats'}
|
| 159 |
<div class="content-card">
|
|
|
|
| 160 |
<div class="stats-list">
|
| 161 |
<div class="stat-row">
|
| 162 |
<span>Attack</span>
|
src/lib/services/qwen3Client.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
/**
|
| 2 |
* Qwen3 Client - Drop-in replacement for rwkvClient using Qwen3 HF Space
|
| 3 |
* Compatible with existing rwkvClient.predict("/chat", [...]) API
|
|
|
|
| 4 |
*/
|
| 5 |
|
| 6 |
interface Qwen3Message {
|
|
@@ -17,11 +18,12 @@ interface Qwen3ClientOptions {
|
|
| 17 |
export class Qwen3Client {
|
| 18 |
private options: Qwen3ClientOptions;
|
| 19 |
private sessionId: string;
|
|
|
|
| 20 |
|
| 21 |
constructor(options: Partial<Qwen3ClientOptions> = {}) {
|
| 22 |
this.options = {
|
| 23 |
huggingFaceSpace: 'Qwen/Qwen3-Demo',
|
| 24 |
-
model: '
|
| 25 |
...options
|
| 26 |
};
|
| 27 |
this.sessionId = this.generateSessionId();
|
|
@@ -31,6 +33,28 @@ export class Qwen3Client {
|
|
| 31 |
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
| 32 |
}
|
| 33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
/**
|
| 35 |
* Predict method that mimics rwkvClient.predict("/chat", [...]) API
|
| 36 |
* @param endpoint Should be "/chat" for compatibility
|
|
@@ -54,42 +78,13 @@ export class Qwen3Client {
|
|
| 54 |
] = params;
|
| 55 |
|
| 56 |
try {
|
| 57 |
-
//
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
// Add system prompt if provided
|
| 61 |
-
if (system_prompt && system_prompt.trim()) {
|
| 62 |
-
messages.push({
|
| 63 |
-
role: 'system',
|
| 64 |
-
content: system_prompt
|
| 65 |
-
});
|
| 66 |
-
}
|
| 67 |
|
| 68 |
-
//
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
// Handle [user_message, assistant_message] format
|
| 73 |
-
messages.push({
|
| 74 |
-
role: 'user',
|
| 75 |
-
content: entry[0]
|
| 76 |
-
});
|
| 77 |
-
messages.push({
|
| 78 |
-
role: 'assistant',
|
| 79 |
-
content: entry[1]
|
| 80 |
-
});
|
| 81 |
-
}
|
| 82 |
-
});
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
// Add current message
|
| 86 |
-
messages.push({
|
| 87 |
-
role: 'user',
|
| 88 |
-
content: message
|
| 89 |
-
});
|
| 90 |
-
|
| 91 |
-
// Use Hugging Face Spaces API
|
| 92 |
-
const response = await this.callQwen3API(messages, {
|
| 93 |
max_new_tokens,
|
| 94 |
temperature,
|
| 95 |
top_p,
|
|
@@ -108,94 +103,96 @@ export class Qwen3Client {
|
|
| 108 |
}
|
| 109 |
}
|
| 110 |
|
| 111 |
-
private async callQwen3API(
|
| 112 |
-
// Use the Gradio Client to connect to the Qwen3 HF Space
|
| 113 |
-
// For now, simulate the API call until we can get the proper Gradio client working
|
| 114 |
-
|
| 115 |
try {
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
//
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
model: this.options.model,
|
| 130 |
-
sys_prompt: systemMessage,
|
| 131 |
-
thinking_budget: Math.min(options.max_new_tokens || 2048, 38) // Qwen3 has max 38k thinking budget
|
| 132 |
-
},
|
| 133 |
-
{
|
| 134 |
-
enable_thinking: false // Disable for faster responses
|
| 135 |
-
},
|
| 136 |
-
{
|
| 137 |
-
conversation_contexts: {},
|
| 138 |
-
conversations: [],
|
| 139 |
-
conversation_id: this.sessionId
|
| 140 |
-
}
|
| 141 |
-
],
|
| 142 |
-
fn_index: 0 // Function index for add_message
|
| 143 |
};
|
| 144 |
|
| 145 |
-
//
|
| 146 |
-
const
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
|
|
|
|
|
|
|
|
|
| 153 |
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
}
|
|
|
|
|
|
|
|
|
|
| 168 |
}
|
| 169 |
}
|
| 170 |
}
|
| 171 |
}
|
| 172 |
-
|
| 173 |
-
throw new Error('Could not extract text from Qwen3 response');
|
| 174 |
}
|
| 175 |
|
| 176 |
-
|
|
|
|
| 177 |
|
| 178 |
} catch (error) {
|
| 179 |
-
console.warn('Qwen3
|
| 180 |
|
| 181 |
// Development fallback: Generate a reasonable response based on the input
|
| 182 |
-
const userMessage = messages[messages.length - 1].content;
|
| 183 |
-
const systemMessage = messages.find(m => m.role === 'system')?.content || '';
|
| 184 |
-
|
| 185 |
// If it's a JSON generation request, provide a structured response
|
| 186 |
-
if (
|
| 187 |
-
if (
|
| 188 |
-
return this.generateFallbackMonsterStats(
|
| 189 |
}
|
| 190 |
return '```json\n{"status": "Qwen3 temporarily unavailable", "using_fallback": true}\n```';
|
| 191 |
}
|
| 192 |
|
| 193 |
// For text generation, provide a reasonable response
|
| 194 |
-
if (
|
| 195 |
-
return this.generateFallbackImageDescription(
|
| 196 |
}
|
| 197 |
|
| 198 |
-
return `I understand you're asking about: "${
|
| 199 |
}
|
| 200 |
}
|
| 201 |
|
|
@@ -247,18 +244,28 @@ export class Qwen3Client {
|
|
| 247 |
*/
|
| 248 |
async testConnection(): Promise<boolean> {
|
| 249 |
try {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 250 |
const result = await this.predict('/chat', [
|
| 251 |
-
'Hello, are you working?',
|
| 252 |
[],
|
| 253 |
-
'You are a helpful assistant. Respond briefly.',
|
| 254 |
-
|
| 255 |
0.7,
|
| 256 |
0.95,
|
| 257 |
50,
|
| 258 |
1.0
|
| 259 |
]);
|
| 260 |
|
| 261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 262 |
} catch (error) {
|
| 263 |
console.error('Qwen3 connection test failed:', error);
|
| 264 |
return false;
|
|
|
|
| 1 |
/**
|
| 2 |
* Qwen3 Client - Drop-in replacement for rwkvClient using Qwen3 HF Space
|
| 3 |
* Compatible with existing rwkvClient.predict("/chat", [...]) API
|
| 4 |
+
* Uses proper Gradio Client connection instead of direct HTTP calls
|
| 5 |
*/
|
| 6 |
|
| 7 |
interface Qwen3Message {
|
|
|
|
| 18 |
export class Qwen3Client {
|
| 19 |
private options: Qwen3ClientOptions;
|
| 20 |
private sessionId: string;
|
| 21 |
+
private gradioClient: any = null;
|
| 22 |
|
| 23 |
constructor(options: Partial<Qwen3ClientOptions> = {}) {
|
| 24 |
this.options = {
|
| 25 |
huggingFaceSpace: 'Qwen/Qwen3-Demo',
|
| 26 |
+
model: 'qwen2.5-72b-instruct', // Use Qwen2.5-72B for best performance
|
| 27 |
...options
|
| 28 |
};
|
| 29 |
this.sessionId = this.generateSessionId();
|
|
|
|
| 33 |
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
| 34 |
}
|
| 35 |
|
| 36 |
+
/**
|
| 37 |
+
* Initialize Gradio Client connection to Qwen3 Space
|
| 38 |
+
*/
|
| 39 |
+
private async initializeGradioClient(): Promise<void> {
|
| 40 |
+
if (this.gradioClient) {
|
| 41 |
+
return; // Already initialized
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
try {
|
| 45 |
+
// Use dynamic import to avoid module issues
|
| 46 |
+
const { Client } = await import('@gradio/client');
|
| 47 |
+
|
| 48 |
+
console.log(`🔗 Connecting to ${this.options.huggingFaceSpace}...`);
|
| 49 |
+
this.gradioClient = await Client.connect(this.options.huggingFaceSpace);
|
| 50 |
+
|
| 51 |
+
console.log(`✅ Connected to Qwen3 space: ${this.options.huggingFaceSpace}`);
|
| 52 |
+
} catch (error) {
|
| 53 |
+
console.error('Failed to initialize Qwen3 Gradio Client:', error);
|
| 54 |
+
throw new Error(`Could not connect to Qwen3 space: ${error}`);
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
/**
|
| 59 |
* Predict method that mimics rwkvClient.predict("/chat", [...]) API
|
| 60 |
* @param endpoint Should be "/chat" for compatibility
|
|
|
|
| 78 |
] = params;
|
| 79 |
|
| 80 |
try {
|
| 81 |
+
// Ensure Gradio client is initialized
|
| 82 |
+
await this.initializeGradioClient();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
+
// Use the proper Gradio Client API to call the add_message function
|
| 85 |
+
const response = await this.callQwen3API(message, {
|
| 86 |
+
sys_prompt: system_prompt,
|
| 87 |
+
model: this.options.model,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
max_new_tokens,
|
| 89 |
temperature,
|
| 90 |
top_p,
|
|
|
|
| 103 |
}
|
| 104 |
}
|
| 105 |
|
| 106 |
+
private async callQwen3API(message: string, options: any): Promise<string> {
|
|
|
|
|
|
|
|
|
|
| 107 |
try {
|
| 108 |
+
if (!this.gradioClient) {
|
| 109 |
+
throw new Error('Gradio client not initialized');
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
// Prepare settings for the Qwen3 space based on app.py structure
|
| 113 |
+
const settingsFormValue = {
|
| 114 |
+
model: options.model || this.options.model,
|
| 115 |
+
sys_prompt: options.sys_prompt || "You are a helpful assistant.",
|
| 116 |
+
thinking_budget: Math.min(options.max_new_tokens || 20, 38), // Qwen3 has max 38k thinking budget
|
| 117 |
+
temperature: options.temperature || 0.7,
|
| 118 |
+
top_p: options.top_p || 0.95,
|
| 119 |
+
top_k: options.top_k || 50,
|
| 120 |
+
repetition_penalty: options.repetition_penalty || 1.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
};
|
| 122 |
|
| 123 |
+
// Thinking button state - disable for faster responses
|
| 124 |
+
const thinkingBtnState = {
|
| 125 |
+
enable_thinking: false
|
| 126 |
+
};
|
| 127 |
+
|
| 128 |
+
// Initial state for the conversation
|
| 129 |
+
const stateValue = {
|
| 130 |
+
conversation_contexts: {},
|
| 131 |
+
conversations: [],
|
| 132 |
+
conversation_id: this.sessionId
|
| 133 |
+
};
|
| 134 |
|
| 135 |
+
console.log(`🤖 Calling Qwen3 add_message with: "${message.substring(0, 50)}..."`);
|
| 136 |
+
|
| 137 |
+
// Call the add_message function from the Gradio app
|
| 138 |
+
// Based on app.py line 170: add_message(input_value, settings_form_value, thinking_btn_state_value, state_value)
|
| 139 |
+
const result = await this.gradioClient.predict("/add_message", [
|
| 140 |
+
message, // input_value
|
| 141 |
+
settingsFormValue, // settings_form_value
|
| 142 |
+
thinkingBtnState, // thinking_btn_state_value
|
| 143 |
+
stateValue // state_value
|
| 144 |
+
]);
|
| 145 |
+
|
| 146 |
+
console.log('🔍 Raw Qwen3 response:', result);
|
| 147 |
+
|
| 148 |
+
// Extract the response text from the Gradio result
|
| 149 |
+
if (result && result.data && Array.isArray(result.data)) {
|
| 150 |
+
// The response format should include the chatbot data
|
| 151 |
+
// Look for the chatbot component data (usually index 2 or 3)
|
| 152 |
+
for (let i = 0; i < result.data.length; i++) {
|
| 153 |
+
const item = result.data[i];
|
| 154 |
+
if (Array.isArray(item) && item.length > 0) {
|
| 155 |
+
// Look for the last assistant message
|
| 156 |
+
const lastMessage = item[item.length - 1];
|
| 157 |
+
if (lastMessage && lastMessage.role === 'assistant' && lastMessage.content) {
|
| 158 |
+
// Extract text content from the structured content
|
| 159 |
+
if (Array.isArray(lastMessage.content)) {
|
| 160 |
+
for (const contentItem of lastMessage.content) {
|
| 161 |
+
if (contentItem.type === 'text' && contentItem.content) {
|
| 162 |
+
console.log('✅ Extracted Qwen3 response:', contentItem.content.substring(0, 100) + '...');
|
| 163 |
+
return contentItem.content;
|
| 164 |
+
}
|
| 165 |
}
|
| 166 |
+
} else if (typeof lastMessage.content === 'string') {
|
| 167 |
+
console.log('✅ Extracted Qwen3 response:', lastMessage.content.substring(0, 100) + '...');
|
| 168 |
+
return lastMessage.content;
|
| 169 |
}
|
| 170 |
}
|
| 171 |
}
|
| 172 |
}
|
|
|
|
|
|
|
| 173 |
}
|
| 174 |
|
| 175 |
+
// If we can't extract the response, throw an error to trigger fallback
|
| 176 |
+
throw new Error('Could not extract text response from Qwen3 API result');
|
| 177 |
|
| 178 |
} catch (error) {
|
| 179 |
+
console.warn('Qwen3 Gradio API call failed, using fallback strategy:', error);
|
| 180 |
|
| 181 |
// Development fallback: Generate a reasonable response based on the input
|
|
|
|
|
|
|
|
|
|
| 182 |
// If it's a JSON generation request, provide a structured response
|
| 183 |
+
if (message.includes('JSON') || message.includes('json') || options.sys_prompt?.includes('JSON')) {
|
| 184 |
+
if (message.includes('monster') || message.includes('stats')) {
|
| 185 |
+
return this.generateFallbackMonsterStats(message);
|
| 186 |
}
|
| 187 |
return '```json\n{"status": "Qwen3 temporarily unavailable", "using_fallback": true}\n```';
|
| 188 |
}
|
| 189 |
|
| 190 |
// For text generation, provide a reasonable response
|
| 191 |
+
if (message.includes('visual description') || message.includes('image generation')) {
|
| 192 |
+
return this.generateFallbackImageDescription(message);
|
| 193 |
}
|
| 194 |
|
| 195 |
+
return `I understand you're asking about: "${message.substring(0, 100)}..."\n\nHowever, I'm currently unable to connect to the Qwen3 service. The system will automatically fall back to an alternative model for your request.`;
|
| 196 |
}
|
| 197 |
}
|
| 198 |
|
|
|
|
| 244 |
*/
|
| 245 |
async testConnection(): Promise<boolean> {
|
| 246 |
try {
|
| 247 |
+
// Try to initialize the Gradio client first
|
| 248 |
+
await this.initializeGradioClient();
|
| 249 |
+
|
| 250 |
+
// Test with a simple message
|
| 251 |
const result = await this.predict('/chat', [
|
| 252 |
+
'Hello, are you working? Please respond with just "Yes" if you can receive this message.',
|
| 253 |
[],
|
| 254 |
+
'You are a helpful assistant. Respond very briefly with just "Yes" if you can receive messages.',
|
| 255 |
+
50, // Small token limit for test
|
| 256 |
0.7,
|
| 257 |
0.95,
|
| 258 |
50,
|
| 259 |
1.0
|
| 260 |
]);
|
| 261 |
|
| 262 |
+
const response = result.data && result.data[0] && typeof result.data[0] === 'string' ? result.data[0] : '';
|
| 263 |
+
const isWorking = response.length > 0 && !response.includes('temporarily unavailable');
|
| 264 |
+
|
| 265 |
+
console.log(`🔍 Qwen3 connection test result: ${isWorking ? 'PASS' : 'FAIL'}`);
|
| 266 |
+
console.log(`📝 Test response: "${response.substring(0, 50)}..."`);
|
| 267 |
+
|
| 268 |
+
return isWorking;
|
| 269 |
} catch (error) {
|
| 270 |
console.error('Qwen3 connection test failed:', error);
|
| 271 |
return false;
|
src/lib/services/textGenerationClient.ts
CHANGED
|
@@ -34,15 +34,24 @@ class TextGenerationManager {
|
|
| 34 |
async initialize(): Promise<void> {
|
| 35 |
if (this.connectionTested) return;
|
| 36 |
|
| 37 |
-
console.log('Testing Qwen3 connection...');
|
| 38 |
|
| 39 |
try {
|
| 40 |
if (this.primaryClient.testConnection) {
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
|
| 43 |
if (qwen3Available) {
|
| 44 |
console.log('✅ Qwen3 client is available and will be used for text generation');
|
| 45 |
this.useQwen3 = true;
|
|
|
|
|
|
|
|
|
|
| 46 |
} else {
|
| 47 |
console.log('⚠️ Qwen3 client is not available, falling back to Zephyr-7B');
|
| 48 |
this.useQwen3 = false;
|
|
@@ -57,6 +66,48 @@ class TextGenerationManager {
|
|
| 57 |
this.connectionTested = true;
|
| 58 |
}
|
| 59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
/**
|
| 61 |
* Get the active client for text generation
|
| 62 |
*/
|
|
@@ -140,6 +191,22 @@ class TextGenerationManager {
|
|
| 140 |
activeClient: this.useQwen3 ? 'Qwen3' : 'Zephyr-7B'
|
| 141 |
};
|
| 142 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
}
|
| 144 |
|
| 145 |
// Export singleton instance
|
|
|
|
| 34 |
async initialize(): Promise<void> {
|
| 35 |
if (this.connectionTested) return;
|
| 36 |
|
| 37 |
+
console.log('🔍 Testing Qwen3 connection with improved verification...');
|
| 38 |
|
| 39 |
try {
|
| 40 |
if (this.primaryClient.testConnection) {
|
| 41 |
+
// Add timeout wrapper for connection test
|
| 42 |
+
const connectionTestPromise = this.primaryClient.testConnection();
|
| 43 |
+
const timeoutPromise = new Promise<boolean>((_, reject) => {
|
| 44 |
+
setTimeout(() => reject(new Error('Connection test timeout')), 15000); // 15 second timeout
|
| 45 |
+
});
|
| 46 |
+
|
| 47 |
+
const qwen3Available = await Promise.race([connectionTestPromise, timeoutPromise]);
|
| 48 |
|
| 49 |
if (qwen3Available) {
|
| 50 |
console.log('✅ Qwen3 client is available and will be used for text generation');
|
| 51 |
this.useQwen3 = true;
|
| 52 |
+
|
| 53 |
+
// Perform a secondary validation test to ensure real functionality
|
| 54 |
+
await this.performSecondaryValidation();
|
| 55 |
} else {
|
| 56 |
console.log('⚠️ Qwen3 client is not available, falling back to Zephyr-7B');
|
| 57 |
this.useQwen3 = false;
|
|
|
|
| 66 |
this.connectionTested = true;
|
| 67 |
}
|
| 68 |
|
| 69 |
+
/**
|
| 70 |
+
* Perform secondary validation to ensure Qwen3 is actually working
|
| 71 |
+
*/
|
| 72 |
+
private async performSecondaryValidation(): Promise<void> {
|
| 73 |
+
try {
|
| 74 |
+
console.log('🔧 Performing secondary validation of Qwen3 functionality...');
|
| 75 |
+
|
| 76 |
+
// Test with a specific request that should return predictable content
|
| 77 |
+
const validationResult = await Promise.race([
|
| 78 |
+
this.primaryClient.predict('/chat', [
|
| 79 |
+
'Respond with exactly this text: "VALIDATION_SUCCESS"',
|
| 80 |
+
[],
|
| 81 |
+
'You are a helpful assistant. Follow instructions exactly as given.',
|
| 82 |
+
20, // Very small token limit
|
| 83 |
+
0.1, // Low temperature for deterministic output
|
| 84 |
+
0.9,
|
| 85 |
+
10,
|
| 86 |
+
1.0
|
| 87 |
+
]),
|
| 88 |
+
new Promise<any>((_, reject) => {
|
| 89 |
+
setTimeout(() => reject(new Error('Validation timeout')), 10000); // 10 second timeout
|
| 90 |
+
})
|
| 91 |
+
]);
|
| 92 |
+
|
| 93 |
+
const response = validationResult?.data?.[0] || '';
|
| 94 |
+
const isValidResponse = typeof response === 'string' &&
|
| 95 |
+
response.length > 0 &&
|
| 96 |
+
!response.includes('temporarily unavailable') &&
|
| 97 |
+
!response.includes('using_fallback');
|
| 98 |
+
|
| 99 |
+
if (!isValidResponse) {
|
| 100 |
+
console.warn('⚠️ Secondary validation failed - Qwen3 responses seem invalid, switching to fallback');
|
| 101 |
+
this.useQwen3 = false;
|
| 102 |
+
} else {
|
| 103 |
+
console.log('✅ Secondary validation passed - Qwen3 is fully functional');
|
| 104 |
+
}
|
| 105 |
+
} catch (error) {
|
| 106 |
+
console.warn('⚠️ Secondary validation failed with error, switching to fallback:', error);
|
| 107 |
+
this.useQwen3 = false;
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
/**
|
| 112 |
* Get the active client for text generation
|
| 113 |
*/
|
|
|
|
| 191 |
activeClient: this.useQwen3 ? 'Qwen3' : 'Zephyr-7B'
|
| 192 |
};
|
| 193 |
}
|
| 194 |
+
|
| 195 |
+
/**
|
| 196 |
+
* Reset connection testing to allow re-initialization
|
| 197 |
+
*/
|
| 198 |
+
resetConnectionTest() {
|
| 199 |
+
this.connectionTested = false;
|
| 200 |
+
console.log('🔄 Connection test reset - will re-test on next prediction');
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
/**
|
| 204 |
+
* Force re-test connection and re-initialize
|
| 205 |
+
*/
|
| 206 |
+
async retestConnection(): Promise<void> {
|
| 207 |
+
this.connectionTested = false;
|
| 208 |
+
await this.initialize();
|
| 209 |
+
}
|
| 210 |
}
|
| 211 |
|
| 212 |
// Export singleton instance
|