Skip to content

feat(parsers-v2): add Muse Glimmer unified and streaming tool-call parsers - #185

Merged
KrishnanPrash merged 6 commits into
mainfrom
kprashanth/muse-glimmer-parsers
Aug 21, 2026
Merged

feat(parsers-v2): add Muse Glimmer unified and streaming tool-call parsers#185
KrishnanPrash merged 6 commits into
mainfrom
kprashanth/muse-glimmer-parsers

Conversation

@KrishnanPrash

@KrishnanPrash KrishnanPrash commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Overview

Adds Muse-Glimmer-30B parser support as a v2 UnifiedParser: one state machine that emits reasoning, content, and tool-call deltas in model order, plus the tool-only projection of the same scanner. The model uses ATEM tool markup and recipient-routed reasoning.

What this adds

  • parsers/v2/src/unified/muse_glimmer.rs: the unified parser.
  • parsers/v2/src/tool_calling/muse_glimmer.rs: MuseChannelScanner (recipient-dispatched) and MuseGlimmerToolStreamParser, the tool-only projection of the same scanner. Registered as muse_glimmer in create_tool_parser_for_family and create_unified_parser_for_family.
  • Muse cases in the v2 golden corpus (the 33 shared scenarios plus the reasoning and tool interleaving cases).

Why a muse-specific scanner

WrappedBlockScanner dispatches on fixed marker literals. Muse decides the channel from the dynamic to=<recipient> header (the same <|start|> ... <|message|> opener begins reasoning, content, or a tool block), so there is no marker pair to declare. MuseChannelScanner owns the routing and reuses the shared primitives; one scanner drives both surfaces.

Validation

  • cargo test --workspace pass, clippy -D warnings and fmt clean, check.sh ci green, check_family_coverage --family muse_glimmer 0/0, golden corpus regenerates byte-identical.
  • v2 batch equals stream at every byte split; a real trace ships as a fixture.
  • The v2 tool-call output matched the reference over the 112-record e2e suite with zero marker leaks. The full unified served path (reasoning plus tools through one parser) lands with the companion Dynamo change below.

Known limitations (documented and pinned)

  • A marker split across a <|eom|> seam can survive one strip pass and reappear in assembled text. Requires model-invalid input (a reserved-token fragment as prose across a real control token). Pinned as a chunk-invariance exception.
  • Integer arguments past u64::MAX format via f64.
  • <|start|> inside an ATEM parameter value is read as a channel switch.

Companion Dynamo change (separate PR)

To serve muse through v2, Dynamo consumes the unified parser (create_unified_parser_for_family) for muse by default, which replaces both the v1 reasoning parser and the tool jail. Dynamo's parser_requires_special_tokens must also list the muse aliases, or serving strips the channel framing before any parser runs (Inkling precedent, dynamo #11823).

Versions

@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown

📊 Conformance matrix rendered — view in CI summary

@KrishnanPrash
KrishnanPrash marked this pull request as draft August 13, 2026 09:17
@KrishnanPrash
KrishnanPrash deleted the kprashanth/muse-glimmer-parsers branch August 13, 2026 10:28
@KrishnanPrash
KrishnanPrash restored the kprashanth/muse-glimmer-parsers branch August 13, 2026 10:30
@KrishnanPrash KrishnanPrash reopened this Aug 13, 2026
@KrishnanPrash KrishnanPrash self-assigned this Aug 13, 2026
@KrishnanPrash KrishnanPrash changed the title feat(parsers)!: add Muse Glimmer ATEM tool-call and reasoning parsers feat(parsers)!: add Muse Glimmer parsers (v1 batch + v2 unified streaming) Aug 13, 2026
@KrishnanPrash
KrishnanPrash force-pushed the kprashanth/muse-glimmer-parsers branch from 7672553 to da2f540 Compare August 14, 2026 20:24
@KrishnanPrash KrishnanPrash changed the title feat(parsers)!: add Muse Glimmer parsers (v1 batch + v2 unified streaming) feat(parsers-v2): add Muse Glimmer unified and streaming tool-call parsers Aug 14, 2026
@KrishnanPrash
KrishnanPrash force-pushed the kprashanth/muse-glimmer-parsers branch 2 times, most recently from 18f5c31 to 6e5e82a Compare August 14, 2026 23:02
@KrishnanPrash
KrishnanPrash marked this pull request as ready for review August 16, 2026 22:54
Comment thread parsers/v2/src/unified/muse_glimmer.rs
@KrishnanPrash
KrishnanPrash force-pushed the kprashanth/muse-glimmer-parsers branch from 9945785 to 49cce52 Compare August 19, 2026 00:58
Comment thread parsers/v1/Cargo.toml Outdated
Comment thread parsers/v2/src/tool_calling/muse_glimmer.rs Outdated
Comment thread parsers/v2/src/tool_calling/muse_glimmer.rs Outdated

@indrajit96 indrajit96 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Core parser behavior and targeted tests look solid.
Some Nits and versioning questions

@KrishnanPrash
KrishnanPrash force-pushed the kprashanth/muse-glimmer-parsers branch from 49cce52 to 106d907 Compare August 20, 2026 01:55

@keivenchang keivenchang left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks.

@keivenchang

Copy link
Copy Markdown
Contributor

hey Dallas, nice work on this. digging into the conformance table after approving — muse_glimmer only covers 36 of 81 unified cases. guided-decoding and prefilled-response groups get skipped since there's no initialize_request override yet, so the generator would panic if it tried. not asking you to fix this one, it's already documented as a known gap. can you add a tracking issue (or TODO) for the missing guided-decoding/prefilled-response coverage so it doesn't get lost?

@keivenchang keivenchang left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

conformance (tests) to be completed:
image

@keivenchang keivenchang left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gonna pre-approve to unblock you.

@KrishnanPrash

Copy link
Copy Markdown
Contributor Author

Added the TODO for the guided-decoding/prefilled-response coverage. Thanks for the approval @keivenchang!

@KrishnanPrash
KrishnanPrash merged commit 453ce91 into main Aug 21, 2026
7 checks passed
@KrishnanPrash
KrishnanPrash deleted the kprashanth/muse-glimmer-parsers branch August 21, 2026 17:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants