Hsv struct emitted by the Synheart Runtime’s inference engine.
Pipeline placement
Hsv is what the Synheart Runtime emits per inference head. Flux consumes InferenceOutput (or &[Hsv]) and produces an HSI payload via HsiBuilder::build_from_output(...).
The seven canonical heads
HsvType enum (all caps on the wire, snake_case in JSON):
The inference engine can be configured to enable a subset; default is all six core heads + MotionState.
Hsv struct
HSV invariants
Hsv::validate() enforces:
confidence ∈ [0, 1].- Every scalar value in
value(whetherScalaror each entry ofMultiscalar) is in[0, 1]. window.end_ms > window.start_ms.
focus where higher means more focus, it cannot flip semantics.
Tier-capped confidence
The inference engine capsconfidence by signal fidelity tier so proxy signals never over-report certainty:
The Tier-4 ONNX guard short-circuits Emotion/Focus/Capacity to rulepack inference when the window carries fewer than 5 HR samples — no probabilistic inference on single-snapshot signals.
The per-modality
TierBundle is the canonical 1.3 carrier; the source_tier field on Hsv mirrors its physiological entry for convenience.
64D Johnson-Lindenstrauss embedding
InferenceOutput.embedding carries a 64-dimensional, L2-normalized, deterministic, non-invertible projection of the HSVs:
- Always 64 dims.
- Always L2-normalized to unit norm.
- Deterministic — identical HSVs produce byte-identical vectors.
- Privacy-preserving — Johnson-Lindenstrauss random projection is non-invertible: you cannot reconstruct the underlying HSVs from the embedding.
HsiBuilder::build_from_output(InferenceOutput). The fallback path HsiBuilder::build(&[Hsv]) recomputes the embedding from HSVs — same result, just an extra projection step.
When the embedding reaches the HSI payload, capability level + HSI version control whether it appears in the output.
InferenceOutput
HSV → HSI mapping (Flux)
HsiBuilder (in the flux engine component):
- Takes
&[Hsv]plus the embedding vector + optional integrity tag. - Maps each HSV onto an HSI axis reading via
flux::export::map_axes(hsvs, window_ids, default_source_ids). - Writes
evidence_source_idsfromhsv.providers(or the builder’s defaults when providers is empty). - Forwards
breakdownentries as one HSIaxis_readingper component. - Forwards
notestoaxis_reading.notes. - Carries the 64D embedding into
embeddings[]if capability/policy permits. - Stamps
source_tierandtiersinto the HSI envelope. - Returns a validated
HsiPayload.
Why HSV exists alongside HSI
Flux is the boundary that converts the in-process typed shape into the wire shape. Producers that don’t run the Synheart Runtime can still emit HSI directly; SDK consumers never see HSV — they only ever see HSI 1.3 JSON.
What the Synheart Core SDK exposes
The SDK does not exposeHsv directly to host code (Dart/Kotlin/Swift). It exposes:
- The HSI JSON via
Synheart.onHSIUpdate— what flux emitted. - Typed
HSIState(axes, modalities, tiers) viaSynheart.onStateUpdate— parsed from the HSI JSON; see HSI in Synheart Core.
Hsv access integrate at the runtime / engine level — typically only research-tier integrations.
Related
- HSI in Synheart Core — the wire contract HSV is packed into.
- Architecture — full pipeline diagram.
- HSI overview — canonical HSI spec.