omni_search 0.2.5

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

use thiserror::Error;

#[derive(Error, Debug)]
#[non_exhaustive]
pub enum Error {
    #[error("io error: {0}")]
    Io(#[from] std::io::Error),

    #[error("invalid config: {message}")]
    InvalidConfig { message: String },

    #[error("invalid bundle: {message}")]
    InvalidBundle { message: String },

    #[error("unsupported model family: {family}")]
    UnsupportedModelFamily { family: String },

    #[error("tokenizer error: {message}")]
    Tokenizer { message: String },

    #[error("image preprocess error: {message}")]
    ImagePreprocess { message: String },

    #[error("onnx runtime error: {message}")]
    Ort { message: String },

    #[error("dimension mismatch: expected {expected}, got {actual}")]
    DimensionMismatch { expected: usize, actual: usize },

    #[error("embedding model mismatch: left={left_model_id}, right={right_model_id}")]
    EmbeddingModelMismatch {
        left_model_id: String,
        right_model_id: String,
    },

    #[error("feature not implemented yet: {feature}")]
    FeatureNotImplemented { feature: String },
}

impl Error {
    pub(crate) fn invalid_config(message: impl Into<String>) -> Self {
        Self::InvalidConfig {
            message: message.into(),
        }
    }

    pub(crate) fn invalid_bundle(message: impl Into<String>) -> Self {
        Self::InvalidBundle {
            message: message.into(),
        }
    }

    pub(crate) fn tokenizer(message: impl Into<String>) -> Self {
        Self::Tokenizer {
            message: message.into(),
        }
    }

    pub(crate) fn image_preprocess(message: impl Into<String>) -> Self {
        Self::ImagePreprocess {
            message: message.into(),
        }
    }

    pub(crate) fn ort(message: impl Into<String>) -> Self {
        Self::Ort {
            message: message.into(),
        }
    }

    pub(crate) fn from_tokenizer(error: impl Display) -> Self {
        Self::tokenizer(error.to_string())
    }

    pub(crate) fn from_ort(error: impl Display) -> Self {
        Self::ort(error.to_string())
    }
}