neomemx 0.1.2

A high-performance memory library for AI agents with semantic search
Documentation
//! Jina AI embedder configuration

use serde::{Deserialize, Serialize};

/// Configuration for Jina AI embeddings
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JinaEmbedderConfig {
    /// Model to use
    #[serde(default = "default_model")]
    pub model: String,

    /// Jina API key
    pub api_key: Option<String>,

    /// Embedding dimensions
    #[serde(default = "default_embedding_dims")]
    pub embedding_dims: usize,

    /// Base URL for Jina API
    #[serde(default = "default_base_url")]
    pub base_url: String,
}

fn default_model() -> String {
    "jina-embeddings-v2-base-en".to_string()
}

fn default_embedding_dims() -> usize {
    768
}

fn default_base_url() -> String {
    "https://api.jina.ai/v1".to_string()
}

impl Default for JinaEmbedderConfig {
    fn default() -> Self {
        Self {
            model: default_model(),
            api_key: None,
            embedding_dims: default_embedding_dims(),
            base_url: default_base_url(),
        }
    }
}

impl JinaEmbedderConfig {
    /// Create a new config with a specific model
    pub fn with_model(model: impl Into<String>) -> Self {
        Self {
            model: model.into(),
            ..Default::default()
        }
    }

    /// Get the API key from config or environment
    pub fn get_api_key(&self) -> Option<String> {
        self.api_key
            .clone()
            .or_else(|| std::env::var("JINA_API_KEY").ok())
    }
}