feat: llm-proxy — OpenAI-прослойка перед RouterAI (provider.ignore + -no-think)

This commit is contained in:
Hermes Agent
2026-08-20 13:14:52 +03:00
commit 5f3ae73e36
12 changed files with 610 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# llm-proxy
Прозрачная прослойка OpenAI API перед RouterAI (routerai.ru). Принимает
`/v1/chat/completions` и `/v1/models`, модифицирует запрос и проксирует дальше.
## Что добавляет в запрос
1. **`provider.ignore`** — исключение дорогих провайдеров (список из env
`EXCLUDED_PROVIDERS`, напр. `deepseek`) + `allow_fallbacks: false`
(иначе ignore не жёсткий — RouterAI может уйти на исключённого резервной
попыткой).
2. **`reasoning: {"enabled": false}`** — для моделей с суффиксом `-no-think`
(отключение думанья; проверено на `deepseek/deepseek-v4-flash-0731`:
работает `reasoning.enabled=false`, не работает `include_reasoning=false`).
Суффикс снимается перед отправкой — RouterAI видит оригинальное имя.
## Каталог /v1/models
Модели, чей id содержит любую из подстрок `THINKING_MODELS`, дублируются в
каталоге с суффиксом `-no-think` (напр. `deepseek/deepseek-v4-flash-0731-no-think`).
## Конфиг (env)
| Переменная | Default | Описание |
|---|---|---|
| `PORT` | 8100 | Порт сервера |
| `UPSTREAM_URL` | `https://routerai.ru/api/v1` | Куда проксировать |
| `ROUTER_API_KEY` | — (обязателен) | Bearer-ключ RouterAI |
| `EXCLUDED_PROVIDERS` | пусто | slug'и провайдеров через запятую |
| `THINKING_MODELS` | `deepseek/deepseek-v4-flash-0731,deepseek/deepseek-v4-flash` | подстроки id «думающих» моделей |
## Сборка и деплой
- CI (Gitea Actions, на release): `./gradlew shadowJar` → образ
`images.binom.pw/llm-proxy:<tag>` (zot).
- Запуск на 76.179 (llm-router): `podman-compose up -d` из `podman-compose.yaml`
(образ тянется из `images.binom.pw`, сеть `bifrost_default` — туда же Bifrost
ходит по имени `llm-proxy`).
- Bifrost: в `config_providers` провайдера `Routerai` `network_config_json.base_url`
= `http://llm-proxy:8100` (после смены — рестарт bifrost_gateway).