use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpenAIEmbedderConfig {
#[serde(default = "default_model")]
pub model: String,
pub api_key: Option<String>,
#[serde(default = "default_embedding_dims")]
pub embedding_dims: usize,
#[serde(default = "default_base_url")]
pub base_url: String,
}
fn default_model() -> String {
"text-embedding-3-small".to_string()
}
fn default_embedding_dims() -> usize {
1536
}
fn default_base_url() -> String {
"https://api.openai.com/v1".to_string()
}
impl Default for OpenAIEmbedderConfig {
fn default() -> Self {
Self {
model: default_model(),
api_key: None,
embedding_dims: default_embedding_dims(),
base_url: default_base_url(),
}
}
}
impl OpenAIEmbedderConfig {
pub fn get_api_key(&self) -> Option<String> {
self.api_key
.clone()
.or_else(|| std::env::var("OPENAI_API_KEY").ok())
}
}