Skip to content

perf(qwen35): run the MTP head on the trunk flash policy with partials sized for the launch tile - #726

Open
alpineQ wants to merge 1 commit into
warpfront:masterfrom
alpineQ:fix/mtp-head-flash-policy
Open

perf(qwen35): run the MTP head on the trunk flash policy with partials sized for the launch tile#726
alpineQ wants to merge 1 commit into
warpfront:masterfrom
alpineQ:fix/mtp-head-flash-policy

Conversation

@alpineQ

@alpineQ alpineQ commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Summary

The MTP head's attention ignored the trunk's flash policy and its flash-partials scratch was sized for a hardcoded 128-token tile; the head now follows attention.flash like the trunk (draft step at 33k: 10 ms → 0.3 ms) and sizes partials with the tile the launch actually picks, which removes a GPU page fault on gfx1100 at max_seq ≤ 8192 with MTP on.

What was wrong

  1. mtp_head_forward_block_only_with_pos_buf derives its KvTierPlan from kv.inner.tier_inputs(), which reports flash_mode: 0. That pins the Q8 tier to the non-flash AttnQ8_0Kv kernel at every context, so each draft step of a K=3 chain at 33k context paid ~10 ms of attention against 0.3 ms on the trunk's flash tile (rocprofv2 kernel trace of a 33k-prompt MTP run).

  2. Qwen35MtpHeadScratch::new allocated flash_partials for max_seq / 128 tiles. q8_flash_default_tile_size returns 32 on gfx1100 at max_seq ≤ 8192 (and 16 for the gfx12 small-dense shape), so once the head attends through the flash tile the kernel indexes 4× more tiles than were allocated. Reproduces on one card:

    case result
    tp1 + MTP, max_seq 65536 ok
    tp1 + MTP, max_seq 8192 Memory access fault by GPU node-1 … Page not present in attention_flash_q8_0_tile, grid (24, 2), right after the head's kv_cache_write_q8_0

    Located with AMD_SERIALIZE_KERNEL=3 AMD_LOG_LEVEL=3: the faulting address sits 3 960 832 bytes into the 1 585 152-byte partials buffer (= 24 heads × 64 tiles × 258 × 4), inside the 6 340 608 bytes the kernel needs at 256 tiles.

What changes

  • hipfire_runtime::llama::attention_flash_mode(arch) / attention_flash_mode_for(mode, arch) are the (previously private) helpers that resolve attention.flash (never/auto/always, auto ⇒ flash on gfx11/gfx12, tiered elsewhere). The MTP head uses it; the identical hand-written match in qwen35/forward.rs is replaced by the same call.
  • Qwen35MtpHeadScratch sizes flash_partials with rdna_compute::attention::q8_flash_tile_size for the head's own shape.

Draft tokens only propose; the trunk verifies, so greedy output is unchanged. Measured on 2× and 1× gfx1100 with qwen3.8-27b + .mtp sidecar at 33k: AR/MTP text byte-identical to the previous build, MTP decode 19.2 → 22.0 tok/s from the head attention alone.

Which surface(s) does this touch?

  • kernel
  • load
  • serve — runtime llama.rs attention policy helper (spec path)
  • arch crate(s): hipfire-arch-qwen35 (mtp_head.rs, qwen35/forward.rs)
  • crates/hipfire-quantize
  • control plane
  • docs / CI / scripts only
  • policy files

Test plan

  • ./scripts/no-gpu-ci.sh: Rust check + no-GPU unit tests + env/docs drift check pass; the Python stage reports 838 passed / 6 failed in tests/test_mq4c_repack.py, and those 6 fail identically on untouched master in this environment (NixOS: no /bin/bash, and the test module resolves a different mq4c_repack than the script) — not touched by this change
  • cargo build --release clean (--workspace --all-targets --locked)
  • cargo test --lib --workspace passes (incl. the attention_flash_mode_for table test in llama.rs)
  • serve changes: serve_harness.py battery + chain on qwen3.6:27b (registry fixture, MTP off): 5/5 turns each, no flags
  • qwen3.8-27b.mq4 + .mtp sidecar, --mtp on: battery at --max-seq 8192 and chain at default max_seq complete with the head on the flash path (tau 1.4–2.4 per turn). Two flags on the first two battery turns ([code] empty with finish=None, [prose] runaway) reproduce identically with the head on master's non-flash path (A/B run q38-mtp-8192-battery-upstreampath (per-turn table attached), same binary minus this change), so they are the qwen3.8 template under --thinking off, not this change
  • Fault repro: the flash-policy hunk alone (partials still sized for tile 128) page-faults on the first request at max_seq 8192Memory access fault by GPU node-1 … Page not present in serve-fault.log, all five turns empty (q38-mtp-8192-flash-only.json); with the partials sized by q8_flash_tile_size the same battery runs
  • speed-gate: single-GPU baselines exercise MTP off; not affected
