Ir al contenido

Ingeniería

Ningún servidor que arrancar. El modelo responde desde dentro de la aplicación.

Runlix ejecuta los modelos en su propio proceso: nada que lanzar antes, seis familias de modelos que funcionan de forma nativa, y la velocidad medida contra mlx-lm con la fecha de la medición al lado.

Actualizado 2026-09-13Medido 2026-09-07

Abres la aplicación y haces una pregunta. Esa es toda la secuencia.

Nada que arrancar antes Ningún servicio en segundo plano, ninguna ventana de terminal, nada escuchando en un puerto mientras no lo enciendas tú.
Nada de Python, en ninguna parte Ni en la ruta de inferencia ni en la aplicación: 229 MB instalada, 80 MB para descargar, y la compilación falla si un intérprete vuelve a colarse.
Seis familias, de forma nativa Y para las demás, una respuesta clara antes de descargar: todavía no, o nunca.
86–93 % de mlx-lm Medido el 7 de septiembre de 2026. Las cuatro proporciones están más abajo, con el día al lado.

Parece poca cosa hasta el día en que no lo es. Casi todas las formas de ejecutar un modelo en el propio Mac ponen un programa aparte en medio: la aplicación en la que haces clic habla por la red con un motor que ha escrito otra persona, y ese motor corre a su vez sobre un entorno de ejecución con sus versiones y sus maneras de romperse. Cuando esa cadena se atasca, lo que ha dejado de funcionar no es lo que instalaste, y el mensaje de error pertenece a un programa que nunca elegiste.

Runlix carga el modelo dentro de sí mismo. Cierras la aplicación y no queda nada encendido.

¿Mi modelo va a funcionar de verdad?

Seis familias funcionan de forma nativa:

  • phi3
  • llama
  • qwen2
  • qwen3
  • gemma3_text
  • deepseek_v2

En la práctica cubren la mayor parte de lo que la gente descarga — e incluyen modelos cuyo nombre no lo deja ver, porque los modelos Mistral están construidos sobre la forma de llama y también funcionan de forma nativa. Runlix te dice qué familia ha reconocido en vez de dejarte adivinar.

Para un modelo fuera de esos seis la respuesta es todavía no, con su motivo. Si mlx-lm conoce la familia, es una que el motor puede aprender, y la lista crece de una familia verificada en una. Si no la conoce nadie, Runlix también lo dice. No hay un segundo motor, más lento, escondido detrás del primero: lo que ejecutas es lo que obtienes.

Y lo sabes antes de la descarga, no después. Descargar ocho gigabytes para descubrir que el modelo no carga es la experiencia corriente de ejecutar inteligencia artificial en local, y es lo único aquí que se diseñó para que no pasara: Runlix lee primero la descripción que el modelo da de sí mismo en Hugging Face y te da un veredicto con la razón escrita al lado. Está todo en la página de modelos.

En qué se diferencia del montaje habitual

Si ya has ejecutado modelos en local, casi seguro que has usado un montaje de dos mitades: un servicio en segundo plano que sostiene el modelo, y una ventana que le habla. Ese diseño tiene ventajas reales, y merece nombrarlas primero — el servicio sigue encendido cuando cierras la ventana, varias aplicaciones pueden compartir un mismo modelo cargado, y un fallo del modelo no se lleva por delante tu interfaz.

Un servicio más una ventana

  • El servicio sigue encendido cuando cierras la ventana.
  • Varias aplicaciones pueden compartir un mismo modelo cargado.
  • Un fallo del modelo no se lleva por delante tu interfaz.
  • Algo aparte que instalar y mantener al día.
  • Un puerto, que puede que otra cosa en tu Mac ya quiera.
  • Cuando una respuesta no llega, averiguar qué mitad está atascada es cosa tuya.
  • A menudo Python debajo: un segundo entorno de software con sus versiones y sus formas de romperse un martes.

Runlix

  • Una cosa que instalar, una que cerrar.
  • Un solo sitio del que puede venir un fallo — nunca la pregunta de qué mitad.
  • Ningún puerto abierto si no lo pides.
  • Ningún segundo entorno de software que mantener.
  • Cuando cierras, no queda nada encendido.
  • No puedes compartir un modelo cargado entre aplicaciones.
  • Un fallo del modelo se lleva la aplicación.

Ninguna de las dos respuestas es la correcta en abstracto. Esta lo es si quieres que el modelo sea parte de una aplicación en vez de infraestructura que mantienes.

Cómo de rápido, y comparado con qué

La velocidad por sí sola es un número sin significado. La manera honesta de declararla es como proporción frente a una referencia que cualquiera puede ejecutar — mlx-lm, la biblioteca que usan los propios ejemplos de Apple — con el día de la medición escrito al lado, porque un número en una página comercial no tiene a nadie que lo mantenga.

Generación voraz 89 % 253 tok/s · referencia 284 tok/s
Temperatura 0,8 93 % 229 tok/s · referencia 246 tok/s
Penalización de repetición 1,1 93 % 228 tok/s · referencia 246 tok/s
Prompt de 4096 tokens 86 % 1865 ms · referencia 1609 ms

Referencia: mlx-lm = 100 %. Medido el 7 de septiembre de 2026 en Llama-3.2-1B a 4 bits. Pico de memoria en el prompt de 4096 tokens: 1115 MB.

Runlix va por detrás de la referencia en todas las filas, y se dice en vez de esconderse. Entre el 86 % y el 93 % de una biblioteca con años de atención detrás, a cambio de que el modelo viva dentro de la aplicación en lugar de detrás de un puerto de red. Si lo único que te importa son los tokens por segundo, la referencia está ahí y puedes ejecutarla.

Qué le hace a tu Mac

Puedes tener más de un modelo cargado a la vez y pasar de uno a otro sin esperar una recarga cada vez. Cuando no queda sitio, se aparta el que llevas más tiempo sin usar — nunca el que te está respondiendo en ese momento.

El límite no es la RAM impresa en la caja. Es cuánta declara el sistema gráfico que está dispuesto a ceder, y se le pregunta en vez de darlo por hecho.

23347 MB Lo que un Mac de 24 GB ofreció de verdad, preguntado en vez de dado por hecho.
1,68× Lo que cuesta una pregunta larga más allá de los pesos del modelo. Medido en un modelo de 1B, redondeado al doble por prudencia.
1 Modelos que se mantienen cargados cuando la máquina no dice cuál es su techo — en vez de adivinar un número.

Qué significa esto en el día a día: en un Mac con memoria de sobra puedes dejar cargados a la vez un modelo pequeño y rápido y uno grande y cuidadoso, y moverte entre ellos dentro de una conversación sin pausas. En una máquina más justa, la aplicación hace sitio en silencio y recarga cuando vuelves — más lento, pero nunca un rechazo y nunca un cierre por quedarse sin memoria.

Qué se niega a hacer, y qué te cuesta

Se niega en vez de adivinar

Algunos modelos se describen de maneras que este motor no implementa. Cuando pasa, el modelo no carga, con el motivo dicho, en vez de cargar igualmente.

Esa negativa es la función. Un motor de inferencia casi correcto no se cae: produce texto fluido, seguro de sí mismo y equivocado, y te enteras semanas después o nunca. Puestos a elegir entre un error hoy y una equivocación plausible que quizá nunca detectes, este se equivoca hoy.

Dos límites que conviene conocer antes de empezar: modelos solo en formato MLX — nada de GGUF, que es una decisión y no una esquina sin terminar — y ningún modelo de visión. Ambas cosas se comprueban contra Hugging Face antes de que gastes la descarga.

Y si se cae, se lleva la aplicación

Ejecutar el modelo dentro de la aplicación es un intercambio, y este es el lado que pagas: si el código del modelo se cae, se lleva la aplicación con él. No hay un servidor en medio que lo absorba.

Se eligió deliberadamente, y la salida se mantiene preparada: el motor está separado de la aplicación por una frontera diseñada para poder devolverlo a un proceso propio el día en que ese intercambio deje de compensar.

Decirlo claramente forma parte del asunto. Estás eligiendo un arreglo, no te están vendiendo una comida gratis.

Si quieres comprobar algo de esto

Nada de lo anterior pide que se lo crean.

La corrección

Se usa mlx-lm para generar la secuencia exacta de palabras que un modelo debe producir ante una pregunta dada; el motor tiene que reproducirla, y la construcción falla si no lo consigue. Donde la propia referencia está genuinamente indecisa entre dos palabras, la prueba registra el margen en vez de exigir acuerdo sobre un cara o cruz.

La lista de las seis

No es una afirmación de folleto. Cada familia queda registrada junto con la versión de mlx-lm de la que se tradujo y la fecha de su última verificación, y la construcción falla si una familia se declara compatible sin ambas.

Los números de velocidad

Cada proporción de arriba lleva el día en que se tomó y el modelo en el que se tomó. Repítelos cuando quieras: la referencia es una biblioteca pública.

El código de terceros

La interfaz MLX de Apple viaja dentro del proyecto exactamente como se publicó, con su huella verificada antes de cada construcción. Las correcciones viven en parches aparte, y la construcción se para y nombra el parche si alguno ya no aplica — así un cambio no puede desaparecer en silencio en la siguiente actualización.

La ingeniería que hay detrás de estas comprobaciones — por qué el nombre mal escrito de una función al cruzar la frontera entre dos lenguajes no es un error de compilación, y cómo un nombre correcto con el tipo equivocado convirtió un techo de memoria de 23 GB en 2,8 GB sin llegar a caerse nunca — está escrita en las notas, que es donde va ese tipo de cosa.