odant-work 1.0.15 → 1.0.16

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.
Files changed (78) hide show
  1. package/#system/package-manifest.json +51 -43
  2. package/$server/$folder/handlers/methods/create/$handler/class.js +83 -2
  3. package/$server/$folder/lib/icon/icon.js +14 -0
  4. package/$server/$folder/lib/node/node.js +51 -1
  5. package/$server/$folder/lib/tree/tree.js +5 -1
  6. package/.secretsignore +4 -0
  7. package/MODELS/$ai/$folder/$class/$ai/class.js +57 -2
  8. package/MODELS/$ai/$folder/$class/$provider/class.js +1 -1
  9. package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/provider/$handler/class.js +13 -0
  10. package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/provider/$handler/provider.js +479 -0
  11. package/MODELS/$ai/$folder/$class/$provider/handlers/pages/form/trainer/$handler/trainer.js +3 -3
  12. package/MODELS/GigaChat/$provider/$folder/$class/$ai/class.js +10 -20
  13. package/MODELS/GigaChat/$provider/class.js +10 -7
  14. package/MODELS/GigaChat/GigaChat 2 Lite/$ai/class.js +15 -0
  15. package/MODELS/GigaChat/GigaChat 2 Max/$ai/class.js +16 -0
  16. package/MODELS/GigaChat/GigaChat 2 Pro/$ai/class.js +15 -0
  17. package/MODELS/GigaChat/GigaChat Embeddings/$ai/class.js +13 -0
  18. package/MODELS/Local/$provider/$folder/$class/$ai/class.js +3 -3
  19. package/MODELS/Local/$provider/class.js +7 -3
  20. package/MODELS/MTS-AI/$provider/$folder/$class/$ai/class.js +8 -0
  21. package/MODELS/MTS-AI/$provider/class.js +8 -0
  22. package/MODELS/MTS-AI/Cotype Lite/$ai/class.js +15 -0
  23. package/MODELS/MTS-AI/Cotype Pro 2/$ai/class.js +15 -0
  24. package/MODELS/MTS-AI/Cotype Vision/$ai/class.js +14 -0
  25. package/MODELS/T-Bank/$provider/$folder/$class/$ai/class.js +8 -0
  26. package/MODELS/T-Bank/$provider/class.js +8 -0
  27. package/MODELS/T-Bank/T-Lite 2.0/$ai/class.js +15 -0
  28. package/MODELS/T-Bank/T-Pro 2.0/$ai/class.js +16 -0
  29. package/MODELS/T-Bank/T-VoiceKit ASR/$ai/class.js +13 -0
  30. package/MODELS/T-Bank/T-VoiceKit TTS/$ai/class.js +13 -0
  31. package/MODELS/Yandex/$provider/$folder/$class/$ai/class.js +9 -0
  32. package/MODELS/Yandex/$provider/class.js +9 -0
  33. package/MODELS/Yandex/Alice AI (YandexGPT 5 Pro)/$ai/class.js +15 -0
  34. package/MODELS/Yandex/Yandex Embeddings/$ai/class.js +13 -0
  35. package/MODELS/Yandex/Yandex SpeechKit ASR/$ai/class.js +13 -0
  36. package/MODELS/Yandex/Yandex SpeechKit TTS/$ai/class.js +13 -0
  37. package/MODELS/Yandex/YandexART/$ai/class.js +13 -0
  38. package/MODELS/Yandex/YandexGPT 5 Lite/$ai/class.js +15 -0
  39. package/MODELS/Yandex/YandexGPT Reasoning/$ai/class.js +22 -0
  40. package/oda/tools/icons/lib/svg/ai.svg +20 -0
  41. package/package.json +1 -1
  42. package/scripts/check-ignored-code.mjs +3 -0
  43. package/scripts/check-secrets.mjs +1 -1
  44. package/sources/data/progress.md +14 -0
  45. package/sources/host/watch.js +13 -2
  46. package/sources/modules/agent/index.js +23 -2
  47. package/sources/modules/trainer/halogen.js +128 -29
  48. package/sources/modules/trainer/huggingface.js +11 -5
  49. package/sources/modules/trainer/index.js +135 -2
  50. package/sources/modules/trainer/providers.js +1213 -0
  51. package/sources/server/class.js +55 -3
  52. package/MODELS/GigaChat/GigaChat Light/$ai/class.js +0 -15
  53. package/MODELS/GigaChat/GigaChat Pro/$ai/class.js +0 -15
  54. package/MODELS/Halogen/$provider/$folder/$class/$ai/class.js +0 -11
  55. package/MODELS/Halogen/$provider/class.js +0 -16
  56. package/MODELS/Halogen/$provider/readme.md +0 -28
  57. package/MODELS/Halogen/Decider-NPU/$ai/class.js +0 -22
  58. package/MODELS/Halogen/Flux2-Klein-NPU/$ai/class.js +0 -21
  59. package/MODELS/Halogen/Qwen3-ASR-NPU/$ai/class.js +0 -21
  60. package/MODELS/Halogen/Qwen3-Embedding-NPU/$ai/class.js +0 -22
  61. package/MODELS/Halogen/Qwen3-Reranker-NPU/$ai/class.js +0 -21
  62. package/MODELS/Halogen/Qwen3-TTS-NPU/$ai/class.js +0 -26
  63. package/MODELS/Halogen/Qwen3.5-2B-NPU/$ai/class.js +0 -23
  64. package/MODELS/Halogen/Qwen3.8-Flash-Next/$ai/class.js +0 -31
  65. package/MODELS/Local/Flux-Image/$ai/class.js +0 -20
  66. package/MODELS/Local/Qwen3-0.6B/$ai/class.js +0 -26
  67. package/MODELS/Local/Qwen3-14B/$ai/class.js +0 -27
  68. package/MODELS/Local/Qwen3-30B-A3B/$ai/class.js +0 -30
  69. package/MODELS/Local/Qwen3-Embedding/$ai/class.js +0 -21
  70. package/MODELS/Local/Qwen3-Voice/$ai/class.js +0 -26
  71. package/MODELS/odant/$provider/$folder/$class/$ai/class.js +0 -11
  72. package/MODELS/odant/$provider/class.js +0 -75
  73. package/MODELS/odant/$provider/readme.md +0 -21
  74. package/MODELS/odant/Qwen3-ASR/$ai/class.js +0 -15
  75. package/MODELS/odant/Qwen3-TTS/$ai/class.js +0 -22
  76. package/MODELS/odant/Qwen3.8 27b/$ai/class.js +0 -11
  77. package/MODELS/odant/Z-Image-Turbo/$ai/class.js +0 -8
  78. package/MODELS/odant/Z-Image-Turbo/$ai/readme.md +0 -24
