41 lines
2.3 KiB
Markdown
41 lines
2.3 KiB
Markdown
# 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).
|