Диагностика · opencode

opencode AI_APICallError — причины и решения

Сбои провайдера opencode показывает как AI_APICallError из Vercel AI SDK. Как прочитать завёрнутый код статуса и починить baseURL, ключ или модель под ним.

Что вы видите

AI_APICallError

Почему возникает

  • AI_APICallError — это обёртка, а не диагноз: AI SDK бросает её на любой неуспешный HTTP-ответ, а настоящая причина — завёрнутые статус и тело.
  • 401 внутри — неверна опция apiKey провайдера, либо плейсхолдер {env:...} называет незаданную переменную.
  • 404 внутри — baseURL не подходит протоколу провайдера: пропущенный /v1, удвоенный /v1/v1 или идентификатор модели, который эндпоинт не обслуживает.
  • 429 или 529 внутри — пропускная способность или мощности апстрима; в вашей конфигурации ошибки нет.

Что делать

  • Сначала прочитайте поля statusCode и responseBody у ошибки — в них настоящий ответ провайдера.
  • Проверьте блок провайдера: baseURL точный, apiKey резолвится из переменной окружения, существующей в оболочке, запустившей opencode.
  • Перезапускайте opencode после любого изменения opencode.json — конфигурация читается на старте.

Блок провайдера для этого шлюза

{
  "provider": {
    "apitoken": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "apiToken.sale",
      "options": {
        "baseURL": "https://openai.api.apitoken.sale/v1",
        "apiKey": "{env:APITOKEN_API_KEY}"
      }
    }
  }
}

Похожие запросы

  • opencode AI_APICallError
  • opencode api call error

Вопросы и ответы

AI_APICallError — это баг opencode?+
Нет — это AI SDK сообщает, что провайдер вернул неуспешный ответ. Завёрнутый код статуса называет настоящую проблему.
Откуда opencode читает мой API-ключ?+
Из options.apiKey провайдера. С плейсхолдером {env:NAME} переменная должна существовать в окружении, из которого запущен opencode.
Я поправил opencode.json, и ничего не изменилось — почему?+
opencode читает конфигурацию на старте. Перезапускайте его после каждого изменения.

Пропустите сломанную настройку

apiToken.sale отдаёт стандартный Anthropic API — те же модели, те же SDK, один предоплаченный баланс. Направьте base URL вашего инструмента на него, и конфигурация с этой страницы заработает как написано.