MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / search_embeddings

Method search_embeddings

atomic-core/src/pristine/txn/read.rs:1173–1224  ·  view source on GitHub ↗
(
        &self,
        query_vector: &[f32],
        top_k: usize,
    )

Source from the content-addressed store, hash-verified

1171 }
1172
1173 fn search_embeddings(
1174 &self,
1175 query_vector: &[f32],
1176 top_k: usize,
1177 ) -> PristineResult<Vec<SearchResult>> {
1178 let table = match self.txn.open_table(EMBEDDINGS) {
1179 Ok(table) => table,
1180 Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()),
1181 Err(e) => return Err(PristineError::from(e)),
1182 };
1183
1184 let mut scored: Vec<SearchResult> = Vec::new();
1185
1186 for item in table.iter()? {
1187 let (key_guard, value_guard) = item?;
1188 let key_str = key_guard.value();
1189
1190 let (path, chunk_idx) = match decode_embedding_key(key_str) {
1191 Some(decoded) => decoded,
1192 None => continue,
1193 };
1194
1195 let bytes = value_guard.value();
1196 let record: EmbeddingRecord =
1197 postcard::from_bytes(bytes).map_err(|e| PristineError::Serialization {
1198 message: format!(
1199 "failed to deserialize EmbeddingRecord at '{}': {}",
1200 key_str, e
1201 ),
1202 })?;
1203
1204 let score = cosine_similarity(query_vector, &record.vector);
1205
1206 scored.push(SearchResult {
1207 path: path.to_string(),
1208 chunk_idx,
1209 score,
1210 preview: record.preview,
1211 });
1212 }
1213
1214 // Sort by descending score
1215 scored.sort_by(|a, b| {
1216 b.score
1217 .partial_cmp(&a.score)
1218 .unwrap_or(std::cmp::Ordering::Equal)
1219 });
1220
1221 // Return top-k
1222 scored.truncate(top_k);
1223 Ok(scored)
1224 }
1225}
1226
1227// CrdtTxnT (read accessors) implementation for ReadTxn.

Callers 1

vault_searchMethod · 0.45

Calls 6

decode_embedding_keyFunction · 0.85
partial_cmpMethod · 0.80
truncateMethod · 0.80
cosine_similarityFunction · 0.70
iterMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected