--- linkTitle: Semantic router title: Semantic Router url: '/develop/ai/redisvl/0.9.0/api/router/' --- ## Semantic Router ### `class SemanticRouter(name, routes, vectorizer=None, routing_config=None, redis_client=None, redis_url='redis://localhost:6379', overwrite=False, connection_kwargs={})` Semantic Router for managing and querying route vectors. Initialize the SemanticRouter. * **Parameters:** * **name** (*str*) – The name of the semantic router. * **routes** (*List* *[*[Route](#route) *]*) – List of Route objects. * **vectorizer** (*BaseVectorizer* *,* *optional*) – The vectorizer used to embed route references. Defaults to default HFTextVectorizer. * **routing_config** ([RoutingConfig](#routingconfig) *,* *optional*) – Configuration for routing behavior. Defaults to the default RoutingConfig. * **redis_client** (*Optional* *[* *SyncRedisClient* *]* *,* *optional*) – Redis client for connection. Defaults to None. * **redis_url** (*str* *,* *optional*) – The redis url. Defaults to redis://localhost:6379. * **overwrite** (*bool* *,* *optional*) – Whether to overwrite existing index. Defaults to False. * **connection_kwargs** (*Dict* *[* *str* *,* *Any* *]*) – The connection arguments for the redis client. Defaults to empty {}. #### `add_route_references(route_name, references)` Add a reference(s) to an existing route. * **Parameters:** * **router_name** (*str*) – The name of the router. * **references** (*Union* *[* *str* *,* *List* *[* *str* *]* *]*) – The reference or list of references to add. * **route_name** (*str*) * **Returns:** The list of added references keys. * **Return type:** List[str] #### `clear()` Flush all routes from the semantic router index. * **Return type:** None #### `delete()` Delete the semantic router index. * **Return type:** None #### `delete_route_references(route_name='', reference_ids=[], keys=[])` Get references for an existing semantic router route. * **Parameters:** * **Optional** (*keys*) – The name of the router. * **Optional** – The reference or list of references to delete. * **Optional** – List of fully qualified keys (prefix:router:reference_id) to delete. * **route_name** (*str*) * **reference_ids** (*List* *[* *str* *]*) * **keys** (*List* *[* *str* *]*) * **Returns:** Number of objects deleted * **Return type:** int #### `classmethod from_dict(data, **kwargs)` Create a SemanticRouter from a dictionary. * **Parameters:** **data** (*Dict* *[* *str* *,* *Any* *]*) – The dictionary containing the semantic router data. * **Returns:** The semantic router instance. * **Return type:** [SemanticRouter](#semanticrouter) * **Raises:** **ValueError** – If required data is missing or invalid. ```python from redisvl.extensions.router import SemanticRouter router_data = { "name": "example_router", "routes": [{"name": "route1", "references": ["ref1"], "distance_threshold": 0.5}], "vectorizer": {"type": "openai", "model": "text-embedding-ada-002"}, } router = SemanticRouter.from_dict(router_data) ``` #### `classmethod from_existing(name, redis_client=None, redis_url='redis://localhost:6379', **kwargs)` Return SemanticRouter instance from existing index. * **Parameters:** * **name** (*str*) * **redis_client** (*Redis* *|* *RedisCluster* *|* *None*) * **redis_url** (*str*) * **Return type:** [SemanticRouter](#semanticrouter) #### `classmethod from_yaml(file_path, **kwargs)` Create a SemanticRouter from a YAML file. * **Parameters:** **file_path** (*str*) – The path to the YAML file. * **Returns:** The semantic router instance. * **Return type:** [SemanticRouter](#semanticrouter) * **Raises:** * **ValueError** – If the file path is invalid. * **FileNotFoundError** – If the file does not exist. ```python from redisvl.extensions.router import SemanticRouter router = SemanticRouter.from_yaml("router.yaml", redis_url="redis://localhost:6379") ``` #### `get(route_name)` Get a route by its name. * **Parameters:** **route_name** (*str*) – Name of the route. * **Returns:** The selected Route object or None if not found. * **Return type:** Optional[[Route](#route)] #### `get_route_references(route_name='', reference_ids=[], keys=[])` Get references for an existing route route. * **Parameters:** * **router_name** (*str*) – The name of the router. * **references** (*Union* *[* *str* *,* *List* *[* *str* *]* *]*) – The reference or list of references to add. * **route_name** (*str*) * **reference_ids** (*List* *[* *str* *]*) * **keys** (*List* *[* *str* *]*) * **Returns:** Reference objects stored * **Return type:** List[Dict[str, Any]]] #### `model_post_init(context, /)` This function is meant to behave like a BaseModel method to initialise private attributes. It takes context as an argument since that’s what pydantic-core passes when calling it. * **Parameters:** * **self** (*BaseModel*) – The BaseModel instance. * **context** (*Any*) – The context. * **Return type:** None #### `remove_route(route_name)` Remove a route and all references from the semantic router. * **Parameters:** **route_name** (*str*) – Name of the route to remove. * **Return type:** None #### `route_many(statement=None, vector=None, max_k=None, distance_threshold=None, aggregation_method=None)` Query the semantic router with a given statement or vector for multiple matches. * **Parameters:** * **statement** (*Optional* *[* *str* *]*) – The input statement to be queried. * **vector** (*Optional* *[* *List* *[* *float* *]* *]*) – The input vector to be queried. * **max_k** (*Optional* *[* *int* *]*) – The maximum number of top matches to return. * **distance_threshold** (*Optional* *[* *float* *]*) – The threshold for semantic distance. * **aggregation_method** (*Optional* *[*[DistanceAggregationMethod](#distanceaggregationmethod) *]*) – The aggregation method used for vector distances. * **Returns:** The matching routes and their details. * **Return type:** List[[RouteMatch](#routematch)] #### `to_dict()` Convert the SemanticRouter instance to a dictionary. * **Returns:** The dictionary representation of the SemanticRouter. * **Return type:** Dict[str, Any] ```python from redisvl.extensions.router import SemanticRouter router = SemanticRouter(name="example_router", routes=[], redis_url="redis://localhost:6379") router_dict = router.to_dict() ``` #### `to_yaml(file_path, overwrite=True)` Write the semantic router to a YAML file. * **Parameters:** * **file_path** (*str*) – The path to the YAML file. * **overwrite** (*bool*) – Whether to overwrite the file if it already exists. * **Raises:** **FileExistsError** – If the file already exists and overwrite is False. * **Return type:** None ```python from redisvl.extensions.router import SemanticRouter router = SemanticRouter( name="example_router", routes=[], redis_url="redis://localhost:6379" ) router.to_yaml("router.yaml") ``` #### `update_route_thresholds(route_thresholds)` Update the distance thresholds for each route. * **Parameters:** **route_thresholds** (*Dict* *[* *str* *,* *float* *]*) – Dictionary of route names and their distance thresholds. #### `update_routing_config(routing_config)` Update the routing configuration. * **Parameters:** **routing_config** ([RoutingConfig](#routingconfig)) – The new routing configuration. #### `model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}` Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. #### `name: str` The name of the semantic router. #### `property route_names: List[str]` Get the list of route names. * **Returns:** List of route names. * **Return type:** List[str] #### `property route_thresholds: Dict[str, float | None]` Get the distance thresholds for each route. * **Returns:** Dictionary of route names and their distance thresholds. * **Return type:** Dict[str, float] #### `routes: `List[[Route](#route)] List of Route objects. #### `routing_config: `[RoutingConfig](#routingconfig) Configuration for routing behavior. #### `vectorizer: BaseVectorizer` The vectorizer used to embed route references. ## Routing Config ### `class RoutingConfig(*, max_k=1, aggregation_method=DistanceAggregationMethod.avg)` Configuration for routing behavior. Create a new model by parsing and validating input data from keyword arguments. Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model. self is explicitly positional-only to allow self as a field name. * **Parameters:** * **max_k** (*Annotated* *[* *int* *,* *FieldInfo* *(* *annotation=NoneType* *,* *required=True* *,* *metadata=* *[* *Strict* *(* *strict=True* *)* *,* *Gt* *(* *gt=0* *)* *]* *)* *]*) * **aggregation_method** ([DistanceAggregationMethod](#distanceaggregationmethod)) #### `max_k: Annotated[int, FieldInfo(annotation=NoneType, required=True, metadata=[Strict(strict=True), Gt(gt=0)])]` Aggregation method to use to classify queries. #### `model_config: ClassVar[ConfigDict] = {'extra': 'ignore'}` Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. ## Route ### `class Route(*, name, references, metadata={}, distance_threshold=0.5)` Model representing a routing path with associated metadata and thresholds. Create a new model by parsing and validating input data from keyword arguments. Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model. self is explicitly positional-only to allow self as a field name. * **Parameters:** * **name** (*str*) * **references** (*List* *[* *str* *]*) * **metadata** (*Dict* *[* *str* *,* *Any* *]*) * **distance_threshold** (*Annotated* *[* *float* *,* *FieldInfo* *(* *annotation=NoneType* *,* *required=True* *,* *metadata=* *[* *Strict* *(* *strict=True* *)* *,* *Gt* *(* *gt=0* *)* *,* *Le* *(* *le=2* *)* *]* *)* *]*) #### `distance_threshold: Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Strict(strict=True), Gt(gt=0), Le(le=2)])]` Distance threshold for matching the route. #### `metadata: Dict[str, Any]` Metadata associated with the route. #### `model_config: ClassVar[ConfigDict] = {}` Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. #### `name: str` The name of the route. #### `references: List[str]` List of reference phrases for the route. ## Route Match ### `class RouteMatch(*, name=None, distance=None)` Model representing a matched route with distance information. Create a new model by parsing and validating input data from keyword arguments. Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model. self is explicitly positional-only to allow self as a field name. * **Parameters:** * **name** (*str* *|* *None*) * **distance** (*float* *|* *None*) #### `distance: float | None` The vector distance between the statement and the matched route. #### `model_config: ClassVar[ConfigDict] = {}` Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. #### `name: str | None` The matched route name. ## Distance Aggregation Method ### `class DistanceAggregationMethod(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)` Enumeration for distance aggregation methods. #### `avg = 'avg'` Compute the average of the vector distances. #### `min = 'min'` Compute the minimum of the vector distances. #### `sum = 'sum'` Compute the sum of the vector distances.