En noviembre pasado, presentamos AnyLanguageModel en este blog: un reemplazo directo del framework Foundation Models de Apple que te permite elegir el modelo y el proveedor que usa tu app. Nos comunicamos con desarrolladores de apps que tenían curiosidad por los modelos locales pero que no siempre sabían cómo empezar. También querían evitar la complejidad añadida de dar soporte a múltiples proveedores de inferencia. AnyLanguageModel surgió de esos comentarios.
La inferencia local y la alojada tienen cada una sus fortalezas, y ambas tienen un papel en la construcción de esta nueva generación de apps inteligentes. Una API compartida facilita elegir el modelo adecuado para cada tarea.
Un año y docenas de versiones después, AnyLanguageModel 1.0 ya está disponible, junto con swift-huggingface 1.0 y swift-xet 1.0.
Esto es lo que ha cambiado y lo que viene:
Una API compatible como reemplazo directo
La idea central de AnyLanguageModel sigue siendo la misma:
usar la API de Foundation Models con el modelo que se ajuste a tu app.
Para empezar, cambia tu import instrucción:
- import FoundationModels
+ import AnyLanguageModel
El mismo código de sesión funciona entonces con el modelo del sistema, con modelos de pesos abiertos mediante llama.cpp, MLX y Core ML, y con los proveedores alojados que se indican abajo.
Durante el año pasado, hemos añadido varias funciones importantes:
- El llamado de herramientas funciona con todos los proveedores.
- La generación guiada también funciona con todos los proveedores,
incluidos tipos anidados
@Generabley arreglos de ellos. - El soporte de imágenes te permite adjuntar imágenes a los prompts usando la sintaxis de Foundation Models 27, incluso cuando usas el modelo del sistema en iOS, macOS y visionOS 27.
En OS 27, AnyLanguageModel también funciona con
cualquier modelo que conforme el protocolo LanguageModel de Foundation Models,
incluidos los modelos Core AI .
Junto con AnyLanguageModel, hemos desarrollado swift-huggingface y swift-xet para traer descargas de modelos aceleradas desde el Hub a las apps Swift.
Modelos alojados, también
El soporte para modelos alojados también se amplió este año. AnyLanguageModel ahora admite:
- las APIs Chat Completions y Responses de OpenAI
- Open Responses, para cualquier proveedor con un endpoint compatible
- la API Messages de Anthropic, con opciones de thinking adaptativo y effort
- la API Gemini de Google
- Ollama
- Private Cloud Compute, en OS 27
- Hugging Face Inference Providers, y otros endpoints compatibles con OpenAI como OpenRouter, mediante una URL base personalizada
Con Inference Providers, puedes usar modelos de pesos abiertos demasiado grandes para ejecutarse en el dispositivo con el mismo código de sesión:
let model = OpenAILanguageModel(
baseURL: URL(string: "https://router.huggingface.co/v1/")!,
apiKey: ProcessInfo.processInfo.environment["HF_TOKEN"]!,
model: "openai/gpt-oss-120b",
apiVariant: .chatCompletions
)
Los proveedores alojados obtienen las mismas funciones que los modelos locales: generación guiada, llamada de herramientas con streaming, y uso de tokens en las respuestas.
El razonamiento ahora también forma parte de la transcripción. Cuando cambias de proveedor, los bloques de razonamiento se omiten automáticamente de las solicitudes si el nuevo proveedor no puede reproducirlos.
Las claves de API provienen de un closure en lugar de una cadena, por lo que tu app puede obtener tokens de corta duración desde tu propio servidor. El README explica cuándo permitir que las personas traigan sus propias claves y cuándo enrutar las solicitudes a través de un proxy.
AnyLanguageModel también funciona en Linux, por lo que el mismo código puede funcionar en un servidor.
Los modelos de pesos abiertos mejoraron
Si bien hemos facilitado el uso de modelos locales, los propios modelos se han vuelto más capaces, haciendo que los pequeños sean un buen punto de partida. Estos son algunos de los modelos más descargados del Hub en este momento:
- Gemma 4 E2B de Google,
en GGUF, unos 3.4 GB en
Q4_0con entrenamiento consciente de la cuantización. - LFM2.5 2.6B de Liquid AI,
en GGUF, unos 1.7 GB a
Q4_K_M. - Qwen3.8 27B para MLX de Alibaba, unos 16 GB a 4 bits.
Los dos primeros caben en un iPhone, y Qwen3.8 27B funciona en un Mac con 32 GB de memoria o más. Seleccionar el modelo MLX requiere una sola línea:
let model = MLXLanguageModel(modelId: "mlx-community/Qwen3.8-27B-4bit")
Y si tienes a mano cuatro Mac Studios a tope, GLM-5.3 de Z.ai ocupa unos 1.5 TB en BF16. Para el resto de nosotros, está disponible a través de Inference Providers.
Actualización a 1.0
dependencies: [
.package(
url: "https://github.com/huggingface/AnyLanguageModel",
from: "1.0.0",
traits: ["MLX"]
)
]
Si estás actualizando una app existente, consulta la guía de migración en las AnyLanguageModel, swift-huggingfacey swift-xet notas de la versión para obtener ayuda al actualizar tu código.
Los comentarios y las contribuciones de la comunidad han dado forma a varias de nuestras funciones principales. Gracias a todas las personas que contribuyeron por ayudar a hacer que AnyLanguageModel sea más útil para los desarrolladores de apps.
¿Qué sigue?
Los modelos de lenguaje han demostrado ser una herramienta poderosa para incorporar inteligencia en los productos. También son solo uno de los muchos tipos de modelos que los desarrolladores pueden poner a trabajar. Nos entusiasma llevar este mismo enfoque a más capacidades: APIs de Swift familiares con una selección de modelos que se ejecutan en el dispositivo. Próximamente: modelos que deciden y modelos que escuchan.