aaaEpalea's picture
|
download
raw
39.4 kB
---
license: mit
task_categories:
- text-generation
tags:
- llm-evaluation
- calibration
- uncertainty
- evidence-composition
pretty_name: Evidence Composition Fidelity - Blind Spot Diagnosis
---
# Evidence Composition Fidelity: A Blindspot in How LLMs Compose Evidence
## 1. The Blindspot
Part of my job at the Nigeria Revenue Service (the Service), the apex tax agency in Nigeria,
aside from heading my unit, is to build and deploy AI systems and agents used in the work we do
in our unit and in the Service at large. However, a recurring problem I have come across in my
work and unable to concretely solve for so far is that the systems/agents we have built find it
hard to correctly compose evidence. For context, we normally work with streams of evidence,
which includes filings, reports, correspondence, etc from companies. We pass these streams of
evidence to the AI and then ask it to reason over that stream, not just answer a fixed factual
question. In that setting, the main pain points/blind spots we keep coming across over and over
again, regardless of which LLM model or agent framework we use are:
- Order robustness is taken lightly: we noticed that more recent data always tends to override
older data by default, even when the older data is not wrong or specifically superseded. The
data has just been said recently, or last, in the conversation compared to the other data in
the same conversation. The AI at most times happily lets the last thing it read/saw dominate
its answer without caring whether or not that is the right thing to weight most heavily in the
conversation.
- Dependence discounting is basically absent: in our use cases, a company might report the same
figure in three or more different places (e.g. in a filing, a cover letter, a supporting
schedule, an email correspondence, etc) and the AI system most often times than not treats the
many different reports of the same figure as many confirmations (from independent sources)
when it is really one number, repeated in different places by the same entity (in our case
same company). Real independent corroboration and mere repetition get treated the same way by
most AI models/agent frameworks.
- Temporal override is unreliable: in some cases, a company files a correction. For example,
this year's numbers supersedes the numbers that were reported last year or the initial estimate
is later revised. An agent should update its working belief and take the correction to account
by correctly overriding the old numbers with the new numbers. However, this is sadly not the
case. As we have noticed many times, corrections often get lost, especially once everything
else is discussed in-between; the model can (and usually does) drift back toward the earlier,
wrong number that has been overridden.
- Numerical fidelity breaks down under pressure: given the sector we work in (taxation and
finance), an exact figure like ₦4,189,204.20 must, at all times stay exactly ₦4,189,204.20,
especially for tax purposes, if we are to get the right reports and risk analyses out. But
models often round it, "clean it up", or drift toward a rounder or more typical-looking number.
In some worse cases, when a value is missing or redacted in the company's document, a model
will sometimes just invent a number that is plausible in its place instead of flagging it or
mentioning it as missing in its answer, which is close to the worst possible failure mode in a
compliance context.
The above blindspot has made the systems we have built non-trustworthy and undeployable, at
least not without human oversight, given that compliance failure could lead to wrongful
taxation, which in turn could lock the Service in unending litigations, which in turn would lead
to loss of revenue to the federal government.
Sadly, none of the above blindspot evaluations show up in standard LLM benchmarks, which mostly
test whether a model knows a fact it was trained on or given, i.e. a fixed, single-shot lookup.
The blindspot I am describing is different. It is about how a model composes a live stream of
evidence into a correct belief, as that evidence arrives, especially when that evidence may
update and sometimes contradict itself or existing evidence, which is exactly what happens in a
real tax administration workflow (and perhaps, I'd argue, many other fields including physical
sciences, finance, sports, legal review, medical use cases, journalism, etc). I call this
evidence composition fidelity, and this evaluation is built to test it directly.
## 2. Evaluating the gap
Model: Qwen/Qwen2.5-1.5B-Instruct (1.5B parameters, within the 0.6–6B range), loaded and run in
Google Colab on a free T4 GPU. I chose this model because it is a small instruction-tuned model
from a family of models whose larger versions are in active use and frontier research. I believe
that if a composition failure shows up even at this scale in a model family that is well-regarded,
it will be reasonable to bet that the same underlying tendency is present, maybe harder to
elicit, in the larger models people actually deploy. My claim is about the shape of the failure.
I am not saying that a 1.5B model's exact numbers transfer unchanged to a 70B version.
Design: I built a synthetic dataset (generate_dataset.py or the 4th cell of the work notebook,
seeded for reproducibility) around four batteries, one per blind spot discussed above:
- Order robustness battery: we generate this battery using a fictional entity (e.g.
Corvantex-OR7) which gets one confirming and one disconfirming piece of evidence of
designed-comparable strength. I ask for a confidence score after hearing them in one order,
then run an independent copy of the same conversation with the order reversed, and then I
compare the confidence scores.
- Dependence discounting battery: the same fictional entity as above gets either one source,
three independent confirming sources, or three dependent sources, i.e., the text of the
sources makes it clear that the second and the third are just repeating the first.
- Temporal override battery: in this battery, a claim is reported true in 2019, then a report
in 2023 overturns that of 2019. The report in 2023 is unambiguous with the overturning. For
this, I ask for confidence "as of 2019" and "right now", sometimes I insert an irrelevant
sentence between the correction and the question to test whether the correction survives being
crowded by something unrelated.
- Numerical fidelity battery: in this case, real, exact values across three fields (Chemistry,
Physics and Finance), in four categories are generated. The Categories are as follows:
1. an ordinary control value;
2. a real-but-unusual value near the famous constant (evaluating the question does the model
drift toward the constant?);
3. a value with many decimal places (evaluating the question does it get truncated?);
4. and a value replaced with an explicit missing-data placeholder (evaluating the question does
the model invent a number or does it say the number is missing?).
My choice of fictional entity names for the first three batteries (I also call them the epistemic
batteries) above is because I believe this makes the evaluation more truthful as the model will
have no pretrained prior about such fictional entities. Therefore, any change in the model's
answer has to come from how it processed the evidence I gave it in that specific conversation,
not from some prior belief it already holds due to its trained parameters. In contrast, I use
real, well-known constants and values in the numeric battery since the effect I am trying to
evaluate there (i.e. drift towards a "typical" number) only exists if such a typical value
actually exists in the model's training data.
The structure of the evaluation is such that every battery was run under a 2x2 design, which are:
- 2 prompt styles (a plain instruction [weak], vs. an explicit "don't round, don't blend, don't
invent" prompt rider [strict]) X
- 2 context textures (the model sees one piece of evidence in isolation [isolated], vs. embedded
in a fuller stream of evidence [sequential]).
This was the most important methodological decision I made in this whole study because it lets
me tell the difference between "a shallow prompting problem that a better and stricter system
prompt fixes" and "a deeper compositional failure that survives even after being explicitly told
not to happen explicitly". I ran 15 items/pairs per condition for the three epistemic batteries
and 8 numeric variants across 3 domains per condition. This makes a total of 816 model
generations in total. I then computed 95% bootstrap confidence intervals on every headline
result value, so that I could tell which differences were actually or likely real and not just
sampling noise at this sample size.
### What I found
1. Order robustness gets worse, not better, under the strict instruction, when evidence is
isolated: Across all the four conditions the model shows a bias for recent data. It leans
towards whichever evidence piece it heard last. But the largest swing of any condition (64.9
points of confidence, 95% CI: 51.3–78.3) shows up under the strict prompt with isolated
evidence, not the weak/sequential default. The interval doesn't overlap the best performing
condition, which is the weak+sequential (24.0, CI 6.0–44.0) at all. The fact that we tell the
model explicitly to reason only from the evidence given to it did not fix this. If anything,
it correlated with the worst outcome I measured. The fact that the naive fix (a better and
stricter instruction) does not touch this failure mode is the single most surprising and, I
believe, most important result in this battery.
2. Temporal corrections are fragile, and this fragility is specific to strict prompting: under
the strict prompt, especially the case whereby we add one content-free, irrelevant sentence
between an unambiguous correction and the question, we notice that the model's accuracy at
getting the direction right drops measurably (e.g. strict+sequential: 0.73 direct → 0.33 with
distractor, CIs barely overlapping). Under the weak prompt, the effect is noisier and in one
condition, it even reverses. This maps directly onto the NRS scenario that motivated this
study, that is, a filed correction should not be dislodged by whatever unrelated thing happens
to come up next in a case file, and this small model shows exactly that vulnerability.
3. The model invents specific values for data explicitly flagged as missing, at a rate around
one-third to two-fifths, in every condition tested: when a value is replaced with an explicit
placeholder like [ERROR_DATA_UNAVAILABLE], the model still, roughly a third of the time,
states a specific number instead of reporting that the data is missing (rates from 0.333 to
0.417 across all four conditions, all confidence intervals clearly above zero). This is the
most direct synthetic analogue of the exact behavior I described from my own work, which is
when a model quietly fills a plausible-looking figure where the real one should have been
reported as or flagged absent.
4. Dependence discounting revealed two different failures hiding behind one number. Under the
strict prompt with isolated evidence, checking gain_independent and gain_dependent separately
shows the negative discounting gap is not from over-trusting copies. Confidence from three
copies of one source stays roughly flat (gain_dependent, 95% CI −10.0 to 0.0). The negative
gap comes from gain_independent itself being reliably negative (95% CI −30.3 to −3.3): seeing
three genuinely independent confirming sources under a strict instruction actually lowers the
model's confidence below its one-source baseline. Under the weak prompt, both gain_independent
and gain_dependent are reliably positive in every condition tested (all four confidence
intervals exclude zero), so the model is not simply failing to react to evidence there, as I
first hypothesized. It shows a real, if small and only partially reliable, edge toward
weighting independent sources more than copies. The strict+sequential condition remains
inconclusive on which component drives its gap, since both intervals cross zero at this
sample size.
5. Numerical drift and truncation were rarer and less conclusive at this sample size: Cat2
canonical-value drift and Cat3 decimal truncation each appeared in only one of four
conditions, on a small base of 24 items, with confidence intervals crossing zero. This battery
is worth a much larger numeric sample before I can draw a firm conclusion in it, unlike the
above three findings.
### Important Note on Methodology
The model actually frequently deviated from the exact requested output format (e.g. writing
"Confidence: 75" instead of the literally requested "CONFIDENCE: 75"), especially under the weak
prompt. However, I made parsing the model output tolerant of these deviations, since a strict
parser would have silently and non-randomly dropped weak prompt responses, thus biasing the
whole comparison, which was one of our main goals. For the numeric battery specifically, the
model frequently wrote a full narrative report and never reached the required footer restating
its values; when that happened, I gave it one follow-up turn with its own reply pre-filled as
REPORTED_VALUE[CATn]:, thus forcing the format while leaving the value entirely up to the model
to decide (generate). Every row is flagged as parsed on first try or rescued, and both rates are
reported in full in results/summary_metrics.json. This is important so nothing is hidden in the
numbers reported in this repo.
## 3. Proposed path forward (speculative)
The failures discussed above come from asking one ordinary LLM to play every role at once.
Specifically, the model played the roles of reading evidence, judging its reliability, tracking
when it arrived and whether it's a duplicate, and composing a final belief informally, inside a
single context window, with no explicit, persistent representation of "what I currently believe"
that exists outside that one conversation. My proposed direction, which I'd want to further test
include, but not limited to the following:
1. Decompose composition into an explicit pipeline: Instead of one model call doing everything,
I propose to test different models handling separate steps. For example, I can dedicate a
model to be an extractor that tags each piece of evidence with whether it supports or
contradicts a claim, whether it's independent or a copy of something already seen, and when
it arrived; and another model that is in charge of a distinct composition step that combines
those tags into an updated belief. My guess is that even a small, fixed formula for combining
well-tagged evidence would outperform one model doing extraction and composition together and
that a learned composition step, trained to be robust to noisy extraction, would do better
still.
2. Give the model (or system) a persistent, external belief state: currently, I am making the
model re-derive its position from the full raw conversation every time but I am proposing a
separate external belief state which the model retrieves from and acts on by updating. In a
tax-agency setting this looks like a running case record (current belief, with a provenance
trail) that gets updated incrementally as new filings arrive which is usually what is done.
As opposed to re-reading the entire case file from scratch on every question, which only
happens in very rare cases. My hypothesis is that fidelity should degrade more slowly as the
case file grows if belief lives in a compact, explicitly-updated record instead of being
re-derived from raw context each time.
3. Train specifically on redundancy and correction, not just single-document QA: this is a
concrete, practical fine-tuning idea. I propose to build a data curation strategy around
explicitly labeled examples of "these two documents say the same thing, don't double-count it"
and "this document supersedes that one, don't drift back." Current instruction-tuning data
likely has very little of this, since most QA and instruction data is built around single,
static documents rather than corrected or duplicated streams, which would explain why this
gap is invisible to standard benchmarks in the first place.
4. On numerical fidelity specifically, I'd want to test whether simply training a model to
refuse to state a number it wasn't explicitly given (a stronger, more calibrated "I don't
know" for the missing-data case) closes most of the imputation gap, since it doesn't obviously
require touching the composition pipeline at all. This might be a much cheaper, narrower fix
than the architectural changes above.
5. Build a much larger, open benchmark from this pilot's design, and publish it. This pilot's
four batteries (order, dependence, temporal, numerical fidelity) are a narrow, single-model
test of a bigger idea: a controlled benchmark where each way evidence composition can go
wrong is varied on its own, with known ground truth, so results are not confounded by testing
several things at once. A natural next step is extending this design along axes this pilot
does not yet cover, for example how a model handles a genuinely novel entity against one it
has already seen, how much fidelity survives when the model has to compress or summarize its
own history under a fixed memory budget, and evidence that arrives as more than text, for
example a scanned report alongside a written correction. I would also want to run this across
several models, not just one, and publish the resulting dataset and evaluation code as an open
benchmark other researchers can build on and compare against.
None of the proposed paths forward above is proven here. They are all speculative. However, this
evaluation shows that the failures exist and persist under an explicit strict instruction; it
does not test whether any of the fixes above would actually work. That's the next, larger piece
of work.
## Metrics glossary
Plain-language definitions of every term used above and in the tables, in the order they first
appear.
- Confidence score - a 0-100 number the model states for how strongly it believes a claim,
extracted from its response text.
- Prompt style (weak / strict) - weak is a plain, generic instruction ("write a summary of this
data"); strict adds an explicit zero-tolerance rider not to round, blend, or invent. Crossing
both against context texture is what lets a result be read as "fixed by a better instruction"
vs. "survives an explicit instruction not to happen."
- Context texture (isolated / sequential) - isolated means the model sees only the one piece of
evidence relevant to the current question; sequential means that evidence is embedded in a
fuller, sometimes cluttered stream of other material.
- abs_diff (order robustness) - the absolute difference in stated confidence between hearing the
same confirming and disconfirming evidence in one order vs. the reverse. 0 = perfectly
order-invariant; higher = more sensitive to order alone.
- signed_diff - the same difference, keeping the sign. Consistently negative means the model
leans toward whichever evidence it heard last (recency bias); consistently positive means it
leans toward whichever it heard first (primacy bias).
- Cold baseline / zero-evidence prior - the model's stated confidence in a claim with no
supporting evidence at all. Used both as a sanity check (a fictional entity should score near
50, i.e. a coin flip) and as the normative target for the order-robustness Brier score.
- Brier score - (stated probability - target probability)^2, averaged over items. 0 is a perfect
score; higher is worse. It scores a stated confidence against a specific target, rather than
only comparing two conditions to each other.
- Order-robustness Brier target - each entity's own measured cold-baseline confidence, since one
confirming and one disconfirming piece of evidence of comparable strength should, if reasoned
about correctly, leave belief close to where it started.
- gain_independent / gain_dependent / discounting_gap (dependence discounting) - gain_independent
is the increase in confidence from 3 independent confirming sources over 1 source;
gain_dependent is the same for 3 sources that are explicitly copies of one another.
discounting_gap = gain_independent - gain_dependent. A large positive gap means the model
correctly treats copies as weaker evidence than independent corroboration; a gap near or below
zero means it does not.
- Dependence Brier - the squared gain_dependent value (as a probability), since a Bayes-ideal
updater should gain exactly zero confidence from redundant copies of one source.
- correct_direction (temporal override) - whether the model correctly rates its "as of the
original date" confidence higher than its "right now" confidence, after an explicit,
unambiguous correction. distractor_condition (direct / with_distractor) marks whether an
irrelevant, content-free sentence was inserted between the correction and the question.
- Temporal Brier - squared deviation from two fixed target values (then = 80, now = 15), chosen
to reflect how convincing the designed evidence is meant to be. These are a stated design
assumption, not derived ground truth.
- Cat1 / Cat2 / Cat3 / Cat4 (numerical fidelity) - four ways an exact numeric value can be
corrupted when restated: Cat1 (control) is an ordinary value (any error is the baseline noise
floor); Cat2 (latent pull) is a real but slightly unusual value near a well-known constant
(does the restated value drift toward the constant?); Cat3 (awkward decimal) is a value with
many decimal places (does the tail get truncated?); Cat4 (obfuscated) is a value replaced with
an explicit missing-data placeholder (does the model invent a specific number instead of
reporting it as missing?). Cat1-3 can only be measured under sequential, since those categories
require the model to have actually been shown the value.
- 95% bootstrap confidence interval (CI) - the range that a metric's value would plausibly fall
in if the same-sized sample of items were redrawn at random, estimated by resampling the
existing results (with replacement) 2,000 times and taking the middle 95% of the resulting
means. An interval that excludes 0, or two conditions whose intervals don't overlap, is
evidence the difference is unlikely to be sampling noise at this sample size; an interval that
straddles 0, or heavily overlapping intervals, means the point estimate should be treated as
suggestive only.
- parsed / exact_format / rescued - bookkeeping on how each response was scored. parsed: whether
a usable confidence/value could be extracted at all. exact_format: whether the response used
the literally requested format (e.g. CONFIDENCE: 75) rather than a variant the parser was made
tolerant of (e.g. Confidence: 75). rescued (numeric only): whether the model failed to state
its restated values in its first response and needed one follow-up turn, with its reply
pre-filled to force the required format while leaving the value itself up to the model.
## Appendix A: Full results heatmap
![Evidence-fidelity failure rate by condition](eval_summary_heatmap.png)
Every cell is a failure rate or normalized error (higher = worse), except the dependence-gap row,
where lower is worse (see the key below). Blank cells under isolated for Cat1-Cat3 are expected,
not missing data: that condition only ever shows the model the obfuscated Cat4 row in isolation,
so Cat1-3 fidelity can only be measured in sequential, where the model sees the full data table.
Row key (exact values, from results/summary_metrics.json):
| Row | weak+isolated | weak+sequential | strict+isolated | strict+sequential | What it measures |
|---|---|---|---|---|---|
| Order robustness (abs conf. diff, /100) | 0.423 | 0.240 | 0.649 | 0.323 | Mean absolute swing in stated confidence when the same two pieces of evidence are heard in reverse order. 0 = perfectly order-invariant. |
| Order Brier (vs. own cold prior) | 0.255 | 0.157 | 0.331 | 0.391 | Squared deviation of each ordering's confidence from that entity's own zero-evidence baseline confidence. |
| Dependence gap (lower = worse, /100) | 0.005 | 0.020 | -0.130 | -0.167 | (confidence gain from 3 independent sources) - (confidence gain from 3 copies of 1 source). |
| Dependence Brier (excess belief from copies) | 0.021 | 0.003 | 0.017 | 0.067 | Squared confidence gain from 3 copies of a single source, which should be exactly 0 for a Bayes-ideal updater. |
| Temporal error rate (direct) | 0.333 | 0.467 | 0.200 | 0.267 | 1 - (fraction correctly rating pre-correction confidence higher than post-correction confidence). |
| Temporal error rate (with distractor) | 0.533 | 0.333 | 0.467 | 0.667 | Same as above, but with one irrelevant sentence inserted between the correction and the question. |
| Cat1 baseline error rate | - | 0.000 | - | 0.000 | Fraction of ordinary control values reported incorrectly at all (the noise floor). |
| Cat2 drift toward canonical value | - | 0.000 | - | 0.125 | Fraction of near-a-famous-constant values that drifted toward the constant instead of the actual given value. |
| Cat3 decimal truncation rate | - | 0.083 | - | 0.000 | Fraction of many-decimal values whose tail was cut off. |
| Cat4 imputation rate | 0.333 | 0.333 | 0.333 | 0.417 | Fraction of explicitly-missing values for which the model invented a specific number instead of reporting it as missing. |
## Appendix B: Full bootstrap confidence intervals
95% bootstrap CIs (2,000 resamples) on every metric above, from results/bootstrap_ci.json and
results/dependence_gains_breakdown.csv. n is the number of independent items/pairs the interval
is built from (15 for the three epistemic batteries, 24 for numeric).
Order robustness
| Condition | n | mean abs_diff | 95% CI |
|---|---|---|---|
| strict + isolated | 15 | 64.867 | 51.333 - 78.333 |
| strict + sequential | 15 | 32.333 | 21.667 - 43.333 |
| weak + isolated | 15 | 42.333 | 23.325 - 62.667 |
| weak + sequential | 15 | 24.000 | 6.000 - 44.000 |
| Condition | n | mean Brier | 95% CI |
|---|---|---|---|
| strict + isolated | 15 | 0.331 | 0.229 - 0.435 |
| strict + sequential | 15 | 0.391 | 0.227 - 0.551 |
| weak + isolated | 15 | 0.255 | 0.184 - 0.328 |
| weak + sequential | 15 | 0.157 | 0.082 - 0.259 |
Dependence discounting
| Condition | n | mean gap | 95% CI |
|---|---|---|---|
| strict + isolated | 15 | -13.000 | -24.000 - -3.333 |
| strict + sequential | 15 | -16.667 | -41.333 - 5.008 |
| weak + isolated | 15 | 0.467 | 0.000 - 1.202 |
| weak + sequential | 15 | 2.000 | 0.000 - 5.000 |
| Condition | n | mean Brier | 95% CI |
|---|---|---|---|
| strict + isolated | 15 | 0.017 | 0.000 - 0.050 |
| strict + sequential | 15 | 0.066 | 0.007 - 0.138 |
| weak + isolated | 15 | 0.021 | 0.005 - 0.039 |
| weak + sequential | 15 | 0.003 | 0.001 - 0.005 |
Dependence discounting - gains broken down separately (follow-up check for finding #4)
| Condition | n | gain_independent | 95% CI | gain_dependent | 95% CI |
|---|---|---|---|---|---|
| strict + isolated | 15 | -16.333 | -30.342 - -3.333 | -3.333 | -10.000 - 0.000 |
| strict + sequential | 15 | -19.000 | -45.667 - 6.667 | -2.333 | -15.008 - 11.675 |
| weak + isolated | 15 | 8.000 | 2.658 - 14.008 | 7.533 | 2.000 - 14.000 |
| weak + sequential | 15 | 4.667 | 1.667 - 8.000 | 2.667 | 0.667 - 5.333 |
Temporal override
| Condition | n | correct-direction rate | 95% CI |
|---|---|---|---|
| strict + isolated + direct | 15 | 0.800 | 0.600 - 1.000 |
| strict + isolated + with_distractor | 15 | 0.533 | 0.267 - 0.800 |
| strict + sequential + direct | 15 | 0.733 | 0.467 - 0.933 |
| strict + sequential + with_distractor | 15 | 0.333 | 0.133 - 0.600 |
| weak + isolated + direct | 15 | 0.667 | 0.400 - 0.867 |
| weak + isolated + with_distractor | 15 | 0.467 | 0.200 - 0.733 |
| weak + sequential + direct | 15 | 0.533 | 0.267 - 0.800 |
| weak + sequential + with_distractor | 15 | 0.667 | 0.400 - 0.933 |
| Condition | n | mean Brier | 95% CI |
|---|---|---|---|
| strict + isolated + direct | 15 | 0.112 | 0.070 - 0.172 |
| strict + isolated + with_distractor | 15 | 0.241 | 0.170 - 0.308 |
| strict + sequential + direct | 15 | 0.172 | 0.104 - 0.239 |
| strict + sequential + with_distractor | 15 | 0.240 | 0.156 - 0.333 |
| weak + isolated + direct | 15 | 0.189 | 0.126 - 0.249 |
| weak + isolated + with_distractor | 15 | 0.203 | 0.136 - 0.266 |
| weak + sequential + direct | 15 | 0.255 | 0.206 - 0.296 |
| weak + sequential + with_distractor | 15 | 0.156 | 0.104 - 0.212 |
Numerical fidelity (Cat1-3 only measurable under sequential; see Appendix A)
| Metric | Condition | n | mean | 95% CI |
|---|---|---|---|---|
| Cat1 error | strict + sequential | 24 | 0.000 | 0.000 - 0.000 |
| Cat1 error | weak + sequential | 24 | 0.000 | 0.000 - 0.000 |
| Cat2 drift toward canonical | strict + sequential | 24 | 0.125 | 0.000 - 0.292 |
| Cat2 drift toward canonical | weak + sequential | 24 | 0.000 | 0.000 - 0.000 |
| Cat3 truncated | strict + sequential | 24 | 0.000 | 0.000 - 0.000 |
| Cat3 truncated | weak + sequential | 24 | 0.083 | 0.000 - 0.208 |
| Cat4 imputed | strict + isolated | 24 | 0.333 | 0.167 - 0.500 |
| Cat4 imputed | strict + sequential | 24 | 0.417 | 0.208 - 0.625 |
| Cat4 imputed | weak + isolated | 24 | 0.333 | 0.167 - 0.542 |
| Cat4 imputed | weak + sequential | 24 | 0.333 | 0.167 - 0.542 |
## Appendix C: Cold-baseline results
The model's stated confidence with zero supporting evidence, by source battery and condition
(results/summary_metrics.json -> cold_baseline_mean_confidence_by_condition). A well-behaved,
uncontaminated fictional-entity design would land close to 50 (a coin flip) in every cell; the
spread below shows this did not fully hold, which adds noise to the order-robustness Brier score
specifically, since that score is normed against each entity's own measured cold-baseline value.
| Source battery | weak+isolated | weak+sequential | strict+isolated | strict+sequential |
|---|---|---|---|---|
| order_robustness | 58.667 | 54.000 | 62.000 | 53.333 |
| dependence_discounting | 46.333 | 50.000 | 55.667 | 46.667 |
| temporal_override | 55.667 | 63.333 | 40.533 | 50.000 |
Mean shift from adding an irrelevant distractor alone (isolated -> sequential, zero real evidence
either way; nonzero = anchoring on noise not content): strict = -2.733, weak = 2.222.
## Appendix D: Full parse / format-compliance / rescue rates
From results/summary_metrics.json -> parse_rate_by_battery_condition. parsed = fraction of
responses a usable value could be extracted from at all; exact_format = fraction following the
literally requested format on the first try; rescued (numeric only) = fraction needing the
prefilled follow-up turn described in the Important Note on Methodology above.
| Battery | Condition | parsed | exact_format | rescued |
|---|---|---|---|---|
| cold | strict + isolated | 1.00 | 1.00 | - |
| cold | strict + sequential | 1.00 | 1.00 | - |
| cold | weak + isolated | 1.00 | 0.91 | - |
| cold | weak + sequential | 1.00 | 0.33 | - |
| dependence | strict + isolated | 1.00 | 1.00 | - |
| dependence | strict + sequential | 1.00 | 1.00 | - |
| dependence | weak + isolated | 1.00 | 0.38 | - |
| dependence | weak + sequential | 1.00 | 0.11 | - |
| numeric | strict + isolated | 1.00 | 0.71 | 0.25 |
| numeric | strict + sequential | 1.00 | 0.58 | 0.38 |
| numeric | weak + isolated | 1.00 | 0.29 | 0.54 |
| numeric | weak + sequential | 1.00 | 0.25 | 0.75 |
| order | strict + isolated | 1.00 | 1.00 | - |
| order | strict + sequential | 1.00 | 1.00 | - |
| order | weak + isolated | 1.00 | 0.53 | - |
| order | weak + sequential | 1.00 | 0.27 | - |
| temporal | strict + isolated | 1.00 | 1.00 | - |
| temporal | strict + sequential | 1.00 | 1.00 | - |
| temporal | weak + isolated | 0.98 | 0.98 | - |
| temporal | weak + sequential | 1.00 | 1.00 | - |
## Appendix E: Numeric fidelity by domain
The numeric battery spans three domains (8 items each per condition). Breaking Cat1-4 down by
domain, rather than only by prompt style and context texture, shows two of the four failure
categories are not spread evenly across domains:
- Cat2 (drift toward a canonical value) and Cat3 (decimal truncation) occurred exclusively in
the chemistry domain in this run - zero instances in physics or finance. This sharpens finding
#5 above: these two failure types are not just rare and condition-specific, they are so far
domain-specific as well, on this small a sample.
- Cat4 (imputation of a missing value) occurred in every domain, but at different rates: physics
shows the highest imputation rate in three of the four conditions tested, finance the lowest
and most stable.
| Metric | Domain | Condition | n | Failure rate |
|---|---|---|---|---|
| Cat1 error | chemistry / finance / physics | strict + sequential | 8 each | 0.000 |
| Cat1 error | chemistry / finance / physics | weak + sequential | 8 each | 0.000 |
| Cat2 drift toward canonical | chemistry | strict + sequential | 8 | 0.375 |
| Cat2 drift toward canonical | finance | strict + sequential | 8 | 0.000 |
| Cat2 drift toward canonical | physics | strict + sequential | 8 | 0.000 |
| Cat2 drift toward canonical | chemistry / finance / physics | weak + sequential | 8 each | 0.000 |
| Cat3 truncated | chemistry | weak + sequential | 8 | 0.250 |
| Cat3 truncated | finance / physics | weak + sequential | 8 each | 0.000 |
| Cat3 truncated | chemistry / finance / physics | strict + sequential | 8 each | 0.000 |
| Cat4 imputed | chemistry | strict + isolated | 8 | 0.250 |
| Cat4 imputed | chemistry | strict + sequential | 8 | 0.500 |
| Cat4 imputed | chemistry | weak + isolated | 8 | 0.625 |
| Cat4 imputed | chemistry | weak + sequential | 8 | 0.125 |
| Cat4 imputed | finance | strict + isolated | 8 | 0.125 |
| Cat4 imputed | finance | strict + sequential | 8 | 0.125 |
| Cat4 imputed | finance | weak + isolated | 8 | 0.125 |
| Cat4 imputed | finance | weak + sequential | 8 | 0.250 |
| Cat4 imputed | physics | strict + isolated | 8 | 0.625 |
| Cat4 imputed | physics | strict + sequential | 8 | 0.625 |
| Cat4 imputed | physics | weak + isolated | 8 | 0.250 |
| Cat4 imputed | physics | weak + sequential | 8 | 0.625 |
At n=8 per domain-condition cell, these are directional observations, not statistically
established differences - a larger numeric sample per domain would be needed to confirm the
chemistry-specificity of Cat2/Cat3 or the physics/finance gap in Cat4 imputation rates.
## References
The following are cited as the specific existing literatures this diagnosis's four failure modes
sit closest to:
- Lu, Y., Bartolo, M., Moore, A., Riedel, S., & Stenetorp, P. (2022). Fantastically Ordered
Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity. Proceedings of
the 60th Annual Meeting of the Association for Computational Linguistics (ACL), 8086-8098.
- order sensitivity in in-context learning; the closest existing-literature anchor for the
order-robustness battery here.
- Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2024).
Lost in the Middle: How Language Models Use Long Contexts. Transactions of the Association for
Computational Linguistics, 12, 157-173. (arXiv:2307.03172)
- documents primacy/recency-shaped position sensitivity in long-context use, directly relevant
to the sequential-context conditions and the recency finding reported above.
- Kadavath, S., Conerly, T., Askell, A., et al. (2022). Language Models (Mostly) Know What They
Know. arXiv:2207.05221.
- calibration and self-evaluation of stated confidence in language models; the general
calibration/uncertainty literature this study's Brier-scoring approach sits within.
- Graves, A., Wayne, G., Reynolds, M., et al. (2016). Hybrid Computing Using a Neural Network
with Dynamic External Memory. Nature, 538(7626), 471-476. (Differentiable Neural Computer)
- together with the earlier Neural Turing Machine (Graves, Wayne & Danihelka, 2014,
arXiv:1410.5401), the external-memory-architecture lineage that this study's proposed
persistent-substrate direction (Section 3) sits closest to.
- Kirkpatrick, J., Pascanu, R., Rabinowitz, N., et al. (2017). Overcoming Catastrophic
Forgetting in Neural Networks. PNAS, 114(13), 3521-3526. (arXiv:1612.00796)
- the continual-learning (Elastic Weight Consolidation) baseline family relevant to any
persistent-belief-state proposal that must avoid overwriting prior knowledge when updated.
- Alchourron, C. E., Gardenfors, P., & Makinson, D. (1985). On the Logic of Theory Change:
Partial Meet Contraction and Revision Functions. Journal of Symbolic Logic, 50(2), 510-530.
- the formal (AGM) belief-revision literature that the temporal-override battery's notion of
"correctly overturning a prior belief" is an informal, empirical instance of.
## Repository contents
| File | Description |
|---|---|
| oel_blindspot_eval.ipynb | The notebook that generated the dataset and produced every result above ||
| data/full_dataset.json | The full 816-item dataset (order/dependence/temporal/numeric/cold-baseline) |
| results/*.csv | Per-item scored results for each battery |
| results/summary_metrics.json | All summary statistics, including parse/rescue rates |
| results/bootstrap_ci.json | 95% bootstrap confidence intervals for every headline metric |
| results/dependence_gains_breakdown.csv | gain_independent vs. gain_dependent, separated (finding #4 follow-up) |
| results/numerical_fidelity_raw_responses.jsonl | Raw model responses for the numeric battery (first-pass and, where rescued, the rescue turn) |
| results/worst_condition.json | The auto-selected worst epistemic condition and the rule used to select it |
| eval_summary_heatmap.png | The combined 2x2 x failure-mode heatmap |
Reproducibility: MODEL_ID = Qwen/Qwen2.5-1.5B-Instruct, SEED = 0, N_PER_CONDITION = 15,
N_NUMERIC_VARIANTS = 8, TEMPORAL_TARGET_THEN = 80, TEMPORAL_TARGET_NOW = 15 (a stated design
assumption, not derived ground truth).
## Limitations
- Single model, single seed. These results characterize one 1.5B instruction-tuned model at one
point in time. A cross-model comparison is planned but not run here.
- Sample size. 15 items/pairs per epistemic condition and 24 per numeric condition are enough to
detect the headline effects above as distinguishable from noise (per the bootstrap intervals),
but several secondary observations (Cat2, Cat3, the strict+sequential dependence result) remain
underpowered.
- Hand-authored packets. All evidence packets use a fixed, hand-chosen evidence-strength design
and fictional-entity naming scheme; results may not transfer to naturally occurring text.
- This is a diagnosis of monolithic, in-context composition only. No decomposed architecture is
built or compared against in this submission - see Section 3.

Xet Storage Details

Size:
39.4 kB
·
Xet hash:
fd73622eeeccadc554fd897eb8e167fa7058b803494914bbd2a76c51d82fa96b

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.