Skip to content

Подключение coding-агентов ​

Api Dev предоставляет OpenAI-совместимый API по адресу https://api.aihere.ru/v1 — через него coding-агенты (opencode, Cursor, Continue и другие клиенты, понимающие формат OpenAI Chat Completions) работают с чат-моделями AiHere напрямую, с обычным API-ключом.

В отличие от упрощённого API чатов (/chats/*), здесь полная схема OpenAI: tools/tool_choice, tool-сообщения, tool_calls ассистента, content строкой или массивом частей, стриминг SSE с OpenAI-чанками. Ошибки возвращаются в формате OpenAI ({"error": {"message", "type", "code"}}).

Параметры подключения ​

ПараметрЗначение
Базовый URL (baseURL)https://api.aihere.ru/v1
АвторизацияAuthorization: Bearer <API-ключ> — обычный ключ из кабинета разработчика
Chat CompletionsPOST /v1/chat/completions (лимит 120 запросов/мин)
Список моделейGET /v1/models (лимит 60 запросов/мин)

Все конфиги ниже проверены живыми запросами к продовому https://api.aihere.ru/v1 (23.10.2026): GET /v1/models отвечает 200 списком моделей, POST /v1/chat/completions — стандартным объектом chat.completion, стриминг отдаёт SSE-чанки с завершающим data: [DONE], запрос с tools возвращает finish_reason: "tool_calls".

opencode ​

Добавьте провайдера в opencode.json (глобальный ~/.config/opencode/opencode.json или в корне проекта). Используется npm-пакет @ai-sdk/openai-compatible:

json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "aihere": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "AiHere",
      "options": {
        "baseURL": "https://api.aihere.ru/v1",
        "apiKey": "{env:AIHERE_API_KEY}"
      },
      "models": {
        "claude-fable-5": { "name": "Claude Fable 5" },
        "claude-opus-5-5": { "name": "Claude Opus 5.5" },
        "claude-sonnet-5-5": { "name": "Claude Sonnet 5.5" },
        "claude-haiku-5-5": { "name": "Claude Haiku 5.5" },
        "gemini-3-8-flash": { "name": "Gemini 3.8 Flash" },
        "gpt-6-luna": {
          "name": "GPT-6 Luna",
          "options": { "reasoningEffort": "none" }
        },
        "gpt-6-1-sol": { "name": "GPT-6.1 Sol" },
        "gpt-6-astra": { "name": "GPT-6 Astra" },
        "kimi-k3": { "name": "Kimi K3" },
        "deepseek-v4-1-flash": { "name": "DeepSeek v4.1 Flash" },
        "grok-4-7": { "name": "Grok 4.7" }
      }
    }
  },
  "model": "aihere/claude-sonnet-5-5"
}

Ключ положите в переменную окружения AIHERE_API_KEY (или впишите напрямую в apiKey). После этого модель выбирается как aihere/<id-модели>.

В конфиге — все актуальные модели Api Dev; любая из них работает с инструментами без дополнительных действий (особенности отдельных моделей сервер закрывает сам, см. раздел Инструменты и reasoning_effort ниже). Конфиг проверен живым прогоном opencode 1.19 (чтение файла через tool call, 23.10.2026).

Cursor ​

Cursor умеет подменять базовый URL OpenAI — этого достаточно, файл конфигурации не нужен:

  1. Settings → Models → OpenAI API Key: вставьте API-ключ AiHere.
  2. Включите Override OpenAI Base URL и укажите https://api.aihere.ru/v1 (именно с /v1 на конце).
  3. Нажмите Verify — Cursor проверит ключ запросом GET /v1/models, наш API отвечает на него списком моделей в формате OpenAI.
  4. В списке моделей нажмите Add model и добавьте ID вручную, например claude-sonnet-5-5, gemini-3-8-flash, gpt-6-luna (Cursor не подхватывает кастомные модели из /models автоматически — их надо добавить по одной и включить переключателем).
  5. Выберите добавленную модель в чате (режим Ask/Agent).

Ограничения: переопределение действует только на запросы chat completions — Tab-автодополнение и embeddings в Cursor продолжают ходить на серверы Cursor и с AiHere не работают.

Continue ​

Continue (плагин для VS Code и JetBrains) настраивается через config.yaml в ~/.continue/ (для старых версий — config.json, поля те же). Провайдер openai + apiBase:

yaml
name: AiHere
version: 0.0.1
schema: v1
models:
  - name: Claude Sonnet 5.5 (AiHere)
    provider: openai
    model: claude-sonnet-5-5
    apiBase: https://api.aihere.ru/v1
    apiKey: YOUR_AIHERE_API_KEY
    roles: [chat, edit, apply]
  - name: Gemini 3.8 Flash (AiHere)
    provider: openai
    model: gemini-3-8-flash
    apiBase: https://api.aihere.ru/v1
    apiKey: YOUR_AIHERE_API_KEY
    roles: [chat, edit, apply]

Вместо ключа в открытом виде можно использовать переменную: apiKey: ${{ secrets.AIHERE_API_KEY }} (значение задаётся в секретах Continue).

Ограничения: не назначайте моделям роли autocomplete и embed — для них Continue дёргает эндпоинты /v1/completions (FIM) и /v1/embeddings, которых в Api Dev нет (только /v1/chat/completions). Роли chat, edit и apply работают через chat completions и проверены, включая стриминг.

Claude Code ​

Claude Code нативно говорит на Anthropic Messages API, а наш /v1 — OpenAI-диалект, поэтому ANTHROPIC_BASE_URL=https://api.aihere.ru/v1 напрямую не сработает. Нужен локальный адаптер-переводчик Anthropic ↔ OpenAI, например claude-code-router:

json
{
  "Providers": [
    {
      "name": "aihere",
      "api_base_url": "https://api.aihere.ru/v1/chat/completions",
      "api_key": "$AIHERE_API_KEY",
      "models": ["claude-sonnet-5-5", "gemini-3-8-flash"]
    }
  ],
  "Router": {
    "default": "aihere,claude-sonnet-5-5"
  }
}

Конфиг кладётся в ~/.claude-code-router/config.json, запуск — ccr code вместо claude. Адаптер сам конвертирует запросы Claude Code в OpenAI chat completions (системный промпт, tools, стриминг) и ответы обратно; с точки зрения Api Dev это те же запросы, что проверены выше.

Инструменты и reasoning_effort ​

Coding-агенты работают через инструменты (tools/function calling): чтение файлов, правки, запуск команд. Поэтому для coding-агента критично, чтобы модель принимала запросы с tools и умела отвечать finish_reason: "tool_calls".

У провайдера (CometAPI) для части GPT-моделей есть ограничение: запрос с инструментами принимается, только если reasoning_effort равен "none". Иначе — ошибка 502 provider_rejected с текстом «Function tools with reasoning_effort are not supported…».

Как это закрыто с нашей стороны (23.10.2026):

  1. Сервер подставляет reasoning_effort: "none" автоматически, если в запросе есть tools и клиент не передал reasoning_effort сам. Это работает для любого клиента — даже для тех, кто не умеет слать кастомные параметры (например, Cursor). Явно переданное клиентом значение сервер не перетирает.
  2. В конфиге opencode выше то же самое задано явно через options.reasoningEffort на модель — так поведение зафиксировано и на стороне клиента.

Ограничения по моделям (проверено живыми запросами 23.10.2026):

МодельИнструменты (tools)
claude-*, gemini-*, kimi-k3, deepseek-v4-1-flash, grok-4-7работают без условий
gpt-6-luna, gpt-5-6-terraработают: сервер сам подставляет reasoning_effort: "none"
gpt-6-astra, gpt-6-1-solработают: сервер прозрачно переводит запрос в Responses API провайдера (в chat completions провайдер не принимает reasoning_effort: "none" у этих моделей, а с другими значениями отклоняет tools). Для клиента ничего не меняется — запрос и ответ остаются в формате OpenAI Chat Completions, включая стриминг

Ещё одна особенность семейства GPT-6: параметр max_tokens эти модели не принимают — сервер автоматически заменяет его на max_completion_tokens (или max_output_tokens для Responses API) для gpt-6-luna, gpt-6-astra и gpt-6-1-sol, так что со стороны клиента ничего делать не нужно.

Выбор модели для coding-агента ​

Для работы с инструментами из коробки берите claude-sonnet-5-5 (качество) или gemini-3-8-flash (скорость) — они проверены живым прогоном tool calling. Остальные модели, включая gpt-6-luna, gpt-6-astra и gpt-6-1-sol, тоже работают с инструментами — особенности провайдера сервер закрывает автоматически (см. раздел выше).

Модели ​

ID моделей — те же, что возвращает GET /chats/models; актуальный список в OpenAI-формате отдаёт GET /v1/models:

IDСемействоКонтекст
gemini-3-8-flashGoogle Gemini1M токенов
gemini-3-8-flash-openaiGoogle Gemini1M токенов
claude-haiku-5-5Anthropic Claude200K токенов
claude-sonnet-5-5Anthropic Claude1M токенов
claude-opus-5-5Anthropic Claude1M токенов
claude-fable-5Anthropic Claude1M токенов
gpt-6-lunaOpenAI GPT1.1M токенов
gpt-5-6-terraOpenAI GPT1.1M токенов
gpt-6-1-solOpenAI GPT1.1M токенов
gpt-6-astraOpenAI GPT1.1M токенов
kimi-k3Moonshot Kimi262K токенов
deepseek-v4-1-flashDeepSeek128K токенов
grok-4-7xAI Grok256K токенов

Цены — в разделе Цены (рубли за 1 млн токенов, отдельно входные и выходные).

Проверка подключения ​

bash
curl -X POST "https://api.aihere.ru/v1/chat/completions" \
  -H "Authorization: Bearer $AIHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5-5",
    "messages": [{"role": "user", "content": "Привет! Ответь одним словом."}],
    "max_tokens": 50
  }'

Ответ — стандартный объект OpenAI chat.completion (choices[0].message.content, usage). При "stream": true отдаётся SSE-поток OpenAI-чанков, завершающийся data: [DONE]; чанк с итоговым usage приходит, если запросить "stream_options": {"include_usage": true}.

Биллинг и ошибки ​

Биллинг общий с API чатов: при запросе списывается оценка (вход по объёму сообщений, выход по max_tokens/max_completion_tokens), после ответа — автоматический пересчёт по фактическому usage провайдера, при ошибке провайдера до первого токена оценка возвращается целиком. При недостатке средств — 402.

Ошибки — в формате OpenAI:

json
{"error": {"message": "Unknown model: gpt-4o. Список: GET /v1/models", "type": "invalid_request_error", "code": "model_not_found"}}

Типовые коды: 400 model_not_found (неизвестная модель), 402 (недостаточно средств), 429 (превышен лимит запросов), 502 provider_rejected / 503 provider_unavailable (сбой у провайдера — списанное возвращается).