feat(rtmg): spectral steering (on models/backend)#233
Merged
ryanontheinside merged 2 commits intoJun 9, 2026
Conversation
Also relabels the two sections inside as "channel highlights" and "channel groups" so the section ↔ tab vocabulary stays honest.
6dbb2fc
into
ryanontheinside/feat/models/spectral/spectral-control
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
feat(rtmg): spectral steering, re-expressed in the registry-driven control surface
The demo/control surface for the spectral-control backend underneath: four perceptual steering knobs (bright / warm / rough / density) plus runtime-allocatable manual slots that fire any vector in the probe catalog at an operator-chosen (layer, step, alpha).
What's here (two commits)
4c3eff1tab rename. "Channels" tab -> "Experimental"; section labels become "channel highlights" / "channel groups".dd556b8spectral steering. The original feature, re-expressed in the post-refactor architecture instead of the old hand-rolled knob banks:acestep/streaming/knobs.py): puresteering_axis_spec()/manual_slot_specs()factories (same pattern aslora_strength_spec).ACEStepBackend.knob_specs()appends them when the session's checkpoint has a vector bundle, so/api/knobs-shaped manifests, the wirereadyframe, MCPlist_knobs, andDynamicKnobPanelall pick them up with zero per-transport code.ace_backend.py): owns theSteeringController(constructed infamilies._make_acestepviaensure_steering_vectors(checkpoint));_sync_steering()pushes configs on snapshot change (pipeline identity is part of the key so asteps_overriderebuild re-arms), sitting next to_sync_channel_guidancein_prepare_tick. NewCapabilities.steeringbit, true only when vectors loaded.session.py):manual_slot_add/manual_slot_popops gated by@requires_capability("steering", ...); KnobState + the cached spec map mirror the controller's LIFO slots;ManualSlotCountbus event published on success AND refusal;steering_payload()(count / cap / available) shared by snapshot and thereadyframe.protocol.py):manual_slot_add/manual_slot_popcommands (requires="steering"),manual_slot_countevent, three wire-optionalreadyfields.wireContract.gen.tsregenerated; all drift guards green.mcp_server.py):add_manual_slot/pop_manual_slot/list_manual_steering_vectorstools;list_knobsand knob validation now prefer the session snapshot's backend-ownedknob_manifest(the only projection that can carry backend-specific knobs), falling back to the static registry for older servers.manualSlotCount/manualSlotCap/steeringAvailableareRemoteBackendinstance fields + a typedmanual_slot_countswitch case; the host mirrors them inuseStartSession. Senders typed against the generated command types.VoiceTilegrows the steering knob rack + manual-slot rows with +/- controls; tooltips inSliderTile;SLIDER_METApre-registersman_*_{1..16}.Deliberately dropped from the original commit: the unrelated
config.jsondefault LoRA/prompt swaps (funkv1/Phonk, prompt A) — debugging defaults that rode into #163.Validation
tscclean,next buildclean, vitest unit 35/35, replay tier 6/6 (bit-exact).