DeepSeek Harness: подключить свой API и разобрать Connection error
Сторонний сервис в DeepSeek Harness добавляется через Add model provider → Custom model API: нужны Provider ID, Base URL, протокол, ключ и хотя бы одна модель. Для go2llm это https://go2llm.tech, протокол Anthropic Messages, ключ gk_sk_…. Connection error к ключу и модели отношения не имеет: так DSH сообщает, что запрос не дошёл до сервера.
Обновлено 1 ноября 2026. Ответы прода go2llm в этом тексте проверены curl'ом в тот же день, цены — по каталогу v43 от 30 октября 2026.
Почему ошибка называется Connection error
Connection error. — это APIConnectionError из Anthropic SDK, на котором работает DSH. Клиент не получил HTTP-ответа: запрос упал на DNS, TCP или TLS. Кода ответа в этом случае нет, поэтому строка говорит про соединение, а не про 401.
DSH на такой отказ ретраит. В чате это выглядит так:
Retried model request (2/5) · 1s
Retry delay: 961ms
Failure reason: Connection error.
DSH повторяет такой запрос, и после последней попытки ход останавливается. Пока в строке стоит Connection error, менять ключ бессмысленно: до проверки ключа дело не дошло.
| Что показывает DSH | Что это значит | Где смотреть |
|---|---|---|
Connection error. | Запрос не дошёл до сервера | Сеть, прокси, VPN, Base URL |
API key is invalid, 401 no-key | Ключ не передан или неизвестен | Поле ключа, gk_sk_… |
403 key revoked / expired | Ключ отозван или истёк | Кабинет ключей |
404 endpoint_not_found | Base URL собран с лишним сегментом | /v1 в адресе |
404 model_not_found | id модели не из опубликованного каталога | GET /v1/models |
402 insufficient_balance | Кончился баланс | Кабинет, GET /v1/me |
429 rate_limit | Больше 60 запросов в минуту на ключ | Retry-After |
Строку no-key go2llm отдаёт на запрос без ключа — это 401, а не разрыв соединения. Проверяется одной командой, и она же отделяет сеть от авторизации.
Шесть полей формы Custom model API
| Поле | Значение для go2llm | Чем ломается |
|---|---|---|
| Provider ID | go2llm | Пишется строчными, после сохранения не меняется |
| Display name | go2llm | Ни на что не влияет |
| Base URL | https://go2llm.tech | Лишний /v1 в конце даёт 404 |
| API protocol | Anthropic Messages | Другой протокол — другой endpoint и другой адрес |
| API key | gk_sk_… | Хранится write-only в $DSH_HOME/.credentials.yaml |
| Models | хотя бы один id из каталога | Пустой список — форма не сохранится |
DSH знает три протокола: openai-completions, openai-responses, anthropic-messages. У одного провайдера протокол один, поэтому шлюз, который умеет и Anthropic, и OpenAI, подключается двумя провайдерами.
Кнопка Fetch available models обращается к GET {Base URL}/models. У go2llm по корню домена такого маршрута нет — https://go2llm.tech/models отвечает 404, публичный каталог живёт на GET /v1/models. Поэтому модели надёжнее вписать руками: claude-sonnet-5, deepseek-v4-pro, kimi-k3, glm-5.3 — все id есть в ответе /v1/models.
Где ставится /v1, а где он всё ломает
Anthropic-клиент DSH добавляет путь сам: запрос уходит на POST {Base URL}/v1/messages. Значит в поле Base URL нужен корень домена, без /v1.
Ошибка в одном сегменте адреса, а в чате видна только короткая строка. При Base URL https://go2llm.tech/v1 клиент собирает https://go2llm.tech/v1/v1/messages. Ответ прода на такой путь 1 ноября 2026:
{"error":{"type":"endpoint_not_found","code":"endpoint_not_found",
"message":"/v1/v1/messages is not published by this gateway. Available: POST /v1/messages, …"}}
Шлюз сам называет правильный маршрут в тексте ошибки, но DSH показывает её коротко, и /v1/v1 в чате не видно.
Два правильных адреса для одного и того же ключа:
- Anthropic Messages (DSH, Claude Code, Claude Agent SDK):
https://go2llm.tech - OpenAI Chat Completions (OpenAI SDK, OpenCode, LiteLLM):
https://go2llm.tech/v1
Проверка за 30 секунд, без DSH
Три команды отвечают на вопрос «кто виноват — шлюз или моя сеть». Проверено 1 ноября 2026 против прода.
# 1. Каталог. Без ключа. Должен быть 200 и список моделей
curl -sS https://go2llm.tech/v1/models | head -c 200
# 2. Маршрут Anthropic. Без ключа. Должен быть 401 no-key, а не таймаут
curl -sS -X POST https://go2llm.tech/v1/messages \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":5,"messages":[{"role":"user","content":"hi"}]}' \
-w "\nHTTP %{http_code}\n"
# 3. Реальный запрос с ключом
curl -sS https://go2llm.tech/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":120,"messages":[{"role":"user","content":"Ответь одним словом: работает"}]}'
Ответ 401 no-key во второй команде означает, что go2llm принял соединение и отказал в авторизации: адрес и порт доступны. Could not resolve host в первой команде указывает на DNS или на недоступность домена с этой машины.
Ответ go2llm на POST /v1/messages содержит usage.cost_usd — фактическую стоимость вызова в долларах. То же поле приходит в финальном usage-блоке SSE-стрима, поэтому счёт можно сверять прямо из кода.
curl работает, а DSH — нет
Четыре места, где теряется соединение у приложения, а не у ключа.
- VPN или корпоративный прокси. Терминал и приложение ходят в сеть по-разному. Если DSH не использует тот же прокси, что терминал, задайте
HTTPS_PROXYиHTTP_PROXYв окружении, из которого он запускается, и перезапустите приложение. - Антивирус с проверкой TLS. Он подменяет сертификат, а Node отвергает цепочку — снаружи это выглядит как разрыв соединения.
- Кривой Base URL.
http://вместоhttps://, пробел в конце строки, скопированный вместе с адресом. Такие ошибки не воспроизводятся curl'ом, если curl набран руками. - Сеть, которая режет домен. Корпоративный фаервол и часть провайдеров блокируют неизвестные домены. Проверка та же — первая команда из блока выше.
Порядок действий простой: сначала curl, потом ключ, потом модель. Пока curl не отвечает, остальное проверять нечего.
Ключ, лимиты и что вставлять в поле
Ключ выпускается в кабинете go2llm и начинается с gk_sk_. При регистрации на баланс начисляется $1, этого хватает на первый запрос без пополнения. Оплата — pay-as-you-go: минимум $1, рублями через СБП или криптовалютой, подписок и пакетов нет.
Лимиты на ключ: 60 запросов в минуту суммарно по всем моделям и endpoints, ещё по 60 RPM отдельными счётчиками у GET /v1/me и POST /v1/messages/count_tokens, квота в долларах, список разрешённых моделей и IP allow-list. Баланс не уходит ниже нуля: шлюз резервирует оценку стоимости до вызова и списывает фактическую после. GET /v1/me отдаёт баланс, квоту и настроенный rpm_limit своего ключа.
Сколько это стоит
Каталог v43, 30 октября 2026. Цены — доллары за 1M токенов, cache — чтение кэша.
| Модель | Вход | Выход | Кэш | Официально вход / выход / кэш | Дешевле |
|---|---|---|---|---|---|
claude-sonnet-5 | 0.329 | 1.64 | 0.03288 | 2 / 10 / 0.2 | 6.1× |
claude-haiku-4-5 | 0.13 | 0.65 | 0.01299 | 1 / 5 / 0.1 | 7.7× |
deepseek-v4-pro | 0.066 | 0.198 | 0.0022 | 0.66 / 1.98 / 0.022 | 10.0× |
kimi-k3 | 0.302 | 1.51 | 0.03015 | 3 / 15 / 0.3 | 9.9× |
claude-sonnet-5-5 | 1.5 | 7.5 | 0.075 | 2 / 10 / 0.1 | 1.3× |
Четыре строки сверху — модели, которые чаще берут под кодинг-агента; пятая показывает нижнюю границу скидки, чтобы таблица не выглядела подборкой выгодных примеров. Для агента сравнивать надо не вход и выход, а смешанную цену: 10% свежего входа, 5% выхода и 85% чтения кэша. У claude-sonnet-5 выходит $0.1428 за 1M смешанных токенов против $0.87 по прайсу Anthropic (platform.claude.com). Актуальные цены и версия каталога лежат в GET /api/pricing.
Где этот способ не подойдёт
Форма Custom model API в DSH настраивает только текстовые вызовы и не знает про генерацию изображений: /v1/images/generations в ней не задать, картиночные модели подключаются отдельно, своим SDK или curl.
Каталог моделей не подставляется сам: id вписывается вручную, кнопка Fetch работает только там, где GET {Base URL}/models отвечает. Каталог go2llm меняется, поэтому id из чужой статьи полугодичной давности даст 404 model_not_found; правда всегда в GET /v1/models.
Замена подписки DeepSeek тоже не происходит: аккаунтный маршрут DSH и сторонний провайдер живут рядом, и переключение между ними ручное — в меню модели.
Что проверено, а что нет: форму DSH и ответы прода go2llm мы сверяли по документации DeepSeek Harness и curl'ом 1 ноября 2026. Полного живого прогона DSH с ключом go2llm в этом тексте нет, и выдавать его за проверенный мы не будем. Если у вас конфигурация разошлась с описанной — напишите на support@go2llm.tech или в Telegram @go2llm_support.
Что дальше
Справочник кодов ошибок и стратегий ретрая — в разделе «Ошибки API», тарификация и списания — на странице цен, быстрый старт и endpoints — в документации.
Получить ключ и сделать первый запрос за 3 минуты → https://go2llm.tech/