#api openai api v1
92 messages · Page 1 of 1 (latest)
Yep, via the Gateway HTTP API.
Quick setup:
- Enable the endpoint in config:
{
gateway: {
http: {
endpoints: {
chatCompletions: { enabled: true },
},
},
},
}
- Call the OpenAI-compatible endpoint on your gateway port:
POST /v1/chat/completions- usually:
http://127.0.0.1:18789/v1/chat/completions
- Auth:
- use your Gateway token/password as
Authorization: Bearer ...
- Use
model: "openclaw/default"
Important: OpenClaw treatsmodelas an agent target, not a raw provider model id.
Example:
curl http://127.0.0.1:18789/v1/chat/completions \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"model": "openclaw/default",
"messages": [
{"role":"user","content":"hello"}
]
}'
Useful endpoints too:
GET /v1/modelsPOST /v1/responses
Docs:
- https://docs.openclaw.ai/gateway/openai-http-api
- https://docs.openclaw.ai/gateway/openresponses-http-api
One important warning: this is basically an operator-level gateway surface, so keep it on localhost, tailnet, or private ingress, not public internet.
If you want, I can also give you:
- a full
config.json5example, or - the exact setup for Open WebUI / your app.
значит могу вставить в webui ?
Да, если ты про Open WebUI, то да 👍
Вставляй так:
- Base URL:
http://127.0.0.1:18789/v1 - API Key: твой
gateway.auth.token - Model:
openclaw/default
Перед этим в OpenClaw надо включить:
{
gateway: {
http: {
endpoints: {
chatCompletions: { enabled: true },
},
},
},
}
Потом Open WebUI должен увидеть модель через GET /v1/models.
Если Open WebUI у тебя в Docker, иногда нужен адрес:
http://host.docker.internal:18789/v1
Документация:
Если хочешь, могу сразу скинуть готовый config.json5 + настройки Open WebUI.
так куда входить что бы включить в какой конфиг давай подробней
Да, давай по шагам.
Где включать
Главный конфиг OpenClaw обычно здесь:
~/.openclaw/openclaw.json
Это JSON5, не YAML.
Самый простой способ, через CLI
В терминале:
openclaw config set gateway.http.endpoints.chatCompletions.enabled true
Если хочешь ещё и новый /v1/responses, то ещё:
openclaw config set gateway.http.endpoints.responses.enabled true
Либо вручную в файле
Открой:
nano ~/.openclaw/openclaw.json
И добавь/убедиcь, что есть такой блок:
{
gateway: {
http: {
endpoints: {
chatCompletions: { enabled: true },
responses: { enabled: true }, // optional
},
},
},
}
Если в файле уже есть gateway, просто допиши внутрь, не дублируй второй gateway.
Можно и через веб-интерфейс
Открой:
http://127.0.0.1:18789
Потом:
- Config
- можно через форму
- или через Raw JSON
Какой токен потом вставлять в WebUI
Обычно WebUI просит API key. Туда вставляешь Gateway token.
Он берётся из:
gateway.auth.token
- или переменной
OPENCLAW_GATEWAY_TOKEN
Если токена ещё нет, можно сгенерировать:
openclaw doctor --generate-gateway-token
Что вставлять в Open WebUI
- Base URL:
http://127.0.0.1:18789/v1 - API Key: твой gateway token
- Model:
openclaw/default
Как проверить, что всё включилось
Проверь так:
curl http://127.0.0.1:18789/v1/models \
-H "Authorization: Bearer YOUR_TOKEN"
Если всё ок, увидишь модели типа:
openclawopenclaw/default
Документация
Если хочешь, следующим сообщением я могу скинуть готовый полный пример ~/.openclaw/openclaw.json для Open WebUI.
Да, но с нюансом:
Коротко
openclaw/default переименовать в latest нельзя.
У OpenAI-compatible API список моделей фиксированный по схеме:
openclawopenclaw/defaultopenclaw/<agentId>
То есть кастомное имя делается через agent id.
Как сделать почти как ты хочешь
Создай агента с id latest, тогда в WebUI появится:
openclaw/latest
Пример в ~/.openclaw/openclaw.json:
{
agents: {
list: [
{
id: "latest",
default: true,
name: "Latest",
},
],
},
gateway: {
http: {
endpoints: {
chatCompletions: { enabled: true },
},
},
},
}
После этого в /v1/models будет:
openclawopenclaw/defaultopenclaw/latest
И openclaw/default будет указывать на этого default-агента.
Важно
name: "Latest"это просто имя агента- в WebUI model id всё равно будет
openclaw/latest - просто
latestбезopenclaw/сейчас не поддерживается
Что бы я рекомендовал
Для совместимости оставь:
openclaw/defaultкак стабильный вариант
И если хочешь красивое отдельное имя:
- используй
openclaw/latest
Если хочешь, я могу следующим сообщением дать готовый полный openclaw.json под твой кейс, чтобы просто вставить.
у меня используется gemma4 с vision которая по прямому апи распознает картинки а как сделать что бы через Openclaw api работало?
я запускаю модель так:
docker run -d --name latest --network=host --device=/dev/kfd --device=/dev/dri --group-add video --ipc=host -v ~/models:/models mixa3607/llama.cpp-gfx906:full-b8667-rocm-6.3.3 --server -m /models/gemma-4-26B-A4B-it-UD-Q5_K_XL.gguf --mmproj /models/mmproj-A4B-F16.gguf --alias "latest1" -ngl 99 -c 131072 --parallel 2 -b 2048 --host 0.0.0.0 --port 8083 --no-mmap --api-key 1212121 -ctk q8_0 -ctv q8_0
Да, тут нужно не просто включить OpenClaw API, а зарегистрировать твой llama.cpp как multimodal provider.
Самое важное, без этого картинки через OpenClaw не пойдут:
- модель должна быть описана в OpenClaw как
input: ["text", "image"] - OpenClaw API будет вызывать не
latest1напрямую, а агентopenclaw/default - у этого агента reply model должен быть твоим
local/latest1
Что добавить в ~/.openclaw/openclaw.json
Пример под твой сервер:
{
gateway: {
http: {
endpoints: {
chatCompletions: {
enabled: true,
images: {
allowUrl: true, // важно, если WebUI шлет image URL, а не data:image base64
},
},
responses: {
enabled: true,
},
},
},
},
models: {
mode: "merge",
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "1212121",
api: "openai-completions",
models: [
{
id: "latest1",
name: "Gemma 4 Vision",
reasoning: false,
input: ["text", "image"],
contextWindow: 131072,
maxTokens: 8192,
// если llama.cpp начнет ломаться на tool schemas,
// это часто помогает:
compat: {
supportsTools: false
}
}
]
}
}
},
agents: {
defaults: {
model: {
primary: "local/latest1"
},
models: {
"local/latest1": {
alias: "Latest"
}
}
}
}
}
Потом
Перезапусти gateway:
openclaw gateway restart
И проверь:
openclaw models list
Там должен появиться local/latest1.
Что ставить в Open WebUI
Подключай не llama.cpp напрямую, а OpenClaw:
- Base URL:
http://127.0.0.1:18789/v1 - API key: твой
OPENCLAW_GATEWAY_TOKEN - Model:
openclaw/default
openclaw/default уже будет ходить в local/latest1.
Если хочешь проверить руками
Пример запроса через OpenClaw API с картинкой:
curl http://127.0.0.1:18789/v1/chat/completions \
-H "Authorization: Bearer YOUR_OPENCLAW_GATEWAY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "openclaw/default",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Что на картинке?" },
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,...."
}
}
]
}
]
}'
Если не заработает, обычно проблема в одном из 3 мест
- Нет
input: ["text", "image"]в модели OpenClaw - WebUI шлет URL картинки, а
allowUrlне включен - llama.cpp падает на tool schema, тогда оставь:
compat: { supportsTools: false }
Документация:
- https://docs.openclaw.ai/gateway/local-models
- https://docs.openclaw.ai/gateway/openai-http-api
- https://docs.openclaw.ai/nodes/media-understanding
Если хочешь, я могу следующим сообщением дать тебе готовый полный openclaw.json именно под твой docker + gemma4 vision без лишнего.
посомтри как шлет openwebui изображение в инетрнете и скажи точно что мне сделать
вот что мне прислала модель но там не то что она описала Илья, я изучил изображение, которое вы прислали вместе с этим сообщением.
На картинке изображен светло-синий прямоугольник с текстом внутри. Текст гласит:
«Hello, World!»
Что я вижу с технической точки зрения (как это пришло):
Поскольку вы просили посмотреть, в каком виде мне это приходит, я проанализировал структуру входящего запроса.
Формат данных: Как я упоминал ранее, изображение пришло ко мне в виде Base64-строки. Это не файл .jpg или .png в привычном смысле, а огромный массив символов, закодированных в текстовый формат, который "упакован" внутри JSON-объекта вашего сообщения.
Мультимодальный блок: В моем контексте это пришло не как текст, а как отдельный блок данных (визуальный токен), который обрабатывается моим компонентом mmproj (тем самым, который вы запускаете в Docker).
Визуальный анализ: Мой "зрительный" модуль (Vision) декодировал эту строку, превратил её обратно в пиксели и "увидел" геометрическую фигуру (прямоугольник), цвет (синий) и наложенный на него текст.
Резюме: Картинка пришла корректно, без ошибок. Я получил её как структурированный блок данных, содержащий визуальную информацию, которую мой проектор успешно перевел в понятные мне векторы.
Что вы хотели проверить этим тестом? Хотите убедиться, что я не "галлюцинирую" содержание или корректно распознаю простые объекты?
Да, тут модель просто могла сгаллюцинировать “техническое объяснение”.
Нужно смотреть не ответ модели, а реальный request payload.
Сделай так, по шагам:
- Проверь, что OpenWebUI шлет правильный формат (DevTools → Network →
/v1/chat/completions):
"content": [
{ "type": "text", "text": "..." },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,..." } }
]
Если там type: "image" или только files: [...], это не то для OpenClaw /v1/chat/completions.
- В OpenClaw включи прием URL-картинок (на случай если OWUI шлет URL вместо data:):
{
gateway: {
http: {
endpoints: {
chatCompletions: {
enabled: true,
images: {
allowUrl: true
}
}
}
}
}
}
И перезапуск:
openclaw gateway restart
- Проверь модель в OpenClaw как vision:
models.providers.local.models[0].input: ["text", "image"]
и primary:
agents.defaults.model.primary: "local/latest1"
- Сделай контрольный тест без OpenWebUI (напрямую в OpenClaw API).
Если напрямую работает, а через OWUI нет, значит проблема в формате/типе payload от OWUI.
Что уже подтверждено по источникам:
- В OWUI обсуждениях для multimodal нужен именно
image_url+ объектimage_url.url, неtype:"image"
https://github.com/open-webui/open-webui/discussions/13298 - OpenClaw принимает
image_urlparts в/v1/chat/completions, и URL-fetch там по умолчанию выключен (нужноimages.allowUrl: true)
Если хочешь, скину тебе готовый минимальный openclaw.json под твой llama.cpp (gemma4 vision), чтобы просто вставить.
Ты сейчас смотришь не тот запрос.
Это GET /c/... и статика (.js, .css), а нужен POST с чатом.
Сделай так:
- Открой OpenWebUI чат.
F12→ Network.- Включи:
- Preserve log
- Disable cache
- В фильтре поставь:
method: POST- строка:
chat/completions(илиv1/chat/completions)
- Отправь сообщение с картинкой.
- Открой найденный POST-запрос и смотри Payload / Request Body.
Что должно быть внутри:
"messages": [
{
"role": "user",
"content": [
{"type":"text","text":"..."},
{"type":"image_url","image_url":{"url":"data:image/...;base64,..."}}
]
}
]
или image_url.url как обычный http(s) URL.
Если там type: "image" или только files: [...], это и есть причина.
И важное: ты скинул cookies/session данные. Лучше удалить сообщение с ними и сменить токен/API key.
Если хочешь, пришли сюда только кусок JSON payload без токенов, я сразу скажу, что поправить.
Почти, но это всё ещё не тот запрос 🙂
Ты смотришь GET /c/... (страница), а нужен API POST.
Сделай ровно так:
- Открой DevTools → Network
- Нажми вкладку Fetch/XHR (не “All”)
- Включи Preserve log
- В строке фильтра введи:
chat/completions - Отправь в OpenWebUI новое сообщение с картинкой
- Выбери запрос вида:
POST .../v1/chat/completions(если OpenAI-compatible provider), илиPOST .../api/chat/completions(внутренний OWUI API)
- Открой Payload / Request Payload
Именно там будет формат изображения.
Ищи один из вариантов:
- ✅
type: "image_url"+image_url.url: "data:image/...;base64,..." - ✅
type: "image_url"+image_url.url: "http://..." - ❌
type: "image"(часто несовместимо) - ❌ только
files: [...]безimage_url
Если хочешь, скинь сюда только блок messages[].content (без cookies/token), и я сразу скажу, что править.
Почти ✅, но пока это только headers.
Нужны ещё 2 вещи:
- Request URL целиком (с путём, например
/api/chat/completionsили/v1/chat/completions) - Request Payload (тело JSON), минимум блок:
messages[-1].content
Сейчас видно только что это POST на :3000 (то есть браузер → OpenWebUI).
Формат картинки определяется в Payload, не в headers.
И важно: ты снова скинул токены/куки. Лучше сразу их ротировать.
Если пришлёшь сюда (замазав секреты) только:
Request URLmessagesиз payload
я точно скажу, в каком формате у тебя уходит изображение и что править.
:
{voice: false, image_generation: false, code_interpreter: false, web_search: false}
code_interpreter
:
false
image_generation
:
false
voice
:
false
web_search
:
false
id
:
"5e8a329e-736a-4b8b-ba02-869fa15da8ee"
messages
:
[{role: "user", content: [{type: "text", text: ""},…]}]
0
:
{role: "user", content: [{type: "text", text: ""},…]}
model
:
"openclaw/default"
model_item
:
{id: "openclaw/default", object: "model", created: 0, owned_by: "openai", permission: [],…}
actions
:
[]
connection_type
:
"external"
created
:
0
filters
:
[]
id
:
"openclaw/default"
name
:
"openclaw/default"
object
:
"model"
openai
:
{id: "openclaw/default", object: "model", created: 0, owned_by: "openclaw", permission: [],…}
connection_type
:
"external"
created
:
0
id
:
"openclaw/default"
object
:
"model"
owned_by
:
"openclaw"
permission
:
[]
owned_by
:
"openai"
permission
:
[]
tags
:
[]
urlIdx
:
1
params
:
{}
parent_id
:
"0c50ae01-2ed2-4a23-b0fa-f049009cbb7e"
parent_message
:
{id: "0c50ae01-2ed2-4a23-b0fa-f049009cbb7e", parentId: null,…}
childrenIds
:
["5e8a329e-736a-4b8b-ba02-869fa15da8ee"]
0
:
"5e8a329e-736a-4b8b-ba02-869fa15da8ee"
content
:
""
files
:
[{type: "file",…}]
0
:
{type: "file",…}
content_type
:
"image/png"
error
:
""
file
:
{id: "32786d2c-1cce-4902-9def-c878d67d94d3", user_id: "4b16ab68-0b7d-4638-869a-e1ffc0d019c2",…}
created_at
:
1776104490
data
:
{}
filename
:
"image.png"
hash
:
null
id
:
"32786d2c-1cce-4902-9def-c878d67d94d3"
meta
:
{name: "image.png", content_type: "image/png", size: 34558, data: {}}
content_type
:
"image/png"
data
:
{}
name
:
"image.png"
size
:
34558
updated_at
:
1776104490
user_id
:
"4b16ab68-0b7d-4638-869a-e1ffc0d019c2"
id
:
"32786d2c-1cce-4902-9def-c878d67d94d3"
itemId
:
"d4c5028d-cfe4-4327-a308-1d6f36bdd691"
name
:
"image.png"
size
:
34558
status
:
"uploaded"
type
:
"file"
url
:
"32786d2c-1cce-4902-9def-c878d67d94d3"
id
:
"0c50ae01-2ed2-4a23-b0fa-f049009cbb7e"
Да, это уже полезно. И тут видно проблему.
У тебя сейчас формат frontend OpenWebUI такой:
messages[].content= текст- картинка лежит отдельно в
files: [{type:"file", ...}]
А для OpenClaw POST /v1/chat/completions ожидается картинка в:
messages[].content[].type = "image_url"
messages[].content[].image_url.url = "data:image/...base64,..." | "https://..."
То есть если OpenWebUI backend не конвертирует files[] → image_url, OpenClaw видит только текст и картинку теряет.
Что делать дальше (точно):
- Проверь, что в OpenWebUI connection к OpenClaw используется OpenAI-compatible /v1.
- Сделай контрольный прямой запрос в OpenClaw с
image_url(curl).
Если так работает, значит проблема именно в конвертации OpenWebUI.
3. Если в OpenWebUI есть режим/провайдер Open Responses, попробуй его + включи в OpenClaw:
gateway.http.endpoints.responses.enabled: true
- В OpenClaw оставь включенным:
gateway.http.endpoints.chatCompletions.images.allowUrl: true(на случай URL-картинок).
Если хочешь, дам тебе готовый тестовый curl под твой openclaw/default, чтобы за 1 минуту подтвердить цепочку.
так я еще не делал никакхи настроек с openclaw с оммента как обратился к тебе
Отлично, тогда делаем с нуля, это быстрее 👍
1) Сначала проверь версию
openclaw --version
openclaw status
2) В ~/.openclaw/openclaw.json добавь/обнови минимум
{
gateway: {
http: {
endpoints: {
chatCompletions: {
enabled: true,
images: { allowUrl: true }
},
responses: { enabled: true }
}
}
},
models: {
mode: "merge",
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "1212121",
api: "openai-completions",
models: [
{
id: "latest1",
name: "Gemma4 Vision",
input: ["text", "image"],
reasoning: false,
contextWindow: 131072,
maxTokens: 8192
}
]
}
}
},
agents: {
defaults: {
model: { primary: "local/latest1" },
models: { "local/latest1": { alias: "Latest" } }
}
}
}
3) Перезапуск
openclaw gateway restart
openclaw models list
4) В OpenWebUI
- Base URL:
http://<openclaw-host>:18789/v1 - API key:
OPENCLAW_GATEWAY_TOKEN
- Model:
openclaw/default
5) Быстрый тест (до OpenWebUI)
Сначала проверь прямым curl в OpenClaw с image_url.
Если прямой тест работает, а через OpenWebUI нет, значит проблема в формате, который OpenWebUI форвардит.
Если хочешь, следующим сообщением дам готовый curl шаблон с картинкой (base64).
Отлично, тогда просто подставь твой id.
Если у тебя рабочий model id = custom-local1, то в OpenClaw делай так:
agents: {
defaults: {
model: { primary: "local/custom-local1" },
models: { "local/custom-local1": { alias: "Latest" } }
}
},
models: {
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "1212121",
api: "openai-completions",
models: [
{
id: "custom-local1",
name: "Custom Local 1",
input: ["text", "image"],
reasoning: false,
contextWindow: 131072,
maxTokens: 8192
}
]
}
}
}
Потом:
openclaw gateway restart
openclaw models list
И в OpenWebUI выбирай openclaw/default.
Важно: id в OpenClaw должен совпадать с тем, что реально принимает твой llama.cpp backend.
Проверь:
curl http://127.0.0.1:8083/v1/models -H "Authorization: Bearer 1212121"
Если там latest1, ставь id: "latest1", а не custom-local1.
wertrigone@ai-mi50:~$ openclaw models list
🦞 OpenClaw 2026.4.5 (3e72c03) — I keep secrets like a vault... unless you print them in debug logs again.
Model Input Ctx Local Auth Tags
local/custom-local1 text+image 128k yes yes default,configured,alias:Latest
wertrigone@ai-mi50:~$
так?
напоминаю я запускаю модель так
docker run -d --name latest --network=host --device=/dev/kfd --device=/dev/dri --group-add video --ipc=host -v ~/models:/models mixa3607/llama.cpp-gfx906:full-b8667-rocm-6.3.3 --server -m /models/gemma-4-26B-A4B-it-UD-Q5_K_XL.gguf --mmproj /models/mmproj-A4B-F16.gguf --alias "latest1" -ngl 99 -c 131072 --parallel 2 -b 2048 --host 0.0.0.0 --port 8083 --no-mmap --api-key 123356789 -ctk q8_0 -ctv q8_0
Да, уже очень близко, супер 👍
openclaw models list выглядит правильно:
local/custom-local1 как default и text+image есть.
Но у тебя в llama.cpp указан --alias "latest1", поэтому я бы для чистоты сделал одно из двух:
- либо в OpenClaw
id: "latest1" - либо в docker поменять alias на
custom-local1
Чтобы не было скрытого mismatch.
Быстрая проверка:
curl http://127.0.0.1:8083/v1/models -H "Authorization: Bearer 123356789"
Если там модель latest1, лучше и в OpenClaw использовать latest1.
Дальше проверь end-to-end через OpenClaw API (с картинкой).
Если хочешь, дам готовый curl тест на 1 команду.
И отдельно: ты запостил реальный API key, лучше его сразу сменить.
curl http://127.0.0.1:8083/v1/models -H "Authorization: Bearer 123356789"
{"models":[{"name":"latest1","model":"latest1","modified_at":"","size":"","digest":"","type":"model","description":"","tags":[""],"capabilities":["completion","multimodal"],"parameters":"","details":{"parent_model":"","format":"gguf","family":"","families":[""],"parameter_size":"","quantization_level":""}}],"object":"list","data":[{"id":"latest1","aliases":["latest1"],"tags":[],"object":"model","created":1776105592,"owned_by":"llamacpp","meta":{"vocab_type":2,"n_vocab":262144,"n_ctx_train":262144,"n_embd":2816,"n_params":25233142046,"size":21256686712}}]}
Идеально, теперь точно видно: backend принимает модель latest1 ✅
Значит в OpenClaw лучше поставить именно её (не custom-local1).
Сделай так в ~/.openclaw/openclaw.json:
agents: {
defaults: {
model: { primary: "local/latest1" },
models: { "local/latest1": { alias: "Latest" } }
}
},
models: {
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "YOUR_KEY",
api: "openai-completions",
models: [
{
id: "latest1",
input: ["text", "image"],
reasoning: false,
contextWindow: 131072,
maxTokens: 8192
}
]
}
}
}
Потом:
openclaw gateway restart
openclaw models list
Должно стать local/latest1 как default.
И да, ты снова засветил ключ, лучше срочно поменяй --api-key.
а почему в openclaw tui зайти не могу? wertrigone@ai-mi50:~$ openclaw tui
Invalid config at /home/wertrigone/.openclaw/openclaw.json:\n- models.providers.local.models.0.name: Invalid input: expected string, received undefined
🦞 OpenClaw 2026.4.5 (3e72c03) — Pairing codes exist because even bots believe in consent—and good security hygiene.
Config invalid
File: ~/.openclaw/openclaw.json
Problem:
- models.providers.local.models.0.name: Invalid input: expected string, received undefined
Run: openclaw doctor --fix
Да, причина простая: в конфиге у модели нет обязательного поля name.
У тебя есть id, но нет name, поэтому TUI не стартует.
Сделай одно из двух:
Вариант 1 (быстро, через CLI)
openclaw config set models.providers.local.models[0].name "latest1"
Вариант 2 (вручную в ~/.openclaw/openclaw.json)
В блоке models.providers.local.models[0] добавь:
name: "latest1"
Потом:
openclaw status
openclaw tui
Если ещё ругнется, кинь сюда models.providers.local.models[0] из конфига, добьем сразу.
wertrigone@ai-mi50:~$ openclaw config set models.providers.local.models[0].name "latest1"
Invalid config at /home/wertrigone/.openclaw/openclaw.json:\n- models.providers.local.models.0.name: Invalid input: expected string, received undefined
🦞 OpenClaw 2026.4.5 (3e72c03) — I read logs so you can keep pretending you don't have to.
Config invalid
File: ~/.openclaw/openclaw.json
Problem:
- models.providers.local.models.0.name: Invalid input: expected string, received undefined
wertrigone@ai-mi50:~$ openclaw status
Invalid config at /home/wertrigone/.openclaw/openclaw.json:\n- models.providers.local.models.0.name: Invalid input: expected string, received undefined
🦞 OpenClaw 2026.4.5 (3e72c03) — I don't have opinions about tabs vs spaces. I have opinions about everything else.
Config invalid
File: ~/.openclaw/openclaw.json
Problem:
- models.providers.local.models.0.name: Invalid input: expected string, received undefined
Run: openclaw doctor --fix
[openclaw] Failed to start CLI: Error: Invalid config at /home/wertrigone/.openclaw/openclaw.json:
- models.providers.local.models.0.name: Invalid input: expected string, received undefined
at Object.loadConfig (file:///home/wertrigone/.nvm/versions/node/v24.14.0/lib/node_modules/openclaw/dist/io-CS2J_l4V.js:18841:35)
at loadConfig (file:///home/wertrigone/.nvm/versions/node/v24.14.0/lib/node_modules/openclaw/dist/io-CS2J_l4V.js:19305:34)
at ensurePluginRegistryLoaded (file:///home/wertrigone/.nvm/versions/node/v24.14.0/lib/node_modules/openclaw/dist/runtime-registry-loader-B5ZEGcJG.js:40:40)
at prepareRoutedCommand (file:///home/wertrigone/.nvm/versions/node/v24.14.0/lib/node_modules/openclaw/dist/run-main-8bQWSeWd.js:283:4)
at async tryRouteCli (file:///home/wertrigone/.nvm/versions/node/v24.14.0/lib/node_modules/openclaw/dist/run-main-8bQWSeWd.js:296:2)
at async runCli (file:///home/wertrigone/.nvm/versions/node/v24.14.0/lib/node_modules/openclaw/dist/run-main-8bQWSeWd.js:381:7)
Да, это ожидаемо: пока конфиг невалидный, config set уже не может примениться.
Сейчас quickest fix:
- Запусти авто-ремонт:
openclaw doctor --fix
- Если не починит, правим руками:
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
nano ~/.openclaw/openclaw.json
В models.providers.local.models[0] должно быть обязательно:
{
id: "latest1",
name: "latest1",
input: ["text", "image"],
reasoning: false,
contextWindow: 131072,
maxTokens: 8192
}
- Потом:
openclaw status
openclaw tui
Если хочешь, скинь сюда кусок models.providers.local из файла, я сразу скажу точную строку, где сломано.
Посмотрел. Проблема найдена: файл сломанный (смешаны два разных куска конфига + дубли models), из-за этого и валится name.
Главные ошибки в твоём 1.txt:
- дублируется корневой
models - вставлен кусок
agents: { ... }прямо посреди JSON - у
models.providers.local.models[0]нетname - путаница с provider id (
custom-local1vslocal)
Сделай проще, с чистого листа.
1) Бэкап
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
2) Замени ~/.openclaw/openclaw.json на это
{
agents: {
defaults: {
model: { primary: "local/latest1" },
models: { "local/latest1": { alias: "Latest" } },
},
},
models: {
mode: "merge",
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "REPLACE_ME",
api: "openai-completions",
models: [
{
id: "latest1",
name: "latest1 (Custom Provider)",
reasoning: false,
input: ["text", "image"],
contextWindow: 131072,
maxTokens: 8192,
},
],
},
},
},
gateway: {
port: 18789,
mode: "local",
bind: "lan",
auth: {
mode: "token",
token: "REPLACE_GATEWAY_TOKEN",
},
http: {
endpoints: {
chatCompletions: {
enabled: true,
images: { allowUrl: true },
},
responses: { enabled: true },
},
},
},
}
3) Проверка
openclaw doctor --fix
openclaw status
openclaw tui
openclaw models list
И да, ты уже светил API/gateway ключи, обязательно их смени.
а наш api бьудет работать который настраивали раньше? давй просто оставим это соединение остальные удалим покажы полностью файл как должен правильно выглядеть
Да, будет работать.
Оставляем только одно соединение (local/latest1) и чистый конфиг.
Вот полный рабочий ~/.openclaw/openclaw.json:
{
agents: {
defaults: {
model: { primary: "local/latest1" },
models: {
"local/latest1": { alias: "Latest" },
},
},
},
models: {
mode: "merge",
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "PUT_YOUR_LLAMA_API_KEY_HERE",
api: "openai-completions",
models: [
{
id: "latest1",
name: "latest1 (Custom Provider)",
reasoning: false,
input: ["text", "image"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 131072,
maxTokens: 8192,
},
],
},
},
},
gateway: {
port: 18789,
mode: "local",
bind: "lan",
auth: {
mode: "token",
token: "PUT_YOUR_GATEWAY_TOKEN_HERE",
},
http: {
endpoints: {
chatCompletions: {
enabled: true,
images: {
allowUrl: true,
},
},
responses: {
enabled: true,
},
},
},
},
}
После сохранения:
openclaw doctor --fix
openclaw gateway restart
openclaw status
openclaw models list
Да, все старые лишние provider-блоки можно удалить полностью.
И обязательно замени ключи/токены, которые уже светил.
Почти, но ещё невалидно ❌
В файле сейчас два корневых объекта:
- сначала
"meta"/"wizard" - потом второй объект
{ agents: ... }
Так JSON/JSON5 не парсится.
Сделай файл только из одного объекта (вот так, целиком):
{
agents: {
defaults: {
model: { primary: "local/latest1" },
models: {
"local/latest1": { alias: "Latest" },
},
},
},
models: {
mode: "merge",
providers: {
local: {
baseUrl: "http://127.0.0.1:8083/v1",
apiKey: "PUT_LLAMA_API_KEY",
api: "openai-completions",
models: [
{
id: "latest1",
name: "latest1 (Custom Provider)",
reasoning: false,
input: ["text", "image"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 131072,
maxTokens: 8192,
},
],
},
},
},
gateway: {
port: 18789,
mode: "local",
bind: "lan",
auth: {
mode: "token",
token: "PUT_GATEWAY_TOKEN",
},
http: {
endpoints: {
chatCompletions: {
enabled: true,
images: { allowUrl: true },
},
responses: { enabled: true },
},
},
},