Об этом проекте

llama-swap — это прокси для запуска нескольких генеративных ИИ-моделей на одной машине и переключения между ними по требованию. Он размещается перед любым сервером инференса, совместимым с API OpenAI или Anthropic, читает поле `model` из каждого входящего запроса и запускает или заменяет вышестоящий сервер, необходимый для его обслуживания. Проект написан на Go, поставляется как один бинарный файл плюс один файл конфигурации и, согласно заявлению, не имеет внешних зависимостей. Поддерживаемые вышестоящие серверы включают llama.cpp и его форки, vllm, stable-diffusion.cpp, whisper.cpp, audio.cpp и ComfyUI. Поскольку прокси работает на уровне протокола, а не привязан к конкретному движку, в README отмечается, что серверы инференса можно обновлять независимо. Поверхность API - Эндпоинты в стиле OpenAI: `v1/completions`, `v1/chat/completions`, `v1/responses`, `v1/embeddings`, `v1/models`, `v1/audio/speech`, `v1/audio/transcriptions`, `v1/audio/voices`, `v1/images/generations` и `v1/images/edits`. - Эндпоинты в стиле Anthropic: `v1/messages` и `v1/messages/count_tokens`. - Дополнения llama-server: `v1/rerank`, `v1/reranking`, `/rerank`, `/infill`, `/completion`, `/models` и `/props`. - Эндпоинты SDAPI от сервера stable-diffusion.cpp, а также эндпоинты задач audio.cpp и пользовательский эндпоинт `/comfyui/`. - Эндпоинты управления: `/ui`, `/upstream/:model_id`, `/running`, `POST /api/models/unload` (все модели) и `POST /api/models/unload/:model_id`, список профилей и их активация через `/api/profiles`, `/health` и `/metrics` для системных метрик Prometheus и метрик GPU. - Эндпоинты логов: `/logs` для буферизованных логов в виде простого текста, `/logs/stream` для потоковой передачи в реальном времени, с вариантами `/logs/stream/proxy`, `/logs/stream/upstream` и `/logs/stream/{model_id}`; `?no-history` передаёт потоком только новые строки. Конфигурация и возможности Минимальная конфигурация объявляет карту `models`, где каждая запись имеет ID и `cmd`; `${PORT}` заменяется на автоматически назначенный порт. Необязательные настройки включают `ttl` для автоматической выгрузки после простоя, `unloadTimeout`, `aliases` для привычных имён моделей, переменные `env`, `cmdStop` для корректного завершения Docker/Podman, `useModelName`, `filters` запросов (`stripParams`, `setParams`, `setParamsByID`), `hooks` для предварительной загрузки при старте, `macros` и DSL `matrix` для запуска параллельных моделей с пользовательской логикой переключения. Можно определить API-ключи для ограничения доступа к эндпоинтам, а профили позволяют переключать маршрутизацию по ID модели во время работы. Встроенный веб-интерфейс предоставляет площадку для экспериментов, метрики токенов, инспекцию запросов и ответов, ручную загрузку и выгрузку моделей и потоковую передачу логов в реальном времени. Страница Help запускает локальную модель с поддержкой инструментов против собственной документации llama-swap, и те же инструменты доступны как эндпоинт MCP по адресу `/api/mcp`. Установка Перечисленные варианты: Docker, Homebrew, MacPorts, WinGet, релизные бинарные файлы (Linux, macOS, Windows, FreeBSD) и сборка из исходного кода с помощью Go и Node.js. Ночные Docker-образы бывают двух семейств: унифицированные образы, включающие llama-server, ik-llama-server, stable-diffusion.cpp, whisper.cpp, audio.cpp и llama-swap (варианты CUDA 12, CUDA 13 и Vulkan, рекомендуются), и устаревший образ на основе собственного контейнера `llama-server` из llama.cpp. Унифицированные образы можно настраивать через переменные окружения `LLAMA_SWAP_*`, сопоставленные с флагами командной строки. Эксплуатационные замечания В README рекомендуется отключать буферизацию ответов при размещении llama-swap за nginx, поскольку буферизация нарушает SSE и потоковые chat completions; llama-swap также устанавливает `X-Accel-Buffering: no` в SSE-ответах. Для серверов на Python, таких как vllm или tabbyAPI, рекомендуется запускать их под Podman или Docker для изоляции окружения и корректной обработки `SIGTERM`.