Провайдеры и шлюзы
Все провайдеры, шлюзы и локальные среды выполнения, которые поддерживает Cusp, как он их определяет и как подстраивается под каждое семейство моделей.
Cusp общается с моделями по четырём протоколам. Почти любой провайдер, шлюз или локальный сервер поддерживает хотя бы один из них — поэтому одна среда выполнения охватывает так много моделей.
| Протокол | Конечная точка | Для чего |
|---|---|---|
| Anthropic Messages | POST {root}/v1/messages | Anthropic, а также Anthropic-совместимые конечные точки Z.ai, Moonshot, MiniMax, DeepSeek, Qwen, OpenRouter, Vercel, LiteLLM, Ollama и других |
| OpenAI Responses | POST {base}/responses | OpenAI, Azure OpenAI, xAI и шлюзы, которые его поддерживают |
| OpenAI Chat Completions | POST {base}/chat/completions | Всё, что совместимо с OpenAI: Groq, Together, Fireworks, Mistral, vLLM, LM Studio, … |
| Google Gemini | …/models/{model}:streamGenerateContent | Google AI Studio и Vertex AI |
Если провайдер поддерживает несколько протоколов, Cusp выбирает тот, что сохраняет больше всего: Responses для OpenAI и xAI, Messages для Anthropic, Z.ai, Moonshot и MiniMax, generateContent для Gemini.
Провайдеры
| Провайдер | Протоколы | Префикс ключа | Переменная окружения | Примечания |
|---|---|---|---|---|
| Anthropic | Messages | sk-ant- | ANTHROPIC_API_KEY | Полная поддержка кеширования промптов, подсчёта токенов и документов |
| OpenAI | Responses, Chat | sk-proj-, sk-svcacct- | OPENAI_API_KEY | Нативный инструмент apply_patch и воспроизведение зашифрованных рассуждений в Responses |
| Google Gemini | Gemini, Chat | AIza | GEMINI_API_KEY, GOOGLE_API_KEY | Подписи рассуждений (thought signatures) передаются туда и обратно |
| xAI | Responses, Chat | xai- | XAI_API_KEY | Заголовок с id разговора для привязки к кешу |
| DeepSeek | Chat, Messages | — | DEEPSEEK_API_KEY | Содержимое рассуждений воспроизводится, как требует API |
| Z.ai (GLM) | Messages, Chat | — | ZAI_API_KEY, ZHIPU_API_KEY | Конечная точка тарифа Coding Plan; api.z.ai и open.bigmodel.cn |
| Moonshot (Kimi) | Messages, Chat | — | MOONSHOT_API_KEY, KIMI_API_KEY | Хосты .ai и .cn |
| Alibaba Qwen (DashScope) | Chat, Messages | sk-sp- | DASHSCOPE_API_KEY | Международный, американский и китайский регионы |
| MiniMax | Messages, Chat | — | MINIMAX_API_KEY | Messages — рекомендуемый MiniMax путь |
| Xiaomi MiMo | Chat, Messages | tp- | MIMO_API_KEY | |
| Mistral | Chat | — | MISTRAL_API_KEY | Id вызовов инструментов приводятся к формату Mistral |
| Groq | Chat | gsk_ | GROQ_API_KEY | |
| Cerebras | Chat | csk- | CEREBRAS_API_KEY | |
| Together AI | Chat | — | TOGETHER_API_KEY | |
| Fireworks AI | Chat, Messages | fw_ | FIREWORKS_API_KEY | |
| DeepInfra | Chat, Messages | — | DEEPINFRA_API_KEY | |
| Novita AI | Chat, Messages | — | NOVITA_API_KEY | |
| SiliconFlow | Chat, Messages | — | SILICONFLOW_API_KEY |
Прочерк в столбце префикса означает, что формат ключа ничем не выделяется. Cusp всё равно определит провайдера с помощью проверочных запросов или по базовому URL.
Облачные платформы
| Платформа | Как подключить | Статус |
|---|---|---|
| Azure OpenAI | Укажите URL своего ресурса (https://{resource}.openai.azure.com/openai/v1/) и API-ключ. Id модели — это имя вашего развёртывания | Поддерживается через протокол Responses |
| Amazon Bedrock | Используйте OpenAI-совместимую или Anthropic-совместимую конечную точку Bedrock с API-ключом Bedrock (bearer-токен) | Превью. Подпись SigV4 с учётными данными AWS — скоро |
| Google Vertex AI | Используйте конечную точку Vertex с токеном доступа или экспресс-режим с API-ключом | Превью. Application Default Credentials — скоро |
Cusp распознаёт их по имени хоста (*.openai.azure.com, bedrock…, aiplatform.googleapis.com) и автоматически учитывает особенности запросов каждой платформы.
Шлюзы
Шлюз даёт доступ ко многим моделям по одному ключу. Cusp считает каждый шлюз провайдером и читает его список моделей, так что модели выбираются по их идентификатору в шлюзе.
| Шлюз | Протоколы | Префикс ключа | Переменная окружения | Примечания |
|---|---|---|---|---|
| OpenRouter | Chat, Messages, Responses | sk-or- | OPENROUTER_API_KEY | Id сессии для закреплённой маршрутизации; воспроизведение деталей рассуждений; кеширование промптов для моделей Claude |
| Vercel AI Gateway | Chat, Messages, Responses | vck_ | AI_GATEWAY_API_KEY | Кеширование промптов для моделей Claude |
| LiteLLM proxy | Chat, Messages | — | — | Разворачивается самостоятельно; по умолчанию http://localhost:4000 |
Другие OpenAI-совместимые шлюзы (Portkey, Cloudflare AI Gateway, Helicone и т. д.) работают как пользовательская конечная точка: укажите Cusp базовый URL и дополнительные заголовки, которые нужны шлюзу.
Локальные модели
| Среда выполнения | URL по умолчанию | Протоколы |
|---|---|---|
| Ollama | http://localhost:11434 | Chat, Messages |
| LM Studio | http://localhost:1234 | Chat, Messages |
| vLLM | http://localhost:8000 | Chat |
| Сервер llama.cpp, SGLang | URL вашего сервера | Chat |
Для локальных сред выполнения ключ не нужен. Из локальных моделей Cusp выбирает самую большую загруженную модель, которая поддерживает вызов инструментов и имеет контекстное окно не меньше 32k.
Небольшим локальным моделям тяжело даются длинные агентные сессии. Cusp даёт им наиболее подходящий формат правок (см. ниже), но повторных попыток будет больше, чем с передовой моделью. Задайте серверу достаточную длину контекста: многие среды выполнения по умолчанию используют 4k или 8k токенов, а для агента этого мало.
Автоопределение
Когда вы вставляете ключ — с базовым URL или без него, — Cusp выполняет короткую последовательность шагов:
- Подсказки. Префикс ключа (
sk-ant-,sk-or-,AIza, …) и хост базового URL указывают на провайдера. - Проверки. Cusp параллельно отправляет дешёвые запросы без расхода токенов (например, получение списка моделей) по каждому возможному протоколу с тайм-аутом 6 секунд на проверку.
- Отпечатки. Даже ответ
401кое-что сообщает: тела ошибок и заголовки выдают провайдера за неизвестным URL. - Модели. Список моделей берётся из конечной точки и дополняется данными из встроенного каталога Cusp (контекстное окно, цены, возможности) и публичных источников.
- Выбор. Cusp выбирает основную модель (с наивысшей агентной оценкой среди моделей с вызовом инструментов) и небольшую модель для вспомогательной работы: заголовков сессий, классификатора режима auto, сжатия контекста и извлечения содержимого веб-страниц.
Любой результат можно переопределить. Автоопределение лишь заполняет конфигурацию; ничего не скрыто.
Адаптеры для семейств моделей
Протокол — это только половина дела. Модели разных лабораторий обучены на разных соглашениях об инструментах и лучше всего работают, когда harness говорит на их диалекте. Cusp хранит профиль для каждого семейства моделей и подстраивается под него.
Формат правок
| Семейство | Инструмент правки | Почему |
|---|---|---|
| Claude, Gemini | Edit и MultiEdit (str_replace: точный старый текст → новый текст) | Формат, на котором обучены эти модели |
| GPT | ApplyPatch, отправляется как apply_patch (формат патчей V4A) | Модели OpenAI обучены на нём; в OpenAI и Azure он отправляется как нативный инструмент |
| Слабые или локальные модели | EditLines со строками, привязанными по хешу | Каждая строка в выводе Read несёт короткий хеш содержимого. Модель правит по привязке (12:a3), а не воспроизводит точный текст, — это устраняет самую частую причину сбоев у небольших моделей |
Write доступен всем семействам. Нечёткое сопоставление для Edit проходит по лестнице уровней (точное совпадение, нормализованные пробелы, обрезка, повторный отступ, привязка к блоку) и сообщает, какой уровень сработал, поэтому почти-совпадение не приведёт к незаметной правке не того места.
Передача рассуждений туда и обратно
Модели с рассуждениями возвращают состояние, которое нужно отправить обратно на следующем ходе: подписи размышлений Anthropic, зашифрованные рассуждения OpenAI, подписи рассуждений Gemini и reasoning_content от DeepSeek, Kimi и GLM. Если его отбросить, у одних провайдеров будут ошибки, а у других — незаметное падение качества. Cusp хранит это состояние непрозрачно вместе с каждым сообщением и воспроизводит его байт в байт для той же модели. Если вы переключаете модель посреди сессии, он отправляет безопасную проекцию и отмечает смену.
Другие адаптации
- Имена и описания инструментов. Модели GPT видят
update_planвместоTodoWrite. Хуки и правила разрешений всегда видят каноническое имя. - Строгие схемы. В OpenAI схемы инструментов отправляются в строгом режиме: необязательные поля становятся допускающими null и затем отображаются обратно.
- Сломанные вызовы инструментов. Открытые модели иногда выдают некорректный JSON или вызовы инструментов, встроенные в текст (разметка Hermes, Qwen, GLM, MiniMax и Kimi). Прежде чем сдаться, Cusp исправляет JSON, приводит типы в соответствие со схемой и извлекает вызовы из текста.
- Параллельные вызовы. Отключаются для сред выполнения, которые их не поддерживают.
- Системные промпты. Динамический контекст помещается туда, где провайдер обрабатывает его лучше всего: системное сообщение посреди разговора для Claude, элемент
developerдля OpenAI, системное напоминание в остальных случаях.
Кеширование и стоимость
Cusp сохраняет системный промпт и список инструментов побайтово неизменными между ходами, чтобы провайдеры могли их кешировать. Он задаёт ключ кеша, который понимает каждый провайдер (prompt_cache_key в OpenAI, id сессии в OpenRouter, заголовок разговора в xAI), и автоматически расставляет точки кеширования Anthropic. Стоимость считается за каждый ход по ценам модели, чтение и запись кеша учитываются отдельно. /cost в CLI показывает накопленную сумму.
Повторные попытки и резервные модели
Временные ошибки (лимиты запросов, перегруженные серверы, оборванные потоки) повторяются с нарастающей задержкой, а интерфейс сообщает, что случилось: «Rate limited by Anthropic — retrying in 8 s.» Если запрос не прошёл, потому что конечная точка отвергла параметр, Cusp учится на ошибке и повторяет запрос без него. Можно настроить резервную модель (fallbackModel в настройках); Cusp остаётся на одном маршруте, пока тот работает, чтобы кеш оставался «тёплым».
Переменные окружения
CLI и демон берут ключи из этих переменных:
ANTHROPIC_API_KEY OPENAI_API_KEY GEMINI_API_KEY GOOGLE_API_KEY
OPENROUTER_API_KEY AI_GATEWAY_API_KEY XAI_API_KEY DEEPSEEK_API_KEY
ZAI_API_KEY ZHIPU_API_KEY MOONSHOT_API_KEY KIMI_API_KEY
MINIMAX_API_KEY DASHSCOPE_API_KEY MIMO_API_KEY MISTRAL_API_KEY
GROQ_API_KEY CEREBRAS_API_KEY TOGETHER_API_KEY FIREWORKS_API_KEY
DEEPINFRA_API_KEY NOVITA_API_KEY SILICONFLOW_API_KEYВ десктопном приложении вставленные ключи вместо этого хранятся в системной связке ключей.
Как устроен Cusp
Одна модель за всеми функциями — определения превращаются в запуски, запуски выполняются в определённом месте и начинаются по триггеру, а всё, что требует вашего участия, попадает во Входящие.
Модели и уровень рассуждений
Как Cusp выбирает модель, как переключать модели и как уровень рассуждений переводится в параметры каждого провайдера.