1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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
|