semantic_router.index.postgres.PostgresIndex#
- class semantic_router.index.postgres.PostgresIndex(connection_string: str | None = None, index_prefix: str = 'semantic_router_', index_name: str = 'index', dimensions: int = 1536, metric: Metric = Metric.COSINE, namespace: str | None = '')#
Bases:
BaseIndex
Postgres implementation of Index.
- __init__(connection_string: str | None = None, index_prefix: str = 'semantic_router_', index_name: str = 'index', dimensions: int = 1536, metric: Metric = Metric.COSINE, namespace: str | None = '')#
Initializes the Postgres index with the specified parameters.
- Parameters:
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.
namespace (Optional[str]) – An optional namespace for the index.
Methods
__init__
([connection_string, index_prefix, ...])Initializes the Postgres index with the specified parameters.
add
(embeddings, routes, utterances[, ...])Adds vectors to the index.
Asynchronously get a list of route and utterance objects currently stored in the index.
aquery
(vector[, top_k, route_filter])Search the index for the query_vector and return top_k results.
construct
([_fields_set])Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data.
copy
(*[, include, exclude, update, deep])Duplicate a model, optionally choose which fields to include, exclude and change.
delete
(route_name)Deletes records with the specified route name.
Deletes all records from the Postgres index.
Deletes the entire table for the index.
describe
()Describes the index by returning its type, dimensions, and total vector count.
dict
(*[, include, exclude, by_alias, ...])Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
from_orm
(obj)Gets a list of route objects currently stored in the index.
Gets a list of route and utterance objects currently stored in the index, including additional metadata.
json
(*[, include, exclude, by_alias, ...])Generate a JSON representation of the model, include and exclude arguments as per dict().
parse_file
(path, *[, content_type, ...])parse_obj
(obj)parse_raw
(b, *[, content_type, encoding, ...])query
(vector[, top_k, route_filter])Searches the index for the query vector and returns the top_k results.
schema
([by_alias, ref_template])schema_json
(*[, by_alias, ref_template])Sets up the index by creating the table and vector extension if they do not exist.
update_forward_refs
(**localns)Try to update ForwardRefs on fields based on this Model, globalns and localns.
validate
(value)Attributes
connection_string
index_prefix
index_name
dimensions
metric
namespace
conn
type
index
routes
utterances
init_async_index
- class Config#
Bases:
object
Configuration for the Pydantic BaseModel.
- add(embeddings: List[List[float]], routes: List[str], utterances: List[str], function_schemas: List[Dict[str, Any]] | None = None, metadata_list: List[Dict[str, Any]] = []) None #
Adds vectors to the index.
- Parameters:
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.
- Raises:
ValueError – If the vector embeddings being added do not match the expected dimensions.
TypeError – If the database connection is not established.
- aget_routes()#
Asynchronously get a list of route and utterance objects currently stored in the index. This method should be implemented by subclasses.
- Returns:
A list of tuples, each containing a route name and an associated utterance.
- Return type:
list[tuple]
- Raises:
NotImplementedError – If the method is not implemented by the subclass.
- async aquery(vector: ndarray, top_k: int = 5, route_filter: List[str] | None = None) Tuple[ndarray, List[str]] #
Search the index for the query_vector and return top_k results. This method should be implemented by subclasses.
- classmethod construct(_fields_set: SetStr | None = None, **values: Any) Model #
Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = ‘allow’ was set since it adds all passed values
- copy(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, update: DictStrAny | None = None, deep: bool = False) Model #
Duplicate a model, optionally choose which fields to include, exclude and change.
- Parameters:
include – fields to include in new model
exclude – fields to exclude from new model, as with values this takes precedence over include
update – values to change/add in the new model. Note: the data is not validated before creating the new model: you should trust this data
deep – set to True to make a deep copy of the model
- Returns:
new model instance
- delete(route_name: str) None #
Deletes records with the specified route name.
- Parameters:
route_name (str) – The name of the route to delete records for.
- Raises:
TypeError – If the database connection is not established.
- delete_all()#
Deletes all records from the Postgres index.
- Raises:
TypeError – If the database connection is not established.
- delete_index() None #
Deletes the entire table for the index.
- Raises:
TypeError – If the database connection is not established.
- describe() Dict #
Describes the index by returning its type, dimensions, and total vector count.
- Returns:
A dictionary containing the index’s type, dimensions, and total vector count.
- Return type:
Dict
- Raises:
TypeError – If the database connection is not established.
- dict(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False) DictStrAny #
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
- get_routes() List[Route] #
Gets a list of route objects currently stored in the index.
- Returns:
A list of Route objects.
- Return type:
List[Route]
- get_utterances() List[Utterance] #
Gets a list of route and utterance objects currently stored in the index, including additional metadata.
- Returns:
A list of tuples, each containing route, utterance, function
schema and additional metadata. :rtype: List[Tuple]
- json(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, encoder: Callable[[Any], Any] | None = None, models_as_dict: bool = True, **dumps_kwargs: Any) str #
Generate a JSON representation of the model, include and exclude arguments as per dict().
encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().
- query(vector: ndarray, top_k: int = 5, route_filter: List[str] | None = None) Tuple[ndarray, List[str]] #
Searches the index for the query vector and returns the top_k results.
- Parameters:
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.
- Returns:
A tuple containing the scores and routes of the top_k results.
- Return type:
Tuple[np.ndarray, List[str]]
- Raises:
TypeError – If the database connection is not established.
- 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.
- classmethod update_forward_refs(**localns: Any) None #
Try to update ForwardRefs on fields based on this Model, globalns and localns.