# 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:` (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).