MetricPgVecOperatorMap Objects

class MetricPgVecOperatorMap(Enum)
Enum to map the metric to PostgreSQL vector operators.

dotproduct

inner product

euclidean

L2 distance

manhattan

L1 distance

parse_vector

def parse_vector(vector_str: Union[str, Any]) -> List[float]
Parses a vector from a string or other representation. Arguments:
  • vector_str (Union[str, Any]): The string or object representation of a vector.
Returns: List[float]: A list of floats representing the vector.

clean_route_name

def clean_route_name(route_name: str) -> str
Cleans and formats the route name by stripping spaces and replacing them with hyphens. Arguments:
  • route_name (str): The original route name.
Returns: str: The cleaned and formatted route name.

PostgresIndexRecord Objects

class PostgresIndexRecord(BaseModel)
Model to represent a record in the Postgres index.

__init__

def __init__(**data) -> None
Initializes a new Postgres index record with given data. Arguments:
  • data (dict): Field values for the record.

to_dict

def to_dict() -> Dict
Converts the record to a dictionary. Returns: Dict: A dictionary representation of the record.

PostgresIndex Objects

class PostgresIndex(BaseIndex)
Postgres implementation of Index.

__init__

def __init__(connection_string: Optional[str] = None,
             index_prefix: str = "semantic_router_",
             index_name: str = "index",
             metric: Metric = Metric.COSINE,
             namespace: Optional[str] = "",
             dimensions: int | None = None,
             init_async_index: bool = False)
Initializes the Postgres index with the specified parameters. Arguments:
  • connection_string (Optional[str]): The connection string for the PostgreSQL database.
  • index_prefix (str): The prefix for the index table name.
  • index_name (str): The name of the index table.
  • dimensions (int): The number of dimensions for the vectors.
  • metric (Metric): The metric used for vector comparisons.
  • Optional[str]0 (Optional[str]): An optional namespace for the index.
  • Optional[str]2 (Optional[str]3): Whether to initialize the index asynchronously.

setup_index

@deprecated(
    "Use _init_index or sync methods such as `auto_sync` (read more "
    "https://docs.aurelio.ai/semantic-router/user-guide/features/sync). "
    "This method will be removed in 0.2.0")
def setup_index() -> None
Sets up the index by creating the table and vector extension if they do not exist. Raises:
  • ValueError: If the existing table’s vector dimensions do not match the expected dimensions.
  • TypeError: If the database connection is not established.

add

def add(embeddings: List[List[float]],
        routes: List[str],
        utterances: List[str],
        function_schemas: Optional[List[Dict[str, Any]]] = None,
        metadata_list: List[Dict[str, Any]] = [],
        **kwargs) -> None
Adds records to the index. Arguments:
  • embeddings (List[List[float]]): A list of vector embeddings to add.
  • routes (List[str]): A list of route names corresponding to the embeddings.
  • utterances (List[Any]): A list of utterances corresponding to the embeddings.
  • function_schemas (Optional[List[Dict[str, Any]]]): A list of function schemas corresponding to the embeddings.
  • metadata_list (List[Dict[str, Any]]): A list of metadata corresponding to the embeddings.
Raises:
  • List[List[float]]0: If the vector embeddings being added do not match the expected dimensions.
  • List[List[float]]1: If the database connection is not established.

aadd

async def aadd(embeddings: List[List[float]],
               routes: List[str],
               utterances: List[str],
               function_schemas: Optional[List[Dict[str, Any]]] = None,
               metadata_list: List[Dict[str, Any]] = [],
               batch_size: int = 100,
               **kwargs) -> None
Asynchronously adds records to the index in batches. Arguments:
  • embeddings: A list of vector embeddings to add.
  • routes: A list of route names corresponding to the embeddings.
  • utterances: A list of utterances corresponding to the embeddings.
  • function_schemas: (Optional) List of function schemas.
  • metadata_list: (Optional) List of metadata dictionaries.
  • batch_size: Number of records per batch insert.
Raises:
  • ValueError: If the vector embeddings don’t match expected dimensions.
  • TypeError: If connection is not an async Postgres connection.

delete

def delete(route_name: str) -> None
Deletes records with the specified route name. Arguments:
  • route_name (str): The name of the route to delete records for.
Raises:
  • TypeError: If the database connection is not established.

adelete

async def adelete(route_name: str) -> list[str]
Asynchronously delete specified route from index if it exists. Returns the IDs of the vectors deleted. Arguments:
  • route_name (str): Name of the route to delete.
Returns: list[str]: List of IDs of the vectors deleted.

describe

def describe() -> IndexConfig
Describes the index by returning its type, dimensions, and total vector count. Returns: IndexConfig: An IndexConfig object containing the index’s type, dimensions, and total vector count.

is_ready

def is_ready() -> bool
Checks if the index is ready to be used. Returns: bool: True if the index is ready, False otherwise.

ais_ready

async def ais_ready() -> bool
Checks if the index is ready to be used. Returns: bool: True if the index is ready, False otherwise.

query

def query(
    vector: np.ndarray,
    top_k: int = 5,
    route_filter: Optional[List[str]] = None,
    sparse_vector: dict[int, float] | SparseEmbedding | None = None
) -> Tuple[np.ndarray, List[str]]
Searches the index for the query vector and returns the top_k results. Arguments:
  • vector (np.ndarray): The query vector.
  • top_k (int): The number of top results to return.
  • route_filter (Optional[List[str]]): Optional list of routes to filter the results by.
  • sparse_vector (dict[int, float] | SparseEmbedding | None): Optional sparse vector to filter the results by.
Raises:
  • TypeError: If the database connection is not established.
Returns: Tuple[np.ndarray, List[str]]: A tuple containing the scores and routes of the top_k results.

aquery

async def aquery(
    vector: np.ndarray,
    top_k: int = 5,
    route_filter: Optional[List[str]] = None,
    sparse_vector: dict[int, float] | SparseEmbedding | None = None
) -> Tuple[np.ndarray, List[str]]
Asynchronously search the index for the query vector and return the top_k results. Arguments:
  • vector (np.ndarray): The query vector to search for.
  • top_k (int, optional): The number of top results to return, defaults to 5.
  • route_filter (Optional[List[str]], optional): A list of route names to filter the search results, defaults to None.
  • sparse_vector (dict[int, float] | SparseEmbedding | None): An optional sparse vector to include in the query.
Raises:
  • TypeError: If the database connection is not established.
Returns: Tuple[np.ndarray, List[str]]: A tuple containing an array of scores and a list of route names.

delete_all

def delete_all()
Deletes all records from the Postgres index. Raises:
  • TypeError: If the database connection is not established.

delete_index

def delete_index() -> None
Deletes the entire table for the index. Raises:
  • TypeError: If the database connection is not established.

adelete_index

async def adelete_index() -> None
Asynchronously delete the entire table for the index. Raises:
  • TypeError: If the async database connection is not established.

aget_routes

async def aget_routes() -> list[tuple]
Asynchronously get a list of route and utterance objects currently stored in the index. Raises:
  • TypeError: If the database connection is not established.
Returns: List[Tuple]: A list of (route_name, utterance) objects.

__len__

def __len__()
Returns the total number of vectors in the index. If the index is not initialized returns 0. Returns: The total number of vectors.

alen

async def alen()
Async version of len. Returns the total number of vectors in the index. Returns: int: The total number of vectors.

close

def close()
Closes the psycopg connection if it exists.

has_connection

def has_connection() -> bool
Returns True if there is an active and valid psycopg connection, otherwise False.