@@ -19,7 +19,14 @@ import * as POLICY from './access/policy.js';
19
19
  import * as LINKS from './access/links.js';
20
20
  import * as WORKPLACES from './access/workplaces.js';
21
21
  import { DATA_METHODS, classHasObjects, classObjectCount, markClassesDirty } from '../data/api.js';
22
- import { TRAINER_METHODS, localStreamChat, halogenFallback } from '../modules/trainer/index.js';
22
+ import {
23
+ TRAINER_METHODS,
24
+ localStreamChat,
25
+ halogenFallback,
26
+ evaluateAiNodeActivitySync,
27
+ scaffoldProviderOnDiskSync,
28
+ findProviderPreset,
29
+ } from '../modules/trainer/index.js';
23
30
  import { LICENSE_METHODS } from '../modules/license/index.js';
24
31
  import { NOTIFY_METHODS, resolveBotForPoint, sanitizeBotForUi } from '../modules/notify/index.js';
25
32
  import { DATA_TYPES } from '../data/classes.js';
@@ -156,6 +163,20 @@ export class $class extends $folder {
156
163
  return undefined;
157
164
  return this.DATA?.modality ?? this.DATA?.$public?.modality;
158
165
  },
166
+ get aiActive() {
167
+ if (this.type !== '$ai' && this.type !== '$provider')
168
+ return undefined;
169
+ if (typeof this.DATA?.aiActive === 'boolean')
170
+ return this.DATA.aiActive;
171
+ return evaluateAiNodeActivitySync(this).active;
172
+ },
173
+ get aiStatusReason() {
174
+ if (this.type !== '$ai' && this.type !== '$provider')
175
+ return undefined;
176
+ if (typeof this.DATA?.aiStatusReason === 'string')
177
+ return this.DATA.aiStatusReason;
178
+ return evaluateAiNodeActivitySync(this).reason;
179
+ },
159
180
  };
160
181
  }
161
182
 
@@ -196,6 +217,11 @@ export class $class extends $folder {
196
217
  this.DATA.systemBlocked = sysBlocked;
197
218
  this.DATA.enabled = localEnabled && !sysBlocked;
198
219
  }
220
+ if ((this.type === '$provider' || this.type === '$ai') && this.DATA) {
221
+ const act = evaluateAiNodeActivitySync(this);
222
+ this.DATA.aiActive = act.active;
223
+ this.DATA.aiStatusReason = act.reason;
224
+ }
199
225
  const arg = Object.assign({}, p);
200
226
  return super.info(arg);
201
227
  }
