AI DevelopmentOpen Source

laya-mlx: Laya nativo en Apple Silicon

22 de septiembre de 2026
8 min de lectura
MacBook corriendo un modelo local de decisiones IA sin conexión en Apple Silicon
Compartir:

Laya es la alternativa abierta a los modelos de decisiones hosteados: en vez de generar texto token por token, responde preguntas tipadas — choice, score, verdadero/falso — en un solo forward pass. Y laya-mlx, un port no oficial publicado como v0.1.0 el 19 de septiembre de 2026, lo corre nativo en Apple MLX.

Sin PyTorch, sin runtime de Transformers, sin API en la nube: 7.39 ms P50 con el checkpoint multilingüe en un M3 Max, con pico de 687.6 MiB. Acá va qué es, cómo funciona en 4 pasos y cómo correrlo en 5 minutos.

1. Qué es: stars, licencia, checkpoints

laya-mlx de mizorewww es una reimplementación independiente de la inferencia de Laya en MLX para Apple Silicon — no es un release oficial de Convai Innovations. El Laya original ronda las 10.4k stars; el port superó las 549 stars en su primer día (20 de septiembre de 2026) y está cerca de las 5.1k al momento de escribir. Licencia: Apache-2.0. El paquete v0.1.0 llegó a PyPI el 19 de septiembre de 2026, y la v0.2.0 ya está publicada ahí, así que el pip install común trae lo último.

Repo

github.com/mizorewww/laya-mlx — port no oficial, Apache-2.0

Checkpoints (FP16, Hugging Face)

aac6fef/laya-mlx (421M EN, 512 tokens) · aac6fef/laya-multilingual-mlx (322M, 1,024 tokens) · aac6fef/laya-typed-decisions-mlx (421M, 1,024 tokens)

Números en M3 Max (reportados por el proyecto)

P50 13.42 ms EN / 7.39 ms multilingüe · batch-50: 146.8 q/s EN / 395.0 q/s multilingüe · pico 943.6 MiB EN / 687.6 MiB multilingüe

Fidelidad

63/63 preguntas de validación coinciden con el PyTorch original en argmax en FP32 y FP16 (378/378 comparaciones), según BENCHMARKS.md

Nota de versión (leé esto primero)

Este post cubre la v0.1.0 (19 de septiembre de 2026) y cada comando fue verificado contra el repo y PyPI. Como la v0.2.0 ya está en PyPI, corré pip install laya-mlx para obtener lo último — la instalación, el import y la carga no cambian.

2. Arquitectura en 4 pasos

No hay generación de texto en ningún punto del pipeline. Declarás la forma de la pregunta por adelantado y cabezales dedicados devuelven probabilidades calibradas. Cero output tokens es todo el pitch.

1

Paso 1 — Estado + pregunta tipada

Pasás un estado (texto, JSON o conversación) más preguntas tipadas como choice (elegir una etiqueta), score (niveles ordenados de rúbrica) o noul (probabilidad de que algo sea verdad).

2

Paso 2 — Encoder bidireccional

Un forward pass por ModernBERT-large (checkpoints EN de 421M) o mmBERT-base (multilingüe de 322M). El modelo lee estado y pregunta juntos — sin decodificación autoregresiva.

3

Paso 3 — Stack de decisión en MLX

Un decision Transformer aprendido más cabezales de scoring y acción corren íntegramente en MLX sobre Apple Silicon. La tokenización usa el tokenizer Rust de Hugging Face; PyTorch y el runtime de Transformers no se necesitan para inferencia.

4

Paso 4 — Probabilidades calibradas

Recibís respuestas con probabilidades calibradas, redondeo a cuatro decimales, probabilidades de acción y campos de token usage — el mismo schema del upstream, con su calibración de temperatura incluida.

3. Quickstart (verificado)

Necesitás una Mac con Apple Silicon, macOS 14+ y Python 3.11+. La primera carga descarga el checkpoint; después todo corre 100% en local.

pip install laya-mlx
import laya_mlx as laya
agent = laya.load("aac6fef/laya-mlx")
result = agent.predict(
    "I was billed twice. Please refund the duplicate.",
    {
        "department": {
            "type": "choice",
            "instructions": "Who should handle this?",
            "criteria": ["billing", "technical", "sales"],
        }
    },
)
print(result["answers"]["department"])

El checkpoint multilingüe (contexto de 1024 tokens, ~7 ms P50) se carga igual con aac6fef/laya-multilingual-mlx. El artefacto EN de 843 MB se descarga una sola vez; un benchmark independiente de Anthus reprodujo el setup con make laya y confirmó la descarga de ~843 MB.

