chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-23 16:50:24 +00:00
parent fb8bb22ee5
commit 012cbd7d21
2 changed files with 462 additions and 782 deletions

View File

@ -1,274 +1,80 @@
---
read_when:
- Вам потрібен довідник з налаштування моделей для кожного постачальника окремо
- Ви хочете приклади конфігурацій або команд онбордингу CLI для постачальників моделей
summary: Огляд постачальників моделей із прикладами конфігурацій + потоками CLI
title: Постачальники моделей
- Вам потрібен довідник із налаштування моделей для кожного провайдера окремо
- Вам потрібні приклади конфігурацій або команди первинного налаштування CLI для провайдерів моделей
summary: Огляд провайдера моделей із прикладами конфігурацій + потоками CLI
title: Провайдери моделей
x-i18n:
generated_at: "2026-04-22T03:53:22Z"
generated_at: "2026-04-23T16:48:22Z"
model: gpt-5.4
provider: openai
source_hash: c195cf5eafe277212aefb82483fe5daa6705a7e6534cf3612e7b5b20ac67adb7
source_hash: 29fcf755be64658ed7ff2489ec3fa828f6bb848a63646f341529a3d3f332c12b
source_path: concepts/model-providers.md
workflow: 15
---
# Постачальники моделей
# Провайдери моделей
Ця сторінка охоплює **постачальників LLM/моделей** (а не чат-канали на кшталт WhatsApp/Telegram).
Ця сторінка охоплює **провайдерів LLM/моделей** (а не канали чату, як-от WhatsApp/Telegram).
Правила вибору моделей див. у [/concepts/models](/uk/concepts/models).
## Швидкі правила
- Посилання на моделі використовують `provider/model` (приклад: `opencode/claude-opus-4-6`).
- Якщо ви встановите `agents.defaults.models`, це стане списком дозволених значень.
- `agents.defaults.models` працює як allowlist, якщо задано.
- Допоміжні команди CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
- Резервні правила середовища виконання, cooldown-перевірки та збереження перевизначень сесії
задокументовані в [/concepts/model-failover](/uk/concepts/model-failover).
- `models.providers.*.models[].contextWindow` — це нативні метадані моделі;
`models.providers.*.models[].contextTokens` — це фактичне обмеження середовища виконання.
- Плагіни постачальників можуть впроваджувати каталоги моделей через `registerProvider({ catalog })`;
OpenClaw об’єднує цей вивід у `models.providers` перед записом
`models.json`.
- Маніфести постачальників можуть оголошувати `providerAuthEnvVars` і
`providerAuthAliases`, щоб загальні перевірки автентифікації на основі env
та варіанти постачальників не потребували завантаження середовища виконання плагіна. Залишкова карта env-змінних у ядрі тепер
використовується лише для неплагінових/вбудованих постачальників і кількох випадків загального пріоритету, таких
як онбординг Anthropic із пріоритетом API-ключа.
- Плагіни постачальників також можуть володіти поведінкою середовища виконання постачальника через
`normalizeModelId`, `normalizeTransport`, `normalizeConfig`,
`applyNativeStreamingUsageCompat`, `resolveConfigApiKey`,
`resolveSyntheticAuth`, `shouldDeferSyntheticProfileAuth`,
`resolveDynamicModel`, `prepareDynamicModel`,
`normalizeResolvedModel`, `contributeResolvedModelCompat`,
`capabilities`, `normalizeToolSchemas`,
`inspectToolSchemas`, `resolveReasoningOutputMode`,
`prepareExtraParams`, `createStreamFn`, `wrapStreamFn`,
`resolveTransportTurnState`, `resolveWebSocketSessionPolicy`,
`createEmbeddingProvider`, `formatApiKey`, `refreshOAuth`,
`buildAuthDoctorHint`,
`matchesContextOverflowError`, `classifyFailoverReason`,
`isCacheTtlEligible`, `buildMissingAuthMessage`, `suppressBuiltInModel`,
`augmentModelCatalog`, `resolveThinkingProfile`, `isBinaryThinking`,
`supportsXHighThinking`, `resolveDefaultThinkingLevel`,
`applyConfigDefaults`, `isModernModelRef`,
`prepareRuntimeAuth`, `resolveUsageAuth`, `fetchUsageSnapshot`, і
`onModelSelected`.
- Примітка: runtime `capabilities` постачальника — це спільні метадані раннера (сімейство постачальника,
особливості стенограми/інструментів, підказки щодо транспорту/кешу). Це не те саме, що [публічна модель можливостей](/uk/plugins/architecture#public-capability-model),
яка описує, що реєструє плагін (текстовий inference, мовлення тощо).
- Вбудований постачальник `codex` поєднано з вбудованим агентним harness Codex.
Використовуйте `codex/gpt-*`, коли вам потрібні вхід, виявлення моделей, нативне відновлення потоку та виконання app-server, якими керує Codex.
Звичайні посилання `openai/gpt-*` і надалі використовують постачальника OpenAI та звичайний транспорт постачальника OpenClaw.
Розгортання лише з Codex можуть вимкнути автоматичний резервний перехід на PI за допомогою
`agents.defaults.embeddedHarness.fallback: "none"`; див.
[Codex Harness](/uk/plugins/codex-harness).
- `models.providers.*.models[].contextWindow` — це власні метадані моделі; `contextTokens` — це фактичне обмеження під час виконання.
- Правила резервного перемикання, перевірки cooldown і збереження перевизначень сеансу див.: [Перемикання моделей при відмові](/uk/concepts/model-failover).
- Вбудований `codex` поєднано з harness агента Codex — використовуйте `codex/gpt-*` для входу, виявлення, нативного відновлення потоків і виконання app-server, якими керує Codex. Звичайний `openai/gpt-*` використовує провайдера OpenAI і стандартний транспорт. Вимкніть автоматичний резервний перехід до PI для розгортань лише з Codex через `agents.defaults.embeddedHarness.fallback: "none"` — див. [Harness Codex](/uk/plugins/codex-harness).
## Поведінка постачальника, якою володіє Plugin
## Поведінка провайдера, якою керує Plugin
Тепер плагіни постачальників можуть володіти більшістю специфічної для постачальника логіки, тоді як OpenClaw зберігає
загальний цикл inference.
Більшість логіки, специфічної для провайдерів, живе у Plugin провайдерів (`registerProvider(...)`), тоді як OpenClaw зберігає загальний цикл інференсу. Plugin відповідають за первинне налаштування, каталоги моделей, зіставлення env-змінних автентифікації, нормалізацію транспорту/конфігурації, очищення схем інструментів, класифікацію failover, оновлення OAuth, звітування про використання, профілі thinking/reasoning тощо.
Типовий розподіл:
Повний список хуків provider-SDK і приклади вбудованих Plugin наведено в [Plugin провайдерів](/uk/plugins/sdk-provider-plugins). Провайдер, якому потрібен повністю спеціалізований виконавець запитів, є окремою, глибшою поверхнею розширення.
- `auth[].run` / `auth[].runNonInteractive`: постачальник володіє потоками онбордингу/входу
для `openclaw onboard`, `openclaw models auth` і безголового налаштування
- `wizard.setup` / `wizard.modelPicker`: постачальник володіє мітками вибору автентифікації,
застарілими псевдонімами, підказками списку дозволених значень для онбордингу та записами налаштування в онбордингу/виборі моделей
- `catalog`: постачальник з’являється в `models.providers`
- `normalizeModelId`: постачальник нормалізує застарілі/preview id моделей перед
пошуком або канонізацією
- `normalizeTransport`: постачальник нормалізує `api` / `baseUrl` сімейства транспорту
перед загальним збиранням моделі; OpenClaw спочатку перевіряє відповідного постачальника,
а потім інші плагіни постачальників, що підтримують цей хук, доки один із них справді не змінить
транспорт
- `normalizeConfig`: постачальник нормалізує конфігурацію `models.providers.<id>` перед
її використанням середовищем виконання; OpenClaw спочатку перевіряє відповідного постачальника, а потім інші
плагіни постачальників, що підтримують цей хук, доки один із них справді не змінить конфігурацію. Якщо жоден
хук постачальника не перепише конфігурацію, вбудовані допоміжні засоби сімейства Google все одно
нормалізують підтримувані записи постачальників Google.
- `applyNativeStreamingUsageCompat`: постачальник застосовує сумісні переписування нативного streaming usage для постачальників конфігурації, що залежать від endpoint
- `resolveConfigApiKey`: постачальник визначає автентифікацію env-marker для постачальників конфігурації
без примусового завантаження повної runtime-автентифікації. `amazon-bedrock` також має тут
вбудований AWS-резолвер env-marker, хоча runtime-автентифікація Bedrock використовує
ланцюжок значень за замовчуванням AWS SDK.
- `resolveSyntheticAuth`: постачальник може надавати доступність локальної/self-hosted або іншої
автентифікації на основі конфігурації без збереження відкритих секретів
- `shouldDeferSyntheticProfileAuth`: постачальник може позначати збережені заповнювачі синтетичного профілю
як нижчі за пріоритетом, ніж автентифікація на основі env/конфігурації
- `resolveDynamicModel`: постачальник приймає id моделей, яких ще немає в локальному
статичному каталозі
- `prepareDynamicModel`: постачальнику потрібно оновити метадані перед повторною спробою
динамічного визначення
- `normalizeResolvedModel`: постачальнику потрібні переписування транспорту або base URL
- `contributeResolvedModelCompat`: постачальник додає прапори сумісності для своїх
vendor-моделей, навіть коли вони надходять через інший сумісний транспорт
- `capabilities`: постачальник публікує особливості стенограми/інструментів/сімейства постачальника
- `normalizeToolSchemas`: постачальник очищає схеми інструментів до того, як вбудований
раннер їх побачить
- `inspectToolSchemas`: постачальник показує специфічні для транспорту попередження щодо схем
після нормалізації
- `resolveReasoningOutputMode`: постачальник обирає нативні чи позначені тегами
контракти виводу reasoning
- `prepareExtraParams`: постачальник встановлює типові значення або нормалізує параметри запиту для кожної моделі
- `createStreamFn`: постачальник замінює звичайний шлях stream повністю
кастомним транспортом
- `wrapStreamFn`: постачальник застосовує обгортки сумісності заголовків/тіла/моделі запиту
- `resolveTransportTurnState`: постачальник надає нативні заголовки або метадані
транспорту для кожного ходу
- `resolveWebSocketSessionPolicy`: постачальник надає нативні заголовки сесії WebSocket
або політику cooldown сесії
- `createEmbeddingProvider`: постачальник володіє поведінкою embedding для пам’яті, коли вона
належить до плагіна постачальника, а не до вбудованого комутатора embedding
- `formatApiKey`: постачальник форматує збережені профілі автентифікації в runtime-рядок
`apiKey`, який очікує транспорт
- `refreshOAuth`: постачальник володіє оновленням OAuth, коли спільних засобів оновлення `pi-ai`
недостатньо
- `buildAuthDoctorHint`: постачальник додає вказівки з виправлення, коли оновлення OAuth
завершується невдачею
- `matchesContextOverflowError`: постачальник розпізнає специфічні для постачальника
помилки переповнення context window, які пропустили б загальні евристики
- `classifyFailoverReason`: постачальник зіставляє специфічні для постачальника сирі помилки транспорту/API
з причинами failover, такими як rate limit або перевантаження
- `isCacheTtlEligible`: постачальник визначає, які id моделей вищого рівня підтримують TTL prompt-cache
- `buildMissingAuthMessage`: постачальник замінює загальну помилку сховища автентифікації
на специфічну для постачальника підказку з відновлення
- `suppressBuiltInModel`: постачальник приховує застарілі upstream-рядки та може повертати
помилку, що належить vendor, для збоїв прямого визначення
- `augmentModelCatalog`: постачальник додає синтетичні/фінальні рядки каталогу після
виявлення та об’єднання конфігурації
- `resolveThinkingProfile`: постачальник володіє точним набором рівнів `/think`,
необов’язковими мітками відображення та рівнем за замовчуванням для вибраної моделі
- `isBinaryThinking`: хук сумісності для бінарного UX thinking увімк./вимк.
- `supportsXHighThinking`: хук сумісності для вибраних моделей `xhigh`
- `resolveDefaultThinkingLevel`: хук сумісності для політики `/think` за замовчуванням
- `applyConfigDefaults`: постачальник застосовує глобальні значення за замовчуванням, специфічні для постачальника,
під час матеріалізації конфігурації на основі режиму автентифікації, env або сімейства моделей
- `isModernModelRef`: постачальник володіє зіставленням бажаних моделей для live/smoke
- `prepareRuntimeAuth`: постачальник перетворює налаштовані облікові дані на короткоживучий
runtime-токен
- `resolveUsageAuth`: постачальник визначає облікові дані usage/quota для `/usage`
та пов’язаних поверхонь стану/звітності
- `fetchUsageSnapshot`: постачальник володіє отриманням/розбором endpoint usage, тоді як
ядро й надалі володіє оболонкою підсумку та форматуванням
- `onModelSelected`: постачальник виконує побічні ефекти після вибору моделі, такі як
телеметрія або керування сесією, що належить постачальнику
Поточні вбудовані приклади:
- `anthropic`: резервна сумісність уперед для Claude 4.6, підказки з відновлення автентифікації, отримання
endpoint usage, метадані cache-TTL/сімейства постачальника та глобальні
значення конфігурації за замовчуванням, що враховують автентифікацію
- `amazon-bedrock`: відповідність переповнення контексту та класифікація
причин failover для специфічних для Bedrock помилок throttle/not-ready, плюс
спільне сімейство повторів `anthropic-by-model` для захисту replay-policy
лише для Claude на трафіку Anthropic
- `anthropic-vertex`: захист replay-policy лише для Claude на Anthropic-message
трафіку
- `openrouter`: наскрізні id моделей, обгортки запитів, підказки щодо можливостей постачальника,
очищення thought-signature Gemini на проксійованому трафіку Gemini,
ін’єкція reasoning для проксі через сімейство stream `openrouter-thinking`,
пересилання метаданих маршрутизації та політика cache-TTL
- `github-copilot`: онбординг/вхід через пристрій, резервна сумісність моделей уперед,
підказки стенограми для Claude-thinking, обмін runtime-токенами та отримання endpoint usage
- `openai`: резервна сумісність уперед для GPT-5.4, пряма нормалізація транспорту OpenAI,
підказки щодо відсутньої автентифікації з урахуванням Codex, придушення Spark, синтетичні
рядки каталогу OpenAI/Codex, політика thinking/live-model, нормалізація
псевдонімів токенів usage (`input` / `output` і сімейства `prompt` / `completion`), спільне
сімейство stream `openai-responses-defaults` для нативних обгорток OpenAI/Codex,
метадані сімейства постачальника, реєстрація вбудованого постачальника генерації зображень
для `gpt-image-2` і реєстрація вбудованого постачальника генерації відео
для `sora-2`
- `google` і `google-gemini-cli`: резервна сумісність уперед для Gemini 3.1,
нативна перевірка replay Gemini, очищення bootstrap replay, режим
виводу reasoning з тегами, зіставлення сучасних моделей, реєстрація вбудованого постачальника генерації зображень
для моделей Gemini image-preview і реєстрація вбудованого
постачальника генерації відео для моделей Veo; Gemini CLI OAuth також
володіє форматуванням токенів профілю автентифікації, розбором токенів usage і отриманням
endpoint quota для поверхонь usage
- `moonshot`: спільний транспорт, нормалізація payload thinking, якою володіє Plugin
- `kilocode`: спільний транспорт, заголовки запитів, якими володіє Plugin, нормалізація payload reasoning,
очищення thought-signature proxy-Gemini та політика cache-TTL
- `zai`: резервна сумісність уперед для GLM-5, значення за замовчуванням `tool_stream`, політика cache-TTL,
політика binary-thinking/live-model та автентифікація usage + отримання quota;
невідомі id `glm-5*` синтезуються з вбудованого шаблону `glm-4.7`
- `xai`: нативна нормалізація транспорту Responses, переписування псевдонімів `/fast` для
швидких варіантів Grok, стандартний `tool_stream`, очищення схем інструментів /
payload reasoning, специфічне для xAI, та реєстрація вбудованого постачальника генерації відео
для `grok-imagine-video`
- `mistral`: метадані можливостей, якими володіє Plugin
- `opencode` і `opencode-go`: метадані можливостей, якими володіє Plugin, плюс
очищення thought-signature proxy-Gemini
- `alibaba`: каталог генерації відео, яким володіє Plugin, для прямих посилань на моделі Wan
на кшталт `alibaba/wan2.6-t2v`
- `byteplus`: каталоги, якими володіє Plugin, плюс реєстрація вбудованого постачальника генерації відео
для моделей Seedance text-to-video/image-to-video
- `fal`: реєстрація вбудованого постачальника генерації відео для розміщених сторонніх
моделей, реєстрація постачальника генерації зображень для моделей зображень FLUX плюс реєстрація вбудованого
постачальника генерації відео для розміщених сторонніх відеомоделей
- `cloudflare-ai-gateway`, `huggingface`, `kimi`, `nvidia`, `qianfan`,
`stepfun`, `synthetic`, `venice`, `vercel-ai-gateway` і `volcengine`:
лише каталоги, якими володіє Plugin
- `qwen`: каталоги текстових моделей, якими володіє Plugin, плюс спільні
реєстрації постачальників для мультимодальних поверхонь, пов’язаних із розумінням медіа та генерацією відео; генерація відео Qwen використовує стандартні відеоendpoint-и DashScope зі
вбудованими моделями Wan, такими як `wan2.6-t2v` і `wan2.7-r2v`
- `runway`: реєстрація постачальника генерації відео, якою володіє Plugin, для нативних
моделей Runway на основі задач, таких як `gen4.5`
- `minimax`: каталоги, якими володіє Plugin, реєстрація вбудованого постачальника генерації відео
для відеомоделей Hailuo, реєстрація вбудованого постачальника генерації зображень
для `image-01`, вибір hybrid Anthropic/OpenAI replay-policy та логіка
usage auth/snapshot
- `together`: каталоги, якими володіє Plugin, плюс реєстрація вбудованого постачальника генерації відео
для відеомоделей Wan
- `xiaomi`: каталоги, якими володіє Plugin, плюс логіка usage auth/snapshot
Вбудований плагін `openai` тепер володіє обома id постачальників: `openai` і
`openai-codex`.
Це охоплює постачальників, які все ще вписуються у звичайні транспорти OpenClaw. Постачальник,
якому потрібен повністю кастомний виконавець запитів, — це окрема, глибша поверхня розширення.
<Note>
`capabilities` середовища виконання провайдера — це спільні метадані runner-а (сімейство провайдера, особливості транскриптів/інструментів, підказки щодо транспорту/кешу). Це не те саме, що [публічна модель можливостей](/uk/plugins/architecture#public-capability-model), яка описує, що реєструє Plugin (текстовий інференс, мовлення тощо).
</Note>
## Ротація API-ключів
- Підтримує загальну ротацію постачальників для вибраних постачальників.
- Підтримує загальну ротацію ключів провайдерів для вибраних провайдерів.
- Налаштуйте кілька ключів через:
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (одне live-перевизначення, найвищий пріоритет)
- `<PROVIDER>_API_KEYS` (список, розділений комами або крапками з комою)
- `<PROVIDER>_API_KEYS` (список через кому або крапку з комою)
- `<PROVIDER>_API_KEY` (основний ключ)
- `<PROVIDER>_API_KEY_*` (нумерований список, наприклад `<PROVIDER>_API_KEY_1`)
- Для постачальників Google `GOOGLE_API_KEY` також включається як резервний варіант.
- Для провайдерів Google також використовується `GOOGLE_API_KEY` як резервний варіант.
- Порядок вибору ключів зберігає пріоритет і прибирає дублікати значень.
- Запити повторюються з наступним ключем лише у відповідь на rate-limit
responses (наприклад `429`, `rate_limit`, `quota`, `resource exhausted`, `Too many
- Запити повторюються з наступним ключем лише у відповідь на rate-limit помилки (наприклад `429`, `rate_limit`, `quota`, `resource exhausted`, `Too many
concurrent requests`, `ThrottlingException`, `concurrency limit reached`,
`workers_ai ... quota limit exceeded` або періодичні повідомлення про ліміт usage).
- Збої, не пов’язані з rate-limit, завершуються негайно; ротація ключів не виконується.
- Коли всі можливі ключі зазнають невдачі, повертається фінальна помилка з останньої спроби.
`workers_ai ... quota limit exceeded` або періодичні повідомлення про ліміт використання).
- Помилки, не пов’язані з rate-limit, завершуються одразу; ротація ключів не виконується.
- Якщо всі доступні ключі не спрацьовують, повертається фінальна помилка з останньої спроби.
## Вбудовані постачальники (каталог pi-ai)
## Вбудовані провайдери (каталог pi-ai)
OpenClaw постачається з каталогом piai. Для цих постачальників **не потрібна**
конфігурація `models.providers`; просто налаштуйте автентифікацію та виберіть модель.
OpenClaw постачається з каталогом piai. Для цих провайдерів **не**
потрібна конфігурація `models.providers`; достатньо налаштувати автентифікацію й вибрати модель.
### OpenAI
- Постачальник: `openai`
- Провайдер: `openai`
- Автентифікація: `OPENAI_API_KEY`
- Необов’язкова ротація: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, а також `OPENCLAW_LIVE_OPENAI_KEY` (одне перевизначення)
- Приклади моделей: `openai/gpt-5.4`, `openai/gpt-5.4-pro`
- CLI: `openclaw onboard --auth-choice openai-api-key`
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, потім резервний SSE)
- Перевизначення для кожної моделі через `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- Розігрів OpenAI Responses WebSocket за замовчуванням увімкнено через `params.openaiWsWarmup` (`true`/`false`)
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, потім SSE як резервний варіант)
- Перевизначення для конкретної моделі через `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- Прогрів OpenAI Responses WebSocket за замовчуванням увімкнено через `params.openaiWsWarmup` (`true`/`false`)
- Пріоритетну обробку OpenAI можна ввімкнути через `agents.defaults.models["openai/<model>"].params.serviceTier`
- `/fast` і `params.fastMode` зіставляють прямі запити Responses `openai/*` з `service_tier=priority` на `api.openai.com`
- Використовуйте `params.serviceTier`, якщо вам потрібен явний рівень замість спільного перемикача `/fast`
- `/fast` і `params.fastMode` напряму зіставляють запити `openai/*` Responses із `service_tier=priority` на `api.openai.com`
- Використовуйте `params.serviceTier`, якщо вам потрібен явний tier замість спільного перемикача `/fast`
- Приховані заголовки атрибуції OpenClaw (`originator`, `version`,
`User-Agent`) застосовуються лише до нативного трафіку OpenAI на `api.openai.com`, а не до
загальних проксі, сумісних з OpenAI
- Нативні маршрути OpenAI також зберігають `store` Responses, підказки prompt-cache та
формування payload для сумісності reasoning OpenAI; проксі-маршрути — ні
- `openai/gpt-5.3-codex-spark` навмисно придушено в OpenClaw, оскільки live OpenAI API його відхиляє; Spark вважається лише Codex
`User-Agent`) застосовуються лише до нативного трафіку OpenAI на `api.openai.com`, а не до загальних OpenAI-сумісних proxy
- Нативні маршрути OpenAI також зберігають `store` Responses, підказки кешу prompt і формування payload для сумісності з reasoning OpenAI; proxy-маршрути цього не роблять
- `openai/gpt-5.3-codex-spark` навмисно приховано в OpenClaw, оскільки live API OpenAI його відхиляє; Spark вважається доступним лише для Codex
```json5
{
@ -278,14 +84,14 @@ OpenClaw постачається з каталогом piai. Для цих
### Anthropic
- Постачальник: `anthropic`
- Провайдер: `anthropic`
- Автентифікація: `ANTHROPIC_API_KEY`
- Необов’язкова ротація: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, а також `OPENCLAW_LIVE_ANTHROPIC_KEY` (одне перевизначення)
- Приклад моделі: `anthropic/claude-opus-4-6`
- CLI: `openclaw onboard --auth-choice apiKey`
- Прямі публічні запити Anthropic також підтримують спільний перемикач `/fast` і `params.fastMode`, зокрема трафік з автентифікацією через API-ключ і OAuth, надісланий на `api.anthropic.com`; OpenClaw зіставляє це з Anthropic `service_tier` (`auto` проти `standard_only`)
- Примітка щодо Anthropic: співробітники Anthropic повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволене, тому OpenClaw розглядає повторне використання Claude CLI і `claude -p` як санкціоновані для цієї інтеграції, якщо Anthropic не опублікує нову політику.
- Токен налаштування Anthropic залишається доступним як підтримуваний шлях токена OpenClaw, але тепер OpenClaw віддає перевагу повторному використанню Claude CLI і `claude -p`, коли вони доступні.
- Прямі публічні запити Anthropic підтримують спільний перемикач `/fast` і `params.fastMode`, зокрема для трафіку з API-ключем та OAuth-автентифікацією, надісланого до `api.anthropic.com`; OpenClaw зіставляє це з Anthropic `service_tier` (`auto` проти `standard_only`)
- Примітка щодо Anthropic: співробітники Anthropic повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволене, тому OpenClaw вважає повторне використання Claude CLI і `claude -p` санкціонованими для цієї інтеграції, якщо Anthropic не опублікує нову політику.
- Токен налаштування Anthropic залишається доступним як підтримуваний шлях токена OpenClaw, але тепер OpenClaw надає перевагу повторному використанню Claude CLI та `claude -p`, коли це доступно.
```json5
{
@ -295,20 +101,20 @@ OpenClaw постачається з каталогом piai. Для цих
### OpenAI Code (Codex)
- Постачальник: `openai-codex`
- Провайдер: `openai-codex`
- Автентифікація: OAuth (ChatGPT)
- Приклад моделі: `openai-codex/gpt-5.4`
- CLI: `openclaw onboard --auth-choice openai-codex` або `openclaw models auth login --provider openai-codex`
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, потім резервний SSE)
- Перевизначення для кожної моделі через `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, потім SSE як резервний варіант)
- Перевизначення для конкретної моделі через `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- `params.serviceTier` також пересилається в нативних запитах Codex Responses (`chatgpt.com/backend-api`)
- Приховані заголовки атрибуції OpenClaw (`originator`, `version`,
`User-Agent`) додаються лише до нативного трафіку Codex на
`chatgpt.com/backend-api`, а не до загальних проксі, сумісних з OpenAI
- Спільно використовує той самий перемикач `/fast` і конфігурацію `params.fastMode`, що й прямий `openai/*`; OpenClaw зіставляє це з `service_tier=priority`
- `openai-codex/gpt-5.3-codex-spark` залишається доступним, коли каталог OAuth Codex його надає; залежить від entitlement
- `openai-codex/gpt-5.4` зберігає нативні `contextWindow = 1050000` і стандартні runtime `contextTokens = 272000`; перевизначте runtime-обмеження через `models.providers.openai-codex.models[].contextTokens`
- Примітка щодо політики: OpenAI Codex OAuth явно підтримується для зовнішніх інструментів/робочих процесів на кшталт OpenClaw.
`chatgpt.com/backend-api`, а не до загальних OpenAI-сумісних proxy
- Використовує той самий перемикач `/fast` і конфігурацію `params.fastMode`, що й прямий `openai/*`; OpenClaw зіставляє це з `service_tier=priority`
- `openai-codex/gpt-5.3-codex-spark` залишається доступною, коли каталог OAuth Codex її показує; залежить від прав доступу
- `openai-codex/gpt-5.4` зберігає нативне `contextWindow = 1050000` і стандартне робоче `contextTokens = 272000`; перевизначте робоче обмеження через `models.providers.openai-codex.models[].contextTokens`
- Примітка щодо політики: OAuth OpenAI Codex явно підтримується для зовнішніх інструментів/процесів на кшталт OpenClaw.
```json5
{
@ -330,15 +136,15 @@ OpenClaw постачається з каталогом piai. Для цих
### Інші розміщені варіанти у стилі підписки
- [Qwen Cloud](/uk/providers/qwen): поверхня постачальника Qwen Cloud плюс зіставлення endpoint-ів Alibaba DashScope і Coding Plan
- [MiniMax](/uk/providers/minimax): OAuth або доступ за API-ключем для MiniMax Coding Plan
- [GLM Models](/uk/providers/glm): Z.AI Coding Plan або загальні API endpoint-и
- [Qwen Cloud](/uk/providers/qwen): поверхня провайдера Qwen Cloud, а також зіставлення кінцевих точок Alibaba DashScope і Coding Plan
- [MiniMax](/uk/providers/minimax): доступ через OAuth або API-ключ MiniMax Coding Plan
- [GLM Models](/uk/providers/glm): кінцеві точки Z.AI Coding Plan або загального API
### OpenCode
- Автентифікація: `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`)
- Постачальник середовища виконання Zen: `opencode`
- Постачальник середовища виконання Go: `opencode-go`
- Провайдер середовища виконання Zen: `opencode`
- Провайдер середовища виконання Go: `opencode-go`
- Приклади моделей: `opencode/claude-opus-4-6`, `opencode-go/kimi-k2.5`
- CLI: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`
@ -350,46 +156,46 @@ OpenClaw постачається з каталогом piai. Для цих
### Google Gemini (API-ключ)
- Постачальник: `google`
- Провайдер: `google`
- Автентифікація: `GEMINI_API_KEY`
- Необов’язкова ротація: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, резервний варіант `GOOGLE_API_KEY` і `OPENCLAW_LIVE_GEMINI_KEY` (одне перевизначення)
- Приклади моделей: `google/gemini-3.1-pro-preview`, `google/gemini-3-flash-preview`
- Сумісність: застаріла конфігурація OpenClaw з `google/gemini-3.1-flash-preview` нормалізується до `google/gemini-3-flash-preview`
- CLI: `openclaw onboard --auth-choice gemini-api-key`
- Прямі запуски Gemini також приймають `agents.defaults.models["google/<model>"].params.cachedContent`
(або застарілий `cached_content`) для пересилання нативного для постачальника
дескриптора `cachedContents/...`; cache hits Gemini відображаються як `cacheRead` OpenClaw
(або застаріле `cached_content`) для пересилання нативного
дескриптора `cachedContents/...`; попадання в кеш Gemini відображаються як OpenClaw `cacheRead`
### Google Vertex і Gemini CLI
- Постачальники: `google-vertex`, `google-gemini-cli`
- Автентифікація: Vertex використовує gcloud ADC; Gemini CLI використовує власний OAuth-потік
- Застереження: Gemini CLI OAuth в OpenClaw — це неофіційна інтеграція. Деякі користувачі повідомляли про обмеження облікового запису Google після використання сторонніх клієнтів. Ознайомтеся з умовами Google і використовуйте некритичний обліковий запис, якщо вирішите продовжити.
- Gemini CLI OAuth постачається як частина вбудованого плагіна `google`.
- Провайдери: `google-vertex`, `google-gemini-cli`
- Автентифікація: Vertex використовує gcloud ADC; Gemini CLI використовує власний OAuth-процес
- Застереження: OAuth Gemini CLI в OpenClaw є неофіційною інтеграцією. Деякі користувачі повідомляли про обмеження облікового запису Google після використання сторонніх клієнтів. Ознайомтеся з умовами Google і використовуйте некритичний обліковий запис, якщо вирішите продовжити.
- OAuth Gemini CLI постачається як частина вбудованого Plugin `google`.
- Спочатку встановіть Gemini CLI:
- `brew install gemini-cli`
- або `npm install -g @google/gemini-cli`
- Увімкнення: `openclaw plugins enable google`
- Вхід: `openclaw models auth login --provider google-gemini-cli --set-default`
- Увімкніть: `openclaw plugins enable google`
- Увійдіть: `openclaw models auth login --provider google-gemini-cli --set-default`
- Модель за замовчуванням: `google-gemini-cli/gemini-3-flash-preview`
- Примітка: ви **не** вставляєте client id або secret у `openclaw.json`. Потік входу CLI зберігає
- Примітка: вам **не потрібно** вставляти client id або secret у `openclaw.json`. Потік входу CLI зберігає
токени в профілях автентифікації на хості Gateway.
- Якщо після входу запити не працюють, установіть `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості Gateway.
- JSON-відповіді Gemini CLI розбираються з `response`; usage резервно береться з
`stats`, при цьому `stats.cached` нормалізується в OpenClaw `cacheRead`.
- Якщо після входу запити не працюють, задайте `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості Gateway.
- JSON-відповіді Gemini CLI розбираються з `response`; дані про використання беруться з резервного поля
`stats`, а `stats.cached` нормалізується в OpenClaw `cacheRead`.
### Z.AI (GLM)
- Постачальник: `zai`
- Провайдер: `zai`
- Автентифікація: `ZAI_API_KEY`
- Приклад моделі: `zai/glm-5.1`
- CLI: `openclaw onboard --auth-choice zai-api-key`
- Псевдоніми: `z.ai/*` і `z-ai/*` нормалізуються до `zai/*`
- `zai-api-key` автоматично визначає відповідний endpoint Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` і `zai-cn` примусово вибирають конкретну поверхню
- `zai-api-key` автоматично виявляє відповідну кінцеву точку Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` і `zai-cn` примусово задають конкретну поверхню
### Vercel AI Gateway
- Постачальник: `vercel-ai-gateway`
- Провайдер: `vercel-ai-gateway`
- Автентифікація: `AI_GATEWAY_API_KEY`
- Приклади моделей: `vercel-ai-gateway/anthropic/claude-opus-4.6`,
`vercel-ai-gateway/moonshotai/kimi-k2.6`
@ -397,105 +203,74 @@ OpenClaw постачається з каталогом piai. Для цих
### Kilo Gateway
- Постачальник: `kilocode`
- Провайдер: `kilocode`
- Автентифікація: `KILOCODE_API_KEY`
- Приклад моделі: `kilocode/kilo/auto`
- CLI: `openclaw onboard --auth-choice kilocode-api-key`
- Base URL: `https://api.kilo.ai/api/gateway/`
- Базовий URL: `https://api.kilo.ai/api/gateway/`
- Статичний резервний каталог постачається з `kilocode/kilo/auto`; live
виявлення `https://api.kilo.ai/api/gateway/models` може додатково розширити runtime
каталог.
- Точна маршрутизація на upstream за `kilocode/kilo/auto` належить Kilo Gateway,
а не жорстко закодована в OpenClaw.
виявлення через `https://api.kilo.ai/api/gateway/models` може додатково розширити каталог середовища виконання.
- Точна логіка маршрутизації вгору за потоком для `kilocode/kilo/auto` належить Kilo Gateway,
а не жорстко задана в OpenClaw.
Деталі налаштування див. у [/providers/kilocode](/uk/providers/kilocode).
Докладніше про налаштування див. у [/providers/kilocode](/uk/providers/kilocode).
### Інші вбудовані плагіни постачальників
### Інші вбудовані Plugin провайдерів
- OpenRouter: `openrouter` (`OPENROUTER_API_KEY`)
- Приклади моделей: `openrouter/auto`, `openrouter/moonshotai/kimi-k2.6`
- OpenClaw застосовує задокументовані заголовки атрибуції застосунку OpenRouter лише тоді, коли
запит справді спрямовано на `openrouter.ai`
- Специфічні для OpenRouter маркери Anthropic `cache_control` так само обмежуються
перевіреними маршрутами OpenRouter, а не довільними URL проксі
- OpenRouter залишається на проксі-шляху у стилі OpenAI-compatible, тому нативне
формування запитів лише для OpenAI (`serviceTier`, Responses `store`,
підказки prompt-cache, payload-и сумісності reasoning OpenAI) не пересилається
- Посилання OpenRouter на основі Gemini зберігають лише очищення thought-signature proxy-Gemini;
нативна перевірка replay Gemini і переписування bootstrap залишаються вимкненими
- Kilo Gateway: `kilocode` (`KILOCODE_API_KEY`)
- Приклад моделі: `kilocode/kilo/auto`
- Посилання Kilo на основі Gemini зберігають той самий шлях очищення thought-signature
proxy-Gemini; `kilocode/kilo/auto` та інші підказки, де proxy-reasoning не підтримується,
пропускають ін’єкцію proxy reasoning
- MiniMax: `minimax` (API-ключ) і `minimax-portal` (OAuth)
- Автентифікація: `MINIMAX_API_KEY` для `minimax`; `MINIMAX_OAUTH_TOKEN` або `MINIMAX_API_KEY` для `minimax-portal`
- Приклад моделі: `minimax/MiniMax-M2.7` або `minimax-portal/MiniMax-M2.7`
- Налаштування MiniMax через онбординг/API-ключ записує явні визначення моделі M2.7 з
`input: ["text", "image"]`; вбудований каталог постачальника зберігає чат-посилання
лише текстовими, доки ця конфігурація постачальника не буде матеріалізована
- Moonshot: `moonshot` (`MOONSHOT_API_KEY`)
- Приклад моделі: `moonshot/kimi-k2.6`
- Kimi Coding: `kimi` (`KIMI_API_KEY` або `KIMICODE_API_KEY`)
- Приклад моделі: `kimi/kimi-code`
- Qianfan: `qianfan` (`QIANFAN_API_KEY`)
- Приклад моделі: `qianfan/deepseek-v3.2`
- Qwen Cloud: `qwen` (`QWEN_API_KEY`, `MODELSTUDIO_API_KEY` або `DASHSCOPE_API_KEY`)
- Приклад моделі: `qwen/qwen3.5-plus`
- NVIDIA: `nvidia` (`NVIDIA_API_KEY`)
- Приклад моделі: `nvidia/nvidia/llama-3.1-nemotron-70b-instruct`
- StepFun: `stepfun` / `stepfun-plan` (`STEPFUN_API_KEY`)
- Приклади моделей: `stepfun/step-3.5-flash`, `stepfun-plan/step-3.5-flash-2603`
- Together: `together` (`TOGETHER_API_KEY`)
- Приклад моделі: `together/moonshotai/Kimi-K2.5`
- Venice: `venice` (`VENICE_API_KEY`)
- Xiaomi: `xiaomi` (`XIAOMI_API_KEY`)
- Приклад моделі: `xiaomi/mimo-v2-flash`
- Vercel AI Gateway: `vercel-ai-gateway` (`AI_GATEWAY_API_KEY`)
- Hugging Face Inference: `huggingface` (`HUGGINGFACE_HUB_TOKEN` або `HF_TOKEN`)
- Cloudflare AI Gateway: `cloudflare-ai-gateway` (`CLOUDFLARE_AI_GATEWAY_API_KEY`)
- Volcengine: `volcengine` (`VOLCANO_ENGINE_API_KEY`)
- Приклад моделі: `volcengine-plan/ark-code-latest`
- BytePlus: `byteplus` (`BYTEPLUS_API_KEY`)
- Приклад моделі: `byteplus-plan/ark-code-latest`
- xAI: `xai` (`XAI_API_KEY`)
- Нативні вбудовані запити xAI використовують шлях xAI Responses
- `/fast` або `params.fastMode: true` переписують `grok-3`, `grok-3-mini`,
`grok-4` і `grok-4-0709` на їхні варіанти `*-fast`
- `tool_stream` увімкнено за замовчуванням; установіть
`agents.defaults.models["xai/<model>"].params.tool_stream` у `false`, щоб
вимкнути його
- Mistral: `mistral` (`MISTRAL_API_KEY`)
- Приклад моделі: `mistral/mistral-large-latest`
- CLI: `openclaw onboard --auth-choice mistral-api-key`
- Groq: `groq` (`GROQ_API_KEY`)
- Cerebras: `cerebras` (`CEREBRAS_API_KEY`)
- Моделі GLM у Cerebras використовують id `zai-glm-4.7` і `zai-glm-4.6`.
- Base URL, сумісний з OpenAI: `https://api.cerebras.ai/v1`.
- GitHub Copilot: `github-copilot` (`COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN`)
- Приклад моделі Hugging Face Inference: `huggingface/deepseek-ai/DeepSeek-R1`; CLI: `openclaw onboard --auth-choice huggingface-api-key`. Див. [Hugging Face (Inference)](/uk/providers/huggingface).
| Провайдер | Id | Auth env | Приклад моделі |
| ----------------------- | -------------------------------- | ------------------------------------------------------------ | ----------------------------------------------- |
| BytePlus | `byteplus` / `byteplus-plan` | `BYTEPLUS_API_KEY` | `byteplus-plan/ark-code-latest` |
| Cerebras | `cerebras` | `CEREBRAS_API_KEY` | `cerebras/zai-glm-4.7` |
| Cloudflare AI Gateway | `cloudflare-ai-gateway` | `CLOUDFLARE_AI_GATEWAY_API_KEY` | — |
| GitHub Copilot | `github-copilot` | `COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN` | — |
| Groq | `groq` | `GROQ_API_KEY` | — |
| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` or `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` |
| Kilo Gateway | `kilocode` | `KILOCODE_API_KEY` | `kilocode/kilo/auto` |
| Kimi Coding | `kimi` | `KIMI_API_KEY` or `KIMICODE_API_KEY` | `kimi/kimi-code` |
| MiniMax | `minimax` / `minimax-portal` | `MINIMAX_API_KEY` / `MINIMAX_OAUTH_TOKEN` | `minimax/MiniMax-M2.7` |
| Mistral | `mistral` | `MISTRAL_API_KEY` | `mistral/mistral-large-latest` |
| Moonshot | `moonshot` | `MOONSHOT_API_KEY` | `moonshot/kimi-k2.6` |
| NVIDIA | `nvidia` | `NVIDIA_API_KEY` | `nvidia/nvidia/llama-3.1-nemotron-70b-instruct` |
| OpenRouter | `openrouter` | `OPENROUTER_API_KEY` | `openrouter/auto` |
| Qianfan | `qianfan` | `QIANFAN_API_KEY` | `qianfan/deepseek-v3.2` |
| Qwen Cloud | `qwen` | `QWEN_API_KEY` / `MODELSTUDIO_API_KEY` / `DASHSCOPE_API_KEY` | `qwen/qwen3.5-plus` |
| StepFun | `stepfun` / `stepfun-plan` | `STEPFUN_API_KEY` | `stepfun/step-3.5-flash` |
| Together | `together` | `TOGETHER_API_KEY` | `together/moonshotai/Kimi-K2.5` |
| Venice | `venice` | `VENICE_API_KEY` | — |
| Vercel AI Gateway | `vercel-ai-gateway` | `AI_GATEWAY_API_KEY` | `vercel-ai-gateway/anthropic/claude-opus-4.6` |
| Volcano Engine (Doubao) | `volcengine` / `volcengine-plan` | `VOLCANO_ENGINE_API_KEY` | `volcengine-plan/ark-code-latest` |
| xAI | `xai` | `XAI_API_KEY` | `xai/grok-4` |
| Xiaomi | `xiaomi` | `XIAOMI_API_KEY` | `xiaomi/mimo-v2-flash` |
## Постачальники через `models.providers` (кастомний/base URL)
Варто знати такі особливості:
Використовуйте `models.providers` (або `models.json`), щоб додати **кастомних** постачальників або
проксі, сумісні з OpenAI/Anthropic.
- **OpenRouter** застосовує свої заголовки атрибуції застосунку і маркери Anthropic `cache_control` лише на перевірених маршрутах `openrouter.ai`. Як proxy-подібний OpenAI-сумісний шлях, він пропускає формування, притаманне лише нативному OpenAI (`serviceTier`, Responses `store`, підказки кешу prompt, сумісність reasoning OpenAI). Посилання з Gemini у бекенді зберігають лише очищення thought-signature для proxy-Gemini.
- **Kilo Gateway** для посилань із Gemini у бекенді дотримується того самого шляху очищення proxy-Gemini; `kilocode/kilo/auto` та інші посилання, де proxy не підтримує reasoning, пропускають ін’єкцію reasoning для proxy.
- **MiniMax** під час первинного налаштування через API-ключ записує явні визначення моделей M2.7 з `input: ["text", "image"]`; вбудований каталог зберігає chat-посилання як text-only, доки цю конфігурацію не буде матеріалізовано.
- **xAI** використовує шлях xAI Responses. `/fast` або `params.fastMode: true` переписує `grok-3`, `grok-3-mini`, `grok-4` і `grok-4-0709` на їхні варіанти `*-fast`. `tool_stream` увімкнено за замовчуванням; вимкніть через `agents.defaults.models["xai/<model>"].params.tool_stream=false`.
- **Cerebras** моделі GLM використовують `zai-glm-4.7` / `zai-glm-4.6`; OpenAI-сумісний базовий URL — `https://api.cerebras.ai/v1`.
Багато вбудованих плагінів постачальників нижче вже публікують каталог за замовчуванням.
## Провайдери через `models.providers` (custom/base URL)
Використовуйте `models.providers` (або `models.json`), щоб додати **власні** провайдери або
OpenAI/Anthropicсумісні proxy.
Багато з наведених нижче вбудованих Plugin провайдерів уже публікують стандартний каталог.
Використовуйте явні записи `models.providers.<id>` лише тоді, коли хочете перевизначити
base URL, заголовки або список моделей за замовчуванням.
стандартний base URL, заголовки або список моделей.
### Moonshot AI (Kimi)
Moonshot постачається як вбудований плагін постачальника. Використовуйте вбудованого постачальника
Moonshot постачається як вбудований Plugin провайдера. Використовуйте вбудований провайдер
за замовчуванням і додавайте явний запис `models.providers.moonshot` лише тоді, коли
потрібно перевизначити base URL або метадані моделі:
- Постачальник: `moonshot`
- Провайдер: `moonshot`
- Автентифікація: `MOONSHOT_API_KEY`
- Приклад моделі: `moonshot/kimi-k2.6`
- CLI: `openclaw onboard --auth-choice moonshot-api-key` або `openclaw onboard --auth-choice moonshot-api-key-cn`
ID моделей Kimi K2:
Id моделей Kimi K2:
[//]: # "moonshot-kimi-k2-model-refs:start"
@ -528,9 +303,9 @@ ID моделей Kimi K2:
### Kimi Coding
Kimi Coding використовує endpoint Moonshot AI, сумісний з Anthropic:
Kimi Coding використовує Anthropic-сумісну кінцеву точку Moonshot AI:
- Постачальник: `kimi`
- Провайдер: `kimi`
- Автентифікація: `KIMI_API_KEY`
- Приклад моделі: `kimi/kimi-code`
@ -543,13 +318,13 @@ Kimi Coding використовує endpoint Moonshot AI, сумісний з A
}
```
Застарілий `kimi/k2p5` і далі приймається як сумісний id моделі.
Застарілий `kimi/k2p5` як і раніше приймається як id моделі для сумісності.
### Volcano Engine (Doubao)
Volcano Engine (火山引擎) надає доступ до Doubao та інших моделей у Китаї.
- Постачальник: `volcengine` (coding: `volcengine-plan`)
- Провайдер: `volcengine` (для coding: `volcengine-plan`)
- Автентифікація: `VOLCANO_ENGINE_API_KEY`
- Приклад моделі: `volcengine-plan/ark-code-latest`
- CLI: `openclaw onboard --auth-choice volcengine-api-key`
@ -562,13 +337,13 @@ Volcano Engine (火山引擎) надає доступ до Doubao та інши
}
```
Під час онбордингу за замовчуванням вибирається coding-поверхня, але загальний каталог `volcengine/*`
Під час первинного налаштування за замовчуванням використовується поверхня coding, але загальний каталог `volcengine/*`
реєструється одночасно.
У засобах вибору моделі onboarding/configure варіант автентифікації Volcengine надає перевагу як
рядкам `volcengine/*`, так і `volcengine-plan/*`. Якщо ці моделі ще не завантажені,
У засобах вибору моделі під час первинного налаштування/конфігурації варіант автентифікації Volcengine надає перевагу рядкам
`volcengine/*` і `volcengine-plan/*`. Якщо ці моделі ще не завантажено,
OpenClaw повертається до нефільтрованого каталогу замість показу порожнього
засобу вибору в межах постачальника.
засобу вибору, обмеженого провайдером.
Доступні моделі:
@ -578,7 +353,7 @@ OpenClaw повертається до нефільтрованого катал
- `volcengine/glm-4-7-251222` (GLM 4.7)
- `volcengine/deepseek-v3-2-251201` (DeepSeek V3.2 128K)
Моделі для coding (`volcengine-plan`):
Моделі coding (`volcengine-plan`):
- `volcengine-plan/ark-code-latest`
- `volcengine-plan/doubao-seed-code`
@ -590,7 +365,7 @@ OpenClaw повертається до нефільтрованого катал
BytePlus ARK надає міжнародним користувачам доступ до тих самих моделей, що й Volcano Engine.
- Постачальник: `byteplus` (coding: `byteplus-plan`)
- Провайдер: `byteplus` (для coding: `byteplus-plan`)
- Автентифікація: `BYTEPLUS_API_KEY`
- Приклад моделі: `byteplus-plan/ark-code-latest`
- CLI: `openclaw onboard --auth-choice byteplus-api-key`
@ -603,13 +378,13 @@ BytePlus ARK надає міжнародним користувачам дост
}
```
Під час онбордингу за замовчуванням вибирається coding-поверхня, але загальний каталог `byteplus/*`
Під час первинного налаштування за замовчуванням використовується поверхня coding, але загальний каталог `byteplus/*`
реєструється одночасно.
У засобах вибору моделі onboarding/configure варіант автентифікації BytePlus надає перевагу як
рядкам `byteplus/*`, так і `byteplus-plan/*`. Якщо ці моделі ще не завантажені,
У засобах вибору моделі під час первинного налаштування/конфігурації варіант автентифікації BytePlus надає перевагу рядкам
`byteplus/*` і `byteplus-plan/*`. Якщо ці моделі ще не завантажено,
OpenClaw повертається до нефільтрованого каталогу замість показу порожнього
засобу вибору в межах постачальника.
засобу вибору, обмеженого провайдером.
Доступні моделі:
@ -617,7 +392,7 @@ OpenClaw повертається до нефільтрованого катал
- `byteplus/kimi-k2-5-260127` (Kimi K2.5)
- `byteplus/glm-4-7-251222` (GLM 4.7)
Моделі для coding (`byteplus-plan`):
Моделі coding (`byteplus-plan`):
- `byteplus-plan/ark-code-latest`
- `byteplus-plan/doubao-seed-code`
@ -627,9 +402,9 @@ OpenClaw повертається до нефільтрованого катал
### Synthetic
Synthetic надає моделі, сумісні з Anthropic, через постачальника `synthetic`:
Synthetic надає Anthropic-сумісні моделі через провайдера `synthetic`:
- Постачальник: `synthetic`
- Провайдер: `synthetic`
- Автентифікація: `SYNTHETIC_API_KEY`
- Приклад моделі: `synthetic/hf:MiniMaxAI/MiniMax-M2.5`
- CLI: `openclaw onboard --auth-choice synthetic-api-key`
@ -655,37 +430,37 @@ Synthetic надає моделі, сумісні з Anthropic, через по
### MiniMax
MiniMax налаштовується через `models.providers`, оскільки використовує кастомні endpoint-и:
MiniMax налаштовується через `models.providers`, оскільки використовує власні кінцеві точки:
- MiniMax OAuth (Global): `--auth-choice minimax-global-oauth`
- MiniMax OAuth (глобальний): `--auth-choice minimax-global-oauth`
- MiniMax OAuth (CN): `--auth-choice minimax-cn-oauth`
- API-ключ MiniMax (Global): `--auth-choice minimax-global-api`
- API-ключ MiniMax (CN): `--auth-choice minimax-cn-api`
- MiniMax API key (глобальний): `--auth-choice minimax-global-api`
- MiniMax API key (CN): `--auth-choice minimax-cn-api`
- Автентифікація: `MINIMAX_API_KEY` для `minimax`; `MINIMAX_OAUTH_TOKEN` або
`MINIMAX_API_KEY` для `minimax-portal`
Деталі налаштування, варіанти моделей і фрагменти конфігурації див. у [/providers/minimax](/uk/providers/minimax).
Докладніше про налаштування, варіанти моделей і фрагменти конфігурації див. у [/providers/minimax](/uk/providers/minimax).
На Anthropic-сумісному streaming-шляху MiniMax OpenClaw вимикає thinking за
замовчуванням, якщо ви явно його не встановите, а `/fast on` переписує
На Anthropic-сумісному потоковому шляху MiniMax OpenClaw за замовчуванням вимикає thinking,
якщо ви не вкажете його явно, а `/fast on` переписує
`MiniMax-M2.7` на `MiniMax-M2.7-highspeed`.
Розподіл можливостей, якими володіє Plugin:
Поділ можливостей, якими керує Plugin:
- Типові значення для тексту/чату залишаються на `minimax/MiniMax-M2.7`
- Генерація зображень — це `minimax/image-01` або `minimax-portal/image-01`
- Розпізнавання зображень — це `MiniMax-VL-01`, яким володіє Plugin, на обох шляхах автентифікації MiniMax
- Вебпошук залишається на id постачальника `minimax`
- Розуміння зображень — це `MiniMax-VL-01`, яким на обох шляхах автентифікації MiniMax керує Plugin
- Вебпошук залишається на id провайдера `minimax`
### LM Studio
LM Studio постачається як вбудований плагін постачальника, який використовує нативний API:
LM Studio постачається як вбудований Plugin провайдера, який використовує нативний API:
- Постачальник: `lmstudio`
- Провайдер: `lmstudio`
- Автентифікація: `LM_API_TOKEN`
- Base URL inference за замовчуванням: `http://localhost:1234/v1`
- Базовий URL інференсу за замовчуванням: `http://localhost:1234/v1`
Потім установіть модель (замініть на один з ID, повернутих `http://localhost:1234/api/v1/models`):
Потім задайте модель (замініть на один з id, які повертає `http://localhost:1234/api/v1/models`):
```json5
{
@ -695,18 +470,18 @@ LM Studio постачається як вбудований плагін пос
}
```
OpenClaw використовує нативні `/api/v1/models` і `/api/v1/models/load` LM Studio
для виявлення + автозавантаження, а `/v1/chat/completions`для inference за замовчуванням.
Деталі налаштування та усунення несправностей див. у [/providers/lmstudio](/uk/providers/lmstudio).
OpenClaw використовує нативні `LM Studio` `/api/v1/models` і `/api/v1/models/load`
для виявлення й автозавантаження, а `/v1/chat/completions` — за замовчуванням для інференсу.
Докладніше про налаштування й усунення несправностей див. у [/providers/lmstudio](/uk/providers/lmstudio).
### Ollama
Ollama постачається як вбудований плагін постачальника й використовує нативний API Ollama:
Ollama постачається як вбудований Plugin провайдера і використовує нативний API Ollama:
- Постачальник: `ollama`
- Провайдер: `ollama`
- Автентифікація: не потрібна (локальний сервер)
- Приклад моделі: `ollama/llama3.3`
- Установлення: [https://ollama.com/download](https://ollama.com/download)
- Встановлення: [https://ollama.com/download](https://ollama.com/download)
```bash
# Install Ollama, then pull a model:
@ -721,27 +496,27 @@ ollama pull llama3.3
}
```
Ollama локально виявляється за адресою `http://127.0.0.1:11434`, коли ви вмикаєте її через
`OLLAMA_API_KEY`, а вбудований плагін постачальника додає Ollama безпосередньо до
`openclaw onboard` і засобу вибору моделі. Див. [/providers/ollama](/uk/providers/ollama)
щодо онбордингу, cloud/local режиму та кастомної конфігурації.
Ollama виявляється локально за адресою `http://127.0.0.1:11434`, коли ви вмикаєте її через
`OLLAMA_API_KEY`, а вбудований Plugin провайдера додає Ollama безпосередньо до
`openclaw onboard` і засобу вибору моделей. Докладніше про первинне налаштування,
хмарний/локальний режим і власну конфігурацію див. у [/providers/ollama](/uk/providers/ollama).
### vLLM
vLLM постачається як вбудований плагін постачальника для локальних/self-hosted серверів,
сумісних з OpenAI:
vLLM постачається як вбудований Plugin провайдера для локальних/самостійно розміщених
OpenAI-сумісних серверів:
- Постачальник: `vllm`
- Провайдер: `vllm`
- Автентифікація: необов’язкова (залежить від вашого сервера)
- Base URL за замовчуванням: `http://127.0.0.1:8000/v1`
- Базовий URL за замовчуванням: `http://127.0.0.1:8000/v1`
Щоб локально ввімкнути автовиявлення (підійде будь-яке значення, якщо ваш сервер не вимагає автентифікації):
Щоб увімкнути автоматичне локальне виявлення (підійде будь-яке значення, якщо ваш сервер не вимагає автентифікації):
```bash
export VLLM_API_KEY="vllm-local"
```
Потім установіть модель (замініть на один з ID, повернутих `/v1/models`):
Потім задайте модель (замініть на один з id, які повертає `/v1/models`):
```json5
{
@ -751,25 +526,25 @@ export VLLM_API_KEY="vllm-local"
}
```
Деталі див. у [/providers/vllm](/uk/providers/vllm).
Докладніше див. у [/providers/vllm](/uk/providers/vllm).
### SGLang
SGLang постачається як вбудований плагін постачальника для швидких self-hosted серверів,
сумісних з OpenAI:
SGLang постачається як вбудований Plugin провайдера для швидких самостійно розміщених
OpenAI-сумісних серверів:
- Постачальник: `sglang`
- Провайдер: `sglang`
- Автентифікація: необов’язкова (залежить від вашого сервера)
- Base URL за замовчуванням: `http://127.0.0.1:30000/v1`
- Базовий URL за замовчуванням: `http://127.0.0.1:30000/v1`
Щоб локально ввімкнути автовиявлення (підійде будь-яке значення, якщо ваш сервер не
Щоб увімкнути автоматичне локальне виявлення (підійде будь-яке значення, якщо ваш сервер не
вимагає автентифікації):
```bash
export SGLANG_API_KEY="sglang-local"
```
Потім установіть модель (замініть на один з ID, повернутих `/v1/models`):
Потім задайте модель (замініть на один з id, які повертає `/v1/models`):
```json5
{
@ -779,11 +554,11 @@ export SGLANG_API_KEY="sglang-local"
}
```
Деталі див. у [/providers/sglang](/uk/providers/sglang).
Докладніше див. у [/providers/sglang](/uk/providers/sglang).
### Локальні проксі (LM Studio, vLLM, LiteLLM тощо)
### Локальні proxy (LM Studio, vLLM, LiteLLM тощо)
Приклад (сумісний з OpenAI):
Приклад (OpenAIсумісний):
```json5
{
@ -818,21 +593,18 @@ export SGLANG_API_KEY="sglang-local"
Примітки:
- Для кастомних постачальників `reasoning`, `input`, `cost`, `contextWindow` і `maxTokens` є необов’язковими.
Якщо їх опущено, OpenClaw за замовчуванням використовує:
- Для custom-провайдерів `reasoning`, `input`, `cost`, `contextWindow` і `maxTokens` необов’язкові.
Якщо їх не вказано, OpenClaw використовує типові значення:
- `reasoning: false`
- `input: ["text"]`
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
- `contextWindow: 200000`
- `maxTokens: 8192`
- Рекомендовано: установлюйте явні значення, що відповідають обмеженням вашого проксі/моделі.
- Для `api: "openai-completions"` на ненативних endpoint-ах (будь-який непорожній `baseUrl`, чий host не є `api.openai.com`) OpenClaw примусово встановлює `compat.supportsDeveloperRole: false`, щоб уникнути помилок постачальника 400 для непідтримуваних ролей `developer`.
- Проксі-маршрути у стилі OpenAI-compatible також пропускають нативне
формування запитів лише для OpenAI: без `service_tier`, без Responses `store`, без підказок prompt-cache, без
формування payload сумісності reasoning OpenAI і без прихованих заголовків
атрибуції OpenClaw.
- Якщо `baseUrl` порожній/пропущений, OpenClaw зберігає типову поведінку OpenAI (яка вказує на `api.openai.com`).
- Для безпеки явний `compat.supportsDeveloperRole: true` усе одно перевизначається на ненативних endpoint-ах `openai-completions`.
- Рекомендовано: задавайте явні значення, що відповідають обмеженням вашого proxy/моделі.
- Для `api: "openai-completions"` на ненативних кінцевих точках (будь-який непорожній `baseUrl`, чий хост не є `api.openai.com`) OpenClaw примусово встановлює `compat.supportsDeveloperRole: false`, щоб уникнути помилок провайдера 400 через непідтримувані ролі `developer`.
- Маршрути OpenAI-сумісного типу через proxy також пропускають формування запитів, притаманне лише нативному OpenAI: без `service_tier`, без `store` у Responses, без підказок кешу prompt, без формування payload для сумісності reasoning OpenAI і без прихованих заголовків атрибуції OpenClaw.
- Якщо `baseUrl` порожній або не вказаний, OpenClaw зберігає стандартну поведінку OpenAI (яка зводиться до `api.openai.com`).
- Для безпеки явне `compat.supportsDeveloperRole: true` все одно перевизначається на ненативних кінцевих точках `openai-completions`.
## Приклади CLI
@ -846,7 +618,7 @@ openclaw models list
## Пов’язане
- [Models](/uk/concepts/models) — конфігурація моделей і псевдоніми
- [Model Failover](/uk/concepts/model-failover) — ланцюжки резервного переходу та поведінка повторних спроб
- [Configuration Reference](/uk/gateway/configuration-reference#agent-defaults) — ключі конфігурації моделі
- [Providers](/uk/providers) — посібники з налаштування для кожного постачальника
- [Моделі](/uk/concepts/models) — конфігурація моделей і псевдоніми
- [Перемикання моделей при відмові](/uk/concepts/model-failover) — ланцюжки резервного перемикання та поведінка повторних спроб
- [Довідник із конфігурації](/uk/gateway/configuration-reference#agent-defaults) — ключі конфігурації моделей
- [Провайдери](/uk/providers) — покрокові налаштування для окремих провайдерів

View File

@ -1,43 +1,42 @@
---
read_when:
- Ви створюєте новий plugin постачальника моделей
- Ви хочете додати до OpenClaw сумісний з OpenAI проксі або користувацьку LLM
- Вам потрібно зрозуміти автентифікацію постачальника, каталоги та рантайм-хуки
sidebarTitle: Provider Plugins
- Ви хочете додати OpenAI-сумісний проксі або власну LLM до OpenClaw
- Вам потрібно зрозуміти автентифікацію постачальника, каталоги та runtime-хуки
sidebarTitle: Provider plugins
summary: Покроковий посібник зі створення plugin постачальника моделей для OpenClaw
title: Створення plugin постачальників моделей
x-i18n:
generated_at: "2026-04-23T03:31:34Z"
generated_at: "2026-04-23T16:48:26Z"
model: gpt-5.4
provider: openai
source_hash: ba14ad9c9ac35c6209b6533e50ab3a6da0ef0de2ea6a6a4e7bf69bc65d39c484
source_hash: e0863288e4f75163ed57bd1ec73e8e611ad842adf975de6169d5522a280ae3ed
source_path: plugins/sdk-provider-plugins.md
workflow: 15
---
# Створення plugin постачальників моделей
# Створення plugin постачальників
Цей посібник пояснює, як створити plugin постачальника, який додає постачальника моделей
(LLM) до OpenClaw. Наприкінці у вас буде постачальник із каталогом моделей,
автентифікацією через API-ключ і динамічним визначенням моделей.
Цей посібник покроково пояснює, як створити plugin постачальника, який додає постачальника моделей
(LLM) до OpenClaw. Наприкінці ви матимете постачальника з каталогом моделей,
автентифікацією за API-ключем і динамічним визначенням моделей.
<Info>
Якщо ви раніше не створювали plugin для OpenClaw, спочатку прочитайте
[Початок роботи](/uk/plugins/building-plugins) для ознайомлення з базовою
структурою пакета та налаштуванням маніфесту.
Якщо ви раніше не створювали жодного plugin для OpenClaw, спочатку прочитайте
[Початок роботи](/uk/plugins/building-plugins) про базову структуру
пакета та налаштування маніфесту.
</Info>
<Tip>
Plugin постачальників додають моделі до стандартного циклу інференсу OpenClaw. Якщо модель
має працювати через нативний демон агента, який керує потоками, Compaction або подіями
має працювати через нативний агент-демон, який керує потоками, compaction або подіями
інструментів, поєднайте постачальника з [agent harness](/uk/plugins/sdk-agent-harness),
а не виносьте деталі протоколу демона в ядро.
а не виносьте деталі протоколу демона в core.
</Tip>
## Покроковий розбір
## Покроковий приклад
<Steps>
<a id="step-1-package-and-manifest"></a>
<Step title="Пакет і маніфест">
<CodeGroup>
```json package.json
@ -97,17 +96,17 @@ x-i18n:
</CodeGroup>
Маніфест оголошує `providerAuthEnvVars`, щоб OpenClaw міг виявляти
облікові дані без завантаження рантайму вашого plugin. Додавайте `providerAuthAliases`,
коли варіант постачальника має повторно використовувати auth іншого id постачальника. `modelSupport`
є необов’язковим і дозволяє OpenClaw автоматично завантажувати ваш plugin постачальника за скороченими
id моделей, як-от `acme-large`, ще до появи рантайм-хуків. Якщо ви публікуєте
облікові дані без завантаження runtime вашого plugin. Додайте `providerAuthAliases`,
якщо варіант постачальника має повторно використовувати auth іншого id постачальника. `modelSupport`
є необов’язковим і дає OpenClaw змогу автоматично завантажувати plugin вашого постачальника зі скорочених
ідентифікаторів моделей, таких як `acme-large`, ще до появи runtime-хуків. Якщо ви публікуєте
постачальника в ClawHub, поля `openclaw.compat` і `openclaw.build`
у `package.json` є обов’язковими.
</Step>
<Step title="Зареєструйте постачальника">
Мінімальний постачальник потребує `id`, `label`, `auth` і `catalog`:
Мінімальному постачальнику потрібні `id`, `label`, `auth` і `catalog`:
```typescript index.ts
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
@ -182,8 +181,8 @@ x-i18n:
`openclaw onboard --acme-ai-api-key <key>` і вибрати
`acme-ai/acme-large` як свою модель.
Якщо постачальник вище за потоком використовує інші керівні токени, ніж OpenClaw, додайте
невелике двоспрямоване текстове перетворення замість заміни шляху потокової передачі:
Якщо в апстрім-постачальника інші керівні токени, ніж в OpenClaw, додайте
невелике двонапрямне текстове перетворення замість заміни шляху потоку:
```typescript
api.registerTextTransforms({
@ -201,12 +200,12 @@ x-i18n:
```
`input` переписує фінальний системний prompt і вміст текстових повідомлень перед
передаванням. `output` переписує текстові дельти асистента й фінальний текст до того, як
OpenClaw розбере власні керівні маркери або доставку каналом.
транспортуванням. `output` переписує текстові дельти асистента й фінальний текст до того,
як OpenClaw розбере власні керівні маркери або доставку каналом.
Для вбудованих постачальників, які реєструють лише одного текстового постачальника з auth через API-ключ
плюс один рантайм, що підтримується каталогом, віддавайте перевагу вужчому
хелперу `defineSingleProviderPluginEntry(...)`:
Для вбудованих постачальників, які лише реєструють одного текстового постачальника з автентифікацією
за API-ключем плюс один runtime на основі каталогу, віддавайте перевагу вужчому
helper `defineSingleProviderPluginEntry(...)`:
```typescript
import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry";
@ -248,31 +247,31 @@ x-i18n:
`buildProvider` — це шлях живого каталогу, який використовується, коли OpenClaw може визначити реальний
auth постачальника. Він може виконувати специфічне для постачальника виявлення. Використовуйте
`buildStaticProvider` лише для офлайн-рядків, які безпечно показувати до налаштування auth;
він не повинен вимагати облікових даних або виконувати мережеві запити.
Показ `models list --all` в OpenClaw наразі виконує статичні каталоги
`buildStaticProvider` лише для офлайнових рядків, які безпечно показувати до налаштування auth;
він не повинен вимагати облікові дані або виконувати мережеві запити.
Поточне відображення `models list --all` в OpenClaw виконує статичні каталоги
лише для вбудованих plugin постачальників, із порожньою конфігурацією, порожнім env і без
шляхів agent/workspace.
шляхів агента/робочого простору.
Якщо ваш потік auth також має оновлювати `models.providers.*`, аліаси та
модель агента за замовчуванням під час onboarding, використовуйте preset-хелпери з
`openclaw/plugin-sdk/provider-onboard`. Найвужчі хелпери:
Якщо вашому потоку auth також потрібно змінювати `models.providers.*`, псевдоніми та
модель агента за замовчуванням під час онбордингу, використовуйте preset-helperи з
`openclaw/plugin-sdk/provider-onboard`. Найвужчі helperи:
`createDefaultModelPresetAppliers(...)`,
`createDefaultModelsPresetAppliers(...)` і
`createModelCatalogPresetAppliers(...)`.
Коли нативна кінцева точка постачальника підтримує блоки використання в потоці на
звичайному транспорті `openai-completions`, віддавайте перевагу спільним хелперам каталогу з
`openclaw/plugin-sdk/provider-catalog-shared` замість жорсткого кодування перевірок provider-id.
Коли нативний endpoint постачальника підтримує потокові блоки використання на
звичайному транспорті `openai-completions`, віддавайте перевагу спільним helperам каталогів із
`openclaw/plugin-sdk/provider-catalog-shared`, а не жорстко закодованим перевіркам id постачальника.
`supportsNativeStreamingUsageCompat(...)` і
`applyProviderNativeStreamingUsageCompat(...)` визначають підтримку за картою можливостей кінцевої точки,
тож нативні кінцеві точки в стилі Moonshot/DashScope також підключаються, навіть коли plugin використовує
користувацький provider id.
`applyProviderNativeStreamingUsageCompat(...)` визначають підтримку з карти можливостей endpoint,
тому нативні endpointи в стилі Moonshot/DashScope також можуть увімкнутися, навіть якщо plugin
використовує власний id постачальника.
</Step>
<Step title="Додайте динамічне визначення моделей">
Якщо ваш постачальник приймає довільні id моделей, (наприклад, проксі або маршрутизатор),
<Step title="Додайте динамічне визначення моделі">
Якщо ваш постачальник приймає довільні ідентифікатори моделей (як-от проксі або роутер),
додайте `resolveDynamicModel`:
```typescript
@ -295,15 +294,15 @@ x-i18n:
```
Якщо для визначення потрібен мережевий виклик, використовуйте `prepareDynamicModel` для асинхронного
прогріву — після його завершення `resolveDynamicModel` запускається знову.
попереднього прогріву — після його завершення `resolveDynamicModel` запускається знову.
</Step>
<Step title="Додайте рантайм-хуки (за потреби)">
<Step title="Додайте runtime-хуки (за потреби)">
Більшості постачальників потрібні лише `catalog` + `resolveDynamicModel`. Додавайте хуки
поступово, у міру потреб вашого постачальника.
поступово, коли це знадобиться вашому постачальнику.
Спільні builder-хелпери тепер покривають найпоширеніші сімейства replay/tool-compat,
Спільні helper-білдери тепер покривають найпоширеніші сімейства replay/tool-compat,
тому plugin зазвичай не потрібно вручну підключати кожен хук окремо:
```typescript
@ -324,120 +323,43 @@ x-i18n:
});
```
Доступні на сьогодні сімейства replay:
Наразі доступні такі сімейства replay:
| Сімейство | Що воно підключає |
| --- | --- |
| `openai-compatible` | Спільна політика replay у стилі OpenAI для транспортів, сумісних з OpenAI, включно з санітарною обробкою tool-call-id, виправленням порядку assistant-first і загальною валідацією Gemini-turn там, де це потрібно транспорту |
| `anthropic-by-model` | Політика replay з урахуванням Claude, що вибирається за `modelId`, тож транспорти Anthropic-message отримують очищення thinking-block, специфічне для Claude, лише коли визначена модель справді має id Claude |
| `google-gemini` | Нативна політика replay для Gemini плюс санітарна обробка bootstrap replay і режим тегованого reasoning-output |
| `passthrough-gemini` | Санітарна обробка Gemini thought-signature для моделей Gemini, що працюють через проксі-транспорти, сумісні з OpenAI; не вмикає нативну валідацію replay Gemini або переписування bootstrap |
| `hybrid-anthropic-openai` | Гібридна політика для постачальників, які поєднують поверхні моделей Anthropic-message і OpenAI-compatible в одному plugin; необов’язкове відкидання thinking-block лише для Claude залишається обмеженим стороною Anthropic |
| Family | Що воно підключає | Приклади вбудованих |
| --- | --- | --- |
| `openai-compatible` | Спільна політика replay у стилі OpenAI для OpenAI-сумісних транспортів, зокрема санітизація tool-call-id, виправлення порядку assistant-first і загальна валідація Gemini-turn там, де це потрібно транспорту | `moonshot`, `ollama`, `xai`, `zai` |
| `anthropic-by-model` | Політика replay з урахуванням Claude, що вибирається за `modelId`, тому транспорти Anthropic-message отримують очищення thinking-block, специфічне для Claude, лише коли визначена модель справді є ідентифікатором Claude | `amazon-bedrock`, `anthropic-vertex` |
| `google-gemini` | Нативна політика replay Gemini плюс санітизація bootstrap replay і режим tagged reasoning-output | `google`, `google-gemini-cli` |
| `passthrough-gemini` | Санітизація Gemini thought-signature для моделей Gemini, що працюють через OpenAI-сумісні проксі-транспорти; не вмикає нативну валідацію replay Gemini або bootstrap-перезаписи | `openrouter`, `kilocode`, `opencode`, `opencode-go` |
| `hybrid-anthropic-openai` | Гібридна політика для постачальників, які поєднують поверхні моделей Anthropic-message та OpenAI-compatible в одному plugin; необов’язкове відкидання thinking-block лише для Claude залишається обмеженим стороною Anthropic | `minimax` |
Реальні приклади вбудованих постачальників:
Наразі доступні такі сімейства stream:
- `google` і `google-gemini-cli`: `google-gemini`
- `openrouter`, `kilocode`, `opencode` і `opencode-go`: `passthrough-gemini`
- `amazon-bedrock` і `anthropic-vertex`: `anthropic-by-model`
- `minimax`: `hybrid-anthropic-openai`
- `moonshot`, `ollama`, `xai` і `zai`: `openai-compatible`
| Family | Що воно підключає | Приклади вбудованих |
| --- | --- | --- |
| `google-thinking` | Нормалізація payload thinking Gemini у спільному шляху stream | `google`, `google-gemini-cli` |
| `kilocode-thinking` | Обгортка Kilo reasoning у спільному шляху proxy stream, де `kilo/auto` та непідтримувані proxy reasoning id пропускають ін’єкцію thinking | `kilocode` |
| `moonshot-thinking` | Відображення бінарного payload native-thinking Moonshot з config + рівня `/think` | `moonshot` |
| `minimax-fast-mode` | Перезапис моделі MiniMax fast-mode у спільному шляху stream | `minimax`, `minimax-portal` |
| `openai-responses-defaults` | Спільні нативні обгортки OpenAI/Codex Responses: заголовки attribution, `/fast`/`serviceTier`, текстова verbosity, нативний вебпошук Codex, формування payload reasoning-compat і керування контекстом Responses | `openai`, `openai-codex` |
| `openrouter-thinking` | Обгортка OpenRouter reasoning для маршрутів proxy, де пропуски unsupported-model/`auto` централізовано обробляються | `openrouter` |
| `tool-stream-default-on` | Обгортка `tool_stream`, увімкнена за замовчуванням, для постачальників на кшталт Z.AI, які хочуть потокову передачу інструментів, якщо її явно не вимкнено | `zai` |
Доступні на сьогодні сімейства stream:
<Accordion title="SDK seams, що забезпечують білдери family">
Кожен білдер family складається з нижчорівневих публічних helperів, експортованих із того самого пакета, до яких можна звернутися, коли постачальнику потрібно відійти від загального шаблону:
| Сімейство | Що воно підключає |
| --- | --- |
| `google-thinking` | Нормалізація payload thinking Gemini на спільному шляху stream |
| `kilocode-thinking` | Обгортка reasoning Kilo на спільному шляху proxy stream, де `kilo/auto` і непідтримувані proxy reasoning id пропускають ін’єктований thinking |
| `moonshot-thinking` | Відображення payload native-thinking Moonshot у двійковому форматі з config + рівня `/think` |
| `minimax-fast-mode` | Переписування моделі MiniMax fast-mode на спільному шляху stream |
| `openai-responses-defaults` | Спільні нативні обгортки OpenAI/Codex Responses: attribution headers, `/fast`/`serviceTier`, text verbosity, нативний web search Codex, формування payload reasoning-compat і керування контекстом Responses |
| `openrouter-thinking` | Обгортка reasoning OpenRouter для proxy-маршрутів, із централізованою обробкою пропусків unsupported-model/`auto` |
| `tool-stream-default-on` | Обгортка `tool_stream`, увімкнена за замовчуванням, для постачальників на кшталт Z.AI, які хочуть потокову передачу інструментів, якщо її не вимкнено явно |
- `openclaw/plugin-sdk/provider-model-shared``ProviderReplayFamily`, `buildProviderReplayFamilyHooks(...)` і сирі білдери replay (`buildOpenAICompatibleReplayPolicy`, `buildAnthropicReplayPolicyForModel`, `buildGoogleGeminiReplayPolicy`, `buildHybridAnthropicOrOpenAIReplayPolicy`). Також експортує helperи replay Gemini (`sanitizeGoogleGeminiReplayHistory`, `resolveTaggedReasoningOutputMode`) і helperи endpoint/model (`resolveProviderEndpoint`, `normalizeProviderId`, `normalizeGooglePreviewModelId`, `normalizeNativeXaiModelId`).
- `openclaw/plugin-sdk/provider-stream``ProviderStreamFamily`, `buildProviderStreamFamilyHooks(...)`, `composeProviderStreamWrappers(...)`, а також спільні обгортки OpenAI/Codex (`createOpenAIAttributionHeadersWrapper`, `createOpenAIFastModeWrapper`, `createOpenAIServiceTierWrapper`, `createOpenAIResponsesContextManagementWrapper`, `createCodexNativeWebSearchWrapper`) і спільні обгортки proxy/provider (`createOpenRouterWrapper`, `createToolStreamWrapper`, `createMinimaxFastModeWrapper`).
- `openclaw/plugin-sdk/provider-tools``ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks("gemini")`, базові helperи схем Gemini (`normalizeGeminiToolSchemas`, `inspectGeminiToolSchemas`) і helperи compat для xAI (`resolveXaiModelCompatPatch()`, `applyXaiModelCompat(model)`). Вбудований plugin xAI використовує `normalizeResolvedModel` + `contributeResolvedModelCompat` разом із ними, щоб правила xAI залишалися у власності постачальника.
Реальні приклади вбудованих постачальників:
Деякі stream-helperи навмисно залишаються локальними для постачальника. `@openclaw/anthropic-provider` зберігає `wrapAnthropicProviderStream`, `resolveAnthropicBetas`, `resolveAnthropicFastMode`, `resolveAnthropicServiceTier` і нижчорівневі білдери обгорток Anthropic у власному публічному seam `api.ts` / `contract-api.ts`, оскільки вони кодують обробку Claude OAuth beta і gating `context1m`. Аналогічно plugin xAI зберігає нативне формування xAI Responses у власному `wrapStreamFn` (псевдоніми `/fast`, `tool_stream` за замовчуванням, очищення unsupported strict-tool, видалення payload reasoning, специфічного для xAI).
- `google` і `google-gemini-cli`: `google-thinking`
- `kilocode`: `kilocode-thinking`
- `moonshot`: `moonshot-thinking`
- `minimax` і `minimax-portal`: `minimax-fast-mode`
- `openai` і `openai-codex`: `openai-responses-defaults`
- `openrouter`: `openrouter-thinking`
- `zai`: `tool-stream-default-on`
`openclaw/plugin-sdk/provider-model-shared` також експортує enum сімейств
replay, а також спільні хелпери, з яких ці сімейства побудовані. Поширені публічні
експорти включають:
- `ProviderReplayFamily`
- `buildProviderReplayFamilyHooks(...)`
- спільні builder-и replay, такі як `buildOpenAICompatibleReplayPolicy(...)`,
`buildAnthropicReplayPolicyForModel(...)`,
`buildGoogleGeminiReplayPolicy(...)` і
`buildHybridAnthropicOrOpenAIReplayPolicy(...)`
- хелпери replay для Gemini, такі як `sanitizeGoogleGeminiReplayHistory(...)`
і `resolveTaggedReasoningOutputMode()`
- хелпери endpoint/model, такі як `resolveProviderEndpoint(...)`,
`normalizeProviderId(...)`, `normalizeGooglePreviewModelId(...)` і
`normalizeNativeXaiModelId(...)`
`openclaw/plugin-sdk/provider-stream` надає як builder сімейств,
так і публічні хелпери-обгортки, які ці сімейства використовують повторно. Поширені публічні експорти
включають:
- `ProviderStreamFamily`
- `buildProviderStreamFamilyHooks(...)`
- `composeProviderStreamWrappers(...)`
- спільні обгортки OpenAI/Codex, такі як
`createOpenAIAttributionHeadersWrapper(...)`,
`createOpenAIFastModeWrapper(...)`,
`createOpenAIServiceTierWrapper(...)`,
`createOpenAIResponsesContextManagementWrapper(...)` і
`createCodexNativeWebSearchWrapper(...)`
- спільні обгортки proxy/provider, такі як `createOpenRouterWrapper(...)`,
`createToolStreamWrapper(...)` і `createMinimaxFastModeWrapper(...)`
Деякі stream-хелпери навмисно залишаються локальними для постачальника. Поточний вбудований
приклад: `@openclaw/anthropic-provider` експортує
`wrapAnthropicProviderStream`, `resolveAnthropicBetas`,
`resolveAnthropicFastMode`, `resolveAnthropicServiceTier` і
builder-и нижчого рівня для обгорток Anthropic зі свого публічного шва `api.ts` /
`contract-api.ts`. Ці хелпери залишаються специфічними для Anthropic, оскільки
вони також кодують обробку Claude OAuth beta і gating `context1m`.
Інші вбудовані постачальники також тримають локальними обгортки, специфічні для транспорту, коли
цю поведінку не можна чисто поділити між сімействами. Поточний приклад: вбудований plugin xAI
зберігає нативне формування xAI Responses у власному
`wrapStreamFn`, включно з переписуванням аліасів `/fast`, `tool_stream` за замовчуванням,
очищенням unsupported strict-tool і видаленням payload reasoning, специфічним для xAI.
`openclaw/plugin-sdk/provider-tools` наразі надає одне спільне сімейство
схем інструментів плюс спільні хелпери schema/compat:
- `ProviderToolCompatFamily` документує поточний спільний інвентар сімейств.
- `buildProviderToolCompatFamilyHooks("gemini")` підключає очищення схем Gemini
+ діагностику для постачальників, яким потрібні безпечні для Gemini схеми інструментів.
- `normalizeGeminiToolSchemas(...)` і `inspectGeminiToolSchemas(...)`
— це базові публічні хелпери схем Gemini.
- `resolveXaiModelCompatPatch()` повертає вбудований compat-патч xAI:
`toolSchemaProfile: "xai"`, непідтримувані ключові слова схем, нативну
підтримку `web_search` і декодування аргументів виклику інструментів з HTML-сутностей.
- `applyXaiModelCompat(model)` застосовує той самий compat-патч xAI до
визначеної моделі до того, як вона дійде до runner.
Реальний вбудований приклад: plugin xAI використовує `normalizeResolvedModel` плюс
`contributeResolvedModelCompat`, щоб зберігати ці compat-метадані у власності
постачальника, а не жорстко кодувати правила xAI в ядрі.
Той самий шаблон кореня пакета також лежить в основі інших вбудованих постачальників:
- `@openclaw/openai-provider`: `api.ts` експортує builder-и постачальників,
хелпери моделей за замовчуванням і builder-и realtime-постачальників
- `@openclaw/openrouter-provider`: `api.ts` експортує builder постачальника
плюс хелпери onboarding/config
Такий самий шаблон кореня пакета також підтримує `@openclaw/openai-provider` (білдери provider, helperи моделі за замовчуванням, білдери realtime provider) і `@openclaw/openrouter-provider` (білдер provider плюс helperи onboarding/config).
</Accordion>
<Tabs>
<Tab title="Обмін токенів">
Для постачальників, яким потрібен обмін токенів перед кожним викликом інференсу:
<Tab title="Обмін токенами">
Для постачальників, яким перед кожним викликом інференсу потрібен обмін токенами:
```typescript
prepareRuntimeAuth: async (ctx) => {
@ -451,7 +373,7 @@ x-i18n:
```
</Tab>
<Tab title="Користувацькі заголовки">
Для постачальників, яким потрібні користувацькі заголовки запитів або модифікації тіла:
Для постачальників, яким потрібні користувацькі заголовки запиту або модифікації тіла:
```typescript
// wrapStreamFn returns a StreamFn derived from ctx.streamFn
@ -469,8 +391,8 @@ x-i18n:
```
</Tab>
<Tab title="Ідентичність нативного транспорту">
Для постачальників, яким потрібні нативні заголовки або метадані запиту/сесії на
узагальнених транспортних рівнях HTTP або WebSocket:
Для постачальників, яким потрібні нативні заголовки або метадані запиту/сесії в
узагальнених HTTP- або WebSocket-транспортах:
```typescript
resolveTransportTurnState: (ctx) => ({
@ -508,241 +430,227 @@ x-i18n:
<Accordion title="Усі доступні хуки постачальника">
OpenClaw викликає хуки в такому порядку. Більшості постачальників потрібні лише 23:
| # | Хук | Коли використовувати |
| # | Hook | Коли використовувати |
| --- | --- | --- |
| 1 | `catalog` | Каталог моделей або значення `base URL` за замовчуванням |
| 2 | `applyConfigDefaults` | Глобальні значення за замовчуванням, якими володіє постачальник, під час materialization конфігурації |
| 3 | `normalizeModelId` | Очищення застарілих/preview аліасів model-id перед пошуком |
| 4 | `normalizeTransport` | Очищення `api` / `baseUrl` для сімейства постачальника перед збиранням узагальненої моделі |
| 1 | `catalog` | Каталог моделей або значення `baseUrl` за замовчуванням |
| 2 | `applyConfigDefaults` | Глобальні значення за замовчуванням, якими володіє постачальник, під час матеріалізації config |
| 3 | `normalizeModelId` | Очищення псевдонімів legacy/preview model-id перед пошуком |
| 4 | `normalizeTransport` | Очищення `api` / `baseUrl` сімейства постачальника перед збиранням узагальненої моделі |
| 5 | `normalizeConfig` | Нормалізація config `models.providers.<id>` |
| 6 | `applyNativeStreamingUsageCompat` | Переписування compat для нативного streaming-usage для config-постачальників |
| 7 | `resolveConfigApiKey` | Визначення auth за env-marker, яким володіє постачальник |
| 6 | `applyNativeStreamingUsageCompat` | Перезаписи compat native streaming-usage для config-постачальників |
| 7 | `resolveConfigApiKey` | Визначення auth маркерів env, яким володіє постачальник |
| 8 | `resolveSyntheticAuth` | Синтетичний auth для local/self-hosted або на основі config |
| 9 | `shouldDeferSyntheticProfileAuth` | Опускання синтетичних заповнювачів stored-profile нижче auth env/config |
| 10 | `resolveDynamicModel` | Приймати довільні upstream model id |
| 9 | `shouldDeferSyntheticProfileAuth` | Опускання синтетичних placeholderів збереженого профілю нижче auth env/config |
| 10 | `resolveDynamicModel` | Прийняття довільних upstream model id |
| 11 | `prepareDynamicModel` | Асинхронне отримання метаданих перед визначенням |
| 12 | `normalizeResolvedModel` | Переписування транспорту перед runner |
Нотатки щодо рантайм-fallback:
- `normalizeConfig` спочатку перевіряє зіставленого постачальника, а потім інші
plugin постачальників, що підтримують хуки, доки один із них справді не змінить config.
Якщо жоден хук постачальника не перепише підтримуваний запис config сімейства Google,
усе одно застосовується вбудований нормалізатор config Google.
- `resolveConfigApiKey` використовує хук постачальника, якщо його надано. Вбудований
шлях `amazon-bedrock` також має тут вбудований resolver AWS env-marker,
хоча сам рантайм-auth Bedrock все ще використовує стандартний
ланцюжок AWS SDK.
| 13 | `contributeResolvedModelCompat` | Прапорці compat для моделей вендора за іншим сумісним транспортом |
| 14 | `capabilities` | Застарілий статичний набір можливостей; лише для сумісності |
| 15 | `normalizeToolSchemas` | Очищення схем інструментів, яким володіє постачальник, перед реєстрацією |
| 16 | `inspectToolSchemas` | Діагностика схем інструментів, якою володіє постачальник |
| 17 | `resolveReasoningOutputMode` | Контракт reasoning-output: tagged чи native |
| 12 | `normalizeResolvedModel` | Перезаписи транспорту перед runner |
| 13 | `contributeResolvedModelCompat` | Прапорці compat для моделей постачальника за іншим сумісним транспортом |
| 14 | `capabilities` | Legacy-мішок статичних можливостей; лише для сумісності |
| 15 | `normalizeToolSchemas` | Очищення tool-schema, яким володіє постачальник, перед реєстрацією |
| 16 | `inspectToolSchemas` | Діагностика tool-schema, якою володіє постачальник |
| 17 | `resolveReasoningOutputMode` | Контракт tagged vs native reasoning-output |
| 18 | `prepareExtraParams` | Параметри запиту за замовчуванням |
| 19 | `createStreamFn` | Повністю користувацький транспорт `StreamFn` |
| 20 | `wrapStreamFn` | Користувацькі обгортки headers/body на звичайному шляху stream |
| 21 | `resolveTransportTurnState` | Нативні headers/metadata для кожного turn |
| 22 | `resolveWebSocketSessionPolicy` | Нативні заголовки сесії WS / cooldown |
| 23 | `formatApiKey` | Користувацька форма рантайм-токена |
| 20 | `wrapStreamFn` | Обгортки користувацьких заголовків/тіла у звичайному шляху stream |
| 21 | `resolveTransportTurnState` | Нативні заголовки/метадані для кожного turn |
| 22 | `resolveWebSocketSessionPolicy` | Нативні заголовки сесії WS / cool-down |
| 23 | `formatApiKey` | Користувацька форма runtime-токена |
| 24 | `refreshOAuth` | Користувацьке оновлення OAuth |
| 25 | `buildAuthDoctorHint` | Підказка щодо виправлення auth |
| 26 | `matchesContextOverflowError` | Визначення переповнення, яким володіє постачальник |
| 25 | `buildAuthDoctorHint` | Підказка для відновлення auth |
| 26 | `matchesContextOverflowError` | Виявлення переповнення, яким володіє постачальник |
| 27 | `classifyFailoverReason` | Класифікація rate-limit/overload, якою володіє постачальник |
| 28 | `isCacheTtlEligible` | Gating TTL для кешу prompt |
| 28 | `isCacheTtlEligible` | Gating TTL кешу prompt |
| 29 | `buildMissingAuthMessage` | Користувацька підказка про відсутній auth |
| 30 | `suppressBuiltInModel` | Приховати застарілі upstream-рядки |
| 31 | `augmentModelCatalog` | Синтетичні рядки для forward-compat |
| 30 | `suppressBuiltInModel` | Приховування застарілих upstream-рядків |
| 31 | `augmentModelCatalog` | Синтетичні рядки для прямої сумісності вперед |
| 32 | `resolveThinkingProfile` | Набір опцій `/think`, специфічний для моделі |
| 33 | `isBinaryThinking` | Сумісність двійкового thinking увімк./вимк. |
| 33 | `isBinaryThinking` | Сумісність бінарного ввімкнення/вимкнення thinking |
| 34 | `supportsXHighThinking` | Сумісність підтримки reasoning `xhigh` |
| 35 | `resolveDefaultThinkingLevel` | Сумісність політики `/think` за замовчуванням |
| 36 | `isModernModelRef` | Зіставлення live/smoke моделей |
| 37 | `prepareRuntimeAuth` | Обмін токенів перед інференсом |
| 36 | `isModernModelRef` | Відповідність live/smoke моделей |
| 37 | `prepareRuntimeAuth` | Обмін токенами перед інференсом |
| 38 | `resolveUsageAuth` | Користувацький розбір облікових даних використання |
| 39 | `fetchUsageSnapshot` | Користувацька кінцева точка використання |
| 40 | `createEmbeddingProvider` | Адаптер embedding, яким володіє постачальник, для пам’яті/пошуку |
| 41 | `buildReplayPolicy` | Користувацька політика replay/Compaction транскрипту |
| 42 | `sanitizeReplayHistory` | Переписування replay, специфічні для постачальника, після загального очищення |
| 39 | `fetchUsageSnapshot` | Користувацький endpoint використання |
| 40 | `createEmbeddingProvider` | Адаптер embedding, яким володіє постачальник, для memory/search |
| 41 | `buildReplayPolicy` | Користувацька політика replay/compaction транскрипту |
| 42 | `sanitizeReplayHistory` | Перезаписи replay, специфічні для постачальника, після узагальненого очищення |
| 43 | `validateReplayTurns` | Сувора валідація replay-turn перед вбудованим runner |
| 44 | `onModelSelected` | Зворотний виклик після вибору моделі (наприклад, телеметрія) |
| 44 | `onModelSelected` | Зворотний виклик після вибору моделі (наприклад, telemetry) |
Примітка щодо налаштування prompt:
Примітки щодо runtime fallback:
- `resolveSystemPromptContribution` дозволяє постачальнику ін’єктувати cache-aware
вказівки для system prompt для сімейства моделей. Віддавайте йому перевагу над
`before_prompt_build`, коли поведінка належить одному сімейству постачальника/моделей
і має зберігати стабільний/динамічний поділ кешу.
- `normalizeConfig` спочатку перевіряє знайденого постачальника, а потім інші plugin постачальників із підтримкою hook, доки один із них справді не змінить config. Якщо жоден hook постачальника не перепише підтримуваний запис config сімейства Google, усе одно застосовується вбудований нормалізатор config Google.
- `resolveConfigApiKey` використовує hook постачальника, якщо той надано. Вбудований шлях `amazon-bedrock` також має тут вбудований resolver auth маркерів AWS env, хоча сам runtime auth Bedrock досі використовує ланцюжок AWS SDK за замовчуванням.
- `resolveSystemPromptContribution` дозволяє постачальнику інжектувати підказки system prompt з урахуванням кешу для сімейства моделей. Віддавайте йому перевагу над `before_prompt_build`, коли поведінка належить одному сімейству постачальника/моделі й має зберігати стабільний/динамічний поділ кешу.
Докладні описи та реальні приклади див. у
[Внутрішня архітектура: рантайм-хуки постачальника](/uk/plugins/architecture#provider-runtime-hooks).
Докладні описи та реальні приклади дивіться в [Внутрішні механізми: Provider Runtime Hooks](/uk/plugins/architecture#provider-runtime-hooks).
</Accordion>
</Step>
<Step title="Додайте додаткові можливості (необов’язково)">
<a id="step-5-add-extra-capabilities"></a>
Plugin постачальника може реєструвати синтез мовлення, транскрибування в реальному часі, голос у реальному
часі, розуміння медіа, генерацію зображень, генерацію відео, web fetch
і web search поряд із текстовим інференсом:
Plugin постачальника може реєструвати speech, realtime transcription, realtime
voice, розуміння медіа, генерацію зображень, генерацію відео, web fetch
і web search поряд із текстовим інференсом. OpenClaw класифікує це як
plugin **hybrid-capability** — рекомендований шаблон для корпоративних plugin
(один plugin на постачальника). Див.
[Внутрішні механізми: Власність можливостей](/uk/plugins/architecture#capability-ownership-model).
```typescript
register(api) {
api.registerProvider({ id: "acme-ai", /* ... */ });
Зареєструйте кожну можливість усередині `register(api)` поруч із наявним
викликом `api.registerProvider(...)`. Вибирайте лише ті вкладки, які вам потрібні:
api.registerSpeechProvider({
id: "acme-ai",
label: "Acme Speech",
isConfigured: ({ config }) => Boolean(config.messages?.tts),
synthesize: async (req) => ({
audioBuffer: Buffer.from(/* PCM data */),
outputFormat: "mp3",
fileExtension: ".mp3",
voiceCompatible: false,
}),
});
<Tabs>
<Tab title="Speech (TTS)">
```typescript
api.registerSpeechProvider({
id: "acme-ai",
label: "Acme Speech",
isConfigured: ({ config }) => Boolean(config.messages?.tts),
synthesize: async (req) => ({
audioBuffer: Buffer.from(/* PCM data */),
outputFormat: "mp3",
fileExtension: ".mp3",
voiceCompatible: false,
}),
});
```
</Tab>
<Tab title="Транскрипція в реальному часі">
Віддавайте перевагу `createRealtimeTranscriptionWebSocketSession(...)` — спільний
helper обробляє захоплення proxy, backoff повторного підключення, flush під час закриття, ready-handshake, постановку аудіо в чергу та діагностику подій закриття. Ваш plugin
лише відображає upstream-події.
api.registerRealtimeTranscriptionProvider({
id: "acme-ai",
label: "Acme Realtime Transcription",
isConfigured: () => true,
createSession: (req) => {
const apiKey = String(req.providerConfig.apiKey ?? "");
return createRealtimeTranscriptionWebSocketSession({
providerId: "acme-ai",
callbacks: req,
url: "wss://api.example.com/v1/realtime-transcription",
headers: { Authorization: `Bearer ${apiKey}` },
onMessage: (event, transport) => {
if (event.type === "session.created") {
transport.sendJson({ type: "session.update" });
transport.markReady();
return;
}
if (event.type === "transcript.final") {
req.onTranscript?.(event.text);
}
},
sendAudio: (audio, transport) => {
transport.sendJson({
type: "audio.append",
audio: audio.toString("base64"),
});
},
onClose: (transport) => {
transport.sendJson({ type: "audio.end" });
},
});
},
});
api.registerRealtimeVoiceProvider({
id: "acme-ai",
label: "Acme Realtime Voice",
isConfigured: ({ providerConfig }) => Boolean(providerConfig.apiKey),
createBridge: (req) => ({
connect: async () => {},
sendAudio: () => {},
setMediaTimestamp: () => {},
submitToolResult: () => {},
acknowledgeMark: () => {},
close: () => {},
isConnected: () => true,
}),
});
api.registerMediaUnderstandingProvider({
id: "acme-ai",
capabilities: ["image", "audio"],
describeImage: async (req) => ({ text: "A photo of..." }),
transcribeAudio: async (req) => ({ text: "Transcript..." }),
});
api.registerImageGenerationProvider({
id: "acme-ai",
label: "Acme Images",
generate: async (req) => ({ /* image result */ }),
});
api.registerVideoGenerationProvider({
id: "acme-ai",
label: "Acme Video",
capabilities: {
generate: {
maxVideos: 1,
maxDurationSeconds: 10,
supportsResolution: true,
```typescript
api.registerRealtimeTranscriptionProvider({
id: "acme-ai",
label: "Acme Realtime Transcription",
isConfigured: () => true,
createSession: (req) => {
const apiKey = String(req.providerConfig.apiKey ?? "");
return createRealtimeTranscriptionWebSocketSession({
providerId: "acme-ai",
callbacks: req,
url: "wss://api.example.com/v1/realtime-transcription",
headers: { Authorization: `Bearer ${apiKey}` },
onMessage: (event, transport) => {
if (event.type === "session.created") {
transport.sendJson({ type: "session.update" });
transport.markReady();
return;
}
if (event.type === "transcript.final") {
req.onTranscript?.(event.text);
}
},
sendAudio: (audio, transport) => {
transport.sendJson({
type: "audio.append",
audio: audio.toString("base64"),
});
},
onClose: (transport) => {
transport.sendJson({ type: "audio.end" });
},
});
},
imageToVideo: {
enabled: true,
maxVideos: 1,
maxInputImages: 1,
maxDurationSeconds: 5,
});
```
Постачальники batch STT, які надсилають multipart-аудіо через POST, мають використовувати
`buildAudioTranscriptionFormData(...)` з
`openclaw/plugin-sdk/provider-http`. Цей helper нормалізує
імена файлів завантаження, зокрема AAC-завантаження, яким для
сумісних API транскрипції потрібне ім’я файлу у стилі M4A.
</Tab>
<Tab title="Голос у реальному часі">
```typescript
api.registerRealtimeVoiceProvider({
id: "acme-ai",
label: "Acme Realtime Voice",
isConfigured: ({ providerConfig }) => Boolean(providerConfig.apiKey),
createBridge: (req) => ({
connect: async () => {},
sendAudio: () => {},
setMediaTimestamp: () => {},
submitToolResult: () => {},
acknowledgeMark: () => {},
close: () => {},
isConnected: () => true,
}),
});
```
</Tab>
<Tab title="Розуміння медіа">
```typescript
api.registerMediaUnderstandingProvider({
id: "acme-ai",
capabilities: ["image", "audio"],
describeImage: async (req) => ({ text: "A photo of..." }),
transcribeAudio: async (req) => ({ text: "Transcript..." }),
});
```
</Tab>
<Tab title="Генерація зображень і відео">
Можливості відео використовують форму з урахуванням **mode**: `generate`,
`imageToVideo` і `videoToVideo`. Плоских агрегованих полів на кшталт
`maxInputImages` / `maxInputVideos` / `maxDurationSeconds` недостатньо,
щоб коректно рекламувати підтримку режимів трансформації або вимкнені режими.
Генерація музики дотримується того самого шаблону з явними блоками `generate` /
`edit`.
```typescript
api.registerImageGenerationProvider({
id: "acme-ai",
label: "Acme Images",
generate: async (req) => ({ /* image result */ }),
});
api.registerVideoGenerationProvider({
id: "acme-ai",
label: "Acme Video",
capabilities: {
generate: { maxVideos: 1, maxDurationSeconds: 10, supportsResolution: true },
imageToVideo: { enabled: true, maxVideos: 1, maxInputImages: 1, maxDurationSeconds: 5 },
videoToVideo: { enabled: false },
},
videoToVideo: {
enabled: false,
generateVideo: async (req) => ({ videos: [] }),
});
```
</Tab>
<Tab title="Web fetch і search">
```typescript
api.registerWebFetchProvider({
id: "acme-ai-fetch",
label: "Acme Fetch",
hint: "Отримуйте сторінки через бекенд рендерингу Acme.",
envVars: ["ACME_FETCH_API_KEY"],
placeholder: "acme-...",
signupUrl: "https://acme.example.com/fetch",
credentialPath: "plugins.entries.acme.config.webFetch.apiKey",
getCredentialValue: (fetchConfig) => fetchConfig?.acme?.apiKey,
setCredentialValue: (fetchConfigTarget, value) => {
const acme = (fetchConfigTarget.acme ??= {});
acme.apiKey = value;
},
},
generateVideo: async (req) => ({ videos: [] }),
});
createTool: () => ({
description: "Отримати сторінку через Acme Fetch.",
parameters: {},
execute: async (args) => ({ content: [] }),
}),
});
api.registerWebFetchProvider({
id: "acme-ai-fetch",
label: "Acme Fetch",
hint: "Fetch pages through Acme's rendering backend.",
envVars: ["ACME_FETCH_API_KEY"],
placeholder: "acme-...",
signupUrl: "https://acme.example.com/fetch",
credentialPath: "plugins.entries.acme.config.webFetch.apiKey",
getCredentialValue: (fetchConfig) => fetchConfig?.acme?.apiKey,
setCredentialValue: (fetchConfigTarget, value) => {
const acme = (fetchConfigTarget.acme ??= {});
acme.apiKey = value;
},
createTool: () => ({
description: "Fetch a page through Acme Fetch.",
parameters: {},
execute: async (args) => ({ content: [] }),
}),
});
api.registerWebSearchProvider({
id: "acme-ai-search",
label: "Acme Search",
search: async (req) => ({ content: [] }),
});
}
```
OpenClaw класифікує це як plugin **гібридних можливостей**. Це
рекомендований шаблон для корпоративних plugin (один plugin на вендора). Див.
[Внутрішня архітектура: володіння можливостями](/uk/plugins/architecture#capability-ownership-model).
Для генерації відео віддавайте перевагу показаній вище структурі можливостей, що враховує режим:
`generate`, `imageToVideo` і `videoToVideo`. Плоскі агреговані поля на кшталт
`maxInputImages`, `maxInputVideos` і `maxDurationSeconds` недостатні,
щоб коректно оголошувати підтримку режимів трансформації або вимкнених режимів.
Для потокових STT-постачальників віддавайте перевагу спільному хелперу WebSocket. Він забезпечує
узгодженість proxy capture, backoff при повторному підключенні, flush під час закриття, ready-handshake,
постановки аудіо в чергу та діагностики подій закриття між постачальниками, водночас
залишаючи коду постачальника відповідальність лише за відображення upstream-подій.
Пакетні STT-постачальники, які надсилають multipart audio через POST, повинні використовувати
`buildAudioTranscriptionFormData(...)` з
`openclaw/plugin-sdk/provider-http` разом із хелперами HTTP-запитів постачальника.
Хелпер форми нормалізує імена файлів завантаження, включно з AAC-завантаженнями,
яким потрібне ім’я файлу у стилі M4A для сумісних API транскрибування.
Постачальники генерації музики повинні дотримуватися того самого шаблону:
`generate` для генерації лише за prompt і `edit` для генерації
на основі референсного зображення. Плоскі агреговані поля на кшталт `maxInputImages`,
`supportsLyrics` і `supportsFormat` недостатні, щоб оголошувати підтримку
редагування; очікуваним контрактом є явні блоки `generate` / `edit`.
api.registerWebSearchProvider({
id: "acme-ai-search",
label: "Acme Search",
search: async (req) => ({ content: [] }),
});
```
</Tab>
</Tabs>
</Step>
<Step title="Тестування">
<a id="step-6-test"></a>
```typescript src/provider.test.ts
import { describe, it, expect } from "vitest";
// Export your provider config object from index.ts or a dedicated file
@ -785,36 +693,36 @@ clawhub package publish your-org/your-plugin --dry-run
clawhub package publish your-org/your-plugin
```
Не використовуйте тут застарілий аліас публікації лише для Skills; пакети plugin слід публікувати через
Не використовуйте тут застарілий псевдонім публікації лише для Skills; пакети plugin слід публікувати через
`clawhub package publish`.
## Структура файлів
```
<bundled-plugin-root>/acme-ai/
├── package.json # openclaw.providers metadata
├── openclaw.plugin.json # Manifest with provider auth metadata
├── package.json # Метадані openclaw.providers
├── openclaw.plugin.json # Маніфест із метаданими auth постачальника
├── index.ts # definePluginEntry + registerProvider
└── src/
├── provider.test.ts # Tests
└── usage.ts # Usage endpoint (optional)
├── provider.test.ts # Тести
└── usage.ts # Endpoint використання (необов’язково)
```
## Довідник порядку каталогу
## Довідка щодо порядку каталогу
`catalog.order` керує тим, коли ваш каталог зливається відносно вбудованих
постачальників:
| Порядок | Коли | Варіант використання |
| Order | Коли | Випадок використання |
| --------- | ------------- | ---------------------------------------------- |
| `simple` | Перший прохід | Прості постачальники з API-ключем |
| `profile` | Після simple | Постачальники, обмежені auth-профілями |
| `simple` | Перший прохід | Звичайні постачальники з API-ключем |
| `profile` | Після simple | Постачальники, обмежені профілями auth |
| `paired` | Після profile | Синтез кількох пов’язаних записів |
| `late` | Останній прохід | Перевизначити наявних постачальників (перемагає при колізії) |
| `late` | Останній прохід | Перевизначення наявних постачальників (виграє при конфлікті) |
## Наступні кроки
- [Channel Plugins](/uk/plugins/sdk-channel-plugins) — якщо ваш plugin також надає канал
- [SDK Runtime](/uk/plugins/sdk-runtime) — хелпери `api.runtime` (TTS, search, subagent)
- [SDK Runtime](/uk/plugins/sdk-runtime) — helperи `api.runtime` (TTS, search, subagent)
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник імпортів subpath
- [Внутрішня архітектура plugin](/uk/plugins/architecture#provider-runtime-hooks) — деталі хуків і приклади вбудованих постачальників
- [Внутрішні механізми plugin](/uk/plugins/architecture#provider-runtime-hooks) — деталі hook і приклади вбудованих