use super::{HybridEmbedder, TfIdfEmbedder};
use tracing::warn;
#[cfg(feature = "remote-embeddings")]
pub(crate) fn try_remote_neural_embedder(
tfidf_embedder: TfIdfEmbedder,
embeddings_cfg: &crate::config::EmbeddingConfig,
) -> Option<HybridEmbedder> {
if !crate::feature_flags::FeatureFlag::RemoteEmbeddings.is_enabled() {
return None;
}
let resolved = embeddings_cfg.resolved_remote()?;
let remote_cfg = crate::search::onnx::RemoteEmbeddingConfig {
provider: crate::search::onnx::RemoteProvider::Custom {
endpoint: resolved.endpoint,
},
api_key: embeddings_cfg.remote_api_key.clone(),
model: resolved.model,
remote_dimension: resolved.remote_dimension,
doc_template: resolved.doc_template,
query_template: resolved.query_template,
base_url: None,
..crate::search::onnx::RemoteEmbeddingConfig::default()
};
match HybridEmbedder::hybrid_remote(
tfidf_embedder,
remote_cfg,
Some(crate::config::LeIndexConfig::load_cached().neural_weight_f32()),
) {
Ok(hybrid) => Some(hybrid),
Err(e) => {
warn!(
"Failed to create hybrid_remote embedder ({}), falling back to local neural path",
e
);
None
}
}
}