Перейти к содержимому

Свои провайдеры (BYOK)

Custom Provider позволяет подключить API в одном из трёх форматов, на которых говорят эндпоинты: OpenAI Responses, OpenAI Chat Completions или Anthropic Messages. Сюда входят крупные облачные сервисы (OpenRouter, Groq, Mistral, Google Gemini и другие), локальные прокси и самостоятельно развёрнутые серверы. Для Anthropic, OpenAI, Google Gemini, xAI и OpenRouter есть готовые настройки, которые сами заполняют адрес конечной точки.

Image

Перейдите в настройки Kodik → Модели → Добавить провайдер и выберите провайдер:

Для готового провайдера нужен только Ключ API. Ссылка Получить ключ открывает страницу ключей поставщика в браузере. Под ключом одной строкой показана конечная точка, которую он использует, — базовый URL и формат — с кнопкой Изменить конечную точку, например для корпоративного шлюза или регионального адреса. Открывшиеся поля заполнены значениями готового провайдера.

Меню провайдеров остаётся в пределах окна и прокручивается, когда места мало. Оно подстраивается при изменении размера окна, а клавиши со стрелками сохраняют выделенного провайдера в видимой области.

Провайдер Базовый URL Формат API Страница ключей
Anthropic https://api.anthropic.com/v1 Совместимо с Anthropic (Messages) platform.claude.com
OpenAI https://api.openai.com/v1 Совместимо с OpenAI (Responses) platform.openai.com
Google Gemini https://generativelanguage.googleapis.com/v1beta/openai Совместимо с OpenAI (Completions) aistudio.google.com
xAI https://api.x.ai/v1 Совместимо с OpenAI (Responses) console.x.ai
OpenRouter https://openrouter.ai/api/v1 Совместимо с OpenAI (Completions) openrouter.ai

Без ключа продолжить нельзя: Продолжить с пустым ключом показывает «Введите ключ API» и ничего не отправляет. Провайдер сохраняется под именем поставщика, а второй провайдер того же поставщика получает номер, например «OpenAI 2». Готовый провайдер — это обычный свой провайдер, поэтому всё, что описано на этой странице, от обнаружения моделей до настроек провайдера, работает для него так же.

Подсказка под полем ключа говорит, как он передаётся: заголовком x-api-key для формата Anthropic и заголовком Authorization: Bearer для форматов OpenAI.

Пользовательская конечная точка запрашивает следующие поля:

Поле Описание
Отображаемое имя Произвольное имя для отображения в интерфейсе
Базовый URL Корневой адрес API (см. требования к URL)
Формат API Совместимо с OpenAI (Responses) (по умолчанию), Совместимо с OpenAI (Completions) или Совместимо с Anthropic (Messages)
Ключ API Ключ авторизации (опционально, если эндпоинт не требует)

Пользовательские заголовки и потоковая передача настраиваются позже в Настройках провайдера; см. пользовательские заголовки.

После нажатия Продолжить Kodik запрашивает каталог моделей у эндпоинта и предлагает выбрать нужные модели. Провайдер сохраняется только после подтверждения хотя бы одной модели; закрытие окна без подтверждения ничего не добавляет.

  • Свои провайдеры принимают базовые URL с http:// и https://. Если схема не указана, Kodik считает URL адресом http://.
  • Эндпоинты /responses не поддерживаются — используйте базовый URL, /chat/completions или /messages в зависимости от формата.
  • Если URL заканчивается на /chat/completions (OpenAI) или /messages (Anthropic), Kodik удаляет суффикс инференса и не дублирует путь выбранного формата.
  • Для обнаружения моделей у OpenAI- и Anthropic-совместимых провайдеров Kodik сохраняет путь из базового URL и добавляет к нему /models. Например, для https://gateway.example/api/openai используется https://gateway.example/api/openai/models. Если указан только адрес сервера без пути, сохраняется обычный адрес /v1/models.

Перед отправкой запроса или созданием сводки Kodik исправляет повторяющиеся и отсутствующие результаты инструментов и размещает полную группу результатов перед следующими сообщениями. Сохраняется первый записанный результат; результаты без соответствующего вызова остаются в контексте с пояснением. Это работает для Chat Completions, Responses, Anthropic Messages и Gemini Interactions, не изменяя сохранённый разговор. При смене провайдера или модели несовместимые приватные рассуждения удаляются, а идентификаторы вызовов приводятся к формату получателя. Поддерживаемые изображения и ошибки инструментов сохраняются; для моделей без поддержки изображений добавляется пояснение об их пропуске.

Встроенные PDF-вложения остаются доступны при переключении между поддерживаемыми форматами провайдеров. Anthropic получает нативные PDF- и текстовые документы; Gemini — нативные PDF/CSV и читаемый текст для остальных текстовых форматов. Документы из результатов инструментов сохраняют связь с вызовом; Gemini получает их после полной группы результатов. Для неподдерживаемых двоичных форматов и ссылок провайдера без сохранённого содержимого добавляется пояснение о пропуске. Для моделей Anthropic и Gemini, помеченных как текстовые, PDF заменяется пояснением о пропуске. Одного идентификатора загруженного файла недостаточно для восстановления исходного содержимого.

Когда выбранный свой провайдер использует формат anthropic, Kodik отправляет запросы Chat напрямую в его нативный эндпоинт Messages. Корневой URL нормализуется до /v1/messages; версия в пути или явно указанный /messages не дублируются. Системные инструкции передаются в верхнем поле system, поддерживаемые изображения — блоками Anthropic image, а включённые инструменты Kodik — нативными схемами input_schema. Если Стриминг выключен, Kodik получает полный JSON-ответ Messages вместо SSE.

Настроенный API-ключ передаётся в x-api-key вместе со стабильным заголовком anthropic-version. Безопасные пользовательские заголовки тоже пересылаются, включая явный Authorization для шлюзов, которым он нужен. Kodik отклоняет hop-by-hop переопределения и никогда не отправляет на свой эндпоинт внутренние заголовки аккаунта, задачи, типа запроса или версии Kodik. API-ключи остаются в нативном хранилище секретов, а пользовательские заголовки — в настройках провайдера. Ни те ни другие не записываются в историю чата или провайдера.

При продолжении после инструментов сохраняется исходный порядок нативных блоков: текст, подписи thinking, redacted-thinking, параллельные вызовы и соответствующие результаты. Блок thinking возвращается с тем полем подписи, с которым пришёл, в том числе с пустым, которое присылают модели кроме Claude через OpenRouter и Kimi. Закрытые данные thinking используются только для корректного продолжения и не показываются как обычный текст ответа. Kodik ставит документированные ephemeral cache breakpoints на стабильные блоки промпта и побайтно сохраняет уже отмеченные блоки при росте разговора; если новая отметка превысит лимит Anthropic в четыре breakpoint на запрос, самая старая отметка удаляется. Beta-заголовки не включаются, а диалект thinking не определяется по догадке из имени модели.

Цель совместимости Kodik — базовый контракт Messages: текст, поддерживаемые изображения, клиентские tool_use / tool_result, потоковые и непотоковые ответы, usage, явные ephemeral cache markers и документированные причины остановки. Цитаты, полные непрозрачные блоки ответа и документированные на данный момент дельты серверных блоков сохраняются в истории провайдера, но Kodik не выполняет серверные инструменты Anthropic. Новые типы потоковых дельт с пока неизвестной семантикой реконструкции безопасно игнорируются, а не воспроизводятся предположительно. Специфичные для провайдера серверные инструменты, загрузка Files/document, structured outputs, автоматическое кеширование в корне запроса, beta-возможности и все варианты Anthropic thinking не гарантируются общим адаптером.

