omni_search 0.1.1

A unified Rust SDK for multimodal embedding and similarity search.
Documentation
use std::sync::Arc;

use crate::bundle::ModelInfo;
use crate::config::ModelFamily;
use crate::error::Error;

#[derive(Clone, Debug)]
pub struct Embedding {
    pub model_family: ModelFamily,
    pub model_id: String,
    pub dims: usize,
    values: Arc<[f32]>,
}

impl Embedding {
    pub fn as_slice(&self) -> &[f32] {
        &self.values
    }

    pub(crate) fn from_vec(info: &ModelInfo, values: Vec<f32>) -> Result<Self, Error> {
        if values.len() != info.embedding_dim {
            return Err(Error::DimensionMismatch {
                expected: info.embedding_dim,
                actual: values.len(),
            });
        }
        Ok(Self {
            model_family: info.model_family.clone(),
            model_id: info.model_id.clone(),
            dims: values.len(),
            values: Arc::<[f32]>::from(values),
        })
    }
}

impl AsRef<[f32]> for Embedding {
    fn as_ref(&self) -> &[f32] {
        self.as_slice()
    }
}