#api openai api v1

92 messages · Page 1 of 1 (latest)

strange lotus
#

hello how to make openclaw chat use via api?

full umbraBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

winged heronBOT
drowsy mangoBOT
#

Yep, via the Gateway HTTP API.

Quick setup:

  1. Enable the endpoint in config:
{
  gateway: {
    http: {
      endpoints: {
        chatCompletions: { enabled: true },
      },
    },
  },
}
#
  1. Call the OpenAI-compatible endpoint on your gateway port:
  • POST /v1/chat/completions
  • usually: http://127.0.0.1:18789/v1/chat/completions
  1. Auth:
  • use your Gateway token/password as Authorization: Bearer ...
  1. Use model: "openclaw/default"
    Important: OpenClaw treats model as 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 '{
#

If you want, I can also give you:

  • a full config.json5 example, or
  • the exact setup for Open WebUI / your app.
strange lotus
#

значит могу вставить в webui ?

drowsy mangoBOT
#

Да, если ты про 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.

strange lotus
#

так куда входить что бы включить в какой конфиг давай подробней

drowsy mangoBOT
#

Да, давай по шагам.

Где включать

Главный конфиг 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"

Если всё ок, увидишь модели типа:

  • openclaw
  • openclaw/default

Документация

strange lotus
#

а как изменить название на мое latest например ?

в выборе моделей

#

скажешь?

drowsy mangoBOT
#

Да, но с нюансом:

Коротко

openclaw/default переименовать в latest нельзя.
У OpenAI-compatible API список моделей фиксированный по схеме:

  • openclaw
  • openclaw/default
  • openclaw/<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 будет:

  • openclaw
  • openclaw/default
  • openclaw/latest

И openclaw/default будет указывать на этого default-агента.

#

Важно

  • name: "Latest" это просто имя агента
  • в WebUI model id всё равно будет openclaw/latest
  • просто latest без openclaw/ сейчас не поддерживается

Что бы я рекомендовал

Для совместимости оставь:

  • openclaw/default как стабильный вариант

И если хочешь красивое отдельное имя:

  • используй openclaw/latest

Если хочешь, я могу следующим сообщением дать готовый полный openclaw.json под твой кейс, чтобы просто вставить.

strange lotus
#

у меня используется 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
drowsy mangoBOT
#

Да, тут нужно не просто включить 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 мест

  1. Нет input: ["text", "image"] в модели OpenClaw
  2. WebUI шлет URL картинки, а allowUrl не включен
  3. llama.cpp падает на tool schema, тогда оставь:
compat: { supportsTools: false }

strange lotus
#

посомтри как шлет openwebui изображение в инетрнете и скажи точно что мне сделать

strange lotus
#

вот что мне прислала модель но там не то что она описала Илья, я изучил изображение, которое вы прислали вместе с этим сообщением.

На картинке изображен светло-синий прямоугольник с текстом внутри. Текст гласит:
«Hello, World!»

Что я вижу с технической точки зрения (как это пришло):
Поскольку вы просили посмотреть, в каком виде мне это приходит, я проанализировал структуру входящего запроса.

Формат данных: Как я упоминал ранее, изображение пришло ко мне в виде Base64-строки. Это не файл .jpg или .png в привычном смысле, а огромный массив символов, закодированных в текстовый формат, который "упакован" внутри JSON-объекта вашего сообщения.
Мультимодальный блок: В моем контексте это пришло не как текст, а как отдельный блок данных (визуальный токен), который обрабатывается моим компонентом mmproj (тем самым, который вы запускаете в Docker).
Визуальный анализ: Мой "зрительный" модуль (Vision) декодировал эту строку, превратил её обратно в пиксели и "увидел" геометрическую фигуру (прямоугольник), цвет (синий) и наложенный на него текст.

Резюме: Картинка пришла корректно, без ошибок. Я получил её как структурированный блок данных, содержащий визуальную информацию, которую мой проектор успешно перевел в понятные мне векторы.

Что вы хотели проверить этим тестом? Хотите убедиться, что я не "галлюцинирую" содержание или корректно распознаю простые объекты?
drowsy mangoBOT
#

Да, тут модель просто могла сгаллюцинировать “техническое объяснение”.
Нужно смотреть не ответ модели, а реальный request payload.

Сделай так, по шагам:

  1. Проверь, что 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.

  1. В OpenClaw включи прием URL-картинок (на случай если OWUI шлет URL вместо data:):
#
{
  gateway: {
    http: {
      endpoints: {
        chatCompletions: {
          enabled: true,
          images: {
            allowUrl: true
          }
        }
      }
    }
  }
}

И перезапуск:

#
openclaw gateway restart
  1. Проверь модель в OpenClaw как vision:
models.providers.local.models[0].input: ["text", "image"]

и primary:

agents.defaults.model.primary: "local/latest1"
  1. Сделай контрольный тест без 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_url parts в /v1/chat/completions, и URL-fetch там по умолчанию выключен (нужно images.allowUrl: true)

