How we got MiniMax M3.1 Flash production-ready on day 0

Orien Xu
Engineering October 26, 2026 5 min read

MiniMax M3.1 Flash is live on Parasail as of launch day, October 19, and we're one of MiniMax's day-0 launch partners. MiniMax reports 73.7% on DeepSWE and 72.5% on AutomationBench-AA, the top AutomationBench score among open models. Getting a new model running on launch day is the easy part. Getting it to behave correctly under real agentic traffic, with long contexts, many concurrent sessions, tool calls and streaming, is where most of our launch work went.

TL;DR

  • M3.1 Flash is available on Parasail at $0.15 per million input tokens and $0.60 per million output tokens. Try it at https://www.parasail.io/models/minimax-m31-flash.
  • In an apples-to-apples AgentX comparison on NVIDIA B300, we serve up to +13.4% more total tokens per GPU than SemiAnalysis's state-of-the-art M3.1 Flash recipe at the same per-user speed (393 coding-agent traces; Parasail total throughput projected from measured output throughput).
  • We rank #1 on OpenRouter for M3.1 Flash by P50 throughput, as of October 26th.
OpenRouter provider table for MiniMax M3.1 Flash sorted by P50 throughput, with Parasail first at 241 tokens per second.

What's new in M3.1 Flash

M3.1 Flash keeps M3's backbone, including the 128-expert MoE and 1M-token context, and makes three changes that matter for serving:

  • Sparse attention in every layer. M3 used dense attention in its first three layers. M3.1 Flash uses MiniMax Sparse Attention throughout, which lowers the cost of long contexts.
  • 4-bit routed experts. The routed experts are NVFP4, trained with quantization in the loop rather than quantized afterward. The rest of the model keeps its previous precision.
  • Its own speculative decoder. The checkpoint ships a multi-token DSpark drafter. M3 relied on third-party drafters.

We also serve M3.1 Flash with a 4-bit KV cache. Together with all-sparse attention, that brings KV memory per token to half, so long agent sessions stay resident on the GPU.

What we optimized for long agent sessions

Agent prompts grow every turn, and M3.1's 4-bit KV cache and sparse attention needed serving work that off-the-shelf engines didn't have. Three changes mattered most.

Tokenizing only the new part of the prompt. We cache the token IDs of segments we have already seen and tokenize only the new one. The IDs match a plain tokenizer exactly. Median time to first token on AgentX at 16 sessions fell from 388 ms to 158 ms.

Diagram of a coding-agent prompt on turn 4: re-tokenizing every turn processes the whole prompt, the segment cache tokenizes only the new part. Median time to first token falls from 388 ms to 158 ms.
Tokenizing every turn vs only the new segment.

KV cache offloading to host memory. Each cached page of M3.1 has five parts: 4-bit K and V, their scales, and the sparse-attention index keys. We move all five to host memory together and restore them byte for byte, compile the transfer kernels at startup, and copy a prefix to host memory only once it is reused. In a restore check, 64 of 64 tokens were identical after a host reload at 32K, 64K and 128K context. Compiling the transfer kernels at startup cut the worst first-eviction time to first token from 13.65 s to 0.89 s. On agent traffic, the server-side cache hit rate was 0.94 to 0.97.

Diagram of one cached KV page, with its five parts moving from GPU memory to host memory and back byte-identical.
One cached KV page moving to host memory and back, byte-identical.

Fused kernels for the sparse-attention layer. For short extends over a long context, sparse-attention prefill was waiting on the CPU. Our driver builds the attention plan once per forward pass instead of once per layer and fuses the index gather and dequantize into one launch. The kernels and output bits are unchanged. When an agent turn appends about 1K tokens to a 64K context, host time per layer fell from 306 µs to 139 µs.

Host and GPU timeline for four sparse-attention layers: before, the host rebuilds the attention plan every layer and the GPU waits; after, host time per layer falls from 306 to 139 microseconds.
Host and GPU timeline for four sparse-attention layers, before and after.

Correctness. We run a tool-call correctness benchmark on every serving build before it ships, and we constrain every tool call to its schema while decoding. On the benchmark, schema mismatches (tool calls whose arguments fail the tool's schema) fell from 0.93% to 0.13%.

Bar chart of schema mismatch rate on the tool-call benchmark with 95% intervals: 0.93% before the fix, 0.13% after the tool-call fix, 0% on the current build.
Schema mismatch rate on our tool-call benchmark, with 95% interval.

On OpenRouter's public tool-call error rate for M3.1 Flash, our rate is about 27% lower than MiniMax's own endpoint (2.03% against 2.78%).

A few bugs we found

The bugs that matter in agentic serving don't show up one request at a time. Two examples:

A race that only appeared at batch 8. With eight or more concurrent requests, speculative acceptance dropped and the output started repeating words. The cause was a timing race: a library kernel read its input before our own kernel had finished writing it, which single-request tests never catch. Fixing it restored speculative acceptance and stopped the repetition.

Animated summary of the batch-8 race fix: after the fix, 2,272 of 2,272 rows and 25 of 25 golden prompts match the safe version, and all API and tool-call tests pass.

A rare freeze. Under load with 16 users, the server occasionally stopped responding. Each of the 4 GPUs made its own sampling decision, and once in a while they disagreed by one token: one GPU thought the answer was done, the other didn't, and they waited on each other forever. Now one GPU makes the decision and sends it to the others. Since the fix, the freeze has not come back in our soak tests.

Animated summary of the freeze: with 16 users and random sampling, 11 of 121 runs froze; with 1 user and fixed prompts, 0 of 40 did.

What we chose not to fix. We fix anything that changes outputs, crashes or hangs. We leave alone differences between two equally valid computations, and we keep features off if they're correct but don't make anything faster.

Results

On one 4×B300 node with SemiAnalysis's InferenceX agentic replay (393 real coding-agent traces, around 100K input tokens per turn):

  • 16 sessions: about 420 tokens/s per user, 0.09 s median time to first token
  • 32 sessions: about 275 tokens/s per user, 0.11 s median time to first token

Measured on the released weights with our production build as of October 25.

In a 12-hour test on live traffic, every production request was served by vLLM, configured following SemiAnalysis InferenceX's recipe, and mirrored to our stack on the same B300 GPUs.

Line chart of total throughput per GPU against P90 interactivity on the AgentX benchmark on NVIDIA B300: MiniMax M3.1 Flash on Parasail sits above the AgentX SOTA recipe from SemiAnalysis at every session count.

Across 18,252 paired requests our stack decoded 1.16× as fast per request (1.11× to 1.21× depending on concurrency) and reached the first token in 0.51 s against 0.70 s, both medians.

Line chart of median time to first token by concurrency on the same paired requests: Parasail about 0.5 s, vLLM about 0.7 s.
Decode speed ratio and median time to first token by concurrency, same paired requests.

On the same InferenceX agentic replay, compared with vLLM's published results with both sides at the same speculative acceptance length, we were faster per user at every session count, by 0.9% to 8.3%. We produced up to 13.4% more output tokens per GPU (at 32 sessions; 1.3% fewer at 16) and had a 5.1× to 8.9× lower median time to first token. SemiAnalysis runs each point twice as long as ours and on a newer harness, and each point is a single run on both sides. Part of the time-to-first-token gap comes from the two runs sampling different session lengths, so treat that multiple as an upper bound.

Bar chart of median time to first token by session count: Parasail about 0.1 s at every count, the vLLM SOTA recipe between about 0.4 and 1 s.
Per-user speed, output per GPU and median time to first token by session count, Parasail vs vLLM.

We've run this process on every launch since Kimi and each launch adds new cases to the suite.

Run M3.1 Flash on Parasail

For developers

M3.1 Flash runs on our serverless endpoint at $0.15 per million input tokens and $0.60 per million output tokens, with cached input reads at $0.015. There are no minimums. The endpoint is OpenAI-compatible: point your existing client at https://api.parasail.io/v1 and set the model to parasail-minimax-m31-flash . Test it with the tool definitions, structured output and reasoning settings your application actually uses. Try it out on serverless.

For production teams

Dedicated capacity is available when you need guaranteed throughput, and Parasail has completed a SOC 2 Type II examination; the report is available under NDA through our sales team. Parasail does not retain your prompts or outputs. Talk to an engineer today.

Related blog posts

Blog

Start building today

Instantly run any open model — popular or specialized.