écrits/blog/2026/07
Blog7 juil. 2026·6 min

Apple Foundation Models passe en open source : Claude et Gemini

Apple ouvre le code de son framework Foundation Models et l'ouvre à Claude et Gemini. Une seule API Swift route entre modèles locaux, cloud et frontière.

Apple vient de faire une chose rare : ouvrir la porte d'entrée. Le framework Foundation Models — la couche d'IA embarquée qui alimente Apple Intelligence — passe en open source, et il ne parle plus uniquement aux modèles d'Apple. Grâce au nouveau protocole LanguageModel, la même API Swift qui exécute un modèle privé sur le Neural Engine peut désormais router les requêtes vers Claude d'Anthropic ou Gemini de Google. Pour les développeurs sur iOS, iPadOS et macOS, ce changement redessine discrètement la façon de construire des fonctionnalités d'IA.

Ce qui a réellement changé

Quand Apple a livré le framework Foundation Models en 2025, c'était une manière propre et native en Swift d'appeler le modèle embarqué derrière Apple Intelligence. Il offrait la génération guidée, l'appel d'outils et le streaming — mais il ne parlait qu'à un seul modèle. Si vous aviez besoin d'un modèle de frontière pour une tâche difficile, vous sortiez complètement du framework et écriviez un client HTTP à la main.

La mise à jour 2026 supprime ce mur. Trois choses sont arrivées ensemble :

  • Open source. Le framework lui-même, ainsi que deux backends compagnons — CoreAILanguageModel et MLXLanguageModel — sont publiés en open source, afin que les développeurs puissent les inspecter, les étendre et exécuter un large éventail de modèles locaux sur le Neural Engine et le GPU du Mac.
  • Fournisseurs tiers. Un nouveau protocole LanguageModel permet à presque n'importe quel modèle d'alimenter une session LanguageModelSession. Anthropic et Google livrent des paquets Swift officiels pour brancher Claude et Gemini sur exactement la même interface.
  • Un palier cloud gratuit. Apple a rendu ses tout derniers modèles Private Cloud Compute gratuits pour les petits développeurs, avec l'entrée d'images pour que les modèles raisonnent sur des images en plus du texte.

Le point saillant, c'est l'interopérabilité : une seule surface d'API, plusieurs modèles, choisis pour chaque requête selon le coût, la latence et la confidentialité.

L'API unique qui exécute tout

L'objet central n'a pas changé. Vous créez une LanguageModelSession, lui donnez des instructions, et appelez respond(to:). L'inférence embarquée ressemble à ceci :

import FoundationModels
 
let session = LanguageModelSession(
    model: SystemLanguageModel.default,
    instructions: "You are a concise assistant for a travel app."
)
 
let reply = try await session.respond(to: "Suggest three activities in Tunis.")
print(reply.content)

Remplacez maintenant l'instance du modèle par un fournisseur de frontière — Gemini via Firebase, par exemple — et tout le reste reste identique :

import FoundationModels
import FirebaseAILogic
 
let ai = FirebaseAI.firebaseAI()
let gemini = ai.geminiLanguageModel(name: "gemini-3.5-flash")
 
let session = LanguageModelSession(
    model: gemini,
    instructions: "You are a concise assistant for a travel app."
)
 
let reply = try await session.respond(to: "Suggest three activities in Tunis.")

Le site d'appel ne sait pas — et ne se soucie pas — de savoir quel modèle a répondu. C'est tout l'intérêt du protocole LanguageModel : l'application déclare ce dont elle a besoin — génération de texte, sortie structurée, appel d'outils — et le protocole détermine quel modèle le fournit. Claude arrive via le paquet Swift d'Anthropic, de la même forme.

La sortie structurée survit au changement

La fonctionnalité que les développeurs préféraient dans le framework original — la génération guidée avec @Generable — fonctionne chez tous les fournisseurs. Vous annotez un type Swift, et le modèle est contraint de renvoyer exactement cette forme, sans analyse JSON fragile :

@Generable
struct Activity {
    @Guide(description: "Short activity name")
    let name: String
 
    @Guide(description: "Estimated cost in Tunisian dinar")
    let priceTND: Int
 
    let category: String
}
 
let result = try await session.respond(
    to: "Recommend one activity in Sidi Bou Said.",
    generating: Activity.self
)
 
