← all posts
// models · kimi

Kimi K2.5: Long context without the token landfill

...so no, I'm not putting Kimi K2.7 in a price table just because a spreadsheet already has a row for it.

The K2.7 that isn't real yet

Moonshot's docs describe Kimi K2.5 as its multimodal model, nothing about a K2.7. The identifier to test is kimi-k2.5, built for long-context, coding, agent, and document work. Reread the docs before you ship: aliases, prices, and availability move faster than any writeup. Keep K2.7 out of code, price tables, and benchmark claims until a real endpoint exists behind it. Naming discipline sounds petty until a teammate ships a config pointing at a model that doesn't exist.

Decide what better means before you send a token

Write down what counts as success before the first prompt, because fluency isn't it: a schema-valid record for extraction, a patch that passes tests and review for coding, a claim set with a source behind every claim for research. Then test it: bucket prompts by length, plant known evidence at different positions, and measure recall against a plain full-context run. Hold the rest of the request constant across runs, same instructions, tool schemas, files, sampling settings, output limits, because a harness handing the model native tools makes it look smarter than one pasting in raw terminal output, and that gap has nothing to do with the model. Log the boring fields too: model ID and dated version, token counts by category, timing by phase, and whether the result passed, got retried, or landed on a human.

Where the tokens actually go to die

The expensive mistake is treating the advertised maximum as an architecture: stuff every document in and trust the model to sort it out. That's the trap. Frontier output looks plausible by default, so the failure hides until someone checks the facts and finds duplicates burying the one paragraph that mattered. Long context doesn't remove prefill time, retrieval noise, or the job of keeping trusted instructions separate from whatever you pulled off the web. Cache-friendly APIs reward a stable prefix first, volatile metadata off the boundary, and a checkpoint instead of full history when one will do. A model that calls tools better still needs your app to validate arguments, check who's authorized, and log what happened, because a scraped page is data somebody handed you, not an order.

Put the decision in a config file, not memory

Pull the smallest evidence set that answers the question, and save the big window for work that's proven it needs one, written into configuration rather than left to whoever's on call this month. Pin dated versions where stability matters, canary new aliases before full traffic, and keep a fallback one flag away, the posture behind sane model migrations and a working model-selection dial. Re-run the eval set whenever the model, prompt, or tool contract changes.

I'll skip most of that on anything that looks like a day's work, eyeball a handful of outputs, and ship anyway, which is exactly what the last four paragraphs told me not to do.

#kimi#moonshot#api#evaluation