Ответ с max_tokens отбрасывается и продолжается, как любая остановка по лимиту вывода. Частичный вывод refusal удаляется, а ответ запрашивается заново, до трёх раз подряд, прежде чем запрос отображается как ошибка; остановка из-за окна контекста запускает обычный сценарий summarize-and-continue. Ответ pause_turn отклоняется явно, потому что у общего Chat для своих провайдеров нет владельца продолжения серверного инструмента.

Ошибка инференса остаётся на выбранном своём маршруте: Kodik может повторить временный сбой до появления вывода, но не переключает запрос на прокси Kodik. Stop отменяет активный запрос к своему провайдеру. Прокси Kodik продолжает использовать прежний OpenAI-совместимый маршрут.

Gemini — это не отдельный формат. Готовый провайдер Google Gemini использует OpenAI-совместимый базовый URL от Google с форматом Совместимо с OpenAI (Completions) и ключ Google AI Studio. Пользовательская конечная точка для Gemini использует тот же базовый URL и формат; если вставить адрес нативного API, Kodik предупредит об этом.

Провайдер, добавленный ранее с форматом Gemini (Interactions API), продолжает работать как прежде и сохраняет свой формат в Настройки → Модели. Для новых провайдеров этот вариант больше не предлагается.

Выберите Совместимо с OpenAI (Completions) (chat-completions) для эндпоинтов /chat/completions, которые принимают messages. Для эндпоинтов /responses с полем input выберите Совместимо с OpenAI (Responses). На OpenRouter и собственном API OpenAI модель с рассуждениями получает запрос на краткое изложение своих рассуждений, и чат показывает его по ходу работы. Существующие настройки Responses сохраняются; формат меняется только по вашему выбору. Оба формата поддерживают инструменты, потоковые и непотоковые ответы, перезагрузку окна и сжатие контекста. Модели Chat Completions также доступны в выборе модели на мобильном устройстве, если вашему аккаунту разрешены свои провайдеры. Неизвестный шлюз получает переносимое подмножество: сообщения system/user/assistant/tool, обычные function tools и результаты, а также только настроенные для модели параметры. Безопасные пользовательские заголовки пересылаются, а транспортные и внутренние заголовки Kodik отфильтровываются.

Для точного адреса api.openai.com Kodik использует текущий диалект OpenAI Chat: инструкции developer, max_completion_tokens и явные поля prompt cache для GPT-5.6. Прямые запросы xAI Chat передают стабильную сессию в заголовке x-grok-conv-id; ключ кеша, предназначенный для Responses, не попадает в тело Chat. Остальные совместимые шлюзы остаются в консервативном режиме и не получают расширения OpenAI или OpenRouter, пока их эндпоинт не распознан.

Нажмите Тест на карточке провайдера, чтобы проверить подключение, или Обновить, чтобы обновить метаданные моделей. Обе кнопки сохраняют положение прокрутки страницы «Модели» во время запроса и после его завершения, в том числе при ошибке и повторной попытке.

Карточки провайдеров подстраиваются под доступную ширину настроек, включая длинные адреса и идентификаторы моделей. Если редактор уже минимальной ширины настроек, прокрутите страницу по горизонтали, чтобы добраться до её элементов управления.

При добавлении или обновлении провайдера Kodik запрашивает список моделей по базовому URL. К базовому URL, который заканчивается версией, например /v1 или /v1beta/openai у Google, добавляется /models, к любому другому — /v1/models; формат Gemini (Interactions) использует версионированный каталог моделей Google. Окно Выбор моделей показывает точный адрес запроса. Kodik проходит все страницы списка моделей Anthropic, поэтому в нём есть каждая модель, а идентификаторы моделей Google сохраняет без префикса models/. Обнаруженные модели включаются в список выбора — вместе с метаданными: именем, описанием, размером контекстного окна и флагами поддержки изображений и инструментов, если провайдер их возвращает.

В карточке провайдера у каждой модели показаны значки возможностей ИЗОБРАЖЕНИЯ, ИНСТРУМЕНТЫ и РАССУЖДЕНИЕ — это кликабельные переключатели (цветной = включено, приглушённый = выключено). Если автоматическое определение не совпадает с реальными возможностями модели, нажмите значок, чтобы переключить возможность.

