A route that always picks PCC will look smart in a demo and drain a commute. Measure on a device, not only the simulator.
func fallbackOrder(from route: String, privacy: PrivacyBound) -> [String] {
switch (route, privacy) {
case ("pcc", .applePCCAllowed):
return ["pcc", "system"]
case ("coreai", _):
return ["coreai", "system"]
default:
return ["system"]
}
}
Do not add PCC to a mustStayOnDevice fallback list. If the system model is down and privacy blocks PCC, show a clear offline state. That is a product win, not a silent cloud hop.
Record milliseconds to first useful token, input tokens, output tokens, cachedTokenCount if present, and whether you fell back. Session 241 shows usage fields including cached and reasoning tokens. Those are not a semantic cache. See Reuse answers that are almost the same for that layer.
Sources: WWDC26 241, WWDC26 242, Foundation Models, Core AI.
Key concepts
- Fallback order must stay legal for the privacy bound.
- Never add PCC to a
mustStayOnDevicefallback list. - Record time to first token, token counts, cached tokens, and a fallback flag.
- Measure on a device, not only the simulator.
Takeaways
- If the system model is down and privacy blocks PCC, show a clear offline state.
- A route that always picks PCC drains battery.
cachedTokenCountis not a semantic cache.