diff --git a/src/api/handlers.rs b/src/api/handlers.rs index 8f49e88..cd9b94b 100644 --- a/src/api/handlers.rs +++ b/src/api/handlers.rs @@ -2,7 +2,6 @@ use axum::{extract::State, Json}; use crate::{ api::response::{bad_request, ApiError, ApiResult}, - engine::VectorEngine, models::{ DeleteRequest, InsertRequest, MessageResponse, SearchRequest, SearchResponse, }, diff --git a/src/engine.rs b/src/engine.rs index cfacc0c..95fb00c 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -4,6 +4,7 @@ pub trait VectorEngine { fn insert(&mut self, id: String, vector: Vec); fn search(&self, query: Vec, k: usize) -> Vec; fn delete(&mut self, id: &str); + fn dimension(&self) -> Option; } #[derive(Default)] @@ -15,10 +16,6 @@ impl FlatIndex { pub fn new() -> Self { Self::default() } - - pub fn dimension(&self) -> Option { - self.vectors.first().map(|(_, vector)| vector.len()) - } } impl VectorEngine for FlatIndex { @@ -45,6 +42,10 @@ impl VectorEngine for FlatIndex { fn delete(&mut self, id: &str) { self.vectors.retain(|(stored_id, _)| stored_id != id); } + + fn dimension(&self) -> Option { + self.vectors.first().map(|(_, vector)| vector.len()) + } } fn cosine_similarity(left: &[f32], right: &[f32]) -> f32 { diff --git a/src/state.rs b/src/state.rs index ac3c248..9dd4b03 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,16 +1,16 @@ use std::sync::{Arc, Mutex}; -use crate::engine::FlatIndex; +use crate::engine::{FlatIndex, VectorEngine}; #[derive(Clone)] pub struct AppState { - pub engine: Arc>, + pub engine: Arc>>, } impl AppState { pub fn new() -> Self { Self { - engine: Arc::new(Mutex::new(FlatIndex::new())), + engine: Arc::new(Mutex::new(Box::new(FlatIndex::new()))), } } }