kb: OmniRoute Opus audit — cc/claude-opus-4-7 main, разница со старым CLIProxy 8317
This commit is contained in:
126
snippets/omniroute-models-audit.md
Normal file
126
snippets/omniroute-models-audit.md
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
date: 2026-05-06
|
||||
type: snippet
|
||||
tags: [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
|
||||
|
||||
```bash
|
||||
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`.
|
||||
|
||||
## Список моделей
|
||||
|
||||
```bash
|
||||
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`):
|
||||
|
||||
```bash
|
||||
... | 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 одной модели
|
||||
|
||||
```bash
|
||||
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 нескольких моделей
|
||||
|
||||
```bash
|
||||
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](https://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
|
||||
|
||||
```bash
|
||||
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 не подключен
|
||||
Reference in New Issue
Block a user