use std::sync::OnceLock;
pub(crate) static OPENROUTER_CLIENT: OnceLock<crate::embedding_api::OpenRouterClient> =
OnceLock::new();
pub(crate) static OPENROUTER_CHAT_CLIENT: OnceLock<crate::chat_api::OpenRouterChatClient> =
OnceLock::new();
pub(crate) static RUNTIME: OnceLock<tokio::runtime::Runtime> = OnceLock::new();
mod backend;
mod batch;
mod embed_error;
mod fallback;
mod getters;
mod passage;
pub use backend::{
bytes_to_f32, embed_via_backend, embed_via_backend_legacy, embed_via_backend_strict,
embedding_dim, f32_to_bytes, LlmBackendKind,
};
pub use batch::{
chunk_embed_batch_size, effective_permits, embed_entity_texts_cached, entity_embed_batch_size,
EmbedCacheStats, CHUNK_EMBED_BATCH_SIZE, EMBED_BATCH_CALIBRATION_DIM, ENTITY_EMBED_BATCH_SIZE,
};
pub(crate) use embed_error::app_error_preserving_retry_class;
pub use batch::embed_passages_parallel_shared;
pub use fallback::{
classify_embedding_error, embed_with_fallback, try_embed_query_with_deterministic_fallback,
try_embed_query_with_fallback, EmbeddingErrorKind, FallbackReason,
};
pub use getters::{
get_openrouter_chat_client, get_openrouter_embedder, is_openrouter_initialized,
openrouter_chat_client,
};
pub use passage::{
embed_passage_or_skip, embed_passage_with_choice, embed_passage_with_embedding_choice,
should_skip_embedding_on_failure, try_embed_query_with_choice,
try_embed_query_with_embedding_choice,
};
pub(crate) use backend::backend_ready_probe;
pub(crate) use getters::shared_runtime;
#[cfg(test)]
#[path = "../embedder_tests.rs"]
mod tests;
#[cfg(test)]
#[path = "../embedder_fallback_tests.rs"]
mod embed_with_fallback_tests;