pub struct ShapeKeyHasher(/* private fields */);Expand description
FNV-1a 64 over a canonical encoding of a model’s decode identity.
Same constants as fuel_dispatch::fkc::revhash and
fuel_memory::dlpack_view — offset basis 0xcbf29ce484222325, prime
0x100000001b3. Pinned by known-answer vectors below rather than by
cross-checking against those, so a consistent drift in all three cannot pass.
Implementations§
Source§impl ShapeKeyHasher
impl ShapeKeyHasher
pub fn new() -> Self
Sourcepub fn mix_str(&mut self, s: &str) -> &mut Self
pub fn mix_str(&mut self, s: &str) -> &mut Self
Mix a structural discriminant — the model family, a hook’s presence, a
mask policy. Prefer a stable literal ("qwen3", "sliding_window") over
anything derived from a Debug impl, which is free to change.
Sourcepub fn mix_u64(&mut self, v: u64) -> &mut Self
pub fn mix_u64(&mut self, v: u64) -> &mut Self
Mix a numeric structural parameter (n_layers, head_dim, a window
size, an enum discriminant).
Sourcepub fn mix_f64(&mut self, v: f64) -> &mut Self
pub fn mix_f64(&mut self, v: f64) -> &mut Self
Mix a float structural parameter (rms_norm_eps). By bit pattern, so
NaN and -0.0 need no comparison.
Note this gives +0.0 and -0.0 different keys. That is deliberate and
conservative — the cost is a redundant plan rebuild in a case that does
not arise, and the alternative (normalizing) is a comparison that has to
stay correct forever. Do not “fix” it.
Sourcepub fn mix_instance(&mut self, id: ModelInstanceId) -> &mut Self
pub fn mix_instance(&mut self, id: ModelInstanceId) -> &mut Self
Mix the model’s identity — the component that separates two models of
the same architecture, whose baked weight Consts differ.
There is deliberately no mix_weight(&Arc<T>) here. Folding weight
addresses is the obvious cheaper implementation and it is unsound: a
session does not pin the model’s weight allocations, so a dropped model
frees addresses a later model can be handed. The module docs carry the
full sequence. A method that looks like identity and silently isn’t is
worse than no method, so it is absent rather than deprecated.
Sourcepub fn mix_present(&mut self, present: bool) -> &mut Self
pub fn mix_present(&mut self, present: bool) -> &mut Self
Mix whether an optional hook is present, so a model with it disabled cannot key the same as one with it enabled. The obvious implementation — skipping the mix when absent — has exactly that bug.
pub fn finish(&self) -> u64
Trait Implementations§
Source§impl Clone for ShapeKeyHasher
impl Clone for ShapeKeyHasher
Source§impl Debug for ShapeKeyHasher
impl Debug for ShapeKeyHasher
Auto Trait Implementations§
impl Freeze for ShapeKeyHasher
impl RefUnwindSafe for ShapeKeyHasher
impl Send for ShapeKeyHasher
impl Sync for ShapeKeyHasher
impl Unpin for ShapeKeyHasher
impl UnsafeUnpin for ShapeKeyHasher
impl UnwindSafe for ShapeKeyHasher
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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