local serve_harness JSON
// daemon md5 6f745bea936a04934ef5a4bf668fad0e (release build of this branch, gfx1100, ROCm 7.2 / HIP 7.2, 2x RX 7900 XTX)
// qwen3.6-27b.mq4 sha256 86a5f80fd29d545abb1093dead242725ced6d68b8607c6d566d897b1a82442dc (registry fixture qwen3.6:27b)
// --- q36-battery.json
[
 {
  "request_id": "chatcmpl-1068550-1",
  "ctx": 34,
  "cached": 0,
  "gen": 133,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 62,
  "prefill_ms": 117.6,
  "prefill_tok_s": 289.1,
  "decode_tok_s": 49.7,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.13,
  "wall_s": 2.797,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "```python\ndef longest_substring_without_repeating(s: str) -> str:\n    start = 0\n    max_le",
  "assistant_content": "```python\ndef longest_substring_without_repeating(s: str) -> str:\n    start = 0\n    max_length = 0\n    max_start = 0\n    char_index = {}\n    \n    for end, char in enumerate(s):\n        if char in char_index and char_index[char] >= start:\n            start = char_index[char] + 1\n        char_index[char] = end\n        if end - start + 1 > max_length:\n            max_length = end - start + 1\n            max_start = start\n            \n    return s[max_start:max_start + max_length]\n```",
  "content": "```python\ndef longest_substring_without_repeating(s: str) -> str:\n    start = 0\n    max_length = 0\n    max_start = 0\n    char_index = {}\n    \n    for end, char in enumerate(s):\n        if char in char_index and char_index[char] >= start:\n            start = char_index[char] + 1\n        char_index[char] = end\n        if end - start + 1 > max_length:\n            max_length = end - start + 1\n            max_start = start\n            \n    return s[max_start:max_start + max_length]\n```",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "ac7884ced07cabc95cd665752c0ede05",
  "atem_leak": false,
  "prompt_md5": "caf1acdae66df8381a3ce1b0727886ca",
  "expected_substrings": [
   "def "
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068550-3",
  "ctx": 30,
  "cached": 0,
  "gen": 82,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 72,
  "prefill_ms": 71.1,
  "prefill_tok_s": 422.2,
  "decode_tok_s": 49.9,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.091,
  "wall_s": 1.736,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "During the day, sunlight passes through a relatively thin layer of atmosphere, causing sho",
  "assistant_content": "During the day, sunlight passes through a relatively thin layer of atmosphere, causing shorter blue wavelengths to scatter in all directions and dominate our view. At sunset, the light travels through a much thicker slice of the atmosphere, which scatters away most of the blue and green light before it reaches your eyes. This leaves primarily the longer red and orange wavelengths to pass through, giving the sky its characteristic warm hues.",
  "content": "During the day, sunlight passes through a relatively thin layer of atmosphere, causing shorter blue wavelengths to scatter in all directions and dominate our view. At sunset, the light travels through a much thicker slice of the atmosphere, which scatters away most of the blue and green light before it reaches your eyes. This leaves primarily the longer red and orange wavelengths to pass through, giving the sky its characteristic warm hues.",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "f5f1c4d17b48892e03bf90235a7f09e9",
  "atem_leak": false,
  "prompt_md5": "1579a134be91ab67653a176a5cb3007d",
  "expected_substrings": [
   "scatter"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068550-5",
  "ctx": 31,
  "cached": 0,
  "gen": 19,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 16,
  "prefill_ms": 71.7,
  "prefill_tok_s": 432.6,
  "decode_tok_s": 49.9,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.092,
  "wall_s": 0.473,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "The capital of France is Paris, and the river that runs through it is the Seine.",
  "assistant_content": "The capital of France is Paris, and the river that runs through it is the Seine.",
  "content": "The capital of France is Paris, and the river that runs through it is the Seine.",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "ce8f1851f034f316731e0669291e69c2",
  "atem_leak": false,
  "prompt_md5": "8caca580290fb75cea2524f52dd6d094",
  "expected_substrings": [
   "Paris",
   "Seine"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068550-7",
  "ctx": 47,
  "cached": 0,
  "gen": 31,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 8,
  "prefill_ms": 104.0,
  "prefill_tok_s": 452.0,
  "decode_tok_s": 49.8,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.124,
  "wall_s": 0.746,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}",
  "assistant_content": "{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}",
  "content": "{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "9d087beafcbdb8d117c1ae8df956b758",
  "atem_leak": false,
  "prompt_md5": "92bba2040a26fc8018f8e00769bccec9",
  "expected_substrings": [
   "\"name\"",
   "Alice",
   "\"age\"",
   "34",
   "\"city\"",
   "Lisbon"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068550-9",
  "ctx": 47,
  "cached": 0,
  "gen": 17,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 7,
  "prefill_ms": 104.2,
  "prefill_tok_s": 451.3,
  "decode_tok_s": 49.9,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.124,
  "wall_s": 0.465,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "17 + 26 = 43\n\nAnswer: 43",
  "assistant_content": "17 + 26 = 43\n\nAnswer: 43",
  "content": "17 + 26 = 43\n\nAnswer: 43",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "aaa69fa09d3048ef41d1e4642ff61026",
  "atem_leak": false,
  "prompt_md5": "eb63dba2cde2d0c46144775dbf19d7c8",
  "expected_substrings": [
   "Answer: 43"
  ],
  "retrieval_missing": []
 }
]
// --- q36-chain.json
[
 {
  "request_id": "chatcmpl-1068845-1",
  "ctx": 34,
  "cached": 0,
  "gen": 132,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 62,
  "prefill_ms": 113.5,
  "prefill_tok_s": 299.6,
  "decode_tok_s": 49.6,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.123,
  "wall_s": 2.777,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "```python\ndef longest_substring_without_repeating(s: str) -> str:\n    char_index = {}\n    ",
  "assistant_content": "```python\ndef longest_substring_without_repeating(s: str) -> str:\n    char_index = {}\n    start = 0\n    max_length = 0\n    max_start = 0\n    \n    for end, char in enumerate(s):\n        if char in char_index and char_index[char] >= start:\n            start = char_index[char] + 1\n        char_index[char] = end\n        if end - start + 1 > max_length:\n            max_length = end - start + 1\n            max_start = start\n            \n    return s[max_start:max_start + max_length]\n```",
  "content": "```python\ndef longest_substring_without_repeating(s: str) -> str:\n    char_index = {}\n    start = 0\n    max_length = 0\n    max_start = 0\n    \n    for end, char in enumerate(s):\n        if char in char_index and char_index[char] >= start:\n            start = char_index[char] + 1\n        char_index[char] = end\n        if end - start + 1 > max_length:\n            max_length = end - start + 1\n            max_start = start\n            \n    return s[max_start:max_start + max_length]\n```",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "ac7884ced07cabc95cd665752c0ede05",
  "atem_leak": false,
  "prompt_md5": "caf1acdae66df8381a3ce1b0727886ca",
  "expected_substrings": [
   "def "
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068845-3",
  "ctx": 197,
  "cached": 167,
  "gen": 89,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 79,
  "prefill_ms": 88.8,
  "prefill_tok_s": 337.8,
  "decode_tok_s": 49.7,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.09,
  "wall_s": 1.881,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "During the day, sunlight passes through a thinner layer of the atmosphere, where shorter b",
  "assistant_content": "During the day, sunlight passes through a thinner layer of the atmosphere, where shorter blue wavelengths are scattered more effectively by air molecules, making the sky appear blue. At sunset, sunlight travels through a much thicker layer of the atmosphere to reach your eyes, causing most of the blue light to be scattered away before it arrives. This allows the longer red and orange wavelengths to dominate the light that reaches your eyes, creating the vibrant colors of sunset.",
  "content": "During the day, sunlight passes through a thinner layer of the atmosphere, where shorter blue wavelengths are scattered more effectively by air molecules, making the sky appear blue. At sunset, sunlight travels through a much thicker layer of the atmosphere to reach your eyes, causing most of the blue light to be scattered away before it arrives. This allows the longer red and orange wavelengths to dominate the light that reaches your eyes, creating the vibrant colors of sunset.",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "215d97141e58b528122776c895510d99",
  "atem_leak": false,
  "prompt_md5": "1579a134be91ab67653a176a5cb3007d",
  "expected_substrings": [
   "scatter"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068845-5",
  "ctx": 318,
  "cached": 287,
  "gen": 19,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 16,
  "prefill_ms": 90.1,
  "prefill_tok_s": 343.9,
  "decode_tok_s": 49.7,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.092,
  "wall_s": 0.474,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "The capital of France is Paris, and the river that runs through it is the Seine.",
  "assistant_content": "The capital of France is Paris, and the river that runs through it is the Seine.",
  "content": "The capital of France is Paris, and the river that runs through it is the Seine.",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "eb3163dc378b553eeb7bc5be918739e3",
  "atem_leak": false,
  "prompt_md5": "8caca580290fb75cea2524f52dd6d094",
  "expected_substrings": [
   "Paris",
   "Seine"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068845-7",
  "ctx": 385,
  "cached": 338,
  "gen": 36,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 10,
  "prefill_ms": 123.2,
  "prefill_tok_s": 381.5,
  "decode_tok_s": 49.6,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.125,
  "wall_s": 0.85,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "```json\n{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}\n```",
  "assistant_content": "```json\n{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}\n```",
  "content": "```json\n{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}\n```",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "4d7f1eab0bb2c66b2c5e0601470acb53",
  "atem_leak": false,
  "prompt_md5": "92bba2040a26fc8018f8e00769bccec9",
  "expected_substrings": [
   "\"name\"",
   "Alice",
   "\"age\"",
   "34",
   "\"city\"",
   "Lisbon"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1068845-9",
  "ctx": 469,
  "cached": 422,
  "gen": 18,
  "finish": "stop",
  "think_words": 0,
  "ans_words": 7,
  "prefill_ms": 123.3,
  "prefill_tok_s": 381.2,
  "decode_tok_s": 49.6,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.125,
  "wall_s": 0.488,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "17 + 26 = 43.\n\nAnswer: 43",
  "assistant_content": "17 + 26 = 43.\n\nAnswer: 43",
  "content": "17 + 26 = 43.\n\nAnswer: 43",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "c6d7f3dc4fc2a9f95366065bc45a34b0",
  "atem_leak": false,
  "prompt_md5": "eb63dba2cde2d0c46144775dbf19d7c8",
  "expected_substrings": [
   "Answer: 43"
  ],
  "retrieval_missing": []
 }
]
// --- q38-mtp-8192-battery.json
[
 {
  "request_id": "chatcmpl-1069036-1",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 147,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.218,
  "wall_s": 6.011,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "We need answer user's request: \"Write a Python function that returns the longest substring of a string without repeating characters. Reply with only the code.\" Need produce final only code. Need decide function signature, behavior. Should be a Python function. Return longest substring (one of them if tie). Could use sliding window. Need only code, no explanation. Need maybe define function longest_substring_without_repeating(s: str) -> str. Should handle empty. Need maybe return \"\" if none. Could implement:\n\ndef longest_substring_without_repeating_characters(s):\n    start=0; best_start=0; best_len=0; last={}\n    for i,ch in enumerate(s):\n        if ch in last and last[ch] >= start:\n            start = last[ch]+1\n        last[ch]=i\n        if i-start+1 > best_len:\n            best_len = i-start+1; best_start = start\n    return s[best_start:best_start+best_len]\n\nTie: returns first encountered longest due to >. That's okay. Could include type hints. Only code. Need ensure no extra text. Final: code block? User says reply with only code. Could output plain code without fences? Usually",
  "content": "",
  "reasoning_content": "We need answer user's request: \"Write a Python function that returns the longest substring of a string without repeating characters. Reply with only the code.\" Need produce final only code. Need decide function signature, behavior. Should be a Python function. Return longest substring (one of them if tie). Could use sliding window. Need only code, no explanation. Need maybe define function longest_substring_without_repeating(s: str) -> str. Should handle empty. Need maybe return \"\" if none. Could implement:\n\ndef longest_substring_without_repeating_characters(s):\n    start=0; best_start=0; best_len=0; last={}\n    for i,ch in enumerate(s):\n        if ch in last and last[ch] >= start:\n            start = last[ch]+1\n        last[ch]=i\n        if i-start+1 > best_len:\n            best_len = i-start+1; best_start = start\n    return s[best_start:best_start+best_len]\n\nTie: returns first encountered longest due to >. That's okay. Could include type hints. Only code. Need ensure no extra text. Final: code block? User says reply with only code. Could output plain code without fences? Usually",
  "tool_calls": [],
  "request_md5": "53c2fa79ac3c2fe0f651112d81f78d82",
  "atem_leak": false,
  "prompt_md5": "caf1acdae66df8381a3ce1b0727886ca",
  "expected_substrings": [
   "def "
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069036-3",
  "ctx": 70,
  "cached": 0,
  "gen": 256,
  "finish": "length",
  "think_words": 170,
  "ans_words": 30,
  "prefill_ms": 170.0,
  "prefill_tok_s": 411.9,
  "decode_tok_s": 44.9,
  "decode_estimated": false,
  "tau": 1.58,
  "cycles": 99,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.171,
  "wall_s": 5.873,
  "attractor": false,
  "empty": false,
  "runaway": true,
  "ans_preview": "Sunlight contains all colors, and molecules in the atmosphere scatter shorter blue wavelen",
  "assistant_content": "Sunlight contains all colors, and molecules in the atmosphere scatter shorter blue wavelengths much more efficiently than longer red wavelengths. During the day, when the Sun is high, sunlight travels",
  "content": "Sunlight contains all colors, and molecules in the atmosphere scatter shorter blue wavelengths much more efficiently than longer red wavelengths. During the day, when the Sun is high, sunlight travels",
  "reasoning_content": "We need answer user: \"In three sentences, explain why the sky is blue during the day and red at sunset.\" Need exactly three sentences likely. Need final only 3 sentences. Ensure each sentence separate. Explain: sunlight scattered by molecules, shorter blue wavelengths scattered more, during day sunlight passes through less atmosphere so blue scatters everywhere. At sunset light passes through more atmosphere, blue removed/scattered out, longer red/orange wavelengths remain, and aerosols can enhance reddening. Need three sentences. Let's craft concise.\n\nSentence 1: Sunlight contains all colors, and molecules in the atmosphere scatter shorter blue wavelengths much more efficiently than longer red wavelengths. Sentence 2: During the day, when the Sun is high, sunlight travels through a relatively short path of atmosphere, so this scattered blue light is spread across the sky and dominates what we see. Sentence 3: At sunset, sunlight traverses a much longer path, so most blue light is scattered away and the transmitted light is enriched in red and orange wavelengths.\n\nCheck exactly three sentences. Yes. final.\n",
  "tool_calls": [],
  "request_md5": "9ab131c99100b7026bc86a850bd81202",
  "atem_leak": false,
  "prompt_md5": "1579a134be91ab67653a176a5cb3007d",
  "expected_substrings": [
   "scatter"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069036-5",
  "ctx": 71,
  "cached": 0,
  "gen": 49,
  "finish": "stop",
  "think_words": 23,
  "ans_words": 13,
  "prefill_ms": 170.0,
  "prefill_tok_s": 417.8,
  "decode_tok_s": 45.7,
  "decode_estimated": false,
  "tau": 1.67,
  "cycles": 18,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.171,
  "wall_s": 1.243,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "The capital of France is Paris, and the River Seine runs through it.",
  "assistant_content": "The capital of France is Paris, and the River Seine runs through it.",
  "content": "The capital of France is Paris, and the River Seine runs through it.",
  "reasoning_content": "The user wants a one-sentence answer with two facts: capital of France and river running through it. Paris; Seine. Need keep one sentence.\n",
  "tool_calls": [],
  "request_md5": "8cbf38b815b1c045c98b0b08b611b43f",
  "atem_leak": false,
  "prompt_md5": "8caca580290fb75cea2524f52dd6d094",
  "expected_substrings": [
   "Paris",
   "Seine"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069036-7",
  "ctx": 87,
  "cached": 0,
  "gen": 93,
  "finish": "stop",
  "think_words": 43,
  "ans_words": 1,
  "prefill_ms": 200.5,
  "prefill_tok_s": 434.0,
  "decode_tok_s": 41.1,
  "decode_estimated": false,
  "tau": 1.74,
  "cycles": 34,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.202,
  "wall_s": 2.466,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "{\"name\":\"Alice\",\"age\":34,\"city\":\"Lisbon\"}",
  "assistant_content": "{\"name\":\"Alice\",\"age\":34,\"city\":\"Lisbon\"}",
  "content": "{\"name\":\"Alice\",\"age\":34,\"city\":\"Lisbon\"}",
  "reasoning_content": "We need to respond to user: \"Convert this to a JSON object with keys \"name\", \"age\", and \"city\", and reply with only the JSON: Alice is 34 and lives in Lisbon.\" Need output only JSON. Need ensure no extra text. Need likely {\"name\":\"Alice\",\"age\":34,\"city\":\"Lisbon\"}.\n",
  "tool_calls": [],
  "request_md5": "3e03f2f59392699790de72bf6191344c",
  "atem_leak": false,
  "prompt_md5": "92bba2040a26fc8018f8e00769bccec9",
  "expected_substrings": [
   "\"name\"",
   "Alice",
   "\"age\"",
   "34",
   "\"city\"",
   "Lisbon"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069036-9",
  "ctx": 87,
  "cached": 0,
  "gen": 64,
  "finish": "stop",
  "think_words": 43,
  "ans_words": 2,
  "prefill_ms": 199.8,
  "prefill_tok_s": 435.4,
  "decode_tok_s": 34.3,
  "decode_estimated": false,
  "tau": 1.36,
  "cycles": 28,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.201,
  "wall_s": 2.068,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "Answer: 43",
  "assistant_content": "Answer: 43",
  "content": "Answer: 43",
  "reasoning_content": "We need answer user's simple arithmetic with final answer exactly form 'Answer: N'. Need final only maybe can include brief? User says Think briefly if need, then final answer on its own line exactly. We can just output Answer: 43. Ensure no extra.\n",
  "tool_calls": [],
  "request_md5": "93e260cdc42dd83850280abaf03f1c7c",
  "atem_leak": false,
  "prompt_md5": "eb63dba2cde2d0c46144775dbf19d7c8",
  "expected_substrings": [
   "Answer: 43"
  ],
  "retrieval_missing": []
 }
]
// --- q38-mtp-chain.json
[
 {
  "request_id": "chatcmpl-1069629-1",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 144,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.33,
  "wall_s": 6.053,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "We need answer user's request: \"Write a Python function that returns the longest substring of a string without repeating characters. Reply with only the code.\" Need provide only code. Need final only code. Need consider function returning longest substring without repeating characters. If multiple, maybe first? Usually returns one. Implement sliding window. Need only code, no explanation. Could include def longest_unique_substring(s: str) -> str. Need maybe edge cases. Return substring. Code:\n\ndef longest_substring_without_repeating(s):\n    start=0\n    best_start=0\n    best_len=0\n    last={}\n    for i,ch in enumerate(s):\n        if ch in last and last[ch] >= start:\n            start = last[ch] + 1\n        if i - start + 1 > best_len:\n            best_len = i-start+1\n            best_start = start\n        last[ch]=i\n    return s[best_start:best_start+best_len]\n\nCould use set with left. Simpler. Need maybe function name. The user's request says returns longest substring. Could name longest_non_repeating_substring. Only code. Ensure no markdown? \"Reply with only the code.\" Probably no fences",
  "content": "",
  "reasoning_content": "We need answer user's request: \"Write a Python function that returns the longest substring of a string without repeating characters. Reply with only the code.\" Need provide only code. Need final only code. Need consider function returning longest substring without repeating characters. If multiple, maybe first? Usually returns one. Implement sliding window. Need only code, no explanation. Could include def longest_unique_substring(s: str) -> str. Need maybe edge cases. Return substring. Code:\n\ndef longest_substring_without_repeating(s):\n    start=0\n    best_start=0\n    best_len=0\n    last={}\n    for i,ch in enumerate(s):\n        if ch in last and last[ch] >= start:\n            start = last[ch] + 1\n        if i - start + 1 > best_len:\n            best_len = i-start+1\n            best_start = start\n        last[ch]=i\n    return s[best_start:best_start+best_len]\n\nCould use set with left. Simpler. Need maybe function name. The user's request says returns longest substring. Could name longest_non_repeating_substring. Only code. Ensure no markdown? \"Reply with only the code.\" Probably no fences",
  "tool_calls": [],
  "request_md5": "53c2fa79ac3c2fe0f651112d81f78d82",
  "atem_leak": false,
  "prompt_md5": "caf1acdae66df8381a3ce1b0727886ca",
  "expected_substrings": [
   "def "
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069629-3",
  "ctx": 106,
  "cached": 0,
  "gen": 206,
  "finish": "stop",
  "think_words": 96,
  "ans_words": 66,
  "prefill_ms": 307.0,
  "prefill_tok_s": 345.2,
  "decode_tok_s": 47.5,
  "decode_estimated": false,
  "tau": 1.73,
  "cycles": 75,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.308,
  "wall_s": 4.647,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "Sunlight contains all colors of visible light, and tiny molecules in the atmosphere scatte",
  "assistant_content": "Sunlight contains all colors of visible light, and tiny molecules in the atmosphere scatter shorter blue wavelengths more strongly than other colors. During the day, this scattered blue light reaches our eyes from all directions, making the sky look blue. At sunset, sunlight passes through a much thicker layer of atmosphere, so the blue light is scattered away and the longer red and orange wavelengths dominate.",
  "content": "Sunlight contains all colors of visible light, and tiny molecules in the atmosphere scatter shorter blue wavelengths more strongly than other colors. During the day, this scattered blue light reaches our eyes from all directions, making the sky look blue. At sunset, sunlight passes through a much thicker layer of atmosphere, so the blue light is scattered away and the longer red and orange wavelengths dominate.",
  "reasoning_content": "We need answer user: \"In three sentences, explain why the sky is blue during the day and red at sunset.\" Need final exactly three sentences? User asks in three sentences. Need likely 3 sentences only. Explain Rayleigh scattering. Sentence 1: Sunlight contains all colors, molecules scatter shorter blue wavelengths more so daytime sky looks blue. Sentence 2: At sunset, sunlight travels through more atmosphere, removing/scattering blue and green before reaching eyes. Sentence 3: The remaining longer red and orange wavelengths reach us, making the sky look red/orange. Ensure three sentences. No extra. final only three sentences.\n",
  "tool_calls": [],
  "request_md5": "46d357e9489f058c4867302c6bd646fa",
  "atem_leak": false,
  "prompt_md5": "1579a134be91ab67653a176a5cb3007d",
  "expected_substrings": [
   "scatter"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069629-5",
  "ctx": 346,
  "cached": 0,
  "gen": 57,
  "finish": "stop",
  "think_words": 31,
  "ans_words": 13,
  "prefill_ms": 595.1,
  "prefill_tok_s": 581.4,
  "decode_tok_s": 30.7,
  "decode_estimated": false,
  "tau": 2.41,
  "cycles": 17,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.597,
  "wall_s": 2.456,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "The capital of France is Paris, and the Seine River runs through it.",
  "assistant_content": "The capital of France is Paris, and the Seine River runs through it.",
  "content": "The capital of France is Paris, and the Seine River runs through it.",
  "reasoning_content": "User asks capital of France and river through it, one sentence. Need answer one sentence. \"The capital of France is Paris, and the Seine River runs through it.\" Ensure one sentence.\n",
  "tool_calls": [],
  "request_md5": "5736f272a62af1fe6626498a86fd60bd",
  "atem_leak": false,
  "prompt_md5": "8caca580290fb75cea2524f52dd6d094",
  "expected_substrings": [
   "Paris",
   "Seine"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069629-7",
  "ctx": 453,
  "cached": 0,
  "gen": 100,
  "finish": "stop",
  "think_words": 49,
  "ans_words": 8,
  "prefill_ms": 708.7,
  "prefill_tok_s": 639.2,
  "decode_tok_s": 32.2,
  "decode_estimated": false,
  "tau": 1.73,
  "cycles": 37,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.711,
  "wall_s": 3.816,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}",
  "assistant_content": "{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}",
  "content": "{\n  \"name\": \"Alice\",\n  \"age\": 34,\n  \"city\": \"Lisbon\"\n}",
  "reasoning_content": "The user wants a JSON object with keys \"name\", \"age\", and \"city\" based on the sentence \"Alice is 34 and lives in Lisbon.\" They requested only the JSON, so I should output just the JSON object without code fences or extra text. Name is Alice, age 34, city Lisbon.\n",
  "tool_calls": [],
  "request_md5": "276fa90c72dd93291a526965d23353f8",
  "atem_leak": false,
  "prompt_md5": "92bba2040a26fc8018f8e00769bccec9",
  "expected_substrings": [
   "\"name\"",
   "Alice",
   "\"age\"",
   "34",
   "\"city\"",
   "Lisbon"
  ],
  "retrieval_missing": []
 },
 {
  "request_id": "chatcmpl-1069629-9",
  "ctx": 603,
  "cached": 0,
  "gen": 64,
  "finish": "stop",
  "think_words": 39,
  "ans_words": 2,
  "prefill_ms": 860.8,
  "prefill_tok_s": 700.5,
  "decode_tok_s": 22.9,
  "decode_estimated": false,
  "tau": 1.28,
  "cycles": 29,
  "dflash": null,
  "mtp": true,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.863,
  "wall_s": 3.652,
  "attractor": false,
  "empty": false,
  "runaway": false,
  "ans_preview": "Answer: 43",
  "assistant_content": "Answer: 43",
  "content": "Answer: 43",
  "reasoning_content": "We need answer 17+26. Need final answer own line exactly Answer: N. Compute 43. Ensure no extra? User says think briefly if need, then give final answer on its own line exactly form. We can just final. Ensure line.\n",
  "tool_calls": [],
  "request_md5": "f78bbf1bed12e1b711d67332100f1178",
  "atem_leak": false,
  "prompt_md5": "eb63dba2cde2d0c46144775dbf19d7c8",
  "expected_substrings": [
   "Answer: 43"
  ],
  "retrieval_missing": []
 }
]
// --- q38-mtp-8192-battery-upstreampath.txt
  [serve warm; MTP head loaded lines=1]
  [code]t1  finish=None   ctx=0      cached=0      gen=0    (think 146/ans 0w) prefill=Nonems/n/atok/s decode=Nonetok/s tau=None recall=1/1 !EMPTY | '<<no visible content>>'
  [prose]t2  finish=length ctx=70     cached=0      gen=256  (think 162/ans 41w) prefill=169.2ms/413.7tok/s decode=50.1tok/s tau=1.87 recall=1/1 !RUNAWAY,ATTRACTOR | 'During the day, sunlight travels a relatively short path through the atmosphere. Air molec'
  [factual]t3  finish=stop   ctx=71     cached=0      gen=63   (think 33/ans 13w) prefill=170.3ms/416.9tok/s decode=45.4tok/s tau=2.25 recall=2/2 | 'The capital of France is Paris, and the Seine River runs through it.'
  [format]t4  finish=stop   ctx=87     cached=0      gen=86   (think 29/ans 8w) prefill=199.8ms/435.4tok/s decode=59.2tok/s tau=2.4 recall=6/6 | '{\n  "name": "Alice",\n  "age": 34,\n  "city": "Lisbon"\n}'
  [reason]t5  finish=stop   ctx=87     cached=0      gen=69   (think 41/ans 2w) prefill=200.0ms/434.9tok/s decode=39.5tok/s tau=1.73 recall=1/1 | 'Answer: 43'
[qwen3.8-27b.mq4|on|battery DONE] turns=5 runaway=1 empty=1 attractor=1 retrieval_miss=0 avg_prefill=425.2tok/s avg_decode=48.5tok/s
// --- q38-mtp-8192-flash-only.json
[
 {
  "request_id": "chatcmpl-1095784-1",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 1,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0.201,
  "wall_s": 0.77,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "We",
  "content": "",
  "reasoning_content": "We",
  "tool_calls": [],
  "request_md5": "53c2fa79ac3c2fe0f651112d81f78d82",
  "atem_leak": false,
  "prompt_md5": "caf1acdae66df8381a3ce1b0727886ca",
  "expected_substrings": [
   "def "
  ],
  "retrieval_missing": [
   "def "
  ]
 },
 {
  "request_id": "chatcmpl-1095784-3",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 0,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0,
  "wall_s": 0.0,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "",
  "content": "",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "9ab131c99100b7026bc86a850bd81202",
  "atem_leak": false,
  "prompt_md5": "1579a134be91ab67653a176a5cb3007d",
  "expected_substrings": [
   "scatter"
  ],
  "retrieval_missing": [
   "scatter"
  ]
 },
 {
  "request_id": "chatcmpl-1095784-5",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 0,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0,
  "wall_s": 0.0,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "",
  "content": "",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "8cbf38b815b1c045c98b0b08b611b43f",
  "atem_leak": false,
  "prompt_md5": "8caca580290fb75cea2524f52dd6d094",
  "expected_substrings": [
   "Paris",
   "Seine"
  ],
  "retrieval_missing": [
   "Paris",
   "Seine"
  ]
 },
 {
  "request_id": "chatcmpl-1095784-7",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 0,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0,
  "wall_s": 0.0,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "",
  "content": "",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "3e03f2f59392699790de72bf6191344c",
  "atem_leak": false,
  "prompt_md5": "92bba2040a26fc8018f8e00769bccec9",
  "expected_substrings": [
   "\"name\"",
   "Alice",
   "\"age\"",
   "34",
   "\"city\"",
   "Lisbon"
  ],
  "retrieval_missing": [
   "\"name\"",
   "Alice",
   "\"age\"",
   "34",
   "\"city\"",
   "Lisbon"
  ]
 },
 {
  "request_id": "chatcmpl-1095784-9",
  "ctx": 0,
  "cached": 0,
  "gen": 0,
  "finish": null,
  "think_words": 0,
  "ans_words": 0,
  "prefill_ms": null,
  "prefill_tok_s": null,
  "decode_tok_s": null,
  "decode_estimated": false,
  "tau": null,
  "cycles": null,
  "dflash": null,
  "mtp": null,
  "mtp_ngram": null,
  "ngram_mod_windows": null,
  "ngram_mod_drafts": null,
  "ngram_mod_accepted": null,
  "ngram_mod_accept_rate": null,
  "mtp_windows": null,
  "ar_windows": null,
  "mtp_retired": null,
  "mtp_window_timings": null,
  "ttft_s": 0,
  "wall_s": 0.0,
  "attractor": false,
  "empty": true,
  "runaway": false,
  "ans_preview": "<<no visible content>>",
  "assistant_content": "",
  "content": "",
  "reasoning_content": "",
  "tool_calls": [],
  "request_md5": "93e260cdc42dd83850280abaf03f1c7c",
  "atem_leak": false,
  "prompt_md5": "eb63dba2cde2d0c46144775dbf19d7c8",
  "expected_substrings": [
   "Answer: 43"
  ],
  "retrieval_missing": [
   "Answer: 43"
  ]
 }
]

Hardware validation request (optional)

{
  "routes": [
    {"mode": "battery", "tag": "qwen3.6:27b"},
    {"mode": "chain",   "tag": "qwen3.6:27b"},
    {"mode": "chain",   "tag": "ornith-1.5:35b-a3b-mq4r"}
  ],
  "claim": "MTP head attends through the trunk flash policy with correctly sized partials; any MTP-enabled artifact at max_seq <= 8192 on gfx1100 no longer page-faults, and non-MTP serve is unchanged."
}

Architecture-trait change?

No.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant