semantic_router.index.postgres
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) -> strCleans 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) -> NoneInitializes a new Postgres index record with given data.
Arguments:
data(dict): Field values for the record.
to_dict
def to_dict() -> DictConverts 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() -> NoneSets 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) -> NoneAdds 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) -> NoneAsynchronously 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) -> NoneDeletes 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() -> IndexConfigDescribes 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() -> boolChecks if the index is ready to be used.
Returns:
bool: True if the index is ready, False otherwise.
ais_ready
async def ais_ready() -> boolChecks 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() -> NoneDeletes the entire table for the index.
Raises:
TypeError: If the database connection is not established.
adelete_index
async def adelete_index() -> NoneAsynchronously 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() -> boolReturns True if there is an active and valid psycopg connection, otherwise False.