Research companion · methods, evidence and open materials

What happens when a required field asks for a detail the user never supplied? Explore the evidence and three ways to intervene.

The idea

Overview

The paper's abstract

Start here

The whole study in plain words

An everyday pictureThink of a paper form with a box marked required. Someone filling it in who does not know the answer will often write something plausible rather than leave the box empty, unless the form says “leave it blank if you don’t know”. Marking the box optional helps a little. Saying in words that a blank is fine helps much more. The paper finds the same in language models: a required slot reads as “fill me”, and models need to be told, not shown, that empty is acceptable.

New to the words? The glossary explains every term on this page in one or two sentences.

See it in 3D

Where a schema ends and permission begins

Trace a structured response through prompt assembly, a language model, decoding and two independent checks. Inspect the actual intervention branches: licensed contrastive decoding and a fitted mid-layer abstention probe.

How to use it. Choose a numbered step to see what changes and what to look at. Select a stage name to inspect it. Drag to orbit, use + and − to zoom, or play the story. The full text works without 3D.

SYSTEM ARCHITECTURE · 1 / 9

Separate evidence from contract

14 components · 18 connections
View options

Interfaces and control paths from the experimental workflow.

DataFeedbackInterventionMeasurementIllustrative geometry · no activation values encoded
1. Task, evidence and output contract2. Generation and structured output3. Independent checks and interventionsdialogue evidenceschema / permissionprompt tokenshidden statesnext-token logitsgenerated prefixgenerated responseillustrated argument handoffresponse shapefield valuessource evidenceplain logitslicensed prompt: LCD armlicensed logitsmixed logitsmid-layer prompt statenull routingselected activation patch01Source dialogue02Schema + permission03Prompt assembly04Patching donor05LCD licensed forward pat06Autoregressive LLM07Vocabulary head08Response decoder09JSON / tool arguments10Illustrated consumer11LCD: two-logit mix12GCA: fitted probe13Shape check14Source-support score

Interactive 3D loads when this map comes into view. Component inputs, outputs and connections are available below.

Drag to orbit · select a component to inspect

The connected map and all explanations work without WebGL.

STEP 1 OF 9

Separate evidence from contract

Inspect what the chat actually states, then vary the output contract. A nullable type and explicit permission to leave a field empty are distinct changes.

Look at the highlighted components.

Inspect the measured evidence ↓
Explore a component in detail
How to read the diagram and its limits

Horizontal boards separate setup, computation and evaluation. Exploded layers lifts these boards apart; it does not add neural layers. Solid blue paths carry data; amber paths loop back. Purple dashed paths are interventions; green dashed paths are measurements. Arrows show direction. Moving packets illustrate flow and do not encode measured speed, confidence or activation. Use the inspector to read every connection. Layer counts and dimensions are stated only where supported by the selected model.

Layer slabs are schematic across the 32-model inventory. Open-weight probes and patching were run on specific mechanism panels, not every API model. Asking for JSON is not the same as grammar-constrained decoding. The output consumer is an illustration; no live booking is performed. Audit arrows are research measurements, not an automatic production fact checker.

The 3D booking path illustrates how a valid JSON request could reach a service. The model outputs are measured; the depicted booking is not a live transaction. The model tower illustrates layer order, not a universal architecture.

Explore the original experiment replay and measured trajectories
See it in 3D

The paper in 3D: from a chat to a wrong API call, and how one sentence stops it

How to use itThis is the agent stack of the paper’s Figure 1, built as a street of buildings. On the left, the user’s chat. Next, the agent’s prompt and its output contract (the JSON form). In the middle, the language model as a tower of layers. On the right, the JSON it writes, the format check, and the Web service that acts on it. The ten steps follow the paper: the setting, the failure, its three questions (Q1 what causes it? Q2 how general is it? Q3 where in the model?), the three fixes and the conclusion. The caption above the picture says what each step shows and where to look, and the colours button explains the colours. Press play or click the numbers; drag to turn the scene, use + and − to zoom, and hover any part for its name and number.

Loading the 3D view…
drag to turn

Scope

How much we tested

A claim that one sentence works “across models” is only as strong as the range of models and tests behind it. Here is the size of the study, as the paper reports it.

More about the study design and test conditions
The models ·

The test sets: where the missing detail comes from

The conditions: what changes between runs

Every condition runs on the same scenarios, so each comparison is paired: the same model, the same chat, one change.

Scope

The complete study inventory

Here is what was actually tested. The model roles and sample sizes belong to specific experiments; they are not interchangeable coverage claims.

Explore all 32 models and their roles

