69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
"""Abstract base class for vector search providers."""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from typing import Any, TypedDict
|
|
|
|
|
|
class SearchResult(TypedDict):
|
|
"""A single vector search result."""
|
|
|
|
id: str
|
|
distance: float
|
|
content: str
|
|
|
|
|
|
class BaseVectorSearch(ABC):
|
|
"""Abstract base class for a vector search provider.
|
|
|
|
This class defines the standard interface for creating a vector search
|
|
index and running queries against it.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def create_index(
|
|
self, name: str, content_path: str, **kwargs: Any # noqa: ANN401
|
|
) -> None:
|
|
"""Create a new vector search index with the provided content.
|
|
|
|
Args:
|
|
name: The desired name for the new index.
|
|
content_path: Path to the data used to populate the index.
|
|
**kwargs: Additional provider-specific arguments.
|
|
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
def update_index(
|
|
self, index_name: str, content_path: str, **kwargs: Any # noqa: ANN401
|
|
) -> None:
|
|
"""Update an existing vector search index with new content.
|
|
|
|
Args:
|
|
index_name: The name of the index to update.
|
|
content_path: Path to the data used to populate the index.
|
|
**kwargs: Additional provider-specific arguments.
|
|
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
def run_query(
|
|
self,
|
|
deployed_index_id: str,
|
|
query: list[float],
|
|
limit: int,
|
|
) -> list[SearchResult]:
|
|
"""Run a similarity search query against the index.
|
|
|
|
Args:
|
|
deployed_index_id: The ID of the deployed index.
|
|
query: The embedding vector for the search query.
|
|
limit: Maximum number of nearest neighbors to return.
|
|
|
|
Returns:
|
|
A list of matched items with id, distance, and content.
|
|
|
|
"""
|
|
...
|