En novembre dernier, nous avons présenté AnyLanguageModel sur ce blog : un remplacement direct du framework Foundation Models d'Apple qui vous permet de choisir le modèle et le fournisseur utilisés par votre application. Nous avons entendu des développeurs d'applications curieux à propos des modèles locaux mais qui ne savaient pas toujours par où commencer. Ils voulaient aussi éviter la complexité supplémentaire de la prise en charge de plusieurs fournisseurs d'inférence. AnyLanguageModel est né de ces retours.
L'inférence locale et l'inférence hébergée ont chacune leurs forces, et toutes deux ont un rôle à jouer dans la construction de cette nouvelle génération d'applications intelligentes. Une API partagée facilite le choix du bon modèle pour chaque tâche.
Un an et des dizaines de versions plus tard, AnyLanguageModel 1.0 est disponible,\nainsi que swift-huggingface 1.0 et swift-xet 1.0.
Voici ce qui a changé, et ce qui vient ensuite :
Une API compatible sans modification (drop-in)
L'idée centrale d'AnyLanguageModel reste la même : utiliser l'API Foundation Models avec le modèle qui convient à votre application. Pour commencer, modifiez votre import déclaration :
- import FoundationModels
+ import AnyLanguageModel
Le même code de session fonctionne ensuite avec le modèle système, avec les modèles à poids ouverts via llama.cpp, MLX et Core ML, et avec les fournisseurs hébergés ci-dessous.
Au cours de l'année écoulée, nous avons ajouté plusieurs fonctionnalités majeures :
- Appel d'outils fonctionne avec tous les fournisseurs.
- Génération guidée fonctionne aussi avec tous les fournisseurs,
y compris les imbriqués
@Generabletypes et tableaux de ceux-ci. - Prise en charge des images vous permet de joindre des images aux prompts en utilisant la syntaxe de Foundation Models 27, y compris lorsque vous utilisez le modèle système sur iOS, macOS et visionOS 27.
Sur OS 27, AnyLanguageModel fonctionne également avec
tout modèle conforme au protocole de Foundation Models LanguageModel ,
y compris Core AI les modèles.
En parallèle d'AnyLanguageModel, nous avons développé swift-huggingface et swift-xet pour apporter les téléchargements accélérés de modèles du Hub aux applications Swift.
Les modèles hébergés aussi
La prise en charge des modèles hébergés s'est également élargie cette année. AnyLanguageModel prend désormais en charge :
- les API Chat Completions et Responses d'OpenAI
- Open Responses, pour tout fournisseur disposant d'un point de terminaison compatible
- l'API Messages d'Anthropic, avec des options de raisonnement adaptatif et d'effort
- l'API Gemini de Google
- Ollama
- Private Cloud Compute, sur OS 27
- Hugging Face Inference Providers, et d'autres points de terminaison compatibles OpenAI tels qu'OpenRouter, via une URL de base personnalisée
Avec Inference Providers, vous pouvez utiliser des modèles à poids ouverts trop gros pour s'exécuter sur l'appareil avec le même code de session :
let model = OpenAILanguageModel(
baseURL: URL(string: "https://router.huggingface.co/v1/")!,
apiKey: ProcessInfo.processInfo.environment["HF_TOKEN"]!,
model: "openai/gpt-oss-120b",
apiVariant: .chatCompletions
)
Les fournisseurs hébergés bénéficient des mêmes fonctionnalités que les modèles locaux : génération guidée, appel d'outils avec streaming, et utilisation de tokens sur les réponses.
Le raisonnement fait désormais partie de la transcription aussi. Lorsque vous changez de fournisseur, les blocs de raisonnement sont automatiquement omis des requêtes si le nouveau fournisseur ne peut pas les rejouer.
Les clés API proviennent d'une closure plutôt que d'une chaîne, afin que votre application puisse récupérer des tokens de courte durée depuis votre propre serveur. Le README explique quand laisser les personnes apporter leurs propres clés et quand acheminer les requêtes via un proxy.
AnyLanguageModel fonctionne également sur Linux, afin que le même code puisse fonctionner sur un serveur.
Les modèles à poids ouverts se sont améliorés
Alors que nous avons rendu les modèles locaux plus faciles à utiliser, les modèles eux-mêmes sont devenus plus performants, rendant les petits modèles un bon point de départ. Voici quelques-uns des modèles les plus téléchargés sur le Hub en ce moment :
- Gemma 4 E2B de Google,
en GGUF, environ 3.4 GB à
Q4_0avec un entraînement sensible à la quantization. - LFM2.5 2.6B de Liquid AI,
en GGUF, environ 1.7 Go en
Q4_K_M. - Qwen3.8 27B pour MLX d'Alibaba, environ 16 Go en 4 bits.
Les deux premiers tiennent sur un iPhone, et Qwen3.8 27B fonctionne sur un Mac avec 32 Go de mémoire ou plus. Sélectionner le modèle MLX ne prend qu'une ligne :
let model = MLXLanguageModel(modelId: "mlx-community/Qwen3.8-27B-4bit")
Et si vous avez sous la main quatre Mac Studios équipés au maximum, GLM-5.3 de Z.ai occupe environ 1.5 To en BF16. Pour le reste d'entre nous, il est disponible via Inference Providers.
Migrer vers la version 1.0
dependencies: [
.package(
url: "https://github.com/huggingface/AnyLanguageModel",
from: "1.0.0",
traits: ["MLX"]
)
]
Si vous mettez à niveau une application existante, consultez les instructions de migration dans les AnyLanguageModel, swift-huggingface, et swift-xet notes de version pour vous aider à mettre à jour votre code.
Les retours et contributions de la communauté ont façonné plusieurs de nos fonctionnalités majeures. Merci à tous ceux qui ont contribué d'avoir aidé à rendre AnyLanguageModel plus utile aux développeurs d'applications.
Et ensuite
Les modèles de langage se sont révélés être un outil puissant pour intégrer de l'intelligence dans les produits. Ils constituent aussi l'une des nombreuses sortes de modèles que les développeurs peuvent mettre à contribution. Nous sommes ravis d'appliquer la même approche à d'autres capacités : des API Swift familières avec un choix de modèles exécutés sur l'appareil. Bientôt disponible : des modèles qui décident, et des modèles qui écoutent.