Appearance
Подключение 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 Completions | POST /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 — этого достаточно, файл конфигурации не нужен:
- Settings → Models → OpenAI API Key: вставьте API-ключ AiHere.
- Включите Override OpenAI Base URL и укажите
https://api.aihere.ru/v1(именно с/v1на конце). - Нажмите Verify — Cursor проверит ключ запросом
GET /v1/models, наш API отвечает на него списком моделей в формате OpenAI. - В списке моделей нажмите Add model и добавьте ID вручную, например
claude-sonnet-5-5,gemini-3-8-flash,gpt-6-luna(Cursor не подхватывает кастомные модели из/modelsавтоматически — их надо добавить по одной и включить переключателем). - Выберите добавленную модель в чате (режим 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):
- Сервер подставляет
reasoning_effort: "none"автоматически, если в запросе естьtoolsи клиент не передалreasoning_effortсам. Это работает для любого клиента — даже для тех, кто не умеет слать кастомные параметры (например, Cursor). Явно переданное клиентом значение сервер не перетирает. - В конфиге 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-flash | Google Gemini | 1M токенов |
gemini-3-8-flash-openai | Google Gemini | 1M токенов |
claude-haiku-5-5 | Anthropic Claude | 200K токенов |
claude-sonnet-5-5 | Anthropic Claude | 1M токенов |
claude-opus-5-5 | Anthropic Claude | 1M токенов |
claude-fable-5 | Anthropic Claude | 1M токенов |
gpt-6-luna | OpenAI GPT | 1.1M токенов |
gpt-5-6-terra | OpenAI GPT | 1.1M токенов |
gpt-6-1-sol | OpenAI GPT | 1.1M токенов |
gpt-6-astra | OpenAI GPT | 1.1M токенов |
kimi-k3 | Moonshot Kimi | 262K токенов |
deepseek-v4-1-flash | DeepSeek | 128K токенов |
grok-4-7 | xAI Grok | 256K токенов |
Цены — в разделе Цены (рубли за 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 (сбой у провайдера — списанное возвращается).
