Как подключить DeepSeek Harness к Tokenator API

DeepSeek Harness запускается одной командой и открывает веб-интерфейс. Сторонний шлюз заводится в нём как свой провайдер: идентификатор, адрес, протокол и хотя бы одна модель. Ключ хранится отдельно от настроек и обратно на страницу не возвращается.

Что получится в итоге

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

ИнструментDeepSeek Harness
ПротоколOpenAI-совместимый
Base URLhttps://api.tokenator.top/v1
Ключsk-your-tokenator-key

Требования и поддерживаемые ОС

  • Windows 10/11, macOS 12+ или современный Linux с 64-битной архитектурой.
  • Доступ в интернет к домену Tokenator по HTTPS.
  • API-ключ Tokenator вида sk-your-tokenator-key.

Нужен Node.js: запуск идёт через npx. Для сборки из исходников понадобится pnpm. Настройка выполняется в браузере, аккаунт DeepSeek для стороннего провайдера не нужен.

Установка DeepSeek Harness

Запуск из npm
npx @deepseek-ai/dsh web

Команда поднимает веб-интерфейс на http://127.0.0.1:3080 и открывает его в браузере. Флаг --no-open оставляет сервер без открытия вкладки.

Запуск из исходников
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
Проект находится в стадии developer preview, и авторы предупреждают о несовместимых изменениях между версиями. Если после обновления форма провайдера выглядит иначе, сверьтесь с документацией проекта — принцип подключения при этом не меняется.

Настройка Tokenator

  1. Зарегистрируйтесь в личном кабинете и купите пакет токенов.
  2. Ключ появится в кабинете сразу после подтверждения оплаты — копировать его нужно целиком, вместе с префиксом.
  3. В примерах ниже вместо настоящего ключа стоит плейсхолдер sk-your-tokenator-key. Не публикуйте настоящий ключ в репозиториях и скриншотах.

Конфигурация

  1. Откройте Settings → Models в веб-интерфейсе.
  2. Нажмите Add model provider и переключите карточку на Custom model API.
  3. Provider ID — строчными буквами, например tokenator. Идентификатор постоянный: переименовать провайдера нельзя, можно только завести нового и удалить старого. Отображаемое имя, адрес, протокол, ключ и модели остаются редактируемыми.
  4. Base URL: https://api.tokenator.top/v1
  5. API protocol: openai-completions — это OpenAI Chat Completions. Провайдер говорит ровно на одном протоколе.
  6. API key: sk-your-tokenator-key
  7. В блоке Model catalog нажмите Fetch available models: запрос уходит на GET https://api.tokenator.top/v1/models с текущим ключом. Отметьте нужные модели и нажмите Add selected. ID можно и вписать руками, например gpt-5.5.
  8. Сохраните провайдера и выберите модель в пикере — выбранная модель становится значением по умолчанию для новых сессий.
Картинки и reasoning DSH сам не определяет. Fetch available models переносит из /v1/models только ID, имя, окно контекста и лимит вывода. Какие модели принимают картинки, Tokenator в этом ответе сообщает, но у провайдера из Custom model API DSH эти поля не читает, а уровни reasoning через список моделей не передаются вовсе. Поэтому любая модель — и добавленная через Fetch, и вписанная руками — сначала считается текстовой и без reasoning: картинку она не примет, а пункта Effort в меню у неё не будет. Включается это вручную: откройте провайдера, раскройте Customized settings, у нужной модели — Model options, и в Input types отметьте Image. Там же переключатель Reasoning levels — о нём в разделе «Настройка reasoning». Image ставьте только моделям, у которых на странице в каталоге в строке «Модальности входа» есть image: иначе DSH отправит картинку, а модель её отклонит.
Ключи доступны только на запись: после сохранения страница получает обезличенный дескриптор, а не сам секрет. Ключ лежит в $DSH_HOME/.credentials.yaml, в настройках остаётся лишь ссылка на него. Изменения моделей применяются со следующего запроса, перезапускать сервер не нужно.
$DSH_HOME/profiles/web/cordis.patch.yml
- id: llm-pi-ai
  config:
    providers:
      tokenator:
        apiKeyEnv: TOKENATOR_API_KEY
        api: openai-completions
        baseURL: https://api.tokenator.top/v1
        models:
          - id: gpt-5.5

То же самое можно записать прямо в файл профиля — это тот же документ, который пишет страница настроек. При запуске через dsh web профиль называется web, отсюда путь $DSH_HOME/profiles/web/cordis.patch.yml. Запись целиком заменяет конфиг llm-pi-ai, поэтому других провайдеров, если они уже есть в файле, сохраните рядом. Модели, которая принимает картинки, добавьте под id строку input: [text, image] — это то же, что галка Image. В этом же файле задаются поля, которых нет в форме: заголовки, таймауты и переключатели совместимости. Открыть его можно кнопкой Open configuration file в шапке настроек, когда браузер работает на той же машине, что и сервер.

Первый запрос

Перед запуском инструмента полезно убедиться, что ключ и модель рабочие. Один запрос curl отвечает на оба вопроса сразу.

Проверка OpenAI-эндпоинта
curl https://api.tokenator.top/v1/chat/completions \
  -H "Authorization: Bearer sk-your-tokenator-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [{"role": "user", "content": "ping"}]
  }'

Откройте http://127.0.0.1:3080, выберите модель в пикере и отправьте сообщение. Сессия, которая уже отправила запрос, остаётся на модели, записанной в её собственном логе: новую модель подхватят новые сессии.

Успешный ответ означает, что ключ действителен, модель разрешена для этого ключа и апстрим доступен. Расход виден в кабинете сразу после запроса.

