memory: CORRECT the MeroMero-CoT finding — not a hard wall, not MeroMero-specific
My prior entry claimed the gemma4 reasoning parser is process-wide and the CoT
was architecturally blocked. Reading the actual code proves that wrong:
- Template (chat_template.jinja:347-352): thinking is a PER-REQUEST toggle.
enable_thinking:false prefills an empty <|channel>thought<channel|> to
suppress; true omits the prefill so the model can emit a real thought channel.
- Parser (vllm/reasoning/gemma4_utils.py): splits on <|channel>/<channel|> tag
presence, "works with or without enable_thinking" -- NOT a process-wide flag.
The stale compose comment I trusted cited an old parser API (vllm/parser/
gemma4.py:439) this container doesn't run.
So the mechanism is gemma4-GENERAL (any gemma4 finetune on this template family),
and the two-served-name gen pattern should work. What actually failed the test was
that meromero runs vllm/vllm-openai:latest (v0.24.0), where per-request
chat_template_kwargs.enable_thinking didn't take effect -- whereas the gen seat's
pinned nightly demonstrably applies it. That's a version/plumbing issue, not the
model and not the architecture, and it would hit any gemma4 finetune on that image.
Unverified fix (needs a GPU window): re-serve meromero on the nightly image with no
process default and per-request enable_thinking. Currently reverted to known-good.
This commit is contained in:
@@ -122,7 +122,7 @@ _As of 2026-08-21 00:35 — **the Heretic-300 session, and its reversal** (see t
|
||||
|
||||
- **🟢 HOMEPAGE — cleaned + themed (Australis Skyfall).** Three real defects fixed (UltraSeedbox on all tabs, Uptime Kuma double-rendered, fiction column counts), AI tab reordered by clickability, then themed from the operator's Skyfall handoff bundle with a background generated by **Arbo** (`t2i-ui-background`, job `13f0891f4e42`). ⚠ **After any recreate the tab bar/wallpaper/i18n vanish for up to ~an hour and then return on their own — do not chase it.** ⚠ CSS is served per-request: a theme change needs a **reload**, not a recreate, and candidate CSS can be injected live via Playwright for seconds-long iteration. → `persistent-memory.d/2026-08-19-homepage-skyfall-theme.md`
|
||||
|
||||
- **⚪ TRIED + ABANDONED 2026-08-21 — MeroMero-v2 CoT as char-rp-reasoning is NOT achievable via vLLM's gemma4 parser.** Operator asked to serve MeroMero (char-rp) with reasoning. The model DOES reason (zerofata card: "Stage 3 RP logic GRPO, think enabled"; ships Gemma4-Think/NoThink SillyTavern presets; thinking rides a `<|channel>thought…<channel|>` channel). BUT: (1) it is **byte-identical to the weights we already serve** (same repo `zerofata/G4-MeroMero-v2-31B`, chat_template sha `94899c0f` matches our on-disk quant) — so **re-quanting adds nothing**; (2) the **gemma4 reasoning parser's `enable_thinking` is PROCESS-WIDE, not per-request** — the seat's `--default-chat-template-kwargs {enable_thinking:false}` sets the parser state machine (`gemma4.py:439` defaults it TRUE→reasoning), and per-request `chat_template_kwargs.enable_thinking` reaches the template but **NOT the parser** (unlike the qwen3 parser gen uses). So the gen/gen-reasoning two-served-name trick **cannot work** here. **Empirically verified:** stood up `char-rp-thinking` served-name + removed the process default; `enable_thinking:true` per-request still produced **pure prose, 0 reasoning_content**. And per the seat's own comment, a dedicated process forced thinking-on dumps **all** prose into reasoning_content with null content — no clean think/response split. **MeroMero reasons only client-side (SillyTavern parses the channel), not through vLLM.** FULLY REVERTED to known-good (single served-name, process default restored, char-rp prose verified). ⚠ **Kept: `MEROMERO_GPU_MEM_UTIL` 0.52→0.51** — 0.52 no longer boots because orcarouter gen (GPU0 neighbor) is marginally bigger than the old heresy; free 49.02 < needed 49.38 GiB. 0.51 fits (KV 2.00× @ 262K, negligible loss). **For real RP-with-CoT: use `gen-reasoning` (orcarouter thinks, uncensored) or a dedicated Qwen-based RP-thinking seat (e.g. darkscarlett), which needs a GPU slot.**
|
||||
- **⚠️ CORRECTED 2026-08-21 — MeroMero-v2 CoT: NOT a hard wall, and NOT MeroMero-specific. My first conclusion ("gemma4 parser is process-wide") was WRONG.** Read the actual code, not the stale compose comment. **The real mechanism (gemma4-GENERAL, applies to any gemma4 finetune on this template family):** thinking is a **per-request** template toggle — `chat_template.jinja:347-352` emits the generation prompt `<|turn>model\n`, and **only when `enable_thinking` is false** does it prefill an empty `<|channel>thought\n<channel|>` to SUPPRESS thinking; `enable_thinking:true` omits the prefill so the model is free to open a real `<|channel>thought…<channel|>` block. The vLLM parser (`vllm/reasoning/gemma4_utils.py:parse_thinking_output`) **splits on `<|channel>`/`<channel|>` tag PRESENCE — "works with or without enable_thinking," NOT a process-wide flag.** The stale compose comment I trusted cited an OLD parser API (`vllm/parser/gemma4.py:439`) that this container does not run. **So there is no architectural blocker; the two-served-name gen pattern SHOULD work.** **What actually failed my test:** meromero runs `vllm/vllm-openai:latest` (v0.24.0); per-request `chat_template_kwargs.enable_thinking:true` produced no thinking on it, whereas the **gen seat's pinned nightly demonstrably applies per-request `chat_template_kwargs`** (gen-reasoning works). So the practical block is a **vLLM-version / per-request-plumbing issue on v0.24.0**, not the model and not the architecture — and it would hit ANY gemma4 finetune served on that image the same way. **UNVERIFIED FIX (needs a GPU window): re-serve meromero on the nightly image + no process default + per-request enable_thinking; likely yields clean split CoT.** Currently REVERTED to known-good (char-rp prose, process default false, single served-name). ⚠ Kept `MEROMERO_GPU_MEM_UTIL` 0.52→0.51 (0.52 no longer boots next to the bigger orcarouter gen; free 49.02 < 49.38 GiB; 0.51 = KV 2.00× @ 262K).
|
||||
|
||||
- **🟢 PEN-TEST SEAT — M.O.G.-SEC LIVE on ana-ml2 GPU1 :8019 (2026-08-21 ~02:35, autonomous overnight run under operator's "full autonomy" grant).** `stacks/mog-sec` serves `/tank/aimodels/mog-sec-27b-nvfp4-mixed` (23.4 GB, our mixed NVFP4+FP8 quant of `Blackfrost-Research/M.O.G.-SEC-27B-1M-CTX-BF16`, rev `deede677`) in the **retired fablefusion-charrp-probe slot**. Aliases: **`mog-sec`** (non-thinking, presence_penalty 0.0 for code) + **`mog-sec-reasoning`** (thinking); served-names `mog-sec-27b`/`-thinking`. **Gates all pass:** KV **418,218 tok / 1.60× @ 262K**; surface **6/6**; MTP **55.3% @ 111.7 tok/s**; format screen **1.11e-05** (rank 196, no `<think>` leak); **vision 7/3/1**; **capability 4/4** (SQL-inj exfil, pentest phasing, port scanner, Kerberoasting — it delivers, doesn't refuse). **★ Chose the BF16 + self-quant over the pre-made ModelOpt NVFP4**, which was disqualified on W4A4 (4-bit activations, AEON mode) + zero MTP + the self-defeating W4A4-on-1M-context. **⚠ CONTEXT IS 262K NATIVE, NOT the card's 1M** — 1M needs YaRN (absent from config) + the SGLang/DFlash2 path the repo ships, neither our vLLM surface; a real 1M seat is a separate SGLang project. **MTP head is a base graft** (identical to stock), not in-band abliterated like orcarouter's. Provenance `mog-sec-27b-nvfp4-mixed.PROVENANCE.txt`; eval `docs/pfi/gen-seat-candidate-eval-2026-08-21.md`. **RETIRED with it:** `char-rp-reasoning` + `char-rp-fable` LiteLLM aliases (zero traffic, pointed at the dead fable :8019; now 404). RP-reasoning's real home is `darkscarlett-charrp-reasoning` (:8018, compose-down, weights intact) if ever wanted. ⚠ brand-new model (0 downloads at pull, org-name mismatch Research-vs-AI) — card claims are claims.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user