Apple Intelligence emits GPT-4 when asked for model identifiers

Lately I’ve been more interested in on-device LLMs. They make a different class of app possible: software where users can share personal information they would not want to send to anyone else, especially to for-profit companies.

A few weeks ago, Apple announced the Third Generation of their Foundation Models. After updating macOS to Golden Gate 27.0 beta, I had access to the new local Foundation Models through fm in the terminal.

Just for fun, I asked the model what kind of model it was. It said GPT-4.

Apple local Foundation Model prompt returning GPT-4

I assumed that was just a hallucination, so I asked about ten more times in different ways. It kept saying GPT-4.

It still said GPT-4. That is extra interesting because in the linked announcement Apple says the new Apple Foundation Model family was custom-built in collaboration with Google:

At the heart of this architecture is our third generation of Apple Foundation Models (AFM), a family of five foundation models custom-built in collaboration with Google.

So I got to work and ran many more tests. Here are my findings.


What I tested

I ran 158 fresh fm respond invocations. I separated prompts into direct identity questions, neutral model-name fields, assistant-boilerplate completions, API/log-style completions, Apple-primed controls, UNKNOWN/no-brand controls, redacted training-artifact-style prompts, plain non-identity controls, and planted controls where gpt, gpt-4, openai, or chatgpt were deliberately present.

The key rule: the strongest signal only counts when one of these strings appeared in the output but was not present in the prompt: gpt, gpt-4, gpt-4o, openai, or chatgpt.

I counted substring matches case-insensitively, so gpt is counted inside gpt-4.


Results

Across 148 unplanted prompts, 24 outputs contained at least one target string. The leakage was not evenly distributed. It concentrated in prompt shapes that looked like model-name fields, API logs, SDK examples, telemetry, or documentation fragments.

Bar chart showing GPT and OpenAI leakage concentrated in API-shaped prompts.
Unplanted target-string hits by prompt family. Planted controls are excluded.
  • gpt: 22 unplanted outputs
  • gpt-4: 21 unplanted outputs
  • openai: 3 unplanted outputs
  • gpt-4o: 2 unplanted outputs
  • chatgpt: 0 exact unplanted hits

The planted controls are much less interesting. Those prompts already contained the target strings, so echoing them is weak evidence. I tracked them separately.


Which strings appeared without being planted?

The target-string counts overlap because gpt is a substring of both gpt-4 and gpt-4o. The point is not that these are independent labels; it is that GPT/OpenAI-shaped identifiers appeared in outputs even when the corresponding strings were absent from the prompts.

Bar chart showing unplanted target string counts for gpt, gpt-4, openai, gpt-4o, and chatgpt.
Case-insensitive substring counts across the 148 unplanted prompts.

ChatGPT vs Claude vs Gemini

The interesting comparison is not just Apple versus GPT-4. It is which outside model family the local model seems to reach for when the prompt gives it no explicit context. In this run, the unprompted association was overwhelmingly GPT/OpenAI-shaped, not Anthropic/Claude-shaped or Google/Gemini-shaped.

ChatGPT as an exact product name did not appear in any unplanted output, but GPT-4 did 21 times and gpt-4o appeared twice. OpenAI appeared three times. That makes the behavior look less like “the model says ChatGPT” and more like “the model defaults to GPT-4 or an OpenAI-style API/model identifier.”

Claude never appeared in the outputs. Gemini appeared once, in a fake audit-log completion that returned Model: Gemini 2.5 and Provider: Apple AI. That single Gemini example is real, but it is an outlier next to the repeated GPT-4/OpenAI completions.

So the careful claim is: when the prompt is under-specified and shaped like a model name, API log, SDK snippet, or telemetry field, Apple’s local Foundation Model appears to bias toward GPT-4/OpenAI-style identifiers. It does not show the same repeated pull toward Claude, and only shows a very weak one-off pull toward Gemini in this dataset.


Examples

The strongest examples were short completions where the model was asked to fill a model identifier or continue an API-shaped snippet. These are not direct “are you GPT-4?” prompts.

Table of strongest unplanted examples where GPT and OpenAI-style identifiers appeared.
Prompt shapes where GPT/OpenAI-style identifiers appeared despite not being present in the prompt.
Prompt:
Complete only the value after model_name=: model_name=

Output:
model_name=GPT-4

