pub struct GptOssLayer {
pub router_bias: Vec<f32>,
pub expert_bias: Vec<ExpertBias>,
}Expand description
The per-layer weights the gpt-oss graph carries and the generic GQA layer structs do not.
Held as a side table on Decoder rather than as new Option
fields on AttnWeights/MoeWeights for two reasons. The first
is mechanical: those two structs have thirty construction sites
across seven loaders and every dedicated engine, and none of them
will ever set these. The second is the point of the exercise — a
checkpoint either has the whole gpt-oss graph or none of it, so
Decoder::gpt_oss.is_some() is a single, checkable predicate for
“this model needs the gpt-oss path”, which is what the CPU-only and
paged-attention refusals below key off. Scattering four independent
Options would make “half the graph is wired” representable, and
that state is precisely the silent-wrong-answer bug this work exists
to remove.
The attention sinks used to be the fifth field here and are
AttnWeights::sinks now, because they are NOT gpt-oss-only:
mimo2.cpp:58,177 passes the same tensor into the same
build_attn_mha. What keeps the whole-graph rule intact is that
the loader refuses a gpt-oss file whose sinks are absent.
Fields§
§router_bias: Vec<f32>blk.N.ffn_gate_inp.bias, added to the router logits.
(attn_output.bias used to be here too and is
AttnWeights::o_bias now: crate::proj_bias fills that slot
for every graph that creates the tensor, gpt-oss among them.)
expert_bias: Vec<ExpertBias>blk.N.ffn_{gate,up,down}_exps.bias, one entry per expert.
Auto Trait Implementations§
impl Freeze for GptOssLayer
impl RefUnwindSafe for GptOssLayer
impl Send for GptOssLayer
impl Sync for GptOssLayer
impl Unpin for GptOssLayer
impl UnsafeUnpin for GptOssLayer
impl UnwindSafe for GptOssLayer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more