chore(i18n): refresh uk translations
This commit is contained in:
parent
a000ac4238
commit
37fd8f9d9c
@ -1,40 +1,41 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібен довідник із налаштування моделей для кожного постачальника окремо
|
||||
- Ви хочете приклади конфігурацій або команд CLI для онбордингу постачальників моделей
|
||||
summary: Огляд постачальників моделей із прикладами конфігурацій і потоками CLI
|
||||
- Вам потрібні приклади конфігурацій або команди CLI для початкового налаштування постачальників моделей
|
||||
summary: Огляд постачальників моделей із прикладами конфігурацій і потоків CLI
|
||||
title: Постачальники моделей
|
||||
x-i18n:
|
||||
generated_at: "2026-04-08T03:42:18Z"
|
||||
generated_at: "2026-04-08T18:10:02Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 558ac9e34b67fcc3dd6791a01bebc17e1c34152fa6c5611593d681e8cfa532d9
|
||||
source_hash: 53e3141256781002bbe1d7e7b78724a18d061fcf36a203baae04a091b8c9ea1b
|
||||
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`, воно стає списком дозволених моделей.
|
||||
- Допоміжні команди CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
|
||||
- Резервні правила часу виконання, cooldown-перевірки та збереження перевизначень сеансу
|
||||
- Резервні правила під час виконання, cooldown-перевірки та збереження перевизначень сеансу
|
||||
задокументовано в [/concepts/model-failover](/uk/concepts/model-failover).
|
||||
- `models.providers.*.models[].contextWindow` — це власні метадані моделі;
|
||||
- `models.providers.*.models[].contextWindow` — це нативні метадані моделі;
|
||||
`models.providers.*.models[].contextTokens` — це фактичне обмеження під час виконання.
|
||||
- Плагіни постачальників можуть впроваджувати каталоги моделей через `registerProvider({ catalog })`;
|
||||
OpenClaw об’єднує цей результат у `models.providers` перед записом
|
||||
- Плагіни постачальників можуть додавати каталоги моделей через `registerProvider({ catalog })`;
|
||||
OpenClaw об’єднує цей вивід у `models.providers` перед записом
|
||||
`models.json`.
|
||||
- Маніфести постачальників можуть оголошувати `providerAuthEnvVars`, щоб загальні перевірки
|
||||
автентифікації на основі змінних середовища не потребували завантаження часу виконання плагіна. Решта базової мапи змінних середовища
|
||||
тепер використовується лише для неплагінових/базових постачальників і кількох випадків
|
||||
загального пріоритету, як-от онбординг Anthropic із пріоритетом API-ключа.
|
||||
- Плагіни постачальників також можуть володіти поведінкою часу виконання постачальника через
|
||||
- Маніфести постачальників можуть оголошувати `providerAuthEnvVars` і
|
||||
`providerAuthAliases`, щоб загальні перевірки автентифікації на основі env і варіанти постачальників
|
||||
не потребували завантаження runtime плагіна. Решта мапи env-змінних у ядрі тепер
|
||||
потрібна лише для неплагінних/вбудованих постачальників і кількох випадків із загальним пріоритетом,
|
||||
як-от початкове налаштування Anthropic із пріоритетом API-ключа.
|
||||
- Плагіни постачальників також можуть володіти поведінкою runtime постачальника через
|
||||
`normalizeModelId`, `normalizeTransport`, `normalizeConfig`,
|
||||
`applyNativeStreamingUsageCompat`, `resolveConfigApiKey`,
|
||||
`resolveSyntheticAuth`, `shouldDeferSyntheticProfileAuth`,
|
||||
@ -50,216 +51,219 @@ x-i18n:
|
||||
`isCacheTtlEligible`, `buildMissingAuthMessage`, `suppressBuiltInModel`,
|
||||
`augmentModelCatalog`, `isBinaryThinking`, `supportsXHighThinking`,
|
||||
`resolveDefaultThinkingLevel`, `applyConfigDefaults`, `isModernModelRef`,
|
||||
`prepareRuntimeAuth`, `resolveUsageAuth`, `fetchUsageSnapshot`, and
|
||||
`prepareRuntimeAuth`, `resolveUsageAuth`, `fetchUsageSnapshot`, і
|
||||
`onModelSelected`.
|
||||
- Примітка: `capabilities` часу виконання постачальника — це спільні метадані раннера (сімейство постачальника,
|
||||
особливості стенограми/інструментів, підказки щодо транспорту/кешу). Це не те
|
||||
саме, що [публічна модель можливостей](/uk/plugins/architecture#public-capability-model),
|
||||
яка описує, що реєструє плагін (текстове інференсування, мовлення тощо).
|
||||
- Примітка: `capabilities` runtime постачальника — це спільні метадані виконавця (сімейство постачальника,
|
||||
особливості транскрипту/інструментів, підказки щодо транспорту/кешу). Це не те саме,
|
||||
що [публічна модель можливостей](/uk/plugins/architecture#public-capability-model),
|
||||
яка описує, що реєструє плагін (текстовий inference, мовлення тощо).
|
||||
|
||||
## Поведінка постачальника, що належить плагіну
|
||||
## Поведінка постачальника, якою володіє плагін
|
||||
|
||||
Плагіни постачальників тепер можуть володіти більшістю специфічної для постачальника логіки, тоді як OpenClaw зберігає
|
||||
загальний цикл інференсування.
|
||||
Тепер плагіни постачальників можуть володіти більшістю специфічної логіки постачальника, тоді як OpenClaw зберігає
|
||||
загальний цикл inference.
|
||||
|
||||
Типовий розподіл:
|
||||
Типовий поділ:
|
||||
|
||||
- `auth[].run` / `auth[].runNonInteractive`: постачальник володіє потоками онбордингу/входу
|
||||
- `auth[].run` / `auth[].runNonInteractive`: постачальник володіє потоками початкового налаштування/входу
|
||||
для `openclaw onboard`, `openclaw models auth` і безголового налаштування
|
||||
- `wizard.setup` / `wizard.modelPicker`: постачальник володіє підписами вибору автентифікації,
|
||||
застарілими псевдонімами, підказками списку дозволених моделей під час онбордингу та записами налаштування в засобах вибору онбордингу/моделей
|
||||
- `wizard.setup` / `wizard.modelPicker`: постачальник володіє мітками вибору автентифікації,
|
||||
застарілими псевдонімами, підказками щодо списку дозволених моделей для початкового налаштування і записами налаштування в пікерах онбордингу/моделей
|
||||
- `catalog`: постачальник з’являється в `models.providers`
|
||||
- `normalizeModelId`: постачальник нормалізує застарілі/preview-ідентифікатори моделей перед
|
||||
- `normalizeModelId`: постачальник нормалізує застарілі/preview ідентифікатори моделей перед
|
||||
пошуком або канонізацією
|
||||
- `normalizeTransport`: постачальник нормалізує `api` / `baseUrl` сімейства транспорту
|
||||
перед загальним складанням моделі; OpenClaw спочатку перевіряє відповідного постачальника,
|
||||
перед загальним збиранням моделі; OpenClaw спершу перевіряє відповідного постачальника,
|
||||
потім інші плагіни постачальників із підтримкою хуків, доки один із них справді не змінить
|
||||
транспорт
|
||||
- `normalizeConfig`: постачальник нормалізує конфігурацію `models.providers.<id>` перед
|
||||
її використанням під час виконання; OpenClaw спочатку перевіряє відповідного постачальника, потім інші
|
||||
- `normalizeConfig`: постачальник нормалізує конфігурацію `models.providers.<id>` перед тим,
|
||||
як runtime її використає; OpenClaw спершу перевіряє відповідного постачальника, потім інші
|
||||
плагіни постачальників із підтримкою хуків, доки один із них справді не змінить конфігурацію. Якщо жоден
|
||||
хук постачальника не переписує конфігурацію, вбудовані допоміжні засоби сімейства Google
|
||||
усе ще нормалізують підтримувані записи постачальників Google.
|
||||
- `applyNativeStreamingUsageCompat`: постачальник застосовує переписування сумісності власного потокового використання на основі кінцевої точки для конфігурованих постачальників
|
||||
- `resolveConfigApiKey`: постачальник розв’язує автентифікацію за маркером змінної середовища для конфігурованих постачальників
|
||||
без примусового повного завантаження автентифікації часу виконання. `amazon-bedrock` тут також має
|
||||
вбудований резолвер маркерів середовища AWS, хоча автентифікація часу виконання Bedrock використовує
|
||||
типовий ланцюжок AWS SDK.
|
||||
- `resolveSyntheticAuth`: постачальник може надавати доступність локальної/self-hosted чи іншої
|
||||
автентифікації на основі конфігурації без збереження незашифрованих секретів
|
||||
- `shouldDeferSyntheticProfileAuth`: постачальник може позначати збережені синтетичні профілі-заповнювачі
|
||||
як менш пріоритетні, ніж автентифікація на основі env/config
|
||||
хук постачальника не переписує конфігурацію, вбудовані допоміжні засоби для сімейства Google
|
||||
усе одно нормалізують підтримувані записи постачальників Google.
|
||||
- `applyNativeStreamingUsageCompat`: постачальник застосовує сумісні переписування native streaming-usage, керовані endpoint, для конфігурованих постачальників
|
||||
- `resolveConfigApiKey`: постачальник визначає автентифікацію через env-маркери для конфігурованих постачальників
|
||||
без примусового завантаження повної runtime-автентифікації. `amazon-bedrock` також має
|
||||
вбудований resolver AWS env-marker тут, хоча runtime-автентифікація Bedrock використовує
|
||||
стандартний ланцюжок AWS SDK.
|
||||
- `resolveSyntheticAuth`: постачальник може показувати доступність локальної/self-hosted або іншої
|
||||
автентифікації на основі конфігурації без збереження секретів у відкритому вигляді
|
||||
- `shouldDeferSyntheticProfileAuth`: постачальник може позначати збережені синтетичні заповнювачі профілів
|
||||
як менш пріоритетні, ніж автентифікація на основі env/конфігурації
|
||||
- `resolveDynamicModel`: постачальник приймає ідентифікатори моделей, яких ще немає в локальному
|
||||
статичному каталозі
|
||||
- `prepareDynamicModel`: постачальнику потрібне оновлення метаданих перед повторною спробою
|
||||
динамічного розв’язання
|
||||
- `prepareDynamicModel`: постачальнику потрібно оновлення метаданих перед повторною спробою
|
||||
динамічного визначення
|
||||
- `normalizeResolvedModel`: постачальнику потрібні переписування транспорту або base URL
|
||||
- `contributeResolvedModelCompat`: постачальник додає прапорці сумісності для своїх
|
||||
вендорних моделей навіть тоді, коли вони надходять через інший сумісний транспорт
|
||||
- `capabilities`: постачальник публікує особливості стенограми/інструментів/сімейства постачальника
|
||||
- `normalizeToolSchemas`: постачальник очищає схеми інструментів перед тим, як їх побачить
|
||||
вбудований раннер
|
||||
- `inspectToolSchemas`: постачальник показує попередження про схему, специфічні для транспорту,
|
||||
- `contributeResolvedModelCompat`: постачальник додає прапори сумісності для своїх
|
||||
вендорських моделей, навіть коли вони надходять через інший сумісний транспорт
|
||||
- `capabilities`: постачальник публікує особливості транскрипту/інструментів/сімейства постачальника
|
||||
- `normalizeToolSchemas`: постачальник очищає схеми інструментів, перш ніж вбудований
|
||||
виконавець їх побачить
|
||||
- `inspectToolSchemas`: постачальник показує специфічні для транспорту попередження про схеми
|
||||
після нормалізації
|
||||
- `resolveReasoningOutputMode`: постачальник вибирає власні чи теговані
|
||||
контракти виводу міркувань
|
||||
- `prepareExtraParams`: постачальник задає типові значення або нормалізує параметри запиту для кожної моделі
|
||||
- `createStreamFn`: постачальник замінює звичайний шлях потоку повністю
|
||||
власним транспортом
|
||||
- `wrapStreamFn`: постачальник застосовує обгортки сумісності заголовків/тіла/моделі запиту
|
||||
- `resolveTransportTurnState`: постачальник надає власні заголовки або метадані транспорту
|
||||
для кожного ходу
|
||||
- `resolveWebSocketSessionPolicy`: постачальник надає власні заголовки сеансу WebSocket
|
||||
або політику cooldown сеансу
|
||||
- `resolveReasoningOutputMode`: постачальник обирає нативні чи теговані
|
||||
контракти виводу reasoning
|
||||
- `prepareExtraParams`: постачальник задає значення за замовчуванням або нормалізує параметри запиту для кожної моделі
|
||||
- `createStreamFn`: постачальник замінює звичайний шлях потоку на повністю
|
||||
власний транспорт
|
||||
- `wrapStreamFn`: постачальник застосовує обгортки сумісності для заголовків/тіла/моделі запиту
|
||||
- `resolveTransportTurnState`: постачальник надає нативні заголовки транспорту
|
||||
або метадані на кожен хід
|
||||
- `resolveWebSocketSessionPolicy`: постачальник надає нативні заголовки сесії WebSocket
|
||||
або політику cool-down сесії
|
||||
- `createEmbeddingProvider`: постачальник володіє поведінкою embedding для пам’яті, коли вона
|
||||
належить плагіну постачальника, а не базовому комутатору embedding
|
||||
- `formatApiKey`: постачальник форматує збережені профілі автентифікації у
|
||||
рядок `apiKey`, який очікує транспорт під час виконання
|
||||
має належати плагіну постачальника, а не вбудованому комутатору embedding
|
||||
- `formatApiKey`: постачальник форматує збережені профілі автентифікації у runtime-рядок
|
||||
`apiKey`, очікуваний транспортом
|
||||
- `refreshOAuth`: постачальник володіє оновленням OAuth, коли спільних
|
||||
засобів оновлення `pi-ai` недостатньо
|
||||
- `buildAuthDoctorHint`: постачальник додає вказівки з відновлення, коли оновлення OAuth
|
||||
не вдається
|
||||
- `matchesContextOverflowError`: постачальник розпізнає специфічні для постачальника
|
||||
помилки переповнення контекстного вікна, які пропустили б загальні евристики
|
||||
- `classifyFailoverReason`: постачальник мапить специфічні для постачальника сирі помилки транспорту/API
|
||||
на причини перемикання, як-от rate limit або перевантаження
|
||||
- `isCacheTtlEligible`: постачальник визначає, які ідентифікатори моделей вищого рівня підтримують TTL кешу промптів
|
||||
помилки переповнення context window, які загальні евристики пропустили б
|
||||
- `classifyFailoverReason`: постачальник зіставляє специфічні для постачальника сирі помилки транспорту/API
|
||||
з причинами failover, такими як rate limit або overload
|
||||
- `isCacheTtlEligible`: постачальник вирішує, які upstream ідентифікатори моделей підтримують prompt-cache TTL
|
||||
- `buildMissingAuthMessage`: постачальник замінює загальну помилку сховища автентифікації
|
||||
на специфічну для постачальника підказку з відновлення
|
||||
- `suppressBuiltInModel`: постачальник приховує застарілі рядки вищого рівня і може повернути
|
||||
помилку, що належить вендору, для прямих помилок розв’язання
|
||||
специфічною для постачальника підказкою щодо відновлення
|
||||
- `suppressBuiltInModel`: постачальник приховує застарілі upstream-рядки і може повертати
|
||||
помилку, яка належить вендору, для прямих збоїв визначення
|
||||
- `augmentModelCatalog`: постачальник додає синтетичні/фінальні рядки каталогу після
|
||||
виявлення та злиття конфігурації
|
||||
- `isBinaryThinking`: постачальник володіє UX двійкового ввімкнення/вимкнення thinking
|
||||
виявлення та об’єднання конфігурації
|
||||
- `isBinaryThinking`: постачальник володіє UX бінарного thinking увімк./вимк.
|
||||
- `supportsXHighThinking`: постачальник вмикає `xhigh` для вибраних моделей
|
||||
- `resolveDefaultThinkingLevel`: постачальник володіє типовою політикою `/think` для
|
||||
- `resolveDefaultThinkingLevel`: постачальник володіє політикою `/think` за замовчуванням для
|
||||
сімейства моделей
|
||||
- `applyConfigDefaults`: постачальник застосовує специфічні глобальні типові значення постачальника
|
||||
- `applyConfigDefaults`: постачальник застосовує глобальні значення за замовчуванням, специфічні для постачальника,
|
||||
під час матеріалізації конфігурації на основі режиму автентифікації, env або сімейства моделей
|
||||
- `isModernModelRef`: постачальник володіє зіставленням бажаної live/smoke-моделі
|
||||
- `isModernModelRef`: постачальник володіє зіставленням бажаних live/smoke моделей
|
||||
- `prepareRuntimeAuth`: постачальник перетворює налаштовані облікові дані на короткоживучий
|
||||
токен часу виконання
|
||||
- `resolveUsageAuth`: постачальник розв’язує облікові дані використання/квоти для `/usage`
|
||||
runtime-токен
|
||||
- `resolveUsageAuth`: постачальник визначає облікові дані використання/квот для `/usage`
|
||||
і пов’язаних поверхонь статусу/звітності
|
||||
- `fetchUsageSnapshot`: постачальник володіє отриманням/розбором кінцевої точки використання, тоді як
|
||||
базова система все ще володіє оболонкою підсумку та форматуванням
|
||||
- `onModelSelected`: постачальник виконує побічні ефекти після вибору, як-от
|
||||
телеметрія або ведення обліку сеансу, що належить постачальнику
|
||||
- `fetchUsageSnapshot`: постачальник володіє отриманням/розбором endpoint використання, тоді як
|
||||
ядро все ще володіє оболонкою зведення та форматуванням
|
||||
- `onModelSelected`: постачальник виконує побічні дії після вибору моделі, такі як
|
||||
телеметрія або керування сеансом, що належить постачальнику
|
||||
|
||||
Поточні вбудовані приклади:
|
||||
|
||||
- `anthropic`: резервна пряма сумісність для Claude 4.6, підказки з відновлення автентифікації, отримання
|
||||
кінцевої точки використання, метадані TTL кешу/сімейства постачальника та глобальні
|
||||
типові значення конфігурації з урахуванням автентифікації
|
||||
- `amazon-bedrock`: зіставлення переповнення контексту та класифікація причин
|
||||
перемикання, що належать постачальнику, для специфічних помилок Bedrock щодо throttle/not-ready, а також
|
||||
спільне сімейство повторного відтворення `anthropic-by-model` для політики replay лише Claude
|
||||
- `anthropic`: резервна сумісність уперед для Claude 4.6, підказки з відновлення автентифікації, отримання
|
||||
endpoint використання, метадані cache-TTL/сімейства постачальника та глобальні
|
||||
значення конфігурації за замовчуванням з урахуванням автентифікації
|
||||
- `amazon-bedrock`: визначення переповнення контексту та класифікація причин
|
||||
failover для специфічних помилок Bedrock throttle/not-ready, а також
|
||||
спільне сімейство повторного відтворення `anthropic-by-model` для захисту політики replay лише для Claude
|
||||
на трафіку Anthropic
|
||||
- `anthropic-vertex`: обмеження політики replay лише Claude для Anthropic-message
|
||||
трафіку
|
||||
- `openrouter`: наскрізні ідентифікатори моделей, обгортки запитів, підказки
|
||||
щодо можливостей постачальника, санітизація thought-signature Gemini на проксійованому трафіку Gemini,
|
||||
проксійнe впровадження reasoning через сімейство потоків `openrouter-thinking`, переадресація
|
||||
метаданих маршрутизації та політика TTL кешу
|
||||
- `github-copilot`: онбординг/вхід із пристрою, резервне суміщення моделей для майбутньої сумісності,
|
||||
підказки стенограми Claude-thinking, обмін токенів часу виконання та отримання
|
||||
кінцевої точки використання
|
||||
- `openai`: резервна пряма сумісність для GPT-5.4, нормалізація прямого транспорту
|
||||
OpenAI, підказки про відсутню автентифікацію з урахуванням Codex, приглушення Spark, синтетичні
|
||||
рядки каталогу OpenAI/Codex, політика thinking/live-моделей, нормалізація псевдонімів токенів використання (`input` / `output` і сімейства `prompt` / `completion`), спільне
|
||||
сімейство потоків `openai-responses-defaults` для власних обгорток OpenAI/Codex,
|
||||
метадані сімейства постачальника, реєстрація вбудованого постачальника генерації зображень
|
||||
для `gpt-image-1` та реєстрація вбудованого постачальника генерації відео
|
||||
для `sora-2`
|
||||
- `google` і `google-gemini-cli`: резервна пряма сумісність для Gemini 3.1,
|
||||
власна перевірка replay Gemini, санітизація bootstrap replay, тегований
|
||||
режим виводу reasoning, зіставлення сучасних моделей, реєстрація вбудованого постачальника генерації зображень для моделей Gemini image-preview і вбудована
|
||||
- `anthropic-vertex`: захист політики replay лише для Claude на трафіку
|
||||
Anthropic-message
|
||||
- `openrouter`: наскрізні ідентифікатори моделей, обгортки запитів, підказки щодо можливостей постачальника,
|
||||
очищення thought-signature Gemini на проксійованому трафіку Gemini, ін’єкція proxy
|
||||
reasoning через сімейство потоків `openrouter-thinking`, пересилання метаданих
|
||||
маршрутизації та політика cache-TTL
|
||||
- `github-copilot`: початкове налаштування/вхід через пристрій, резервна сумісність моделей уперед,
|
||||
підказки транскрипту Claude-thinking, обмін runtime-токенів і отримання endpoint
|
||||
використання
|
||||
- `openai`: резервна сумісність уперед для GPT-5.4, пряма нормалізація транспорту OpenAI,
|
||||
підказки відсутньої автентифікації з урахуванням Codex, приглушення Spark, синтетичні
|
||||
рядки каталогу OpenAI/Codex, політика thinking/live-model, нормалізація псевдонімів токенів використання
|
||||
(`input` / `output` і сімейства `prompt` / `completion`), спільне сімейство потоків
|
||||
`openai-responses-defaults` для нативних обгорток OpenAI/Codex,
|
||||
метадані сімейства постачальника, вбудована реєстрація постачальника
|
||||
генерації зображень для `gpt-image-1` і вбудована реєстрація постачальника
|
||||
генерації відео для `sora-2`
|
||||
- `google` і `google-gemini-cli`: резервна сумісність уперед для Gemini 3.1,
|
||||
нативна перевірка replay Gemini, очищення bootstrap replay, тегований
|
||||
режим виводу reasoning, зіставлення сучасних моделей, вбудована реєстрація постачальника генерації зображень
|
||||
для preview-моделей Gemini image і вбудована
|
||||
реєстрація постачальника генерації відео для моделей Veo; OAuth Gemini CLI також
|
||||
володіє форматуванням токенів профілю автентифікації, розбором токенів використання та отриманням
|
||||
кінцевої точки квот для поверхонь використання
|
||||
- `moonshot`: спільний транспорт, нормалізація корисного навантаження thinking, що належить плагіну
|
||||
- `kilocode`: спільний транспорт, заголовки запиту, що належать плагіну, нормалізація
|
||||
корисного навантаження reasoning, санітизація thought-signature проксійованого Gemini та політика TTL кешу
|
||||
- `zai`: резервна пряма сумісність для GLM-5, типові значення `tool_stream`, TTL кешу,
|
||||
політика binary-thinking/live-моделей, а також автентифікація використання + отримання квот;
|
||||
endpoint квот для поверхонь використання
|
||||
- `moonshot`: спільний транспорт, нормалізація payload thinking, що належить плагіну
|
||||
- `kilocode`: спільний транспорт, заголовки запитів, що належать плагіну, нормалізація payload reasoning,
|
||||
очищення thought-signature proxy-Gemini і політика cache-TTL
|
||||
- `zai`: резервна сумісність уперед для GLM-5, значення за замовчуванням `tool_stream`, політика cache-TTL,
|
||||
політика binary-thinking/live-model і автентифікація використання + отримання квот;
|
||||
невідомі ідентифікатори `glm-5*` синтезуються з вбудованого шаблону `glm-4.7`
|
||||
- `xai`: нормалізація власного транспорту Responses, переписування псевдонімів `/fast` для
|
||||
швидких варіантів Grok, типовий `tool_stream`, очищення схем інструментів /
|
||||
корисного навантаження reasoning, специфічне для xAI, та вбудована реєстрація постачальника генерації відео
|
||||
- `xai`: нативна нормалізація транспорту Responses, переписування псевдонімів `/fast` для
|
||||
швидких варіантів Grok, значення за замовчуванням `tool_stream`, очищення схем інструментів /
|
||||
payload reasoning для xAI і вбудована реєстрація постачальника генерації відео
|
||||
для `grok-imagine-video`
|
||||
- `mistral`: метадані можливостей, що належать плагіну
|
||||
- `opencode` і `opencode-go`: метадані можливостей, що належать плагіну, плюс
|
||||
санітизація thought-signature проксійованого Gemini
|
||||
очищення thought-signature proxy-Gemini
|
||||
- `alibaba`: каталог генерації відео, що належить плагіну, для прямих посилань на моделі Wan,
|
||||
таких як `alibaba/wan2.6-t2v`
|
||||
як-от `alibaba/wan2.6-t2v`
|
||||
- `byteplus`: каталоги, що належать плагіну, плюс вбудована реєстрація постачальника генерації відео
|
||||
для моделей Seedance text-to-video/image-to-video
|
||||
- `fal`: вбудована реєстрація постачальника генерації відео для розміщеної сторонньої
|
||||
реєстрації постачальника генерації зображень для моделей зображень FLUX, а також вбудована
|
||||
реєстрація постачальника генерації відео для розміщених сторонніх відеомоделей
|
||||
- `fal`: вбудована реєстрація постачальника генерації відео для hosted third-party
|
||||
реєстрація постачальника генерації зображень для моделей FLUX image плюс вбудована
|
||||
реєстрація постачальника генерації відео для hosted third-party video models
|
||||
- `cloudflare-ai-gateway`, `huggingface`, `kimi`, `nvidia`, `qianfan`,
|
||||
`stepfun`, `synthetic`, `venice`, `vercel-ai-gateway` і `volcengine`:
|
||||
лише каталоги, що належать плагіну
|
||||
- `qwen`: каталоги, що належать плагіну, для текстових моделей плюс спільні
|
||||
реєстрації постачальників media-understanding і генерації відео для його
|
||||
мультимодальних поверхонь; генерація відео Qwen використовує стандартні кінцеві точки DashScope video з вбудованими моделями Wan, такими як `wan2.6-t2v` і `wan2.7-r2v`
|
||||
- `runway`: реєстрація постачальника генерації відео, що належить плагіну, для власних
|
||||
моделей на основі задач Runway, таких як `gen4.5`
|
||||
реєстрації постачальників media-understanding і video-generation для його
|
||||
мультимодальних поверхонь; генерація відео Qwen використовує стандартні відеоendpoint DashScope
|
||||
з вбудованими моделями Wan, такими як `wan2.6-t2v` і `wan2.7-r2v`
|
||||
- `runway`: реєстрація постачальника генерації відео, що належить плагіну, для нативних
|
||||
моделей Runway на основі задач, таких як `gen4.5`
|
||||
- `minimax`: каталоги, що належать плагіну, вбудована реєстрація постачальника генерації відео
|
||||
для моделей відео Hailuo, вбудована реєстрація постачальника генерації зображень
|
||||
для `image-01`, гібридний вибір політики replay Anthropic/OpenAI
|
||||
та логіка автентифікації/знімка використання
|
||||
для відеомоделей Hailuo, вбудована реєстрація постачальника генерації зображень
|
||||
для `image-01`, гібридний вибір політики replay Anthropic/OpenAI і логіка
|
||||
автентифікації/знімків використання
|
||||
- `together`: каталоги, що належать плагіну, плюс вбудована реєстрація постачальника генерації відео
|
||||
для відеомоделей Wan
|
||||
- `xiaomi`: каталоги, що належать плагіну, плюс логіка автентифікації/знімка використання
|
||||
- `xiaomi`: каталоги, що належать плагіну, плюс логіка автентифікації/знімків використання
|
||||
|
||||
Вбудований плагін `openai` тепер володіє обома ідентифікаторами постачальників: `openai` і
|
||||
Тепер вбудований плагін `openai` володіє обома ідентифікаторами постачальника: `openai` і
|
||||
`openai-codex`.
|
||||
|
||||
Це охоплює постачальників, які все ще вписуються у звичайні транспорти OpenClaw. Постачальник,
|
||||
Це охоплює постачальників, які все ще вписуються в нормальні транспорти OpenClaw. Постачальник,
|
||||
якому потрібен повністю власний виконавець запитів, — це окрема, глибша поверхня розширення.
|
||||
|
||||
## Ротація API-ключів
|
||||
|
||||
- Підтримує загальну ротацію постачальників для вибраних постачальників.
|
||||
- Налаштуйте кілька ключів через:
|
||||
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (єдиний live-override, найвищий пріоритет)
|
||||
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (одне live-перевизначення, найвищий пріоритет)
|
||||
- `<PROVIDER>_API_KEYS` (список через кому або крапку з комою)
|
||||
- `<PROVIDER>_API_KEY` (основний ключ)
|
||||
- `<PROVIDER>_API_KEY_*` (нумерований список, наприклад `<PROVIDER>_API_KEY_1`)
|
||||
- Для постачальників Google як резерв також додається `GOOGLE_API_KEY`.
|
||||
- Порядок вибору ключів зберігає пріоритет і видаляє дублікати значень.
|
||||
- Запити повторюються з наступним ключем лише у відповідь на rate-limit (наприклад,
|
||||
- Для постачальників Google `GOOGLE_API_KEY` також включено як резервний варіант.
|
||||
- Порядок вибору ключів зберігає пріоритет і усуває дублікати значень.
|
||||
- Запити повторюються з наступним ключем лише у відповідях із rate limit (наприклад
|
||||
`429`, `rate_limit`, `quota`, `resource exhausted`, `Too many
|
||||
concurrent requests`, `ThrottlingException`, `concurrency limit reached`,
|
||||
`workers_ai ... quota limit exceeded` або періодичні повідомлення про ліміт використання).
|
||||
- Помилки, не пов’язані з rate-limit, завершуються негайно; ротація ключів не виконується.
|
||||
- Коли всі кандидатні ключі не спрацьовують, повертається фінальна помилка з останньої спроби.
|
||||
- Збої, не пов’язані з rate limit, завершуються негайно; ротація ключів не виконується.
|
||||
- Коли всі кандидатні ключі зазнають невдачі, повертається фінальна помилка з останньої спроби.
|
||||
|
||||
## Вбудовані постачальники (каталог pi-ai)
|
||||
|
||||
OpenClaw постачається з каталогом pi‑ai. Ці постачальники не потребують
|
||||
конфігурації `models.providers`; достатньо задати автентифікацію й вибрати модель.
|
||||
OpenClaw постачається з каталогом pi‑ai. Для цих постачальників **не потрібна**
|
||||
конфігурація `models.providers`; достатньо налаштувати автентифікацію та вибрати модель.
|
||||
|
||||
### OpenAI
|
||||
|
||||
- Постачальник: `openai`
|
||||
- Автентифікація: `OPENAI_API_KEY`
|
||||
- Необов’язкова ротація: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, а також `OPENCLAW_LIVE_OPENAI_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"`)
|
||||
- Підігрів WebSocket OpenAI Responses типово ввімкнено через `params.openaiWsWarmup` (`true`/`false`)
|
||||
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, резервно SSE)
|
||||
- Перевизначення для кожної моделі через `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
|
||||
- Warm-up OpenAI Responses WebSocket за замовчуванням увімкнено через `params.openaiWsWarmup` (`true`/`false`)
|
||||
- Пріоритетну обробку OpenAI можна ввімкнути через `agents.defaults.models["openai/<model>"].params.serviceTier`
|
||||
- `/fast` і `params.fastMode` маплять прямі запити OpenAI `openai/*` Responses на `service_tier=priority` у `api.openai.com`
|
||||
- `/fast` і `params.fastMode` зіставляють прямі запити Responses `openai/*` з `service_tier=priority` на `api.openai.com`
|
||||
- Використовуйте `params.serviceTier`, якщо вам потрібен явний рівень замість спільного перемикача `/fast`
|
||||
- Приховані заголовки атрибуції OpenClaw (`originator`, `version`,
|
||||
`User-Agent`) застосовуються лише до власного трафіку OpenAI на `api.openai.com`, а не до
|
||||
загальних OpenAI-сумісних проксі
|
||||
- Власні маршрути OpenAI також зберігають `store` Responses, підказки кешу промптів і
|
||||
формування корисного навантаження для сумісності reasoning OpenAI; проксі-маршрути — ні
|
||||
- `openai/gpt-5.3-codex-spark` навмисно приглушено в OpenClaw, оскільки жива API OpenAI його відхиляє; Spark розглядається лише як Codex
|
||||
`User-Agent`) застосовуються лише до нативного трафіку OpenAI на `api.openai.com`, а не
|
||||
до загальних OpenAI-сумісних проксі
|
||||
- Нативні маршрути OpenAI також зберігають `store` Responses, підказки prompt-cache і
|
||||
формування payload сумісності reasoning OpenAI; проксі-маршрути цього не роблять
|
||||
- `openai/gpt-5.3-codex-spark` навмисно приглушено в OpenClaw, оскільки live API OpenAI його відхиляє; Spark вважається доступним лише для Codex
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -271,12 +275,12 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
|
||||
- Постачальник: `anthropic`
|
||||
- Автентифікація: `ANTHROPIC_API_KEY`
|
||||
- Необов’язкова ротація: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, а також `OPENCLAW_LIVE_ANTHROPIC_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
|
||||
{
|
||||
@ -290,16 +294,16 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
- Автентифікація: 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"`)
|
||||
- `params.serviceTier` також передається у власних запитах Codex Responses (`chatgpt.com/backend-api`)
|
||||
- Транспорт за замовчуванням — `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 на
|
||||
`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 його показує; залежить від прав доступу
|
||||
- `openai-codex/gpt-5.4` зберігає власний `contextWindow = 1050000` і типове обмеження часу виконання `contextTokens = 272000`; перевизначте ліміт часу виконання через `models.providers.openai-codex.models[].contextTokens`
|
||||
- Примітка щодо політики: OpenAI Codex OAuth офіційно підтримується для зовнішніх інструментів/робочих процесів, таких як OpenClaw.
|
||||
- Використовує той самий перемикач `/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`
|
||||
- Примітка щодо політики: OAuth OpenAI Codex явно підтримується для зовнішніх інструментів/процесів, таких як OpenClaw.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -321,15 +325,15 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
|
||||
### Інші розміщені варіанти у стилі підписки
|
||||
|
||||
- [Qwen Cloud](/uk/providers/qwen): поверхня постачальника Qwen Cloud, а також мапінг кінцевих точок Alibaba DashScope і Coding Plan
|
||||
- [Qwen Cloud](/uk/providers/qwen): поверхня постачальника Qwen Cloud плюс зіставлення endpoint Alibaba DashScope і Coding Plan
|
||||
- [MiniMax](/uk/providers/minimax): доступ MiniMax Coding Plan через OAuth або API-ключ
|
||||
- [GLM Models](/uk/providers/glm): кінцеві точки Z.AI Coding Plan або загального API
|
||||
- [GLM Models](/uk/providers/glm): Z.AI Coding Plan або загальні API endpoint
|
||||
|
||||
### OpenCode
|
||||
|
||||
- Автентифікація: `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`)
|
||||
- Постачальник часу виконання Zen: `opencode`
|
||||
- Постачальник часу виконання Go: `opencode-go`
|
||||
- Постачальник Zen runtime: `opencode`
|
||||
- Постачальник Go runtime: `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`
|
||||
|
||||
@ -343,30 +347,30 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
|
||||
- Постачальник: `google`
|
||||
- Автентифікація: `GEMINI_API_KEY`
|
||||
- Необов’язкова ротація: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, резервний `GOOGLE_API_KEY` і `OPENCLAW_LIVE_GEMINI_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/...`; попадання в кеш Gemini відображаються як OpenClaw `cacheRead`
|
||||
(або застаріле `cached_content`) для пересилання нативного для постачальника
|
||||
дескриптора `cachedContents/...`; збіги кешу Gemini відображаються як OpenClaw `cacheRead`
|
||||
|
||||
### Google Vertex і Gemini CLI
|
||||
|
||||
- Постачальники: `google-vertex`, `google-gemini-cli`
|
||||
- Автентифікація: Vertex використовує gcloud ADC; Gemini CLI використовує власний потік OAuth
|
||||
- Увага: OAuth Gemini CLI в OpenClaw — неофіційна інтеграція. Деякі користувачі повідомляли про обмеження облікового запису Google після використання сторонніх клієнтів. Ознайомтеся з умовами Google і використовуйте некритичний обліковий запис, якщо вирішите продовжити.
|
||||
- Автентифікація: Vertex використовує gcloud ADC; Gemini CLI використовує власний OAuth-потік
|
||||
- Обережно: OAuth Gemini CLI в OpenClaw — це неофіційна інтеграція. Деякі користувачі повідомляли про обмеження облікових записів Google після використання сторонніх клієнтів. Ознайомтеся з умовами Google і використовуйте некритичний обліковий запис, якщо вирішите продовжити.
|
||||
- OAuth Gemini CLI постачається як частина вбудованого плагіна `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`
|
||||
- Типова модель: `google-gemini-cli/gemini-3-flash-preview`
|
||||
- Примітка: **не потрібно** вставляти client id або secret у `openclaw.json`. Потік входу CLI зберігає
|
||||
токени в профілях автентифікації на хості шлюзу.
|
||||
- Якщо запити не працюють після входу, задайте `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості шлюзу.
|
||||
- JSON-відповіді Gemini CLI розбираються з `response`; використання резервно береться з
|
||||
- Модель за замовчуванням: `google-gemini-cli/gemini-3-flash-preview`
|
||||
- Примітка: вам **не потрібно** вставляти client id або secret у `openclaw.json`. Потік входу CLI зберігає
|
||||
токени в профілях автентифікації на хості gateway.
|
||||
- Якщо після входу запити не працюють, задайте `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості gateway.
|
||||
- JSON-відповіді Gemini CLI аналізуються з `response`; використання резервно береться з
|
||||
`stats`, а `stats.cached` нормалізується в OpenClaw `cacheRead`.
|
||||
|
||||
### Z.AI (GLM)
|
||||
@ -376,7 +380,7 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
- Приклад моделі: `zai/glm-5.1`
|
||||
- CLI: `openclaw onboard --auth-choice zai-api-key`
|
||||
- Псевдоніми: `z.ai/*` і `z-ai/*` нормалізуються до `zai/*`
|
||||
- `zai-api-key` автоматично визначає відповідну кінцеву точку Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` і `zai-cn` примусово задають конкретну поверхню
|
||||
- `zai-api-key` автоматично визначає відповідний endpoint Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` і `zai-cn` примусово вибирають конкретну поверхню
|
||||
|
||||
### Vercel AI Gateway
|
||||
|
||||
@ -392,38 +396,37 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
- Приклад моделі: `kilocode/kilo/auto`
|
||||
- CLI: `openclaw onboard --auth-choice kilocode-api-key`
|
||||
- Base URL: `https://api.kilo.ai/api/gateway/`
|
||||
- Статичний резервний каталог постачається з `kilocode/kilo/auto`; живе
|
||||
виявлення `https://api.kilo.ai/api/gateway/models` може додатково розширити
|
||||
каталог часу виконання.
|
||||
- Точна маршрутизація на верхньому рівні за `kilocode/kilo/auto` належить Kilo Gateway,
|
||||
- Статичний резервний каталог постачається з `kilocode/kilo/auto`; live
|
||||
виявлення `https://api.kilo.ai/api/gateway/models` може додатково розширити runtime-каталог.
|
||||
- Точна upstream-маршрутизація за `kilocode/kilo/auto` належить Kilo Gateway,
|
||||
а не жорстко закодована в OpenClaw.
|
||||
|
||||
Докладніше про налаштування див. у [/providers/kilocode](/uk/providers/kilocode).
|
||||
Деталі налаштування див. у [/providers/kilocode](/uk/providers/kilocode).
|
||||
|
||||
### Інші вбудовані плагіни постачальників
|
||||
|
||||
- OpenRouter: `openrouter` (`OPENROUTER_API_KEY`)
|
||||
- Приклад моделі: `openrouter/auto`
|
||||
- OpenClaw застосовує документовані заголовки атрибуції застосунку OpenRouter лише тоді, коли
|
||||
запит справді націлений на `openrouter.ai`
|
||||
- Маркери Anthropic `cache_control`, специфічні для OpenRouter, так само обмежені
|
||||
- OpenClaw застосовує задокументовані OpenRouter заголовки атрибуції застосунку лише тоді, коли
|
||||
запит справді спрямовано на `openrouter.ai`
|
||||
- Специфічні для OpenRouter маркери Anthropic `cache_control` так само обмежені
|
||||
перевіреними маршрутами OpenRouter, а не довільними URL проксі
|
||||
- OpenRouter залишається на проксійному OpenAI-сумісному шляху, тому власне
|
||||
лише-OpenAI формування запитів (`serviceTier`, `store` Responses,
|
||||
підказки кешу промптів, payload для сумісності reasoning OpenAI) не передається
|
||||
- Посилання OpenRouter на базі Gemini зберігають лише санітизацію thought-signature проксійованого Gemini;
|
||||
власна перевірка replay Gemini та переписування bootstrap залишаються вимкненими
|
||||
- OpenRouter залишається на проксі-подібному OpenAI-сумісному шляху, тому нативне
|
||||
формування запитів лише для 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
|
||||
проксійованого Gemini; `kilocode/kilo/auto` та інші підказки, що не підтримують proxy-reasoning,
|
||||
пропускають упровадження proxy reasoning
|
||||
- Посилання 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"]`; вбудований каталог постачальника зберігає посилання чату
|
||||
лише текстовими, доки конфігурація цього постачальника не буде матеріалізована
|
||||
- Початкове налаштування/API-ключ MiniMax записує явні визначення моделі M2.7 з
|
||||
`input: ["text", "image"]`; вбудований каталог постачальника зберігає chat-посилання
|
||||
лише текстовими, доки конфігурацію цього постачальника не буде матеріалізовано
|
||||
- Moonshot: `moonshot` (`MOONSHOT_API_KEY`)
|
||||
- Приклад моделі: `moonshot/kimi-k2.5`
|
||||
- Kimi Coding: `kimi` (`KIMI_API_KEY` або `KIMICODE_API_KEY`)
|
||||
@ -449,11 +452,11 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
- BytePlus: `byteplus` (`BYTEPLUS_API_KEY`)
|
||||
- Приклад моделі: `byteplus-plan/ark-code-latest`
|
||||
- xAI: `xai` (`XAI_API_KEY`)
|
||||
- Власні вбудовані запити xAI використовують шлях xAI Responses
|
||||
- Нативні вбудовані запити 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`, щоб
|
||||
- `tool_stream` за замовчуванням увімкнений; задайте
|
||||
`agents.defaults.models["xai/<model>"].params.tool_stream` як `false`, щоб
|
||||
вимкнути його
|
||||
- Mistral: `mistral` (`MISTRAL_API_KEY`)
|
||||
- Приклад моделі: `mistral/mistral-large-latest`
|
||||
@ -470,14 +473,14 @@ OpenClaw постачається з каталогом pi‑ai. Ці поста
|
||||
Використовуйте `models.providers` (або `models.json`), щоб додати **власних** постачальників або
|
||||
OpenAI/Anthropic‑сумісні проксі.
|
||||
|
||||
Багато з наведених нижче вбудованих плагінів постачальників уже публікують типовий каталог.
|
||||
Багато з наведених нижче вбудованих плагінів постачальників уже публікують каталог за замовчуванням.
|
||||
Використовуйте явні записи `models.providers.<id>` лише тоді, коли хочете перевизначити
|
||||
типовий base URL, заголовки або список моделей.
|
||||
base URL, заголовки або список моделей за замовчуванням.
|
||||
|
||||
### Moonshot AI (Kimi)
|
||||
|
||||
Moonshot постачається як вбудований плагін постачальника. Використовуйте вбудованого постачальника
|
||||
типово й додавайте явний запис `models.providers.moonshot` лише тоді, коли
|
||||
за замовчуванням і додавайте явний запис `models.providers.moonshot` лише тоді, коли
|
||||
потрібно перевизначити base URL або метадані моделі:
|
||||
|
||||
- Постачальник: `moonshot`
|
||||
@ -517,7 +520,7 @@ Moonshot постачається як вбудований плагін пос
|
||||
|
||||
### Kimi Coding
|
||||
|
||||
Kimi Coding використовує Anthropic-сумісну кінцеву точку Moonshot AI:
|
||||
Kimi Coding використовує Anthropic-сумісний endpoint Moonshot AI:
|
||||
|
||||
- Постачальник: `kimi`
|
||||
- Автентифікація: `KIMI_API_KEY`
|
||||
@ -538,7 +541,7 @@ Kimi Coding використовує Anthropic-сумісну кінцеву т
|
||||
|
||||
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`
|
||||
@ -551,13 +554,13 @@ Volcano Engine (火山引擎) надає доступ до Doubao та інши
|
||||
}
|
||||
```
|
||||
|
||||
Під час онбордингу типово вибирається coding-поверхня, але загальний каталог `volcengine/*`
|
||||
Початкове налаштування за замовчуванням використовує поверхню coding, але загальний каталог `volcengine/*`
|
||||
реєструється одночасно.
|
||||
|
||||
У засобах вибору моделей під час онбордингу/налаштування вибір автентифікації Volcengine надає перевагу і рядкам
|
||||
У пікерах моделей під час початкового налаштування/конфігурування вибір автентифікації Volcengine віддає перевагу і рядкам
|
||||
`volcengine/*`, і `volcengine-plan/*`. Якщо ці моделі ще не завантажено,
|
||||
OpenClaw повертається до нефільтрованого каталогу замість показу порожнього
|
||||
засобу вибору в межах постачальника.
|
||||
OpenClaw повертається до нефільтрованого каталогу замість того, щоб показувати порожній
|
||||
пікер у межах постачальника.
|
||||
|
||||
Доступні моделі:
|
||||
|
||||
@ -567,7 +570,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`
|
||||
@ -575,11 +578,11 @@ Coding-моделі (`volcengine-plan`):
|
||||
- `volcengine-plan/kimi-k2-thinking`
|
||||
- `volcengine-plan/glm-4.7`
|
||||
|
||||
### BytePlus (International)
|
||||
### BytePlus (міжнародний)
|
||||
|
||||
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`
|
||||
@ -592,13 +595,13 @@ BytePlus ARK надає міжнародним користувачам дост
|
||||
}
|
||||
```
|
||||
|
||||
Під час онбордингу типово вибирається coding-поверхня, але загальний каталог `byteplus/*`
|
||||
Початкове налаштування за замовчуванням використовує поверхню coding, але загальний каталог `byteplus/*`
|
||||
реєструється одночасно.
|
||||
|
||||
У засобах вибору моделей під час онбордингу/налаштування вибір автентифікації BytePlus надає перевагу і рядкам
|
||||
У пікерах моделей під час початкового налаштування/конфігурування вибір автентифікації BytePlus віддає перевагу і рядкам
|
||||
`byteplus/*`, і `byteplus-plan/*`. Якщо ці моделі ще не завантажено,
|
||||
OpenClaw повертається до нефільтрованого каталогу замість показу порожнього
|
||||
засобу вибору в межах постачальника.
|
||||
OpenClaw повертається до нефільтрованого каталогу замість того, щоб показувати порожній
|
||||
пікер у межах постачальника.
|
||||
|
||||
Доступні моделі:
|
||||
|
||||
@ -606,7 +609,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`
|
||||
@ -616,7 +619,7 @@ Coding-моделі (`byteplus-plan`):
|
||||
|
||||
### Synthetic
|
||||
|
||||
Synthetic надає Anthropic-сумісні моделі за постачальником `synthetic`:
|
||||
Synthetic надає Anthropic-сумісні моделі через постачальника `synthetic`:
|
||||
|
||||
- Постачальник: `synthetic`
|
||||
- Автентифікація: `SYNTHETIC_API_KEY`
|
||||
@ -644,39 +647,39 @@ Synthetic надає Anthropic-сумісні моделі за постачал
|
||||
|
||||
### MiniMax
|
||||
|
||||
MiniMax налаштовується через `models.providers`, оскільки використовує власні кінцеві точки:
|
||||
MiniMax налаштовується через `models.providers`, оскільки використовує власні endpoint:
|
||||
|
||||
- MiniMax OAuth (Global): `--auth-choice minimax-global-oauth`
|
||||
- MiniMax OAuth (CN): `--auth-choice minimax-cn-oauth`
|
||||
- MiniMax API key (Global): `--auth-choice minimax-global-api`
|
||||
- MiniMax API key (CN): `--auth-choice minimax-cn-api`
|
||||
- OAuth MiniMax (Global): `--auth-choice minimax-global-oauth`
|
||||
- OAuth MiniMax (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` для `minimax`; `MINIMAX_OAUTH_TOKEN` або
|
||||
`MINIMAX_API_KEY` для `minimax-portal`
|
||||
|
||||
Докладніше про налаштування, варіанти моделей і фрагменти конфігурації див. у [/providers/minimax](/uk/providers/minimax).
|
||||
Деталі налаштування, варіанти моделей і фрагменти конфігурації див. у [/providers/minimax](/uk/providers/minimax).
|
||||
|
||||
На Anthropic-сумісному потоковому шляху MiniMax OpenClaw типово вимикає thinking,
|
||||
якщо ви явно його не задасте, а `/fast on` переписує
|
||||
На Anthropic-сумісному streaming-шляху MiniMax OpenClaw вимикає thinking за
|
||||
замовчуванням, якщо ви явно його не задасте, а `/fast on` переписує
|
||||
`MiniMax-M2.7` на `MiniMax-M2.7-highspeed`.
|
||||
|
||||
Розподіл можливостей, що належать плагіну:
|
||||
Поділ можливостей, якими володіє плагін:
|
||||
|
||||
- Типові значення тексту/чату залишаються на `minimax/MiniMax-M2.7`
|
||||
- Значення за замовчуванням для тексту/чату залишаються на `minimax/MiniMax-M2.7`
|
||||
- Генерація зображень — це `minimax/image-01` або `minimax-portal/image-01`
|
||||
- Розуміння зображень — це належний плагіну `MiniMax-VL-01` на обох шляхах автентифікації MiniMax
|
||||
- Розуміння зображень — це `MiniMax-VL-01`, що належить плагіну, на обох шляхах автентифікації MiniMax
|
||||
- Вебпошук залишається на ідентифікаторі постачальника `minimax`
|
||||
|
||||
### Ollama
|
||||
|
||||
Ollama постачається як вбудований плагін постачальника й використовує власне API Ollama:
|
||||
Ollama постачається як вбудований плагін постачальника і використовує нативний API 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:
|
||||
# Встановіть Ollama, потім завантажте модель:
|
||||
ollama pull llama3.3
|
||||
```
|
||||
|
||||
@ -688,26 +691,26 @@ ollama pull llama3.3
|
||||
}
|
||||
```
|
||||
|
||||
Ollama виявляється локально за адресою `http://127.0.0.1:11434`, коли ви вмикаєте це через
|
||||
`OLLAMA_API_KEY`, а вбудований плагін постачальника додає Ollama безпосередньо до
|
||||
`openclaw onboard` і засобу вибору моделей. Докладніше про онбординг, режими cloud/local і користувацьку конфігурацію див. у [/providers/ollama](/uk/providers/ollama).
|
||||
Ollama локально виявляється за адресою `http://127.0.0.1:11434`, коли ви явно вмикаєте
|
||||
його через `OLLAMA_API_KEY`, а вбудований плагін постачальника додає Ollama безпосередньо в
|
||||
`openclaw onboard` і пікер моделей. Деталі початкового налаштування, cloud/local режиму та власної конфігурації див. у [/providers/ollama](/uk/providers/ollama).
|
||||
|
||||
### vLLM
|
||||
|
||||
vLLM постачається як вбудований плагін постачальника для локальних/self-hosted OpenAI-сумісних
|
||||
серверів:
|
||||
vLLM постачається як вбудований плагін постачальника для локальних/self-hosted
|
||||
серверів, сумісних з OpenAI:
|
||||
|
||||
- Постачальник: `vllm`
|
||||
- Автентифікація: необов’язкова (залежить від вашого сервера)
|
||||
- Типовий base URL: `http://127.0.0.1:8000/v1`
|
||||
- Base URL за замовчуванням: `http://127.0.0.1:8000/v1`
|
||||
|
||||
Щоб локально ввімкнути автовиявлення (підійде будь-яке значення, якщо ваш сервер не вимагає автентифікації):
|
||||
Щоб увімкнути автоматичне локальне виявлення (підійде будь-яке значення, якщо ваш сервер не вимагає автентифікації):
|
||||
|
||||
```bash
|
||||
export VLLM_API_KEY="vllm-local"
|
||||
```
|
||||
|
||||
Потім задайте модель (замініть на один з ідентифікаторів, що повертає `/v1/models`):
|
||||
Потім задайте модель (замініть на один з ідентифікаторів, які повертає `/v1/models`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -717,25 +720,25 @@ export VLLM_API_KEY="vllm-local"
|
||||
}
|
||||
```
|
||||
|
||||
Докладніше див. у [/providers/vllm](/uk/providers/vllm).
|
||||
Деталі див. у [/providers/vllm](/uk/providers/vllm).
|
||||
|
||||
### SGLang
|
||||
|
||||
SGLang постачається як вбудований плагін постачальника для швидких self-hosted
|
||||
OpenAI-сумісних серверів:
|
||||
серверів, сумісних з OpenAI:
|
||||
|
||||
- Постачальник: `sglang`
|
||||
- Автентифікація: необов’язкова (залежить від вашого сервера)
|
||||
- Типовий base URL: `http://127.0.0.1:30000/v1`
|
||||
- Base URL за замовчуванням: `http://127.0.0.1:30000/v1`
|
||||
|
||||
Щоб локально ввімкнути автовиявлення (підійде будь-яке значення, якщо ваш сервер не
|
||||
Щоб увімкнути автоматичне локальне виявлення (підійде будь-яке значення, якщо ваш сервер не
|
||||
вимагає автентифікації):
|
||||
|
||||
```bash
|
||||
export SGLANG_API_KEY="sglang-local"
|
||||
```
|
||||
|
||||
Потім задайте модель (замініть на один з ідентифікаторів, що повертає `/v1/models`):
|
||||
Потім задайте модель (замініть на один з ідентифікаторів, які повертає `/v1/models`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -745,11 +748,11 @@ export SGLANG_API_KEY="sglang-local"
|
||||
}
|
||||
```
|
||||
|
||||
Докладніше див. у [/providers/sglang](/uk/providers/sglang).
|
||||
Деталі див. у [/providers/sglang](/uk/providers/sglang).
|
||||
|
||||
### Локальні проксі (LM Studio, vLLM, LiteLLM тощо)
|
||||
|
||||
Приклад (OpenAI‑сумісний):
|
||||
Приклад (сумісний з OpenAI):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -784,20 +787,21 @@ export SGLANG_API_KEY="sglang-local"
|
||||
|
||||
Примітки:
|
||||
|
||||
- Для власних постачальників `reasoning`, `input`, `cost`, `contextWindow` і `maxTokens` є необов’язковими.
|
||||
Якщо їх не задано, OpenClaw використовує такі типові значення:
|
||||
- Для власних постачальників `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"` на невласних кінцевих точках (будь-який непорожній `baseUrl`, чий хост не є `api.openai.com`) OpenClaw примусово задає `compat.supportsDeveloperRole: false`, щоб уникнути помилок постачальника 400 через непідтримувані ролі `developer`.
|
||||
- Проксійні OpenAI-сумісні маршрути також пропускають власне лише-OpenAI формування запитів:
|
||||
без `service_tier`, без `store` Responses, без підказок кешу промптів, без
|
||||
формування payload для сумісності reasoning OpenAI і без прихованих заголовків атрибуції OpenClaw.
|
||||
- Якщо `baseUrl` порожній/не вказаний, OpenClaw зберігає типову поведінку OpenAI (яка веде до `api.openai.com`).
|
||||
- Для безпеки явне `compat.supportsDeveloperRole: true` усе одно перевизначається на невласних кінцевих точках `openai-completions`.
|
||||
- Рекомендовано: задавайте явні значення, що відповідають обмеженням вашого проксі/моделі.
|
||||
- Для `api: "openai-completions"` на ненативних endpoint (будь-який непорожній `baseUrl`, хост якого не є `api.openai.com`) OpenClaw примусово встановлює `compat.supportsDeveloperRole: false`, щоб уникати помилок постачальника 400 для непідтримуваних ролей `developer`.
|
||||
- Маршрути проксі-подібного OpenAI-сумісного типу також пропускають нативне формування запитів лише для OpenAI:
|
||||
без `service_tier`, без Responses `store`, без підказок prompt-cache, без
|
||||
формування payload сумісності reasoning OpenAI і без прихованих заголовків
|
||||
атрибуції OpenClaw.
|
||||
- Якщо `baseUrl` порожній/не вказаний, OpenClaw зберігає типову поведінку OpenAI (яка вказує на `api.openai.com`).
|
||||
- З міркувань безпеки явне `compat.supportsDeveloperRole: true` все одно перевизначається на ненативних endpoint `openai-completions`.
|
||||
|
||||
## Приклади CLI
|
||||
|
||||
@ -807,11 +811,11 @@ openclaw models set opencode/claude-opus-4-6
|
||||
openclaw models list
|
||||
```
|
||||
|
||||
Див. також: [/gateway/configuration](/uk/gateway/configuration) для повних прикладів конфігурації.
|
||||
Див. також: [/gateway/configuration](/uk/gateway/configuration), де наведено повні приклади конфігурації.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Models](/uk/concepts/models) — конфігурація моделей і псевдоніми
|
||||
- [Model Failover](/uk/concepts/model-failover) — ланцюжки резервного перемикання та поведінка повторних спроб
|
||||
- [Configuration Reference](/uk/gateway/configuration-reference#agent-defaults) — ключі конфігурації моделей
|
||||
- [Providers](/uk/providers) — інструкції з налаштування для кожного постачальника
|
||||
- [Configuration Reference](/uk/gateway/configuration-reference#agent-defaults) — ключі конфігурації моделі
|
||||
- [Providers](/uk/providers) — посібники з налаштування для кожного постачальника
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,75 +1,75 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви створюєте плагін OpenClaw
|
||||
- Вам потрібно постачати schema конфігурації плагіна або налагодити помилки валідації плагіна
|
||||
summary: Вимоги до маніфесту плагіна та JSON schema (сувора валідація конфігурації)
|
||||
- Вам потрібно постачати схему конфігурації плагіна або налагоджувати помилки валідації плагіна
|
||||
summary: Вимоги до маніфесту плагіна та JSON Schema (сувора валідація конфігурації)
|
||||
title: Маніфест плагіна
|
||||
x-i18n:
|
||||
generated_at: "2026-04-06T18:56:33Z"
|
||||
generated_at: "2026-04-08T18:09:11Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 22d41b9f8748b1b1b066ee856be4a8f41e88b9a8bc073d74fc79d2bb0982f01a
|
||||
source_hash: 9a7ee4b621a801d2a8f32f8976b0e1d9433c7810eb360aca466031fc0ffb286a
|
||||
source_path: plugins/manifest.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Маніфест плагіна (openclaw.plugin.json)
|
||||
|
||||
Ця сторінка стосується лише **власного маніфесту плагіна OpenClaw**.
|
||||
Ця сторінка стосується лише **нативного маніфесту плагіна OpenClaw**.
|
||||
|
||||
Сумісні макети пакетів описані в [Пакети плагінів](/uk/plugins/bundles).
|
||||
Сумісні макети bundle описано в розділі [Пакети плагінів](/uk/plugins/bundles).
|
||||
|
||||
Сумісні формати пакетів використовують інші файли маніфесту:
|
||||
Сумісні формати bundle використовують інші файли маніфесту:
|
||||
|
||||
- Пакет Codex: `.codex-plugin/plugin.json`
|
||||
- Пакет Claude: `.claude-plugin/plugin.json` або типовий макет компонентів Claude
|
||||
- Codex bundle: `.codex-plugin/plugin.json`
|
||||
- Claude bundle: `.claude-plugin/plugin.json` або типовий макет компонента Claude
|
||||
без маніфесту
|
||||
- Пакет Cursor: `.cursor-plugin/plugin.json`
|
||||
- Cursor bundle: `.cursor-plugin/plugin.json`
|
||||
|
||||
OpenClaw також автоматично виявляє ці макети пакетів, але вони не проходять валідацію
|
||||
за schema `openclaw.plugin.json`, описаною тут.
|
||||
OpenClaw також автоматично виявляє ці макети bundle, але вони не проходять валідацію
|
||||
за схемою `openclaw.plugin.json`, описаною тут.
|
||||
|
||||
Для сумісних пакетів OpenClaw наразі зчитує метадані пакета разом з оголошеними
|
||||
коренями Skills, коренями команд Claude, типовими значеннями `settings.json` пакета Claude,
|
||||
типовими значеннями LSP пакета Claude та підтримуваними наборами хуків, якщо макет відповідає
|
||||
Для сумісних bundle OpenClaw зараз читає метадані bundle разом з оголошеними
|
||||
коренями Skills, коренями команд Claude, значеннями за замовчуванням `settings.json` у Claude bundle,
|
||||
значеннями за замовчуванням LSP у Claude bundle та підтримуваними пакетами хукiв, коли макет відповідає
|
||||
очікуванням рантайму OpenClaw.
|
||||
|
||||
Кожен власний плагін OpenClaw **повинен** постачатися з файлом `openclaw.plugin.json` у
|
||||
Кожен нативний плагін OpenClaw **повинен** постачати файл `openclaw.plugin.json` у
|
||||
**корені плагіна**. OpenClaw використовує цей маніфест для валідації конфігурації
|
||||
**без виконання коду плагіна**. Відсутні або невалідні маніфести вважаються
|
||||
помилками плагіна та блокують валідацію конфігурації.
|
||||
**без виконання коду плагіна**. Відсутні або недійсні маніфести вважаються
|
||||
помилками плагіна і блокують валідацію конфігурації.
|
||||
|
||||
Дивіться повний посібник із системи плагінів: [Плагіни](/uk/tools/plugin).
|
||||
Щодо власної моделі можливостей і поточних рекомендацій із зовнішньої сумісності:
|
||||
Дивіться повний посібник по системі плагінів: [Плагіни](/uk/tools/plugin).
|
||||
Щодо нативної моделі можливостей і поточних рекомендацій із зовнішньої сумісності:
|
||||
[Модель можливостей](/uk/plugins/architecture#public-capability-model).
|
||||
|
||||
## Що робить цей файл
|
||||
|
||||
`openclaw.plugin.json` — це метадані, які OpenClaw зчитує до завантаження коду
|
||||
вашого плагіна.
|
||||
`openclaw.plugin.json` — це метадані, які OpenClaw читає перед завантаженням
|
||||
коду вашого плагіна.
|
||||
|
||||
Використовуйте його для:
|
||||
|
||||
- ідентифікації плагіна
|
||||
- валідації конфігурації
|
||||
- метаданих автентифікації та онбордингу, які мають бути доступні без запуску рантайму
|
||||
плагіна
|
||||
- метаданих автентифікації та онбордингу, які мають бути доступні без запуску
|
||||
рантайму плагіна
|
||||
- метаданих псевдонімів та автоувімкнення, які мають визначатися до завантаження рантайму плагіна
|
||||
- метаданих володіння скороченими сімействами моделей, які мають автоматично активувати
|
||||
- скорочених метаданих про належність до сімейств моделей, які мають автоматично активувати
|
||||
плагін до завантаження рантайму
|
||||
- статичних знімків володіння можливостями, що використовуються для сумісної в’язки bundled-плагінів і
|
||||
перевірки контрактів
|
||||
- метаданих конфігурації каналів, які мають об’єднуватися в поверхні каталогу та валідації
|
||||
- статичних знімків належності можливостей, що використовуються для вбудованої compat-обв’язки та
|
||||
покриття контрактів
|
||||
- метаданих конфігурації для конкретних каналів, які мають зливатися в поверхні каталогу й валідації
|
||||
без завантаження рантайму
|
||||
- підказок UI для конфігурації
|
||||
|
||||
Не використовуйте його для:
|
||||
|
||||
- реєстрації поведінки рантайму
|
||||
- оголошення кодових entrypoint-ів
|
||||
- оголошення кодових entrypoint
|
||||
- метаданих встановлення npm
|
||||
|
||||
Це належить коду вашого плагіна та `package.json`.
|
||||
Для цього призначені код вашого плагіна та `package.json`.
|
||||
|
||||
## Мінімальний приклад
|
||||
|
||||
@ -90,7 +90,7 @@ OpenClaw також автоматично виявляє ці макети па
|
||||
{
|
||||
"id": "openrouter",
|
||||
"name": "OpenRouter",
|
||||
"description": "Плагін провайдера OpenRouter",
|
||||
"description": "OpenRouter provider plugin",
|
||||
"version": "1.0.0",
|
||||
"providers": ["openrouter"],
|
||||
"modelSupport": {
|
||||
@ -100,6 +100,9 @@ OpenClaw також автоматично виявляє ці макети па
|
||||
"providerAuthEnvVars": {
|
||||
"openrouter": ["OPENROUTER_API_KEY"]
|
||||
},
|
||||
"providerAuthAliases": {
|
||||
"openrouter-coding": "openrouter"
|
||||
},
|
||||
"channelEnvVars": {
|
||||
"openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"]
|
||||
},
|
||||
@ -108,19 +111,19 @@ OpenClaw також автоматично виявляє ці макети па
|
||||
"provider": "openrouter",
|
||||
"method": "api-key",
|
||||
"choiceId": "openrouter-api-key",
|
||||
"choiceLabel": "Ключ API OpenRouter",
|
||||
"choiceLabel": "OpenRouter API key",
|
||||
"groupId": "openrouter",
|
||||
"groupLabel": "OpenRouter",
|
||||
"optionKey": "openrouterApiKey",
|
||||
"cliFlag": "--openrouter-api-key",
|
||||
"cliOption": "--openrouter-api-key <key>",
|
||||
"cliDescription": "Ключ API OpenRouter",
|
||||
"cliDescription": "OpenRouter API key",
|
||||
"onboardingScopes": ["text-inference"]
|
||||
}
|
||||
],
|
||||
"uiHints": {
|
||||
"apiKey": {
|
||||
"label": "Ключ API",
|
||||
"label": "API key",
|
||||
"placeholder": "sk-or-v1-...",
|
||||
"sensitive": true
|
||||
}
|
||||
@ -137,56 +140,57 @@ OpenClaw також автоматично виявляє ці макети па
|
||||
}
|
||||
```
|
||||
|
||||
## Довідка щодо полів верхнього рівня
|
||||
## Довідник полів верхнього рівня
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| Поле | Обов’язкове | Тип | Що це означає |
|
||||
| ----------------------------------- | ----------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `id` | Так | `string` | Канонічний id плагіна. Саме цей id використовується в `plugins.entries.<id>`. |
|
||||
| `id` | Так | `string` | Канонічний ідентифікатор плагіна. Це ідентифікатор, який використовується в `plugins.entries.<id>`. |
|
||||
| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього плагіна. |
|
||||
| `enabledByDefault` | Ні | `true` | Позначає bundled-плагін як увімкнений за замовчуванням. Опустіть це поле або встановіть будь-яке значення, відмінне від `true`, щоб залишити плагін вимкненим за замовчуванням. |
|
||||
| `legacyPluginIds` | Ні | `string[]` | Застарілі id, які нормалізуються до цього канонічного id плагіна. |
|
||||
| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Id провайдерів, які мають автоматично вмикати цей плагін, коли автентифікація, конфігурація або посилання на моделі згадують їх. |
|
||||
| `enabledByDefault` | Ні | `true` | Позначає вбудований плагін як увімкнений за замовчуванням. Не вказуйте це поле або встановіть будь-яке значення, відмінне від `true`, щоб плагін залишався вимкненим за замовчуванням. |
|
||||
| `legacyPluginIds` | Ні | `string[]` | Застарілі ідентифікатори, які нормалізуються до цього канонічного ідентифікатора плагіна. |
|
||||
| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають автоматично вмикати цей плагін, коли на них посилаються автентифікація, конфігурація або посилання на моделі. |
|
||||
| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип плагіна, який використовується `plugins.slots.*`. |
|
||||
| `channels` | Ні | `string[]` | Id каналів, якими володіє цей плагін. Використовується для виявлення та валідації конфігурації. |
|
||||
| `providers` | Ні | `string[]` | Id провайдерів, якими володіє цей плагін. |
|
||||
| `modelSupport` | Ні | `object` | Власні для маніфесту метадані скорочених сімейств моделей, які використовуються для автозавантаження плагіна до рантайму. |
|
||||
| `cliBackends` | Ні | `string[]` | Id backend-ів інференсу CLI, якими володіє цей плагін. Використовується для автоактивації під час запуску з явних посилань у конфігурації. |
|
||||
| `providerAuthEnvVars` | Ні | `Record<string, string[]>` | Легкі env-метадані автентифікації провайдера, які OpenClaw може перевіряти без завантаження коду плагіна. |
|
||||
| `channelEnvVars` | Ні | `Record<string, string[]>` | Легкі env-метадані каналів, які OpenClaw може перевіряти без завантаження коду плагіна. Використовуйте це для налаштування каналів через env або поверхонь автентифікації, які мають бачити стандартні помічники запуску/конфігурації. |
|
||||
| `providerAuthChoices` | Ні | `object[]` | Легкі метадані варіантів автентифікації для пікерів онбордингу, визначення preferred-provider та простої в’язки прапорців CLI. |
|
||||
| `contracts` | Ні | `object` | Статичний bundled-знімок можливостей для speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search та володіння інструментами. |
|
||||
| `channelConfigs` | Ні | `Record<string, object>` | Власні для маніфесту метадані конфігурації каналів, які об’єднуються в поверхні виявлення та валідації до завантаження рантайму. |
|
||||
| `channels` | Ні | `string[]` | Ідентифікатори каналів, якими володіє цей плагін. Використовується для виявлення та валідації конфігурації. |
|
||||
| `providers` | Ні | `string[]` | Ідентифікатори провайдерів, якими володіє цей плагін. |
|
||||
| `modelSupport` | Ні | `object` | Скорочені метадані про сімейства моделей, що належать маніфесту та використовуються для автозавантаження плагіна до запуску рантайму. |
|
||||
| `cliBackends` | Ні | `string[]` | Ідентифікатори backend для інференсу в CLI, якими володіє цей плагін. Використовується для автоактивації під час запуску з явних посилань у конфігурації. |
|
||||
| `providerAuthEnvVars` | Ні | `Record<string, string[]>` | Легкі метадані env для автентифікації провайдера, які OpenClaw може перевіряти без завантаження коду плагіна. |
|
||||
| `providerAuthAliases` | Ні | `Record<string, string>` | Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для пошуку автентифікації, наприклад coding-провайдер, який використовує той самий API-ключ і профілі автентифікації базового провайдера. |
|
||||
| `channelEnvVars` | Ні | `Record<string, string[]>` | Легкі метадані env для каналів, які OpenClaw може перевіряти без завантаження коду плагіна. Використовуйте це для налаштування каналів через env або поверхонь автентифікації, які мають бачити типові помічники старту/конфігурації. |
|
||||
| `providerAuthChoices` | Ні | `object[]` | Легкі метадані варіантів автентифікації для селекторів онбордингу, визначення preferred provider і простої обв’язки CLI-прапорців. |
|
||||
| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search та належності інструментів. |
|
||||
| `channelConfigs` | Ні | `Record<string, object>` | Метадані конфігурації каналів, що належать маніфесту та зливаються в поверхні виявлення й валідації до завантаження рантайму. |
|
||||
| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня плагіна. |
|
||||
| `name` | Ні | `string` | Людинозрозуміла назва плагіна. |
|
||||
| `description` | Ні | `string` | Короткий опис, який показується на поверхнях плагіна. |
|
||||
| `version` | Ні | `string` | Інформаційна версія плагіна. |
|
||||
| `uiHints` | Ні | `Record<string, object>` | UI-мітки, placeholders та підказки щодо чутливості для полів конфігурації. |
|
||||
| `name` | Ні | `string` | Зрозуміла людині назва плагіна. |
|
||||
| `description` | Ні | `string` | Короткий опис, що показується в поверхнях плагіна. |
|
||||
| `version` | Ні | `string` | Інформаційна версія плагіна. |
|
||||
| `uiHints` | Ні | `Record<string, object>` | Підписи UI, заповнювачі та підказки чутливості для полів конфігурації. |
|
||||
|
||||
## Довідка щодо `providerAuthChoices`
|
||||
## Довідник `providerAuthChoices`
|
||||
|
||||
Кожен запис `providerAuthChoices` описує один варіант онбордингу або автентифікації.
|
||||
OpenClaw зчитує це до завантаження рантайму провайдера.
|
||||
OpenClaw читає це до завантаження рантайму провайдера.
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| -------------------- | ----------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||
| `provider` | Так | `string` | Id провайдера, до якого належить цей варіант. |
|
||||
| `method` | Так | `string` | Id методу автентифікації, до якого потрібно спрямувати запит. |
|
||||
| `choiceId` | Так | `string` | Стабільний id варіанта автентифікації, який використовується онбордингом і потоками CLI. |
|
||||
| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо опущено, OpenClaw використовує `choiceId`. |
|
||||
| `choiceHint` | Ні | `string` | Короткий допоміжний текст для пікера. |
|
||||
| `assistantPriority` | Ні | `number` | Менші значення сортуються раніше в інтерактивних пікерах, керованих асистентом. |
|
||||
| `assistantVisibility`| Ні | `"visible"` \| `"manual-only"` | Приховує варіант у пікерах асистента, але залишає можливість ручного вибору через CLI. |
|
||||
| `deprecatedChoiceIds`| Ні | `string[]` | Застарілі id варіантів, які мають перенаправляти користувачів на цей замінний варіант. |
|
||||
| `groupId` | Ні | `string` | Необов’язковий id групи для групування пов’язаних варіантів. |
|
||||
| `groupLabel` | Ні | `string` | Мітка для цієї групи, видима користувачеві. |
|
||||
| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. |
|
||||
| `optionKey` | Ні | `string` | Внутрішній ключ опції для простих потоків автентифікації з одним прапорцем. |
|
||||
| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. |
|
||||
| `cliOption` | Ні | `string` | Повна форма опції CLI, наприклад `--openrouter-api-key <key>`. |
|
||||
| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. |
|
||||
| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | На яких поверхнях онбордингу має відображатися цей варіант. Якщо опущено, типово використовується `["text-inference"]`. |
|
||||
| Поле | Обов’язкове | Тип | Що це означає |
|
||||
| --------------------- | ----------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `provider` | Так | `string` | Ідентифікатор провайдера, якому належить цей варіант. |
|
||||
| `method` | Так | `string` | Ідентифікатор методу автентифікації, до якого потрібно диспетчеризувати. |
|
||||
| `choiceId` | Так | `string` | Стабільний ідентифікатор варіанта автентифікації, який використовується в потоках онбордингу та CLI. |
|
||||
| `choiceLabel` | Ні | `string` | Підпис для користувача. Якщо не вказано, OpenClaw використовує `choiceId`. |
|
||||
| `choiceHint` | Ні | `string` | Короткий допоміжний текст для селектора. |
|
||||
| `assistantPriority` | Ні | `number` | Менші значення сортуються вище в інтерактивних селекторах, керованих асистентом. |
|
||||
| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує варіант із селекторів асистента, але все ще дозволяє ручний вибір через CLI. |
|
||||
| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі ідентифікатори варіантів, які мають перенаправляти користувачів на цей варіант-заміну. |
|
||||
| `groupId` | Ні | `string` | Необов’язковий ідентифікатор групи для групування пов’язаних варіантів. |
|
||||
| `groupLabel` | Ні | `string` | Підпис для цієї групи, видимий користувачу. |
|
||||
| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. |
|
||||
| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. |
|
||||
| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. |
|
||||
| `cliOption` | Ні | `string` | Повна форма параметра CLI, наприклад `--openrouter-api-key <key>`. |
|
||||
| `cliDescription` | Ні | `string` | Опис, що використовується в довідці CLI. |
|
||||
| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | У яких поверхнях онбордингу має з’являтися цей варіант. Якщо не вказано, за замовчуванням використовується `["text-inference"]`. |
|
||||
|
||||
## Довідка щодо `uiHints`
|
||||
## Довідник `uiHints`
|
||||
|
||||
`uiHints` — це мапа від назв полів конфігурації до невеликих підказок рендерингу.
|
||||
|
||||
@ -194,8 +198,8 @@ OpenClaw зчитує це до завантаження рантайму про
|
||||
{
|
||||
"uiHints": {
|
||||
"apiKey": {
|
||||
"label": "Ключ API",
|
||||
"help": "Використовується для запитів OpenRouter",
|
||||
"label": "API key",
|
||||
"help": "Used for OpenRouter requests",
|
||||
"placeholder": "sk-or-v1-...",
|
||||
"sensitive": true
|
||||
}
|
||||
@ -205,19 +209,19 @@ OpenClaw зчитує це до завантаження рантайму про
|
||||
|
||||
Кожна підказка для поля може містити:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| ------------- | ---------- | --------------------------------------- |
|
||||
| `label` | `string` | Мітка поля для користувача. |
|
||||
| `help` | `string` | Короткий допоміжний текст. |
|
||||
| `tags` | `string[]` | Необов’язкові UI-теги. |
|
||||
| `advanced` | `boolean` | Позначає поле як розширене. |
|
||||
| `sensitive` | `boolean` | Позначає поле як секретне або чутливе. |
|
||||
| `placeholder` | `string` | Текст placeholder для полів форми. |
|
||||
| Поле | Тип | Що це означає |
|
||||
| ------------- | ---------- | ------------------------------------ |
|
||||
| `label` | `string` | Підпис поля для користувача. |
|
||||
| `help` | `string` | Короткий допоміжний текст. |
|
||||
| `tags` | `string[]` | Необов’язкові теги UI. |
|
||||
| `advanced` | `boolean` | Позначає поле як розширене. |
|
||||
| `sensitive` | `boolean` | Позначає поле як секретне або чутливе. |
|
||||
| `placeholder` | `string` | Текст-заповнювач для полів форми. |
|
||||
|
||||
## Довідка щодо `contracts`
|
||||
## Довідник `contracts`
|
||||
|
||||
Використовуйте `contracts` лише для статичних метаданих володіння можливостями, які OpenClaw може
|
||||
зчитати без імпорту рантайму плагіна.
|
||||
Використовуйте `contracts` лише для статичних метаданих про належність можливостей, які OpenClaw може
|
||||
читати без імпорту рантайму плагіна.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -237,19 +241,19 @@ OpenClaw зчитує це до завантаження рантайму про
|
||||
|
||||
Кожен список є необов’язковим:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| -------------------------------- | ---------- | ---------------------------------------------------------- |
|
||||
| `speechProviders` | `string[]` | Id speech-провайдерів, якими володіє цей плагін. |
|
||||
| `realtimeTranscriptionProviders` | `string[]` | Id провайдерів realtime transcription, якими володіє цей плагін. |
|
||||
| `realtimeVoiceProviders` | `string[]` | Id провайдерів realtime voice, якими володіє цей плагін. |
|
||||
| `mediaUnderstandingProviders` | `string[]` | Id провайдерів media-understanding, якими володіє цей плагін. |
|
||||
| `imageGenerationProviders` | `string[]` | Id провайдерів image-generation, якими володіє цей плагін. |
|
||||
| `videoGenerationProviders` | `string[]` | Id провайдерів video-generation, якими володіє цей плагін. |
|
||||
| `webFetchProviders` | `string[]` | Id провайдерів web-fetch, якими володіє цей плагін. |
|
||||
| `webSearchProviders` | `string[]` | Id провайдерів web-search, якими володіє цей плагін. |
|
||||
| `tools` | `string[]` | Назви інструментів агента, якими володіє цей плагін для bundled-перевірок контрактів. |
|
||||
| Поле | Тип | Що це означає |
|
||||
| -------------------------------- | ---------- | ----------------------------------------------------------- |
|
||||
| `speechProviders` | `string[]` | Ідентифікатори провайдерів speech, якими володіє цей плагін. |
|
||||
| `realtimeTranscriptionProviders` | `string[]` | Ідентифікатори провайдерів realtime-transcription, якими володіє цей плагін. |
|
||||
| `realtimeVoiceProviders` | `string[]` | Ідентифікатори провайдерів realtime-voice, якими володіє цей плагін. |
|
||||
| `mediaUnderstandingProviders` | `string[]` | Ідентифікатори провайдерів media-understanding, якими володіє цей плагін. |
|
||||
| `imageGenerationProviders` | `string[]` | Ідентифікатори провайдерів image-generation, якими володіє цей плагін. |
|
||||
| `videoGenerationProviders` | `string[]` | Ідентифікатори провайдерів video-generation, якими володіє цей плагін. |
|
||||
| `webFetchProviders` | `string[]` | Ідентифікатори провайдерів web-fetch, якими володіє цей плагін. |
|
||||
| `webSearchProviders` | `string[]` | Ідентифікатори провайдерів web-search, якими володіє цей плагін. |
|
||||
| `tools` | `string[]` | Назви інструментів агента, якими володіє цей плагін для перевірок вбудованих контрактів. |
|
||||
|
||||
## Довідка щодо `channelConfigs`
|
||||
## Довідник `channelConfigs`
|
||||
|
||||
Використовуйте `channelConfigs`, коли плагіну каналу потрібні легкі метадані конфігурації до
|
||||
завантаження рантайму.
|
||||
@ -267,12 +271,12 @@ OpenClaw зчитує це до завантаження рантайму про
|
||||
},
|
||||
"uiHints": {
|
||||
"homeserverUrl": {
|
||||
"label": "URL homeserver-а",
|
||||
"label": "Homeserver URL",
|
||||
"placeholder": "https://matrix.example.com"
|
||||
}
|
||||
},
|
||||
"label": "Matrix",
|
||||
"description": "Підключення до Matrix homeserver-а",
|
||||
"description": "Matrix homeserver connection",
|
||||
"preferOver": ["matrix-legacy"]
|
||||
}
|
||||
}
|
||||
@ -281,18 +285,19 @@ OpenClaw зчитує це до завантаження рантайму про
|
||||
|
||||
Кожен запис каналу може містити:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| ------------- | ------------------------ | -------------------------------------------------------------------------------------------- |
|
||||
| Поле | Тип | Що це означає |
|
||||
| ------------- | ------------------------ | --------------------------------------------------------------------------------------------- |
|
||||
| `schema` | `object` | JSON Schema для `channels.<id>`. Обов’язкове для кожного оголошеного запису конфігурації каналу. |
|
||||
| `uiHints` | `Record<string, object>` | Необов’язкові UI-мітки/placeholders/підказки чутливості для цього розділу конфігурації каналу. |
|
||||
| `label` | `string` | Мітка каналу, що додається до поверхонь пікера та інспекції, коли метадані рантайму ще не готові. |
|
||||
| `description` | `string` | Короткий опис каналу для поверхонь інспекції та каталогу. |
|
||||
| `preferOver` | `string[]` | Id застарілих або менш пріоритетних плагінів, які цей канал має випереджати на поверхнях вибору. |
|
||||
| `uiHints` | `Record<string, object>` | Необов’язкові підписи UI/заповнювачі/підказки чутливості для цього розділу конфігурації каналу. |
|
||||
| `label` | `string` | Підпис каналу, що зливається в поверхні селектора та перегляду, коли метадані рантайму ще не готові. |
|
||||
| `description` | `string` | Короткий опис каналу для поверхонь перегляду та каталогу. |
|
||||
| `preferOver` | `string[]` | Застарілі або менш пріоритетні ідентифікатори плагінів, які цей канал має перевершувати в поверхнях вибору. |
|
||||
|
||||
## Довідка щодо `modelSupport`
|
||||
## Довідник `modelSupport`
|
||||
|
||||
Використовуйте `modelSupport`, коли OpenClaw має визначати ваш плагін провайдера за
|
||||
скороченими id моделей на кшталт `gpt-5.4` або `claude-sonnet-4.6` до завантаження рантайму плагіна.
|
||||
Використовуйте `modelSupport`, коли OpenClaw має виводити ваш плагін провайдера з
|
||||
скорочених ідентифікаторів моделей на кшталт `gpt-5.4` або `claude-sonnet-4.6` до того, як завантажиться
|
||||
рантайм плагіна.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -305,72 +310,73 @@ OpenClaw зчитує це до завантаження рантайму про
|
||||
|
||||
OpenClaw застосовує такий пріоритет:
|
||||
|
||||
- явні посилання `provider/model` використовують метадані маніфесту `providers`, що належать власнику
|
||||
- явні посилання `provider/model` використовують метадані маніфесту `providers`, яким належить модель
|
||||
- `modelPatterns` мають пріоритет над `modelPrefixes`
|
||||
- якщо збігаються один неbundled-плагін і один bundled-плагін, перемагає неbundled-плагін
|
||||
- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкаже провайдера
|
||||
- якщо збігаються один невбудований плагін і один вбудований плагін, перемагає невбудований
|
||||
плагін
|
||||
- решта неоднозначностей ігноруються, доки користувач або конфігурація не вкажуть провайдера
|
||||
|
||||
Поля:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| --------------- | ---------- | ------------------------------------------------------------------------------ |
|
||||
| `modelPrefixes` | `string[]` | Префікси, які зіставляються через `startsWith` зі скороченими id моделей. |
|
||||
| `modelPatterns` | `string[]` | Джерела regex, які зіставляються зі скороченими id моделей після видалення суфікса профілю. |
|
||||
| Поле | Тип | Що це означає |
|
||||
| --------------- | ---------- | -------------------------------------------------------------------------------- |
|
||||
| `modelPrefixes` | `string[]` | Префікси, які зіставляються через `startsWith` зі скороченими ідентифікаторами моделей. |
|
||||
| `modelPatterns` | `string[]` | Джерела regex, які зіставляються зі скороченими ідентифікаторами моделей після видалення суфікса профілю. |
|
||||
|
||||
Застарілі ключі можливостей верхнього рівня є deprecated. Використовуйте `openclaw doctor --fix`, щоб
|
||||
Застарілі ключі можливостей верхнього рівня більше не рекомендуються. Використовуйте `openclaw doctor --fix`, щоб
|
||||
перемістити `speechProviders`, `realtimeTranscriptionProviders`,
|
||||
`realtimeVoiceProviders`, `mediaUnderstandingProviders`,
|
||||
`imageGenerationProviders`, `videoGenerationProviders`,
|
||||
`webFetchProviders` і `webSearchProviders` до `contracts`; звичайне
|
||||
завантаження маніфесту більше не трактує ці поля верхнього рівня як
|
||||
володіння можливостями.
|
||||
належність можливостей.
|
||||
|
||||
## Маніфест у порівнянні з package.json
|
||||
## Маніфест і package.json
|
||||
|
||||
Ці два файли виконують різні завдання:
|
||||
|
||||
| Файл | Для чого використовувати |
|
||||
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `openclaw.plugin.json` | Виявлення, валідація конфігурації, метадані варіантів автентифікації та UI-підказки, які мають існувати до запуску коду плагіна |
|
||||
| `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, який використовується для entrypoint-ів, обмежень встановлення, налаштування або метаданих каталогу |
|
||||
| `openclaw.plugin.json` | Виявлення, валідація конфігурації, метадані варіантів автентифікації та підказки UI, які мають існувати до запуску коду плагіна |
|
||||
| `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, що використовується для entrypoint, обмежень встановлення, налаштування або метаданих каталогу |
|
||||
|
||||
Якщо ви не впевнені, куди має належати певний фрагмент метаданих, використовуйте таке правило:
|
||||
Якщо ви не впевнені, куди належить певний фрагмент метаданих, використовуйте таке правило:
|
||||
|
||||
- якщо OpenClaw має знати це до завантаження коду плагіна, помістіть це в `openclaw.plugin.json`
|
||||
- якщо це стосується пакування, entry-файлів або поведінки npm install, помістіть це в `package.json`
|
||||
- якщо OpenClaw повинен знати це до завантаження коду плагіна, помістіть це в `openclaw.plugin.json`
|
||||
- якщо це стосується пакування, entry file або поведінки встановлення npm, помістіть це в `package.json`
|
||||
|
||||
### Поля package.json, які впливають на виявлення
|
||||
### Поля package.json, що впливають на виявлення
|
||||
|
||||
Деякі метадані плагіна до запуску рантайму навмисно зберігаються в `package.json` у блоці
|
||||
Деякі метадані плагіна до запуску рантайму навмисно розміщуються в `package.json` у блоці
|
||||
`openclaw`, а не в `openclaw.plugin.json`.
|
||||
|
||||
Важливі приклади:
|
||||
|
||||
| Поле | Що воно означає |
|
||||
| ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `openclaw.extensions` | Оголошує власні entrypoint-и плагіна. |
|
||||
| `openclaw.setupEntry` | Легкий entrypoint лише для налаштування, який використовується під час онбордингу та відкладеного запуску каналів. |
|
||||
| `openclaw.channel` | Легкі метадані каталогу каналів, як-от мітки, шляхи до документації, псевдоніми та текст для вибору. |
|
||||
| `openclaw.channel.configuredState` | Легкі метадані перевірки configured-state, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного рантайму каналу. |
|
||||
| `openclaw.channel.persistedAuthState` | Легкі метадані перевірки persisted-auth, які можуть відповісти на запитання «чи вже хтось увійшов у систему?» без завантаження повного рантайму каналу. |
|
||||
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки для встановлення/оновлення bundled-плагінів і зовнішньо опублікованих плагінів. |
|
||||
| `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
|
||||
| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw, із semver-межою на кшталт `>=2026.3.22`. |
|
||||
| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях відновлення через перевстановлення bundled-плагіна, коли конфігурація невалідна. |
|
||||
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen`| Дозволяє поверхням каналу лише для налаштування завантажуватися до повного плагіна каналу під час запуску. |
|
||||
| Поле | Що це означає |
|
||||
| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `openclaw.extensions` | Оголошує нативні entrypoint плагіна. |
|
||||
| `openclaw.setupEntry` | Полегшений entrypoint лише для налаштування, який використовується під час онбордингу та відкладеного запуску каналу. |
|
||||
| `openclaw.channel` | Легкі метадані каталогу каналів, як-от підписи, шляхи до документації, псевдоніми та текст для вибору. |
|
||||
| `openclaw.channel.configuredState` | Легкі метадані перевірки налаштованого стану, які можуть відповісти на питання «чи вже існує налаштування лише через env?» без завантаження повного рантайму каналу. |
|
||||
| `openclaw.channel.persistedAuthState` | Легкі метадані перевірки збереженого стану автентифікації, які можуть відповісти на питання «чи вже є хоч один активний вхід?» без завантаження повного рантайму каналу. |
|
||||
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки встановлення/оновлення для вбудованих і зовнішньо опублікованих плагінів. |
|
||||
| `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
|
||||
| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw із semver-нижньою межею на кшталт `>=2026.3.22`. |
|
||||
| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях відновлення перевстановлення вбудованого плагіна, коли конфігурація недійсна. |
|
||||
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дозволяє поверхням каналу лише для налаштування завантажуватися до повного плагіна каналу під час запуску. |
|
||||
|
||||
`openclaw.install.minHostVersion` перевіряється під час встановлення та
|
||||
завантаження реєстру маніфестів. Невалідні значення відхиляються; новіші, але валідні значення пропускають
|
||||
плагін на старіших хостах.
|
||||
`openclaw.install.minHostVersion` застосовується під час встановлення та
|
||||
завантаження реєстру маніфестів. Недійсні значення відхиляються; новіші, але коректні значення
|
||||
призводять до пропуску плагіна на старіших хостах.
|
||||
|
||||
`openclaw.install.allowInvalidConfigRecovery` навмисно є вузьким. Воно
|
||||
не робить довільні зламані конфігурації придатними для встановлення. Наразі воно лише дозволяє
|
||||
процесам встановлення відновлюватися після конкретних застарілих збоїв оновлення bundled-плагіна, таких як
|
||||
відсутній шлях bundled-плагіна або застарілий запис `channels.<id>` для цього самого
|
||||
bundled-плагіна. Непов’язані помилки конфігурації все одно блокують встановлення та спрямовують операторів
|
||||
`openclaw.install.allowInvalidConfigRecovery` навмисно є вузьким механізмом. Це
|
||||
не робить довільні пошкоджені конфігурації придатними до встановлення. Зараз це лише дозволяє
|
||||
потокам встановлення відновлюватися після конкретних застарілих збоїв оновлення вбудованих плагінів, таких як
|
||||
відсутній шлях до вбудованого плагіна або застарілий запис `channels.<id>` для того самого
|
||||
вбудованого плагіна. Непов’язані помилки конфігурації все одно блокують встановлення й спрямовують операторів
|
||||
до `openclaw doctor --fix`.
|
||||
|
||||
`openclaw.channel.persistedAuthState` — це метадані пакета для маленького модуля
|
||||
`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного модуля
|
||||
перевірки:
|
||||
|
||||
```json
|
||||
@ -387,12 +393,13 @@ bundled-плагіна. Непов’язані помилки конфігур
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте це, коли потоки setup, doctor або configured-state потребують
|
||||
легкої yes/no перевірки автентифікації до завантаження повного плагіна каналу. Цільовий експорт має бути невеликою
|
||||
функцією, яка читає лише збережений стан; не спрямовуйте його через повний barrel рантайму каналу.
|
||||
Використовуйте це, коли потоки setup, doctor або configured-state потребують дешевої перевірки автентифікації так/ні
|
||||
до завантаження повного плагіна каналу. Цільовий експорт має бути невеликою
|
||||
функцією, яка читає лише збережений стан; не спрямовуйте її через повний
|
||||
barrel рантайму каналу.
|
||||
|
||||
`openclaw.channel.configuredState` має таку саму форму для легких перевірок
|
||||
configured-state лише через env:
|
||||
`openclaw.channel.configuredState` має ту саму форму для дешевих перевірок
|
||||
налаштованого стану лише через env:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -408,61 +415,64 @@ configured-state лише через env:
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте це, коли канал може відповісти про configured-state на основі env або інших невеликих
|
||||
вхідних даних без рантайму. Якщо перевірка потребує повного визначення конфігурації або реального
|
||||
рантайму каналу, залиште цю логіку в хуку плагіна `config.hasConfiguredState`.
|
||||
Використовуйте це, коли канал може визначити налаштований стан через env або інші невеликі
|
||||
нерантаймові вхідні дані. Якщо перевірка потребує повного визначення конфігурації або справжнього
|
||||
рантайму каналу, залишайте цю логіку в хуку плагіна `config.hasConfiguredState`.
|
||||
|
||||
## Вимоги до JSON Schema
|
||||
|
||||
- **Кожен плагін повинен постачати JSON Schema**, навіть якщо він не приймає конфігурацію.
|
||||
- Порожня schema є допустимою (наприклад, `{ "type": "object", "additionalProperties": false }`).
|
||||
- Schema проходять валідацію під час читання/запису конфігурації, а не під час рантайму.
|
||||
- Порожня схема припустима (наприклад, `{ "type": "object", "additionalProperties": false }`).
|
||||
- Схеми проходять валідацію під час читання/запису конфігурації, а не в рантаймі.
|
||||
|
||||
## Поведінка валідації
|
||||
|
||||
- Невідомі ключі `channels.*` — це **помилки**, якщо тільки id каналу не оголошено
|
||||
маніфестом плагіна.
|
||||
- Невідомі ключі `channels.*` — це **помилки**, якщо тільки ідентифікатор каналу не оголошено
|
||||
в маніфесті плагіна.
|
||||
- `plugins.entries.<id>`, `plugins.allow`, `plugins.deny` і `plugins.slots.*`
|
||||
повинні посилатися на **виявлювані** id плагінів. Невідомі id — це **помилки**.
|
||||
- Якщо плагін установлено, але він має зламаний або відсутній маніфест чи schema,
|
||||
повинні посилатися на **доступні для виявлення** ідентифікатори плагінів. Невідомі ідентифікатори — це **помилки**.
|
||||
- Якщо плагін установлено, але він має пошкоджений або відсутній маніфест чи схему,
|
||||
валідація завершується помилкою, а Doctor повідомляє про помилку плагіна.
|
||||
- Якщо конфігурація плагіна існує, але плагін **вимкнено**, конфігурація зберігається, і
|
||||
у Doctor та журналах з’являється **попередження**.
|
||||
- Якщо конфігурація плагіна існує, але сам плагін **вимкнений**, конфігурація зберігається, а в
|
||||
Doctor і журналах з’являється **попередження**.
|
||||
|
||||
Дивіться [Довідник із конфігурації](/uk/gateway/configuration) для повної schema `plugins.*`.
|
||||
Дивіться [Довідник з конфігурації](/uk/gateway/configuration) для повної схеми `plugins.*`.
|
||||
|
||||
## Примітки
|
||||
|
||||
- Маніфест **обов’язковий для власних плагінів OpenClaw**, включно із завантаженням із локальної файлової системи.
|
||||
- Рантайм усе одно завантажує модуль плагіна окремо; маніфест використовується лише для
|
||||
виявлення + валідації.
|
||||
- Власні маніфести аналізуються за допомогою JSON5, тому коментарі, кінцеві коми та
|
||||
неукладені в лапки ключі приймаються, якщо підсумкове значення все ще є об’єктом.
|
||||
- Завантажувач маніфесту зчитує лише задокументовані поля маніфесту. Уникайте додавання
|
||||
- Маніфест **обов’язковий для нативних плагінів OpenClaw**, включно із завантаженням із локальної файлової системи.
|
||||
- Рантайм усе одно окремо завантажує модуль плагіна; маніфест призначений лише для
|
||||
виявлення та валідації.
|
||||
- Нативні маніфести розбираються за допомогою JSON5, тому коментарі, завершальні коми та
|
||||
незакавычені ключі приймаються, якщо кінцеве значення все ще є об’єктом.
|
||||
- Завантажувач маніфесту читає лише задокументовані поля маніфесту. Уникайте додавання
|
||||
тут власних ключів верхнього рівня.
|
||||
- `providerAuthEnvVars` — це легкий шлях метаданих для перевірок автентифікації, валідації
|
||||
env-marker та подібних поверхонь автентифікації провайдера, які не повинні запускати рантайм плагіна
|
||||
env-маркерів і подібних поверхонь автентифікації провайдера, які не повинні запускати рантайм плагіна
|
||||
лише для перевірки назв env.
|
||||
- `channelEnvVars` — це легкий шлях метаданих для shell-env fallback, підказок setup
|
||||
- `providerAuthAliases` дозволяє варіантам провайдерів повторно використовувати автентифікацію
|
||||
іншого провайдера: env vars, профілі автентифікації, автентифікацію на основі конфігурації та
|
||||
варіант онбордингу з API-ключем, без жорсткого кодування цього зв’язку в core.
|
||||
- `channelEnvVars` — це легкий шлях метаданих для fallback через shell env, запитів setup
|
||||
та подібних поверхонь каналів, які не повинні запускати рантайм плагіна
|
||||
лише для перевірки назв env.
|
||||
- `providerAuthChoices` — це легкий шлях метаданих для пікерів варіантів автентифікації,
|
||||
визначення `--auth-choice`, мапінгу preferred-provider і простої реєстрації прапорців CLI
|
||||
під час онбордингу до завантаження рантайму провайдера. Метадані wizard рантайму,
|
||||
які потребують коду провайдера, див. у
|
||||
- `providerAuthChoices` — це легкий шлях метаданих для селекторів варіантів автентифікації,
|
||||
визначення `--auth-choice`, зіставлення preferred provider і простої реєстрації
|
||||
прапорців CLI онбордингу до завантаження рантайму провайдера. Для метаданих
|
||||
майстра рантайму, які потребують коду провайдера, дивіться
|
||||
[Хуки рантайму провайдера](/uk/plugins/architecture#provider-runtime-hooks).
|
||||
- Ексклюзивні типи плагінів вибираються через `plugins.slots.*`.
|
||||
- `kind: "memory"` вибирається через `plugins.slots.memory`.
|
||||
- `kind: "context-engine"` вибирається через `plugins.slots.contextEngine`
|
||||
(типово: вбудований `legacy`).
|
||||
- `channels`, `providers`, `cliBackends` і `skills` можна опустити, якщо
|
||||
плагіну вони не потрібні.
|
||||
- Якщо ваш плагін залежить від native-модулів, задокументуйте кроки збирання та будь-які
|
||||
(за замовчуванням: вбудований `legacy`).
|
||||
- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, якщо
|
||||
плагін їх не потребує.
|
||||
- Якщо ваш плагін залежить від нативних модулів, задокументуйте кроки збирання та всі
|
||||
вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts`
|
||||
- `pnpm rebuild <package>`).
|
||||
|
||||
## Пов’язані матеріали
|
||||
## Пов’язане
|
||||
|
||||
- [Створення плагінів](/uk/plugins/building-plugins) — початок роботи з плагінами
|
||||
- [Архітектура плагінів](/uk/plugins/architecture) — внутрішня архітектура
|
||||
- [Огляд SDK](/uk/plugins/sdk-overview) — довідник з Plugin SDK
|
||||
- [Огляд SDK](/uk/plugins/sdk-overview) — довідник по Plugin SDK
|
||||
|
||||
@ -7,27 +7,27 @@ sidebarTitle: Provider Plugins
|
||||
summary: Покроковий посібник зі створення плагіна постачальника моделей для OpenClaw
|
||||
title: Створення плагінів постачальників
|
||||
x-i18n:
|
||||
generated_at: "2026-04-06T15:31:24Z"
|
||||
generated_at: "2026-04-08T18:09:13Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 4da82a353e1bf4fe6dc09e14b8614133ac96565679627de51415926014bd3990
|
||||
source_hash: 38d9af522dc19e49c81203a83a4096f01c2398b1df771c848a30ad98f251e9e1
|
||||
source_path: plugins/sdk-provider-plugins.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Створення плагінів постачальників
|
||||
|
||||
У цьому посібнику покроково розглядається створення плагіна постачальника, який додає до OpenClaw постачальника моделей
|
||||
(LLM). Наприкінці ви матимете постачальника з каталогом моделей,
|
||||
автентифікацією через API-ключ і динамічним визначенням моделей.
|
||||
Цей посібник покроково пояснює, як створити плагін постачальника, який додає
|
||||
до OpenClaw постачальника моделей (LLM). Наприкінці у вас буде постачальник із каталогом моделей,
|
||||
автентифікацією через API key та динамічним визначенням моделей.
|
||||
|
||||
<Info>
|
||||
Якщо ви раніше не створювали жодного плагіна OpenClaw, спочатку прочитайте
|
||||
[Getting Started](/uk/plugins/building-plugins) про базову структуру
|
||||
пакета й налаштування маніфесту.
|
||||
[Getting Started](/uk/plugins/building-plugins), щоб ознайомитися з базовою
|
||||
структурою пакета та налаштуванням маніфесту.
|
||||
</Info>
|
||||
|
||||
## Покрокове проходження
|
||||
## Покроковий приклад
|
||||
|
||||
<Steps>
|
||||
<a id="step-1-package-and-manifest"></a>
|
||||
@ -65,6 +65,9 @@ x-i18n:
|
||||
"providerAuthEnvVars": {
|
||||
"acme-ai": ["ACME_AI_API_KEY"]
|
||||
},
|
||||
"providerAuthAliases": {
|
||||
"acme-ai-coding": "acme-ai"
|
||||
},
|
||||
"providerAuthChoices": [
|
||||
{
|
||||
"provider": "acme-ai",
|
||||
@ -87,16 +90,17 @@ x-i18n:
|
||||
</CodeGroup>
|
||||
|
||||
Маніфест оголошує `providerAuthEnvVars`, щоб OpenClaw міг виявляти
|
||||
облікові дані без завантаження runtime вашого плагіна. `modelSupport` є необов'язковим
|
||||
і дає змогу OpenClaw автоматично завантажувати ваш плагін постачальника за скороченими id моделей
|
||||
на кшталт `acme-large` ще до появи runtime hooks. Якщо ви публікуєте
|
||||
постачальника в ClawHub, поля `openclaw.compat` і `openclaw.build`
|
||||
обов'язкові в `package.json`.
|
||||
облікові дані без завантаження runtime вашого плагіна. Додайте `providerAuthAliases`,
|
||||
якщо варіант постачальника має повторно використовувати автентифікацію іншого ідентифікатора постачальника. `modelSupport`
|
||||
необов’язковий і дозволяє OpenClaw автоматично завантажувати ваш плагін постачальника зі скорочених
|
||||
ідентифікаторів моделей, таких як `acme-large`, ще до появи runtime hooks. Якщо ви публікуєте
|
||||
постачальника у 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";
|
||||
@ -171,8 +175,8 @@ x-i18n:
|
||||
`openclaw onboard --acme-ai-api-key <key>` і вибрати
|
||||
`acme-ai/acme-large` як свою модель.
|
||||
|
||||
Для вбудованих постачальників, які реєструють лише одного текстового постачальника з
|
||||
автентифікацією через API-ключ і одним runtime на основі каталогу, віддавайте перевагу вужчому
|
||||
Для вбудованих постачальників, які реєструють лише одного текстового постачальника з автентифікацією через API key
|
||||
плюс один runtime на основі каталогу, віддавайте перевагу вужчому
|
||||
допоміжному засобу `defineSingleProviderPluginEntry(...)`:
|
||||
|
||||
```typescript
|
||||
@ -208,24 +212,24 @@ x-i18n:
|
||||
});
|
||||
```
|
||||
|
||||
Якщо вашому потоку автентифікації також потрібно змінювати `models.providers.*`, псевдоніми й
|
||||
типову модель агента під час онбордингу, використовуйте готові допоміжні засоби з
|
||||
`openclaw/plugin-sdk/provider-onboard`. Найвужчі допоміжні засоби —
|
||||
це `createDefaultModelPresetAppliers(...)`,
|
||||
Якщо ваш потік автентифікації також має оновлювати `models.providers.*`, aliases і
|
||||
модель агента за замовчуванням під час онбордингу, використовуйте готові helper-функції з
|
||||
`openclaw/plugin-sdk/provider-onboard`. Найвужчі helper-функції:
|
||||
`createDefaultModelPresetAppliers(...)`,
|
||||
`createDefaultModelsPresetAppliers(...)` і
|
||||
`createModelCatalogPresetAppliers(...)`.
|
||||
|
||||
Коли нативний endpoint постачальника підтримує блоки streamed usage на
|
||||
звичайному transport `openai-completions`, віддавайте перевагу спільним допоміжним засобам каталогу з
|
||||
`openclaw/plugin-sdk/provider-catalog-shared`, а не жорстко закодованим перевіркам
|
||||
id постачальника. `supportsNativeStreamingUsageCompat(...)` і
|
||||
`applyProviderNativeStreamingUsageCompat(...)` визначають підтримку з мапи можливостей endpoint, тому нативні endpoint у стилі Moonshot/DashScope
|
||||
також підключаються, навіть коли плагін використовує власний id постачальника.
|
||||
Якщо власний endpoint постачальника підтримує потокові блоки використання на
|
||||
звичайному транспорті `openai-completions`, віддавайте перевагу спільним helper-функціям каталогу з
|
||||
`openclaw/plugin-sdk/provider-catalog-shared` замість жорсткого кодування перевірок
|
||||
ідентифікатора постачальника. `supportsNativeStreamingUsageCompat(...)` і
|
||||
`applyProviderNativeStreamingUsageCompat(...)` визначають підтримку з карти можливостей endpoint, тож власні endpoint Moonshot/DashScope-типу
|
||||
також можуть бути увімкнені, навіть якщо плагін використовує власний ідентифікатор постачальника.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Додайте динамічне визначення моделей">
|
||||
Якщо ваш постачальник приймає довільні id моделей (як проксі або маршрутизатор),
|
||||
Якщо ваш постачальник приймає довільні ідентифікатори моделей (як проксі чи маршрутизатор),
|
||||
додайте `resolveDynamicModel`:
|
||||
|
||||
```typescript
|
||||
@ -248,16 +252,16 @@ x-i18n:
|
||||
```
|
||||
|
||||
Якщо для визначення потрібен мережевий виклик, використовуйте `prepareDynamicModel` для асинхронного
|
||||
прогрівання — `resolveDynamicModel` буде запущено знову після його завершення.
|
||||
прогріву — після завершення `resolveDynamicModel` буде запущено знову.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Додайте runtime hooks (за потреби)">
|
||||
Більшості постачальників достатньо `catalog` + `resolveDynamicModel`. Додавайте hooks
|
||||
поступово, у міру того як цього потребуватиме ваш постачальник.
|
||||
Більшості постачальників потрібні лише `catalog` + `resolveDynamicModel`. Додавайте hooks
|
||||
поступово, коли вони стають потрібними вашому постачальнику.
|
||||
|
||||
Спільні збирачі допоміжних засобів тепер покривають найпоширеніші сімейства replay/tool-compat,
|
||||
тому плагінам зазвичай не потрібно вручну підключати кожен hook по одному:
|
||||
Спільні builder-функції helper-ів тепер покривають найпоширеніші сімейства
|
||||
replay/tool-compat, тому плагінам зазвичай не потрібно вручну підключати кожен hook окремо:
|
||||
|
||||
```typescript
|
||||
import { buildProviderReplayFamilyHooks } from "openclaw/plugin-sdk/provider-model-shared";
|
||||
@ -281,11 +285,11 @@ x-i18n:
|
||||
|
||||
| Family | Що воно підключає |
|
||||
| --- | --- |
|
||||
| `openai-compatible` | Спільна політика replay у стилі OpenAI для сумісних з OpenAI transport, включно з очищенням id викликів інструментів, виправленнями порядку assistant-first і загальною перевіркою ходів Gemini там, де це потрібно transport |
|
||||
| `anthropic-by-model` | Політика replay з урахуванням Claude, вибрана за `modelId`, тому transport Anthropic-message отримують очищення thinking-блоків, специфічне для Claude, лише коли визначена модель справді має id Claude |
|
||||
| `google-gemini` | Нативна політика replay Gemini плюс очищення bootstrap replay і режим виводу reasoning з тегами |
|
||||
| `passthrough-gemini` | Очищення thought-signature Gemini для моделей Gemini, що працюють через OpenAI-сумісні проксі transport; не вмикає нативну перевірку replay Gemini або переписування bootstrap |
|
||||
| `hybrid-anthropic-openai` | Гібридна політика для постачальників, які поєднують поверхні моделей Anthropic-message і OpenAI-compatible в одному плагіні; необов'язкове відкидання thinking-блоків лише для Claude залишається обмеженим стороною Anthropic |
|
||||
| `openai-compatible` | Спільна політика replay у стилі OpenAI для OpenAI-сумісних транспортів, зокрема очищення tool-call-id, виправлення порядку assistant-first і загальна валідація Gemini-turn там, де цього потребує транспорт |
|
||||
| `anthropic-by-model` | Політика replay з урахуванням Claude, що вибирається за `modelId`, тому транспорти Anthropic-message отримують очищення thinking-block, специфічне для Claude, лише коли визначена модель справді є ідентифікатором Claude |
|
||||
| `google-gemini` | Власна політика replay Gemini плюс очищення bootstrap replay і режим tagged reasoning-output |
|
||||
| `passthrough-gemini` | Очищення thought-signature Gemini для моделей Gemini, що працюють через OpenAI-сумісні проксі-транспорти; не вмикає власну валідацію replay Gemini або переписування bootstrap |
|
||||
| `hybrid-anthropic-openai` | Гібридна політика для постачальників, які поєднують поверхні моделей Anthropic-message і OpenAI-compatible в одному плагіні; необов’язкове видалення thinking-block лише для Claude залишається обмеженим стороною Anthropic |
|
||||
|
||||
Реальні вбудовані приклади:
|
||||
|
||||
@ -300,12 +304,12 @@ x-i18n:
|
||||
| Family | Що воно підключає |
|
||||
| --- | --- |
|
||||
| `google-thinking` | Нормалізація payload thinking Gemini на спільному шляху stream |
|
||||
| `kilocode-thinking` | Обгортка reasoning Kilo на спільному шляху proxy stream, де для `kilo/auto` і id proxy reasoning, що не підтримуються, ін'єкція thinking пропускається |
|
||||
| `moonshot-thinking` | Відображення payload нативного двійкового thinking Moonshot з конфігурації + рівня `/think` |
|
||||
| `kilocode-thinking` | Обгортка міркування Kilo на спільному шляху проксі-stream, де `kilo/auto` та непідтримувані ідентифікатори міркування проксі пропускають інжектований thinking |
|
||||
| `moonshot-thinking` | Відображення бінарного payload native-thinking Moonshot із config + рівня `/think` |
|
||||
| `minimax-fast-mode` | Переписування моделі MiniMax fast-mode на спільному шляху stream |
|
||||
| `openai-responses-defaults` | Спільні нативні обгортки OpenAI/Codex Responses: заголовки атрибуції, `/fast`/`serviceTier`, verbosity тексту, нативний вебпошук Codex, формування payload сумісності reasoning і керування контекстом Responses |
|
||||
| `openrouter-thinking` | Обгортка reasoning OpenRouter для proxy-маршрутів, де пропуски для моделей, що не підтримуються, і `auto` централізовано обробляються |
|
||||
| `tool-stream-default-on` | Обгортка `tool_stream`, увімкнена типово, для постачальників на кшталт Z.AI, які хочуть потокову передачу інструментів, якщо її не вимкнули явно |
|
||||
| `openai-responses-defaults` | Спільні власні обгортки OpenAI/Codex Responses: заголовки attribution, `/fast`/`serviceTier`, verbosity тексту, власний web search Codex, формування payload для сумісності reasoning і керування контекстом Responses |
|
||||
| `openrouter-thinking` | Обгортка reasoning OpenRouter для маршрутів проксі, з централізованою обробкою пропусків для непідтримуваних моделей і `auto` |
|
||||
| `tool-stream-default-on` | Обгортка `tool_stream`, увімкнена за замовчуванням, для таких постачальників, як Z.AI, які хочуть потокову передачу інструментів, якщо її явно не вимкнено |
|
||||
|
||||
Реальні вбудовані приклади:
|
||||
|
||||
@ -318,80 +322,79 @@ x-i18n:
|
||||
- `zai`: `tool-stream-default-on`
|
||||
|
||||
`openclaw/plugin-sdk/provider-model-shared` також експортує enum сімейств replay
|
||||
разом зі спільними допоміжними засобами, з яких ці сімейства побудовані. Типові публічні експорти
|
||||
разом зі спільними helper-функціями, на основі яких побудовано ці сімейства. Поширені публічні експорти
|
||||
включають:
|
||||
|
||||
- `ProviderReplayFamily`
|
||||
- `buildProviderReplayFamilyHooks(...)`
|
||||
- спільні збирачі replay, такі як `buildOpenAICompatibleReplayPolicy(...)`,
|
||||
- спільні builder-функції replay, як-от `buildOpenAICompatibleReplayPolicy(...)`,
|
||||
`buildAnthropicReplayPolicyForModel(...)`,
|
||||
`buildGoogleGeminiReplayPolicy(...)` і
|
||||
`buildHybridAnthropicOrOpenAIReplayPolicy(...)`
|
||||
- допоміжні засоби replay Gemini, такі як `sanitizeGoogleGeminiReplayHistory(...)`
|
||||
- helper-функції replay Gemini, як-от `sanitizeGoogleGeminiReplayHistory(...)`
|
||||
і `resolveTaggedReasoningOutputMode()`
|
||||
- допоміжні засоби для endpoint/моделей, такі як `resolveProviderEndpoint(...)`,
|
||||
- helper-функції для endpoint/моделей, як-от `resolveProviderEndpoint(...)`,
|
||||
`normalizeProviderId(...)`, `normalizeGooglePreviewModelId(...)` і
|
||||
`normalizeNativeXaiModelId(...)`
|
||||
|
||||
`openclaw/plugin-sdk/provider-stream` надає і збирач сімейств, і
|
||||
публічні допоміжні засоби обгорток, які ці сімейства повторно використовують. Типові публічні експорти
|
||||
`openclaw/plugin-sdk/provider-stream` надає як builder сімейств,
|
||||
так і публічні helper-обгортки, які ці сімейства повторно використовують. Поширені публічні експорти
|
||||
включають:
|
||||
|
||||
- `ProviderStreamFamily`
|
||||
- `buildProviderStreamFamilyHooks(...)`
|
||||
- `composeProviderStreamWrappers(...)`
|
||||
- спільні обгортки OpenAI/Codex, такі як
|
||||
- спільні обгортки OpenAI/Codex, як-от
|
||||
`createOpenAIAttributionHeadersWrapper(...)`,
|
||||
`createOpenAIFastModeWrapper(...)`,
|
||||
`createOpenAIServiceTierWrapper(...)`,
|
||||
`createOpenAIResponsesContextManagementWrapper(...)` і
|
||||
`createCodexNativeWebSearchWrapper(...)`
|
||||
- спільні proxy/provider-обгортки, такі як `createOpenRouterWrapper(...)`,
|
||||
- спільні обгортки проксі/постачальників, як-от `createOpenRouterWrapper(...)`,
|
||||
`createToolStreamWrapper(...)` і `createMinimaxFastModeWrapper(...)`
|
||||
|
||||
Деякі stream-допоміжні засоби навмисно залишаються локальними для постачальника. Поточний вбудований
|
||||
Деякі helper-функції для stream навмисно залишаються локальними для конкретного постачальника. Поточний вбудований
|
||||
приклад: `@openclaw/anthropic-provider` експортує
|
||||
`wrapAnthropicProviderStream`, `resolveAnthropicBetas`,
|
||||
`resolveAnthropicFastMode`, `resolveAnthropicServiceTier` і
|
||||
низькорівневі збирачі обгорток Anthropic зі свого публічного шва `api.ts` /
|
||||
`contract-api.ts`. Ці допоміжні засоби залишаються специфічними для Anthropic, оскільки
|
||||
вони також кодують обробку бета-можливостей Claude OAuth і gating `context1m`.
|
||||
builder-функції нижчого рівня для обгорток Anthropic зі свого публічного інтерфейсу `api.ts` /
|
||||
`contract-api.ts`. Ці helper-функції залишаються специфічними для Anthropic, оскільки
|
||||
вони також кодують обробку бета-версій Claude OAuth і обмеження `context1m`.
|
||||
|
||||
Інші вбудовані постачальники також зберігають transport-специфічні обгортки локальними, коли
|
||||
цю поведінку не вдається чисто розділити між сімействами. Поточний приклад: вбудований
|
||||
плагін xAI зберігає нативне формування xAI Responses у власному
|
||||
`wrapStreamFn`, включно з переписуванням псевдонімів `/fast`, типовим `tool_stream`,
|
||||
очищенням strict-tool, що не підтримується, і видаленням
|
||||
payload reasoning, специфічного для xAI.
|
||||
Інші вбудовані постачальники також залишають локальними обгортки, специфічні для транспорту, коли
|
||||
цю поведінку неможливо чисто розділити між сімействами. Поточний приклад: вбудований
|
||||
плагін xAI залишає власне формування Responses xAI у своєму
|
||||
`wrapStreamFn`, зокрема переписування alias `/fast`, `tool_stream` за замовчуванням,
|
||||
очищення непідтримуваних strict-tool і видалення payload reasoning, специфічного для xAI.
|
||||
|
||||
`openclaw/plugin-sdk/provider-tools` наразі надає одне спільне
|
||||
сімейство схем інструментів разом зі спільними допоміжними засобами схем/сумісності:
|
||||
сімейство tool-schema плюс спільні helper-функції schema/compat:
|
||||
|
||||
- `ProviderToolCompatFamily` документує поточний перелік спільних сімейств.
|
||||
- `buildProviderToolCompatFamilyHooks("gemini")` підключає очищення схем Gemini
|
||||
+ діагностику для постачальників, яким потрібні безпечні для Gemini схеми інструментів.
|
||||
- `buildProviderToolCompatFamilyHooks("gemini")` підключає очищення schema
|
||||
Gemini + діагностику для постачальників, яким потрібні Gemini-safe tool schemas.
|
||||
- `normalizeGeminiToolSchemas(...)` і `inspectGeminiToolSchemas(...)`
|
||||
— це базові публічні допоміжні засоби для схем Gemini.
|
||||
- `resolveXaiModelCompatPatch()` повертає вбудований патч сумісності xAI:
|
||||
`toolSchemaProfile: "xai"`, ключові слова схем, що не підтримуються, нативну
|
||||
підтримку `web_search` і декодування аргументів викликів інструментів з HTML-сутностей.
|
||||
- `applyXaiModelCompat(model)` застосовує той самий патч сумісності xAI до
|
||||
визначеної моделі перед тим, як вона потрапить до раннера.
|
||||
— це базові публічні helper-функції schema Gemini.
|
||||
- `resolveXaiModelCompatPatch()` повертає вбудований compat patch xAI:
|
||||
`toolSchemaProfile: "xai"`, непідтримувані ключові слова schema, власну
|
||||
підтримку `web_search` і декодування аргументів виклику інструментів з HTML-entity.
|
||||
- `applyXaiModelCompat(model)` застосовує той самий compat patch xAI до
|
||||
визначеної моделі, перш ніж вона потрапить до runner.
|
||||
|
||||
Реальний вбудований приклад: плагін xAI використовує `normalizeResolvedModel` плюс
|
||||
`contributeResolvedModelCompat`, щоб ці метадані сумісності залишалися у володінні
|
||||
постачальника, а не жорстко кодувалися в core як правила xAI.
|
||||
`contributeResolvedModelCompat`, щоб зберегти ці метадані compat у власності
|
||||
постачальника, а не жорстко кодувати правила xAI в core.
|
||||
|
||||
Той самий шаблон на рівні кореня пакета також лежить в основі інших вбудованих постачальників:
|
||||
Такий самий шаблон на рівні кореня пакета також лежить в основі інших вбудованих постачальників:
|
||||
|
||||
- `@openclaw/openai-provider`: `api.ts` експортує збирачі постачальника,
|
||||
допоміжні засоби типових моделей і збирачі постачальника realtime
|
||||
- `@openclaw/openrouter-provider`: `api.ts` експортує збирач постачальника
|
||||
плюс допоміжні засоби для онбордингу/конфігурації
|
||||
- `@openclaw/openai-provider`: `api.ts` експортує builder-функції постачальника,
|
||||
helper-функції для моделей за замовчуванням і builder-функції постачальника realtime
|
||||
- `@openclaw/openrouter-provider`: `api.ts` експортує builder-функцію постачальника
|
||||
плюс helper-функції для onboarding/config
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Обмін токенів">
|
||||
Для постачальників, яким потрібен обмін токенів перед кожним викликом inference:
|
||||
<Tab title="Обмін токенами">
|
||||
Для постачальників, яким потрібен обмін токенами перед кожним викликом inference:
|
||||
|
||||
```typescript
|
||||
prepareRuntimeAuth: async (ctx) => {
|
||||
@ -404,8 +407,8 @@ x-i18n:
|
||||
},
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Власні заголовки">
|
||||
Для постачальників, яким потрібні власні заголовки запитів або зміни тіла запиту:
|
||||
<Tab title="Користувацькі заголовки">
|
||||
Для постачальників, яким потрібні користувацькі заголовки запиту або зміни тіла запиту:
|
||||
|
||||
```typescript
|
||||
// wrapStreamFn returns a StreamFn derived from ctx.streamFn
|
||||
@ -422,9 +425,9 @@ x-i18n:
|
||||
},
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Ідентичність нативного transport">
|
||||
Для постачальників, яким потрібні нативні заголовки або метадані
|
||||
запиту/сеансу в загальних transport HTTP або WebSocket:
|
||||
<Tab title="Власна ідентичність транспорту">
|
||||
Для постачальників, яким потрібні власні заголовки запиту/сесії або метадані на
|
||||
універсальних HTTP- чи WebSocket-транспортах:
|
||||
|
||||
```typescript
|
||||
resolveTransportTurnState: (ctx) => ({
|
||||
@ -444,8 +447,8 @@ x-i18n:
|
||||
}),
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Usage і білінг">
|
||||
Для постачальників, які надають дані usage/білінгу:
|
||||
<Tab title="Використання та білінг">
|
||||
Для постачальників, які надають дані про використання/білінг:
|
||||
|
||||
```typescript
|
||||
resolveUsageAuth: async (ctx) => {
|
||||
@ -464,79 +467,79 @@ x-i18n:
|
||||
|
||||
| # | Hook | Коли використовувати |
|
||||
| --- | --- | --- |
|
||||
| 1 | `catalog` | Каталог моделей або типові значення base URL |
|
||||
| 2 | `applyConfigDefaults` | Глобальні типові значення, якими володіє постачальник, під час materialization конфігурації |
|
||||
| 3 | `normalizeModelId` | Очищення застарілих/preview псевдонімів model-id перед пошуком |
|
||||
| 4 | `normalizeTransport` | Очищення `api` / `baseUrl` сімейства постачальника перед загальним складанням моделі |
|
||||
| 5 | `normalizeConfig` | Нормалізація конфігурації `models.providers.<id>` |
|
||||
| 6 | `applyNativeStreamingUsageCompat` | Переписування compat нативного streaming-usage для конфігурованих постачальників |
|
||||
| 7 | `resolveConfigApiKey` | Визначення автентифікації через env-marker, яким володіє постачальник |
|
||||
| 8 | `resolveSyntheticAuth` | Synthetic auth для local/self-hosted або на основі конфігурації |
|
||||
| 9 | `shouldDeferSyntheticProfileAuth` | Знижує пріоритет synthetic placeholder збереженого профілю порівняно з env/config auth |
|
||||
| 10 | `resolveDynamicModel` | Приймати довільні id моделей вище за потоком |
|
||||
| 1 | `catalog` | Каталог моделей або значення `baseUrl` за замовчуванням |
|
||||
| 2 | `applyConfigDefaults` | Глобальні значення за замовчуванням, що належать постачальнику, під час materialization config |
|
||||
| 3 | `normalizeModelId` | Очищення aliases застарілих/preview model-id перед пошуком |
|
||||
| 4 | `normalizeTransport` | Очищення `api` / `baseUrl` для сімейства постачальника перед загальним збиранням моделі |
|
||||
| 5 | `normalizeConfig` | Нормалізація config `models.providers.<id>` |
|
||||
| 6 | `applyNativeStreamingUsageCompat` | Переписування compat для власного streaming-usage для постачальників config |
|
||||
| 7 | `resolveConfigApiKey` | Визначення автентифікації за env-marker, що належить постачальнику |
|
||||
| 8 | `resolveSyntheticAuth` | Синтетична автентифікація local/self-hosted або на основі config |
|
||||
| 9 | `shouldDeferSyntheticProfileAuth` | Знижує пріоритет синтетичних placeholders збереженого профілю відносно env/config auth |
|
||||
| 10 | `resolveDynamicModel` | Прийом довільних upstream model IDs |
|
||||
| 11 | `prepareDynamicModel` | Асинхронне отримання метаданих перед визначенням |
|
||||
| 12 | `normalizeResolvedModel` | Переписування transport перед раннером |
|
||||
| 12 | `normalizeResolvedModel` | Переписування транспорту перед runner |
|
||||
|
||||
Примітки щодо runtime fallback:
|
||||
Примітки щодо runtime fallback:
|
||||
|
||||
- `normalizeConfig` спочатку перевіряє відповідного постачальника, а потім інші
|
||||
плагіни постачальників із підтримкою hook, доки один із них справді не змінить конфігурацію.
|
||||
Якщо жоден hook постачальника не перепише підтримуваний запис конфігурації сімейства Google,
|
||||
вбудований нормалізатор конфігурації Google усе одно застосовується.
|
||||
- `resolveConfigApiKey` використовує hook постачальника, якщо той наданий. Вбудований
|
||||
шлях `amazon-bedrock` також має тут вбудований AWS env-marker resolver,
|
||||
хоча сама runtime-автентифікація Bedrock і далі використовує стандартний
|
||||
- `normalizeConfig` спочатку перевіряє відповідного постачальника, потім інші
|
||||
плагіни постачальників, здатні обробляти hooks, доки один із них справді не змінить config.
|
||||
Якщо жоден hook постачальника не перепише підтримуваний запис config сімейства Google,
|
||||
усе одно застосовується вбудований нормалізатор config Google.
|
||||
- `resolveConfigApiKey` використовує hook постачальника, якщо він доступний. Вбудований
|
||||
шлях `amazon-bedrock` також має тут вбудований resolver AWS env-marker,
|
||||
хоча сама runtime auth Bedrock усе ще використовує стандартний
|
||||
ланцюжок AWS SDK.
|
||||
| 13 | `contributeResolvedModelCompat` | Прапорці compat для моделей постачальника за іншим сумісним transport |
|
||||
| 13 | `contributeResolvedModelCompat` | Прапори compat для моделей вендора за іншим сумісним транспортом |
|
||||
| 14 | `capabilities` | Застарілий статичний набір можливостей; лише для сумісності |
|
||||
| 15 | `normalizeToolSchemas` | Очищення схем інструментів, яким володіє постачальник, перед реєстрацією |
|
||||
| 16 | `inspectToolSchemas` | Діагностика схем інструментів, якою володіє постачальник |
|
||||
| 17 | `resolveReasoningOutputMode` | Контракт виводу reasoning з тегами чи нативний |
|
||||
| 18 | `prepareExtraParams` | Типові параметри запиту |
|
||||
| 19 | `createStreamFn` | Повністю власний transport StreamFn |
|
||||
| 20 | `wrapStreamFn` | Власні обгортки заголовків/тіла на звичайному шляху stream |
|
||||
| 21 | `resolveTransportTurnState` | Нативні заголовки/метадані для кожного ходу |
|
||||
| 22 | `resolveWebSocketSessionPolicy` | Нативні заголовки сеансу WS/cool-down |
|
||||
| 23 | `formatApiKey` | Власна форма runtime-токена |
|
||||
| 24 | `refreshOAuth` | Власне оновлення OAuth |
|
||||
| 25 | `buildAuthDoctorHint` | Підказка щодо відновлення автентифікації |
|
||||
| 26 | `matchesContextOverflowError` | Виявлення переповнення, яким володіє постачальник |
|
||||
| 27 | `classifyFailoverReason` | Класифікація rate-limit/overload, якою володіє постачальник |
|
||||
| 15 | `normalizeToolSchemas` | Очищення tool-schema, що належить постачальнику, перед реєстрацією |
|
||||
| 16 | `inspectToolSchemas` | Діагностика tool-schema, що належить постачальнику |
|
||||
| 17 | `resolveReasoningOutputMode` | Контракт tagged vs native reasoning-output |
|
||||
| 18 | `prepareExtraParams` | Параметри запиту за замовчуванням |
|
||||
| 19 | `createStreamFn` | Повністю користувацький транспорт StreamFn |
|
||||
| 20 | `wrapStreamFn` | Користувацькі обгортки заголовків/тіла на звичайному шляху stream |
|
||||
| 21 | `resolveTransportTurnState` | Власні заголовки/метадані для кожного turn |
|
||||
| 22 | `resolveWebSocketSessionPolicy` | Власні заголовки сесії WS / період охолодження |
|
||||
| 23 | `formatApiKey` | Користувацька форма runtime token |
|
||||
| 24 | `refreshOAuth` | Користувацьке оновлення OAuth |
|
||||
| 25 | `buildAuthDoctorHint` | Підказка щодо виправлення автентифікації |
|
||||
| 26 | `matchesContextOverflowError` | Визначення переповнення, що належить постачальнику |
|
||||
| 27 | `classifyFailoverReason` | Класифікація rate-limit/overload, що належить постачальнику |
|
||||
| 28 | `isCacheTtlEligible` | Керування TTL кешу prompt |
|
||||
| 29 | `buildMissingAuthMessage` | Власна підказка про відсутню автентифікацію |
|
||||
| 30 | `suppressBuiltInModel` | Приховати застарілі рядки вище за потоком |
|
||||
| 31 | `augmentModelCatalog` | Synthetic рядки сумісності вперед у каталозі |
|
||||
| 32 | `isBinaryThinking` | Двійкове thinking увімк./вимк. |
|
||||
| 29 | `buildMissingAuthMessage` | Користувацька підказка про відсутню автентифікацію |
|
||||
| 30 | `suppressBuiltInModel` | Приховати застарілі upstream rows |
|
||||
| 31 | `augmentModelCatalog` | Синтетичні rows для forward-compat |
|
||||
| 32 | `isBinaryThinking` | Бінарний thinking увімк./вимк. |
|
||||
| 33 | `supportsXHighThinking` | Підтримка reasoning `xhigh` |
|
||||
| 34 | `resolveDefaultThinkingLevel` | Типова політика `/think` |
|
||||
| 35 | `isModernModelRef` | Зіставлення live/smoke моделей |
|
||||
| 36 | `prepareRuntimeAuth` | Обмін токенів перед inference |
|
||||
| 37 | `resolveUsageAuth` | Власний парсинг облікових даних usage |
|
||||
| 38 | `fetchUsageSnapshot` | Власний endpoint usage |
|
||||
| 39 | `createEmbeddingProvider` | Адаптер embedding для memory/search, яким володіє постачальник |
|
||||
| 40 | `buildReplayPolicy` | Власна політика replay/compaction transcript |
|
||||
| 34 | `resolveDefaultThinkingLevel` | Політика `/think` за замовчуванням |
|
||||
| 35 | `isModernModelRef` | Відповідність live/smoke моделей |
|
||||
| 36 | `prepareRuntimeAuth` | Обмін токенами перед inference |
|
||||
| 37 | `resolveUsageAuth` | Користувацький розбір облікових даних usage |
|
||||
| 38 | `fetchUsageSnapshot` | Користувацький endpoint usage |
|
||||
| 39 | `createEmbeddingProvider` | Адаптер embedding, що належить постачальнику, для memory/search |
|
||||
| 40 | `buildReplayPolicy` | Користувацька політика replay/compaction транскрипту |
|
||||
| 41 | `sanitizeReplayHistory` | Специфічні для постачальника переписування replay після загального очищення |
|
||||
| 42 | `validateReplayTurns` | Сувора перевірка ходів replay перед вбудованим раннером |
|
||||
| 43 | `onModelSelected` | Зворотний виклик після вибору (наприклад, телеметрія) |
|
||||
| 42 | `validateReplayTurns` | Сувора валідація replay-turn перед вбудованим runner |
|
||||
| 43 | `onModelSelected` | Колбек після вибору моделі (наприклад, telemetry) |
|
||||
|
||||
Примітка щодо налаштування prompt:
|
||||
|
||||
- `resolveSystemPromptContribution` дає постачальнику змогу додавати
|
||||
системні підказки з урахуванням кешу для сімейства моделей. Віддавайте цьому перевагу замість
|
||||
`before_prompt_build`, коли поведінка належить одному сімейству постачальника/моделей
|
||||
- `resolveSystemPromptContribution` дозволяє постачальнику додавати cache-aware
|
||||
інструкції до system prompt для сімейства моделей. Віддавайте йому перевагу перед
|
||||
`before_prompt_build`, якщо поведінка належить одному сімейству постачальника/моделей
|
||||
і має зберігати стабільний/динамічний поділ кешу.
|
||||
|
||||
Детальні описи й приклади з реального світу дивіться в
|
||||
Докладні описи та реальні приклади дивіться в
|
||||
[Internals: Provider Runtime Hooks](/uk/plugins/architecture#provider-runtime-hooks).
|
||||
</Accordion>
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Додайте додаткові можливості (необов'язково)">
|
||||
<Step title="Додайте додаткові можливості (необов’язково)">
|
||||
<a id="step-5-add-extra-capabilities"></a>
|
||||
Плагін постачальника може реєструвати speech, realtime transcription, realtime
|
||||
voice, media understanding, image generation, video generation, web fetch
|
||||
і web search разом із текстовим inference:
|
||||
і web search поряд із текстовим inference:
|
||||
|
||||
```typescript
|
||||
register(api) {
|
||||
@ -645,23 +648,23 @@ x-i18n:
|
||||
```
|
||||
|
||||
OpenClaw класифікує це як плагін **hybrid-capability**. Це
|
||||
рекомендований шаблон для корпоративних плагінів (один плагін на постачальника). Дивіться
|
||||
рекомендований шаблон для корпоративних плагінів (один плагін на вендора). Див.
|
||||
[Internals: Capability Ownership](/uk/plugins/architecture#capability-ownership-model).
|
||||
|
||||
Для генерації відео віддавайте перевагу показаній вище структурі можливостей із урахуванням режимів:
|
||||
`generate`, `imageToVideo` і `videoToVideo`. Плоскі агреговані поля на
|
||||
кшталт `maxInputImages`, `maxInputVideos` і `maxDurationSeconds`
|
||||
недостатні, щоб чисто оголошувати підтримку режимів перетворення або вимкнених режимів.
|
||||
Для генерації відео віддавайте перевагу наведеній вище структурі можливостей з урахуванням режимів:
|
||||
`generate`, `imageToVideo` і `videoToVideo`. Пласкі агреговані поля, такі
|
||||
як `maxInputImages`, `maxInputVideos` і `maxDurationSeconds`, недостатні,
|
||||
щоб коректно оголошувати підтримку режимів трансформації або вимкнені режими.
|
||||
|
||||
Постачальники генерації музики мають дотримуватися того самого шаблону:
|
||||
`generate` для генерації лише за prompt і `edit` для генерації
|
||||
на основі еталонного зображення. Плоскі агреговані поля на кшталт `maxInputImages`,
|
||||
`supportsLyrics` і `supportsFormat` недостатні для оголошення підтримки редагування;
|
||||
на основі референсного зображення. Пласкі агреговані поля, такі як `maxInputImages`,
|
||||
`supportsLyrics` і `supportsFormat`, недостатні, щоб оголосити підтримку edit;
|
||||
очікуваним контрактом є явні блоки `generate` / `edit`.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Протестуйте">
|
||||
<Step title="Тестування">
|
||||
<a id="step-6-test"></a>
|
||||
```typescript src/provider.test.ts
|
||||
import { describe, it, expect } from "vitest";
|
||||
@ -696,45 +699,45 @@ x-i18n:
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Опублікуйте в ClawHub
|
||||
## Публікація в ClawHub
|
||||
|
||||
Плагіни постачальників публікуються так само, як і будь-який інший зовнішній кодовий плагін:
|
||||
Плагіни постачальників публікуються так само, як і будь-які інші зовнішні кодові плагіни:
|
||||
|
||||
```bash
|
||||
clawhub package publish your-org/your-plugin --dry-run
|
||||
clawhub package publish your-org/your-plugin
|
||||
```
|
||||
|
||||
Не використовуйте тут застарілий псевдонім публікації лише для Skills; пакети плагінів мають використовувати
|
||||
Не використовуйте тут застарілий alias публікації лише для Skills; пакети плагінів мають використовувати
|
||||
`clawhub package publish`.
|
||||
|
||||
## Структура файлів
|
||||
|
||||
```
|
||||
<bundled-plugin-root>/acme-ai/
|
||||
├── package.json # metadata openclaw.providers
|
||||
├── openclaw.plugin.json # Маніфест із providerAuthEnvVars
|
||||
├── package.json # openclaw.providers metadata
|
||||
├── openclaw.plugin.json # Manifest with provider auth metadata
|
||||
├── index.ts # definePluginEntry + registerProvider
|
||||
└── src/
|
||||
├── provider.test.ts # Тести
|
||||
└── usage.ts # Endpoint usage (необов'язково)
|
||||
├── provider.test.ts # Tests
|
||||
└── usage.ts # Usage endpoint (optional)
|
||||
```
|
||||
|
||||
## Довідник щодо порядку каталогів
|
||||
## Довідка щодо порядку catalog
|
||||
|
||||
`catalog.order` визначає, коли ваш каталог зливається відносно вбудованих
|
||||
`catalog.order` керує тим, коли ваш каталог об’єднується відносно вбудованих
|
||||
постачальників:
|
||||
|
||||
| Порядок | Коли | Випадок використання |
|
||||
| --------- | ------------- | ----------------------------------------------- |
|
||||
| `simple` | Перший прохід | Звичайні постачальники з API-ключем |
|
||||
| `profile` | Після simple | Постачальники, обмежені профілями автентифікації |
|
||||
| `paired` | Після profile | Синтезувати кілька пов'язаних записів |
|
||||
| `late` | Останній прохід | Перевизначити наявних постачальників (виграє при колізії) |
|
||||
| Order | Коли | Випадок використання |
|
||||
| --------- | ------------- | --------------------------------------------- |
|
||||
| `simple` | Перший прохід | Звичайні постачальники з API key |
|
||||
| `profile` | Після simple | Постачальники, прив’язані до профілів auth |
|
||||
| `paired` | Після profile | Синтез кількох пов’язаних записів |
|
||||
| `late` | Останній прохід | Перевизначення наявних постачальників (перемагає при конфлікті) |
|
||||
|
||||
## Наступні кроки
|
||||
|
||||
- [Channel Plugins](/uk/plugins/sdk-channel-plugins) — якщо ваш плагін також надає канал
|
||||
- [SDK Runtime](/uk/plugins/sdk-runtime) — допоміжні засоби `api.runtime` (TTS, пошук, subagent)
|
||||
- [SDK Overview](/uk/plugins/sdk-overview) — повний довідник імпортів subpath
|
||||
- [Plugin Internals](/uk/plugins/architecture#provider-runtime-hooks) — подробиці про hooks і вбудовані приклади
|
||||
- [SDK Runtime](/uk/plugins/sdk-runtime) — helper-функції `api.runtime` (TTS, search, subagent)
|
||||
- [SDK Overview](/uk/plugins/sdk-overview) — повний довідник з імпорту subpath
|
||||
- [Plugin Internals](/uk/plugins/architecture#provider-runtime-hooks) — деталі hooks і приклади вбудованих реалізацій
|
||||
|
||||
Loading…
Reference in New Issue
Block a user