---
title: "Finding the Best Chinese AI Model for Coding"
description: "Looking for the most efficient Chinese AI model to complement a coding workflow under the SAGE (Small and Good Enough) concept. Benchmarking DeepSeek, Qwen, and Mimo."
publishedAt: 2026-05-26
locale: en
urlSlug: finding-the-best-chinese-ai-model-for-coding
isDraft: false
defaultLocale: en
---
[TOC]

If you have been closely following the recent developments in AI, you have likely noticed that the landscape of LLM dominance is starting to shift. We are no longer solely focused on the tech giants from the US. Chinese AI models are beginning to show their prowess, offering incredible performance at highly competitive price points.

This post is inspired by Ariya Hidayat's interesting write-up on the "Sonnet 4.6 vs Kimi Showdown"[^fn:1] as well as Rachel Nabors' tweet introducing the concept of **SAGE (Small and Good Enough)**[^fn:2]. In my daily coding workflow, I started wondering: *"Do we really always need to use expensive frontier models? Is it possible to use cheaper but 'good enough' models to get the job done?"*

To satisfy my curiosity, I set up a small benchmark project called **Incident Desk** inside the [deno-starter-llm-bench](https://github.com/wayanjimmy/deno-starter-llm-bench)[^fn:3] repository. The goal was simple: test three Chinese AI models on implementing an incident management application using Deno & Fastify, and compare their performance against my go-to US baseline model, **Gemini 3.5 Flash**.

Here is the breakdown of the showdown!

---

## The Arena & Specifications

The application these AI agents had to build is called **Incident Desk**—a simple incident management system containing User, Team, Incident, Comment, and Activity Event entities.

Even though the app seems straightforward, several strict rules (*locked constraints*) were intentionally put in place to prevent the AI from easily "cheating":
*   **Runtime:** Deno with Fastify (TypeScript).
*   **Rendering:** Pure server-side HTML strings (SSR) without any SPA frameworks or additional template engines.
*   **Client JS:** Only allowed for *progressive enhancement* (e.g., debounced search).
*   **Database:** Simple in-memory storage (no external database allowed).
*   **Domain Invariant (Authorization):** Agents are only allowed to read/mutate incidents belonging to their own team, including incident creation. Only users with a Manager role can reassign incidents across teams.

The Chinese models in the arena:
1.  **DeepSeek** (`deepseek/deepseek-v4-flash`)
2.  **Qwen** (`qwen/qwen3.6-plus`)
3.  **Mimo** (`xiaomi/mimo-v2.5`)

And as our baseline for comparison, I used **Gemini 3.5 Flash** (`antigravity/gemini-3.5-flash`).

---

## Benchmark Results (Metrics & Cost)

After running the end-to-end (E2E) tests using a custom test harness (`scripts/eval-e2e.ts`)[^fn:4], each model's performance was meticulously recorded. To make it easy to digest, I have summarized the findings in the table below:

| Model | Task Duration | Number of Calls | Token Basis | Estimated Cost | E2E Score |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **DeepSeek** | 15m 54s | 32 | Pi session cumulative | **~$0.21** | **90/100** |
| **Mimo** | 1h 05m | 89 | Pi session cumulative | ~$0.50* | **90/100** |
| **Qwen** | 45m 37s | 93 | Pi session cumulative | ~$2.36 | **90/100** |
| **Gemini 3.5 Flash** | **~5m 23s\*\*** | **80\*\*** | agy CLI snapshot | ~$0.73\*\*\* | **100/100** |

> **Key notes regarding the metrics above:**
>
> *   **(\*)** *Mimo's cost has been adjusted based on the latest pricing from models.dev ($0.40/1M input, $2.00/1M output).*
> *   **(\*\*)** *Gemini's duration reflects the core implementation phase. The total full conversation took about 15m 10s with 89 calls.*
> *   **(\*\*\*)** *Gemini was measured as the scored baseline at 100/100. Its tracking data uses context window snapshots (agy CLI), which has a different token basis compared to the cumulative Pi session tracking used by the trio of Chinese models.*

<!-- chart:llm-bench-cost -->

---

## Which One is Most Worth It?

The most interesting takeaway from this experiment is that **all three main models (DeepSeek, Qwen, and Mimo) achieved the exact same functional score of 90/100**. However, the paths they took to get there were vastly different.

### DeepSeek: The Efficiency Champion ($0.21)
If you ask which model best embodies the **SAGE (Small and Good Enough)** philosophy, the answer is hands down **DeepSeek**.
*   **Pros:** It only took 15 minutes and 32 calls to deliver a solid 90/100 score. The cost was a mere **~$0.21**! That is incredibly cheap compared to the others.
*   **Visuals:** The manager dashboard layout is expansive and information-dense, though the navigation spacing feels a bit too tight.

![DeepSeek Incident View](/static/benchmark/deepseek-incidents.png)

### Qwen: Solid but Costly ($2.36)
Qwen produced a functional Pico-style interface that looked broadly similar to Mimo's result.
*   **Pros:** The table used zebra striping, which made rows slightly easier to scan.
*   **Cons:** Quite expensive! Qwen required 93 calls and consumed almost 6.7 million cumulative tokens, bringing the total cost to **$2.36**. For a UI that was not dramatically different from the other Chinese-model outputs, it is definitely not your budget-friendly daily driver.

![Qwen Incident View](/static/benchmark/qwen-incidents.png)

### Mimo: Slow but Consistent ($0.50)
Xiaomi's model showed decent capabilities, but it was exceptionally slow.
*   **Cons:** Spent over an hour (1h 05m) to complete the code. The resulting UI was very plain and minimal compared to Qwen.
*   **Pros:** The pricing is still reasonable (~$0.50), making it a viable SAGE alternative if you are not in a rush.

![Mimo Incident View](/static/benchmark/mimo-incidents.png)

### Baseline: Gemini 3.5 Flash
Gemini still proved its class as a frontier model. It was by far the fastest at writing the core codebase (only ~5 minutes) and produced the cleanest visual layout and role hierarchy. However, its high output token cost makes it less economical for long, highly iterative coding sessions.

![Gemini 3.5 Flash Incident View](/static/benchmark/gemini-incidents.png)

<!-- chart:llm-bench-duration-calls -->

---

## Crucial Lessons: Frequently Missed Small Details

Despite achieving a high score of 90/100, there were **10 points** that all three main models failed to handle. Examining these gaps is incredibly educational, as they highlight common blind spots in current AI coders:

1.  **Cross-Team Authorization (Security Bug - 2 pts):**
    This was the most critical flaw. While the models successfully restricted editing/viewing incidents, they completely forgot to restrict *creating* incidents. As a result, a Platform Agent account could still create a new incident belonging to the Infra team.
2.  **Asset Serving (Infrastructure Bug - 3 pts):**
    All three models forgot to register the static asset router in Fastify for the `/public/app.js` file. Because this file failed to load (HTTP 404), the progressive enhancement feature was completely broken.
3.  **Debounced Search (UX Bug - 5 pts):**
    The progressive enhancement logic for the debounced search failed to update the browser URL to `/incidents?q=...`.

This proves that we still need self-verification mechanisms or *back pressure*[^fn:5] inside our prompt contracts. Instead of just instructing the AI to *"build application A,"* we must prompt them to systematically verify that no server-side authorization leaks exist.

---

## Conclusion: My Final Workflow Choice

This experiment opened my eyes to the fact that **DeepSeek** is fully ready to be integrated into daily coding workflows. At a tiny fraction of the cost ($0.21), its coding performance stands toe-to-toe with models that cost 10 times more.

In my current setup, the ideal workflow is to use **DeepSeek** as the *daily driver* for initial code exploration and writing modular drafts, and then hand over the context via *handoff notes* to **Gemini 3.5 Flash** when I need premium visual UI polish or deep architectural reasoning.

What about you? Which Chinese AI models have you tried using in your coding workflows?


[^fn:1]: [Sonnet 4.6 vs Kimi Showdown — Ariya Hidayat (Substack)](https://dekontaminasi.substack.com/p/perang-tanding-sonnet-46-vs-kimi)
[^fn:2]: [Rachel Nabors' tweet on SAGE (Small and Good Enough)](https://x.com/rachelnabors/status/2057123652626256360)
[^fn:3]: [wayanjimmy/deno-starter-llm-bench (GitHub)](https://github.com/wayanjimmy/deno-starter-llm-bench)
[^fn:4]: [List of branches and full benchmark implementations (GitHub)](https://github.com/wayanjimmy/deno-starter-llm-bench/branches)
[^fn:5]: [The Evolution of Coding Agent Workflows: From Cody, to Amp, to Pi — Wayan Jimmy](/en/posts/evolution-of-coding-agent-workflow)
