odant-work 1.0.15 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/#system/package-manifest.json +57 -49
- package/$server/$folder/handlers/methods/create/$handler/class.js +83 -2
- package/$server/$folder/handlers/pages/form/$handler/form.js +2 -1
- package/$server/$folder/lib/icon/icon.js +14 -0
- package/$server/$folder/lib/node/node.js +51 -1
- package/$server/$folder/lib/tree/tree.js +5 -1
- package/.secretsignore +4 -0
- package/MODELS/$ai/$folder/$class/$ai/class.js +58 -3
- package/MODELS/$ai/$folder/$class/$ai/handlers/pages/form/trainer/$handler/class.js +6 -4
- package/MODELS/$ai/$folder/$class/$ai/handlers/pages/form/trainer/$handler/trainer.js +344 -3
- package/MODELS/$ai/$folder/$class/$provider/class.js +1 -1
- package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/provider/$handler/class.js +13 -0
- package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/provider/$handler/provider.js +479 -0
- package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/trainer/$handler/class.js +3 -3
- package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/trainer/$handler/trainer.js +530 -920
- package/MODELS/GigaChat/$provider/$folder/$class/$ai/class.js +10 -20
- package/MODELS/GigaChat/$provider/class.js +10 -7
- package/MODELS/GigaChat/GigaChat 2 Lite/$ai/class.js +15 -0
- package/MODELS/GigaChat/GigaChat 2 Max/$ai/class.js +16 -0
- package/MODELS/GigaChat/GigaChat 2 Pro/$ai/class.js +15 -0
- package/MODELS/GigaChat/GigaChat Embeddings/$ai/class.js +13 -0
- package/MODELS/Local/$provider/$folder/$class/$ai/class.js +3 -3
- package/MODELS/Local/$provider/class.js +7 -3
- package/MODELS/MTS-AI/$provider/$folder/$class/$ai/class.js +8 -0
- package/MODELS/MTS-AI/$provider/class.js +8 -0
- package/MODELS/MTS-AI/Cotype Lite/$ai/class.js +15 -0
- package/MODELS/MTS-AI/Cotype Pro 2/$ai/class.js +15 -0
- package/MODELS/MTS-AI/Cotype Vision/$ai/class.js +14 -0
- package/MODELS/T-Bank/$provider/$folder/$class/$ai/class.js +8 -0
- package/MODELS/T-Bank/$provider/class.js +8 -0
- package/MODELS/T-Bank/T-Lite 2.0/$ai/class.js +15 -0
- package/MODELS/T-Bank/T-Pro 2.0/$ai/class.js +16 -0
- package/MODELS/T-Bank/T-VoiceKit ASR/$ai/class.js +13 -0
- package/MODELS/T-Bank/T-VoiceKit TTS/$ai/class.js +13 -0
- package/MODELS/Yandex/$provider/$folder/$class/$ai/class.js +9 -0
- package/MODELS/Yandex/$provider/class.js +9 -0
- package/MODELS/Yandex/Alice AI (YandexGPT 5 Pro)/$ai/class.js +15 -0
- package/MODELS/Yandex/Yandex Embeddings/$ai/class.js +13 -0
- package/MODELS/Yandex/Yandex SpeechKit ASR/$ai/class.js +13 -0
- package/MODELS/Yandex/Yandex SpeechKit TTS/$ai/class.js +13 -0
- package/MODELS/Yandex/YandexART/$ai/class.js +13 -0
- package/MODELS/Yandex/YandexGPT 5 Lite/$ai/class.js +15 -0
- package/MODELS/Yandex/YandexGPT Reasoning/$ai/class.js +22 -0
- package/oda/tools/icons/lib/svg/ai.svg +20 -0
- package/package.json +1 -1
- package/scripts/check-ignored-code.mjs +3 -0
- package/scripts/check-secrets.mjs +1 -1
- package/sources/data/progress.md +24 -0
- package/sources/host/watch.js +13 -2
- package/sources/modules/agent/index.js +23 -2
- package/sources/modules/trainer/halogen.js +128 -29
- package/sources/modules/trainer/huggingface.js +11 -5
- package/sources/modules/trainer/index.js +176 -3
- package/sources/modules/trainer/local-engine.js +67 -1
- package/sources/modules/trainer/providers.js +1213 -0
- package/sources/modules/trainer/runner.js +47 -1
- package/sources/server/class.js +55 -3
- package/MODELS/GigaChat/GigaChat Light/$ai/class.js +0 -15
- package/MODELS/GigaChat/GigaChat Pro/$ai/class.js +0 -15
- package/MODELS/Halogen/$provider/$folder/$class/$ai/class.js +0 -11
- package/MODELS/Halogen/$provider/class.js +0 -16
- package/MODELS/Halogen/$provider/readme.md +0 -28
- package/MODELS/Halogen/Decider-NPU/$ai/class.js +0 -22
- package/MODELS/Halogen/Flux2-Klein-NPU/$ai/class.js +0 -21
- package/MODELS/Halogen/Qwen3-ASR-NPU/$ai/class.js +0 -21
- package/MODELS/Halogen/Qwen3-Embedding-NPU/$ai/class.js +0 -22
- package/MODELS/Halogen/Qwen3-Reranker-NPU/$ai/class.js +0 -21
- package/MODELS/Halogen/Qwen3-TTS-NPU/$ai/class.js +0 -26
- package/MODELS/Halogen/Qwen3.5-2B-NPU/$ai/class.js +0 -23
- package/MODELS/Halogen/Qwen3.8-Flash-Next/$ai/class.js +0 -31
- package/MODELS/Local/Flux-Image/$ai/class.js +0 -20
- package/MODELS/Local/Qwen3-0.6B/$ai/class.js +0 -26
- package/MODELS/Local/Qwen3-14B/$ai/class.js +0 -27
- package/MODELS/Local/Qwen3-30B-A3B/$ai/class.js +0 -30
- package/MODELS/Local/Qwen3-Embedding/$ai/class.js +0 -21
- package/MODELS/Local/Qwen3-Voice/$ai/class.js +0 -26
- package/MODELS/odant/$provider/$folder/$class/$ai/class.js +0 -11
- package/MODELS/odant/$provider/class.js +0 -75
- package/MODELS/odant/$provider/readme.md +0 -21
- package/MODELS/odant/Qwen3-ASR/$ai/class.js +0 -15
- package/MODELS/odant/Qwen3-TTS/$ai/class.js +0 -22
- package/MODELS/odant/Qwen3.8 27b/$ai/class.js +0 -11
- package/MODELS/odant/Z-Image-Turbo/$ai/class.js +0 -8
- package/MODELS/odant/Z-Image-Turbo/$ai/readme.md +0 -24
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"packageName": "odant-work",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"createdAt":
|
|
5
|
-
"updatedAt":
|
|
3
|
+
"version": "1.0.17",
|
|
4
|
+
"createdAt": 1794561330772,
|
|
5
|
+
"updatedAt": 1794561330772,
|
|
6
6
|
"files": {
|
|
7
7
|
"run.mjs": "f8918c612e8641e9beee06221be6680aa6fd21f25468451f2ac857fd51772266",
|
|
8
|
-
"package.json": "
|
|
9
|
-
"package-lock.json": "
|
|
8
|
+
"package.json": "f8c5cd13f6ca29599af16859f46d250ffe1c1f8326b8e8078aa7ed0897671670",
|
|
9
|
+
"package-lock.json": "147f2c1fef927e961c043fc228f5c852e14076ad7fef428d65fe61681d9ec3f4",
|
|
10
10
|
"sources/client/class.js": "c3fb8f143fc83aaa2df1ddeddd412d2d4dfe88656578095babe2df34fb3b3922",
|
|
11
11
|
"sources/client/field.js": "ffdd50fa8b6ec515cc42da5fca96658ff2b20e274601a1f926e0031372467a19",
|
|
12
12
|
"sources/client/file.js": "667101d75fa30840370d5be232e518aaac7c1fd52ca05a12da560eef6c0848b0",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"sources/data/objects.js": "23f51d5b00cd766fe27879b874738bc9bd9056bd6e27285fb7a52926c0dbc6a8",
|
|
27
27
|
"sources/data/posting.js": "6595bb9ec632539ae7629504db327d25a491e61c1cdc598bb43d08ea0d45548d",
|
|
28
28
|
"sources/data/print.js": "704f0f2fc80c6466a4196e4650d763150cf9b592eab14ea67ece85d51100107c",
|
|
29
|
-
"sources/data/progress.md": "
|
|
29
|
+
"sources/data/progress.md": "0e443152a9b6647c9f845d2434be7567232bcf2c025fb416ba21b23867529a98",
|
|
30
30
|
"sources/data/readme.md": "593fa2ae07aa91bc26d7542275da6953a9cd419240a9a49e00cb62fb9d5d8e36",
|
|
31
31
|
"sources/data/reports.js": "0330f404860fe2589a7d46a2f0fe690ca23249bd841a062a26718742d4fd11d6",
|
|
32
32
|
"sources/data/schema.js": "2a598b33c9352e3b673639dda302caeb13620cf978960cbcaee906f7bb852d50",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"sources/host/stun.js": "1d635659569d92f0059ed469e2974d9c8ee79e6c29bafdb6deaa3b7c4de6f57e",
|
|
54
54
|
"sources/host/tls-ca.js": "df380b1b308447012907cb9a9ebe2cf7442cb8a2c9d8941bae4eaeaead50d349",
|
|
55
55
|
"sources/host/vapid.js": "e31b865e17d723f9b0f44ca412d77c3c4b972920b661633d4d96875a728de119",
|
|
56
|
-
"sources/host/watch.js": "
|
|
56
|
+
"sources/host/watch.js": "a2c7c771390da2b0b55105652f5809a5a6a85ac0d140d5c0cd78debfe7fd1695",
|
|
57
57
|
"sources/host/websocket.js": "ca0a791f319f6bd219a2291b60adf30f98cec282b8711df4ec47b7ddee152d4b",
|
|
58
58
|
"sources/index.html": "ebe5d6b055671c23a80ba8fad303415f6396559d2dbbfd84266f4914d21095af",
|
|
59
59
|
"sources/manifest.json": "288e8f4279176927a7c448f8a1f27d1dc40e22e2412f1341d18c16ff83fb181d",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"sources/modules/agent/eval.js": "91f907554630ad53c30d5c1d760bb646bb4dbd10ec854a69453d002368ce25cc",
|
|
65
65
|
"sources/modules/agent/extensions.js": "a2549960cbfece9698c730506b05e2db9bd5b12434fc29156cb391dc566ec643",
|
|
66
66
|
"sources/modules/agent/hooks.js": "b74e9d8f4b491b6d16d979891de69941955e50852289f55589c82997405c9048",
|
|
67
|
-
"sources/modules/agent/index.js": "
|
|
67
|
+
"sources/modules/agent/index.js": "0fe7348bb4e886d0c7e3aabb03bb5b9650a11058472c83e0ededbf4d77928f7d",
|
|
68
68
|
"sources/modules/agent/log.js": "03ae1979e2b00459178deda49847c30ed75937fc4f3eea9b778ca6c0f8c4ded0",
|
|
69
69
|
"sources/modules/agent/loop.js": "32849b7e7048720da8201dd7a85a09bfe4f8cbd82eb30215258632de2505e0fa",
|
|
70
70
|
"sources/modules/agent/mcp-pool.js": "aa4e75e2fcfe07883f9b721b33cee642fbbe11b8f416f8cd6a81f9c1ab39edde",
|
|
@@ -165,11 +165,12 @@
|
|
|
165
165
|
"sources/modules/sandbox/stream.js": "bfa74c918642e4fa5af170fdde52d825865f4fd09f771da5305898ac4738d4de",
|
|
166
166
|
"sources/modules/sandbox/vnc-proxy.js": "1c75c2b24d579f254de1c4727621fbbcc7e8a10360f638f4cf1c4bd91184d103",
|
|
167
167
|
"sources/modules/trainer/dataset.js": "ca91f11249ccf4fce9c15dc780711fa33059a3e1efbaf0ccdbbd59e529b0108e",
|
|
168
|
-
"sources/modules/trainer/halogen.js": "
|
|
169
|
-
"sources/modules/trainer/huggingface.js": "
|
|
170
|
-
"sources/modules/trainer/index.js": "
|
|
171
|
-
"sources/modules/trainer/local-engine.js": "
|
|
172
|
-
"sources/modules/trainer/
|
|
168
|
+
"sources/modules/trainer/halogen.js": "c3f51d41d86331b83b888e807fb0db973f116fc4e8d7f81f4b1ea7aaa1100129",
|
|
169
|
+
"sources/modules/trainer/huggingface.js": "f6db6b1ea97969360005cdfc9ae485c1dc519af28d175d0df1a486959408bc3a",
|
|
170
|
+
"sources/modules/trainer/index.js": "715ec739676d2e4cd8cec2768ede93e2546c502b8452f1314fe676592594431a",
|
|
171
|
+
"sources/modules/trainer/local-engine.js": "83cd121b208248606c8cbfdb7100c5ab1b2f06dc56b5266d2df8feda0237be4d",
|
|
172
|
+
"sources/modules/trainer/providers.js": "18e075140bb14a9dd2ef70412942a03558d415abab9387d1d42c39f8c422b073",
|
|
173
|
+
"sources/modules/trainer/runner.js": "a438e38614a73834cbb9e542357b9cb76df3c16c2dd0b972c4be88383e3569a9",
|
|
173
174
|
"sources/modules/trainer/worker/local_infer_worker.py": "7b001d75c64ac3ae6de650f6d738f22bfc21b6bd0694b57248e5b40966deb443",
|
|
174
175
|
"sources/modules/trainer/worker/unsloth_train.py": "7774d94ffa6f60eed20c57a8dfdc12621d5d9f74d594c605dff32ff70e321e33",
|
|
175
176
|
"sources/modules/user-profile/user-profile.js": "47b71574ec51e6d40e218e996c8397b25f36418f21e69668c75f1df7d64eb914",
|
|
@@ -192,7 +193,7 @@
|
|
|
192
193
|
"sources/server/class/script.js": "146ef61b5a55201c34f80de4bbfcb116922f03348773548c041bdba0e53aba64",
|
|
193
194
|
"sources/server/class/search.js": "c3d50a82769d65cfabdc0b83c73c289cec212ac5feb685aec4b1489b206546dd",
|
|
194
195
|
"sources/server/class/security.js": "2c1532c5d549aa23903eecd23ea2ed678430e7198543b6d2d85d675614803a83",
|
|
195
|
-
"sources/server/class.js": "
|
|
196
|
+
"sources/server/class.js": "ad3f7679608ac6876b0d9cac427298e6c58c29251c13273cc35a4e8200de74c3",
|
|
196
197
|
"sources/server/external-source.js": "a576a42d380dc2f4688f5c7b0bcb4ca5e0870c55cd8900b34e9ba4d71eb6eb38",
|
|
197
198
|
"sources/server/file.js": "4ff9c5ff372824a937d4d6782851b0c8ead0c830eb94176e5802bc90fc4ed4a1",
|
|
198
199
|
"sources/server/folder.js": "fc2adff051707db4d4531fcc19f03882ef4e8e64d15c47617b70674c1fe90037",
|
|
@@ -473,7 +474,7 @@
|
|
|
473
474
|
"oda/tools/icons/icons-tree/index.html": "31a0c951ab32300fea3c91bd08ba4cc016736490b56264c12f229c1abc0560c6",
|
|
474
475
|
"oda/tools/icons/index.html": "c3b326a2e0ba3eb6fac26451d4899fe1812649118121649f1d71425ab0dffd36",
|
|
475
476
|
"oda/tools/icons/lib/png/favicon.png": "b0c0d28bb28125dac7e1305bca10569fb055d856261455d336931bc57a4705c1",
|
|
476
|
-
"oda/tools/icons/lib/svg/ai.svg": "
|
|
477
|
+
"oda/tools/icons/lib/svg/ai.svg": "d3f9c65044a4383485120d5d1bd6f6551bfc3933045a5c9965dcf4779ca0c24d",
|
|
477
478
|
"oda/tools/icons/lib/svg/av.svg": "7772d30171d364095266e622dfd2187d2d151b85ad8fa6a48cda3d336f0df0b7",
|
|
478
479
|
"oda/tools/icons/lib/svg/aws.svg": "513d56fa9d0b7505b5085f4325c5868e716098520096aa00704dd5f69b86e9ca",
|
|
479
480
|
"oda/tools/icons/lib/svg/bootstrap.svg": "bd0c9999b629f85d1250ba64519efa5a1bb8b4b7cd9114cec9b28792bc8e2beb",
|
|
@@ -742,12 +743,12 @@
|
|
|
742
743
|
"$server/$folder/$file/handlers/pages/form/file/$handler/file.js": "9c28973816455b2e9cf5ed2d49ba068ecb30ddfe0a4a64f9a44cc7e2bb191640",
|
|
743
744
|
"$server/$folder/$file/readme.md": "918e364aff65c38eda063ad5b30cef761cb64bed7fe3a7e4861d05660ecfe209",
|
|
744
745
|
"$server/$folder/class.js": "db3674dc9551abb5924c63dcac783597dd964d8aa62344d7ce076dabab8c54cb",
|
|
745
|
-
"$server/$folder/handlers/methods/create/$handler/class.js": "
|
|
746
|
+
"$server/$folder/handlers/methods/create/$handler/class.js": "8bcaf5a66d5f19e449a72ee1ac1dfe286964a1d188688bbda4cd0d29ed12852c",
|
|
746
747
|
"$server/$folder/handlers/methods/create/progress.md": "d7a61baaf02afda1f0b65883a809ceed4e59fe5ff01b6471806d3f2b08ef27cf",
|
|
747
748
|
"$server/$folder/handlers/methods/help/$handler/class.js": "ff54bf976cbdc846d7c1b46ff12b111e99a3f4831240a4e420b73c98c0355a5c",
|
|
748
749
|
"$server/$folder/handlers/methods/info/$handler/class.js": "8752efb28abdcfad4e8ce56cfebcd8bb09ec0735cba7b84156d248bfcb0f9db0",
|
|
749
750
|
"$server/$folder/handlers/pages/form/$handler/class.js": "3902d3e1a8742afa2625410f97c68a3afac2559bd3d8f37044338edf7386d4df",
|
|
750
|
-
"$server/$folder/handlers/pages/form/$handler/form.js": "
|
|
751
|
+
"$server/$folder/handlers/pages/form/$handler/form.js": "559e4ccf8951105bdf80ce78897949a4eca8bd0a3e51fccefbcd4c42e8d4db24",
|
|
751
752
|
"$server/$folder/handlers/readme.md": "1167594c32f46323d229098a72e80a9865005c347373fdacef5af69838a0f8eb",
|
|
752
753
|
"$server/$folder/lib/calendar-form/calendar-form.js": "3035cab0a489c891d7dd7ed52ae5c475068b97361a1f7c855d500a0823614d1c",
|
|
753
754
|
"$server/$folder/lib/chat-item/chat-item.js": "f5d99b38eb4e00a46c656a1df98d0c3a2ed23e3b0143853bffbe7b9f03c24a01",
|
|
@@ -764,7 +765,7 @@
|
|
|
764
765
|
"$server/$folder/lib/email/settings.js": "25e13ecf12b84e5fd6bcac955b1e0dc47bf09b72a98776e8ce1e1f01617aef9d",
|
|
765
766
|
"$server/$folder/lib/explorer/explorer.js": "004ccf62ce909a839c169626e0554d3d390d7d4926779c1ae25590aaed009bdb",
|
|
766
767
|
"$server/$folder/lib/file-viewer/file-viewer.js": "b183fd61b72fcc7baba3e44e16ddf3800553596313711a7bc4dd91f3e1e260ab",
|
|
767
|
-
"$server/$folder/lib/icon/icon.js": "
|
|
768
|
+
"$server/$folder/lib/icon/icon.js": "fdb15cf37421b60d3362f3c47a2a759a2faafe194547841718ad448df36462d0",
|
|
768
769
|
"$server/$folder/lib/icon/user/user.js": "481da79de754c244f0151c91d03a503c0452902575e4dc8bc2b3171c0fad3a2e",
|
|
769
770
|
"$server/$folder/lib/item-data-grid/item-data-grid.js": "c9650e7d09dd8a558e5f288da527d74c65267fa563a7006cf86222dc25198b54",
|
|
770
771
|
"$server/$folder/lib/item-data-grid/readme.md": "2a9f5703b83945884992120560baf9187aabde045d55026716579212a5930575",
|
|
@@ -774,7 +775,7 @@
|
|
|
774
775
|
"$server/$folder/lib/menu/progress.md": "f88ee7fde608ec00a9f2459e11b28328c0c6003f1b365b919c3dd9004296c86a",
|
|
775
776
|
"$server/$folder/lib/menu/readme.md": "2fcd2b1b905ac9cd25264da2cef02d53d181e97b9d02c16772770de82b756eba",
|
|
776
777
|
"$server/$folder/lib/messenger-settings/messenger-settings.js": "0e6237d9724ae4fd33327f9a521b26e698d7b40074d39402d1f4812ad2fbe085",
|
|
777
|
-
"$server/$folder/lib/node/node.js": "
|
|
778
|
+
"$server/$folder/lib/node/node.js": "fc865f897cf78d72875ee211a17e1d8b5bd1ccad9b76adcf57551f9e1e328657",
|
|
778
779
|
"$server/$folder/lib/node/progress.md": "eaada60a7d4f72a913369fda6cdad0abb3c8156215eec4d6bd9211f1ccc441ba",
|
|
779
780
|
"$server/$folder/lib/node/readme.md": "ea9b82dc0db4af289b08d2e41399124310cee089cfab5d2107663ee314a23741",
|
|
780
781
|
"$server/$folder/lib/node-explorer/node-explorer.js": "7f30a60186e5aa81d93ceabade522656403066320f3fa439f6a490049270269e",
|
|
@@ -796,7 +797,7 @@
|
|
|
796
797
|
"$server/$folder/lib/tree/link-nodes.js": "e475b4a61d68829d07d5cc57dacfd030c957873429979b40a29a3947805e19af",
|
|
797
798
|
"$server/$folder/lib/tree/progress.md": "4a9a6aafcb044e3cf2048d46e13be7f9afcb1abc6e5c6b0ff17a82e3491e5c08",
|
|
798
799
|
"$server/$folder/lib/tree/readme.md": "b5103d0db4232be33f34d2bcc2de7ba93bcd4632982db223abccc8481b328994",
|
|
799
|
-
"$server/$folder/lib/tree/tree.js": "
|
|
800
|
+
"$server/$folder/lib/tree/tree.js": "3d0ef6d1fea90e99e398e0d9c68d44c96d7e014cee9d6e6bb6760d115ffe4fc5",
|
|
800
801
|
"$server/$folder/readme.md": "94c1e2fd7228a028f0d01fe49bc3e8389308fede3f74ccf80c030ad1dbbc5f86",
|
|
801
802
|
"$server/class.js": "11e5d32e975eea2bee2d023380d1fbe4f789da7904ce1ba15441dda3af3988b8",
|
|
802
803
|
"$server/readme.md": "4dc70978c6705899a01d0c441e73f6c14ec8f265007cf4c177d1d7c7d412b06a",
|
|
@@ -952,40 +953,32 @@
|
|
|
952
953
|
"MODULES/Register/STRUCTS/Банковский счёт/$struct/class.js": "166ffafd1c7d1609b174ae7766e77842e6294c6902baabe787225a2eeb026cce",
|
|
953
954
|
"MODULES/Register/STRUCTS/Единица измерения/$struct/class.js": "dd0982281ed782d23afd80d5985b79aa65c6acbe58dc080f943840ea798000b0",
|
|
954
955
|
"MODULES/Register/STRUCTS/Паспорт/$struct/class.js": "4a50808e4db7741b0384a775177545d71686a680ccda7ef0ec68bf81f9c988b5",
|
|
955
|
-
"MODELS/$ai/$folder/$class/$ai/class.js": "
|
|
956
|
-
"MODELS/$ai/$folder/$class/$ai/handlers/pages/form/trainer/$handler/class.js": "
|
|
957
|
-
"MODELS/$ai/$folder/$class/$ai/handlers/pages/form/trainer/$handler/trainer.js": "
|
|
956
|
+
"MODELS/$ai/$folder/$class/$ai/class.js": "7c18eef4b4ca0fbe195a238a91008755c10dd5ffbc6fb62e18c28a5232b7bf53",
|
|
957
|
+
"MODELS/$ai/$folder/$class/$ai/handlers/pages/form/trainer/$handler/class.js": "fe5ba834156495c28a34acd4b70a6b6b3bdfccb67ec7bf99e92a292afbb66d19",
|
|
958
|
+
"MODELS/$ai/$folder/$class/$ai/handlers/pages/form/trainer/$handler/trainer.js": "4c8098b3d0138b2c0d3b1e4f9039116371ed0893acbb2d36798856bc92f19ad0",
|
|
958
959
|
"MODELS/$ai/$folder/$class/$ai/methods/chat/$method/class.js": "a5859e701c8ea25c627247e6e6ae5d32115ba2f027a5fedea62ed1c7df0110ac",
|
|
959
|
-
"MODELS/$ai/$folder/$class/$provider/class.js": "
|
|
960
|
-
"MODELS/$ai/$folder/$class/$provider/handlers/pages/form/
|
|
961
|
-
"MODELS/$ai/$folder/$class/$provider/handlers/pages/form/
|
|
960
|
+
"MODELS/$ai/$folder/$class/$provider/class.js": "069073501b93a95bb9d77e59ce71e53c7a8bcab2564c391b551f68a2453ac486",
|
|
961
|
+
"MODELS/$ai/$folder/$class/$provider/handlers/pages/form/provider/$handler/class.js": "8d327820cefd696d351ac4fa7998994039e4d57ef7a9f8ae297209e4dd1b0a9e",
|
|
962
|
+
"MODELS/$ai/$folder/$class/$provider/handlers/pages/form/provider/$handler/provider.js": "b9ddf0040a9cd12e0dacd2dd3a61a1f0e62686cc664d02ef446326bc3991f4ce",
|
|
963
|
+
"MODELS/$ai/$folder/$class/$provider/handlers/pages/form/trainer/$handler/class.js": "06b279a1c053deb37dd7401c84df7f9370309b8dfbd35b368ab1bab4f635cb3f",
|
|
964
|
+
"MODELS/$ai/$folder/$class/$provider/handlers/pages/form/trainer/$handler/trainer.js": "9ee518c122246ca0d2820e0177b973e535c840ed900661eb25d0f56690bf42ca",
|
|
962
965
|
"MODELS/$ai/$folder/$class/$provider/readme.md": "d6ceef2010231ab121510c3d3f35630dd7009a069c7723f6673a0e264799b227",
|
|
963
966
|
"MODELS/$ai/class.js": "54e1bbbde88f8b1f272ff7f5cad87243407591748a44719b7ec90ae2b4962de7",
|
|
964
967
|
"MODELS/$ai/readme.md": "90d70305a2c85312282cf67cc468a0f0b417495cb3d5b3d2ca60c6f44b81cb77",
|
|
965
|
-
"MODELS/GigaChat/$provider/$folder/$class/$ai/class.js": "
|
|
966
|
-
"MODELS/GigaChat/$provider/class.js": "
|
|
968
|
+
"MODELS/GigaChat/$provider/$folder/$class/$ai/class.js": "18f26a4811981973cbf5f90584177028c44ce04fe9ecf4b5e546dccdbbd330d8",
|
|
969
|
+
"MODELS/GigaChat/$provider/class.js": "b0307041814ce2435d7fbc6ddea4f03b4640a7633b36d24a5fef6b3ced45190f",
|
|
967
970
|
"MODELS/GigaChat/$provider/readme.md": "e5e1295a5660e25be639859bc22b1077d3c0567179bdccdfd1e6576edf709232",
|
|
968
|
-
"MODELS/GigaChat/GigaChat
|
|
969
|
-
"MODELS/GigaChat/GigaChat
|
|
970
|
-
"MODELS/
|
|
971
|
-
"MODELS/
|
|
972
|
-
"MODELS/
|
|
973
|
-
"MODELS/
|
|
974
|
-
"MODELS/
|
|
975
|
-
"MODELS/
|
|
976
|
-
"MODELS/
|
|
977
|
-
"MODELS/
|
|
978
|
-
"MODELS/
|
|
979
|
-
"MODELS/Halogen/Qwen3.5-2B-NPU/$ai/class.js": "33a8a2766c34f8f09878b3fc48167e0f122a6d34325be890d676a813f1b3bcf4",
|
|
980
|
-
"MODELS/Halogen/Qwen3.8-Flash-Next/$ai/class.js": "a835cffa0cadb44bebbd4ce1d415286278a1d8661b46d763190e233bca35b1fc",
|
|
981
|
-
"MODELS/Local/$provider/$folder/$class/$ai/class.js": "54e2e78ce96be457785787816a6aa97a8dfa1b806652d7094d24afab69805e41",
|
|
982
|
-
"MODELS/Local/$provider/class.js": "fcd222cef6999bb6cc2ab7e332ddafe891f077708baa5f3c765f47fcce78dc82",
|
|
983
|
-
"MODELS/Local/Flux-Image/$ai/class.js": "f3982ea389f2cc649104d11f91d8a30bb0df4594f4327478aa90dfea7202e529",
|
|
984
|
-
"MODELS/Local/Qwen3-0.6B/$ai/class.js": "69eeaa4989493ecbe914e570ba06cf97d5fc7a8fd6630f6b1b7e4323ce79876e",
|
|
985
|
-
"MODELS/Local/Qwen3-14B/$ai/class.js": "55abd8abbdbb4b183c9daf940405ad3e5ed03a13b16dcd45e75adc438468e51e",
|
|
986
|
-
"MODELS/Local/Qwen3-30B-A3B/$ai/class.js": "3d079091c0e555cc8d830e43625673d72607441f27a63d329c32145f8b30af3d",
|
|
987
|
-
"MODELS/Local/Qwen3-Embedding/$ai/class.js": "cca23ada32a19cecccdcedfddbcffa9bc8124133be3c7e488b5fdd9c5262d991",
|
|
988
|
-
"MODELS/Local/Qwen3-Voice/$ai/class.js": "5dd433b1804a493352190d3d1a33dfd290cadbe32e0d1aeba0a8eedfbaf9427b",
|
|
971
|
+
"MODELS/GigaChat/GigaChat 2 Lite/$ai/class.js": "54f380e3d32a517004a56f09fa51ab4019c9f4ba1e44ded69245db326b047bbb",
|
|
972
|
+
"MODELS/GigaChat/GigaChat 2 Max/$ai/class.js": "20d110d2c6a16ba78be667f798220f82802f1bc171c4a56d49bfe78c037843b5",
|
|
973
|
+
"MODELS/GigaChat/GigaChat 2 Pro/$ai/class.js": "c4f4e712ec6053b68cf4a789e6a82d044af7cb4f2bbae6ccc6ef0b1fe388dd56",
|
|
974
|
+
"MODELS/GigaChat/GigaChat Embeddings/$ai/class.js": "f68c9ca4f7aefa287a34ebfd8522866ba3b10ad500ee01727cae8687e9858b64",
|
|
975
|
+
"MODELS/Local/$provider/$folder/$class/$ai/class.js": "15862b03c00e3a0fbde31fdcbe173c3c782dbe28dc9e97d731dc1440da5ba448",
|
|
976
|
+
"MODELS/Local/$provider/class.js": "3b84fc08067fe682b012a091906b008eb88ba4f524423c4fa4cdb1046e6e56f0",
|
|
977
|
+
"MODELS/MTS-AI/$provider/$folder/$class/$ai/class.js": "cbb38faf8f50df3ca48aba16e5b71078e1280aa756dc61a9a510eb14c8269d55",
|
|
978
|
+
"MODELS/MTS-AI/$provider/class.js": "024d943c3c5d45e83a9a2022311033ed2bb3832da25b77e972d6fa7bf2250ff9",
|
|
979
|
+
"MODELS/MTS-AI/Cotype Lite/$ai/class.js": "7f7e7e94a0fc7eea1397fa6f0ed3926997872fff410a7b8051a637fe6d8c9693",
|
|
980
|
+
"MODELS/MTS-AI/Cotype Pro 2/$ai/class.js": "b4af5218c13fd09a6a60696438dda43f09994ea47e92241e44b3061b6336a90a",
|
|
981
|
+
"MODELS/MTS-AI/Cotype Vision/$ai/class.js": "4f514999e9db7cc9d6b49706d52f6736c0477b68e7f44d7f8fce7edb025ff500",
|
|
989
982
|
"MODELS/odant/$provider/$folder/$class/$ai/class.js": "f12326995202d1129fa300f8b2e902a7504f4612a1bdd2dcfe2931d860dbd46d",
|
|
990
983
|
"MODELS/odant/$provider/class.js": "277c7f5ad5c9571d7fe745d6903e8d3dcd9ff3793ca7697cce252d47310aff7f",
|
|
991
984
|
"MODELS/odant/$provider/readme.md": "5e33b6707fc63d244ed94387bd8913c54125a982631d9c98b7a07d22a155ff7d",
|
|
@@ -994,6 +987,21 @@
|
|
|
994
987
|
"MODELS/odant/Qwen3.8 27b/$ai/class.js": "a631d27b1fd21e6040fe384492f1d4420ed967ef8de7d2647a4036a6e28308b3",
|
|
995
988
|
"MODELS/odant/Z-Image-Turbo/$ai/class.js": "050a44f8c8ec40d30baa942c975fcce2c14038f2b49e51ac99bb1a7ef4880fe9",
|
|
996
989
|
"MODELS/odant/Z-Image-Turbo/$ai/readme.md": "6908ccb685c46c87e755a59fad9a5432f291157387ef6ce5ffda3946d992907e",
|
|
990
|
+
"MODELS/T-Bank/$provider/$folder/$class/$ai/class.js": "711884c4ce8fb419e0db41f939fc6666feb5fea0b9ef9056430f7f4f7a65f83f",
|
|
991
|
+
"MODELS/T-Bank/$provider/class.js": "afa9f0b7d9a81694b9109d6551ccf994a22c05b205436514d7f02870950c27f6",
|
|
992
|
+
"MODELS/T-Bank/T-Lite 2.0/$ai/class.js": "0e0f27a7a5118dec51f89fc1ba1a1bf97c05eb58036726e4f2f8925eaea14ee6",
|
|
993
|
+
"MODELS/T-Bank/T-Pro 2.0/$ai/class.js": "6e9ce6e7c36f05a0ef3f743481d4da87ed07d430a3d7b269b94ec7501cf6e5e3",
|
|
994
|
+
"MODELS/T-Bank/T-VoiceKit ASR/$ai/class.js": "e7e698c99ef85942d50f3f011e545f0b374048318a28635144e6164dcca919f5",
|
|
995
|
+
"MODELS/T-Bank/T-VoiceKit TTS/$ai/class.js": "77960623abea5bf933c3f556979a0bc48744055647bd10e028fc0ed68ab2677c",
|
|
996
|
+
"MODELS/Yandex/$provider/$folder/$class/$ai/class.js": "1b4baa0450479b9989cb421b7495a6ab0b20cdd76e956974192d6c729749d3ae",
|
|
997
|
+
"MODELS/Yandex/$provider/class.js": "4e631d75c94d26703abfd91b7abeea940edc70d36b171629393e2bfae5c88803",
|
|
998
|
+
"MODELS/Yandex/Alice AI (YandexGPT 5 Pro)/$ai/class.js": "1c82582931793f817d5bc24bd9bae603fe7f711c65f768600f20e6fa0e658acd",
|
|
999
|
+
"MODELS/Yandex/Yandex Embeddings/$ai/class.js": "9ab00d13b015a8948a83e66ff6499b4a6979218618b46c986f7c43f8b48b07c3",
|
|
1000
|
+
"MODELS/Yandex/Yandex SpeechKit ASR/$ai/class.js": "50a5db359de6e0843258fcdfb452c40e75c0a544e151ed29358a7b6f70a54891",
|
|
1001
|
+
"MODELS/Yandex/Yandex SpeechKit TTS/$ai/class.js": "81394db5d4de46e83e504c5a5b0ed26f5d87c44931f14303850d84fb0e9ef9eb",
|
|
1002
|
+
"MODELS/Yandex/YandexART/$ai/class.js": "46b4c897128192a9fe2b31728780b1171c0e9d4b52c86dff708c03813cf4df8d",
|
|
1003
|
+
"MODELS/Yandex/YandexGPT 5 Lite/$ai/class.js": "d50bd9ecbf4080c7b05a97a93c34cf16f65611278b61e5ba33964c41e93a734f",
|
|
1004
|
+
"MODELS/Yandex/YandexGPT Reasoning/$ai/class.js": "f96ec889c07d9b676d329eeed373a8603002682cfd7d4225896d13a55126e31c",
|
|
997
1005
|
"SERVICES/$service/$folder/$storage/$service/class.js": "b00df43ea83a31b243fc8c899b8a6d949e47849c48dc03241cb78b9b9fda1f26",
|
|
998
1006
|
"SERVICES/$service/$folder/$storage/$service/handlers/pages/form/mcp/$handler/class.js": "f59282ed99bd8d1483f9c6162a635f326c4224d7ffec9daa64dc2c22305034a5",
|
|
999
1007
|
"SERVICES/$service/$folder/$storage/$service/handlers/pages/form/mcp/$handler/mcp.js": "592e046e3e125e703a9c3373be1316dc4fd07a15397c86d04e3f195e8e7e6813",
|
|
@@ -14,12 +14,15 @@ export default {
|
|
|
14
14
|
async execute(filter) {
|
|
15
15
|
const $context = await this.$item.$context;
|
|
16
16
|
const isOrgsRoot = $context?.path === '/ORGANIZATIONS';
|
|
17
|
+
const isModelsRoot = $context?.path === '/MODELS';
|
|
17
18
|
const props = {
|
|
18
19
|
$item: $context,
|
|
19
|
-
name: isOrgsRoot ? 'Моё предприятие' : 'new',
|
|
20
|
+
name: isOrgsRoot ? 'Моё предприятие' : (isModelsRoot ? 'OpenAI' : 'new'),
|
|
20
21
|
message: isOrgsRoot
|
|
21
22
|
? `Введите название организации и выберите уровень наполнения`
|
|
22
|
-
:
|
|
23
|
+
: isModelsRoot
|
|
24
|
+
? `Выберите шаблон провайдера ИИ или укажите свой сервер`
|
|
25
|
+
: `Введите имя создаваемого item'а и выберите тип`,
|
|
23
26
|
filter,
|
|
24
27
|
'name-changed': (e) => {
|
|
25
28
|
e.target.parentElement.enable = !e.target.validity
|
|
@@ -71,6 +74,21 @@ export default {
|
|
|
71
74
|
if (Array.isArray(el.selectedModules))
|
|
72
75
|
createParams.modules = el.selectedModules.join(',');
|
|
73
76
|
}
|
|
77
|
+
else if (type === '$provider') {
|
|
78
|
+
if (el.selectedProviderPreset)
|
|
79
|
+
createParams.providerPreset = el.selectedProviderPreset;
|
|
80
|
+
if (el.providerBaseUrl)
|
|
81
|
+
createParams.baseUrl = el.providerBaseUrl;
|
|
82
|
+
if (el.providerProtocol)
|
|
83
|
+
createParams.protocol = el.providerProtocol;
|
|
84
|
+
if (el.providerIcon)
|
|
85
|
+
createParams.icon = el.providerIcon;
|
|
86
|
+
if (el.providerApiKey)
|
|
87
|
+
createParams.apiKey = el.providerApiKey;
|
|
88
|
+
if (el.providerFolderId)
|
|
89
|
+
createParams.folderId = el.providerFolderId;
|
|
90
|
+
createParams.includeDefaultModels = el.providerIncludeModels !== false;
|
|
91
|
+
}
|
|
74
92
|
return owner.create(createParams);
|
|
75
93
|
}
|
|
76
94
|
if (type === '$folder') {
|
|
@@ -364,6 +382,31 @@ ODA({is: 'input-name-type', imports: '/oda//icon.js, /oda//tree',
|
|
|
364
382
|
</div>
|
|
365
383
|
</div>
|
|
366
384
|
</fieldset>
|
|
385
|
+
<fieldset ~if="showProviderPicker" class="modules-box">
|
|
386
|
+
<legend>Шаблоны провайдеров ИИ:</legend>
|
|
387
|
+
<div class="horizontal" style="flex-wrap:wrap;gap:6px;">
|
|
388
|
+
<div ~for="providerPresets" class="mod-chip" :active="selectedProviderPreset === $for.item.id" @tap="_pickProviderPreset($for.item)">
|
|
389
|
+
<oda-icon :icon="$for.item.icon || 'carbon:api'" icon-size="16"></oda-icon>
|
|
390
|
+
<span>{{$for.item.label || $for.item.id}}</span>
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
393
|
+
<fieldset style="margin-top:4px;">
|
|
394
|
+
<legend>API Key / Token (опционально — сохранится в #secret):</legend>
|
|
395
|
+
<input type="password" :value="providerApiKey" placeholder="sk-... (можно ввести сейчас или позже)" @input="providerApiKey = $this.value">
|
|
396
|
+
</fieldset>
|
|
397
|
+
<fieldset ~if="selectedProviderPreset === 'Yandex'" style="margin-top:4px;">
|
|
398
|
+
<legend>Folder ID (каталог Yandex Cloud):</legend>
|
|
399
|
+
<input :value="providerFolderId" placeholder="b1g..." @input="providerFolderId = $this.value">
|
|
400
|
+
</fieldset>
|
|
401
|
+
<fieldset style="margin-top:4px;">
|
|
402
|
+
<legend>Base URL:</legend>
|
|
403
|
+
<input :value="providerBaseUrl" placeholder="https://.../v1/chat/completions" @input="providerBaseUrl = $this.value">
|
|
404
|
+
</fieldset>
|
|
405
|
+
<label class="horizontal" style="align-items:center;gap:6px;cursor:pointer;font-size:small;margin-top:2px;">
|
|
406
|
+
<input type="checkbox" :checked="providerIncludeModels" @change="providerIncludeModels = $event.target.checked" style="flex:0 0 auto;">
|
|
407
|
+
<span>Сразу создать типовой набор моделей этого провайдера</span>
|
|
408
|
+
</label>
|
|
409
|
+
</fieldset>
|
|
367
410
|
<div ~if="_dirty && validity" ~text="validity" class="validity"></div>
|
|
368
411
|
`,
|
|
369
412
|
message: '',
|
|
@@ -377,10 +420,22 @@ ODA({is: 'input-name-type', imports: '/oda//icon.js, /oda//tree',
|
|
|
377
420
|
{ id: 'demo', label: '3. С демоданными', desc: 'Типовая конфигурация + контрагенты, номенклатура, сотрудники и проведённые операции' },
|
|
378
421
|
],
|
|
379
422
|
moduleLabel: '',
|
|
423
|
+
providerPresets: [],
|
|
424
|
+
selectedProviderPreset: 'OpenAI',
|
|
425
|
+
providerApiKey: '',
|
|
426
|
+
providerFolderId: '',
|
|
427
|
+
providerBaseUrl: 'https://api.openai.com/v1/chat/completions',
|
|
428
|
+
providerProtocol: 'openai',
|
|
429
|
+
providerIcon: 'ai:chatgpt',
|
|
430
|
+
providerIncludeModels: true,
|
|
380
431
|
get isInOrganizations() {
|
|
381
432
|
const p = String(this.$item?.path || '');
|
|
382
433
|
return p === '/ORGANIZATIONS' || p.startsWith('/ORGANIZATIONS/');
|
|
383
434
|
},
|
|
435
|
+
get isInModels() {
|
|
436
|
+
const p = String(this.$item?.path || '');
|
|
437
|
+
return p === '/MODELS' || p.startsWith('/MODELS/');
|
|
438
|
+
},
|
|
384
439
|
get showBasePreset() {
|
|
385
440
|
return this.isInOrganizations && this.type === '$base';
|
|
386
441
|
},
|
|
@@ -390,6 +445,20 @@ ODA({is: 'input-name-type', imports: '/oda//icon.js, /oda//tree',
|
|
|
390
445
|
get showModulePicker() {
|
|
391
446
|
return this.isInOrganizations && this.type === '$module' && this.availableModules?.length > 0;
|
|
392
447
|
},
|
|
448
|
+
get showProviderPicker() {
|
|
449
|
+
return this.isInModels && this.type === '$provider' && this.providerPresets?.length > 0;
|
|
450
|
+
},
|
|
451
|
+
_pickProviderPreset(preset) {
|
|
452
|
+
if (!preset)
|
|
453
|
+
return;
|
|
454
|
+
this._dirty = true;
|
|
455
|
+
this.selectedProviderPreset = preset.id;
|
|
456
|
+
this.name = preset.id;
|
|
457
|
+
this.moduleLabel = preset.label || preset.id;
|
|
458
|
+
this.providerBaseUrl = preset.baseUrl || '';
|
|
459
|
+
this.providerProtocol = preset.protocol || 'openai';
|
|
460
|
+
this.providerIcon = preset.icon || 'carbon:api';
|
|
461
|
+
},
|
|
393
462
|
_selectPreset(id) {
|
|
394
463
|
this.basePreset = id;
|
|
395
464
|
if (id === 'empty')
|
|
@@ -611,6 +680,18 @@ ODA({is: 'input-name-type', imports: '/oda//icon.js, /oda//tree',
|
|
|
611
680
|
}
|
|
612
681
|
catch { /* /MODULES недоступен */ }
|
|
613
682
|
}
|
|
683
|
+
if (this.isInModels) {
|
|
684
|
+
try {
|
|
685
|
+
const res = await this.$item?.fetch?.('provider_presets');
|
|
686
|
+
if (Array.isArray(res?.items) && res.items.length) {
|
|
687
|
+
this.providerPresets = res.items;
|
|
688
|
+
const def = res.items.find(p => p.id === 'OpenAI') || res.items[0];
|
|
689
|
+
if (def && (this.name === 'new' || this.name === 'OpenAI'))
|
|
690
|
+
this._pickProviderPreset(def);
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
catch { /* ignore */ }
|
|
694
|
+
}
|
|
614
695
|
this.async(() => {
|
|
615
696
|
this.$('#nameInput')?.focus();
|
|
616
697
|
}, 300)
|
|
@@ -614,7 +614,8 @@ ODA({is: 'work-form',
|
|
|
614
614
|
staff: 'Поясни текущие назначения руководителя (BOSS), структуру рабочих мест (ROLES), использование USERS/GUESTS и привязанные ссылки LINKS.',
|
|
615
615
|
builder: 'Поясни схему полей (METADATA.FIELDS / STATIC / ANALYTICS / OVERLAY) и трёхосевое наследование класса.',
|
|
616
616
|
database: 'Поясни состав таблиц изолированной SQLite-базы данных и назначение текущей таблицы.',
|
|
617
|
-
trainer: 'Поясни
|
|
617
|
+
trainer: 'Поясни доступные модели ИИ, режим работы встроенного сервера ИИ, установку моделей в 1 клик и шаги дообучения.',
|
|
618
|
+
provider: 'Поясни настройку API-ключа провайдера ИИ в #secret, проверку связи и подключение моделей в 1 клик.',
|
|
618
619
|
mcp: 'Поясни подключённые MCP-серверы в /SERVICES, способы добавления новых MCP (через стандартный JSON mcpServers или пресеты) и работу с внешними навыками SKILL.md (включая @grill-me).',
|
|
619
620
|
};
|
|
620
621
|
const tailHint = viewHints[viewId] || 'Расскажи, что здесь отображается, какие данные сейчас представлены и какие действия доступны.';
|
|
@@ -9,6 +9,10 @@ export default {
|
|
|
9
9
|
:host([is-inherit]), :host([is-inherit]) .icon {
|
|
10
10
|
opacity: .7;
|
|
11
11
|
}
|
|
12
|
+
:host([ai-inactive]) .icon {
|
|
13
|
+
opacity: .42;
|
|
14
|
+
filter: grayscale(.65);
|
|
15
|
+
}
|
|
12
16
|
.icon {
|
|
13
17
|
cursor: pointer;
|
|
14
18
|
border-radius: {{isUser ? '50%' : '4px'}};
|
|
@@ -104,6 +108,16 @@ export default {
|
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
},
|
|
111
|
+
aiInactive: {
|
|
112
|
+
$attr: true,
|
|
113
|
+
$type: Boolean,
|
|
114
|
+
get() {
|
|
115
|
+
const it = this.$item;
|
|
116
|
+
if (!it || it.id === 'MODELS' || (it.type !== '$ai' && it.type !== '$provider'))
|
|
117
|
+
return false;
|
|
118
|
+
return (it.aiActive ?? it.DATA?.aiActive) === false;
|
|
119
|
+
}
|
|
120
|
+
},
|
|
107
121
|
isUser: {
|
|
108
122
|
$attr: true,
|
|
109
123
|
$def: false,
|
|
@@ -27,6 +27,25 @@ export default {
|
|
|
27
27
|
color: light-dark(#5b21b6, #c4b5fd);
|
|
28
28
|
font-style: italic;
|
|
29
29
|
}
|
|
30
|
+
label.ai-inactive{
|
|
31
|
+
opacity: 0.48;
|
|
32
|
+
}
|
|
33
|
+
.ai-dot{
|
|
34
|
+
@apply --no-flex;
|
|
35
|
+
width: 7px;
|
|
36
|
+
height: 7px;
|
|
37
|
+
border-radius: 50%;
|
|
38
|
+
margin: 0 4px 0 2px;
|
|
39
|
+
align-self: center;
|
|
40
|
+
}
|
|
41
|
+
.ai-dot.active{
|
|
42
|
+
background: #22c55e;
|
|
43
|
+
box-shadow: 0 0 4px rgba(34, 197, 94, 0.55);
|
|
44
|
+
}
|
|
45
|
+
.ai-dot.inactive{
|
|
46
|
+
background: light-dark(#94a3b8, #52525b);
|
|
47
|
+
opacity: 0.65;
|
|
48
|
+
}
|
|
30
49
|
.virt-badge{
|
|
31
50
|
@apply --no-flex;
|
|
32
51
|
font-size: 10px;
|
|
@@ -87,7 +106,8 @@ export default {
|
|
|
87
106
|
<div horizontal flex style="align-items: center; min-width: 0; width: 100%;">
|
|
88
107
|
<div vertical flex style="min-width: 0;">
|
|
89
108
|
<div horizontal flex style="min-width: 0;">
|
|
90
|
-
<label flex style="min-width: 0;" :bold="$item instanceof CORE.$class && !isLink" ~class="{link: isLink, virtual: isVirtual}" :title="
|
|
109
|
+
<label flex style="min-width: 0;" :bold="$item instanceof CORE.$class && !isLink" ~class="{link: isLink, virtual: isVirtual, 'ai-inactive': isAiInactive}" :title="nodeTooltip" ~show="!hideLabel">{{label}}</label>
|
|
110
|
+
<span class="ai-dot" ~if="isAiNode" ~class="isAiActive ? 'active' : 'inactive'" :title="aiStatusReason"></span>
|
|
91
111
|
<span class="virt-badge" ~if="isVirtual" title="Виртуальный справочник">вирт.</span>
|
|
92
112
|
<span class="history-time" ~if="historyTime" ~show="!hideLabel">{{historyTime}}</span>
|
|
93
113
|
</div>
|
|
@@ -111,6 +131,36 @@ export default {
|
|
|
111
131
|
get isVirtual() {
|
|
112
132
|
return this.$item?.type === '$virtual';
|
|
113
133
|
},
|
|
134
|
+
get isAiNode() {
|
|
135
|
+
const it = this.$item;
|
|
136
|
+
if (!it || it.id === 'MODELS')
|
|
137
|
+
return false;
|
|
138
|
+
return it.type === '$ai' || it.type === '$provider';
|
|
139
|
+
},
|
|
140
|
+
get isAiActive() {
|
|
141
|
+
if (!this.isAiNode)
|
|
142
|
+
return false;
|
|
143
|
+
const v = this.$item?.aiActive ?? this.$item?.DATA?.aiActive;
|
|
144
|
+
return v === true;
|
|
145
|
+
},
|
|
146
|
+
get isAiInactive() {
|
|
147
|
+
if (!this.isAiNode)
|
|
148
|
+
return false;
|
|
149
|
+
const v = this.$item?.aiActive ?? this.$item?.DATA?.aiActive;
|
|
150
|
+
return v === false;
|
|
151
|
+
},
|
|
152
|
+
get aiStatusReason() {
|
|
153
|
+
if (!this.isAiNode)
|
|
154
|
+
return '';
|
|
155
|
+
return String(this.$item?.aiStatusReason || this.$item?.DATA?.aiStatusReason || (this.isAiActive ? 'Активна' : 'Неактивна'));
|
|
156
|
+
},
|
|
157
|
+
get nodeTooltip() {
|
|
158
|
+
if (this.isLink)
|
|
159
|
+
return this.$item?.path;
|
|
160
|
+
if (this.isAiNode && this.aiStatusReason)
|
|
161
|
+
return `${this.label} — ${this.aiStatusReason}`;
|
|
162
|
+
return this.label;
|
|
163
|
+
},
|
|
114
164
|
get isStructureLike() {
|
|
115
165
|
const it = this.$item;
|
|
116
166
|
if (!it || this.isLink)
|
|
@@ -36,10 +36,14 @@ function nodeStateKey(it) {
|
|
|
36
36
|
function isChatModelNode(f) {
|
|
37
37
|
if (!f)
|
|
38
38
|
return false;
|
|
39
|
-
if (f.
|
|
39
|
+
if (f.id === 'MODELS')
|
|
40
40
|
return true;
|
|
41
|
+
if (f.type === '$provider')
|
|
42
|
+
return (f.aiActive ?? f.DATA?.aiActive) !== false;
|
|
41
43
|
if (f.type && f.type !== '$ai')
|
|
42
44
|
return true;
|
|
45
|
+
if ((f.aiActive ?? f.DATA?.aiActive) === false)
|
|
46
|
+
return false;
|
|
43
47
|
const mod = String(f.DATA?.modality || '').toLowerCase();
|
|
44
48
|
if (['image', 'audio', 'embedding', 'video', 'voice', 'asr', 'tts', 'stt'].includes(mod))
|
|
45
49
|
return false;
|
package/.secretsignore
CHANGED
|
@@ -24,6 +24,10 @@ oda/components/**
|
|
|
24
24
|
tests/helpers/fake-docker.js
|
|
25
25
|
tests/ui/task-dock.html
|
|
26
26
|
tests/check-secrets.test.js
|
|
27
|
+
tests/halogen-provider.test.js
|
|
28
|
+
tests/license-and-deploy.test.js
|
|
29
|
+
tests/notify-channels.test.js
|
|
30
|
+
license-server/src/server.js
|
|
27
31
|
|
|
28
32
|
# Экспортированный дамп сессии OpenCode для переноса между рабочими станциями
|
|
29
33
|
current_session.json
|
|
@@ -22,7 +22,7 @@ const REMOTE_BODY_MAX = 32 * 1024 * 1024; // R7 (8.35): бинарный отв
|
|
|
22
22
|
|
|
23
23
|
export default {
|
|
24
24
|
icon: 'carbon:machine-learning-model',
|
|
25
|
-
form: '
|
|
25
|
+
form: 'trainer',
|
|
26
26
|
/** карточка модели для клиента: попадает в info, читается баром и usage-панелью */
|
|
27
27
|
$public: {
|
|
28
28
|
maxTokens: 4096, // лимит контекста (usage / info)
|
|
@@ -175,6 +175,11 @@ export default {
|
|
|
175
175
|
temperature: options.temperature ?? 0.7,
|
|
176
176
|
stream: true,
|
|
177
177
|
};
|
|
178
|
+
if (ai.protocol === 'yandex' && body.model && !/^(gpt|emb|ds):\/\//i.test(body.model)) {
|
|
179
|
+
const folderId = await resolveFolderId(ai);
|
|
180
|
+
if (folderId)
|
|
181
|
+
body.model = `gpt://${folderId}/${body.model}`;
|
|
182
|
+
}
|
|
178
183
|
const cap = Number(options.maxOutput);
|
|
179
184
|
if (Number.isFinite(cap) && cap > 0)
|
|
180
185
|
body.max_tokens = cap;
|
|
@@ -610,8 +615,14 @@ export default {
|
|
|
610
615
|
const input = params.input ?? params.text ?? params.post ?? '';
|
|
611
616
|
const origin = speechOrigin(params, ai, 'embed');
|
|
612
617
|
const headers = await getAuthHeaders(ai);
|
|
618
|
+
let finalModel = tag;
|
|
619
|
+
if (ai.protocol === 'yandex' && finalModel && !/^(gpt|emb):\/\//i.test(finalModel)) {
|
|
620
|
+
const folderId = await resolveFolderId(ai);
|
|
621
|
+
if (folderId)
|
|
622
|
+
finalModel = `emb://${folderId}/${finalModel}`;
|
|
623
|
+
}
|
|
613
624
|
const body = {
|
|
614
|
-
model:
|
|
625
|
+
model: finalModel,
|
|
615
626
|
input: Array.isArray(input) ? input : [String(input)],
|
|
616
627
|
...(params.dimensions ? { dimensions: Number(params.dimensions) } : {}),
|
|
617
628
|
...(params.encoding_format ? { encoding_format: String(params.encoding_format) } : {}),
|
|
@@ -695,7 +706,10 @@ export default {
|
|
|
695
706
|
|
|
696
707
|
function isHalogenModel(ai) {
|
|
697
708
|
const p = String(ai?.path || ai?.short || '');
|
|
698
|
-
|
|
709
|
+
const b = String(ai?.baseUrl || ai?.DATA?.baseUrl || '');
|
|
710
|
+
return ai?.protocol === 'halogen'
|
|
711
|
+
|| p.startsWith('/MODELS/Halogen/')
|
|
712
|
+
|| (p.startsWith('/MODELS/Local/') && b.includes(':8731'));
|
|
699
713
|
}
|
|
700
714
|
|
|
701
715
|
function speechOrigin(params, ai, who) {
|
|
@@ -1487,6 +1501,25 @@ async function getAuthHeaders(ai) {
|
|
|
1487
1501
|
headers['anthropic-beta'] = String(ai.anthropicBeta);
|
|
1488
1502
|
break;
|
|
1489
1503
|
}
|
|
1504
|
+
case 'yandex': {
|
|
1505
|
+
let key = '';
|
|
1506
|
+
try {
|
|
1507
|
+
key = await resolveKey(ai, ai.apiKey || 'secret:yandex.json');
|
|
1508
|
+
}
|
|
1509
|
+
catch (e) {
|
|
1510
|
+
if (!process.env.YANDEX_API_KEY)
|
|
1511
|
+
throw e;
|
|
1512
|
+
}
|
|
1513
|
+
if (!key)
|
|
1514
|
+
key = String(process.env.YANDEX_API_KEY || '').trim();
|
|
1515
|
+
if (!key)
|
|
1516
|
+
throw new Error('Yandex AI: не задан API-ключ — откройте /MODELS/Yandex для настройки ключа или задайте YANDEX_API_KEY');
|
|
1517
|
+
headers['Authorization'] = key.startsWith('t1.') ? ('Bearer ' + key) : ('Api-Key ' + key);
|
|
1518
|
+
const folderId = await resolveFolderId(ai);
|
|
1519
|
+
if (folderId)
|
|
1520
|
+
headers['x-folder-id'] = folderId;
|
|
1521
|
+
break;
|
|
1522
|
+
}
|
|
1490
1523
|
case 'openai':
|
|
1491
1524
|
default: {
|
|
1492
1525
|
const key = await resolveKey(ai, ai.apiKey);
|
|
@@ -1497,6 +1530,28 @@ async function getAuthHeaders(ai) {
|
|
|
1497
1530
|
return headers;
|
|
1498
1531
|
}
|
|
1499
1532
|
|
|
1533
|
+
async function resolveFolderId(ai) {
|
|
1534
|
+
const raw = String(ai?.folderId ?? ai?.DATA?.folderId ?? '').trim();
|
|
1535
|
+
if (raw && !/^secret:/i.test(raw) && !/^env:/i.test(raw))
|
|
1536
|
+
return raw;
|
|
1537
|
+
if (/^env:/i.test(raw))
|
|
1538
|
+
return String(process.env[raw.slice(4).trim()] || '').trim();
|
|
1539
|
+
const filename = /^secret:/i.test(raw) ? raw.slice(7).trim() : 'yandex.json';
|
|
1540
|
+
let cur = ai;
|
|
1541
|
+
for (let i = 0; i < 6 && cur; i++) {
|
|
1542
|
+
if (typeof cur.read_secret === 'function') {
|
|
1543
|
+
try {
|
|
1544
|
+
const data = await cur.read_secret({ filename });
|
|
1545
|
+
if (data?.folderId)
|
|
1546
|
+
return String(data.folderId).trim();
|
|
1547
|
+
}
|
|
1548
|
+
catch { /* выше по дереву */ }
|
|
1549
|
+
}
|
|
1550
|
+
cur = cur.$parent ?? cur.parent;
|
|
1551
|
+
}
|
|
1552
|
+
return String(process.env.YANDEX_FOLDER_ID || '').trim();
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1500
1555
|
/**
|
|
1501
1556
|
* Значение ключа: литерал | `env:ИМЯ` (process.env) | `secret:ФАЙЛ` (#secret модели,
|
|
1502
1557
|
* затем вверх по родителям — провайдер, MODELS). В файле секрета — value|apiKey|token|key.
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
/** Мета хендлера form/trainer
|
|
1
|
+
/** Мета хендлера form/trainer (Модели ИИ — карточка модели $ai). */
|
|
2
2
|
export default {
|
|
3
|
-
icon: 'carbon:
|
|
4
|
-
label: '
|
|
3
|
+
icon: 'carbon:chip',
|
|
4
|
+
label: 'Модели ИИ',
|
|
5
5
|
roles: ['BOSS'],
|
|
6
6
|
order: 1,
|
|
7
7
|
allowUse($context) {
|
|
8
8
|
const p = String($context?.path || $context?.short || '');
|
|
9
|
-
|
|
9
|
+
if (!p || p === '/MODELS')
|
|
10
|
+
return false;
|
|
11
|
+
return $context?.type === '$ai';
|
|
10
12
|
},
|
|
11
13
|
}
|