Провайдеры и шлюзы

Все провайдеры, шлюзы и локальные среды выполнения, которые поддерживает Cusp, как он их определяет и как подстраивается под каждое семейство моделей.

Cusp общается с моделями по четырём протоколам. Почти любой провайдер, шлюз или локальный сервер поддерживает хотя бы один из них — поэтому одна среда выполнения охватывает так много моделей.

ПротоколКонечная точкаДля чего
Anthropic MessagesPOST {root}/v1/messagesAnthropic, а также Anthropic-совместимые конечные точки Z.ai, Moonshot, MiniMax, DeepSeek, Qwen, OpenRouter, Vercel, LiteLLM, Ollama и других
OpenAI ResponsesPOST {base}/responsesOpenAI, Azure OpenAI, xAI и шлюзы, которые его поддерживают
OpenAI Chat CompletionsPOST {base}/chat/completionsВсё, что совместимо с OpenAI: Groq, Together, Fireworks, Mistral, vLLM, LM Studio, …
Google Gemini…/models/{model}:streamGenerateContentGoogle AI Studio и Vertex AI

Если провайдер поддерживает несколько протоколов, Cusp выбирает тот, что сохраняет больше всего: Responses для OpenAI и xAI, Messages для Anthropic, Z.ai, Moonshot и MiniMax, generateContent для Gemini.

Провайдеры

ПровайдерПротоколыПрефикс ключаПеременная окруженияПримечания
AnthropicMessagessk-ant-ANTHROPIC_API_KEYПолная поддержка кеширования промптов, подсчёта токенов и документов
OpenAIResponses, Chatsk-proj-, sk-svcacct-OPENAI_API_KEYНативный инструмент apply_patch и воспроизведение зашифрованных рассуждений в Responses
Google GeminiGemini, ChatAIzaGEMINI_API_KEY, GOOGLE_API_KEYПодписи рассуждений (thought signatures) передаются туда и обратно
xAIResponses, Chatxai-XAI_API_KEYЗаголовок с id разговора для привязки к кешу
DeepSeekChat, 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, Messagessk-sp-DASHSCOPE_API_KEYМеждународный, американский и китайский регионы
MiniMaxMessages, Chat—MINIMAX_API_KEYMessages — рекомендуемый MiniMax путь
Xiaomi MiMoChat, Messagestp-MIMO_API_KEY
MistralChat—MISTRAL_API_KEYId вызовов инструментов приводятся к формату Mistral
GroqChatgsk_GROQ_API_KEY
CerebrasChatcsk-CEREBRAS_API_KEY
Together AIChat—TOGETHER_API_KEY
Fireworks AIChat, Messagesfw_FIREWORKS_API_KEY
DeepInfraChat, Messages—DEEPINFRA_API_KEY
Novita AIChat, Messages—NOVITA_API_KEY
SiliconFlowChat, 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 считает каждый шлюз провайдером и читает его список моделей, так что модели выбираются по их идентификатору в шлюзе.

ШлюзПротоколыПрефикс ключаПеременная окруженияПримечания
OpenRouterChat, Messages, Responsessk-or-OPENROUTER_API_KEYId сессии для закреплённой маршрутизации; воспроизведение деталей рассуждений; кеширование промптов для моделей Claude
Vercel AI GatewayChat, Messages, Responsesvck_AI_GATEWAY_API_KEYКеширование промптов для моделей Claude
LiteLLM proxyChat, Messages——Разворачивается самостоятельно; по умолчанию http://localhost:4000

Другие OpenAI-совместимые шлюзы (Portkey, Cloudflare AI Gateway, Helicone и т. д.) работают как пользовательская конечная точка: укажите Cusp базовый URL и дополнительные заголовки, которые нужны шлюзу.

Локальные модели

Среда выполненияURL по умолчаниюПротоколы
Ollamahttp://localhost:11434Chat, Messages
LM Studiohttp://localhost:1234Chat, Messages
vLLMhttp://localhost:8000Chat
Сервер llama.cpp, SGLangURL вашего сервераChat

Для локальных сред выполнения ключ не нужен. Из локальных моделей Cusp выбирает самую большую загруженную модель, которая поддерживает вызов инструментов и имеет контекстное окно не меньше 32k.

Небольшим локальным моделям тяжело даются длинные агентные сессии. Cusp даёт им наиболее подходящий формат правок (см. ниже), но повторных попыток будет больше, чем с передовой моделью. Задайте серверу достаточную длину контекста: многие среды выполнения по умолчанию используют 4k или 8k токенов, а для агента этого мало.

Автоопределение

Когда вы вставляете ключ — с базовым URL или без него, — Cusp выполняет короткую последовательность шагов:

  1. Подсказки. Префикс ключа (sk-ant-, sk-or-, AIza, …) и хост базового URL указывают на провайдера.
  2. Проверки. Cusp параллельно отправляет дешёвые запросы без расхода токенов (например, получение списка моделей) по каждому возможному протоколу с тайм-аутом 6 секунд на проверку.
  3. Отпечатки. Даже ответ 401 кое-что сообщает: тела ошибок и заголовки выдают провайдера за неизвестным URL.
  4. Модели. Список моделей берётся из конечной точки и дополняется данными из встроенного каталога Cusp (контекстное окно, цены, возможности) и публичных источников.
  5. Выбор. Cusp выбирает основную модель (с наивысшей агентной оценкой среди моделей с вызовом инструментов) и небольшую модель для вспомогательной работы: заголовков сессий, классификатора режима auto, сжатия контекста и извлечения содержимого веб-страниц.

Любой результат можно переопределить. Автоопределение лишь заполняет конфигурацию; ничего не скрыто.

Адаптеры для семейств моделей

Протокол — это только половина дела. Модели разных лабораторий обучены на разных соглашениях об инструментах и лучше всего работают, когда harness говорит на их диалекте. Cusp хранит профиль для каждого семейства моделей и подстраивается под него.

Формат правок

СемействоИнструмент правкиПочему
Claude, GeminiEdit и MultiEdit (str_replace: точный старый текст → новый текст)Формат, на котором обучены эти модели
GPTApplyPatch, отправляется как 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

В десктопном приложении вставленные ключи вместо этого хранятся в системной связке ключей.

На этой странице