Sobre el proyecto
llama-swap es un proxy para ejecutar varios modelos de IA generativa en una sola máquina y alternar entre ellos bajo demanda. Se sitúa delante de cualquier servidor de inferencia compatible con la API de OpenAI o Anthropic, lee el campo `model` de cada solicitud entrante y arranca o reemplaza el servidor upstream necesario para atenderla. El proyecto está escrito en Go, se distribuye como un único binario más un archivo de configuración y no declara dependencias externas.
Los upstreams compatibles incluyen llama.cpp y sus forks, vllm, stable-diffusion.cpp, whisper.cpp, audio.cpp y ComfyUI. Como el proxy opera a nivel de protocolo en lugar de estar atado a un motor concreto, el README señala que los servidores de inferencia pueden actualizarse de forma independiente.
Superficie de API
- Endpoints estilo OpenAI: `v1/completions`, `v1/chat/completions`, `v1/responses`, `v1/embeddings`, `v1/models`, `v1/audio/speech`, `v1/audio/transcriptions`, `v1/audio/voices`, `v1/images/generations` y `v1/images/edits`.
- Endpoints estilo Anthropic: `v1/messages` y `v1/messages/count_tokens`.
- Extras de llama-server: `v1/rerank`, `v1/reranking`, `/rerank`, `/infill`, `/completion`, `/models` y `/props`.
- Endpoints SDAPI del servidor de stable-diffusion.cpp, además de los endpoints de tareas de audio.cpp y un endpoint personalizado `/comfyui/`.
- Endpoints de gestión: `/ui`, `/upstream/:model_id`, `/running`, `POST /api/models/unload` (todos los modelos) y `POST /api/models/unload/:model_id`, listado y activación de perfiles mediante `/api/profiles`, `/health` y `/metrics` para métricas de sistema y GPU de Prometheus.
- Endpoints de logs: `/logs` para logs de texto plano almacenados en búfer, `/logs/stream` para streaming en vivo, con variantes `/logs/stream/proxy`, `/logs/stream/upstream` y `/logs/stream/{model_id}`; `?no-history` transmite solo líneas nuevas.
Configuración y características
Una configuración mínima declara un mapa `models` donde cada entrada tiene un ID y un `cmd`; `${PORT}` se sustituye por un puerto asignado automáticamente. Los ajustes opcionales incluyen `ttl` para la descarga automática tras inactividad, `unloadTimeout`, `aliases` para nombres de modelo familiares, variables `env`, `cmdStop` para un apagado graceful de Docker/Podman, `useModelName`, `filters` de solicitud (`stripParams`, `setParams`, `setParamsByID`), `hooks` para precarga al inicio, `macros` y un DSL `matrix` para ejecutar modelos concurrentes con lógica de intercambio personalizada. Se pueden definir claves de API para restringir el acceso a los endpoints, y los perfiles permiten cambiar el enrutamiento de IDs de modelo en tiempo de ejecución.
La interfaz web incluida ofrece un playground, métricas de tokens, inspección de solicitudes/respuestas, carga y descarga manual de modelos y streaming de logs en tiempo real. Una página de Ayuda ejecuta un modelo local con capacidad de herramientas contra la propia documentación de llama-swap, y las mismas herramientas se exponen como endpoint MCP en `/api/mcp`.
Instalación
Las opciones listadas son Docker, Homebrew, MacPorts, WinGet, binarios de release (Linux, macOS, Windows, FreeBSD) y compilación desde el código fuente con Go y Node.js. Las imágenes Docker nightly vienen en dos familias: imágenes unificadas que incluyen llama-server, ik-llama-server, stable-diffusion.cpp, whisper.cpp, audio.cpp y llama-swap (variantes CUDA 12, CUDA 13 y Vulkan, recomendadas), y una imagen legacy basada en el propio contenedor `llama-server` de llama.cpp. Las imágenes unificadas pueden configurarse mediante variables de entorno `LLAMA_SWAP_*` que se corresponden con flags de línea de comandos.
Notas operativas
El README recomienda desactivar el buffering de respuestas cuando llama-swap se coloca detrás de nginx, ya que el buffering rompe SSE y las chat completions en streaming; llama-swap también establece `X-Accel-Buffering: no` en las respuestas SSE. Para servidores basados en Python como vllm o tabbyAPI, se recomienda ejecutarlos bajo Podman o Docker para aislar el entorno y gestionar correctamente `SIGTERM`.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.