Кнопка чата Добавить файлы и изображения принимает изображения для любой выбранной модели. Модель без поддержки изображений не получает байты изображения; текстовые модели Kodik могут получить краткое описание от отдельной модели с поддержкой изображений, а для других неподдерживающих маршрутов сохраняется фактическая пометка об исключённом изображении.

Значение «Контекст» в строке модели тоже редактируется по клику. Задайте реальный размер окна для моделей, у которых провайдер его не сообщает — иначе Kodik исходит из 128k, и небольшие локальные модели переполняются посреди задачи. Заданное вручную значение сохраняется при обновлениях каталога; очистите поле, чтобы вернуться к автоматическому режиму.

Запрос на суммаризацию выполняется с настроенным для модели усилием рассуждения и с тем же бюджетом ответа, что и обычный ход, чтобы думающая модель успела закончить сводку после рассуждения.

Внизу настроек модели в чате можно также редактировать Окно контекста рядом со Сжатием при. Оба поля имеют одинаковые строки с подписями, а ползунок под Сжатием при меняет этот же порог. Если провайдер не сообщает размер, поле показывает стандартные 128 000 токенов, а примечание над ним сообщает, что размер не удалось проверить. Заданный вручную размер убирает примечание; очистка поля возвращает значение по умолчанию и примечание. Введите положительное целое число токенов или очистите поле для возврата к значению по умолчанию. Сохранённый размер обновляет пределы суммаризации и сохраняется после перезагрузки окна.

Context Usage считает это значение полной ёмкостью модели для запроса и ответа. Настроенный или резервный лимит ответа не прибавляется поверх контекстного окна.

Список определений инструментов в Context Usage всегда соответствует инструментам, доступным в выбранном режиме после применения настроек Harness. Отключённые в Settings → Harness инструменты не отображаются и не учитываются, даже если совместимый провайдер сохраняет более стабильное объявление схем для кеширования промпта.

Значок ? означает, что провайдер не сообщил об этой возможности. Ручное изменение сохраняется отдельно; значок сброса рядом возвращает данные провайдера или неопределённое состояние.

Данные провайдера о контексте и сэмплировании обновляются отдельно от ваших настроек. Статус над полем Размер контекста показывает источник: данные провайдера, ручное значение или сохранённое значение после неудачного обновления. Сброс возвращает последние полученные данные; при их отсутствии используется редактируемый контекст 128 000 токенов. Старые сохранённые значения сохраняются при миграции. Ограничения ввода, вывода, загруженного контекста и режима рассуждения применяются к чату, подагентам и суммаризации.

В Настройках провайдера можно выбрать Профиль совместимости. Автоматическое определение использует адрес сервера; для прокси выберите Alibaba или OpenRouter вручную. Необязательный Путь к данным моделей запрашивает расширенный каталог на том же сервере с текущим ключом. Этот каталог дополняет только модели, уже перечисленные основным эндпоинтом.

Для Alibaba Model Studio Kodik читает расширенные сведения через родной каталог. Совместимый каталог Coding Plan обычно сообщает только идентификаторы: документированные профили задают поддерживаемые режимы рассуждения, а неизвестный контекст остаётся редактируемым. Переключатель Alibaba Chat передаётся как enable_thinking; OpenRouter использует свой объект reasoning. Если доступно поле Бюджет рассуждений, число токенов заменяет выбранный уровень. Очистите поле, чтобы снова использовать уровень рассуждения.