Qué verifiqué antes de publicar

URL del repo, pip install laya-mlx, import laya_mlx as laya, load aac6fef/laya-mlx, requisitos Python 3.11+ y macOS 14+, y cada cifra de benchmark — todo contra el README del repo, BENCHMARKS.md, PyPI y los write-ups de HTX y Anthus. Sin flags inventados: el snippet de arriba es el ejemplo mínimo del propio README.

4. Dónde brilla: casos de uso

Pensá en decisiones de alta frecuencia, input corto y output estructurado — la capa entre tu app y un LLM, no su reemplazo.

🎧

Triage de soporte

Derivar cada ticket (billing vs técnico vs ventas) más score de urgencia e intención de reembolso en una llamada de ~13 ms en vez de un round trip a un LLM.

🤖

Guardrails de agentes

Evaluar o aprobar acciones propuestas con P(true) calibrado antes de ejecutar — lo bastante barato para llamarlo en cada paso.

🎮

Loops en tiempo real

La demo Snake re-evalúa cada movimiento en local a 75.40 movimientos/s con cero muertes en 2,400 movimientos — prueba de que decisiones por frame son viables.

🏷️

Etiquetado en batch

395 preguntas/s en el checkpoint multilingüe hacen viable la clasificación y el reranking masivo en una sola Mac.

5. Cuándo NO usarlo

Chico y rápido no significa universal. Evitá laya-mlx cuando aplique cualquiera de estos casos:

  • Necesitás texto generado — resúmenes, chat, código. Este modelo solo devuelve decisiones tipadas, nunca prosa.
  • Tus inputs son documentos largos. El checkpoint EN llega a 512 tokens y el resto a 1,024 — estado, instrucciones y opciones comparten ese presupuesto, y el exceso se trunca en silencio.
  • No estás en Apple Silicon. Es un runtime MLX nativo; en otro hardware corré el Laya original sobre PyTorch.
  • Tus preguntas choice tienen decenas de opciones. Todas las etiquetas comparten un presupuesto de tokens (Convai atribuye su flojo Banking77 exactamente a esto), así que filtrá a top-k primero o dividí la pregunta.
  • Querés cero ops. Una API hosteada solo pide una key; acá el checkpoint, el runtime y la calibración son tuyos.

Regla de oro

Si tu decisión entra en una frase y se repite miles de veces por día, laya-mlx es ideal. Si necesita un párrafo de razonamiento, llamá a un LLM — o usá laya-mlx como filtro rápido delante de uno.

6. Límites honestos

Cada número de este post fue reportado por el proyecto en una sola máquina: un M3 Max con GPU de 40 núcleos y 128 GiB de memoria unificada. Tomalos como techo, no como promesa — Apple Silicon más chicos van a diferir, y el CI hosteado solo corre tests CPU de modelos chicos mientras los benchmarks GPU se miden en local.

  • Contexto: 512 tokens EN, 1,024 multilingüe y typed-decisions — preguntas y opciones incluidas.
  • La calidad multilingüe es despareja entre idiomas y puede necesitar fine-tuning de dominio, según los docs del upstream.
  • Cada pregunta extra cuesta un forward pass (~8 ms por pregunta agregada en un M1 Max según el test de Anthus) — a diferencia de modelos hosteados donde las preguntas viajan en un request.
  • El port preserva calibración y schema del upstream, pero los límites de calidad del modelo son los de los checkpoints originales.

Reproducibilidad

Pineá una revisión del Hub cuando importe, validá en tu propio workload y re-chequeá la calibración después de cualquier fine-tune — Anthus mostró que un Laya ajustado cambia respuestas a preguntas no relacionadas del mismo scorecard.

Conclusión

laya-mlx es el tipo de repo que se gana sus stars: un port enfocado y bien benchmarkeado que convierte un modelo de decisiones de 421M de parámetros en una primitiva local sub-15 ms para apps Mac. Milisegundos de un dígito, menos de 1 GB, cero tokens, sin factura cloud.

Mi veredicto: si construís sobre Apple Silicon y tu problema son decisiones en vez de prosa, probalo esta semana — pip install laya-mlx y el snippet de cinco líneas de arriba es toda la evaluación. Solo respetá el presupuesto de 512/1,024 tokens y medí en tu propio chip antes de citar los números del M3 Max.

De un vistazo

  • • laya-mlx v0.1.0 (19 sep 2026), Apache-2.0, port MLX no oficial
  • • 7.39 ms P50 multilingüe / 13.42 ms EN, 395 q/s en batch, <1 GB pico
  • • pip install laya-mlx → import laya_mlx → load aac6fef/laya-mlx
Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego