Как подключить 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 a custom provider.
  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. Сохраните провайдера и выберите модель в пикере — выбранная модель становится значением по умолчанию для новых сессий.
Ключи доступны только на запись: после сохранения страница получает обезличенный дескриптор, а не сам секрет. Ключ лежит в $DSH_HOME/.credentials.yaml, в настройках остаётся лишь ссылка на него. Изменения моделей применяются со следующего запроса, перезапускать сервер не нужно.
$DSH_HOME/settings.yaml
llm-pi-ai:
  providers:
    tokenator:
      apiKeyEnv: TOKENATOR_API_KEY
      api: openai-completions
      baseURL: https://api.tokenator.top/v1
      models:
        - id: gpt-5.5

То же самое можно записать прямо в $DSH_HOME/settings.yaml — это тот же документ, который пишет страница настроек. В нём же задаются поля, которых нет в форме: заголовки, таймауты, уровни reasoning и переключатели совместимости. Открыть файл можно кнопкой 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 работает точно так же. Выбор модели в пикере делает её значением по умолчанию для новых сессий.

Примеры 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

Модель, вписанная вручную, не объявляет уровней reasoning, поэтому пункт Effort для неё в меню не появляется и думать ли модели решает сам эндпоинт. Уровни объявляются полем reasoningEfforts в $DSH_HOME/settings.yaml: ключ — это пункт меню, а значение — то, что уходит на провод в reasoning_effort. Пустым можно оставить только off: для большинства эндпоинтов «не думать» — это отсутствие параметра.

$DSH_HOME/settings.yaml
llm-pi-ai:
  providers:
    tokenator:
      models:
        - id: gpt-5.5
          reasoningEfforts:
            off:
            high: high
            max: max

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

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

СимптомПричинаЧто сделать
MISSING_CREDENTIALУ провайдера не сохранён ключ либо не задана переменная окружения, названная в apiKeyEnv.Сохраните ключ на странице Settings → Models или задайте эту переменную окружения.
UNKNOWN_MODELЗапрошенной модели нет среди настроенных у провайдера.Добавьте её ID в провайдера или выберите настроенную модель в пикере.
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.