6.4 KiB
date, type, tags
| date | type | tags | ||||||
|---|---|---|---|---|---|---|---|---|
| 2026-05-06 | snippet |
|
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 scopegh/claude-opus-4.7— баг ID mappingkr/claude-opus-*/kiro/claude-opus-*— Kiro Opus не выдаёт в принципеkc/anthropic/*/kilocode/anthropic/*— провайдеры мёртвы / не настроеныantigravity/claude-opus-4-6-thinking— пока OAuth projectId не подключен