Если провайдер не сообщает режимы рассуждения модели, настройки модели в чате всё равно показывают переключатель Размышление и все уровни: Мгновенно, Минимальное, Низкое, Среднее, Высокое, Максимальное и Максимум. Изначально выбран режим «Мгновенно», даже если поддержка размышления не была определена. Выключение переключателя выбирает «Мгновенно», а включение — один из активных уровней рассуждения. Кнопка Настроить позволяет выбрать переключатель вкл/выкл или сократить список до вариантов, которые принимает эндпоинт. Если каталог сообщает точные режимы, используются они, включая модели с обязательным рассуждением. Усилие для выбранной модели сохраняется в чате и применяется через выбранный формат провайдера. Два чата могут использовать разные усилия с одним провайдером и моделью; при переключении чатов или перезагрузке окна восстанавливается выбор каждого чата. Выбор до первого сообщения сохраняется в новом чате. Значения модели по умолчанию используются при новом выборе модели, а изменение усилия в активном чате не меняет эти значения. Отдельные блоки Anthropic thinking по-прежнему требуют явной конфигурации thinking; общий селектор усилия не выводит бюджет thinking.

В подключениях Responses к OpenAI, OpenRouter и WCNBAI Kodik запрашивает читаемые сводки рассуждений, сохраняя выбранный уровень усилия. Блок размышления появляется, когда провайдер возвращает непустую сводку; расход токенов рассуждения может учитываться и без читаемого текста.

Если первый ответ каталога моделей пустой, Kodik немного подождёт и повторит запрос перед показом списка выбора. Если эндпоинт моделей недоступен или по-прежнему возвращает пустой список, Kodik всё равно позволит использовать провайдера — просто выберите модель вручную.

Рядом с каждым провайдером в списке отображается цветной индикатор:

Цвет Статус Описание
Зелёный ok Провайдер отвечает быстро
Жёлтый degraded Ответ занял более 3 секунд
Красный unreachable Провайдер недоступен или вернул ошибку

Kodik проверяет здоровье каждого провайдера раз в минуту, запрашивая список его моделей. Статус обновляется автоматически без перезагрузки.

Автоматическое определение известных сервисов

Заголовок раздела «Автоматическое определение известных сервисов»

Kodik распознаёт популярные сервисы по базовому URL и автоматически применяет подходящие настройки по умолчанию. Провайдер на api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, api.x.ai или openrouter.ai показывает логотип поставщика на своей карточке — и готовый, и добавленный по введённому URL. Готовые провайдеры сами задают нужный формат API; для URL, введённого в Пользовательской конечной точке, действуют форматы из таблицы:

Сервис URL Формат по умолчанию
OpenRouter openrouter.ai Совместимо с OpenAI (Responses)
Groq groq.com Совместимо с OpenAI (Responses)
Together AI together.xyz Совместимо с OpenAI (Responses)
Mistral mistral.ai Совместимо с OpenAI (Responses)
Perplexity perplexity.ai Совместимо с OpenAI (Responses)
Fireworks fireworks.ai Совместимо с OpenAI (Responses)
DeepSeek deepseek.com Совместимо с OpenAI (Responses)
LM Studio localhost:1234 Совместимо с OpenAI (Responses)
LiteLLM localhost:4000 Совместимо с OpenAI (Responses)

Для нераспознанных URL Kodik использует формат Совместимо с OpenAI (Responses) по умолчанию. Вы можете переопределить любой параметр вручную.

Для неизвестного OpenAI-совместимого эндпоинта Kodik применяет консервативную политику совместимости: использует переносимые системные роли и полный набор инструментов, но не добавляет специфичные для провайдера cache-маркеры, роль developer и расширения для сужения набора инструментов. Это не даёт серверам вроде Ollama молча потерять инструкцию и не отправляет поля, которые общий эндпоинт может отклонить.

Kodik передаёт подсказки сессии по правилам известных провайдеров. OpenRouter получает x-session-id, xAI — x-grok-conv-id, Fireworks — x-session-affinity. Kimi, Mistral, Cerebras и Fireworks используют prompt_cache_key в Chat Completions; Kimi, MiniMax и WCNBAI — в Responses. Kimi Messages получает metadata.user_id. Для известных контрактов с полем в теле запроса дополнительный заголовок сессии по умолчанию не добавляется. Claude на OpenRouter также получает поле cache_control с часовым TTL в Responses и Chat Completions.

