Avevo detto che ci sarei tornato con l'arrivo di iOS 27
«Chiedi qualsiasi cosa» torna in Smart Budget 2.0, solo che non usa il modello on-device che dicevo di aspettare.
Il commento che avevo lasciato a me stesso
L'articolo di luglio sullo sviluppo con il modello on-device di Apple si chiudeva con una sezione intitolata «la funzione che ho creato, finito e poi nascosto». «Chiedi qualsiasi cosa» (Ask Anything), un'interfaccia conversazionale sui dati delle tue spese, era finita, compilava ed era commentata. Ogni punto di accesso portava lo stesso tag:
// ASK-ANYTHING-DEFERRED-IOS27: chat sheet presentation
// disabled. Implementation kept intact in
// Intelligence/Chat/* + Views/Insights/AskAnythingSheet.swift
// — revisit when iOS 27 / a larger on-device model lands.
// The 3B model in iOS 26 was unable to reliably extract
// intent + filters even with constrained DynamicGenerationSchema
iOS 27 è arrivato. La funzione è tornata in Smart Budget 2.0, disponibile ora sull'App Store. Ma non nel modo che quel tag lasciava intendere.
Cosa dava per scontato il tag
Quando ho scritto «revisit when iOS 27 / a larger on-device model lands», avevo un'idea chiara di cosa avrebbe significato tornarci sopra: un modello più grande, la stessa architettura on-device, togliere il commento alla presentazione delle schermate, pubblicare. Il senso stesso della pipeline in tre fasi (l'interprete estrae l'intento, Swift deterministico esegue la query, un template di stringa racconta il risultato) era che il modello fosse locale. Niente chiave API, niente chiamate di rete, nessun server che potesse mai vedere le tue transazioni. Il vincolo on-device non era un compromesso; era la premessa.
Il problema del modello da 3B in iOS 26 non era la velocità. Era l'affidabilità nelle condizioni che contano in un'app di finanza. Anche con DynamicGenerationSchema a vincolare l'output, anche a temperatura 0.1, l'estrazione dell'intento sbagliava abbastanza spesso da impedirmi di puntare su «chiedimi qualsiasi cosa sui tuoi soldi». In un'app per il budget, una classificazione sbagliata dell'intento non produce una risposta leggermente imprecisa. Produce una risposta sbagliata data con sicurezza. E una risposta sbagliata data con sicurezza sulle tue finanze distrugge la funzione: non gradualmente, subito, la prima volta che ti capita.
Così il tag è rimasto lì, in attesa di un modello capace di colmare il divario di affidabilità.
Cosa ho pubblicato davvero
Il Consulente finanziario (è con questo nome che esce) non usa il modello on-device. Gira sul Private Cloud Compute di Apple.
È un'architettura diversa, e voglio essere diretto su cosa significa. Il Private Cloud Compute è l'infrastruttura di Apple: la tua domanda sulle tue spese lascia il dispositivo, viene elaborata sull'hardware di Apple e la risposta torna indietro. Apple dice che non viene conservato nulla e che il calcolo è effimero: è un'affermazione di cui Apple risponde, non spetta a me garantirla. Ma è una chiamata di rete. Avevo tenuto il punto per tutto il ciclo di iOS 26, e per questa funzione l'ho superato, sulla base di quanto Apple garantisce sulla privacy del PCC.
Perché superarlo? Per due motivi.
Il primo è la capacità. Il Private Cloud Compute di Apple ti dà accesso a un modello che gestisce gli intenti in linguaggio naturale in modo abbastanza affidabile da poterci puntare la fiducia degli utenti. Il ruolo del modello non è cambiato: prendere una domanda sui soldi, estrarne un intento strutturato, passarlo a Swift deterministico che lavora sul database reale delle transazioni. È cambiato il posto in cui vive il modello.
Il secondo è l'alternativa. Un'API cloud di terze parti non è mai stata un'opzione per un'app di finanza. Quindi le opzioni realistiche erano: on-device con un modello inaffidabile, oppure l'infrastruttura privata di Apple, con garanzie sulla privacy che mi convincono abbastanza da pubblicare. Per questa funzione ho scelto la seconda.
Cosa è rimasto uguale
Il livello deterministico sotto il Consulente finanziario è la stessa architettura descritta nell'articolo di luglio. Il modello capisce il linguaggio; Swift fa i conti. «Quanto ho speso al supermercato?» diventa un intento tipizzato con un periodo e una categoria, che diventa una query Core Data, che diventa un risultato reso da un template. Il modello non tocca mai i dati reali delle transazioni, non fa mai calcoli, non scrive mai una frase su un esercente specifico.
Non è una scelta che ho rimesso in discussione. La lezione del lavoro on-device, cioè che un modello linguistico inventerà dettagli sulle transazioni nel momento in cui gli lasci raccontare a partire dai dati grezzi, vale tanto quanto per un modello cloud più capace. La forma della pipeline è giusta. È cambiato l'ambiente di esecuzione.
Il codice che è ancora lì
L'AskAnythingSheet originale, il percorso di estrazione on-device, tutto Intelligence/Chat/: ancora nel codice, ancora commentati, ancora con il tag. Se Apple rilascerà un modello on-device che colma il divario di affidabilità, il percorso è pronto. Non ci scommetto contro.
Quello che a luglio avevo valutato male era che la risposta di iOS 27 al problema sarebbe stata per forza un modello on-device più grande. Apple ha offerto prima un'altra risposta, ed era abbastanza buona per pubblicarci sopra.
Cosa significa se stai costruendo qualcosa di simile
La scelta tra on-device e cloud per le funzioni basate su LLM non è binaria, e il confine giusto non è lo stesso per ogni funzione. «Nessun dato lascia mai questo dispositivo» è una promessa forte, ed è quella giusta per i dati delle transazioni a riposo. Ma una domanda in linguaggio naturale sulle tue spese ha un profilo di privacy diverso da quello del registro sottostante. Se il Private Cloud Compute di Apple sia un confine che sei disposto a superare per una certa funzione è una valutazione: sulla funzione, sui dati coinvolti e sulle garanzie del fornitore.
Cosa direi al me stesso di luglio: definisci il vincolo con più precisione prima di rimandare. «Tornaci quando arriva iOS 27» è una condizione temporale. La condizione vera era «tornaci quando sarà disponibile un modello capace di estrarre gli intenti in modo affidabile, entro un confine di privacy con cui sono disposto a pubblicare». Non sono la stessa cosa, e la seconda ti porta alla risposta giusta più in fretta.
Il modello on-device è stato davvero utile nel resto dell'app (le schede delle analisi, la scansione degli scontrini e il categorizzatore giravano tutti bene) e nella 2.0 su iOS 27 anche queste funzioni preferiscono il Private Cloud Compute, con il modello on-device come ripiego. Per un compito specifico, a una specifica soglia di affidabilità, non bastava. È una critica più circoscritta di quella che avevo lasciato a luglio, ed è quella corretta.