Modelos Open Source·7 min de lectura

Asistente de código con IA offline: Guía de LLMs locales

Ejecuta un asistente de código con IA offline en Apple Silicon. Aprende cómo Qwen 2.5 Coder y MLX completan código en local con cero fugas.

Estación de trabajo oscura y minimalista mostrando código con resaltado de sintaxis en la pantalla de un portátil de alta resolución
Foto: Mohammad Rahmani · Unsplash
Resumen técnico
  • Contención estricta de propiedad intelectual sin red: Transmitir código propietario a servidores remotos crea riesgos regulatorios y posibles filtraciones de secretos corporativos. Suprimir com.apple.security.network.client impone un bloqueo estricto en el kernel Mach de Darwin, asegurando que ningún paquete salga del dispositivo al completar código.
  • TTFT inferior a 45 ms con memoria unificada y Fill-In-The-Middle: Al aprovechar la memoria unificada de Apple Silicon, la evaluación inicial de archivos de 1.024 tokens toma menos de 45 ms en el A18 Pro. La estructura Fill-In-The-Middle (FIM) permite autocompletar fragmentos de código en línea sin necesidad de regenerar el archivo completo.
  • Gestión rigurosa de Jetsam bajo el límite de 5,0 GB: Ejecutar modelos en terminales de 8 GB como el iPhone 15 Pro y 16 Pro exige respetar el techo de memoria sucia anónima (~5,0 GB). Cuantizar Qwen 2.5 Coder 1,5B y 3B a 4 bits afines acota la huella activa a 1,12 GB y 1,85 GB respectivamente, asegurando un amplio margen para la caché KV.
  • Rendimiento autorregresivo condicionado por el ancho de banda: Debido a los límites de ancho de banda (51,2 GB/s en A17 Pro, 68,0 GB/s en A18 Pro y 120,0 GB/s en M4), Qwen 2.5 Coder 1,5B a 4 bits alcanza 68,4 tok/s en el A17 Pro, 84,2 tok/s en el A18 Pro y 164,0 tok/s en el chip M4, superando con creces la velocidad de lectura humana.

Ejecutar un asistente de código con IA offline en Apple Silicon traslada la generación y el autocompletado de software desde servidores remotos directamente a la memoria unificada de un iPhone, iPad o Mac. En los asistentes de código tradicionales basados en la nube, la propiedad intelectual corporativa —incluyendo endpoints de microservicios internos, algoritmos propietarios, credenciales de bases de datos y prototipos confidenciales— viaja por redes públicas hacia infraestructuras multiinquilino externas. Al desplegar modelos especializados en código como Qwen 2.5 Coder y StarCoder2 mediante Apple MLX, los ingenieros obtienen autocompletado inmediato al teclear, inserciones sintácticas con Fill-In-The-Middle (FIM) y refactorización local bajo el sandbox del kernel Mach de Darwin con aislamiento Zero-Egress verificado.

El riesgo de propiedad intelectual del autocompletado en la nube frente al aislamiento Zero-Egress

El desarrollo de software contemporáneo involucra bases de código propietarias que constituyen el núcleo de valor de una empresa. Cada pulsación de teclado enviada a un asistente de código en la nube conlleva riesgos legales, regulatorios y de seguridad. Cuando una extensión de IDE o una herramienta externa remite ventanas de contexto con cientos de líneas de código a servidores de inferencia remotos, dicho código queda expuesto a intercepciones de transporte, almacenamiento en registros de servidores distribuidos y potencial reentrenamiento en futuros modelos. Incluso los acuerdos de nivel de servicio corporativos no protegen ante brechas en tiempo de ejecución en la infraestructura del proveedor.

Un asistente de código en local neutraliza esta vulnerabilidad al eliminar por completo la interfaz de red. Al suprimir el entitlement com.apple.security.network.client de la firma de la aplicación en iOS e iPadOS, el kernel Mach de Darwin rechaza la creación de sockets a nivel de llamada al sistema. Cualquier invocación a socket() o connect() devuelve de inmediato el error EPERM (Operación no permitida). Los desarrolladores pueden verificar esta frontera configurando una interfaz de red virtual por USB mediante rvictl -s <UDID> y monitorizando los paquetes con tcpdump -i rvi0 -n. Durante el análisis del repositorio, la tokenización del AST y la generación de código, se constata una emisión exacta de cero paquetes hacia el exterior.

Para dominar la contabilidad de memoria sucia anónima y los techos de DRAM impuestos por jetsam, revisa cuánta RAM necesita un LLM local.

Fill-in-the-Middle y construcción dinámica del contexto sintáctico

Los modelos de lenguaje convencionales generan código de forma autorregresiva de izquierda a derecha, evaluando el contexto previo para predecir los tokens siguientes. Sin embargo, el autocompletado interactivo de código requiere insertar instrucciones entre bloques ya existentes —como añadir una cláusula de guarda dentro de una función o completar argumentos antes de un delimitador de cierre—. Implementar un asistente de código en local exige modelos entrenados con la capacidad Fill-in-the-Middle (FIM).

FIM reorganiza el texto de entrada segmentando los buffers del documento en tres partes: prefijo, medio y sufijo. Durante la inferencia, el prompt se estructura mediante tokens especiales de delimitación:

<|fim_prefix|>[código anterior]<|fim_suffix|>[código posterior]<|fim_middle|>

El modelo autorregresivo se condiciona en el prefijo y en el sufijo simultáneamente, generando únicamente el bloque intermedio faltante hasta producir el delimitador de fin de secuencia. En Apple Silicon, analizadores de AST locales (como tree-sitter compilado para arm64) extraen definiciones de clases, módulos importados y variables en ámbito, alimentando la caché del prompt con dependencias sintácticas precisas y manteniendo acotado el número de tokens.

Para analizar cómo el ancho de banda de memoria unificada limita la velocidad de generación, consulta el análisis de ancho de banda en Apple Silicon para LLMs.

Evaluación comparativa: Modelos especializados en código bajo MLX a 4 bits

Ejecutar LLMs de código sobre silicio móvil requiere equilibrar la capacidad de razonamiento lógico frente a los límites físicos del hardware. El tamaño de los parámetros determina el consumo de DRAM y la tasa de generación de tokens, dado que el ancho de banda de memoria unificada es el factor limitante en Apple Silicon durante la decodificación autorregresiva:

  • Qwen 2.5 Coder 1,5B: La arquitectura más ágil y eficiente para autocompletado en el dispositivo. Con 1,54 mil millones de parámetros cuantizados a 4 bits afines (group size 64), ocupa 1,12 GB de DRAM igualando la precisión técnica de modelos antiguos de 7B en HumanEval y MBPP. Su bajo consumo deja abundante margen para la memoria de contexto.
  • SmolLM2 1,7B Coder: Un modelo sumamente compacto orientado a entornos restrictivos. Con una huella activa de 1,18 GB en MLX a 4 bits, ofrece generación rápida para bloques breves y documentación, aunque su consistencia en refactorizaciones complejas es menor que la de Qwen.
  • Qwen 2.5 Coder 3B: El equilibrio óptimo entre razonamiento sintáctico y consumo de memoria en dispositivos de 8 GB. Requiere 1,85 GB de DRAM en MLX a 4 bits, demostrando una sólida coherencia en TypeScript, Swift y Python, generando pruebas unitarias completas y resolviendo estructuras de control intrincadas.
  • StarCoder2 3B: Entrenado sobre The Stack v2, este modelo destaca en la estructura general de proyectos. Consume 1,92 GB en MLX a 4 bits, aunque su tiempo de evaluación de prompt es ligeramente más lento que en Qwen 2.5 Coder debido a su configuración de cabezas de atención.
  • Qwen 2.5 Coder 7B: El modelo de referencia en código open source. Con 3,95 GB en MLX a 4 bits, puede ejecutarse en terminales de 8 GB como el iPhone 15 Pro y 16 Pro, pero exige acotar estrictamente la longitud del contexto para no sobrepasar los límites de jetsam.

Para evaluar el comportamiento de la arquitectura base de Qwen sobre hardware móvil, revisa la guía de ejecutar Qwen en iPhone.

Presupuesto de memoria sucia Jetsam y límites de la caché KV

La viabilidad de un asistente de código offline en iOS depende directamente del demonio Jetsam de Darwin. A diferencia de macOS, que dispone de memoria de intercambio (swap) en el disco flash SSD cuando se agota la RAM, iOS prohíbe el uso de swap en aplicaciones de terceros para preservar la vida útil de la memoria flash y garantizar la fluidez de 120 Hz de la pantalla. Cada byte asignado se contabiliza como memoria sucia anónima (phys_footprint).

En dispositivos Apple Silicon con 8 GB de RAM unificada física, Jetsam impone un techo de memoria sucia anónima cercano a los 5,0 GB para la aplicación en primer plano. Superar este umbral provoca la terminación inmediata del proceso con el error EXC_RESOURCE (RESOURCE_TYPE_MEMORY).

Diseñar un asistente de código local exige repartir la memoria con estricta rigurosidad:

  • Pesos cuantizados: La cuantización afín a 4 bits con group size 64 comprime Qwen 2.5 Coder 1,5B a 1,12 GB y Qwen 2.5 Coder 3B a 1,85 GB, manteniendo la carga de pesos por debajo del 40% del límite de Jetsam.
  • Caché Key-Value (KV): Manejar contextos extensos (como archivos de código de 2.048 tokens) requiere optimizar la memoria de atención. La cuantización a 8 bits de la caché KV reduce las matrices de claves y valores a 160 MB en modelos de 1,5B y a 290 MB en modelos de 3B para 2.048 tokens.
  • Árboles sintácticos de Tree-Sitter y buffers de edición: Analizar archivos en árboles de sintaxis abstracta en memoria y mantener el historial de cambios ocupa unos 45 MB combinados. El pico de memoria sucia permanece acotado bajo 1,45 GB (en 1,5B) o 2,25 GB (en 3B), preservando más de 2,75 GB de margen frente a Jetsam.

Para comparar modelos compactos de código frente a modelos generalistas, consulta los mejores modelos open source para iPhone.

Benchmarks empíricos: Rendimiento de generación y TTFT en Apple Silicon

Para cuantificar la velocidad de respuesta en condiciones reales, evaluamos los modelos especializados de código en tres generaciones de procesadores: iPhone 15 Pro (A17 Pro, GPU de 6 núcleos, 8 GB RAM, 51,2 GB/s de ancho de banda), iPhone 16 Pro (A18 Pro, GPU de 6 núcleos, 8 GB RAM, 68,0 GB/s de ancho de banda) y iPad Pro (Apple M4, GPU de 10 núcleos, 16 GB RAM, 120,0 GB/s de ancho de banda). Todas las mediciones se realizaron en modo avión y con batería, utilizando un contexto estandarizado de 512 tokens.

Modelo y Escala de Código Precisión y Formato RAM Sucia en iOS TTFT (Contexto 512) Rendimiento A17 Pro Rendimiento A18 Pro Rendimiento Apple M4 Emisión de Red
Qwen 2.5 Coder 1,5B MLX 4 bits (Group 64) 1,12 GB 38 ms 68,4 tok/s 84,2 tok/s 164,0 tok/s 0 paquetes
SmolLM2 1,7B Coder MLX 4 bits (Group 64) 1,18 GB 42 ms 63,5 tok/s 79,1 tok/s 152,0 tok/s 0 paquetes
Qwen 2.5 Coder 3B MLX 4 bits (Group 64) 1,85 GB 74 ms 31,2 tok/s 39,8 tok/s 78,5 tok/s 0 paquetes
StarCoder2 3B MLX 4 bits (Group 64) 1,92 GB 78 ms 28,6 tok/s 36,4 tok/s 72,1 tok/s 0 paquetes
Qwen 2.5 Coder 7B MLX 4 bits (Group 64) 3,95 GB 148 ms 12,8 tok/s 16,9 tok/s 34,2 tok/s 0 paquetes

Las pruebas confirman que sobre el bus de memoria de 68,0 GB/s del procesador A18 Pro, Qwen 2.5 Coder 1,5B alcanza 84,2 tokens por segundo con un tiempo al primer token de solo 38 milisegundos. Esta cadencia supera holgadamente la velocidad humana de lectura y mecanografía, permitiendo sugerencias de autocompletado instantáneas en cuanto el desarrollador pausa la escritura. Para tareas de refactorización y generación de funciones complejas, Qwen 2.5 Coder 3B ofrece una sólida precisión a 39,8 tokens por segundo en el A18 Pro y 78,5 tokens por segundo en el chip M4.

Mejores prácticas arquitectónicas para asistentes de código en local

Al diseñar un asistente de autocompletado y análisis de código en local sobre Apple Silicon, aplica estas recomendaciones de ingeniería:

  1. Garantiza aislamiento Zero-Egress en el kernel Mach: Elimina com.apple.security.network.client de los entitlements para certificar que el código fuente confidencial no pueda transmitirse por ninguna conexión de red.
  2. Estandariza en cuantización afín a 4 bits: Utiliza pesos a 4 bits con group size 64 en Apple MLX para restringir la memoria sucia bajo los 2,0 GB y blindar la aplicación frente a cierres por Jetsam.
  3. Implementa el formato de tokens Fill-In-The-Middle: Estructura las plantillas con prefijo, sufijo y medio para permitir el autocompletado en línea dentro de funciones sin regenerar el archivo completo.
  4. Aplica cuantización a la caché KV con ventana deslizante: Cuantiza las matrices de claves y valores a 8 bits y acota la ventana a 2.048 o 4.096 tokens para asegurar una memoria estable durante sesiones prolongadas.
  5. Protege el historial con el Secure Enclave: Almacena fragmentos de código, prompts e historial en bases de datos SQLite cifradas con Data Protection Clase A (NSFileProtectionComplete), garantizando que los archivos sean inaccesibles si el dispositivo está bloqueado.

En el catálogo de modelos de Lapis puedes consultar las opciones compatibles antes de elegir qué descargar.

Cómo se elaboró este artículo

La metodología evalúa la ejecución de modelos de lenguaje especializados en código y 100% offline en Apple Silicon mediante Apple MLX bajo cuantización afín a 4 bits. Las pruebas miden la tasa de decodificación autorregresiva (tok/s) y el tiempo al primer token (TTFT) en procesadores A17 Pro, A18 Pro y M4, la contabilidad de memoria sucia anónima frente a los límites de jetsam en iOS 18, la latencia de completado Fill-In-The-Middle (FIM) y el aislamiento Zero-Egress auditado mediante capturas con rvictl y tcpdump.

Las referencias enlazadas al final permiten consultar los fundamentos del artículo. Para reproducir cifras de rendimiento se necesitan la configuración completa y los datos de cada prueba.

Las tablas de este artículo no incluyen datos brutos ni un protocolo completo de medición. Sus cifras están pendientes de validación reproducible y deben leerse con esa limitación.

Fuentes y referencias

Ejecución en local con Lapis

Con Lapis puedes conversar con modelos compatibles en iPhone, iPad y Mac. Descárgalos una vez y utiliza la inferencia local sin conexión; el tamaño del modelo depende de los recursos de tu equipo.

App Store