32 models shown

Qwen3.8-27BAPI generalization panel

Alibaba

Source and method ↗
Qwen3.8-MaxAPI generalization panel

Alibaba

Source and method ↗
Command-A-PlusAPI generalization panel

Cohere

Source and method ↗
Command-R7BAPI generalization panel

Cohere

Source and method ↗
DeepSeek-FlashAPI generalization panel

DeepSeek

Source and method ↗
DeepSeek-V4-ProAPI generalization panel

DeepSeek

Source and method ↗
Gemini-3.1-Flash-LiteAPI generalization panel

Google

Source and method ↗
Gemma-4-31BAPI generalization panel

Google

Source and method ↗
Ministral-14BAPI generalization panel

Mistral

Source and method ↗
Ministral-3BAPI generalization panel

Mistral

Source and method ↗
Ministral-8BAPI generalization panel

Mistral

Source and method ↗
Mistral-Large-3API generalization panel

Mistral

Source and method ↗
Mistral-Medium-3.5API generalization panel

Mistral

Source and method ↗
Mistral-SmallAPI generalization panel

Mistral

Source and method ↗
gpt-oss-120BAPI generalization panel

OpenAI

Source and method ↗
gpt-oss-20BAPI generalization panel

OpenAI

Source and method ↗
GLM-5.3API generalization panel

Zhipu

Source and method ↗
GLM-5.3-FlashAPI generalization panel

Zhipu

Source and method ↗
Qwen2.5-72BMain API panel

Alibaba

Source and method ↗
Llama-3.3-70BMain API panel

Meta

Source and method ↗
Command-AClosed-frontier replication

Cohere

Source and method ↗
GPT-5.1Closed-frontier replication

OpenAI

Source and method ↗
Claude Sonnet 5Closed-frontier replication

Anthropic

Source and method ↗
Kimi-K3External benchmark panel

Moonshot

Source and method ↗
MiniMax-M3External benchmark panel

MiniMax

Source and method ↗
Qwen2.5-3BOpen-weight mechanism / decoding panel

Alibaba

Source and method ↗
Qwen2.5-7BOpen-weight mechanism / decoding panel

Alibaba

Source and method ↗
Qwen2.5-14BOpen-weight mechanism / decoding panel

Alibaba

Source and method ↗
Llama-3.1-8BOpen-weight mechanism / decoding panel

Meta

Source and method ↗
Mistral-7BOpen-weight mechanism / decoding panel

Mistral

Source and method ↗
Gemma-2-9BOpen-weight mechanism / decoding panel

Google

Source and method ↗
Phi-4Open-weight mechanism / decoding panel

Microsoft

Source and method ↗
Explore datasets, sample sizes and what each test measures

Authored missing-detail scenarios

42 scenarios in 8 artifact families; JSON records have 4–6 fields. Can the model keep one never-provided detail unknown? Paired prompt and field-type comparisons on the same scenario.

Source and method ↗

Spanish, Chinese and Bengali translations

Three translations of the scenarios and prompts, not three independent benchmark datasets. Tests whether the permission effect crosses scripts and languages.

Source and method ↗

MultiWOZ 2.2

Part of the 120 real dialogues in total across MultiWOZ and SGD. Dialogues are cut before the user supplies a required booking value.

Source and method ↗

Schema-Guided Dialogue (SGD)

Part of the same combined 120-dialogue pool. Service-API conversations are cut before a needed value appears.

Source and method ↗

PhantomFill

40 social threads and 20 support tickets with missing reply/transcript content, plus their 60 answerable controls. Tested on 11 models. Hard inferential fields: sentiment/themes of content the model never sees.

Source and method ↗

When2Call

100 missing-argument items and 100 items where a tool call is correct. Tested on 12 models. Tests whether the model asks for the missing argument instead of making a premature tool call.

Source and method ↗

The paper’s 32-model headline counts the core subject panels. Auxiliary pilot/scaling or discarded frontier outputs are separately documented and should not be mixed into that total.

The question

One failure, three questions

In plain wordsAn agent fills a JSON form for a Web service. The user never gave one of the details. Does the model leave that field empty, or make a value up? The paper asks what causes the made-up value, how widely the answer holds, and where inside the model the choice is made. Then it fixes it at three levels of access.

Figure 1 of the paper · where schema slot pressure arises in an agent stack, and how the paper tests it
The paper's Figure 1: an agent stack with one missing detail, the study design, the generalization axes and the strict scoring rule

One scenario at a time

The user never gave the value. Does the model write one?

