Agent.Space Blog

Selected GPT-6, Got Luna? How to Check Model Routing

A model picker, a request log, and a provider response prove different things. Learn how to investigate suspected model substitution and write a useful routing report.

You select GPT-6 Astra, get an unusually weak answer, and ask the assistant what model it is. It names something else. That feels like a smoking gun.

There is a problem with this test: the answer is generated text. It may reflect an instruction, stale product wording, or a guess. To investigate model routing, you need records of the request and response at the relevant boundaries.

This has become a practical question during the September Astra quality controversy. Public complaints deserve examination, but the sources we reviewed through September 15 do not establish broad, undisclosed substitution of Astra with GPT-5.6 Luna. Here is how to get closer to an answer for a particular request.

A real example of misleading self-identification

In Codex issue #44598, a user reported that three child agents requested with gpt-5.6-sol identified themselves as GPT-6. The inspected records included a GPT-6 identity instruction and Sol request settings, but lacked the actual served-model field. The report explicitly treated this as an identity and observability problem, rather than proof that the requested override had failed.

That example runs in the opposite direction from the Luna suspicion, which is precisely why it is useful. A confident model name in conversation can disagree with configuration without revealing which backend ran the call.

Follow one response through the chain

The word “model” can describe several different facts. A screenshot of one does not establish the others.

EvidenceWhat it tells youWhat it cannot establish alone
Model pickerThe choice displayed to the userThe configuration applied to a particular call
Resolved session configurationThe settings the client intends to useWhat a gateway or provider ultimately serves
Outgoing requestThe identifier sent to the next endpointWhether a downstream component changed the route
Provider response metadataThe model identifier that endpoint reports for the responseAn independent attestation of the backend weights
Correlated server traceHow the operator handled that request across its boundariesFacts outside the operator's recorded visibility

Start with what your interface actually exposes. If it provides only the picker and a usage meter, those are the available facts. The absence of a served-model field is an observability limitation. Filling that gap with a behavioral guess does not make the record more complete.

OpenAI's Responses API reference defines model on the response as the model ID used to generate it, and includes an id for the response. That gives API clients a useful association. It does not mean every ChatGPT or Codex interface exposes the same fields to end users.

Also record which endpoint produced the metadata. A third-party gateway may translate identifiers or normalize responses. If your record stops at that gateway, ask its operator for the corresponding upstream evidence. A provider's own model field is stronger evidence about its service than the assistant's prose, but it is still a provider statement, not cryptographic proof of the implementation.

Parent agents, child agents, and retries need separate rows

One visible task can produce multiple model calls. Suppose a parent uses Astra, a deliberately configured child uses Luna to locate files, and the parent then writes the patch. Seeing Luna in the child's record would be consistent with that setup.

Now suppose the first Astra call fails and a configured fallback is used. The successful response belongs to a different attempt. Associating its model field with the original request without recording the retry creates an apparent mismatch with missing context.

For each relevant call, preserve:

  • Its relationship to the visible task: parent, child, or retry.
  • The requested model and the returned model, if available.
  • A timestamp and the response or request identifier used to correlate records.
  • Any explicit fallback or model-override setting.

You do not need the entire transcript to make this association. One well-identified response is more useful than a large log in which nobody can find the answer being disputed.

Why popular “model fingerprint” tests fall short

A pelican riding a bicycle. A drawing can reveal failures in spatial reasoning or instruction following. Many configurations can produce a similar drawing, so the result does not identify the model. It becomes more useful as a repeatable quality case with an explicit scoring rubric.

Knowledge-cutoff questions. An answer about training dates may come from instructions or generated recollection. A model with web access may also know facts beyond its training cutoff. Neither result is a backend receipt.

Shorter reasoning or fewer tokens. These can accompany worse work, efficient work, different instructions, or a changed task. Duration and token count are measurements to retain alongside quality, not a model classifier.

A particular tone or mistake. Similarity is worth recording as a hypothesis. Without a validated classifier and error rates, it cannot establish that a specific response came from Luna.

Use these tests to investigate behavior with the regression-evaluation workflow. Use request and response records to investigate identity. Those investigations can support each other without becoming interchangeable.

A report template that keeps the evidence intact

Fill only the fields you can verify. “Unavailable” is an acceptable answer.

text
Time and time zone:Client and version:Entry point / endpoint hostname:Harness and selected model:Reasoning and speed settings:
Call relationship: parent / child / retry / unknownRequested model, with source:Returned model, with source, or unavailable:Explicit fallback or override settings:Response/request ID: retain for private support
Task and starting files:Expected acceptance condition:Observed failure:Reproduction attempts, including successful ones:Other settings changed during the comparison:
What the records establish:What remains unknown:

Keep authentication headers, cookies, private source code, and unrelated prompts out of public reports. Share identifiers and the smallest relevant diagnostic excerpt through the provider's appropriate support channel. A raw browser archive can contain much more account information than the reported failure requires.

If the client cannot export served-model information, say exactly that in the report. The operator may be able to use an identifier to look further. Do not manufacture a value by copying the request's model field into a column called “actual model.”

Decide what the result means for your work

If the records show an explicit child configuration or fallback, you have a configuration to inspect. If the request and response disagree without an explanation, you have a concrete mismatch to escalate. If the necessary response metadata is unavailable, identity remains unresolved; you can still demonstrate a task-quality failure with a controlled comparison.

In Agent.Space, keep the distinction between Agent harness and model visible when trying another configuration. Select a supported model for the harness, give it a bounded task, and save the resulting patch and verification evidence. Switching configuration may help you finish the work; it does not retrospectively identify the backend of an earlier response.

That is the standard worth aiming for: a claim narrow enough to verify, linked to a particular request, with a clear next step for whoever owns the missing evidence.

Sources checked September 15, 2026. The diagnostic template and hypothetical parent/child examples are original to this article.