Skip to content
VERASPEC
Repository
VER 1.0 — The Visual Embedding Recordstable

§6 Layer 1 — Canonical Visual Embeddings and Embedding Space Descriptors

Every vector in a Record is bound to an Embedding Space by space_id. A Record MUST contain at least one embedding with role: "canonical_visual" in a space of kind: "visual", computed from the Canonical Buffer and nothing else.

6.1 Space Descriptor Fields

FieldDefinition
space_idGlobally unique, immutable identifier: reverse-DNS + "/" + semver, e.g. org.verstandard.space.openclip-vit-l14-datacomp-xl/1.0.
kindvisual | text | fused.
modelfamily, architecture, checkpoint identifier, and weights_sha256. Weight pinning is mandatory.
dim / dtypeVector dimensionality; fp32 | fp16 | bf16 | int8 | binary.
normalizationl2 | none (whether stored vectors are unit-norm).
metriccosine | dot | l2 — the metric under which distances are meaningful.
preprocessingVisual: exact resize policy, interpolation, antialias flag, crop, mean, std, channel order. Text: tokenizer id + hash, max length, truncation, casing. This is the model-specific half that CPNP deliberately excludes.
referenceURI of a published reference image set and reference vectors, plus a conformance tolerance (§6.2).
provenancePublisher, publication date, license.

6.2 Rules

  • Descriptors are immutable once published. New weights, preprocessing, dtype, or metric ⇒ new space_id. This prevents silent model drift.
  • Reproducibility is defined by tolerance, not bit-exactness: an implementation conforms to a space iff its mean cosine similarity against the published reference vectors meets the declared tolerance (RECOMMENDED ≥ 0.999 for fp32 profiles; quantized profiles declare their own). This absorbs GPU, CUDA, TensorRT, and ONNX runtime nondeterminism honestly instead of pretending it away.
  • Multiple canonical embeddings across different spaces MAY coexist in one Record — this is the sanctioned migration path during model transitions (dual-embed, then retire the old space).
  • Vectors MAY be inline (float array), base64 (dtype-tagged, little-endian), or by reference { uri, sha256, byte_length } for large-vector hygiene.