Always set DeepSeek base_url to avoid OpenRouter 401

Leftover model.base_url pointing at openrouter.ai causes Missing
Authentication header even with a valid DEEPSEEK_API_KEY.
This commit is contained in:
domfelipe 2026-08-03 00:01:28 -03:00
parent 89b036652c
commit f86c06d521
4 changed files with 21 additions and 0 deletions

View file

@ -141,6 +141,7 @@ Equivalente manual:
hermes config set DEEPSEEK_API_KEY "sk-..." hermes config set DEEPSEEK_API_KEY "sk-..."
hermes config set model.provider deepseek hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-flash hermes config set model.default deepseek-v4-flash
hermes config set model.base_url "https://api.deepseek.com/v1"
``` ```
Não imprime secrets. Não imprime secrets.

View file

@ -87,13 +87,17 @@ Ask:
hermes config set DEEPSEEK_API_KEY "THE_KEY" hermes config set DEEPSEEK_API_KEY "THE_KEY"
hermes config set model.provider deepseek hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-flash hermes config set model.default deepseek-v4-flash
hermes config set model.base_url "https://api.deepseek.com/v1"
``` ```
Important: always set `model.base_url` to the DeepSeek API. A leftover OpenRouter URL causes HTTP 401 ("Missing Authentication header") even with a valid `DEEPSEEK_API_KEY`.
4. Verify with: 4. Verify with:
```bash ```bash
hermes config get model.default hermes config get model.default
hermes config get model.provider hermes config get model.provider
hermes config get model.base_url
``` ```
Optional: Offer fallback model `deepseek-v4-pro` if the user wants a stronger model (higher cost). Optional: Offer fallback model `deepseek-v4-pro` if the user wants a stronger model (higher cost).
@ -232,6 +236,7 @@ curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-
hermes config set DEEPSEEK_API_KEY "sk-..." hermes config set DEEPSEEK_API_KEY "sk-..."
hermes config set model.provider deepseek hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-flash hermes config set model.default deepseek-v4-flash
hermes config set model.base_url "https://api.deepseek.com/v1"
hermes config set TELEGRAM_BOT_TOKEN "..." hermes config set TELEGRAM_BOT_TOKEN "..."
hermes config set TELEGRAM_ALLOWED_USERS "123456789" hermes config set TELEGRAM_ALLOWED_USERS "123456789"

View file

@ -25,6 +25,7 @@ curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-
hermes config set DEEPSEEK_API_KEY "THE_KEY" hermes config set DEEPSEEK_API_KEY "THE_KEY"
hermes config set model.provider deepseek hermes config set model.provider deepseek
hermes config set model.default deepseek-v4-flash hermes config set model.default deepseek-v4-flash
hermes config set model.base_url "https://api.deepseek.com/v1"
``` ```
3. Check: 3. Check:
@ -32,9 +33,16 @@ hermes config set model.default deepseek-v4-flash
```bash ```bash
hermes config get model.default hermes config get model.default
hermes config get model.provider hermes config get model.provider
hermes config get model.base_url
# key lives in ~/.hermes/.env — never cat full file in front of client # key lives in ~/.hermes/.env — never cat full file in front of client
``` ```
If HTTP 401 "Missing Authentication header" with a valid key: `model.base_url` is probably still OpenRouter. Force DeepSeek:
```bash
hermes config set model.base_url "https://api.deepseek.com/v1"
```
4. Test connectivity: `curl -sI https://api.deepseek.com | head -1` 4. Test connectivity: `curl -sI https://api.deepseek.com | head -1`
5. If the model name is rejected, stick to Hermes-supported IDs: `deepseek-v4-flash` or `deepseek-v4-pro` (legacy `deepseek-chat` / `deepseek-reasoner` were retired). 5. If the model name is rejected, stick to Hermes-supported IDs: `deepseek-v4-flash` or `deepseek-v4-pro` (legacy `deepseek-chat` / `deepseek-reasoner` were retired).

View file

@ -52,13 +52,20 @@ if [[ ! "$TG_USERS" =~ ^[0-9]+(,[0-9]+)*$ ]]; then
exit 1 exit 1
fi fi
BASE_URL="https://api.deepseek.com/v1"
if [[ "$PROVIDER" == "openrouter" ]]; then
BASE_URL="https://openrouter.ai/api/v1"
fi
hermes config set DEEPSEEK_API_KEY "$DS_KEY" hermes config set DEEPSEEK_API_KEY "$DS_KEY"
hermes config set model.provider "$PROVIDER" hermes config set model.provider "$PROVIDER"
hermes config set model.default "$MODEL" hermes config set model.default "$MODEL"
hermes config set model.base_url "$BASE_URL"
hermes config set TELEGRAM_BOT_TOKEN "$TG_TOKEN" hermes config set TELEGRAM_BOT_TOKEN "$TG_TOKEN"
hermes config set TELEGRAM_ALLOWED_USERS "$TG_USERS" hermes config set TELEGRAM_ALLOWED_USERS "$TG_USERS"
echo "ok: provider=$(hermes config get model.provider 2>/dev/null || echo "$PROVIDER")" echo "ok: provider=$(hermes config get model.provider 2>/dev/null || echo "$PROVIDER")"
echo "ok: model=$(hermes config get model.default 2>/dev/null || echo "$MODEL")" echo "ok: model=$(hermes config get model.default 2>/dev/null || echo "$MODEL")"
echo "ok: base_url=$(hermes config get model.base_url 2>/dev/null || echo "$BASE_URL")"
echo "ok: allowed_users=$TG_USERS" echo "ok: allowed_users=$TG_USERS"
echo "ok: secrets written (not displayed)" echo "ok: secrets written (not displayed)"