mirothinker-1.7-mini on Tenstorrent p300x2 and p150x4 and p300 and p150x2 and p150
Derived from miromind-ai/MiroThinker-1.7-mini by MiroMind (a fine-tune of Qwen3-30B-A3B-Thinking-2507). The checkpoint is used as published; expert weights are converted to lower precision when the server loads them (see Limitations). See the original model card for training and evaluation details.
MiroThinker-1.7-mini, a deep-research agent model: Qwen3-30B-A3B (30B-parameter mixture of experts, 3B active per token: 128 experts, top-8, 48 layers) trained for long-horizon search, browsing and tool use (up to 300 tool calls per task). Served with vLLM: a reasoning model that thinks before it answers, with tool calling and a 256,000-token context, for up to 32 concurrent users. Text only.
Runs on Tenstorrent p300x2 or p150x4 or p300 or p150x2 or p150 β see the serving profiles below.
Packaged and published with tt-model-manager 0.1.0 (manifest schema 5.1).
At a glance
| Hardware | p150, p150x2, p150x4, p300, p300x2 |
| Context | 256,000 tokens |
| License | apache-2.0 |
Intended use
Search-and-browse research agents and multi-step tool use, plus chat and reasoning over text, through an OpenAI-compatible API.
Prerequisites
- The Tenstorrent CLI,
tt:uv tool install tenstorrent(or use tt-model alone, see the Quickstart) - Docker
- Tenstorrent hardware: p300x2 or p150x4 or p300 or p150x2 or p150
Quickstart
tt serve raahemnabeel/mirothinker-1.7-mini
tt serve downloads the Docker image and the miromind-ai/MiroThinker-1.7-mini at e371d5a8956cad89c574bc1bbe79f3866b325755 weights (into your HF cache; they are not in the image), then starts an OpenAI-compatible server on port 20000 (or the next free port, if that one is busy). The first start compiles kernels for your device, which takes several minutes; the server is ready when it logs Application startup complete.
Without tt-cli: tt-model serve raahemnabeel/mirothinker-1.7-mini.
Serving profiles
Select a different serving profile using --profile.
| profile | hardware | mesh | max_num_seqs | max_model_len | description |
|---|---|---|---|---|---|
p300x2 |
p300x2 | P300x2 | 32 | 256000 | Two p300 boards (4 dies, experts 32 per die), 32 sequences, 256000 context. |
p150x4 |
p150x4 | P150x4 | 32 | 256000 | Four p150 boards (4 dies), same configuration as p300x2. |
p300 (default) |
p300 | P300 | 32 | 256000 | One p300 board (2 dies, experts 64 per die), 32 sequences, 256000 context. |
p150x2 |
p150x2 | P150x2 | 32 | 256000 | Two p150 boards (2 dies), same configuration as p300. |
p150 |
p150 | P150 | 32 | 98304 | One p150 (1 die, all 128 experts), 32 sequences sharing a 98304-token context (bf16 KV is 96 KiB per token on one die). |
Capabilities
The server speaks the OpenAI API at http://127.0.0.1:20000/v1 (or whichever port your serve command reported; chat completions, completions, and /v1/models). Pass "model": "miromind-ai/MiroThinker-1.7-mini" β the weights id, not this package's name.
Tool calling is enabled (--tool-call-parser hermes): a request that passes tools comes back with tool_calls and finish_reason: tool_calls.
Reasoning output is separated (--reasoning_parser qwen3): the thinking text arrives in reasoning, apart from content.
The model thinks before every answer (reasoning_content); give requests a large max_tokens (thousands): when the
budget runs out inside the reasoning, content is empty.
A request without sampling parameters uses the checkpoint's defaults (temperature 0.6, top_p 0.95, top_k 20).
Sampling runs on the device; top_k is limited to 32.
Tools: pass them as OpenAI tools; the chat template asks for <tool_call> JSON, parsed into tool_calls by the
server. MiroMind's own agent framework (MiroFlow) instead puts its tools
in the system prompt and parses <use_mcp_tool> blocks from content itself; both work against this server. The
package serves the model only, bring your own search, browse and code tools.
Expected performance
Accuracy
Pending. MiroMind's own scores (BrowseComp, BrowseComp-ZH, GAIA, HLE) are on the original model card and GitHub; measurements of this package on those benchmarks will be added here.
Performance
Served as shipped (tt-model serve --profile <profile>), vLLM's random-token benchmark with ignore_eos, medians; one request per user at a time.
p300x2 (four dies)
Single user on real text (12 chat prompts x 384 output tokens, temperature 0): 95 tok/s.
| users | input / output tokens | TTFT (ms) | TPOT (ms) | tok/s per user | output tok/s, all users |
|---|---|---|---|---|---|
| 1 | 128 / 128 | 164 | 10.2 | 98 | 88 |
| 1 | 1,024 / 256 | 410 | 10.5 | 95 | 80 |
| 1 | 4,096 / 256 | 837 | 11.1 | 90 | 67 |
| 1 | 32,768 / 256 | 3,585 | 13.1 | 76 | 37 |
| 8 | 128 / 128 | 543 | 14.8 | 68 | 427 |
| 8 | 1,024 / 256 | 1,355 | 15.6 | 64 | 391 |
| 32 | 1,024 / 256 | 5,802 | 29.3 | 34 | 660 |
p300 (two dies)
Single user on real text (12 chat prompts x 384 output tokens, temperature 0): 86 tok/s.
| users | input / output tokens | TTFT (ms) | TPOT (ms) | tok/s per user | output tok/s, all users |
|---|---|---|---|---|---|
| 1 | 128 / 128 | 139 | 11.3 | 89 | 82 |
| 1 | 1,024 / 256 | 379 | 11.7 | 85 | 73 |
| 1 | 4,096 / 256 | 854 | 12.7 | 78 | 59 |
| 1 | 32,768 / 256 | 4,685 | 16.7 | 60 | 29 |
| 8 | 128 / 128 | 652 | 19.3 | 52 | 331 |
| 8 | 1,024 / 256 | 1,620 | 20.7 | 48 | 303 |
| 32 | 1,024 / 256 | 7,203 | 42.0 | 24 | 488 |
p150 (one die)
Single user on real text (12 chat prompts x 384 output tokens, temperature 0): 77 tok/s.
| users | input / output tokens | TTFT (ms) | TPOT (ms) | tok/s per user | output tok/s, all users |
|---|---|---|---|---|---|
| 1 | 128 / 128 | 156 | 12.9 | 77 | 71 |
| 1 | 1,024 / 256 | 439 | 13.6 | 74 | 64 |
| 1 | 4,096 / 256 | 961 | 15.1 | 66 | 50 |
| 1 | 32,768 / 256 | 6,657 | 22.2 | 45 | 21 |
| 8 | 128 / 128 | 872 | 27.5 | 36 | 238 |
| 8 | 1,024 / 256 | 2,099 | 29.5 | 34 | 217 |
| 32 | 1,024 / 256 | 9,787 | 65.0 | 15 | 331 |
Prefix caching
On for every profile. The same real-text prompt sent twice on a freshly started server, time to first token in seconds: first send / resend with the prefix cached. The first send above 8,192 tokens also compiles that prefill length once (later prompts of that length do not pay it; see the 32,768-token rows above for an uncached prompt with compiled programs).
| prompt tokens | p300x2 first / cached | p300 first / cached | p150 first / cached |
|---|---|---|---|
| 1,563 | 1.07 / 1.56 | 0.74 / 1.17 | 0.86 / 1.19 |
| 7,239 | 2.87 / 1.32 | 2.84 / 1.06 | 3.58 / 1.09 |
| 22,894 | 11.78 / 1.44 | 13.53 / 1.19 | 18.73 / 1.23 |
A cache hit costs about 1.1-1.5 s whatever the prompt length. Against compiled uncached prefill (3.6 / 4.7 / 6.7 s at 32,768 tokens on p300x2 / p300 / p150) it pays for long shared prefixes, such as an agent's growing conversation; for prompts of a few thousand tokens an uncached prefill is as fast or faster.
Limitations
- Text only (the checkpoint has no vision tower).
- Routed expert weights run at bfp4 on every profile (the fused decode reads that layout), so output can differ from the bf16 original where two candidate tokens are close.
- Context: 256,000 tokens on two and four dies (the checkpoint advertises 262,144), 98,304 on one die.
- The p150x4 and p150x2 profiles run the same meshes as p300x2 / p300 but were not run on those boards.
- The device sampler supports
top_kup to 32; a largertop_kis clamped to 32. - With prefix caching, a cached prompt can continue differently from the same prompt sent cold (greedy outputs
matched on 4 of 9 prompt / profile pairs in the bring-up check): the cached path computes attention in chunks, so
near-tied tokens can flip. Both continuations were coherent.
--no-enable-prefix-cachingmakes repeats identical. - Not for unattended high-stakes decisions (medical, legal, financial, safety-critical) or as a source of facts without checking: the model can state wrong things confidently. Review generated code and tool calls, or run them in a sandbox, before they act on real systems. No safety evaluation was run on this package beyond the original model's.
Related packages
- raahemnabeel/qwen3-coder-30b-a3b: Qwen3-Coder-30B-A3B, served by the same code.
- raahemnabeel/quest-35b-rl: QUEST-35B-RL, another deep-research model (Qwen3.5-35B-A3B, with image input).
Feedback
Questions or problems with this package: open a discussion at https://huggingface.co/raahemnabeel/mirothinker-1.7-mini/discussions β that is what reaches its author. A problem with the tt tooling itself: tt report issue (collects your environment and opens a prefilled issue against tenstorrent/tt-cli). Product feedback: support@tenstorrent.com.
Provenance
The exact sources the image was built from β code/ in this repo is byte-identical to the model code inside the image:
| component | built from |
|---|---|
| tt-metal | a local checkout β commit not published (dirty tree β the image includes uncommitted changes) |
| vLLM | v0.26.0 |
| vllm-tt-plugin | a local checkout β commit not published |
code/ digest |
f24dc02b7a1694a1 (sha256, first 16 hex digits) |
| built | 2026-11-03T20:37:40+00:00 by tt-model 0.1.0 |
Model tree for raahemnabeel/mirothinker-1.7-mini
Base model
Qwen/Qwen3-235B-A22B-Thinking-2507