Если хочешь, скину тебе готовый минимальный openclaw.json под твой llama.cpp (gemma4 vision), чтобы просто вставить.

#

Ты сейчас смотришь не тот запрос.
Это GET /c/... и статика (.js, .css), а нужен POST с чатом.

Сделай так:

  1. Открой OpenWebUI чат.
  2. F12Network.
  3. Включи:
    • Preserve log
    • Disable cache
  4. В фильтре поставь:
    • method: POST
    • строка: chat/completions (или v1/chat/completions)
  5. Отправь сообщение с картинкой.
  6. Открой найденный 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.

Сделай ровно так:

  1. Открой DevTools → Network
  2. Нажми вкладку Fetch/XHR (не “All”)
  3. Включи Preserve log
  4. В строке фильтра введи:
    chat/completions
  5. Отправь в OpenWebUI новое сообщение с картинкой
  6. Выбери запрос вида:
    • POST .../v1/chat/completions (если OpenAI-compatible provider), или
    • POST .../api/chat/completions (внутренний OWUI API)
  7. Открой 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 вещи:

  1. Request URL целиком (с путём, например /api/chat/completions или /v1/chat/completions)
  2. Request Payload (тело JSON), минимум блок:
messages[-1].content

Сейчас видно только что это POST на :3000 (то есть браузер → OpenWebUI).
Формат картинки определяется в Payload, не в headers.

И важно: ты снова скинул токены/куки. Лучше сразу их ротировать.

Если пришлёшь сюда (замазав секреты) только:

  • Request URL
  • messages из payload
#

я точно скажу, в каком формате у тебя уходит изображение и что править.

strange lotus
#
: 
{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"
drowsy mangoBOT
#

Да, это уже полезно. И тут видно проблему.

У тебя сейчас формат 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 видит только текст и картинку теряет.

Что делать дальше (точно):

  1. Проверь, что в OpenWebUI connection к OpenClaw используется OpenAI-compatible /v1.
  2. Сделай контрольный прямой запрос в OpenClaw с image_url (curl).
#

Если так работает, значит проблема именно в конвертации OpenWebUI.
3. Если в OpenWebUI есть режим/провайдер Open Responses, попробуй его + включи в OpenClaw:

  • gateway.http.endpoints.responses.enabled: true
  1. В OpenClaw оставь включенным:
    • gateway.http.endpoints.chatCompletions.images.allowUrl: true (на случай URL-картинок).

Если хочешь, дам тебе готовый тестовый curl под твой openclaw/default, чтобы за 1 минуту подтвердить цепочку.

strange lotus
#

так я еще не делал никакхи настроек с openclaw с оммента как обратился к тебе

drowsy mangoBOT
#

Отлично, тогда делаем с нуля, это быстрее 👍

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.

strange lotus
#
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
drowsy mangoBOT
#

Да, уже очень близко, супер 👍

openclaw models list выглядит правильно:
local/custom-local1 как default и text+image есть.

Но у тебя в llama.cpp указан --alias "latest1", поэтому я бы для чистоты сделал одно из двух:

  1. либо в OpenClaw id: "latest1"
  2. либо в 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, лучше его сразу сменить.

strange lotus
#
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}}]}
drowsy mangoBOT
#

Идеально, теперь точно видно: 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.

strange lotus
#

а почему в 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:

Run: openclaw doctor --fix

drowsy mangoBOT
#

Да, причина простая: в конфиге у модели нет обязательного поля 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] из конфига, добьем сразу.

strange lotus
#
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)
drowsy mangoBOT
#

Да, это ожидаемо: пока конфиг невалидный, config set уже не может примениться.

Сейчас quickest fix:

  1. Запусти авто-ремонт:
openclaw doctor --fix
  1. Если не починит, правим руками:
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
}
  1. Потом:
openclaw status
openclaw tui
#

Если хочешь, скинь сюда кусок models.providers.local из файла, я сразу скажу точную строку, где сломано.

strange lotus
drowsy mangoBOT
#

Посмотрел. Проблема найдена: файл сломанный (смешаны два разных куска конфига + дубли models), из-за этого и валится name.

Главные ошибки в твоём 1.txt:

  • дублируется корневой models
  • вставлен кусок agents: { ... } прямо посреди JSON
  • у models.providers.local.models[0] нет name
  • путаница с provider id (custom-local1 vs local)

Сделай проще, с чистого листа.

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 ключи, обязательно их смени.

strange lotus
#

а наш api бьудет работать который настраивали раньше? давй просто оставим это соединение остальные удалим покажы полностью файл как должен правильно выглядеть

drowsy mangoBOT
#

Да, будет работать.
Оставляем только одно соединение (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-блоки можно удалить полностью.
И обязательно замени ключи/токены, которые уже светил.

strange lotus
drowsy mangoBOT
#

Почти, но ещё невалидно
В файле сейчас два корневых объекта:

  • сначала "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 },
      },
    },
  },