Skip to main content

When it runs

Cloud assist is off by default. It has four uses: naming the things in a capture while indexing, writing an answer for ask on devices without Apple’s on-device model, filling a profile, and confirming the captures a rule is unsure about. See Answers and profiles for the second and third, and Classify by a rule for the fourth. Reading a single image with pool.reader can use it too, when that call opts in: see Read one capture. While indexing, a capture’s text is sent only when all of these are true:
  • Your configuration sets allowsCloudAssist = true, and your index options set namesWithCloudAssist = true. Both are off by default.
  • An active grant was requested with allowsCloudAssist: true. Tell the person in your own consent screen that text from their photos is sent to Pool.
  • Apple’s on-device language model cannot run on the device at all, for example without Apple Intelligence. Devices that have it never use cloud assist for indexing: when the model is busy for a moment, naming waits for the next pass instead.
  • The capture passed the privacy gate and has enough text to name something.
  • Your app has allowance left this month.

What is sent

  • For naming: up to 1,500 characters of recognized text and up to eight labels per capture, in batches of up to eight captures.
  • For an answer: the question and up to 40 things and excerpts PoolKit found on the device. For a profile: your schema and up to 80 recurring things. Excerpts of recognized text are included only when the grant has .recognizedText.
  • For a rule: the rule, and for each capture PoolKit is unsure about, the same text and labels plus the names of things it found, in batches of up to 24 captures. Captures the device already decided are not sent.
  • A random reference per capture that means nothing outside that request.
  • A random install identifier and your bundle ID. No account, no advertising identifier, no location, no file name, no image.

What Pool does with it

  • A language model names the things in the text and the answer goes back to the device.
  • For a rule, a judge model rates each capture against it and the ratings go back to the device.
  • Pool stores a count of cloud assist units, for billing. It does not store or log the text, the rule or the answer.
  • The text is not used to train models.
  • Names that share no word with the capture’s own text come back as low-confidence leads, so a model cannot invent a product into someone’s library.

When allowance runs out

The service answers 429 and the SDK stops asking until the time it was given. Nothing breaks: indexing, search, links and objects keep working on the device, and captures are named later.