Files
knowledge-base/snippets/omniroute-models-audit.md

6.4 KiB
Raw Blame History

date, type, tags
date type tags
2026-05-06 snippet
omniroute
claude
opus
smoke-test
audit
lxc-132

OmniRoute — аудит живости моделей (smoke-test)

Каталог OmniRoute (/v1/models) перечисляет все модели, подключенные к провайдерам, но это не значит что они живые. Реальная проверка — пинг через /v1/chat/completions с max_tokens: 10. Пригождается каждые 1-2 недели или после npm install omniroute@latest чтобы убедиться что важные источники Opus/Sonnet не отвалились.

См. также: ../decisions/2026-05-06-openclaw-opus-4-7-via-max-cliproxy — последний полный аудит и результаты.

Где живёт OmniRoute

Артефакт Путь / адрес
LXC 132, hostname code-server, IP 10.0.0.179
Service systemctl status omniroute
Cmd /usr/bin/node /root/.npm/_npx/cb5891f90ae65d14/node_modules/omniroute/app/server.js
EnvFile /root/OmniRoute/.env
Repo /root/OmniRoute/ (Git)
Storage /root/.omniroute/storage.sqlite
Local API http://localhost:20128 (порт из .env PORT=20128)
Public https://ai.dttb.ru (через NPM, требует Bearer)

Получить API key

sshpass -p '1qaz!QAZ' ssh root@10.0.0.179 \
  "sqlite3 /root/.omniroute/storage.sqlite \"SELECT id, key, name FROM api_keys;\""

Использовать name=test-key для тестов чтобы не задеть production claw.

Список моделей

KEY='<key-из-sqlite>'
sshpass -p '1qaz!QAZ' ssh root@10.0.0.179 \
  "curl -s -H 'Authorization: Bearer $KEY' http://localhost:20128/v1/models"

Парсинг с фильтром по подстроке (например все opus):

... | python3 -c '
import sys, json
d = json.load(sys.stdin)
models = d.get("data", d) if isinstance(d, dict) else d
for m in models:
    if "opus" in m["id"].lower():
        print(m["id"])
'

Smoke test одной модели

KEY='<api-key>'
MODEL='cc/claude-opus-4-7'

curl -s --max-time 30 -X POST http://localhost:20128/v1/chat/completions \
  -H "Authorization: Bearer $KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "'$MODEL'",
    "messages": [{"role":"user","content":"Reply only: ok"}],
    "max_tokens": 10,
    "stream": false
  }' | python3 -m json.tool

Ожидание choices[0].message.content = "ok" (или похожее короткое). Если streaming возвращается даже при stream:false — это чистый прокси-bypass от Claude Code OAuth, тоже норм.

Batch smoke test нескольких моделей

sshpass -p '1qaz!QAZ' ssh root@10.0.0.179 "
KEY='<api-key>'
URL='http://localhost:20128/v1/chat/completions'

for model in 'cc/claude-opus-4-7' 'cc/claude-opus-4-6' 'claude/claude-opus-4-7' 'kr/claude-opus-4.6' 'gh/claude-opus-4.6' 'antigravity/claude-opus-4-6-thinking'; do
  echo '--- '\$model' ---'
  curl -s --max-time 25 -X POST \"\$URL\" \\
    -H \"Authorization: Bearer \$KEY\" \\
    -H 'Content-Type: application/json' \\
    -d '{\"model\":\"'\$model'\",\"messages\":[{\"role\":\"user\",\"content\":\"Reply ok\"}],\"max_tokens\":10}' \\
    | head -c 350
  echo ''
done
"

Как читать ошибки

Сообщение Что значит Как чинить
Unauthorized / Missing API key Нет Bearer header или ключ отозван Достать новый из api_keys
[400]: The requested model is not available for integrator "vscode-chat" MS GitHub Copilot integrator не отдаёт эту модель Использовать другой источник; проверить какие модели MS сейчас выдаёт (в самом сообщении список Available)
[400]: The requested model is not supported OmniRoute шлёт ID который провайдер не понимает (часто 4.6 vs 4-6) Баг mapping в OmniRoute → npm install omniroute@latest или вручную писать поддерживаемый ID
[400]: Invalid model. Please select a different model Провайдер (Kiro/Kilo) не выдаёт эту модель в их каталоге Использовать другую модель этого провайдера (у Kiro есть только Sonnet)
Missing Google projectId for Antigravity account. Please reconnect OAuth in Providers → Antigravity OAuth-сессия Google Antigravity без активного Cloud Code project Зайти на antigravity.google, создать project, OmniRoute Dashboard → Providers → Antigravity → Reconnect
Empty response Провайдер не отвечает / dead Проверить аккаунт/ключ провайдера в OmniRoute Dashboard
401 от Anthropic CLIProxy OAuth протух (Claude Code session) OmniRoute Dashboard → Providers → Claude → Reconnect

Логи OmniRoute

sshpass -p '1qaz!QAZ' ssh root@10.0.0.179 "journalctl -u omniroute --since '1 hour ago' --no-pager | tail -50"

Ключевые маркеры в логах:

  • [USAGE] <PROVIDER> — фактические вызовы (KIRO, CC, CLAUDE, ANTIGRAVITY...)
  • model fallback decision — failover включился
  • Account quota exceeded — pool аккаунта провайдера исчерпан
  • circuit breaker open — провайдер временно отключён OmniRoute из-за серии ошибок
  • MEMORY_EXTRACTION — Memory Tool через OmniRoute

Известные «вечные» гнилые модели (на 2026-05-06)

Не тратить на них тесты, пока OmniRoute не обновится:

  • gh/claude-opus-4.6 — MS убрала из integrator scope
  • gh/claude-opus-4.7баг ID mapping
  • kr/claude-opus-* / kiro/claude-opus-* — Kiro Opus не выдаёт в принципе
  • kc/anthropic/* / kilocode/anthropic/* — провайдеры мёртвы / не настроены
  • antigravity/claude-opus-4-6-thinking — пока OAuth projectId не подключен