Autoalojar Laya: API compatible con Jev, CLI, Docker y MCP

Ejecuta Laya como tu propia API con laya-serve: endpoint POST /v1/systemone compatible con Jev, variables de entorno, claves API, Docker, NixOS, CLI y MCP.

Última actualización: 24 sept 2026

El paquete oficial de Python laya sirve para mucho más que ejecutarse dentro de tu propio script. Incluye un servidor HTTP autoalojado que usa el mismo protocolo que la API alojada de Jev de TypeSafe, una herramienta de línea de comandos para pruebas rápidas y un servidor MCP opcional para clientes de agentes.

Esta guía reúne todas esas opciones. Fuente principal: Laya en GitHub.

Opción 1: el servidor HTTP compatible con Jev (laya-serve)

laya.serve expone el Router por HTTP en POST /v1/systemone. Según el proyecto, la respuesta de Laya tiene exactamente el mismo esquema que la de Jev (respuestas choice / score / noul más un bloque de uso {input_tokens, output_tokens}), así que a un cliente de Jev existente solo hay que cambiarle la URL base.

pip install "laya[serve]"                     # añade fastapi, uvicorn y python-multipart
LAYA_DEVICE=cuda LAYA_PRELOAD=1 laya-serve    # escucha en 0.0.0.0:8000 y precarga los 3 checkpoints

Envía una petición:

curl -s localhost:8000/v1/systemone -H 'content-type: application/json' -d '{
  "state": {"body": "billed twice, refund please or we cancel"},
  "questions": {"dept": {"type": "choice", "instructions": "which team?",
                "criteria": {"billing": "refunds", "tech": "bugs"}}}
}'

Configuración

VariableQué hace
LAYA_HOST, LAYA_PORTDirección y puerto de escucha (por defecto 0.0.0.0:8000)
LAYA_DEVICEcuda, cpu o mps; se pasa directamente a torch
LAYA_PRELOADCarga los checkpoints al arrancar en lugar de en la primera petición
LAYA_MODELSLista separada por comas de los checkpoints que se precargan
LAYA_THREADSLimita los hilos de torch en CPU (no más que núcleos físicos)
LAYA_AUTO_TASKActiva la detección automática de tareas
LAYA_API_KEYSi se define, los clientes deben enviar Authorization: Bearer <key>

Si el campo model del cliente nombra un checkpoint de Laya (english, multilingual o typed-decisions), se respeta; si no, el router elige uno según el alfabeto y el idioma.

Seguridad por defecto

Desde la versión 0.3.11 el servidor compara las claves API de forma segura frente a ataques de tiempo, limita el tamaño de la petición y el número de preguntas (HTTP 413), devuelve 400 para JSON mal formado y no revela rutas en los errores. La 0.3.12 aplica también el límite de tamaño a las subidas por bloques (chunked). Si expones el servidor fuera de localhost, define LAYA_API_KEY y colócalo detrás de tu proxy TLS habitual.

Opción 2: Docker

El proyecto mantiene una guía rápida con Docker Compose en docs/docker.md. Ejecuta una petición de ejemplo en CPU y conserva los modelos descargados entre ejecuciones. El archivo Compose enlaza laya-serve solo a loopback por defecto e incluye un healthcheck. También hay imágenes nativas para ARM64 y DGX Spark.

Opción 3: NixOS

El repositorio es un flake de Nix. En una máquina con GPU NVIDIA, nix run .#laya-serve compila y sirve. En un host NixOS, importa laya.nixosModules.default y activa services.laya-serve, que ejecuta una unidad systemd DynamicUser reforzada, guarda los pesos en /var/lib/laya-serve y lee un token bearer opcional mediante LoadCredential.

Opción 4: la interfaz web local

Para pruebas manuales sin escribir un cliente, examples/server.py del repositorio oficial es una app FastAPI independiente con un constructor de peticiones que muestra las respuestas choice / score / noul como barras, además de los endpoints JSON /predict y /predict/batch:

pip install "laya[serve]"
python examples/server.py        # http://127.0.0.1:8000

--no-preload carga los checkpoints bajo demanda y --device cuda|cpu|mps fija el dispositivo.

Opción 5: el comando laya

Al instalar el paquete también se instala el comando laya:

laya "I was charged twice, please refund"            # solo decisión de enrutamiento; sin conexión ni descarga
laya "Refactor this service" --predict               # respuestas completas (descarga el checkpoint una vez)
laya "Mein Konto wurde zweimal belastet" --lang de   # forzar un idioma
laya "My payment failed twice" --preset triage       # presets: triage, email, guard, moderation, router

El enrutamiento por sí solo nunca descarga un checkpoint, así que responde en milisegundos.

Opción 6: servidor MCP para agentes

Laya puede ejecutarse como servidor MCP por stdio, para que clientes MCP como Claude Desktop o Cursor usen decisiones tipadas como herramientas (laya_predict, laya_route, laya_preset, laya_status):

pip install "laya[mcp]"
laya-mcp-server
{
  "mcpServers": {
    "laya": {
      "command": "laya-mcp-server",
      "env": { "LAYA_DEVICE": "cpu" }
    }
  }
}

El servidor MCP precarga english,multilingual por defecto y deja typed-decisions bajo demanda. Igual que con el SDK, úsalo para decisiones estructuradas, no para preguntas abiertas.

Dimensionamiento: latencia y memoria

Mediciones oficiales con Router(preload=True): 32,8 ms por petición en una GPU T4 y 193–464 ms en CPU. Un Router() perezoso mantiene dos checkpoints en memoria; con max_loaded=1 recarga en cada cambio de idioma, con una mediana medida de 7,4 s en CPU y 10,3 s en una T4. Para un servidor, precarga lo que vayas a servir.

En una CPU de servidor normal de 4 núcleos (AMD EPYC 9R14, v0.3.20, sin GPU), el proyecto midió 193 ms por pregunta con laya-multilingual y unos 580 ms con los checkpoints inglés y typed-decisions. El coste crece casi linealmente con el número de preguntas, así que agruparlas ahorra poco en CPU. Si sirves solo con CPU, elige el checkpoint multilingüe y fija LAYA_THREADS al número de núcleos físicos. Consulta los benchmarks de Laya para las cifras completas y Laya en CPU para la configuración de hilos y el dimensionamiento.

Tamaños de descarga según la ficha del modelo: unos 808 MB para el checkpoint inglés y 647 MB para el multilingüe.

Capas de servicio de la comunidad

Si necesitas más que el servidor oficial, mira Arbiter (enrutamiento de checkpoints, lotes, métricas y un Playground) o el runtime MPS para macOS. La vista general de runtimes compara todas las opciones.

Relacionado

Última verificación: 24 de septiembre de 2026.