Перед выбором модели для Codex или Kilo Code проверьте в GET https://api.zenithmarket.dev/v1/models её ID и опубликованные метаданные endpoint. Это предварительная проверка каталога, а не подтверждение успешного вызова или работы функций агента. В шаблоне Codex указан Responses API; рецепт Kilo Code описывает отдельный Custom provider с OpenAI Compatible, отправляющий запросы к Chat Completions. Ниже приведены документированные настройки и сценарии будущей ручной проверки — редакция не заявляет о запуске клиентов или платном запросе.
Ниже — три раздельных документированных маршрута: Codex использует шаблон Zenith с Responses API, Kilo Code — отдельный Custom provider OpenAI Compatible с Chat Completions, а OpenCode — пакет @ai-sdk/openai и Responses API. ID модели берите из актуального каталога, а конфигурацию сверяйте с версией установленного клиента. Запуск клиентов, платный запрос и проверка агентских функций редакцией не выполнялись.
Что подготовить до настройки
Документация Zenith указывает Telegram-бот как ссылку для API-ключа: Telegram-бот Zenith. Она не раскрывает здесь процедуру выдачи, поэтому не приписывайте сервису конкретные экраны или шаги. Баланс API-ключа и действующие лимиты проверяйте в профиле ключа, каталоге, боте или документации сервиса — эти сведения относятся к Zenith, а не к учётным записям официальных поставщиков моделей. Условия оплаты и расчёта описаны в документах Zenith. Модель выбирайте только после чтения актуального каталога: его ID, доступность и тарифы динамичны.
Как получить актуальный ID модели
Документация Zenith предлагает получать каталог запросом GET https://api.zenithmarket.dev/v1/models. В отдельном наблюдении от этот запрос с одним авторизованным ключом вернул HTTP 200 и объект с массивом data. Ссылка на архивный файл относится к сохранённой карточке каталога от 27 октября 2026 года, а не к записи наблюдения 28 октября. Она подтверждает исторические поля этой карточки, но не текущую схему API, доступность модели или совместимость клиента. Приведённый ниже код останавливается при другой схеме.
import getpass
import json
import urllib.error
import urllib.request
url = "https://api.zenithmarket.dev/v1/models"
key = getpass.getpass("Zenith API key: ")
request = urllib.request.Request(url, headers={
"User-Agent": "Comrad404SourceReview/1.0",
"Authorization": "Bearer " + key,
})
try:
with urllib.request.urlopen(request, timeout=30) as response:
payload = json.load(response)
except (urllib.error.URLError, json.JSONDecodeError) as exc:
raise SystemExit(f"Не удалось прочитать каталог: {exc}")
if not isinstance(payload, dict) or not isinstance(payload.get("data"), list):
raise SystemExit("Схема отличается от наблюдавшейся; проверьте актуальную документацию")
for row in payload["data"]:
if not isinstance(row, dict) or not isinstance(row.get("id"), str):
continue
endpoints = row.get("supported_endpoint_types")
if isinstance(endpoints, list):
print(row["id"], endpoints)
else:
print(row["id"], "endpoint metadata absent; suitability unknown")
Используйте ID из ответа, полученного непосредственно перед настройкой. Поле supported_endpoint_types — только заявленная Zenith метаинформация и предварительный фильтр каталога: наличие responses или chat_completions не доказывает совместимость с конкретной версией Codex или Kilo и не подтверждает успешный вызов. Для Codex можно отобрать ID с заявленным responses, для Kilo — с заявленным chat_completions, но итог проверяется отдельным запросом соответствующего клиента по его фактическому маршруту. При отсутствии поля пригодность ID по этому ответу неизвестна.
Настройка Codex через Responses API
В опубликованном шаблоне Zenith для Codex заданы провайдер Zenith, Base URL и wire_api = "responses". Источник не указывает версию Codex, поэтому шаблон не подтверждает работу конкретной установленной версии. Сверьте расположение и формат файлов с документацией своей версии. Пример ~/.codex/config.toml:
model_provider = "codex_local_access"
model = "MODEL_ID_FROM_ZENITH_CATALOG"
[model_providers.codex_local_access]
name = "Zenith"
base_url = "https://api.zenithmarket.dev/v1"
requires_openai_auth = true
wire_api = "responses"
Опубликованный шаблон Zenith для ~/.codex/auth.json использует поле OPENAI_API_KEY; проверьте путь и формат по документации установленной версии Codex. Это поле и шаблон config.toml не подтверждают работу конкретной версии клиента. Передавайте ключ только API-домену Zenith — не сторонним доменам и не в исходный код, сборки, примеры или логи. Ограничьте доступ к локальному файлу средствами операционной системы. Base URL https://api.zenithmarket.dev/v1 относится к опубликованным OpenAI-совместимым рецептам и не является основанием передавать ключ другому сервису.
{
"OPENAI_API_KEY": "YOUR_ZENITH_API_KEY"
}
Порядок действий:
- Получите ключ по каналу, который указывает Zenith, и ознакомьтесь с актуальными условиями сервиса.
- Запросите
GET https://api.zenithmarket.dev/v1/modelsи выберите ID; наличие поля endpoint сопоставьте сresponses. - Сверьте формат
config.tomlи авторизацию с документацией установленной версии Codex; используйте примерauth.jsonтолько если версия его поддерживает. - Запустите настроенную версию Codex в обычном режиме ввода задачи, отправьте текст
Reply exactly: okи дождитесь финального текстового ответа в интерфейсе клиента. Ожидаемый ответ —ok; редакция этот сценарий не запускала.
Текстовый ответ ok проверяет только получение текста. Для tools критерием будущей проверки будет наблюдаемый вызов разрешённого инструмента и его результат; для streaming — поступление частей ответа до события завершения; для файлового цикла — ожидаемый diff и соответствующее ему итоговое содержимое тестового файла. Эти проверки требуют отдельного запуска и редакцией не выполнялись.
Настройка Kilo Code в VS Code
Zenith публикует отдельный рецепт Custom provider для Kilo Code; согласно документации, он не изменяет встроенного провайдера OpenAI и его учётные данные. Это опубликованные значения, а не подтверждение интерфейса конкретной версии Kilo Code:
| Поле | Значение в опубликованном рецепте Zenith |
|---|---|
| Provider ID | zenith |
| Display name | Zenith |
| Provider API | OpenAI Compatible |
| Base URL | https://api.zenithmarket.dev/v1 |
| API key | YOUR_ZENITH_API_KEY |
Перед настройкой сверьте эти названия и расположение полей с документацией установленной версии Kilo Code. Источник Zenith подтверждает опубликованные значения, но не запуск интерфейса конкретной версии.
В рецепте Zenith Base URL указан без /responses и /chat/completions; документация указывает, что Kilo направляет запрос Custom provider к /v1/chat/completions. При ошибке выясните по журналу или телу ответа, какой клиент отправил запрос и какой путь был запрошен. Сверьте фактический путь с рецептом соответствующего клиента и проверьте, что ID модели присутствует в актуальном каталоге. Не переносите сюда Codex-маршрут /v1/responses. Если журнал и тело ответа не позволяют определить маршрут или причину, она остаётся неизвестной; одна повторная настройка не является установленным исправлением.
Контекст и предельный вывод задайте по подтверждённым ограничениям выбранной модели. Ключ не храните в проектном файле. Переменная окружения может использоваться как временное место хранения секрета, но для Kilo ключ нужно внести в поле Custom provider актуального интерфейса: автоматическая передача переменной в это поле не подтверждена, и перезапуск VS Code сам по себе её не выполняет.
Проверка новой задачи Kilo
- Сверьте названия и расположение полей с документацией установленной версии Kilo Code и настройте отдельный Custom provider по таблице.
- Выберите ID из актуального
GET /v1/modelsи сохраните провайдера. - Начните новую задачу Kilo Code, введите в поле задачи:
Reply exactly: ok. Do not read or modify files. Do not call tools., затем отправьте её. - Проверьте финальный текст задачи в интерфейсе Kilo. Ожидаемый ответ —
ok; это документальный сценарий, не выполненный редакцией, и он не проверяет tools, streaming или файловый цикл.
Что подтверждено, а что нет
- Codex: опубликованный шаблон Zenith задаёт
wire_api = "responses"и полеOPENAI_API_KEY; применимость к конкретной версии Codex проверяйте по её документации. - Kilo Code: рецепт Zenith задаёт отдельный Custom provider OpenAI Compatible с Base URL
https://api.zenithmarket.dev/v1; документация Zenith указывает маршрут/v1/chat/completions. Это опубликованные поля, а не результат запуска конкретной версии Kilo. - OpenCode: это отдельный рецепт, не проверка Codex или Kilo. Документация Zenith указывает
@ai-sdk/openaiдля/v1/responses; документация OpenCode различает его с@ai-sdk/openai-compatible, который выбирает Chat Completions. Переменная окружения задаётся до запуска процесса OpenCode: в POSIX-shell —export ZENITH_API_KEY='YOUR_ZENITH_API_KEY', в PowerShell —$env:ZENITH_API_KEY='YOUR_ZENITH_API_KEY'. Пример ниже не запускался; проверить получение переменной можно только отдельным запуском и командой OpenCode/models.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"zenith": {
"npm": "@ai-sdk/openai",
"name": "Zenith",
"options": {
"baseURL": "https://api.zenithmarket.dev/v1",
"apiKey": "{env:ZENITH_API_KEY}"
},
"models": {
"MODEL_ID_FROM_ZENITH_CATALOG": { "name": "Zenith model" }
}
}
},
"model": "zenith/MODEL_ID_FROM_ZENITH_CATALOG",
"small_model": "zenith/MODEL_ID_FROM_ZENITH_CATALOG"
}
Замените placeholder на ID из свежего каталога. Перед запуском OpenCode задайте ZENITH_API_KEY в оболочке, из которой запускается процесс: export ZENITH_API_KEY='YOUR_ZENITH_API_KEY' в POSIX-shell или $env:ZENITH_API_KEY='YOUR_ZENITH_API_KEY' в PowerShell. Конфигурация использует подстановку {env:ZENITH_API_KEY}, но этот пример не запускался. После запуска проверяемым критерием обнаружения конфигурации служит появление провайдера и модели в команде OpenCode /models; это ещё не подтверждение inference, tools, streaming или файлового цикла. Наблюдение GET /v1/models подтверждает метаданные одного ключа, но не соответствие backend.
Как считать расходы и проверять списание
Zenith указывает, что списание зависит от выбранной модели, токенов, кэша и других учитываемых параметров; актуальные цены и историю расходов проверяйте в каталоге или профиле ключа. Ниже — только арифметика по сохранённой архивной записи для gpt-6-luna от 27.10.2026: это не текущая цена, не фактическое списание и не подтверждение происхождения модели у upstream-поставщика.
В архивной записи каталога для gpt-6-luna от 27.10.2026 указаны поля inputCostMicrousdPerMillion = 16000 и outputCostMicrousdPerMillion = 80000. Их пересчёт даёт 0,016 и 0,08 USD за миллион токенов соответственно; это не непосредственно опубликованные USD-ставки, не текущая цена и не фактическое списание. При заданных 4 000 входных и 800 выходных токенах: 4000 × 0.016 / 1000000 + 800 × 0.08 / 1000000 = 0.000064 + 0.000064 = 0.000128 USD. Единица исходных полей — microUSD за миллион токенов; 1 USD = 1000000 microUSD. Расчёт выполнен только по архивным метаданным, без платного вызова. Стоимость агентного цикла из него не выводится: цикл может включать несколько запросов, кэш и другие учитываемые параметры.
Разбор типовых ошибок
| Симптом | Проверяемый признак и действие |
|---|---|
| Ответ 4xx, включая 404 или 401 | Сначала прочитайте тело ответа и запись журнала: документация Zenith называет тело ответа источником исправляемой причины. Для 404 сопоставьте указанный в запросе путь с клиентом: Base URL Kilo должен быть https://api.zenithmarket.dev/v1 без добавленного пути, а Codex должен использовать wire_api = "responses". Для 401 проверьте, что ключ передан в предусмотренное поле или файл выбранной версии клиента и не содержит лишних символов. Затем повторите только после исправления обнаруженного признака; по одному статусу причину установить нельзя. |
| В теле ответа указана неизвестная модель | Снова запросите актуальный GET /v1/models и выберите возвращённый ID; фиксированный ID из старого снимка не используйте. |
| Kilo не видит ключ | Проверьте поле API key в Custom provider и инструкции вашей версии; автоматическая передача переменной окружения в это поле не подтверждена. |
| В теле ответа указана ошибка баланса или доступа | Проверьте сведения профиля ключа, лимиты и условия Zenith. Если тело ответа не различает причину, оставьте её неизвестной и не повторяйте запрос вслепую. |
| Временная ошибка сервиса | Зафиксируйте статус, тело и время запроса; документация рекомендует повторить позже, а не трактовать такой ответ как подтверждение несовместимости клиента. |
Когда оставить официальный маршрут
Если проект зависит от tools, streaming или работы с файлами, проверьте их в безопасном тестовом проекте и конкретной версии клиента. Критерии: для tools — видимый вызов разрешённого инструмента и его результат; для streaming — части ответа до события завершения; для файлового цикла — diff и итоговое содержимое, совпадающие с ожидаемым изменением. Текстовый ответ или raw HTTP сами по себе этих функций не подтверждают. Схемы JSON Schema и протоколов разобраны в отдельной инструкции о совместимости API.




