Limitations#
Observable Library 0.1.0 is a deliberately small, headless package. These boundaries are part of the released behavior.
Generation is parameter-only#
generate() enumerates model.named_parameters(). It has no source allowlist and does not generate activation, gradient, or loss observables. Filter the returned list to reduce Runtime work or construct a custom Observable for another source.
Selection supports only all values#
The only supported selector is selector="all". Slice, axis, and semantic selectors are not part of 0.1.0.
Hooks retain the latest value#
HookSource.attach() installs broad hooks on top-level child activations and trainable parameter gradients. It retains the latest captured tensor without checking that it belongs to the current step. Run the matching forward/backward before every observation and call detach() when finished.
Loss is not discovered automatically. Call record_loss(loss, step) before observing a custom source="loss" spec.
Budgeting uses estimates#
The scheduler sums budget_hint["compute_ms"] estimates. It does not measure execution time, learn a cost model, or change a spec’s frequency. A missing custom estimate counts as zero.
Temporal metadata does not execute#
The temporal field contributes to ObservableSpec.id, but Runtime does not automatically call delta, ema, slope, or rolling_std. Apply those functions to explicit histories.
Storage and query are intentionally narrow#
LocalStorage is a convenience ValueSink: SQLite metadata plus NumPy NPZ payloads. query() reads by exact observable id and step only. There is no query by source, reduction, tag, or display label.
No application surface#
Version 0.1.0 has no CLI, Web UI, notebook product, dataset downloader, or general analysis service. Later roadmap ideas are not current package capabilities.