In plain wordsPick one of the 42 short chats and one model. You see the model’s real answer five times: once in prose and four times as a JSON record (required or nullable field, without or with the permission sentence). Red marks a made-up value, blue a field left empty. The grid below shows the same for every chat at once.

Each card is that model's real output under one condition, with the field the user never filled marked: red where the model wrote a value, blue where it left the field empty. Verdicts follow the paper's strict scoring rule.

All scenarios for this model

Columns: prose, required, nullable, required + license, nullable + license. Click a square to open it.

Required JSON makes models invent values

In plain wordsThe same request, asked two ways. In prose, models usually say they don’t know the detail or leave a blank to fill in. In a JSON record with a required field, they usually write a value they were never given. Listing the same fields in prose already raises the rate: an empty, named slot pulls a value into it.

How often each model invents the missing detail · prose, prose that lists the fields, required JSON ·

Permission, not nullability

In plain wordsTwo things could stop the invention: changing the field’s type so that null is allowed (nullable), or adding one sentence that permits null (the license). We tried all four combinations. The type alone helps only partly. The sentence brings invention down whatever the type, and once it is there, the type no longer matters.

The 2×2 · pooled over the generalization panel · click a cell

Rows: whether the prompt adds the license. Columns: whether the field is required or nullable. The key comparison is the diagonal: a required field with the license against a nullable field without it.

Each model · sorted by the highlighted cell

Is it the content of the license, or its position?

In plain wordsMaybe the sentence works only because it is a late, explicit instruction. A sham sentence of the same length and place, with no permission in it, does not help. The real one works at the start of the prompt too. So it is what the sentence says that matters.

Position and content ·

Across models, languages, real dialogues, tool calls and benchmarks built by others

In plain wordsThe same comparison, repeated where real agents work: in Spanish, Chinese and Bengali; on real conversations collected by others; through the function-calling feature of the APIs; and on two test sets built by other research groups. The sentence helps everywhere. Where the answer has to be inferred rather than stated, it helps but is not enough alone, and an explicit escape value does better.

Every setting · fabrication of the missing value, strict rule · hover a dot for its count

Robustness checks

Four wordings of the license ·

Sampling instead of greedy decoding ·

When the user did give the detail · does the license make models drop it? ·

A mid-to-late band of layers makes the decision

In plain wordsWe run an open model twice: once where it leaves the field empty, once where it makes a value up. Then we copy the model’s internal state at one layer from the first run into the second. If that alone makes it write null, that layer carries the decision. Early layers never do; a band in the later middle of the model does. There, the permission sentence restores the empty field more than the nullable type does.

Where copying works · each open model’s best layer, as a share of its depth

License against nullable type · restoration once the patch covers the prompt

Three fixes ·

One fix per level of access

In plain wordsHow you can fix it depends on what you control. With only an API, add the sentence (fix 1). If you see the model’s scores for each next word, decode with the sentence’s effect pushed a little further (fix 2, LCD). If you have the weights, a small probe reads the model’s internal state, predicts that the detail was never given, and writes null in that field (fix 3, GCA), in one pass.

Fix 2 · license-contrastive decoding · λ = 1.5, per open model

Fix 3 · gate-conditioned abstention · one pass, per open model

Figure 2 of the paper · three fixes, one per level of access
The paper's Figure 2: the prompt license, license-contrastive decoding and gate-conditioned abstention

Discussion ·

Why it happens: a completion habit that permission overrides

In plain wordsModels have seen far more complete records than records with empty fields, so a required slot reads as “fill me”. Showing them examples with empty fields barely changes this. Telling them, in one sentence, that empty is fine does. Models need to be told, not shown.

Shown, or told? ·

Discussion · on the Web

What this means for Web API contracts

In plain wordsBelow is a real conversation between a person and a booking service. It stops just before the person gives one detail. On the right is what a real model sent to the service: with a required field it made the detail up; with one added sentence of permission it left the field empty. Further down, the same test with native tool calls.

A real dialogue becomes an API request, and the missing value goes in anyway

Agents act on Web services by filling interface contracts: a JSON Schema, an OpenAPI operation, a function definition. These are real task-oriented dialogues from MultiWOZ and the Schema-Guided Dialogue dataset (built on service APIs), cut just before the user gives a detail the request needs. Each card shows a real model's request body under a required field, and under the same field with one sentence of permission. The endpoint is an illustration; the bodies are the models' outputs, unedited.

Write the permission into the contract, and into the prompt

The same 42 scenarios through native function calling, with the call forced (pooled over models). Only the contract or the system prompt changes.

Trust and boundaries

What makes the evidence robust?

A result is more useful when we can see the alternative explanations it survived—and where it stops holding.

Separate field type from permission

Cross required/nullable typing with the presence/absence of the permission sentence on the same scenarios and model. On the 18-model generalization panel: required JSON fabricates 63%, nullable 46%, required+license 10%, nullable+license 8%. The decisive diagonal contrast has pooled odds ratio 9.7 [6.3, 14.9].

Counts differ across conditions because API coverage differs. Compare paired scenarios within models; do not present all pooled cells as equal-sized.

Source and method ↗
Rule out recency and generic extra instructions

Put a same-length sham sentence in the license position, then move the actual license to the start. Across 11 models: plain 63%, late sham 74%, license at end 9%, license at start 8%. The sham improves no model significantly; the early license improves all 11.

These rates describe the 11-model salience panel, not the whole 32-model roster.

Source and method ↗
Vary wording, sampling and the scorer

Use four license paraphrases, sample at temperature 0.7, and count uncertainty-marked concrete values as abstentions in a sensitivity analysis. All four paraphrases lower fabrication in all 11 tested models (pooled 9–24% versus 63%). On five models, sampled required/nullable/licensed rates are 61/41/10%, similar in ordering to greedy 66/41/10%. Alternative scoring shifts no pooled rate by more than 1.5 points.

Prose uses cross-family judges; JSON uses a deterministic rule. The paper also checks both formats under the same prose judge.

Source and method ↗
Check real dialogue, native tools and external tasks

Repeat on two real-dialogue datasets, force native tool calls, then evaluate PhantomFill and When2Call with answerable controls. Real-dialogue fabrication falls 26%→4% (MultiWOZ) and 38%→3% (SGD). Native tool arguments fall 70%→19% with a system license. PhantomFill required fields fall 98%→57%; adding its escape schema reaches 34%. When2Call premature calls fall 48%→33%.

Residual errors remain substantial on inferential fields; permission alone does not solve every missing-information task.

Source and method ↗
Measure the cost when the fact is present

Put the missing detail back into the same transcript and measure correct retention, wrong values, invalid JSON and over-abstention separately. On 11 generalization models, correct retention is 80% with the license versus 77% plain. Wrongly writing null rises from about 0% to 3% (4% in the separate main-panel check).

The license can still discard a provided detail. Lower fabrication must be shown alongside retention and JSON validity.

Source and method ↗

Read the claim within these limits

  • The generalization panel has 18 API models; the 32-model headline includes other API and open-weight panels. The visible roster should state each model’s role and avoid implying complete experiment coverage.
  • Chinese and Bengali required-JSON cells each come from a single model. Pooled language comparisons have different denominators and do not establish equal breadth in all four languages.
  • The strict fabrication rule counts null, placeholders, omitted keys and unparseable outputs as abstentions. A lower fabrication rate alone does not establish valid JSON or a usable record.
  • The study tests short values in JSON records and native tool calls. Long free text, XML payloads and Web forms remain outside the tested scope.
  • On PhantomFill, the license alone still fabricates 57% of unanswerable required fields. Pair the instruction with an explicit escape value and measure the remaining error.
  • The detailed mechanism and decoding panels use seven open-weight models of 3–14B. The API prompt effect does not establish an identical internal circuit in all frontier models.
Words

Glossary: the terms on this page, in plain words

Tables

Every table in the paper and its supplement

In plain wordsAll tables of the paper and its supplement, each with the paper’s caption. Type in the box to find one; click a row to open it.

Figures

Every figure in the paper and its supplement

In plain wordsAll figures, with the paper’s captions. Click one to enlarge it.

Code

All the code, as used

In plain wordsThese are the scripts that ran the experiments and the scripts that draw every table and figure of the paper. Pick a file to read it here.

Result files

Every model output and every result file

In plain wordsEvery number in the paper comes from one of these files: the raw record of every model call, the scored results, and the third-party benchmark files with their licences.

Reproduce

Rebuild the paper's tables and figures in a minute

In plain wordsDownload one archive and run a few commands on an ordinary computer to rebuild every table and figure. Re-running the experiments themselves needs API keys, and a graphics card (GPU) for the open models.

Download the archive, unzip it, and run these commands from its top folder.

pip install numpy scipy matplotlib pillow python-dotenv openai
python3 scripts/make_tables_figures.py
python3 scripts/make_schema_general.py
python3 scripts/fig1_arch.py schema
python3 scripts/fig_ladders.py schema
Scope

Where the method applies

In plain wordsWhat our results do not show, in the paper’s own words.