Pattern 1 : un view model par feature
Pour une feature comme :- résumé de texte
- génération d’idées
- assistant contextuel
Pattern 2 : session courte pour tâche unique
Si la requête ne dépend pas d’un historique, créez une session courte et jetez-la ensuite. C’est le bon choix pour :- un résumé ponctuel
- une reformulation
- une extraction structurée indépendante
Pattern 3 : session persistante pour un chat
Pour une conversation multi-tours, conservez la session tant que l’échange reste cohérent. Prévoyez tout de même :- un bouton de reset
- une gestion du contexte trop long
- une UI qui montre qu’une conversation est en cours
Pattern 4 : fallback explicite si le modèle manque
Votre architecture doit accepter que la feature ne soit pas disponible. Le minimum :- vérifier
SystemLanguageModel.default.availability - afficher un état alternatif clair
- éviter de cacher l’erreur derrière un simple spinner infini
Pattern 5 : tool calling pour les données dynamiques
Le modèle système n’a pas vos données métier ni l’état courant de l’app. Si la réponse dépend de ces données, injectez-les via un tool plutôt que d’espérer une “bonne intuition” du modèle. Exemples :- lire le calendrier
- chercher une note locale
- lancer une action dans l’app
Pattern 6 : architecture hybride si le local ne suffit pas
Si une tâche dépasse le modèle système, vous pouvez garder Foundation Models côté app pour :- l’UX Swift native
- la sortie structurée
- la coordination de l’expérience
Résumé de décision
| Situation | Pattern recommandé |
|---|---|
| Une feature ponctuelle et ciblée | View model dédié + session courte |
| Un chat ou un assistant conversationnel | Session persistante + reset |
| Une feature dépendante de données actuelles | Tool calling |
| Une app qui doit rester utilisable sans IA | Fallback explicite |
| Une tâche parfois trop lourde pour le modèle local | Architecture hybride |
Checklist avant d’intégrer la feature
- La feature a-t-elle sa propre session ?
- L’état d’indisponibilité est-il géré dans l’UI ?
- Les erreurs sont-elles compréhensibles pour l’utilisateur ?
- La sortie devrait-elle être structurée plutôt que textuelle ?
- Un tool est-il nécessaire pour éviter d’inventer des données ?