pub struct Quantization {
pub bits: Option<u8>,
pub scheme: QuantScheme,
pub group_size: Option<u32>,
pub label: String,
}Expand description
Structured quantization descriptor.
This replaces a free-text string that mixed two vocabularies — MLX’s
4bit/6bit and GGUF’s Q4_K_M/Q8_0 — under one field, so nothing could
tell a group-quantized integer checkpoint from a mixed k-quant one. It also
threw away what the ingest paths already had in hand: MLX config.json
declares {bits, group_size, mode} and only bits survived.
Deserializes from either the legacy bare string or the structured
object, so catalogs, user models.json files, and models.register
payloads written before this change keep loading unchanged. The object form
requires label and rejects unknown fields: a misspelled key is a producer
bug, and accepting it silently is how the field it replaced lost
information in the first place.
Writes the bare label back whenever that is lossless, and the object
only when it carries something parsing cannot recover — a group_size, or
a scheme that disambiguates a label the parser reads as Unknown. Two
reasons, both about blast radius rather than taste. This value is inside
catalog_identity::row_digest, so an unconditional shape change would move
the digest of every quantized row and hard-fail any client that pinned
expected_catalog_revision. And registry::load_user_config fails a
models.json whole, with its only production caller discarding the
error — so an older daemon meeting an object it cannot parse boots with
zero registered models and says nothing. Emitting the object only where it
adds information keeps both costs proportional to what actually changed.
Fields§
§bits: Option<u8>Weight bit width. None when the label names none.
scheme: QuantSchemeWhich quantization family this is.
group_size: Option<u32>Elements sharing one scale/zero point (MLX: 32, 64, 128). None when
the scheme has no group concept, or the source declared none.
label: StringThe label exactly as published. Never synthesized: it is what the user sees, what Hugging Face repos are named after, and the only thing that survives a scheme CAR does not recognize yet.
Implementations§
Source§impl Quantization
impl Quantization
Sourcepub fn parse(label: &str) -> Self
pub fn parse(label: &str) -> Self
Best-effort structure from a published label.
Never fails and never invents: an unrecognized label yields
QuantScheme::Unknown with the label intact.
Sourcepub fn from_gguf_filename(filename: &str) -> Option<Self>
pub fn from_gguf_filename(filename: &str) -> Option<Self>
Recover the quantization a GGUF file names in its own filename
(Qwen3-8B-Q4_K_M.gguf, ggml-large-v3-turbo-q5_0.gguf).
Scans the hyphen-separated segments from the right and takes the first
that classifies, so a model whose name contains something quant-shaped
does not outrank the real suffix. Returns None rather than guessing
when nothing in the name is recognizable.
Sourcepub fn from_mlx_config(
bits: Option<u8>,
group_size: Option<u32>,
mode: Option<&str>,
) -> Option<Self>
pub fn from_mlx_config( bits: Option<u8>, group_size: Option<u32>, mode: Option<&str>, ) -> Option<Self>
Descriptor for an MLX checkpoint, from the quantization block of its
config.json. mode is MLX’s own name for the format (affine,
mxfp4, mxfp8); absent means affine, which is MLX’s default.
Returns None when the block carried nothing usable — declaring
AffineGroupInt on the strength of an empty object would assert exactly the
thing this type exists to establish.
Trait Implementations§
Source§impl Clone for Quantization
impl Clone for Quantization
Source§fn clone(&self) -> Quantization
fn clone(&self) -> Quantization
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Quantization
impl Debug for Quantization
Source§impl<'de> Deserialize<'de> for Quantization
impl<'de> Deserialize<'de> for Quantization
Source§fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>
Source§impl Display for Quantization
impl Display for Quantization
impl Eq for Quantization
Source§impl PartialEq for Quantization
impl PartialEq for Quantization
Source§impl Serialize for Quantization
impl Serialize for Quantization
impl StructuralPartialEq for Quantization
Auto Trait Implementations§
impl Freeze for Quantization
impl RefUnwindSafe for Quantization
impl Send for Quantization
impl Sync for Quantization
impl Unpin for Quantization
impl UnsafeUnpin for Quantization
impl UnwindSafe for Quantization
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> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more