use async_trait::async_trait;
use crate::types::{Result, ScoredSpan, Span};
#[derive(Debug, Clone)]
pub struct VectorSearchResult {
pub span: Span,
pub score: f32,
}
impl From<VectorSearchResult> for ScoredSpan {
fn from(r: VectorSearchResult) -> Self {
ScoredSpan {
span: r.span,
score: r.score,
}
}
}
impl From<ScoredSpan> for VectorSearchResult {
fn from(s: ScoredSpan) -> Self {
VectorSearchResult {
span: s.span,
score: s.score,
}
}
}
#[async_trait]
pub trait VectorSearchProvider: Send + Sync {
async fn search(&self, query_embedding: &[f32], k: usize) -> Result<Vec<VectorSearchResult>>;
fn len(&self) -> usize;
fn is_empty(&self) -> bool {
self.len() == 0
}
fn dimension(&self) -> usize;
}