modo/embed/mod.rs
1//! # modo::embed
2//!
3//! Text-to-vector embeddings via LLM provider APIs.
4//!
5//! Provides:
6//!
7//! - [`EmbeddingProvider`] — concrete wrapper for any embedding backend
8//! - [`EmbeddingBackend`] — trait for custom embedding providers
9//! - [`OpenAIEmbedding`] — OpenAI embedding provider
10//! - [`GeminiEmbedding`] — Google Gemini embedding provider
11//! - [`MistralEmbedding`] — Mistral embedding provider
12//! - [`VoyageEmbedding`] — Voyage AI embedding provider
13//! - [`OpenAIConfig`] / [`GeminiConfig`] / [`MistralConfig`] / [`VoyageConfig`] — provider configs
14//! - [`to_f32_blob`] / [`from_f32_blob`] — vector ↔ blob conversion helpers
15//! - [`test::InMemoryBackend`] — in-memory backend for unit tests (`#[cfg(test)]` or `test-helpers`)
16//!
17//! ## Quick start
18//!
19//! ```rust,ignore
20//! use modo::embed::{EmbeddingProvider, OpenAIEmbedding, OpenAIConfig};
21//!
22//! let config = OpenAIConfig {
23//! api_key: "sk-...".into(),
24//! ..Default::default()
25//! };
26//! let client = reqwest::Client::new();
27//! let embedder = EmbeddingProvider::new(
28//! OpenAIEmbedding::new(client, &config)?,
29//! );
30//!
31//! let blob = embedder.embed("hello world").await?;
32//! // Store blob in libsql F32_BLOB column
33//! ```
34
35mod backend;
36mod config;
37mod convert;
38mod gemini;
39mod mistral;
40mod openai;
41mod provider;
42mod voyage;
43
44pub use backend::EmbeddingBackend;
45pub use config::{GeminiConfig, MistralConfig, OpenAIConfig, VoyageConfig};
46pub use convert::{from_f32_blob, to_f32_blob};
47pub use gemini::GeminiEmbedding;
48pub use mistral::MistralEmbedding;
49pub use openai::OpenAIEmbedding;
50pub use provider::EmbeddingProvider;
51pub use voyage::VoyageEmbedding;
52
53/// Test helpers for the embedding module.
54///
55/// Available when running tests or when the `test-helpers` feature is enabled.
56#[cfg_attr(not(any(test, feature = "test-helpers")), allow(dead_code))]
57pub mod test {
58 mod test_helpers;
59 pub use test_helpers::InMemoryBackend;
60}