| Crates.io | lumosai-vector-core |
| lib.rs | lumosai-vector-core |
| version | 0.1.4 |
| created_at | 2025-06-09 08:52:33.226756+00 |
| updated_at | 2025-06-14 13:43:28.757791+00 |
| description | Core abstractions and traits for Lumosai vector storage system |
| homepage | https://lumosai.dev |
| repository | https://github.com/louloulin/lumos.ai.git |
| max_upload_size | |
| id | 1705682 |
| size | 93,320 |
Core abstractions and traits for the LumosAI vector storage system. This crate provides the foundational types, traits, and utilities that all vector database implementations in the LumosAI ecosystem build upon.
VectorStorageThe main trait that all vector database implementations must implement:
use lumosai_vector_core::{VectorStorage, VectorData, SearchRequest};
#[async_trait]
pub trait VectorStorage: Send + Sync {
async fn insert(&self, vectors: Vec<VectorData>) -> Result<Vec<String>>;
async fn search(&self, request: SearchRequest) -> Result<SearchResponse>;
async fn delete(&self, ids: Vec<String>) -> Result<()>;
async fn get(&self, ids: Vec<String>) -> Result<Vec<Option<VectorData>>>;
}
EmbeddingProviderFor embedding generation:
use lumosai_vector_core::EmbeddingProvider;
#[async_trait]
pub trait EmbeddingProvider: Send + Sync {
async fn embed_texts(&self, texts: Vec<String>) -> Result<Vec<Vec<f32>>>;
async fn embed_query(&self, query: String) -> Result<Vec<f32>>;
}
VectorDataRepresents a vector with its metadata:
use lumosai_vector_core::VectorData;
let vector = VectorData {
id: "doc_1".to_string(),
vector: vec![0.1, 0.2, 0.3, 0.4],
metadata: Some(json!({
"title": "Document Title",
"content": "Document content..."
})),
};
SearchRequestConfiguration for vector similarity search:
use lumosai_vector_core::{SearchRequest, SimilarityMetric};
let request = SearchRequest {
vector: vec![0.1, 0.2, 0.3, 0.4],
limit: 10,
similarity_threshold: Some(0.8),
metric: SimilarityMetric::Cosine,
filter: None,
};
The crate provides flexible configuration options:
use lumosai_vector_core::{VectorConfig, SimilarityMetric};
let config = VectorConfig {
dimension: 384,
metric: SimilarityMetric::Cosine,
index_type: "HNSW".to_string(),
parameters: json!({
"ef_construction": 200,
"m": 16
}),
};
Comprehensive error types for robust error handling:
use lumosai_vector_core::VectorError;
match storage.insert(vectors).await {
Ok(ids) => println!("Inserted vectors with IDs: {:?}", ids),
Err(VectorError::ConnectionError(msg)) => {
eprintln!("Connection failed: {}", msg);
}
Err(VectorError::ValidationError(msg)) => {
eprintln!("Validation failed: {}", msg);
}
Err(err) => eprintln!("Other error: {}", err),
}
Built-in performance metrics:
use lumosai_vector_core::PerformanceMetrics;
let metrics = storage.get_metrics().await?;
println!("Average search latency: {}ms", metrics.avg_search_latency_ms);
println!("Total operations: {}", metrics.total_operations);
This crate is designed to be used with specific vector database implementations:
lumosai-vector-lancedb - LanceDB implementationlumosai-vector-qdrant - Qdrant implementationlumosai-vector-weaviate - Weaviate implementationlumosai-vector-milvus - Milvus implementationlumosai-vector-postgres - PostgreSQL with pgvectoruse lumosai_vector_core::{VectorStorage, VectorData, SearchRequest};
async fn example_usage<T: VectorStorage>(storage: T) -> Result<(), Box<dyn std::error::Error>> {
// Insert vectors
let vectors = vec![
VectorData {
id: "1".to_string(),
vector: vec![0.1, 0.2, 0.3],
metadata: None,
}
];
let ids = storage.insert(vectors).await?;
println!("Inserted: {:?}", ids);
// Search for similar vectors
let request = SearchRequest {
vector: vec![0.1, 0.2, 0.3],
limit: 5,
similarity_threshold: Some(0.8),
..Default::default()
};
let results = storage.search(request).await?;
println!("Found {} similar vectors", results.results.len());
Ok(())
}
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.