Skip to main content

Encoder contract

The encode hook is not a gap — it is the product boundary. Nimbus does not host DL architectures. Integrators (or thin shortcuts) supply embeddings. Rules:
  • Freeze the trunk before personalizing
  • Feed embeddings, never class logits
  • Personalizer.load requires re-attaching the encoder
  • Optional embedding_dim= validates embedding width

Canonical recipe

Already have features / CSP / Riemann vectors? Skip the trunk:
partial_fit is cumulative (no forgetting / decay). That matches session calibration and short stream budgets. Do not treat unbounded lifetime accumulation as a shipped product guarantee until a forgetting mechanism exists.
Foundation pooling: REVE / EEGPT adapters mean-pool (or flatten) token / patch features to flat (n, d) so LDA/QDA heads can consume them. Spatial/temporal structure is collapsed at the encoder boundary, not inside the Bayesian head.

Optional shortcuts

Named helpers only reduce boilerplate. Architectures stay outside core:
Claim for second trunks: API interchangeability under the same Personalizer / BrainState contract — not a confirmatory accuracy bake-off.

Active learning → personalization

Use CalibrationSession (or suggest_next_trial) to choose labels, then:
Label-free stopping on the head:
See Active Learning.

Next Read

BrainState

Evidence

Overview

API Reference