pub struct AnchorSpaceIndex {
config: AnchorSetConfig,
k: usize,
projected_vectors: Vec<Vec<f32>>,
source_model: Vec<u32>,
entity_ids: Vec<u64>,
timestamps: Vec<i64>,
entity_index: BTreeMap<u64, Vec<(i64, u32)>>,
}Expand description
An index operating in anchor-projected space (ℝᴷ).
Stores pre-projected vectors from potentially multiple embedding models. All comparable because they use the same anchor set.
Fields§
§config: AnchorSetConfigAnchor set configuration.
k: usizeNumber of anchors (= dimensionality of projected space).
projected_vectors: Vec<Vec<f32>>Projected vectors: node_id → Vec
source_model: Vec<u32>Source model identifier per node.
entity_ids: Vec<u64>Entity ID per node.
timestamps: Vec<i64>Timestamp per node.
entity_index: BTreeMap<u64, Vec<(i64, u32)>>Entity index: entity_id → sorted vec of (timestamp, node_id).
Implementations§
Source§impl AnchorSpaceIndex
impl AnchorSpaceIndex
Sourcepub fn new(config: AnchorSetConfig, k: usize) -> Self
pub fn new(config: AnchorSetConfig, k: usize) -> Self
Create a new empty anchor space index.
Sourcepub fn insert(
&mut self,
entity_id: u64,
timestamp: i64,
vector: &[f32],
model_anchors: &[&[f32]],
model_id: u32,
) -> u32
pub fn insert( &mut self, entity_id: u64, timestamp: i64, vector: &[f32], model_anchors: &[&[f32]], model_id: u32, ) -> u32
Insert a raw vector, projecting it to anchor space.
model_anchors are the anchor vectors embedded in the SAME model
as the input vector. These may differ from anchors of other models.
Sourcepub fn insert_projected(
&mut self,
entity_id: u64,
timestamp: i64,
projected: Vec<f32>,
model_id: u32,
) -> u32
pub fn insert_projected( &mut self, entity_id: u64, timestamp: i64, projected: Vec<f32>, model_id: u32, ) -> u32
Insert a pre-projected vector (already in ℝᴷ).
Sourcepub fn search(
&self,
query_projected: &[f32],
k: usize,
filter: TemporalFilter,
) -> Vec<(u32, f32)>
pub fn search( &self, query_projected: &[f32], k: usize, filter: TemporalFilter, ) -> Vec<(u32, f32)>
Search in anchor space: flat scan kNN by L2 distance in ℝᴷ.
Cross-model: results may come from ANY source model.
Sourcepub fn trajectory(
&self,
entity_id: u64,
filter: TemporalFilter,
) -> Vec<(i64, Vec<f32>)>
pub fn trajectory( &self, entity_id: u64, filter: TemporalFilter, ) -> Vec<(i64, Vec<f32>)>
Retrieve trajectory in anchor space for an entity.
Sourcepub fn cross_model_trajectory(
&self,
entity_id: u64,
filter: TemporalFilter,
) -> BTreeMap<u32, Vec<(i64, Vec<f32>)>>
pub fn cross_model_trajectory( &self, entity_id: u64, filter: TemporalFilter, ) -> BTreeMap<u32, Vec<(i64, Vec<f32>)>>
Cross-model trajectory: separate trajectories per source model.
Sourcepub fn anchor_drift(
&self,
entity_id: u64,
t1: i64,
t2: i64,
) -> Option<AnchorDriftReport>
pub fn anchor_drift( &self, entity_id: u64, t1: i64, t2: i64, ) -> Option<AnchorDriftReport>
Compute drift in anchor space between two timestamps.
Sourcepub fn n_entities(&self) -> usize
pub fn n_entities(&self) -> usize
Number of unique entities.
Sourcepub fn source_model(&self, node_id: u32) -> u32
pub fn source_model(&self, node_id: u32) -> u32
Get source model for a node.
Sourcepub fn projected_vector(&self, node_id: u32) -> &[f32]
pub fn projected_vector(&self, node_id: u32) -> &[f32]
Get projected vector for a node.
Sourcepub fn config(&self) -> &AnchorSetConfig
pub fn config(&self) -> &AnchorSetConfig
Anchor set config.