Files
llm-proxy/README.md
T
2026-08-30 14:06:35 +03:00

44 lines
2.7 KiB
Markdown

# llm-proxy
Прозрачная прослойка/роутер OpenAI API. Принимает `/v1/chat/completions` и
`/v1/models`, маршрутизирует между объявленными в YAML апстримами по внутреннему
учёту конкурентности и мержит `patch`-слои (`provider` → `upstream` → `model`) в
тело запроса. Подробная спецификация конфига — в `CONFIG.md`.
## Конфиг
Конфигурация — в YAML-файле (по умолчанию `config.yaml` в каталоге проекта,
CWD; переопределяется env `CONFIG_PATH`). Блоки: `server` (интерфейс биндинга
`host` + `port`, дефолты `0.0.0.0` / `8100`), `providers`, `upstreams`,
`models`. Старый механизм env-переменных (`UPSTREAM_URL`, `ROUTER_API_KEY`,
`EXCLUDED_PROVIDERS`, `THINKING_MODELS`, `PORT`) удалён — его поведение теперь
в декларативном `patch` и блоке `upstreams`, а порт/интерфейс — в блоке
`server`.
Лимит конкурентности `max_concurrency` можно задать и на провайдере (лимит по
умолчанию для его апстримов), и на апстриме (перекрывает провайдерский); без
обоих — безлимит.
| Переменная | Default | Описание |
|---|---|---|
| `CONFIG_PATH` | `config.yaml` (CWD) | Путь к YAML-конфигу |
| Ключ конфига | Default | Описание |
|---|---|---|
| `server.host` | `0.0.0.0` | Интерфейс/адрес биндинга |
| `server.port` | `8100` | Порт сервера |
Таймаут на запрос к нейронке (весь ответ, включая стриминг) — константа
`UPSTREAM_REQUEST_TIMEOUT_MS` = 5 минут; без неё дефолт CIO-движка Ktor — 15 секунд,
и длинные генерации обрываются. Значение логируется при старте.
## Сборка и деплой
- CI (Gitea Actions, на release): `./gradlew fatJar` → образ
`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).