Skip to content
trending

Benchmarks

AI Model Refuses to Read Documents: Testing Three Providers

A context test revealed content_filter triggers for every document above ~2000 tokens across AWS, the producer, and Google - even for text about plants.

By 6 min read
AI Model Refuses to Read Documents: Testing Three Providers

👁 117 reads

I prepared an AI model context test: a document with hidden information, questions about it, and a check of how much the model could find. The result was zero, so I briefly assumed the model had poor memory. After examining the raw API response, it turned out the model hadn’t read a single word - the input was rejected by moderation and returned with content_filter and native_finish_reason: refusal.

Key Finding in One Paragraph

Zero hits in a memory test isn’t always proof of short context. In my measurement, the model returned content_filter and native_finish_reason: refusal for EVERY document above approximately 2000 tokens, and this happened across three independent providers - AWS, the producer’s API, and Google. The refusal applied even to text about plants, which contained no technical content, tool names, or anything that could be considered sensitive. When I substituted an alternative model on the same material and the same questions, it hit 6 out of 6 hidden pieces of information in 2.3-4.9 seconds. So the task was achievable, and the earlier result measured moderation, not memory.

How the AI Context Test Worked

The scheme was simple and deliberately boring. I took a document, wove six specific pieces of information into it at different locations - at the beginning, in the middle, near the end - and then asked six questions, one for each hidden piece of information. I counted hits and response time. Nothing more.

I started the test material with a short version and scaled upward. This is important because this procedure allowed me to see where the boundary lies. Below approximately 2000 tokens, responses came normally. Above that - content_filter, every time, without exception.

To rule out content as the reason, I swapped the document for text about plants. Zero technical terminology, zero code, zero anything controversial. Identical refusal.

Three Providers, Same AI Context Limit

The first thought when facing refusal is usually: something in the configuration of this specific endpoint. That’s why I repeated the test across three independent access paths - AWS, directly at the model producer, and Google. These are separate infrastructures, separate panels, separate security settings. The behavior was identical.

This is the strongest element of the entire measurement for me. If the problem resided in my code or in one incorrectly set moderation threshold, it wouldn’t have repeated across three platforms simultaneously.

Element Before Diagnosis (Refusing Model) After Substitution (Alternative Model)
Hits on Hidden Information 0 - no substantive response 6 out of 6
Response Time not applicable - refusal 2.3-4.9 s
Returned Status content_filter, native_finish_reason: refusal normal completion
Refusal Thresholds every document above ~2000 tokens none
Text About Plants refusal processed
Number of Providers with This Behavior 3 out of 3 (AWS, producer, Google) 0

Why “Model Refuses to Respond” Is Easy to Confuse with Poor Memory

Most client libraries and wrappers show empty response content or a short placeholder message. The finish reason code is often hidden one field deeper and nobody looks at it if the test script simply counts hits. In this setup, an empty string looks exactly like “the model didn’t find the information.”

The effect is insidious because a zero result fits the intuitive hypothesis. We expect a long document to burden memory, so failure on a long document seems like confirmation. But we’re measuring something completely different: whether the material even passed through the input filter.

This is my opinion, but I believe some published “AI context limit” comparisons are actually measuring moderation. I have no data for this beyond my own measurement, so I treat it solely as a hypothesis, not an established fact.

What Specifically Changed After Model Substitution

After switching to a different model, I didn’t touch anything else. Same document, same six questions, same order, same infrastructure. Hits: 6 out of 6. Times: from 2.3 to 4.9 seconds, depending on how deep in the document the sought information was located.

The 2.3-4.9 second spread is also information. It shows the model actually goes through the material rather than answering from pattern memory. If it were answering with generalities, the times would be more uniform.

Most importantly: since the second model completed the task in full, the task was achievable. The earlier zero wasn’t an assessment of the test’s difficulty.

When to Suspect Moderation Rather Than Context

Several warning signals emerge from my measurement. First: the result doesn’t degrade gradually, it drops sharply. A real memory problem usually gives a soft transition - first one piece of information is lost, then another. An input filter switches binarily.

Second signal: the boundary falls at a round, low value. Approximately 2000 tokens is decidedly too little to talk about exhausting the context window of any contemporary model. If the result collapses this early, context is almost certainly not the culprit.

Third: refusal for safe content. Text about plants is a good control material precisely because there’s nothing in it to block. If it too returns with refusal, the cause lies in volume or configuration, not in topic.

How to Check This Yourself

  1. Log full raw API responses, not just the content field. You’re interested in finish reason codes - in my case these were content_filter and native_finish_reason: refusal.
  2. Prepare one document with six hidden pieces of information distributed from beginning to end of the text. Record exactly where each one sits.
  3. Run the test on a short version, well below 2000 tokens. This is your reference point - if it doesn’t work here, the problem is in the prompt, not the length.
  4. Increase document volume in jumps and note at what value the first refusal appears. If the boundary falls sharply rather than gradually, think about filters.
  5. Substitute thematically neutral material - for me it was text about plants. If it too returns with refusal, content isn’t the cause.
  6. Repeat on a second and third provider. I checked AWS, the producer’s API, and Google. Behavioral consistency across three platforms rules out local configuration error.
  7. Swap the model for a different one, changing nothing else. If it hits all six pieces of information, you have proof the test was achievable and the earlier zero measured something else.
  8. Record response times separately for each question. Spread - for me 2.3-4.9 seconds - confirms the model actually searches the material.
Google · Your sourcesQuantslant higher in your Google - one clickAdd to preferred sources →

Where These Numbers Come From

All values come from my measurement performed before September 21, 2026. I tested one model through three independent access paths: AWS, the producer’s direct API, and Google. Test material: a document with six hidden pieces of information, scaled by volume, plus a control version about plants without technical content. Refusals with codes content_filter and native_finish_reason: refusal occurred for every document above approximately 2000 tokens across all three providers. The alternative model on an identical set of tasks hit 6 out of 6 hidden pieces of information in 2.3-4.9 seconds. I’m not providing model names or exact moderation thresholds because I have no confirmation that provider-side settings remained unchanged after the measurement date. Fragments marked as opinion are my conclusions, not measurement results.

Kinetyra

// read next

More on this from QUANTSLANT

Piotr Olszewski

Editor and publisher · Quantslant

I edit and publish Quantslant. AI tools help with research, drafts and translation; choosing topics, running the tests, checking facts and the decision to publish are mine, and so is the responsibility for what appears here.

read nextQwen-Image-2.1 Alpha Channel: Native Transparent PNG TestbenchmarksQwen-Image-2.1 Alpha Channel: Native Transparent PNG TestWe measured alpha channel output in Qwen-Image-2.1: 22.7% fully transparent pixels and full 0-255 range. How to prompt for transparency and what to watch for.

Most read

  1. 1Best AI Video Generator Apps for Your Phone (2026)
  2. 2Claude Opus 5.5 Motion Graphics: 60s Showreel from One Prompt
  3. 3Wan 2.2 on RTX 4090: timings, VRAM and four test clips
// site map

This page in other languages6

Quantslant in numbers 1,423posts in archive22news from the last 7 days18video models in the observatory
🎬 AI Video Benchmarks: Higgsfield DoP vs OpenAI Sora • Higgsfield vs Runway Gen-3 • AI Video Credit Calculator
× ‹ enlarge ›