PCC refuses factual extraction about shipwrecks (FB25314866)

We filed FB25314866. PrivateCloudComputeLanguageModel refuses to extract basic facts (name, year, depth, coordinates) from Wikipedia and dive-shop pages about warship wrecks, including a destroyer scuttled as an artificial reef. The input passes (a "reply OK" variant is answered); the output is filtered with "Streamed response may contain sensitive or unsafe content", on respond() and streamResponse alike. Guided generation passes for some of the same inputs. SystemLanguageModel offers Guardrails.permissiveContentTransformations for this kind of extraction, but the PCC model has no guardrails parameter. Is support planned, and is there a recommended approach meanwhile?

About the 11 attachments filed in Feedback Assistant:

Each file is the Data returned by LanguageModelSession.logFeedbackAttachment(sentiment: .negative, issues: [.triggeredGuardrailUnexpectedly]). It holds the session transcript (instructions, prompt, the refusal) and our explanation. Tested on macOS 27.0.1 (26A434), with a development-signed build carrying the PCC entitlement, on 2026-10-25.

  1. wreckpage_w02, w03, w04, w06: Wikipedia articles HMAS Brisbane (D 41), SS Thistlegorm, USAT Liberty and Chuuk Lagoon. The first 12,000 characters, with the HTML stripped, are sent with a request for the wreck's facts as JSON. Refused with "Streamed response may contain sensitive or unsafe content". This is the output filter: the same text
    with the instruction "Reply with the single word OK" is answered.
  2. wreckpage_w10: a dive shop's page about diving the Ex-HMAS Brisbane, a destroyer scuttled as an artificial reef. Same refusal, and also the output filter, by the same test.
  3. wargrave_34, 79, 82, 98, 186: a 2–4 sentence note about a naval wreck the diver logged, using Wikipedia background text. Refused with "Response may contain sensitive or
    unsafe content". This is the input filter: the "reply OK" variant is refused too.
  4. wreckfacts_Thistlegorm: basic facts requested by wreck name and location. Refused with "Response may contain sensitive or unsafe content". This is the output filter: the
    "reply OK" variant and guided generation both pass.

What we ruled out before filing:

  • Retries: the refusals are deterministic, and 0 of 14 retries passed in earlier runs.
  • Streaming: respond() and streamResponse refuse alike.
  • Guided generation: a @Generable struct with fixed fields passed 4 of the 6 extraction inputs with correct values. Both HMAS Brisbane inputs were still refused.
  • Control: a peaceful loss (SS Yongala, lost in a cyclone) is answered correctly.
  • On-device model with permissiveContentTransformations: it never refuses, but it makes up facts on this task, so it is not a substitute.

wreckpage_w02 includes the answer we expected (desiredOutput).

There's currently no API for app developers to impact the guardrails of PCC. You have filed the feedback report (FB25314866) with logFeedbackAttachment, and that's exactly what I'd suggest. Thanks for that.

The direction I can see is still to use SystemLanguageModel + permissiveContentTransformations, because that is the configuration that answers you. I see you have tried and determined that "it makes up facts on this task, so it is not a substitute." I am wondering if rephrasing your instructions and prompt a bit, as discussed in Prompting an on-device foundation model can make any difference. The article calls out how to improve instruction following here. Providing facts in your prompt or via tool calls for the model to better ground on may help reduce hallucination as well.

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.