Comment l'histoire du jour est écrite
Appuyez une fois, et Fil des jours transforme « ce que contiennent les photos, où elles ont été prises et quelle était la météo » en une petite histoire. Cet article explique comment, et où chaque frontière de confidentialité est tracée.
Étape un : rassembler trois sortes de faits
La matière première d'une histoire, ce sont des faits structurés, pas les photos. Avant d'écrire quoi que ce soit sur une journée, le moteur rassemble trois choses :
- Contenu — les photos sont classées sur l'appareil avec le framework Vision d'Apple (
VNClassifyImageRequest) : « cuisine / tenue / paysage / animal », traduits en catégories localisées. Les images cloud demandent un accord distinct. - Lieu — les métadonnées GPS embarquées dans les photos sont géocodées en sens inverse. Aucune permission de localisation n'est nécessaire : l'accès aux photos apporte déjà les métadonnées, le
CLGeocodersystème fait la recherche, et les résultats sont mis en cache à environ 1 km près. - Météo — l'API historique/prévisions d'Open-Meteo, gratuite et sans clé ; les requêtes n'emportent que des coordonnées arrondies et une date, les résultats sont mis en cache par jour.
DayFactsCollector
├─ Étiquettes Vision (sur l'appareil, sans réseau)
├─ Lieu via CLGeocoder (cache par ~1 km)
└─ Météo Open-Meteo (coords arrondies + date, cache par jour)
Étape deux : trois moteurs, un même contrat
Faits en main, le moteur d'histoires sélectionné les transforme en texte. Les trois moteurs respectent le même contrat de sortie — vous pouvez changer à tout moment :
- Intelligent (défaut) — le grand modèle sur l'appareil d'Apple (FoundationModels) écrit directement sur le téléphone sur les appareils compatibles Apple Intelligence ; repli automatique sur le moteur à modèles sinon.
- Modèle — composition purement par règles. Fonctionne sur tous les iPhone, entièrement hors ligne, le plus rapide.
- Cloud (votre clé) — se connecte à votre service compatible OpenAI, la clé restant dans le trousseau de l'appareil.
La frontière par défaut du moteur cloud
Le moteur cloud est la seule voie par laquelle des données quittent l'appareil, et ses valeurs par défaut sont donc volontairement conservatrices : seuls des faits textuels structurés sont envoyés (date, météo, lieu, étiquettes) — aucune photo. Joindre des photos compressées est un réglage séparé, désactivé par défaut, avec une confirmation explicite avant activation.
Cache et usage hors ligne
Ouvrir une histoire enregistrée lit sa copie locale. Régénérer peut recueillir de nouveaux faits et, si choisi, créer une requête cloud. Un échec d’enregistrement conserve le texte pour réessayer sans nouvelle génération. La version précédente reste disponible pour récupération. Les aperçus du widget utilisent l’instantané partagé ; l’action Garder vérifie aussi les droits StoreKit.
Pourquoi le moteur par défaut est sur l'appareil
Attacher la meilleure expérience prête à l'emploi au modèle sur l'appareil, c'est garantir des histoires naturelles et bien écrites sans aucune clé API, avec la configuration de confidentialité la plus forte par défaut. Le moteur à modèles garantit que la fonction marche toujours, et le moteur cloud reste là pour qui veut configurer le sien — trois niveaux de dégradation gracieuse qui n'excluent personne.
Les détails d'implémentation évolueront ; le contrat de comportement vit dans spec/001-day-story.md du dépôt. Article suivant : notes de design du widget : cinq moments par jour.