Переключение моделей

Модели правятся в карточке провайдера: Fetch available models спрашивает список у эндпоинта, а вписанный руками ID работает точно так же. Выбор модели в пикере делает её значением по умолчанию для новых сессий. Поддержку картинок и уровни reasoning новой модели DSH не подхватывает: их включают в Model options этой модели, как описано в разделе «Конфигурация».

Примеры ID моделей, доступных сейчас:

  • claude-haiku-4-5
  • claude-opus-4-6
  • claude-opus-4-7
  • claude-sonnet-4-6
  • gpt-5.5
  • deepseek-v4-pro

Актуальные ID и характеристики — в каталоге AI-моделей; там же видно, какие модели сейчас доступны. Выбрать между близкими вариантами помогает сравнение моделей.

Настройка reasoning

DSH не узнаёт уровни reasoning из /v1/models: у модели провайдера из Custom model API их нет, пока вы их не объявите, — неважно, добавлена она через Fetch available models или вписана руками. До тех пор пункт Effort в меню не появляется, и думать ли модели, решает сам эндпоинт.

Уровни включаются в Settings → Models: откройте провайдера, раскройте Customized settings, у модели — Model options, и включите Reasoning levels. Строки начинаются с off, low, medium и high. В API value стоит то, что уходит на провод в reasoning_effort, по умолчанию — название уровня. Кроме off должен остаться хотя бы один уровень. Сохраните провайдера, и пункт Effort появится в меню.

Форма пишет поле reasoningEfforts в $DSH_HOME/profiles/web/cordis.patch.yml, там же его можно задать руками: ключ — это пункт меню, а значение — reasoning_effort на проводе. Пустым можно оставить только off: для большинства эндпоинтов «не думать» — это отсутствие параметра.

$DSH_HOME/profiles/web/cordis.patch.yml
- id: llm-pi-ai
  config:
    providers:
      tokenator:
        apiKeyEnv: TOKENATOR_API_KEY
        api: openai-completions
        baseURL: https://api.tokenator.top/v1
        models:
          - id: gpt-5.5
            reasoningEfforts:
              off:
              low: low
              medium: medium
              high: high

Дополнительно у самого ключа есть переключатель reasoning в личном кабинете — он действует независимо от инструмента. Размышление тарифицируется как output-токены.

Частые ошибки и способы исправления

СимптомПричинаЧто сделать
MISSING_CREDENTIALУ провайдера не сохранён ключ либо не задана переменная окружения, названная в apiKeyEnv.Сохраните ключ на странице Settings → Models или задайте эту переменную окружения.
UNKNOWN_MODELЗапрошенной модели нет среди настроенных у провайдера.Добавьте её ID в провайдера или выберите настроенную модель в пикере.
Model "…" does not support image inputУ модели не отмечен тип входа Image. Поддержку картинок DSH из списка моделей не берёт, поэтому каждая модель провайдера из Custom model API сначала считается текстовой.Отметьте Image в Input types у этой модели (Customized settings → Model options), если модель действительно принимает картинки.
Fetch available models отвечает 401Поиск моделей обращается к GET /models с ключом из формы, и ключ не подошёл.Проверьте ключ; список моделей в любом случае можно заполнить вручную — вписанные ID работают так же.
401 или сообщение о недействительном ключеКлюч скопирован с лишними пробелами, отозван, истёк или подставлен не в ту переменную окружения.Проверьте ключ в личном кабинете и убедитесь, что переменная окружения действительно попала в тот процесс, где запускается инструмент.
403Модель не входит в список разрешённых для этого ключа.Посмотрите список моделей ключа в кабинете и выберите ID из каталога моделей.
429Превышен лимит запросов в минуту или час либо лимит одновременных стримов для ключа.Уменьшите параллелизм агента и повторите запрос с экспоненциальной задержкой. Лимиты ключа видны в кабинете.
Модель не найдена / не поддерживаетсяВ запросе указан ID, которого нет в каталоге, либо алиас, недоступный этому ключу.Скопируйте точный API ID со страницы модели — регистр и точки значимы.
Запрос завис или обрывается на длинном ответеКлиент закрыл соединение по своему таймауту раньше, чем модель закончила генерацию.Включите потоковый режим (stream: true) и увеличьте таймаут клиента: у длинных reasoning-ответов первый токен может прийти не сразу.
Ошибка вида «Request error» без деталейАпстрим-провайдер вернул ошибку. Её текст не передаётся клиенту.Повторите запрос: Tokenator сам переключается на следующего провайдера модели. Если ошибка стабильна — напишите в поддержку.

Частые вопросы

Нужна ли подписка DeepSeek Harness или отдельный аккаунт провайдера?

Нет. Инструмент обращается к Tokenator, а оплата идёт токенами вашего ключа Tokenator.

Где посмотреть расход после подключения?

В личном кабинете: там видны запросы, израсходованные токены и остаток лимита ключа.

Можно ли использовать один ключ в нескольких инструментах?

Да. Ограничение — лимиты самого ключа: запросы в минуту и час, а также количество одновременных стримов.

Что будет, если токены закончатся посреди сессии?

Запросы начнут возвращать ошибку. Лимит восстанавливается пополнением того же ключа — переустанавливать инструмент не нужно.

Как вернуться к прежнему провайдеру?

Уберите добавленные настройки — переменные окружения или блок провайдера в конфиге. Инструмент вернётся к своему поведению по умолчанию.

Где почитать про сам формат API?

В документации Tokenator API и на странице про OpenAI-compatible API.