feat: support entrypoints and multiple routing recipes
#2,331 opened on Jul 5, 2026
Repository metrics
- Stars
- (4,293 stars)
- PR merge metrics
- (PR metrics pending)
Description
Summary
Support multiple routing recipes and external entrypoints so different virtual model names can select different routing profiles without duplicating global system configuration.
Parent roadmap: #2287 Child issue: #2354 Related: #2326, #2330, #2333, #2342
Motivation
The current config has a single inline IntelligentRouting surface and compatibility fields such as auto_model_name / auto_model_names. That forces one working routing profile for aliases like vllm-sr/auto, and makes algorithm virtual slugs harder to reason about. H2 needs multiple recipes mapped from entrypoints while preserving the core abstraction: signals, projections, decisions, strategy/model_selection.
Proposed config direction
Keep shared global/provider/system config outside routing, then let entrypoints select a recipe:
entrypoints:
- model_names: ["vllm-sr/auto", "auto", "MoM"]
recipe: default
- model_names: ["vllm-sr/privacy"]
recipe: privacy
recipes:
- name: default
routing:
signals: []
projections: {}
decisions: []
strategy: priority
model_selection: {}
routing keeps the existing profile shape. The new layer above routing maps virtual model names to named recipes.
Scope
Define and implement:
entrypointsoutsiderouting;- multiple
recipes, each with one routing profile; - compatibility normalization for old auto-model aliases and algorithm virtual slugs through #2354;
- validation for duplicate/ambiguous entrypoint mappings;
- config dump/management API behavior through #2326;
- CLI/dashboard/operator/doc updates.
Non-goals
- Do not move global signal registry/system signal configuration into a recipe.
- Do not make recipes own provider definitions or global model assets.
- Do not break existing single-routing-profile configs without a migration path.
Acceptance criteria
- Different virtual model names can select different recipes.
- Existing
vllm-sr/autoandautobehavior is preserved through compatibility normalization. routing.signals,routing.projections,routing.decisions,routing.strategy, androuting.model_selectionremain the recipe-level abstraction.- Config validation detects duplicate entrypoints and unknown recipe references.
- Docs and examples show default, privacy, and algorithm-entrypoint recipes.
Validation
make agent-report ENV=cpu CHANGED_FILES="src/semantic-router/pkg/config src/semantic-router/pkg/extproc src/semantic-router/pkg/dsl src/vllm-sr/cli dashboard deploy/operator deploy/recipes website/docs"
make agent-lint CHANGED_FILES="src/semantic-router/pkg/config src/semantic-router/pkg/extproc src/semantic-router/pkg/dsl src/vllm-sr/cli dashboard deploy/operator deploy/recipes website/docs"
make agent-ci-gate CHANGED_FILES="src/semantic-router/pkg/config src/semantic-router/pkg/extproc src/semantic-router/pkg/dsl src/vllm-sr/cli dashboard deploy/operator deploy/recipes website/docs"