DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1: Three LLMs Tested on Long-Context Vibe Coding
Published on 28 April 2026
- Context: not a test bench, a worksite
- My test environment
- The Evaluation Grid
- Round 1 : Kimi K2.6 — The False Start
- Round 2: GLM-5.1 — The Honorable Fighter
- Round 3 : DeepSeek-V4-Pro — The War Machine
- Face-to-face: Comparative Metrics
- Why DeepSeek-V4-Pro Wins in Software Development
- Lessons Learned: How to Choose Your LLM for Vibe Coding
- And the Governance Agent in all that?
- Technical Sources
- Conclusion : The Choice of the Artisan
The battle of LLMs also plays out in a developer’s terminal. Not on sterile academic benchmarks. In real life: a 30,000‑token prompt, an agent governance in AsciiDoc, Gradle Kotlin DSL plugins to debug, and sessions that chain over three weeks. I tested for you DeepSeek‑V4‑Pro, Kimi K2.6 and GLM‑5.1. Here is the verdict, backed by technical evidence.
- knock
-
[]
Context: not a test bench, a worksite
Three weeks ago, I was working on`codebase-gradle`, my meta-build system that centralizes the YAML configuration of four projects: a PlantUML README generator, an AsciiDoc slide builder, a JBake static site, and an LLM chatbot. The Opencode agent, governed by my agent-files methodology in AsciiDoc, loaded ~30K tokens of EAGER context at the start of each session — absolute rules, backlog, history of the last 10 sessions.
It’s on this field that I confronted three models:
-
Kimi K2.6(Moonshot AI, 1T params / 32B activated, 256K max context, MLA) - GLM-5.1(Zhipu AI/Tsinghua, 744B params / DSA, 200K max context) - DeepSeek-V4-Pro(DeepSeek, 1.6T parameters / 49B activated, 1M max context, CSA+HCA)
All served via Ollama on cloud server, all in thinking mode (reasoning phase activated). The challenge: produce correct code, maintain consistency over long sessions, and avoid hallucination when the context exceeds 80K tokens.
My test environment
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220
title Test Environment — Opencode Sessions × 3 LLMs
left to right direction
package "️ Developer Terminal" #E8F5E9 {
rectangle "AGENT.adoc\n(rules, backlog)" as AG
rectangle "RESUMPTION_PROMPT\n(mission)" as PR
rectangle "INDEX.adoc\n(roadmap)" as IDX
}
package "☁️ Ollama Cloud" #BBDEFB {
rectangle "DeepSeek-V4-Pro\n1.6T / CSA+HCA" as DV4
rectangle "Kimi K2.6\n1T / MLA" as KIMI
rectangle "GLM-5.1\n744B / MLA+DSA" as GLMG
}
package "⚙️ Gradle Codebase" #FFF9C4 {
folder "buildSrc/" {
file "codebase.kt"
file "readme.kt"
file "site.kt"
file "slider.kt"
file "snapshot.kt"
}
file "build.gradle.kts\n(947 lines)"
file "embeds.yml"
}
AG --> DV4 : Sessions 1-8 ✅
AG --> KIMI : Sessions 9-10 ⚠️
AG --> GLMG : Sessions 11-13 ⚠️
DV4 --> "Codebase" : "TDD, refactoring,\nsnapshot"
KIMI --> "Codebase" : "Degradation\nstarting at 60K tokens"
note bottom of GLMG
Meilleur que Kimi
mais latence +
DSA moins robuste
que CSA+HCA
end note
@enduml
Each session started with about 30K tokens of EAGER context:`AGENT.adoc`(287 lines)PROMPT_REPRISE.adoc(51 lines),.agents/INDEX.adoc(218 lines),LAZY_EAGER_ESSENTIALS.adoc(50 lines). The context grew quickly with the exchanges — a typical session of 10 messages added 15-20K tokens to the cumulative prompt.
The Evaluation Grid
I evaluated each model on four critical axes for assisted software development:
Axis |
Concrete criterion |
Long context coherence |
Does the agent remember the conventions decided 40 messages ago? |
Quality of the produced code |
Does the code compile on the first try? Does it respect existing patterns? |
Architectural reasoning |
Does the agent understand the relationships between modules without me having to re‑explain them? |
Resistance to hallucinations |
From how many tokens does the agent start to invent nonexistent APIs or classes? |
And a home-made synthetic metric: therecovery coefficient(how much time I spend correcting the agent instead of coding with him).
Round 1 : Kimi K2.6 — The False Start
Kimi K2.6 was my first choice. Its benchmarks on SWE-Bench Verified (80.2) and Terminal-Bench 2.0 (66.7) are excellent. Its MLA architecture promises good efficiency on long sequences.
Session 9: the improvement
First session with Kimi. Task: implement the method`resolveActiveKey()in`codebase.kt— an API key resolution function with CLI fallback. The context is 30K tokens, Kimi reasons quickly, produces clean code with key expiration handling.
fun resolveActiveKey(
cfg: CodebaseConfiguration,
logger: Logger,
cliProvider: String? = null,
cliAccount: String? = null,
cliKey: String? = null
): NamedApiKey? {
// Résolution provider → compte → clé avec CLI override
// Kimi a parfaitement compris la chaîne de priorité
}
The code compiles. The 7 test cases pass. I am optimistic.
Session 10 : the silent shipwreck
Second session. The context climbs to ~90K tokens with the exchanges. I ask Kimi to add an AsciiDoc snapshot mechanism that anonymizes secrets before writing.
That’s where it derails. Kimi starts to invent classes that don’t exist. He offers me`AnonymizedObjectMapper`— a fictitious class. He confuses`ReadmeYmlAnonymizer` et CodebaseYmlAnonymizer. He suggests that I import`com.fasterxml.jackson.anonymize.*`— a package that never existed.
Worse: in his thinking phase, I see that he is building arguments on false premises. He "remembers" that`GitConfig`has a field`anonymizedToken`— no, it’s`resolvedToken(). It attributes to`SiteYmlAnonymizer`a method`maskSupabaseCredentials()— which does not exist.
__ It wasn’t a bug. It was a gradual dissolution of coherence. As if each token added to the context diluted a little more the memory of the first 30,000. </think>
I stop Kimi after two sessions. The diagnosis is clear: MLA compresses the KV cache well, but without a fine-grained sparse selection mechanism, attention dilutes mechanically beyond 60K tokens. Each token "sees" the distant context less and less well — and starts filling the gaps with noise.
Round 2: GLM-5.1 — The Honorable Fighter
GLM-5.1 arrives with a different architecture: MLA for the base model, then a continued pre-training with DSA (DeepSeek Sparse Attention) — a lightweight indexer that dynamically selects the top-2048 relevant tokens from the entire history.
Architecture: the DSA against the pure MLA
The difference is fundamental. Where Kimi compresses history into a single latent space (and gradually loses the ability to discriminate relevant information), GLM grafts a post‑training indexer that makes an explicit sparse selection.
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
title Attention Architectures — MLA vs MLA+DSA
left to right direction
rectangle "**Kimi K2.6 — pure MLA**" as MLA #FFCDD2 {
rectangle "KV Cache\ncomplete" as KV1
rectangle "Latent compression" as CL1
rectangle "Decoding\non latent space" as DL1
KV1 --> CL1
CL1 --> DL1
note bottom of DL1
⚠️ Au-delà de 60K tokens :
perte de discrimination
end note
}
rectangle "**GLM-5.1 — MLA + DSA**" as DSA #C8E6C9 {
rectangle "KV Cache\ncomplete" as KV2
rectangle "Latent compression (MLA)" as CL2
rectangle "Lightweight indexer\n(DSA, top-k=2048)" as IL
rectangle "Decoding\non selected tokens" as DL2
KV2 --> CL2
CL2 --> IL
IL --> DL2
note bottom of DL2
✅ "Lossless by construction"
Sélection explicite
des tokens pertinents
end note
}
MLA --> DSA : "Gain: sparse selection\nthat avoids dilution"
@enduml
The technical report explicitly states: DSA is "lossless by construction" — unlike alternatives such as SWA (pattern search), Gated DeltaNet, or SimpleGDN, which lose up to 5.69 points on RULER@128K.
Sessions 11-13: solid but frustrating
GLM-5.1 holds distance better. During session 11 (~60K tokens), it remains coherent. It produces a`SnapshotManager`functional with correct management of the four anonymizers
But latency is a problem. DSA reasoning phases are heavier than pure MLA — the indexer must rescan the history at each step. A response that took 8 seconds with Kimi takes 15 with GLM. In a 30‑message session, it’s felt.
And then there are the subtle errors. GLM doesn’t hallucinate like Kimi — but it makes naming errors. He calls`toAnonymizedYaml()the method that should be called`anonymize(). It reverses`loadReadmeConfiguration()` et loadCodebaseConfiguration()`in the`renderFileSection(). These are not hallucinations, they are superficial confusions — but in production, a superficial confusion can break a build.
I held three sessions with GLM. It is better than Kimi, without a doubt. But three sessions of manual correction on naming details are exhausting.
Round 3 : DeepSeek-V4-Pro — The War Machine
DeepSeek-V4-Pro arrives with the most ambitious architecture of the three: a hybrid system that combines two complementary attention mechanisms.
Architecture: CSA + HCA, the double net
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 180
title DeepSeek-V4-Pro — Hybrid CSA + HCA Architecture
left to right direction
rectangle "KV Cache\n1M tokens" as KV #E3F2FD
rectangle "CSA\nCompressed Sparse Attention" as CSA #C8E6C9 {
rectangle "Compression\nm tokens → 1" as CC
rectangle "Sparse Attention\n(DSA, top-k)" as SA
CC --> SA
note bottom of SA
Attention locale fine
+ sélection sparse
end note
}
rectangle "HCA\nHeavily Compressed Attention" as HCA #BBDEFB {
rectangle "Extreme compression\nm' >> m → 1" as ECC
rectangle "Dense\nresidual attention" as EDA
ECC --> EDA
note bottom of EDA
Contexte global
+ connexions longue distance
end note
}
rectangle "Fusion\nHybrid" as FUSION #FFF9C4
rectangle "Coherent\ndecoding" as DEC #FFE0B2
KV --> CSA : Précision locale
KV --> HCA : Vision globale
CSA --> FUSION
HCA --> FUSION
FUSION --> DEC
@enduml
Two levels of compression, two attention granularities:
-
CSAcompress the KV cache all the`m`tokens, then applies a sparse attention (DeepSeek Sparse Attention) — only the top-k of the compressed entries is consulted. Precise, local, efficient. - HCAextreme compression (factor`m'`much larger than`m`), but pay attention to the dense attention on the compressed residue — keep the global connections without quadratic explosion.
Result: at 1M tokens, DeepSeek-V4-Pro consumes only27% of inference FLOPs et 10% of the size of the KV cachecompared to DeepSeek-V3.2. The previous model.
And most importantly, the technical report (Figure 9) states: "_Retrieval performance remains highly stable within a 128K context window."".
Sessions 1-8: relief
I spent eight sessions with DeepSeek-V4-Pro on`codebase-gradle`. Eight sessions without a single hallucination, without a single invented class, without a single naming confusion.
Session 1: implementation of`CodebaseYmlConfig` et CodebaseYmlAnonymizer. 350 lines of Kotlin, inline tests, all compiles. Session 4 : adding the`SnapshotManager`with tree view, file collection, AsciiDoc rendering per file. 279 lines, zero error. Session 7: debug of the`renderFileSection()`who had to handle four different types of anonymisers without resolution ambiguity. Resolved in three messages.
The latency is higher than Kimi — about 10-12 seconds per response in thinking mode. But the correction rate is almost zero. I don’t spend my time fixing the agent’s errors. I code with him.
The decisive test: refactoring at 100K tokens
At session 8, the cumulative context exceeds 100K tokens. I request a heavy refactoring: extract the four inline verification tasks of`build.gradle.kts`toward JUnit5 test files in`buildSrc/src/test/`.
The agent proposes a three-phase plan:
-
Create the test classes with migration of existing cases
-
Add the JUnit5 and Kotest dependencies in`buildSrc/build.gradle.kts`
-
Remove the inline code of`build.gradle.kts`
The plan is correct. The execution is clean. It even identifies an edge case I had missed: duplicate Jackson dependencies between`buildscript {}` et `buildSrc/build.gradle.kts`which must be unified during the migration.
100K tokens of context, and the agent remembers that`CodebaseYmlAnonymizer.TOKEN_MASK`is`"*"`, that`GitConfig.resolvedToken()is an extension function defined in`readme.kt, and that`SnapshotManager.PRUNED_DIRS`excludes`build`, .gradle et .git.
That’s the difference.
Face-to-face: Comparative Metrics
| Criterion | Kimi K2.6 | GLM-5.1 | DeepSeek-V4-Pro |
|---|---|---|---|
Context max |
256K |
200K |
1M |
attention mechanism |
pure MLA |
MLA + DSA |
Hybrid CSA + HCA |
Total parameters |
1T |
744B |
1.6T |
Enabled settings |
32B |
not published |
49B |
Observed degradation threshold |
[No French text was provided for translation] |
[Translation will appear here once French text is provided] |
~128K tokens |
Behavior beyond |
Massive hallucinations |
Surface confusions |
Slow progressive degradation |
Stability NIAH |
not published |
100% at 128K (DSA) |
stable up to 128K (Figure 9) |
MRCR @128K |
unpublished |
unpublished |
superior to Gemini 3.1 Pro |
Sessions held before abandonment |
2 |
3 |
8 (and continues) |
Correction time / coding time |
60% |
30% |
<5% |
Average latency (think mode) |
8 s |
15 s |
11 s |
Confidence coefficient* |
2/10 |
6/10 |
9/10 |
*Confidence coefficient = subjective measure of my ability to take the agent’s code and commit without line-by-line review.
@startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center title Comparative Radar — 3 LLMs in Assisted Software Development legend right |= Couleur |= Modèle | | <#FF5252> | Kimi K2.6 | | <#FFC107> | GLM-5.1 | | <#4CAF50> | DeepSeek-V4-Pro | endlegend rectangle " " as space #FFFFFF rectangle "Consistency\n80K+ tokens" as coh #F5F5F5 rectangle "Quality\ncode" as qual #F5F5F5 rectangle "Architectural\nreasoning" as arch #F5F5F5 rectangle "Resistance\nhallucinations" as hall #F5F5F5 rectangle "Speed\n(dev experience)" as speed #F5F5F5 rectangle "Knowledge\nGradle/Kotlin" as kg #F5F5F5 rectangle "Correction rate" as corr #F5F5F5 coh --> qual qual --> arch arch --> hall hall --> speed speed --> kg kg --> corr note top of coh Kimi ████░░░░░░ 4/10 GLM ██████░░░░ 6/10 DeepSeek █████████░ 9/10 end note note top of qual Kimi ███████░░░ 7/10 (sous 60K) GLM ████████░░ 8/10 DeepSeek █████████░ 9/10 end note note top of arch Kimi █████░░░░░ 5/10 GLM ███████░░░ 7/10 DeepSeek █████████░ 9/10 end note note top of hall Kimi ██████░░░░ 6/10 → ██░░░░░░░░ 2/10 (> 60K) GLM ███████░░░ 7/10 DeepSeek █████████░ 9/10 end note note top of speed Kimi █████████░ 9/10 GLM ██████░░░░ 6/10 DeepSeek █████░░░░░ 5/10 end note note top of kg Kimi ███████░░░ 7/10 GLM ███████░░░ 7/10 DeepSeek █████████░ 9/10 end note note top of corr Kimi ██░░░░░░░░ 2/10 (beaucoup de corrections) GLM █████░░░░░ 5/10 DeepSeek ██████████ 10/10 (presque rien à corriger) end note @enduml
Why DeepSeek-V4-Pro Wins in Software Development
The superiority of DeepSeek-V4-Pro is not due to a single factor—it is a convergence:
1. The CSA+HCA architecture is tailored for code
Assisted software development is an extreme use case for long-context attention. You need: - Local precision (what does this class inherit from? where is this method defined?) →CSA - Global vision (Why does this module exist? How do the four anonymizers interact?) →HCA
Kimi with MLA alone handles local precision but loses global vision beyond 60K. GLM with DSA improves global vision but remains single‑level. DeepSeek combines both explicitly.
2. The EAGER context is its comfort zone
My governance system loads ~30K tokens of rules and backlog at startup. With a stable window up to 128K, DeepSeek has ~100K tokens of margin for session exchanges. This is 3 to 4 times more than what Kimi can handle without degradation.
_ The 128K window of perfect stability exactly matches my needs: 30K of EAGER + 70K of exchanges = a productive session of 20-30 messages without ever leaving the green zone. _
3. The quality/latency ratio is optimal for the flow
Yes, DeepSeek-V4-Pro is slower than Kimi (11s vs 8s). But the total time for a task is much lower because I don’t spend 20 minutes correcting the agent’s hallucinations.
The developer does not measure the latency of a response. He measures the time between "I ask the question" and "the code is in my repo and it works". On this metric, DeepSeek-V4-Pro is the fastest of the three.
Lessons Learned: How to Choose Your LLM for Vibe Coding
Beyond the punctual ranking, this experience taught me to evaluate an LLM for assisted software development on criteria that are not found in any benchmark:
-
Look at the architecture, not the announced context size.—A model that claims 256K of context but only has an MLA will end up like Kimi: theoretically capable, practically unusable beyond 60K.
-
Test on YOUR context, not on a generic benchmark— My initial 30K token AsciiDoc prompt with absolute rules and backlog has nothing to do with the HLE or AIME questions.
-
Latency is not the enemy if quality follows— A slow model that produces correct code is faster than a fast model that produces incorrect code.
-
Beware of the models without technical report public— If the team does not document its attention architecture, it’s because it lacks confidence in its long-context performance.
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 260
title Decision Tree — Choosing your LLM for Assisted Development
start
:Contexte initial\n> 20K tokens ?;
if (Oui) then
:Architecture d'attention\nhybride ou multi-niveau ?;
if (CSA+HCA) then
:DeepSeek-V4-Pro
Fenetre stable 128K
Ideal pour gouvernance EAGER;
stop
elseif (MLA + DSA) then
:GLM-5.1
Correct jusqu'a ~120K
Latence elevee;
stop
else (MLA seul)
:Kimi K2.6 (sessions courtes)
ou eviter pour long contexte
Chercher un modele avec
sparse attention;
stop
endif
else (Contexte < 20K)
:N'importe lequel fonctionne.
Privilegier la latence.;
stop
endif
@enduml
And the Governance Agent in all that?
This experience validates a point I’ve been defending since my article on Eager/Lazy governance:the quality of the LLM and the quality of governance are multiplicative, not additive.
With Kimi K2.6, my governance was impeccable — but the model diluted the information. Result: perfect governance × hallucination = zero.
With DeepSeek-V4-Pro, the EAGER governance (30K tokens of rules) + LAZY (session archives, technical references) + Hot/Warm/Cold (rotating backup) forms an ecosystem where each layer amplifies the other. The agent has the rules in view (EAGER), can consult the history (LAZY), and the context never saturates (backup rotation).
_ A good LLM without governance is like a Ferrari engine without a steering wheel. Good governance without a good LLM is like a steering wheel without an engine. DeepSeek-V4-Pro + my agent governance = the first time I feel like I’m driving. _
The rotating backup mechanism (rotation every 10 sessions or >500 EAGER lines) makes full sense with a model that holds 128K of context: the sliding window of 10 active sessions keeps the context fresh without ever exceeding the degradation zone.
Technical Sources
I cross-referenced my empirical experience with the official technical reports to validate my observations:
-
DeepSeek-V4 Technical Report — PDF retrieved fromhttps://huggingface.co/deepseek-ai/DeepSeek-V4-Flash[HuggingFace]. Figure 9 : "Retrieval performance remains highly stable within a 128K context window. While a performance degradation becomes visible beyond the 128K mark, the model’s retrieval capabilities at 1M tokens remain remarkably strong." Documented CSA+HCA architecture section 2.3.
-
GLM-5 Technical Report —https://arxiv.org/abs/2602.15763[arXiv:2602.15763]. DSA introduced via continued pre‑training, "lossless by construction". Max context 202,752 tokens. Tables 3/5/6 document long‑context performance against alternatives (SWA, Gated DeltaNet, SimpleGDN).
-
Kimi K2.6 Model Card —https://huggingface.co/moonshotai/Kimi-K2.6[HuggingFace]. MLA, 256K max context. Discard-all strategy beyond the threshold on agentic tasks (implicitly confirming the practical limit of MLA in long context).
-
Kimi K2 Technical Report —https://arxiv.org/abs/2507.20534[arXiv:2507.20534]. Architecture MoE, MuonClip optimizer, agentic performances (HLE, BrowseComp, Terminal-Bench).
The most revealing point: in their own evaluation, Moonshot applies a discard-all strategy (deleting old context) as soon as the context window is exceeded. This exactly confirms what I observed: MLA alone cannot maintain coherence across the entire 256K window. The architecture cannot keep up.
Conclusion : The Choice of the Artisan
After three weeks and thirteen sessions of real development, the verdict is indisputable:
Kimi K2.6 |
GLM-5.1 |
DeepSeek-V4-Pro |
Excellent under 60K |
Solid up to 120K |
Dominates everywhere |
Unusable beyond |
Surface confusions |
Stable up to 128K |
2 sessions, abandoned |
3 sessions, abandoned |
8 sessions, adopted |
DeepSeek-V4-Pro has become my default LLM for all software development sessions assisted with Opencode. Not because it’s the newest. Not because it has the best academic benchmarks. But because in the real life of a developer pushing Gradle Kotlin DSL plugins with a 30K token agent context, it’s the only one that doesn’t betray me when the context expands.
CSA+HCA is an architectural game changer. Double-level compression + sparsification is not an implementation detail — it’s what makes the difference between a coding assistant and a reliable teammate.
_ I chose DeepSeek-V4-Pro because it is the only one of the three that transforms my agent governance from a defensive constraint ("how to prevent the agent from forgetting?") into an offensive advantage ("what can we build now that the agent remembers everything?"). _
This article is the result of 13 real development sessions on the project`codebase-gradle`, documented in`.agents/sessions/`according to my governance agent Eager/Lazy/Hot/Warm/Cold methodology. The cited technical sources are publicly accessible on HuggingFace and arXiv.