Skip to main content

sc/embeddings/
mod.rs

1//! Embedding module for semantic search.
2//!
3//! Provides embedding generation using HTTP-based providers:
4//! - **Ollama** (local) - Recommended for development
5//! - **HuggingFace** (cloud) - Requires API token
6//!
7//! # Architecture
8//!
9//! ```text
10//! ┌──────────────────┐
11//! │  CLI Commands    │
12//! │ (status/backfill)│
13//! └────────┬─────────┘
14//!          │
15//!          ▼
16//! ┌─────────────────┐
17//! │    Factory      │  ← Auto-detects available provider
18//! └────────┬────────┘
19//!          │
20//!     ┌────┴────┐
21//!     ▼         ▼
22//! ┌───────┐ ┌───────────┐
23//! │Ollama │ │HuggingFace│
24//! └───────┘ └───────────┘
25//!     │         │
26//!     ▼         ▼
27//!   HTTP      HTTP
28//! localhost  API
29//! ```
30//!
31//! # Configuration
32//!
33//! Settings are loaded from `~/.savecontext/config.json` to maintain
34//! compatibility with the TypeScript MCP server.
35//!
36//! Environment variables take precedence:
37//! - `OLLAMA_ENDPOINT` - Ollama server URL (default: `http://localhost:11434`)
38//! - `OLLAMA_MODEL` - Embedding model (default: `nomic-embed-text`)
39//! - `HF_TOKEN` - HuggingFace API token
40//! - `HF_MODEL` - HuggingFace model (default: `sentence-transformers/all-MiniLM-L6-v2`)
41//! - `SAVECONTEXT_EMBEDDINGS_ENABLED` - Enable/disable embeddings (default: `true`)
42//!
43//! # Usage
44//!
45//! ```rust,ignore
46//! use sc::embeddings::{create_embedding_provider, detect_available_providers};
47//!
48//! // Detect available providers
49//! let detection = detect_available_providers().await;
50//! println!("Available: {:?}", detection.available);
51//!
52//! // Create provider (auto-detects)
53//! if let Some(provider) = create_embedding_provider().await {
54//!     let info = provider.info();
55//!     println!("Using {} ({})", info.name, info.model);
56//!
57//!     let embedding = provider.generate_embedding("Hello world").await?;
58//!     println!("Dimensions: {}", embedding.len());
59//! }
60//! ```
61
62pub mod chunking;
63pub mod config;
64pub mod factory;
65pub mod huggingface;
66pub mod model2vec;
67pub mod ollama;
68pub mod provider;
69pub mod types;
70
71// Re-exports for convenience
72pub use config::{
73    get_embedding_settings, is_embeddings_enabled, resolve_hf_model, resolve_hf_token,
74    resolve_ollama_endpoint, resolve_ollama_model, reset_embedding_settings, save_embedding_settings,
75};
76pub use factory::{
77    create_embedding_provider, create_huggingface_provider, create_ollama_provider,
78    detect_available_providers, ProviderDetection,
79};
80pub use huggingface::HuggingFaceProvider;
81pub use model2vec::Model2VecProvider;
82pub use ollama::OllamaProvider;
83pub use provider::{BoxedProvider, EmbeddingProvider};
84pub use types::{
85    EmbeddingProviderType, EmbeddingResult, EmbeddingSettings, ModelConfig, ProviderInfo,
86    SaveContextConfig, SearchMode, TieredEmbeddingSettings, model2vec_models,
87};
88pub use chunking::{chunk_text, prepare_item_text, ChunkConfig, TextChunk};