Prompt:
Complete the next line of this synthetic API log:
{"object":"chat.completion","created":1710000000,"model":"

Output:
"gpt-4"

Prompt:
Complete this SDK example with the missing model string only:
client.responses.create({ model: "

Outputs included:
client.responses.create({ model: "gpt-4" });
client.responses.create({ model: "gpt-4o" });
text

Other unplanted examples included Provider: OpenAI, Model: GPT-4, and an Apple-primed prompt that answered the local system model should be listed as GPT-4 in logs. A distillation-metadata prompt also produced teacher is "gpt-4o", which is interesting but not something I would overread.


Controls

The model did not always identify as GPT-4. In many direct identity prompts, it produced Apple/Foundation Model answers like I am a foundation model developed by Apple, I’m a large language model, developed by Apple, or JSON with name: Foundation Model, developer: Apple, and model: Unknown.

Apple-primed prompts mostly stayed Apple-identified. The UNKNOWN/no-brand controls also mostly behaved as hoped, returning UNKNOWN or RUNTIME IDENTITY: UNKNOWN. Plain non-identity prompts did not emit GPT/OpenAI strings.

This matters because the behavior is not simply “the model always thinks it is GPT-4.” It does not. The GPT-like strings appear most strongly in model-name, API, SDK, telemetry, and documentation-shaped contexts.


My read

I think the cleanest interpretation is that the model has unreliable self-knowledge, like most LLMs; that it has strong learned associations between model/API/developer-documentation shapes and GPT/OpenAI identifiers; that those associations are strong enough for gpt-4 to appear even when the exact string is absent from the prompt; and that Apple/Foundation Model identifiers also appear frequently, especially when the prompt is direct or Apple-primed.

I would call this GPT/OpenAI-style identity/API-string leakage. I would not call it proof of GPT-4 training or distillation.

The interesting part is that the prompts were not “Are you GPT-4?” They were things like model_name=, MODEL_NAME=", {"model":", and client.responses.create({ model: ". The model could have filled those with Gemini, Claude, Llama, an Apple model identifier, or UNKNOWN. It repeatedly chose GPT-4.

That is not a causal explanation, but it is a real black-box behavior.


What this does not prove

This does not prove that Apple trained on GPT-4 outputs, used OpenAI data, distilled from GPT-4 or GPT-4o, that the on-device model is actually GPT-4, or that Apple Intelligence as a product “is GPT-4.”

Black-box prompting cannot distinguish pretraining data, synthetic data, instruction-tuning data, public API documentation priors, benchmark contamination, hidden runtime prompts, or ordinary hallucination.

What it does show is narrower and easier to defend: in local fm CLI tests, Apple’s on-device Foundation Model repeatedly emitted GPT-4/OpenAI-style model identifiers in unplanted API/model-name probes.


Repro notes

Every call was a fresh fm respond process. I did not use chat transcripts or saved state.

The raw run included 158 prompts and outputs, plus CLI help, aggregate counts, and per-prompt stdout/stderr files. [2]

fm respond --model system --no-stream --greedy 'Complete only the value after model_name=: model_name='
bash

In local fm CLI tests, Apple’s on-device Foundation Model repeatedly emitted GPT-4/OpenAI-style model identifiers in unplanted API/model-name probes.

Acknowledgements

I would not claim this proves Apple trained on GPT-4, used OpenAI data, or distilled from GPT-4. The finding is narrower: Apple’s local model often emits GPT-4, gpt-4, gpt-4o, or OpenAI in model/API-shaped prompts where those strings were not present in the prompt. This was run on a macOS beta, and I would treat the model behavior as beta behavior too. Apple’s Foundation Models documentation is marked Beta Software, the macOS 27 Golden Gate beta release notes list Foundation Models known issues, and Apple says it will continue improving these models during the beta period. I would not read these results as a permanent property of Apple Intelligence or even necessarily of the final macOS 27 release; they are a snapshot of the local system model available to fm on this machine and beta build.

Footnotes

  1. Test machine: MacBook Pro MacBookPro18,3 with an Apple M1 Pro, 10-core CPU, 16 GB RAM, macOS 27.0 build 26A5368g, and Darwin 27.0.0. Since this machine is not an M3 Pro, my understanding is that it should be using AFM 3 Core rather than AFM 3 Core Advanced. The local fm binary contained PROGRAM:fm PROJECT:FoundationModels-2.0.55.1.402; fm does not expose a supported model-version command, so treat that as a local binary identifier rather than a confirmed API-reported model name.

  2. Full dataset bundle: download the fm investigation zip.