Распознавание влияет только на оформление и настройки подключения по умолчанию — оно никогда не ограничивает возможности провайдера. Поддержка инструментов включена у каждой модели независимо от того, где размещён провайдер, поэтому агентные функции (правка файлов, терминал, MCP-серверы) работают сразу. Каталог провайдера может сообщить, что модель не поддерживает инструменты; также можно изменить бейдж TOOL USE модели вручную. Когда поддержка выключена, Kodik отправляет этой модели запрос без инструментов и зависимых от них инструкций. При создании Goal Kodik переходит на проверяемый JSON, а выбранный на такой модели субагент переднего плана всё ещё может выполнить делегированную задачу, не требующую инструментов.

Session ID header задаёт имя HTTP-заголовка; Kodik автоматически заполняет его стабильным ID сессии. Поле доступно для любого формата API. Для неизвестных шлюзов по умолчанию используется x-session-id. Известные провайдеры используют заголовок выше или оставляют поле пустым, если ключ кэша передаётся в теле запроса. Имя можно изменить, например на session-id, или очистить поле, чтобы отключить автоматически добавляемый заголовок. Заголовки аутентификации и транспорта использовать здесь нельзя.

Prompt cache key содержит переключатель Send prompt cache key для Responses и Chat Completions, с пояснением для выбранного формата. В Anthropic и Gemini это поле скрыто. Переключение формата сразу обновляет набор полей и сохраняет выбранное состояние, когда поле скрывается.

  • Включён — отправляет стабильный prompt_cache_key, чтобы помочь эндпоинту использовать кэш запросов. При включении в качестве ключа используется ID сессии, в том числе для неизвестного шлюза. Эндпоинт должен поддерживать это поле.
  • Выключен — не добавляет prompt_cache_key. Это не отключает кэширование провайдера или существующие cache-маркеры.

Для новых подключений Responses переключатель включён на любом эндпоинте, включая неизвестные шлюзы. Для новых подключений Chat Completions он включён у провайдеров с известной поддержкой поля и выключен для неизвестных шлюзов. У существующих подключений он показывает, отправляет ли текущая политика ключ; открытие настроек сохраняет эту политику. Изменение переключателя явно включает или отключает ключ.

Настройки доступны при добавлении произвольного эндпоинта и в Настройках провайдера. ID сессии сохраняется при продолжении после инструментов, повторах, перезагрузке и сжатии контекста; новый чат получает новый ID сессии. Субагент на пользовательском провайдере использует собственный ID сессии. Запросы каталога моделей не относятся к сессии и не создают заголовок сессии. Прокси Kodik сохраняет отдельный контракт X-Task-ID, включая ID родительской задачи для делегированной работы.

Универсального заголовка сессии нет. Провайдер может игнорировать неподдерживаемую подсказку, а принятие поля не гарантирует попадания в кэш. Проверка совместимости Luna на WCNBAI показала, что эндпоинт принимает и возвращает prompt_cache_key; фактическое использование кэша определяется по ответу провайдера.

Раздел Пользовательские заголовки позволяет добавить произвольные HTTP-заголовки к каждому запросу. Это полезно, например, для аутентификации через X-Custom-Auth или для передачи параметров маршрутизации, специфичных для провайдера.

Кнопка с шестерёнкой на карточке провайдера открывает Настройки провайдера, где его можно изменить. Кнопка Удалить провайдер там же удаляет провайдера. Диалоги провайдера используют те же полосы прокрутки с учётом темы, что и страница настроек. Активные и завершённые шаги настройки используют зелёный цвет основной кнопки и её цвет текста; включённые переключатели используют тот же зелёный цвет.

Если модель достигла лимита выходных токенов при сжатии, карточка ошибки объясняет, что сводку не удалось закончить. Это объяснение сохраняется после повторного открытия чата. Исходный разговор остаётся доступным, а кнопка Повторить позволяет продолжить, когда провайдер сможет вернуть полную сводку.

