Opt-in BaLoRA, LoRA/FiLM trunk arms, and research-only adaptation behind nimbus-bci[train].
Everything on this page is an opt-in research surface. No certified accuracy claims. Production default remains frozen trunk + Bayesian head (for_deployment).
Bayesian LoRA on the trunk with composed trunk+head BALD sampling:
from nimbus_bci import Personalizer, Recipe, MCSamplingConfig# Auto-wraps a raw torch trunk (rank=4 default)p = Personalizer.for_balora(torch_model, ["left", "right"], rank=4)p.fit(X_cal, y_cal)# Escalate trunk adaptation when your protocol calls for it:# p.adapt_trunk(...) # see API / AdaptArm registry# Or Recipe.BALORA_COMPOSED / MCSamplingConfig.balora() presets:# MCSamplingConfig.balora(n_trunk=8, n_head=32)# MCSamplingConfig.balora_fast() / .balora_standard()
mc_samples=(n_trunk, n_head) marginalises over the BaLoRA α-posterior and the Bayesian head.
Hardened in 0.8: entropy ceiling (0.60log2K), epistemic (0.45), max_pseudo_updates=200 cap
fit_tent
Entropy minimization over trunk norm affine params
Unsupervised normalization adaptation
T3APrototypeChannel
Optimization-free recalibration on verified labels
Prototype recalibration
adapt_errp
Soft-negative conjugate update from external ErrP probability
Soft-label error updates
fit_population
Warm-start from pooled LOSO posteriors + prior-predictive gate
Population initialization
Hardened adapt_pseudo Defaults (0.8):adapt_pseudo now enforces an entropy ceiling (0.60⋅log2K bits) and normalized epistemic uncertainty floor (0.45), plus a cumulative session cap of 200 accepted updates. Models without Monte Carlo sampling lack epistemic scores and fail closed by raising AdaptationRefusedError. Enable mc=MCSamplingConfig.head_only(...) or pass epistemic=1.0 if running unguarded experiments.