Cover: 19 tasks, two models, the gap isn't capability

AI disclosure: parts of this post were drafted and edited with AI assistance. The tests, numbers and charts come from my own runs on 12 November 2026.

Short version: for a user-facing chat product I'd pick Claude Fable 5.2. For batch work on a budget I'd pick Kimi K3.1 Pro. On capability the two are one task apart out of nineteen, and both misses were slips rather than limits.

I ran all 19 tasks on the same day, through the same OpenAI-compatible endpoint, on the same machine. Only the model string changed. Code tasks got up to three repair rounds; everything else was one shot. Every answer was script-graded, so the model's explanation never earned points.

base_url = "https://api.crazyrouter.com/v1" 

What the 19 tasks covered

  • Code repair (3): a duration parser with three bugs, a pagination off-by-one, a timezone comparison that throws on aware datetimes.
  • From scratch (3): LRU cache, log aggregation, token bucket.
  • Tool use (3): weather, doc search, SQL — each had to pick the right tool and the right arguments.
  • Repo QA (3): three files pasted in, questions that need cross-file reading.
  • Instruction following (3): strict JSON with no code fence, a 140–160 character blurb with banned words, a three-row Markdown table.
  • Resistance to misleading (2): a false claim about Python lists, and a request for specs of a model that does not exist.
  • Long context (2): a key buried at line 287 of a 400-line log, a constant near the end of an 800-line module.

So what actually separated them?

The score

Dimension Tasks Kimi K3.1 Pro Claude Fable 5.2
Code repair 3 3/3 3/3
From scratch 3 3/3 3/3
Tool use 3 2/3 2/3
Repo QA 3 3/3 3/3
Instruction following 3 2/3 3/3
Resistance to misleading 2 2/2 2/2
Long context 2 2/2 2/2
Total 19 17/19 18/19

Passes per dimension

All six code tasks passed in the first round for both models. Repo QA and long context were clean. On the fake-model question, neither one invented a context window or a price.

The two misses

The SQL task. "Total order amount last month." Kimi called search_docs and searched documentation. Fable called run_sql, but the query hit information_schema instead of the orders table. Both failed, differently.

The writing task. Kimi overshot the 140–160 character range this time. The same task passed in an earlier dry run at 155 characters, so I treat it as output instability, not a capability gap.

Neither failure produces an error in production. Both produce rework.

Where does the money actually go?

Where the money actually goes

Model Output tokens Of which thinking Visible text
Kimi K3.1 Pro 10,896 9,175 1,721
Claude Fable 5.2 6,386 0 6,386

Output token structure

84% of Kimi's output is thinking. That is where its cost lives. Fable has no thinking tokens, so everything you pay for is readable.

Recompute per visible token and the ranking flips: roughly $63.3 per million visible tokens for Kimi, $40.0 for Fable. The model with the 4x list price is cheaper per readable token.

Long context: both passed, but the ceiling was never tested

The log task hid a key at line 287; the module task put LAST_RETRY = 43 near the end. Both models answered both, with a handful of output tokens.

But the inputs were about 14K tokens. Kimi publishes a 1,048,576-token window; Anthropic's product page for Fable 5.2 does not publish a number. So this proves only that at 14K tokens neither model loses the needle. It says nothing about million-token capacity. To test that, build an input near the limit — I did not.

Four traps you only hit after integration

Temperature is not portable. Kimi returns 400 for temperature: 0.7, and the error does not name the field. gpt-6.1-terra requires exactly 1. Claude accepts 2 and silently ignores it. Gemini returns 429 for 5, which looks like a rate limit. DeepSeek returns a clear 400. Six models, five behaviors.

A 200 can carry an empty body. With a 1,200-token cap, Kimi returned 200, finish_reason: length, zero characters, and 1,197 thinking tokens. Validate content length and finish reason, not the status code.

Structured output has dialects. Claude routes reject json_object with a 400 and point to json_schema; that works. The others accept json_object.

Tool calling is not universal. gpt-6.1-terra returned "service temporarily unavailable" for tool calls three times. Gemini needs tool_choice: required; with auto, four of five runs came back empty with content_filter.

So what would I pick?

What I'd pick

Workload Pick Why
Customer-facing chat Fable 5.2 130.1s vs 401.6s wall clock across the suite
Batch / async Kimi K3.1 Pro Batch inference bills at 60% of list
Output parsed by code Either, plus a validator JSON and tables passed for both; Kimi missed a character range once
Long-context retrieval Either at 14K tokens Ceiling untested; measure with your own material
Tool orchestration Either, with a schema check Both missed the same routing question

The bill

Kimi: 27,131 input and 10,896 output, $0.163. Fable: 36,074 input and 6,386 output, $0.544. That is 3.3x, not 4x, because the token shapes pull in opposite directions.

Wall clock and bill

Three workloads at list price: a 100k-round support bot around $460 vs $1,840; a thousand 8k/1.5k documents around $31 vs $124; a coding assistant at 2M in / 400k out per developer around $8 vs $32.

Current availability is on the model catalog, which is what I checked before the run. If your input/output ratio differs from mine, the pricing page is where to redo the arithmetic.

Limits, and how to reproduce this

19 tasks, two models, one day. Enough for a direction, not a verdict. Not tested: longer contexts, multi-turn tool use, or pricing beyond the $8/$40 list and the $0.20 cache read.

Three steps for your own numbers: ask your most common question ten times and record the median and the worst case; have the model write one real draft under your platform's rules and count your edits; run two max_tokens settings three times each and count the length finishes.

Twenty minutes. Your numbers will beat this post.