Skip to content
OpenSmartRoute

In-house routing

OpenSmartRoute vs Building it yourself

The first if-statement takes a week. Policy, learning, drift detection, audit, explainability and the maintenance after every model release take a year. OpenSmartRoute is Apache-2.0 with zero dependencies, so you build on it rather than instead of it.

Build on it, not instead of it.

Choose Building it yourself when

  • One model, one app, nobody asks why

Choose OpenSmartRoute when

  • Anyone asks why a request went where it went
  • Compliance needs region, boundary or PII enforcement with evidence
  • The catalogue changes more than once a quarter
  • You want savings you can show finance

Capability by capability

Our reading of public documentation; corrections welcome via GitHub issues.

CapabilityOpenSmartRouteBuilding it yourself
Routes to LLMs Yes Yes
Routes to agents, skills, tools, workflows and humansUsually a growing if/else per app Yes Partial
Hard policy before scoring (region, data boundary, PII, tenant, cost)Ad hoc checks; no rejection trace Yes Partial
Per-request trace with ranked candidates and rejections Yes No
Learns from your outcomes (per target, per tenant) Yes No
Multi-step plans (persona -> skill -> model) Yes No
Self-hosted, air-gapped, zero runtime dependencies Yes Yes
Prompt-injection and steering-gadget defences on the router Yes No
Savings ledger and Routing Audit Yes No
OpenAI-compatible proxy Yes Partial
Provider marketplace with credits No No
Request/response observability UI for every callDecision traces and usage; pair with your APM for payload-level tracing Partial No

Keep your rules, add the engine

Register your existing handlers as targets with the decorator SDK and keep your rules as a RulesStrategy; the router adds policy, trace, learning and the ledger around them.

togetherpython
from opensmartroute.sdk import ComponentRegistry

components = ComponentRegistry()

@components.tool("sql-report", domains=["reporting"], cost={"usd_per_1k_tokens": 0.0})
def sql_report(request, target): ...

router = components.router()  # your rules: @components.policy_rule / RulesStrategy

Prove it on your traffic

Run the Routing Audit on a week of anonymised logs: savings versus your current mix, policy violations your routing allowed, and where agents or humans would have been the better answer.

Other comparisons: OpenRouter, LiteLLM, Portkey.