Если шлюз отклоняет разговор с ошибкой 413 Request Entity Too Large, Kodik пытается сжать старые сообщения и продолжить в том же чате с меньшим запросом. Если сжатие не удалось, исходный разговор сохраняется с кнопкой Повторить. Запрос с большими вложениями или инструкциями всё ещё может превышать лимит шлюза.

Если указанное провайдером время сброса лимита уже прошло, Kodik использует обычную задержку повторной попытки вместо дополнительного ожидания в 30 минут. Будущее время сброса по-прежнему определяет ожидание, а кнопка остановки отменяет его.

Kodik различает перегрузку провайдера, ограничения частоты запросов, тайм-ауты, обрывы соединения и ошибки чтения ответа. При временном сбое чат показывает причину, пока Kodik повторяет запрос; кнопка остановки отменяет дальнейшие попытки. Если соединение оборвалось после начала ответа, Kodik сохраняет полученный результат и продолжает задачу. Отклонённый запрос показывает объяснение и кнопку Повторить — они сохраняются после перезагрузки окна. Идентификаторы запросов сохраняются для диагностики и не загромождают сообщение об ошибке.

При отклонении API-ключа чат показывает сообщение об ошибке и кнопку Повторить. Проверьте ключ в настройках моделей, затем повторите запрос. В строке ошибки нет дополнительных кнопок перехода, имени провайдера и идентификатора запроса. При временной ошибке отображается ожидание повторной попытки; кнопка остановки отменяет дальнейшие попытки. При исчерпании квоты или кредитов автоматические повторы прекращаются.

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

OpenRouter обслуживает модели Gemini с двух серверов Google, и каждый отклоняет подписи рассуждений, выданные другим. Если OpenRouter переносит чат с Gemini с одного сервера на другой, Kodik один раз повторяет запрос без этих подписей, и задача продолжается; модель теряет только скрытые рассуждения, сделанные до переключения.

У провайдера Chat Completions рассуждения модели на прошлых шагах отправляются вместе с этими шагами в каждом следующем запросе чата, в том числе после нового сообщения и в резюме, если провайдер их принимает. OpenRouter принимает их для всех моделей с рассуждениями — так их отправляют и другие агенты для программирования. Другим провайдерам они отправляются только для моделей, которым нужны для продолжения работы: DeepSeek, Kimi, GLM, MiniMax, Claude и Gemini. Провайдеру Responses зашифрованные рассуждения модели отправляются обратно в каждом запросе. В обоих API зашифрованные рассуждения учитываются в контекстном окне по их реальному размеру, а не по длине их кодировки.

В Chat Completions с DeepSeek сохраняются и явно пустые рассуждения, и рассуждения, полученные вместе с окончательным ответом, в том числе после перезагрузки окна. Kodik сохраняет рассуждения и подписи провайдера, не придумывая отсутствующий текст. Если провайдер не прислал рассуждения, а затем отклонил историю, Kodik показывает ошибку без автоматического повтора того же неверного запроса. Если рассуждения превышают лимит сохранения истории, Kodik останавливается с объяснением; начните новый чат или уменьшите настроенный лимит ответа.

Если провайдер Responses завершает ход со статусом incomplete (max_output_tokens), Kodik отбрасывает незавершённый ответ и повторяет запрос, сообщая модели о лимите и предлагая продолжить с последнего завершённого шага. Вызовы инструментов из незавершённого ответа не выполняются. Если повторный ответ тоже достигает лимита, Kodik повторяет снова и просит модель сделать шаг намного меньше, а не останавливается. Кнопка остановки отменяет запланированный повтор.

Провайдер Chat Completions, остановивший ответ из-за лимита выходных токенов, обрабатывается так же: частичный ответ отбрасывается, и Kodik продолжает работу с пометкой. Автоматический запуск никогда не считает усечённый ответ завершённой работой.