from pydantic import BaseModel from abc import ABC, abstractmethod from typing import Any, Dict, List, Optional, Union class VectorItem(BaseModel): id: str text: str vector: List[float | int] metadata: Any class GetResult(BaseModel): ids: Optional[List[List[str]]] documents: Optional[List[List[str]]] metadatas: Optional[List[List[Any]]] class SearchResult(GetResult): distances: Optional[List[List[float | int]]] class VectorDBBase(ABC): """ Abstract base class for all vector database backends. Implementations of this class provide methods for collection management, vector insertion, deletion, similarity search, and metadata filtering. Any custom vector database integration must inherit from this class and implement all abstract methods. """ @abstractmethod def has_collection(self, collection_name: str) -> bool: """Check if the collection exists in the vector DB.""" pass @abstractmethod def delete_collection(self, collection_name: str) -> None: """Delete a collection from the vector DB.""" pass @abstractmethod def insert(self, collection_name: str, items: List[VectorItem]) -> None: """Insert a list of vector items into a collection.""" pass @abstractmethod def upsert(self, collection_name: str, items: List[VectorItem]) -> None: """Insert or update vector items in a collection.""" pass @abstractmethod def search( self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int ) -> Optional[SearchResult]: """Search for similar vectors in a collection.""" pass @abstractmethod def query( self, collection_name: str, filter: Dict, limit: Optional[int] = None ) -> Optional[GetResult]: """Query vectors from a collection using metadata filter.""" pass @abstractmethod def get(self, collection_name: str) -> Optional[GetResult]: """Retrieve all vectors from a collection.""" pass @abstractmethod def delete( self, collection_name: str, ids: Optional[List[str]] = None, filter: Optional[Dict] = None, ) -> None: """Delete vectors by ID or filter from a collection.""" pass @abstractmethod def reset(self) -> None: """Reset the vector database by removing all collections or those matching a condition.""" pass