# πŸ“¦ @goodandready/dsh-model-sync

ДинамичСская синхронизация ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² LLM-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ автоматичСский ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ баланса для DeepSeek Harness

npm version license DSH Plugin Node version

ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΡ€Π°

πŸ‡¬πŸ‡§ English β€’ πŸ‡·πŸ‡Ί Русский β€’ πŸ‡¨πŸ‡³ δΈ­ζ–‡θ―΄ζ˜Ž

⭐ Если Π²Π°ΠΌ нравится этот ΠΏΠ»Π°Π³ΠΈΠ½, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅ΠΌΡƒ Star Π½Π° GitHub β€” это ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅.

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, создайтС Issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ## ⚑ ΠžΠ±Π·ΠΎΡ€ **`dsh-model-sync`** ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ **DeepSeek Harness** Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии с апстрим AI-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ. ВмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ рСдактирования YAML-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ выпускС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° контСкста ΠΈΠ»ΠΈ Ρ†Π΅Π½, `dsh-model-sync` автоматичСски ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π΅Π»ΠΈΠ·Ρ‹, обновляСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ возмоТностСй (`vision`, `tools`, `reasoning`, `embeddings`), отслСТиваСт баланс Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ², управляСт Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² интСрфСйсС ΠΈ синхронизируСт ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π»Π΅Ρ‚Ρƒ Π±Π΅Π· пСрСзапуска сСрвСра. ```mermaid graph LR subgraph Trigger [РасписаниС ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ запуск] Cron[⏰ Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ опроса] --> Engine[Π―Π΄Ρ€ΠΎ dsh-model-sync] WebUI[πŸ–₯️ Настройки: Кнопка Sync Now] --> Engine end subgraph Providers [25+ Апстрим-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²] Engine --> Registry{РССстр Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ²} Registry -->|Bearer Auth| P1[OpenAI / DeepSeek / OpenRouter / Groq] Registry -->|x-api-key Auth| P2[Anthropic Claude / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΡˆΠ»ΡŽΠ·Ρ‹] Registry -->|query-key Auth| P3[Google Gemini] Registry -->|Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ опрос| P4[Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ollama / vLLM / SGLang] Registry -->|CommandCode API| P5[Command Code / visibleModels] Registry -->|ΠžΠΏΡ€ΠΎΡ подписки| P6[План подписки ClineBot] end subgraph Reconcile [Π‘Π²Π΅Ρ€ΠΊΠ° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ Π°ΡƒΠ΄ΠΈΡ‚] P1 --> Normalizer[Нормализатор ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ возмоТностСй] P2 --> Normalizer P3 --> Normalizer P4 --> Normalizer P5 --> Normalizer P6 --> Normalizer Normalizer --> Diff[Π’Ρ€Π΅ΠΊΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ / УстарСло] Diff --> Catalog[Активный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ DSH ΠΈ visibleModels] end style Trigger fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4 style Providers fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4 style Reconcile fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4 ``` --- ## ✨ ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности * 🏷️ **Π‘ΠΌΠ°Ρ€Ρ‚-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎ-Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°**: АвтоматичСскоС присвоСниС Ρ‚Π΅Π³ΠΎΠ² модСлям (`coding`, `reasoning`, `fast`, `vision`, `long-context`) ΠΏΡ€ΠΈ синхронизации, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ Ρ‚Π΅Π³Π°ΠΌ pill-ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Π² Web UI ΠΈ прСсСт «⭐ Curated BestΒ» для Π²Ρ‹Π±ΠΎΡ€Π° Π»ΡƒΡ‡ΡˆΠΈΡ… флагманских ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ. * ⚑ **Π Π°Π΄Π°Ρ€ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ (Latency & TTFT) ΠΈ спарклайны**: Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈ Time To First Token (TTFT), визуализация спарклайнами (` β–‚β–ƒβ–‚ `) с 4 градациями скорости (⚑ `< 300мс`, 🟒 `< 1.2с`, 🟑 `1.5 - 3.0с`, πŸ”΄ `> 3.0с`) ΠΈ эндпоинт `GET /dsh-model-sync/health/latency` для Π°Π³Π΅Π½Ρ‚ΠΎΠ²-ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². * πŸ’Έ **ДинамичСская синхронизация Ρ†Π΅Π½ ΠΈ ΡƒΡ‡Ρ‘Ρ‚ Prompt Caching**: Π€ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ² ΠΈΠ· OpenRouter ΠΈ LiteLLM с дисковым fallback-кэшСм, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° скидок ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ² (`cacheReadPerToken`, `cacheWritePerToken`) ΠΈ эндпоинты `GET /dsh-model-sync/pricing`, `POST /dsh-model-sync/pricing/sync`. * πŸ’° **ВстроСнная Π±Π°Π·Π° эталонных Ρ†Π΅Π½ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²**: АвтоматичСскоС ΠΎΠ±ΠΎΠ³Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ρ‚Π°Ρ€ΠΈΡ„Π°ΠΌΠΈ для OpenAI, Anthropic, Groq, Mistral, xAI ΠΈ DeepSeek, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² Ρ†Π΅Π½ ΠΈ псСвдонима `@cheap` Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ отсутствии ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² API ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°. * 🎯 **ДинамичСскиС Β«ΡƒΠΌΠ½Ρ‹Π΅Β» псСвдонимы ΠΈ Π°Π²Ρ‚ΠΎ-фоллбэк**: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… алиасов (`@fast`, `@cheap`, `@best-code`) ΠΈ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ рСзСрвирования с Π°Π²Ρ‚ΠΎΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ Circuit Breaker. * πŸ“ **Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠΌΠΈΡ‚Ρ‹ контСкста ΠΈ Π°Π²Ρ‚ΠΎ-ΠΊΠ»Π°ΠΌΠΏΠΈΠ½Π³ (`contextWindow` / `maxOutputTokens`)**: Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΈΠΌΠΈΡ‚Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ошибок 400 `max_tokens` ΠΈ индикация `Π’Ρ…ΠΎΠ΄: 128k | Π’Ρ‹Ρ…ΠΎΠ΄: 8k` Π² Web UI. * 🧠 **Унификация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Reasoning & Thinking**: автоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (`effort`, `budget_tokens`, `boolean`) ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° рассуТдСний с ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ нСсовмСстимых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `temperature` для o1/o3). * πŸ”” **Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ Diff Webhooks ΠΈ диспСтчСризация событий**: УвСдомлСния Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ подписи HMAC-SHA256 ΠΈ событиями Cordis `model-sync/diff` ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΈΡ… устарСвании ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ†Π΅Π½. * ⚑ **Π’Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ**: Быстрый ΠΏΡƒΡ‚ΡŒ (`fast-path`) Π² `filterModels` ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΈ отсутствии Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ лишнюю ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ regex ΠΈ ΠΏΡ€ΠΎΠ³ΠΎΠ½Ρ‹ массивов. * πŸ”„ **ОбновлСниС ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ**: ВстроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π² Настройках со сбросом кэша npm ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ запросС (`?fresh=1` / `Cache-Control: no-cache`), Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии. * πŸ”„ **АвтоматичСскоС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°**: синхронизация списков ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, алиасов, контСкстных ΠΎΠΊΠΎΠ½ ΠΈ Ρ„Π»Π°Π³ΠΎΠ² возмоТностСй (`vision`, `tools`, `reasoning`, `embeddings`) для 25+ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². * πŸ›‘οΈ **Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ шаблонов Ρ‡Π°Ρ‚Π° ΠΈ Ρ€ΠΎΠ»Π΅ΠΉ Minijinja**: автоматичСская установка `compat.supportsDeveloperRole: false` для ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Groq (Qwen, Llama, Mistral, Gemma, DeepSeek) ΠΈ DeepSeek API, прСдотвращая ошибки 400 `Unexpected message role` для reasoning-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ с сохранСниСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… настроСк. * 🌐 **25+ встроСнных Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²**: готовая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° OpenAI, Anthropic, Google, DeepSeek, xAI, OpenRouter, Groq, Mistral, Cerebras, Fireworks, HuggingFace, Moonshot, NVIDIA, Qwen, Together, Xiaomi MiMo, SiliconFlow, Command Code, ClineBot ΠΈ локальной Ollama. * πŸŽ›οΈ **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ модСлями Command Code**: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Command Code с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±ΠΎΡ€Π° чСкбоксами Π² UI ΠΈ автоматичСской синхронизациСй `visibleModels` Π² настройках `llm-commandcode`. * 🎯 **Бинхронизация Ρ‚Π°Ρ€ΠΈΡ„Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° ClineBot**: Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€, ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ `GET /users/me/plan`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ, входящиС Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ подписку, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ появлСниС сотСн нСдоступных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. * πŸ”Œ **ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ кастомных Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ²**: ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… OpenAI-совмСстимых эндпоинтов `/v1/models` с настраиваСмой Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ (`bearer`, `x-api-key`, `query-key`, `none`). * πŸ“Š **ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ баланса ΠΈ ΠΊΠ²ΠΎΡ‚**: опрос Π±ΠΈΠ»Π»ΠΈΠ½Π³ΠΎΠ²Ρ‹Ρ… эндпоинтов ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² (Π³Π΄Π΅ поддСрТиваСтся) для прСдотвращСния Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ исчСрпания срСдств. * πŸ“œ **Π˜ΡΡ‚ΠΎΡ€ΠΈΡ синхронизации ΠΈ Π°ΡƒΠ΄ΠΈΡ‚ Π΄ΠΈΡ„Ρ„ΠΎΠ²**: отслСТиваниС всСх Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ID ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… возмоТностСй с ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. * πŸ–₯️ **ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Π°Ρ панСль Web UI (**Настройки β†’ Бинхронизация ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ**)**: * ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ статуса ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρƒ со счётчиками Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ; * Кнопка ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ синхронизации Β«Sync NowΒ»; * Π’Ρ‹Π±ΠΎΡ€ ΠΈ скрытиС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ чСкбоксами; * ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈ Π²Π²ΠΎΠ΄ кастомных эндпоинтов. --- ## πŸ› οΈ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ | Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° | Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ | АвтоопрСдСлСниС возмоТностСй ΠΈ примСчания | |---|---|---| | `openai` | Bearer Token | `vision`, `tools`, `reasoning`, `embeddings` | | `anthropic` | Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ `x-api-key` | `vision`, `tools`, `reasoning` | | `google` | Query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ / ΠšΠ»ΡŽΡ‡ | `vision`, `tools`, `reasoning`, `embeddings` | | `deepseek` | Bearer Token | `tools`, `reasoning` | | `xai` | Bearer Token | `vision`, `tools`, `reasoning` | | `openrouter` | Bearer Token | ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Ρ†Π΅Π½Π°ΠΌΠΈ ΠΈ контСкстными Π»ΠΈΠΌΠΈΡ‚Π°ΠΌΠΈ | | `groq` | Bearer Token | `tools`, `reasoning`, `vision`, `supportsDeveloperRole: false` | | `mistral` | Bearer Token | `tools`, `reasoning`, `vision` | | `commandcode` | Bearer Token | ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ `https://api.commandcode.ai/provider/v1/models` с сохранСниСм Π²Ρ‹Π±ΠΎΡ€Π° Π² `visibleModels` для `llm-commandcode` | | `clinebot` | Bearer Token | ΠžΠΏΡ€ΠΎΡ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚Π°Ρ€ΠΈΡ„Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° (`/users/me/plan`), синхронизация строго Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… Π² подписку ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ | | `fireworks` | Bearer Token | Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… вСсов | | `huggingface` | Bearer Token | ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Serverless Inference API | | `together` | Bearer Token | ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Open-Source | | `ollama` | Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ HTTP (`none`) | Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ„Π»Π°ΠΉΠ½-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (`/api/tags`) | | `custom` | НастраиваСмый | Π›ΡŽΠ±ΠΎΠΉ кастомный шлюз, совмСстимый с OpenAI ΠΈΠ»ΠΈ Google | --- ## πŸ“¦ Быстрая установка ```bash dsh plugin --profile web add @goodandready/dsh-model-sync ``` > [!IMPORTANT] > ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ Web UI DSH послС установки (`systemctl --user restart dsh-web`), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². --- ## βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ (`settings.yaml`) ```yaml dsh-model-sync: enabled: true scheduleEnabled: false intervalMinutes: 60 autoApply: false requestTimeoutMs: 15000 retryAttempts: 3 concurrency: 4 providers: - provider: commandcode enabled: true autoApply: false - provider: clinebot enabled: true autoApply: false ``` | ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС | |---|---|---|---| | `enabled` | `boolean` | `true` | Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΉ синхронизации | | `scheduleEnabled` | `boolean` | `false` | Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ пСриодичСского Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ расписания синхронизации | | `intervalMinutes` | `number` | `60` | ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ опроса ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² (Π² ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ…) | | `autoApply` | `boolean` | `false` | АвтоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ | | `requestTimeoutMs`| `number` | `15000` | Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ HTTP-запросов синхронизации ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² (Π² миллисСкундах) | | `retryAttempts` | `number` | `3` | МаксимальноС число ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΡ€ΠΈ сСтСвых сбоях | | `concurrency` | `number` | `4` | МаксимальноС количСство ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ синхронизации | | `providers` | `array` | `[]` | Бписок ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… настроСк ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² (`provider`, `enabled`, `autoApply`) | --- ### πŸ” АктивноС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π·ΠΎΠ½Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ возмоТностСй (Capability Probing) - **ΠœΠΈΠΊΡ€ΠΎ-Π·ΠΎΠ½Π΄Ρ‹**: РСальная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ возмоТностСй ΠΌΠΎΠ΄Π΅Π»ΠΈ вмСсто слСпого довСрия Ρ„Π»Π°Π³Π°ΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°: - `JSON Schema`: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° структурированного JSON-Π²Ρ‹Π²ΠΎΠ΄Π° (`response_format: { type: "json_schema" }`). - `Tools / Functions`: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² инструмСнтов (function calling). - `Vision`: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° распознавания ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. - `Developer Role`: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ систСмной Ρ€ΠΎΠ»ΠΈ `developer` для reasoning-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. - **Кнопки Π² Web UI**: ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Β«πŸ” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ возмоТности» Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«πŸ” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС ΠΌΠΎΠ΄Π΅Π»ΠΈΒ» ΠΈ «⚑ Волько Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΒ» Π² шапкС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. - **Π‘Π΅ΠΉΠ΄ΠΆΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ**: Π—Π΅Π»Ρ‘Π½Ρ‹Π΅ Π±Π΅ΠΉΠ΄ΠΆΠΈ (`βœ” Tools`, `βœ” Vision`, `βœ” JSON`, `βœ” DevRole`) ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° дискС ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ пСрСзапускС. ### πŸ¦™ Π¦Π΅Π½Ρ‚Ρ€ управлСния Ollama ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ модСлями - **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ прямо ΠΈΠ· Web UI**: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ollama Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ SSH. - **Π–ΠΈΠ²ΠΎΠΉ прогрСсс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ**: Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ скачивания слоёв ΠΌΠΎΠ΄Π΅Π»ΠΈ с ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. - **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (GPU VRAM)**: ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π² VRAM ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (`/api/ps`) ΠΈ быстрая ΠΊΠ½ΠΎΠΏΠΊΠ° «⏏ Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ· VRAMΒ» (`keep_alive: 0`) для ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ освобоТдСния GPU. - **ΠšΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹**: ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ квантования (`Q4_K_M`, `Q8_0`), сСмСйства Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, контСкстного ΠΎΠΊΠ½Π° ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. --- ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY)