🧠 El modelo on-device de Apple Intelligence opera con una ventana de contexto fija de 4096 tokens por sesión. Esto incluye todas las instrucciones, prompts y respuestas generadas durante la conversación. Cuando se supera este límite, la app lanza un error exceededContextWindowSize que puede interrumpir completamente la experiencia del usuario.
⚡ Un token no es exactamente una palabra. El modelo divide el texto en pequeñas subcadenas que pueden ser palabras completas, fragmentos o incluso caracteres individuales. Apple no expone públicamente un tokenizador ni metadatos de uso, por lo que calcular cuántos tokens consumes es complicado y la mayoría de desarrolladores nos enfrentamos a esto a ciegas.
🔄 Las sesiones de LanguageModelSession tienen estado: cada llamada a respond(to:) se envía el nuevo prompt junto con toda la conversación anterior. Esto permite que el modelo mantenga contexto entre interacciones, pero también significa que cada mensaje consume tokens acumulativamente hasta alcanzar el límite.
⚠️ El problema se agrava cuando usas adaptadores personalizados. Algunos desarrolladores reportan que un simple prompt puede consumir el 90% de la ventana de contexto con un adapter cargado, mientras que sin él apenas usa el 1%. Esto obliga a diseñar estrategias de gestión de memoria mucho más agresivas.
🛠️ Las estrategias recomendadas incluyen: iniciar nuevas sesiones cuando te acerques al límite, usar el propio modelo para resumir porciones del acumulado y reutilizar ese resumen como instrucciones de una sesión limpia. O implementar ventanas deslizantes que retengan solo las últimas N interacciones, y validar longitudes de entrada antes de enviarlas al modelo.
📊 Sin un tokenizador oficial, algunos desarrolladores recurren a estimar tokens contando caracteres de instrucciones, prompts y respuestas visibles, aunque esto es bastante propenso a errores. Otros usan tokenizadores externos como tiktoken para aproximar, pero el rendimiento real del modelo de Apple será diferente.
👨💻 Gestionar bien la ventana de contexto es fundamental para crear experiencias fluidas con Foundation Models. Si no lo controlas proactivamente, tus usuarios se encontrarán con errores inesperados en medio de conversaciones largas. ¿Ya lo estás gestionando en tus proyectos?


Deja un comentario