#[cfg(not(target_family = "wasm"))]
pub(crate) mod cache;
pub(crate) mod docs;
#[cfg(not(target_family = "wasm"))]
mod filter;
#[cfg(not(target_family = "wasm"))]
pub mod index;
#[cfg(not(target_family = "wasm"))]
mod provider;
use revision::{DeserializeRevisioned, SerializeRevisioned, revisioned};
use serde::{Deserialize, Serialize};
use crate::idx::seqdocids::DocId;
use crate::idx::trees::vector::SerializedVector;
use crate::kvs::{KVValue, impl_kv_value_revisioned};
pub(crate) type ElementId = u64;
pub(super) const DISKANN_PENDING_STATE_SHARDS: u16 = 32;
#[revisioned(revision = 1)]
#[derive(Default, Clone, Serialize, Deserialize)]
pub(crate) struct DiskAnnState {
pub(crate) enter_point: Option<ElementId>,
pub(crate) next_element_id: ElementId,
}
impl KVValue for DiskAnnState {
type KeyContext = ();
#[inline]
fn kv_encode_value(&self) -> anyhow::Result<Vec<u8>> {
let mut val = Vec::new();
SerializeRevisioned::serialize_revisioned(self, &mut val)?;
Ok(val)
}
#[inline]
fn kv_decode_value(mut val: &[u8], _: ()) -> anyhow::Result<Self> {
Ok(DeserializeRevisioned::deserialize_revisioned(&mut val)?)
}
}
#[revisioned(revision = 1)]
#[derive(Clone, Serialize, Deserialize)]
pub(crate) struct DiskAnnElement {
pub(crate) vector: SerializedVector,
pub(crate) deleted: bool,
}
impl KVValue for DiskAnnElement {
type KeyContext = ();
#[inline]
fn kv_encode_value(&self) -> anyhow::Result<Vec<u8>> {
let mut val = Vec::new();
SerializeRevisioned::serialize_revisioned(self, &mut val)?;
Ok(val)
}
#[inline]
fn kv_decode_value(mut val: &[u8], _: ()) -> anyhow::Result<Self> {
Ok(DeserializeRevisioned::deserialize_revisioned(&mut val)?)
}
}
#[revisioned(revision = 1)]
#[derive(Default, Clone, Serialize, Deserialize)]
pub(crate) struct DiskAnnNode {
pub(crate) neighbors: Vec<ElementId>,
}
impl KVValue for DiskAnnNode {
type KeyContext = ();
#[inline]
fn kv_encode_value(&self) -> anyhow::Result<Vec<u8>> {
let mut val = Vec::new();
SerializeRevisioned::serialize_revisioned(self, &mut val)?;
Ok(val)
}
#[inline]
fn kv_decode_value(mut val: &[u8], _: ()) -> anyhow::Result<Self> {
Ok(DeserializeRevisioned::deserialize_revisioned(&mut val)?)
}
}
#[revisioned(revision = 1)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub(crate) enum DiskAnnPendingStateKind {
Empty,
MaybeEmpty,
NonEmpty,
}
#[revisioned(revision = 1)]
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub(crate) struct DiskAnnPendingState {
pub(crate) kind: DiskAnnPendingStateKind,
pub(crate) generation: u64,
}
impl_kv_value_revisioned!(DiskAnnPendingState);
#[revisioned(revision = 1)]
pub(crate) struct DiskAnnRecordPendingUpdate {
pub(crate) doc_id: Option<DocId>,
pub(crate) old_vectors: Vec<SerializedVector>,
pub(crate) new_vectors: Vec<SerializedVector>,
}
impl_kv_value_revisioned!(DiskAnnRecordPendingUpdate);