Summary
ssm-simulators 0.13 ships the choice-only RL presets in ssms/rl/preset.py (2AB_RW_InvTempSoftmax, 3AB_RW_InvTempSoftmax, …), resolvable via ssms.rl.resolve_model. But they are not registered in ssms.config.model_config, which is the only registry ssms.hssm_support consults. Downstream (HSSM) the config layer bridges fine, but the RV/simulator path degrades.
Companion to lnccbrown/HSSM#1052 (this issue covers the ssm-simulators half).
State (0.13.1)
| preset |
ssms.rl.resolve_model |
in model_config |
2AB_RW_InvTempSoftmax |
✅ |
❌ |
2AB_RW_DualAlpha_InvTempSoftmax |
❌ KeyError |
❌ |
3AB_RW_InvTempSoftmax |
✅ |
❌ |
4AB_RW_InvTempSoftmax |
❌ KeyError |
❌ |
The decision-process kernels ARE registered, under different names: inv_temp_softmax_2/3/4.
Behavior today
ssms.hssm_support.get_simulator_fun_internal (hssm_support.py:333-346) handles any name missing from model_config by warning and building a fallback simulator anyway:
You supplied a model '2AB_RW_InvTempSoftmax', which is currently not supported in
the ssm_simulators package. An error will be thrown when sampling from the random
variable or when using any posterior or prior predictive sampling methods.
…with choices silently defaulting to [0, 1, 2] (wrong for a 2AB model). The promised error then surfaces much later and far away (in HSSM: at posterior-predictive time, or as an opaque numba serialization crash — see HSSM#1052 for that half).
Proposed fixes
- Registry bridging (the feature): make the
ssms.rl presets reachable through the hssm_support path — either register them in model_config, or have get_simulator_fun_internal consult ssms.rl.resolve_model before falling back.
- Fail loudly (the robustness): when a name is in neither registry,
get_simulator_fun_internal should raise at build time instead of warn-and-degrade — the current fallback also fabricates a wrong default choices=[0,1,2].
Impact
Four HSSM smoke tests (tests/rl/test_choice_only_rl.py::TestChoiceOnlyRealSSMSSmoke) are skip-guarded on model_name in model_config pending this wiring. Discovered while bumping HSSM's pin to ssm-simulators 0.13.1 (HSSM#967).
🤖 Generated with Claude Code
Summary
ssm-simulators 0.13 ships the choice-only RL presets in
ssms/rl/preset.py(2AB_RW_InvTempSoftmax,3AB_RW_InvTempSoftmax, …), resolvable viassms.rl.resolve_model. But they are not registered inssms.config.model_config, which is the only registryssms.hssm_supportconsults. Downstream (HSSM) the config layer bridges fine, but the RV/simulator path degrades.Companion to lnccbrown/HSSM#1052 (this issue covers the ssm-simulators half).
State (0.13.1)
ssms.rl.resolve_modelmodel_config2AB_RW_InvTempSoftmax2AB_RW_DualAlpha_InvTempSoftmax3AB_RW_InvTempSoftmax4AB_RW_InvTempSoftmaxThe decision-process kernels ARE registered, under different names:
inv_temp_softmax_2/3/4.Behavior today
ssms.hssm_support.get_simulator_fun_internal(hssm_support.py:333-346) handles any name missing frommodel_configby warning and building a fallback simulator anyway:…with
choicessilently defaulting to[0, 1, 2](wrong for a 2AB model). The promised error then surfaces much later and far away (in HSSM: at posterior-predictive time, or as an opaque numba serialization crash — see HSSM#1052 for that half).Proposed fixes
ssms.rlpresets reachable through thehssm_supportpath — either register them inmodel_config, or haveget_simulator_fun_internalconsultssms.rl.resolve_modelbefore falling back.get_simulator_fun_internalshould raise at build time instead of warn-and-degrade — the current fallback also fabricates a wrong defaultchoices=[0,1,2].Impact
Four HSSM smoke tests (
tests/rl/test_choice_only_rl.py::TestChoiceOnlyRealSSMSSmoke) are skip-guarded onmodel_name in model_configpending this wiring. Discovered while bumping HSSM's pin to ssm-simulators 0.13.1 (HSSM#967).🤖 Generated with Claude Code