Skip to content

Commit c6e793f

Browse files
fix: add @ModuleInfo to BertModel.pooler and NomicBertModel.pooler
These Linear? properties are replaced by QuantizedLinear during quantization via Module.update(modules:). Without @ModuleInfo, the non-throwing update(modules:) wrapper hits try! on the thrown needModuleInfo error, causing SIGABRT when loading quantized embedding models. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent bc3c20e commit c6e793f

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

Libraries/MLXEmbedders/Models/Bert.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public class BertModel: Module, EmbeddingModel {
259259
@ModuleInfo(key: "embeddings") fileprivate var embedder: BertEmbedding
260260

261261
/// A linear layer used to "pool" the [CLS] token into a single sentence vector.
262-
let pooler: Linear?
262+
@ModuleInfo var pooler: Linear?
263263

264264
/// The stack of Transformer layers.
265265
fileprivate let encoder: Encoder
@@ -280,10 +280,10 @@ public class BertModel: Module, EmbeddingModel {
280280

281281
if lmHead {
282282
_lmHead.wrappedValue = LMHead(config)
283-
self.pooler = nil
283+
_pooler.wrappedValue = nil
284284
} else {
285285
// Pooler projects the [CLS] token to a hidden state of the same size
286-
pooler = Linear(config.embedDim, config.embedDim)
286+
_pooler.wrappedValue = Linear(config.embedDim, config.embedDim)
287287
_lmHead.wrappedValue = nil
288288
}
289289
}

Libraries/MLXEmbedders/Models/NomicBert.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ public class NomicBertModel: Module, EmbeddingModel {
671671

672672
/// The optional pooler layer.
673673
/// Used to extract a single vector representation for the whole sequence (usually from the [CLS] token).
674-
let pooler: Linear?
674+
@ModuleInfo var pooler: Linear?
675675

676676
/// The stack of Transformer blocks.
677677
fileprivate let encoder: Encoder
@@ -696,9 +696,9 @@ public class NomicBertModel: Module, EmbeddingModel {
696696

697697
// Initialize Pooler (for sentence embeddings)
698698
if pooler {
699-
self.pooler = Linear(config.embedDim, config.embedDim, bias: false)
699+
_pooler.wrappedValue = Linear(config.embedDim, config.embedDim, bias: false)
700700
} else {
701-
self.pooler = nil
701+
_pooler.wrappedValue = nil
702702
}
703703

704704
// Initialize LM Head (for training/masked prediction)

0 commit comments

Comments
 (0)