This release is a pre-release and may not be stable for production use.
vLLM Semantic Router CLI
vllm-sr configures and runs the local vLLM Semantic Router stack. It can also
validate or migrate config files, deploy the router Helm chart, inspect virtual
models and Recipes, and send test requests.
Full documentation: https://vllm-sr.ai/docs/installation/
Install
pip install vllm-sr
vllm-sr --version
For CLI development:
cd src/vllm-sr
python -m venv .venv
. .venv/bin/activate
pip install -e .
Local serve requires Docker or Podman on Linux, macOS, or WSL2. A native
Windows Python environment can run config and catalog commands, but it cannot
run the local container stack.
Start a local stack
# Start Router, Envoy, Dashboard, and observability.
vllm-sr serve
# Use Podman.
vllm-sr serve --runtime podman
# Check the stack and open the Dashboard.
vllm-sr status
vllm-sr dashboard
The Dashboard is available at http://localhost:8700. The routed
OpenAI-compatible listener uses the first port in config.yaml (8899 in the
reference config).
For local serve, listeners[].address controls the host port publication.
Use 127.0.0.1 or ::1 for host-only access. Envoy listens on the container
bridge interface so both the published port and Dashboard can reach it; this
keeps the host loopback restriction, including after Dashboard config saves.
Standalone config envoy generation retains the configured listener address.
vllm-sr serve starts the routing stack. It does not start the physical LLM
backends referenced by providers.models; those endpoints must already be
running and reachable.
Useful lifecycle commands:
vllm-sr logs router
vllm-sr logs envoy
vllm-sr logs dashboard
vllm-sr stop
Add --minimal to run Router and Envoy without Dashboard or observability. Add
--readonly to keep Dashboard available without config editing.
Test routing
route preview reports which signals, decision, algorithm, and plugins matched without
calling the selected model backend:
vllm-sr route preview --prompt "Explain inflation in plain English."
vllm-sr route preview --prompt "Explain inflation in plain English." --json
vllm-sr route preview \
--model vllm-sr/mom-v1-blend \
--prompt "Summarize this architecture plan." \
--json
Use --messages for an OpenAI-style messages array and --endpoint when the
Router management API is not at http://localhost:8080:
vllm-sr route preview \
--messages '[{"role":"user","content":"Explain inflation."}]' \
--endpoint http://localhost:8080
request chat sends a real one-shot completion through the routed listener. It uses
vllm-sr/auto unless --model is set:
vllm-sr request chat "Hello"
vllm-sr request chat --model my-virtual-model --json "Hello"
vllm-sr request chat --base-url https://gateway.example.com "Hello"
--base-url must point to an OpenAI-compatible routed endpoint, such as an
ingress or port-forwarded gateway. It is not the Router management API used by
route preview and storage vector-stores.
Choose a configuration
The CLI reads canonical v0.3 YAML with
version/listeners/providers/routing/global. Author a file directly, start
from a maintained Recipe, or fork a bundled
virtual model.
vllm-sr config validate --config config.yaml
vllm-sr serve --config config.yaml
Route policy lives in routing.decisions[]. For example, this decision
fragment defines a final static fallback; merge it into a complete config that
declares local-model under providers.models and routing.modelCards:
routing:
decisions:
- name: local-fallback
description: Handle requests that did not match an earlier decision.
priority: 0
rules:
operator: AND
conditions: []
modelRefs:
- model: local-model
algorithm:
type: static
vllm-sr init was removed in v0.3. For older files or supported external
provider configs, use the explicit conversion commands:
vllm-sr config migrate --config old-config.yaml
vllm-sr config import \
--from openclaw \
--source openclaw.json \
--target config.yaml
The current field reference is generated in the
configuration guide.
Focused examples live under config/fragments/.
Use those sources instead of copying plugin or algorithm schemas from this
package README.
Keep credentials out of YAML. Reference environment variables and authorize Recipe-specific variables explicitly:
export PROVIDER_API_KEY=...
vllm-sr serve --config recipe.yaml --recipe-env PROVIDER_API_KEY
Connect Models and build Mixture-of-Models
Run vllm-sr serve, then use Dashboard to connect provider Models, choose a
built-in or custom Recipe, and assign Models to its decisions. Dashboard keeps
provider connection details separate from reusable routing policy and exposes
the published names through /v1/models.
For source-controlled deployments, validate and serve one complete user-owned configuration:
vllm-sr config validate --config my-models.yaml
vllm-sr serve --config my-models.yaml
To evaluate concurrently running baseline and candidate deployments from one
Dashboard, point EVALUATION_DEPLOYMENTS_DIR at the strict, read-only
evaluation-deployments.v1 registry described in the
Evaluation Plane guide,
then use the same vllm-sr serve command. The CLI mounts that directory into
Dashboard only; Router and Envoy do not inherit it. Leaving the variable unset
preserves the current single-runtime behavior.
Deploy to Kubernetes
The Kubernetes target installs or upgrades the Helm release:
vllm-sr serve \
--target k8s \
--profile dev \
--namespace semantic-router \
--config config.yaml
vllm-sr status --target k8s --namespace semantic-router
vllm-sr logs router --target k8s --namespace semantic-router -f
vllm-sr stop --target k8s --namespace semantic-router
Kubernetes requires a complete, non-empty config. The CLI does not merge local Docker defaults or sample routes into it. Credential references are stored in a release-scoped Secret, and literal credentials or credential-bearing URLs are rejected.
--platform amd and --platform nvidia are local-container shortcuts. On
Kubernetes, select GPU images, resources, and device plugins through Helm
values, a deployment profile, or the operator.
See Kubernetes installation for gateway, profile, and production guidance.
Inspect vector stores
storage vector-stores reads vector stores from the Router management API. It
does not create, modify, or delete stores.
vllm-sr storage vector-stores
vllm-sr storage vector-stores --endpoint http://router.example.com:8080
The Router must be running with a vector-store backend enabled. --endpoint
points to the management API, not the routed inference listener.
Local ports and state
Default ports in the reference local stack are:
| Service | Port | Purpose |
|---|---|---|
| Dashboard | 8700 |
Configuration, Playground, and embedded observability |
| Routed inference listener | 8899 |
OpenAI-compatible model requests |
| Router management API | 8080 |
Eval, config, replay, and vector-store APIs |
| Router metrics | 9190 |
Prometheus metrics |
| Jaeger | 16686 |
Trace UI |
| Prometheus | 9090 |
Metrics storage and queries |
Listener and management ports can be changed in YAML. Local Dashboard data is
stored under .vllm-sr/dashboard-data/ and survives stop unless that
workspace directory is removed.
To run independent stacks from multiple worktrees, use a distinct name and port offset on every lifecycle command:
export VLLM_SR_STACK_NAME=lane-b
export VLLM_SR_PORT_OFFSET=200
vllm-sr serve
vllm-sr status
vllm-sr stop
Troubleshooting
route previewandstorage vector-storesuse the Router management API, normally port8080.request chatuses the routed inference listener fromconfig.yaml, normally port8899.- A healthy Router and Envoy do not prove that an external model backend can
generate. Use Dashboard Verify or
chatto test the backend path. - If a lifecycle command reports that the stack is busy, let the active
serveorstopfinish and retry. - Set
NO_COLOR=1for plain CLI output. JSON modes keep stdout free of status messages so it can be consumed by scripts.
Run vllm-sr COMMAND --help for command-specific options. For installation,
security, configuration, and operations, use the
website documentation.
License
Apache 2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vllm_sr-0.3.0.dev20260914152150.tar.gz.
File metadata
- Download URL: vllm_sr-0.3.0.dev20260914152150.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2e9f574d727dadbb259dd3608dc30e8763d507040f3b8e349bcf39e59705e48
|
|
| MD5 |
624ed0d503b938d19364effc63e7a425
|
|
| BLAKE2b-256 |
f91865c1fa2b7fcb5aef6937f292926c83c29ba0e40d6d8243549904267da6f4
|
File details
Details for the file vllm_sr-0.3.0.dev20260914152150-py3-none-any.whl.
File metadata
- Download URL: vllm_sr-0.3.0.dev20260914152150-py3-none-any.whl
- Upload date:
- Size: 868.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3de34f63dedadb065827ac422b0a7aecdc43fa975529727758b39709740e165
|
|
| MD5 |
a0877194ad3c6644747bd27904500561
|
|
| BLAKE2b-256 |
93e2daab4f113d14b747a1fdeb99300dc503080b86915b651346d825e6fea421
|