print(result.content.name, result.content.priceTND)

Comme la contrainte vit dans le framework, le même type @Generable produit une sortie structurée valide, qu'elle soit traitée en local ou par Claude dans le cloud. Le streaming (streamResponse(to:)) et l'appel d'outils se transposent de la même manière.

Dynamic Profiles : changer de modèle en pleine session

L'ajout le plus tourné vers l'avenir est Dynamic Profiles, qui permet à une application de changer de modèles, d'outils et d'instructions au milieu d'une session. Apple le présente comme le socle des workflows multi-agents : exécutez une inférence embarquée bon marché pour les tours de routine, puis escaladez une seule requête difficile vers un modèle de frontière sans démonter la conversation.

Le motif pratique est un routeur. Gardez l'essentiel du trafic privé et gratuit sur l'appareil, et réservez les appels payants de frontière aux requêtes qui en ont vraiment besoin :

func model(for difficulty: Difficulty) -> any LanguageModel {
    switch difficulty {
    case .simple:  return SystemLanguageModel.default        // private, on-device
    case .complex: return anthropic.claudeModel(name: "claude-opus-4-8")
    }
}

C'est l'architecture qui exigeait auparavant une passerelle sur mesure, une logique de nouvelle tentative et trois SDK différents. Désormais, c'est une instruction switch derrière un seul protocole.

Pourquoi cela compte pour les développeurs de la région MENA

Pour les équipes en Tunisie, en Arabie saoudite et dans la région élargie, le changement dépasse le simple confort. L'inférence embarquée signifie que les données utilisateur — dossiers clients, historique de conversation, documents — ne quittent jamais l'appareil pour les tâches de routine, ce qui tombe pile du bon côté des exigences de résidence des données. Et quand vous avez réellement besoin d'un modèle de frontière, vous faites un choix délibéré, requête par requête, au lieu d'envoyer tout à un seul fournisseur par défaut.

Il y a aussi une vraie histoire de coût. Router l'essentiel de l'inférence vers le modèle embarqué gratuit et le palier Private Cloud Compute d'Apple, puis ne payer que pour les escalades difficiles, revient bien moins cher que d'acheminer chaque jeton vers une API de frontière. Pour une application à usage intensif mais majoritairement simple, ce ratio décide si la fonctionnalité est abordable tout court.

Et comme le fournisseur est un détail d'implémentation, vous n'êtes pas verrouillé. Si Claude convient aujourd'hui et qu'un modèle ouvert moins cher convient le trimestre prochain, vous changez une ligne — l'instance du modèle — et le reste de l'application reste intact. Cette portabilité est exactement la stratégie de résilience multi-modèles qui protège contre les pannes de fournisseurs et les changements de prix.

Pour commencer

Le framework est livré avec le système d'exploitation, il n'y a donc aucune dépendance à ajouter pour l'usage embarqué. Pour intégrer un fournisseur :

  1. Ajoutez le paquet Swift du fournisseur (Anthropic ou Firebase AI Logic de Google) via Swift Package Manager.
  2. Instanciez le modèle du fournisseur et passez-le à LanguageModelSession.
  3. Gardez vos types @Generable et vos prompts exactement tels quels — ils sont indépendants du fournisseur.
  4. Ajoutez une fonction de routage pour que difficulté, coût et confidentialité décident quel modèle répond.

Si vous concevez des fonctionnalités d'IA à partir de zéro, il vaut la peine d'associer cela à une réflexion plus large sur l'architecture logicielle « IA d'abord », afin que la couche de routage soit un élément de premier plan de la conception plutôt qu'une réflexion après coup.

En résumé

Apple a passé des années à garder sa pile d'IA fermée et strictement embarquée. Ouvrir le framework Foundation Models — et laisser Claude et Gemini répondre via la même session Swift que le Neural Engine — en fait un véritable routeur de modèles. Les développeurs obtiennent une seule API, une génération guidée qui survit au changement, et une manière propre d'équilibrer confidentialité, latence et coût pour chaque requête. C'est l'un des mouvements de plateforme les plus déterminants de 2026 pour quiconque livre de l'IA sur les appareils Apple, et le coût de migration est proche de zéro : vos sessions existantes parlent déjà la nouvelle langue.