Smart Router V3
v3.6.0Intent-based AI model router that classifies requests and routes to the best provider. Auto-discovers OpenClaw providers and model lists from openclaw.json,...
Like a lobster shell, security has layers — review code before you run it.
Smart Router V3
HTTP server on :8788 that routes OpenAI-compatible chat requests to the optimal provider based on intent classification.
Active Providers
Providers are discovered from ~/.openclaw/openclaw.json at startup.
Rules:
- skips the router's own
smart-routerprovider entry to avoid recursion - resolves
${ENV_VAR}values forbaseUrlandapiKey - includes OpenClaw gateway
openai-codexas a virtual provider when the auth profile exists - recognizes Google Gemini providers from
generativelanguage.googleapis.com - auto-discovers Google models when the provider exists but
modelsis empty inopenclaw.json - normalizes
anthropicor Anthropic-hostedanthropic-messagesproviders onto the local Dario proxy atlocalhost:3456 - starts the Dario user service when Anthropic compatibility is needed and the service is not already running
- supports temporary provider suppression via
SMART_ROUTER_DISABLED_PROVIDERS=name1,name2
GET /health shows:
configured: all discovered providersproviders: reachable providers with model listsdisabled: providers suppressed by env
Routing Logic
The router no longer uses a hardcoded provider whitelist.
Flow:
- detect intent from the latest user message
- estimate complexity from prompt length
- score every reachable provider/model pair from
openclaw.json - for
GENERAL, blend static heuristics with persisted empirical latency stats by provider and model - rank candidates by API type, model-name hints, complexity, and measured latency
- attempt the top
SMART_ROUTER_MAX_PROVIDER_ATTEMPTScandidates in order
Intent scoring is generic, for example:
- code and analysis strongly favor Anthropic/OpenAI-style reasoning models
- general/realtime requests prefer fast direct providers first
- general traffic learns from real successful request latency over time, with light exploration for cold providers/models
- complex prompts boost larger reasoning models and penalize mini/haiku-class models
Intent is detected by keyword matching on the latest user message. Complexity is estimated by word count.
API
GET /health— JSON with reachable providers, configured providers, and disabled providersPOST /v1/chat/completions— OpenAI-compatible; routes automatically
Notes
openai-codexis kept as an optional bridge, not a required first hop.- Anthropic compatibility is provided through Dario, so
anthropiccan stay inopenclaw.jsonwhile routing locally throughdario. - The repo
systemdunit is template-style and expects local machine values in~/.config/smart-router/smart-router.env. - Empirical latency memory is persisted at
~/.cache/smart-router-v3/latency-stats.jsonby default. - When the OpenClaw gateway model-set path is unhealthy, the helper falls back to running without provider/model overrides instead of failing hard.
- If any provider starts misbehaving, suppress it with
SMART_ROUTER_DISABLED_PROVIDERSinstead of editing the router. - GitHub workflows now include CI syntax checks and CodeQL analysis for Python + JavaScript.
- See
BRANCH_PROTECTION.mdfor the exact required-check setup on GitHub.
Install
Install the user service from the repo copy:
mkdir -p ~/.config/systemd/user ~/.config/smart-router
cp systemd/smart-router.service ~/.config/systemd/user/smart-router.service
cp systemd/smart-router.env.example ~/.config/smart-router/smart-router.env
# edit ~/.config/smart-router/smart-router.env for your machine
systemctl --user daemon-reload
systemctl --user enable --now smart-router.service
Notes:
- the repo unit is now env-driven and does not hardcode your home path, Node version, or workspace location
- set
SMART_ROUTER_HOMEto the actual repo path on your machine - optionally set
SMART_ROUTER_PATH_PREFIXif your Python, Node, or Dario bins are not already on PATH
If an Anthropic provider is detected and Dario is not installed yet, install Dario first:
- GitHub: https://github.com/askalf/dario
Service
systemctl --user status smart-router
systemctl --user restart smart-router
journalctl --user -u smart-router -f # live logs
Comments
Loading comments...
