{"slug": "minimax-m3-1-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob", "title": "MiniMax M3.1 Flash Thinks at Max by Default: First Call, Effort as the Price Knob, and Cache Math vs DeepSeek Flash", "summary": "MiniMax released M3.1 Flash on October 19, a model priced at $0.15/$0.60 per 1M input/output tokens with $0.015 cached input, a 1M context, and text, image and video input, and confirmed it was the anonymous \"Space Bunny\" model some coding-tool users had been testing. MiniMax reports DeepSWE v1.1 at 73.7% and CyberGym at 82%, while Artificial Analysis independently scores it 43 on its Intelligence Index at $0.22 per task and VentureBeat, citing AA, reports a 93% hallucination rate on AA-Omniscience. A developer's writeup notes that reasoning_effort defaults to \"max\" when omitted, that temperature and top_p have no effect, and that thinking tokens count against max_completion_tokens.", "body_md": "**Attributed compile + two small offline scripts**\n\n**Primary sources (MiniMax, 2026-10-19):** [MiniMax M3.1 Flash: Redefining Agent Performance and Cost](https://www.minimax.io/blog/minimax-m31f) (and the [Chinese version](https://www.minimax.cn/blog/minimax-m31f)); MiniMax API docs: [Model Invocation](https://platform.minimax.io/docs/guides/text-generation), [OpenAI SDK](https://platform.minimax.io/docs/api-reference/text-openai-api), [Tool Use & Interleaved Thinking](https://platform.minimax.io/docs/guides/text-m3-function-call), [Prompt Caching](https://platform.minimax.io/docs/api-reference/text-prompt-caching).\n\n**Independent numbers and reporting:** [Artificial Analysis model page](https://artificialanalysis.ai/models/minimax-m3-1-flash) (read 2026-10-20); **Carl Franzen**, [MiniMax's new M3.1 Flash beats DeepSeek and Opus 5 on a key business benchmark at lower cost — but with a high hallucination rate](https://venturebeat.com/technology/minimaxs-new-m3-1-flash-beats-deepseek-and-opus-5-on-a-key-business-benchmark-at-lower-cost-but-with-a-high-hallucination-rate) (VentureBeat).\n\n**Community (2026-10-19 to 10-20):** [Hacker News thread](https://news.ycombinator.com/item?id=50154540) (488 points); V2EX [minimax-v3.1-flash 发布了，大家用下来怎么样？](https://www.v2ex.com/t/1250234); PingWest (品玩) [MiniMax 杀进 Flash 混战，我拿五个项目试了试](https://www.pingwest.com/a/318014).\n\nI have **not** called the MiniMax API (no key on this box). The scripts below lint request settings and do price math from the published rules.\n\nOn October 19 MiniMax shipped **M3.1 Flash** and confirmed that \"Space Bunny\", the anonymous model some coding-tool users had been trying (MiniMax says it processed 200T+ tokens), was an early version of it. The headline: list price **$0.15 / $0.60 per 1M tokens** (input / output), **$0.015** for cached input, a 1M context, text + image + video input, and MiniMax's claim of ~3× faster inference and 70% lower agentic-task cost than the previous generation.\n\nMiniMax's own numbers include DeepSWE v1.1 **73.7%**, BankerToolBench **76.2**, OSWorld V2 **61.7**, and CyberGym **82%**. Artificial Analysis independently lists it at **43** on its Intelligence Index, **$0.22** per index task, ~**105** output tokens/s, and **180M** output tokens to run the index (median for its class: 99M). VentureBeat, citing AA, also reports a **93% hallucination rate** on AA-Omniscience. That doesn't mean 93% of answers are wrong. It means that when the model didn't know, it almost always guessed instead of saying so.\n\nReactions were split: HN commenters who had used Space Bunny called it \"benchmaxed\", and a V2EX user reported tasks burning 20M tokens where DeepSeek's Flash finished in 1M. This post skips that argument and covers the settings that decide what the model costs in *your* code.\n\nOpenAI-compatible endpoint, with the one line I'd add on day one:\n\n``` python\nimport os\nfrom openai import OpenAI\n\nclient = OpenAI(api_key=os.environ[\"MINIMAX_API_KEY\"], base_url=\"https://api.minimax.io/v1\")\nr = client.chat.completions.create(\n    model=\"MiniMax-M3.1-Flash\",\n    reasoning_effort=\"low\",          # omit this and you get \"max\"\n    max_completion_tokens=4096,      # thinking tokens count against this\n    messages=[{\"role\": \"user\", \"content\": \"Label this ticket: billing, bug, or other? 'I was charged twice.'\"}],\n)\nprint(getattr(r.choices[0].message, \"reasoning_content\", None))\nprint(r.choices[0].message.content)\n```\n\n(Not run; no key.) The docs list the rules:\n\n`reasoning_effort` accepts `low | medium | high | xhigh | max`, and omitting it means `max`.` output_config.effort`. On the Responses API it's `reasoning.effort`.` thinking: {\"type\": \"disabled\"}` or `reasoning_effort: \"none\"` returns `disabled` skipped thinking. If your M3 classifier disabled thinking, the same request now fails.`temperature` and `top_p` do nothing`presence_penalty`, `frequency_penalty` and `logit_bias`. Effort is the only control you have.` max_tokens` / `max_completion_tokens`.` finish_reason: \"length\"` with an `content`` n` only supports 1, and `service_tier` (the 1.5× \"priority\" lane) isn't available for this model.\n`runs/22-minimax-m3-1-flash/lint_request.py` turns those rules into an offline pre-flight check. Excerpt of the actual output:\n\n``` php\n[copied from a GPT/DeepSeek config]\n  WARN reasoning_effort omitted -> defaults to 'max' (slowest, most output tokens). Set it explicitly.\n  WARN temperature has no effect (temperature is always 1, top_p always 0.95).\n  WARN top_p has no effect (always 0.95).\n  WARN output budget 800 counts thinking tokens too; at effort max (default) you risk finish_reason='length' with empty content.\n[cache-busting system prompt]\n  WARN system prompt contains a timestamp/id-looking value; cache is prefix-matched (tools -> system -> messages), so everything after the tool list misses the cache on every call.\n[explicit low-effort classifier]\n  OK\n```\n\nThe 2,048-token \"too small\" threshold is my own guess. MiniMax doesn't publish a number.\n\nX user [@bitsquin posted](https://x.com/bitsquin/status/2112166580448891231) a small Python bug-fix test (215 hidden tests): M3.1 Flash at default settings took **56 s and $0.0045**, and at low effort **9.5 s and $0.0006**, and fixed the same two bugs. That's 5.9× the time and 7.5× the cost for the same result on that task. It's one person's test, and I didn't reproduce it. HN user chriddyp, posting [Plotly's data-analytics benchmark](https://plotly.com/blog/minimax-m3-1-flash-plotly-data-analytics-bench/), said it tied the top score (41/43) but was the slowest model they've tested, \"because of the number of tokens it uses, not the inference speed.\" PingWest saw steady ~100 tokens/s in MiniMax Code on the Preview build, but the model kept re-checking finished work.\n\nThe problem isn't speed per token. It's how many tokens the default spends. My untested starting point: `low` for classification, extraction and routing, `medium`/` high` for normal coding-agent turns, and `xhigh`/` max` only where you've measured that the extra tokens pay off.\n\n`cost_math.py` uses the same example agent turn as my Muse Spark Open and DeepSeek posts (60K input with 50K from cache, 4K output including reasoning). Actual output:\n\n```\nmodel                         $/turn  $/1k turns\nminimax-m3.1-flash           0.00465        4.65\ndeepseek-flash off-peak      0.00405        4.05\ndeepseek-flash peak          0.00810        8.10\nminimax-m3.1-flash, zero cache hits: 0.01140/turn (11.40/1k)\n```\n\nThe miss and output prices match DeepSeek's **off-peak** rates. The gap is the cache hit: $0.015 vs DeepSeek's $0.003 off-peak. Grow the cached prefix and it widens (excerpt):\n\n```\ncached prefix | minimax $/turn | ds off-peak | ds peak  (10K fresh in, 4K out)\n            0 |        0.00390 |     0.00390 | 0.00780\n      200,000 |        0.00690 |     0.00450 | 0.00900\n      900,000 |        0.01740 |     0.00660 | 0.01320\nMiniMax beats DeepSeek PEAK until the cached prefix passes ~433,333 tokens (10K fresh/4K out)\n```\n\nDeepSeek's peak windows land on Toronto evenings and early mornings, so for overnight batch jobs that run in those windows, M3.1 Flash is cheaper unless the cached prefix is huge. Long-context agents that re-send a big cached prefix are better off on DeepSeek. And once effort climbs, output dominates: at 16K output tokens per turn, **81%** of the bill is output.\n\nMiniMax returns cache usage in two shapes, and they mean different things:\n\n`prompt_tokens` `prompt_tokens_details.cached_tokens`)` input_tokens` `cache_read_input_tokens`)\nApplied to the literal sample responses in MiniMax's Tool Use guide:\n\n```\nOpenAI shape  correct  miss/hit/out=(2, 466, 37)  $29.49 per 1M such calls\nOpenAI shape  no-cache miss/hit/out=(468, 0, 37)  $92.40  (3.13x)\nOpenAI shape  double   miss/hit/out=(468, 466, 37)  $99.39  (3.37x)\nAnthropic     correct  miss/hit/out=(280, 188, 37)  $67.02 per 1M such calls\nAnthropic     subtract miss/hit/out=(92, 188, 37)  $38.82  (0.58x)\n```\n\nA dashboard shared by both SDK paths can be off by 3× one way or ~40% the other. Write one parser per protocol.\n\nThe Tool Use guide says to append the **full** assistant message, including `reasoning_content` and `tool_calls` (on the Anthropic path, the whole `response.content` list). Rebuilding history from `content` alone breaks interleaved thinking. Unlike DeepSeek, the docs describe no 400 for this, so the failure is quiet. The model also **skips thinking on simple tool calls**, so read `reasoning_content` with `getattr(..., None)`. `check_replay()` in the lint script flags both cases.\n\nMiniMax's blog says weights will come \"later\". VentureBeat reports **October 23**, with no license announced, and Artificial Analysis still lists the model as proprietary. I did **not** call the API, measure token counts per effort level, reproduce any benchmark or the @bitsquin test, check hallucinations, or test video input. Given the AA finding, put retrieval or a verifier in front of anything factual it writes.\n\nOn cheap reasoning models, the price you pay per task depends on your effort setting more than on the per-token rate. Set effort explicitly, parse usage per protocol, and keep the cached prefix byte-stable. Then compare models on your own tasks.\n\n*YongBo Yu is an AI engineer in Toronto building LLM workflows and agent systems. More at [yongbo-yu.vercel.app](https://yongbo-yu.vercel.app) and [GitHub](https://github.com/YongBoYu1).*", "url": "https://wpnews.pro/news/minimax-m3-1-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob", "canonical_source": "https://dev.to/yong_yu_f98e15562e9b120a0/minimax-m31-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob-and-cache-math-32ao", "published_at": "2026-10-20 13:14:13+00:00", "updated_at": "2026-10-20 13:19:47.698064+00:00", "lang": "en", "topics": ["large-language-models", "ai-products", "ai-agents", "ai-tools"], "entities": ["MiniMax", "M3.1 Flash", "DeepSeek", "Artificial Analysis", "VentureBeat", "Space Bunny", "Hacker News", "V2EX"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/minimax-m3-1-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob", "markdown": "https://wpnews.pro/news/minimax-m3-1-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob.md", "text": "https://wpnews.pro/news/minimax-m3-1-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob.txt", "jsonld": "https://wpnews.pro/news/minimax-m3-1-flash-thinks-at-max-by-default-first-call-effort-as-the-price-knob.jsonld"}}