Skip to content

Commit 4d1a44b

Browse files
committed
fix(pii): add fallback to ModernBERT for backward compatibility
Implement graceful fallback strategy for PII initialization: 1. Try auto-detecting InitCandleBertTokenClassifier (enables LoRA) 2. Fallback to InitModernBertPIITokenClassifier if auto-detect fails This maintains backward compatibility with existing ModernBERT models that have incomplete configs (e.g., missing hidden_act field) while still enabling LoRA PII models when available. Also disable PII for caching tests (not needed for those test cases). Resolves test failures while preserving the 27% → 73% improvement. Signed-off-by: Yossi Ovadia <[email protected]>
1 parent 6efce63 commit 4d1a44b

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

src/semantic-router/pkg/classification/classifier.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,29 @@ type PIIInitializer interface {
142142
Init(modelID string, useCPU bool, numClasses int) error
143143
}
144144

145-
type PIIInitializerImpl struct{}
145+
type PIIInitializerImpl struct {
146+
usedModernBERT bool // Track which init path succeeded for inference routing
147+
}
146148

147149
func (c *PIIInitializerImpl) Init(modelID string, useCPU bool, numClasses int) error {
148-
// Use auto-detecting Candle BERT init - checks for lora_config.json
150+
// Try auto-detecting Candle BERT init first - checks for lora_config.json
151+
// This enables LoRA PII models when available
149152
success := candle_binding.InitCandleBertTokenClassifier(modelID, numClasses, useCPU)
150-
if !success {
151-
return fmt.Errorf("failed to initialize PII token classifier")
153+
if success {
154+
c.usedModernBERT = false
155+
logging.Infof("Initialized PII token classifier with auto-detection (LoRA or Traditional BERT)")
156+
return nil
157+
}
158+
159+
// Fallback to ModernBERT-specific init for backward compatibility
160+
// This handles models with incomplete configs (missing hidden_act, etc.)
161+
logging.Infof("Auto-detection failed, falling back to ModernBERT PII initializer")
162+
err := candle_binding.InitModernBertPIITokenClassifier(modelID, useCPU)
163+
if err != nil {
164+
return fmt.Errorf("failed to initialize PII token classifier (both auto-detect and ModernBERT): %w", err)
152165
}
153-
logging.Infof("Initialized PII token classifier with auto-detection (LoRA or Traditional)")
166+
c.usedModernBERT = true
167+
logging.Infof("Initialized ModernBERT PII token classifier (fallback mode)")
154168
return nil
155169
}
156170

src/semantic-router/pkg/extproc/extproc_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2696,6 +2696,8 @@ var _ = Describe("Caching Functionality", func() {
26962696
BeforeEach(func() {
26972697
cfg = CreateTestConfig()
26982698
cfg.Enabled = true
2699+
// Disable PII detection for caching tests (not needed and avoids model loading issues)
2700+
cfg.InlineModels.Classifier.PIIModel.ModelID = ""
26992701

27002702
var err error
27012703
router, err = CreateTestRouter(cfg)

0 commit comments

Comments
 (0)