@@ -477,11 +503,14 @@ export class $class extends $folder {
477
503
 
478
504
  get meta_folder() {
479
505
  try {
480
- if (!fs.existsSync(this.real_dir))
506
+ if (!fs.existsSync(this.real_dir)) {
507
+ if (this.constructor.name === '$class')
508
+ return undefined;
481
509
  fs.mkdirSync(this.real_dir + '/' + this.constructor.name, { recursive: true });
510
+ }
482
511
  const metaId = fs.readdirSync(this.real_dir).find(f => f[0] === '$')
483
512
  || (this instanceof FS.$handler ? this.constructor.name : undefined);
484
- return FS.$folder.build(metaId, this);
513
+ return metaId ? FS.$folder.build(metaId, this) : undefined;
485
514
  }
486
515
  catch (e) {
487
516
  console.warn('[WORK] meta_folder:', e.message);
@@ -687,6 +716,29 @@ export class $class extends $folder {
687
716
  this.reset();
688
717
  }
689
718
  }
719
+ const inModels = this.path === '/MODELS' || String(this.path || '').startsWith('/MODELS/');
720
+ if (allowScaffold && inModels && type === '$provider' && p.post == null) {
721
+ const preset = findProviderPreset(p.providerPreset || id);
722
+ if (preset || p.baseUrl || p.protocol || p.apiKey) {
723
+ scaffoldProviderOnDiskSync({
724
+ providerId: id,
725
+ presetId: p.providerPreset || id,
726
+ label: p.label || preset?.label || id,
727
+ baseUrl: p.baseUrl || preset?.baseUrl || '',
728
+ protocol: p.protocol || preset?.protocol || 'openai',
729
+ icon: explicitIcon || preset?.icon || 'carbon:api',
730
+ apiKey: p.apiKey || '',
731
+ folderId: p.folderId || '',
732
+ includeDefaultModels: p.includeDefaultModels !== false && p.includeDefaultModels !== 'false',
733
+ });
734
+ const createdItem = await this._get_next_item(id, ctor);
735
+ if (createdItem) {
736
+ createdItem.reset?.();
737
+ createdItem.DATA = await createdItem.import?.();
738
+ }
739
+ this.reset();
740
+ }
741
+ }
690
742
  markClassesDirty();
691
743
  return log;
692
744
  }
@@ -1,15 +0,0 @@
1
- /**
2
- * GigaChat Light — облегчённая модель GigaChat.
3
- *
4
- * Наследует настройки провайдера из родителя (models/GigaChat).
5
- * Здесь только модельные параметры: model, maxTokens, capabilities.
6
- */
7
- export default {
8
- label: 'GigaChat Light',
9
-
10
- model: 'GigaChat-2',
11
-
12
- maxTokens: 32768,
13
- capabilities: ['chat', 'stream', 'functions'],
14
- functionCalling: true,
15
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * GigaChat Pro — продвинутая модель GigaChat.
3
- *
4
- * Наследует настройки провайдера из родителя (models/GigaChat).
5
- * Здесь только модельные параметры: model, maxTokens, capabilities.
6
- */
7
- export default {
8
- label: 'GigaChat Pro',
9
-
10
- model: 'GigaChat-Pro',
11
-
12
- maxTokens: 4096,
13
- capabilities: ['chat', 'stream', 'functions'],
14
- functionCalling: true,
15
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Halogen — прототип моделей ($ai) гибридного провайдера /MODELS/Halogen.
3
- * Наследуется всеми моделями в /MODELS/Halogen/* через tilde (cross-type $provider → $ai).
4
- */
5
- export default {
6
- icon: 'ai:qwen',
7
- description: 'Гибридная модель Halogen (AMD Ryzen AI 495 Pro 192 GB: iGPU + NPU)',
8
- protocol: 'halogen',
9
- baseUrl: 'http://127.0.0.1:8731/v1/chat/completions',
10
- functionCalling: true,
11
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * Halogen — гибридный провайдер ($provider) локального инференса (iGPU Radeon 8065S gfx1151 + Ryzen AI NPU 55 TOPS)
3
- * для ПАК ODANT-WORK на базе AMD Ryzen™ AI Max+ PRO 495 · 192 ГБ Unified Memory.
4
- *
5
- * Реализует Вариант 3 (Универсальный гибрид):
6
- * - на Linux: прямое подключение к `halogen-flash-server` (:8731);
7
- * - на Windows 11: локальный `llama-server` (ROCm/Vulkan) с Prompt Cache и Speculative Decoding + NPU/DirectML-контур;
8
- * - при отсутствии внешнего процесса на :8731 автоматически работает через встроенный движок WORK.
9
- */
10
- export default {
11
- icon: 'carbon:chip',
12
- label: 'Halogen (Ryzen AI 192 GB)',
13
- protocol: 'halogen',
14
- form: 'trainer',
15
- baseUrl: 'http://127.0.0.1:8731/v1/chat/completions',
16
- }
@@ -1,28 +0,0 @@
1
- # Провайдер `/MODELS/Halogen` (AMD Ryzen AI Max+ PRO 495 · 192 ГБ Unified Memory)
2
-
3
- Универсальный гибридный провайдер локального ИИ по архитектуре [`peonist-ai/halogen-flash-server`](https://github.com/peonist-ai/halogen-flash-server), объединяющий за единым портом `8731` основную агентскую модель на iGPU (`Radeon 8065S / gfx1151`) и семейство специализированных моделей на нейропроцессоре **AMD Ryzen AI NPU (`55 TOPS`)**.
4
-
5
- ## Режимы работы (Универсальный гибрид)
6
-
7
- 1. **Linux Native (`halogen-flash-server:0.19.1`):**
8
- - прямая регистрация 62 ГБ весов `Qwen3.8-Flash-Next` в памяти GPU через `/dev/kfd` (`CONFIG_HSA_AMD_SVM`, `HALOGEN_WEIGHTS_LOCK=1`);
9
- - KV-пул на `524 288` токенов (`4` слота), `47.7 ГБ` FP8 n-gram lookup-таблица целиком в ОЗУ;
10
- - аппаратный NPU (`/dev/accel/accel0`, `amdxdna`) для малых моделей (`HALOGEN_NPU_MODELS`).
11
- 2. **Windows 11 Hybrid (`llama-server.exe` ROCm/Vulkan + WORK NPU Engine):**
12
- - запуск `Qwen3.8-Flash-Next` / `Qwen3` в GGUF на iGPU с общим пулом памяти до 175 ГБ, Prompt Cache (`--cache-reuse 256`), Speculative Lookup (`--lookup-cache-dynamic`) и сохранением слотов;
13
- - обслуживание NPU-моделей (TTS, ASR, Image, Embeddings, Rerank, Decider) без вымывания кэша основной модели.
14
- 3. **Встроенный фоллбэк WORK (`work-embedded-fallback`):**
15
- - если внешний сервер на `:8731` не запущен, все вызовы моделей `/MODELS/Halogen/*` автоматически обрабатываются встроенным локальным контуром WORK (`localStreamChat` + `halogenFallback`).
16
-
17
- ## Состав моделей в `/MODELS/Halogen`
18
-
19
- | Узел WORK | Модель (`model`) | Вычислитель | Назначение в WORK |
20
- | :--- | :--- | :--- | :--- |
21
- | `/MODELS/Halogen/Qwen3.8-Flash-Next` | `halogen-qwen3.8-flash-next` | iGPU (`gfx1151`) | Основная модель агента (`ai/config.js → model`), 262k контекст, `tools`, `vision`, `effort`, `fork` |
22
- | `/MODELS/Halogen/Qwen3.5-2B-NPU` | `qwen3.5-2b` | Ryzen AI NPU | Быстрое сжатие контекста (`ai/config.js → compactModel`) и сводки без нагрузки на GPU |
23
- | `/MODELS/Halogen/Qwen3-ASR-NPU` | `qwen3-asr-1.7b` | Ryzen AI NPU | Распознавание речи в голосовом режиме задачи (`ai/config.js → sttModel`) |
24
- | `/MODELS/Halogen/Qwen3-TTS-NPU` | `qwen3-tts-1.7b-customvoice` | Ryzen AI NPU | Попредложенческий синтез речи с поддержкой Barge-In (`ai/config.js → ttsModel`) |
25
- | `/MODELS/Halogen/Flux2-Klein-NPU` | `flux2-klein-4b` | Ryzen AI NPU | Генерация и редактирование иллюстраций до 1024×1024 (`ai/config.js → imageModel`) |
26
- | `/MODELS/Halogen/Qwen3-Embedding-NPU` | `qwen3-embedding-0.6b` | Ryzen AI NPU | Векторные эмбеддинги 1024d для семантического поиска (RAG) |
27
- | `/MODELS/Halogen/Qwen3-Reranker-NPU` | `qwen3-reranker-0.6b` | Ryzen AI NPU | Семантическое ранжирование документов (`/v1/rerank`) |
28
- | `/MODELS/Halogen/Decider-NPU` | `decider-0.8b` | Ryzen AI NPU | Однопроходный классификатор System One (`/v1/systemone`, ~45 мс) |
@@ -1,22 +0,0 @@
1
- /**
2
- * Однопроходный классификатор на NPU: Decider-0.8B (`/v1/systemone`)
3
- * Назначение: сверхбыстрые решения (choice / score / noul за ~45 мс) для маршрутизации запросов и голосового AI Barge-In.
4
- */
5
- export default {
6
- label: 'Decider 0.8B (NPU SystemOne)',
7
- icon: 'carbon:decision-tree',
8
- protocol: 'halogen',
9
- baseUrl: 'http://127.0.0.1:8731/v1/systemone',
10
- model: 'decider-0.8b',
11
- modality: 'llm',
12
- maxTokens: 8192,
13
- maxOutput: 512,
14
- functionCalling: false,
15
- capabilities: [
16
- 'decide',
17
- 'classify',
18
- ],
19
- hfRepo: 'peonist-ai/halogen-npu-decider-0.8b',
20
- device: 'Ryzen AI NPU (55 TOPS)',
21
- trustLevel: 0,
22
- };
@@ -1,21 +0,0 @@
1
- /**
2
- * Генерация и редактирование изображений на NPU: FLUX.2-klein-4B (`/v1/images/generations`, `/v1/images/edits`)
3
- * Назначение: создание иконок, схем, иллюстраций и карточек номенклатуры до 1024×1024 за 4 шага (`ai/config.js → imageModel`).
4
- */
5
- export default {
6
- label: 'FLUX.2-klein 4B (NPU Image)',
7
- icon: 'ai:stablediffusion',
8
- protocol: 'halogen',
9
- baseUrl: 'http://127.0.0.1:8731/v1/images/generations',
10
- model: 'flux2-klein-4b',
11
- modality: 'image',
12
- maxTokens: 4096,
13
- functionCalling: false,
14
- capabilities: [
15
- 'image',
16
- 'text-to-image',
17
- ],
18
- hfRepo: 'peonist-ai/halogen-npu-flux2-klein-4b',
19
- device: 'Ryzen AI NPU (55 TOPS)',
20
- trustLevel: 0,
21
- };
@@ -1,21 +0,0 @@
1
- /**
2
- * Распознавание речи на NPU: Qwen3-ASR-1.7B (`/v1/audio/transcriptions`)
3
- * Назначение: голосовой режим задачи (`ai/config.js → sttModel`), записи WAV до 20 минут.
4
- */
5
- export default {
6
- label: 'Qwen3-ASR 1.7B (NPU STT)',
7
- icon: 'carbon:microphone',
8
- protocol: 'halogen',
9
- baseUrl: 'http://127.0.0.1:8731/v1/audio/transcriptions',
10
- model: 'qwen3-asr-1.7b',
11
- modality: 'audio',
12
- maxTokens: 4096,
13
- capabilities: [
14
- 'stt',
15
- 'asr',
16
- ],
17
- language: 'ru',
18
- hfRepo: 'peonist-ai/halogen-npu-qwen3-asr-1.7b',
19
- device: 'Ryzen AI NPU (55 TOPS)',
20
- trustLevel: 0,
21
- };
@@ -1,22 +0,0 @@
1
- /**
2
- * Векторные эмбеддинги на NPU: Qwen3-Embedding-0.6B (`/v1/embeddings`)
3
- * Назначение: семантический поиск (RAG) по документам, задачам `.task` и справочникам WORK (~52 мс на запрос).
4
- */
5
- export default {
6
- label: 'Qwen3-Embedding 0.6B (NPU RAG)',
7
- icon: 'carbon:search-locate',
8
- protocol: 'halogen',
9
- baseUrl: 'http://127.0.0.1:8731/v1/embeddings',
10
- model: 'qwen3-embedding-0.6b',
11
- modality: 'embed',
12
- maxTokens: 8192,
13
- functionCalling: false,
14
- capabilities: [
15
- 'embeddings',
16
- 'embedding',
17
- 'rag',
18
- ],
19
- hfRepo: 'peonist-ai/halogen-npu-qwen3-embedding-0.6b',
20
- device: 'Ryzen AI NPU (55 TOPS)',
21
- trustLevel: 0,
22
- };
@@ -1,21 +0,0 @@
1
- /**
2
- * Семантический реранкер на NPU: Qwen3-Reranker-0.6B (`/v1/rerank`)
3
- * Назначение: точное ранжирование найденных фрагментов документов и объектов учёта по релевантности запросу.
4
- */
5
- export default {
6
- label: 'Qwen3-Reranker 0.6B (NPU Rerank)',
7
- icon: 'carbon:filter',
8
- protocol: 'halogen',
9
- baseUrl: 'http://127.0.0.1:8731/v1/rerank',
10
- model: 'qwen3-reranker-0.6b',
11
- modality: 'embed',
12
- maxTokens: 8192,
13
- functionCalling: false,
14
- capabilities: [
15
- 'rerank',
16
- 'rag',
17
- ],
18
- hfRepo: 'peonist-ai/halogen-npu-qwen3-reranker-0.6b',
19
- device: 'Ryzen AI NPU (55 TOPS)',
20
- trustLevel: 0,
21
- };
@@ -1,26 +0,0 @@
1
- /**
2
- * Синтез речи на NPU: Qwen3-TTS-1.7B CustomVoice (`/v1/audio/speech`)
3
- * Назначение: озвучивание ответов агента в голосовом режиме задачи (`ai/config.js → ttsModel`),
4
- * первый звук через ~350 мс, поддержка живого перебивания (Barge-In).
5
- */
6
- export default {
7
- label: 'Qwen3-TTS 1.7B (NPU Voice)',
8
- icon: 'carbon:volume-up',
9
- protocol: 'halogen',
10
- baseUrl: 'http://127.0.0.1:8731/v1/audio/speech',
11
- model: 'qwen3-tts-1.7b-customvoice',
12
- modality: 'audio',
13
- maxTokens: 4096,
14
- capabilities: [
15
- 'tts',
16
- 'voice',
17
- ],
18
- ttsTask: 'CustomVoice',
19
- voice: 'serena',
20
- language: 'russian',
21
- seed: 42,
22
- instructions: 'Calm, confident, friendly business assistant, clear studio diction, moderate conversational pace.',
23
- hfRepo: 'peonist-ai/halogen-npu-qwen3-tts-1.7b-customvoice',
24
- device: 'Ryzen AI NPU (55 TOPS)',
25
- trustLevel: 0,
26
- };
@@ -1,23 +0,0 @@
1
- /**
2
- * Малая генеративная модель на NPU: Qwen3.5-2B (Ryzen AI NPU sidecar)
3
- * Назначение: мгновенное фоновое сжатие контекста (`ai/config.js → compactModel`) и краткие сводки
4
- * (~39 tok/s на NPU без вымывания KV-пула основной модели на GPU).
5
- */
6
- export default {
7
- label: 'Qwen3.5-2B (NPU Compact)',
8
- icon: 'ai:qwen',
9
- protocol: 'halogen',
10
- baseUrl: 'http://127.0.0.1:8731/v1/chat/completions',
11
- model: 'qwen3.5-2b',
12
- modality: 'llm',
13
- maxTokens: 32768,
14
- maxOutput: 4096,
15
- functionCalling: false,
16
- capabilities: [
17
- 'chat',
18
- 'stream',
19
- ],
20
- hfRepo: 'peonist-ai/halogen-npu-qwen3.5-2b',
21
- device: 'Ryzen AI NPU (55 TOPS)',
22
- trustLevel: 0,
23
- };
@@ -1,31 +0,0 @@
1
- /**
2
- * Флагманская модель Halogen: Qwen3.8-Flash-Next (180B MoE, 4.16 bpw + FP8 n-gram lookup table)
3
- * Вычислитель: iGPU AMD Radeon 8065S (gfx1151) · 192 ГБ Unified Memory
4
- * Скорость: 73–94 tok/s decode, ~1800 tok/s prefill, первый токен в длинной агентской сессии за ~1.6 с.
5
- */
6
- export default {
7
- label: 'Qwen3.8-Flash-Next (180B MoE)',
8
- icon: 'ai:qwen',
9
- protocol: 'halogen',
10
- baseUrl: 'http://127.0.0.1:8731/v1/chat/completions',
11
- model: 'halogen-qwen3.8-flash-next',
12
- modality: 'llm',
13
- maxTokens: 262144,
14
- maxOutput: 32768,
15
- efforts: ['off', 'low', 'medium', 'high'],
16
- effort: 'low',
17
- functionCalling: true,
18
- capabilities: [
19
- 'chat',
20
- 'stream',
21
- 'tools',
22
- 'functions',
23
- 'vision',
24
- 'effort',
25
- 'thinking',
26
- 'fork',
27
- ],
28
- hfRepo: 'peonist-ai/halogen-qwen3.8-flash-next',
29
- device: 'iGPU Radeon 8065S (gfx1151)',
30
- trustLevel: 0,
31
- };
@@ -1,20 +0,0 @@
1
- /**
2
- * Предустановленная модель ПАК WORK: Генерация изображений (FLUX.1-schnell)
3
- * Назначение: локальный синтез иллюстраций, карточек номенклатуры, схем и визуальных материалов.
4
- */
5
- export default {
6
- label: 'Flux-Image (Генерация изображений)',
7
- icon: 'ai:stablediffusion',
8
- protocol: 'local',
9
- baseUrl: 'http://127.0.0.1:8080/v1/images/generations',
10
- model: 'black-forest-labs/FLUX.1-schnell',
11
- modality: 'image',
12
- capabilities: [
13
- 'image',
14
- 'text-to-image',
15
- ],
16
- hfRepo: 'black-forest-labs/FLUX.1-schnell',
17
- weightsDir: 'MODELS/Local/Flux-Image/#weights',
18
- primaryFile: 'flux1-schnell.safetensors',
19
- pakPreinstalled: true,
20
- };
@@ -1,26 +0,0 @@
1
- /**
2
- * Локальная модель ИИ: Qwen3-0.6B (llm)
3
- * Репозиторий Hugging Face: Qwen/Qwen3-0.6B
4
- */
5
- export default {
6
- "label": "Qwen3-0.6B",
7
- "icon": "ai:qwen",
8
- "protocol": "local",
9
- "baseUrl": "http://127.0.0.1:8080/v1/chat/completions",
10
- "model": "Qwen/Qwen3-0.6B",
11
- "modality": "llm",
12
- "maxTokens": 16384,
13
- "maxOutput": 8192,
14
- "functionCalling": true,
15
- "capabilities": [
16
- "chat",
17
- "stream",
18
- "tools",
19
- "functions",
20
- "thinking",
21
- "lora"
22
- ],
23
- "hfRepo": "Qwen/Qwen3-0.6B",
24
- "weightsDir": "MODELS/Local/Qwen3-0.6B/#weights",
25
- "primaryFile": "model.safetensors"
26
- };
@@ -1,27 +0,0 @@
1
- /**
2
- * Локальная модель ИИ: Qwen3-14B (llm)
3
- * Репозиторий Hugging Face: Qwen/Qwen3-14B
4
- */
5
- export default {
6
- "label": "Qwen3-14B",
7
- "icon": "ai:qwen",
8
- "protocol": "local",
9
- "baseUrl": "http://127.0.0.1:8080/v1/chat/completions",
10
- "model": "Qwen/Qwen3-14B",
11
- "modality": "llm",
12
- "maxTokens": 16384,
13
- "maxOutput": 8192,
14
- "functionCalling": true,
15
- "capabilities": [
16
- "chat",
17
- "tools",
18
- "thinking",
19
- "coding",
20
- "lora",
21
- "stream",
22
- "functions"
23
- ],
24
- "hfRepo": "Qwen/Qwen3-14B",
25
- "weightsDir": "MODELS/Local/Qwen3-14B/#weights",
26
- "primaryFile": "model-00001-of-00008.safetensors"
27
- };
@@ -1,30 +0,0 @@
1
- /**
2
- * Предустановленная модель ПАК WORK: Qwen 3 30B (MoE A3B)
3
- * Назначение: основная языковая модель (диалог, ИИ-агент, учётные операции, аналитика, код).
4
- */
5
- export default {
6
- label: 'Qwen 3 30B',
7
- icon: 'ai:qwen',
8
- protocol: 'local',
9
- baseUrl: 'http://127.0.0.1:8080/v1/chat/completions',
10
- model: 'Qwen/Qwen3-30B-A3B',
11
- modality: 'llm',
12
- maxTokens: 131072,
13
- maxOutput: 32768,
14
- functionCalling: true,
15
- efforts: ['off', 'low', 'medium', 'high'],
16
- effort: 'low',
17
- capabilities: [
18
- 'chat',
19
- 'stream',
20
- 'tools',
21
- 'functions',
22
- 'effort',
23
- 'thinking',
24
- 'lora',
25
- ],
26
- hfRepo: 'Qwen/Qwen3-30B-A3B',
27
- weightsDir: 'MODELS/Local/Qwen3-30B-A3B/#weights',
28
- primaryFile: 'model-00001-of-00016.safetensors',
29
- pakPreinstalled: true,
30
- };
@@ -1,21 +0,0 @@
1
- /**
2
- * Предустановленная модель ПАК WORK: Embedding (Qwen3-Embedding-4B)
3
- * Назначение: семантический векторный поиск и RAG по документам, договорам и учётной базе.
4
- */
5
- export default {
6
- label: 'Qwen3-Embedding (RAG)',
7
- icon: 'carbon:search-locate',
8
- protocol: 'local',
9
- baseUrl: 'http://127.0.0.1:8080/v1/embeddings',
10
- model: 'Qwen/Qwen3-Embedding-4B',
11
- modality: 'embedding',
12
- capabilities: [
13
- 'embedding',
14
- 'rag',
15
- 'rerank',
16
- ],
17
- hfRepo: 'Qwen/Qwen3-Embedding-4B',
18
- weightsDir: 'MODELS/Local/Qwen3-Embedding/#weights',
19
- primaryFile: 'model.safetensors',
20
- pakPreinstalled: true,
21
- };
@@ -1,26 +0,0 @@
1
- /**
2
- * Предустановленная модель ПАК WORK: Голосовой контур (Qwen3-ASR + Qwen3-TTS)
3
- * Назначение: полнодуплексный голосовой диалог с перебиванием, распознавание и синтез речи.
4
- */
5
- export default {
6
- label: 'Qwen3-Voice (ASR + TTS)',
7
- icon: 'carbon:microphone',
8
- protocol: 'local',
9
- baseUrl: 'http://127.0.0.1:8080/v1/audio/speech',
10
- model: 'Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign',
11
- modality: 'audio',
12
- capabilities: [
13
- 'asr',
14
- 'tts',
15
- 'voice',
16
- ],
17
- seed: 42,
18
- temperature: 0.2,
19
- top_p: 0.6,
20
- top_k: 20,
21
- voice: 'Warm, calm, friendly adult female Russian speaker, consistent natural timbre, clear studio diction, moderate conversational pace.',
22
- hfRepo: 'Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign',
23
- weightsDir: 'MODELS/Local/Qwen3-Voice/#weights',
24
- primaryFile: 'model.safetensors',
25
- pakPreinstalled: true,
26
- };
@@ -1,11 +0,0 @@
1
- /**
2
- * odant — прототип моделей ($ai) провайдера odant.
3
- * Канал: protocol/baseUrl/apiKey наследуются моделями через tilde (cross-type $provider→$ai).
4
- */
5
- export default {
6
- icon: 'odant:logo',
7
- description: 'Провайдер odant',
8
- protocol: 'openai',
9
- baseUrl: 'https://models.odant.org/v1/chat/completions',
10
- apiKey: 'secret:odant.json',
11
- }
@@ -1,75 +0,0 @@
1
- export default {
2
- METADATA: {
3
- STATIC: [{
4
- id: "protocol",
5
- type: "String",
6
- placeholder: "openai | anthropic | gigachat | ollama | local | custom",
7
- required: true
8
- },{
9
- id: "baseUrl",
10
- type: "String",
11
- placeholder: "https://…/v1/chat/completions",
12
- required: true
13
- },{
14
- id: "apiKey",
15
- type: "String",
16
- placeholder: "sk-..."
17
- },{
18
- id: "token",
19
- type: "String",
20
- placeholder: "Authorization key (GigaChat OAuth)"
21
- },{
22
- id: "authUrl",
23
- type: "String",
24
- placeholder: "https://…/oauth"
25
- },{
26
- id: "scope",
27
- type: "String",
28
- placeholder: "GIGACHAT_API_PERS"
29
- }]
30
- },
31
- icon: "odant:logo",
32
- label: "odant",
33
- form: "editor",
34
- async list_remote(params = {}) {
35
- const ai = params.$provider || params.$ai || this;
36
- const base = String(params.baseUrl || ai.baseUrl || ai.DATA?.baseUrl || '').trim();
37
- const where = ai.short || ai.path || ai.id || '?';
38
- if (!base) return {
39
- error: 'list_remote: нет baseUrl у ' + where
40
- };
41
- let origin;
42
- try {
43
- origin = new URL(base).origin;
44
- } catch {
45
- return {
46
- error: 'list_remote: некорректный baseUrl: ' + base
47
- };
48
- }
49
- const headers = providerAuthHeaders(ai);
50
- const tried = [];
51
- const urls = [origin + '/api/tags', origin + '/v1/models'];
52
- for (const url of urls) {
53
- tried.push(url);
54
- try {
55
- const data = await providerHttpsGetJson(url, headers, ai);
56
- const models = normalizeProviderRemoteIds(data);
57
- if (models.length) return {
58
- source: url,
59
- baseUrl: base,
60
- models
61
- };
62
- } catch (e) {
63
- tried[tried.length - 1] = url + ' (' + String(e.message || e).slice(0, 80) + ')';
64
- }
65
- }
66
- return {
67
- error: 'list_remote: не удалось получить список у ' + where,
68
- baseUrl: base,
69
- tried
70
- };
71
- },
72
- protocol: "openai",
73
- baseUrl: "https://models.odant.org/v1/chat/completions",
74
- apiKey: "secret:odant.json"
75
- }
@@ -1,21 +0,0 @@
1
- # odant
2
-
3
- Провайдер odant (`/MODELS/odant`, `$provider`). Не модель. Слой выше — [`/MODELS`](/MODELS/$ai/readme.md/~/handlers/pages/form/).
4
-
5
- ## Ходы
6
-
7
- 1. Дети = подключённые модели `$ai` (`ls` / `info deep=2`).
8
- 2. **remote** здесь — список на API по `baseUrl` (канал `$provider/$folder/$class/$ai`).
9
- 3. Недостающие = remote − дети → `create` `$ai` только под `/MODELS/odant` (не `write` файла).
10
- 4. `model` в class.js = id с remote; id папки — имя узла. Один `model` — один ребёнок.
11
-
12
- ## Запреты
13
-
14
- - remote / ask на `/MODELS`
15
- - create моделей под корнем `/MODELS`
16
-
17
- ## Из чего состоит
18
-
19
- - [`class.js`](/MODELS/odant/$provider/class.js/~/handlers/pages/form/) — провайдер
20
- - [`$folder/$class/$ai/`](/MODELS/odant/$provider/$folder/$class/$ai/class.js/~/handlers/pages/form/) — канал/шаблон моделей
21
- - дети — модели `$ai` (список — только ls/info)