90 days of the enterprise, pro and team plans free, no card needed. See the plans
Industries
A hospital pins anything with patient data to on-prem. A bank caps cost per request and keeps EU traffic in the EU. A law firm sends doubtful answers to counsel. A support desk escalates anger to a person. Each starts from a rules.yaml you can read in a minute and change in a pull request.
targets:
- id: llm-small # cheap, fast, fine for FAQs and bulk copy
kind: llm
cost_per_1k: 0.0002
- id: llm-mid
kind: llm
cost_per_1k: 0.002
- id: llm-frontier # the best money can buy, for what deserves it
kind: llm
cost_per_1k: 0.02
- id: llm-onprem # inside your boundary; PII and PHI stop here
kind: llm
data_boundary: on_prem
- id: coding-agent
kind: agent
capabilities: [coding]
- id: human-escalation # a person, reached through the human queue
kind: human6 industries
Each line describes the behaviour; the file beside it is the whole of the configuration that produces it. Nothing is hidden in code.
rules:
- name: faqs-on-the-small-model
when:
domains: [customer_support]
max_complexity: 0.35
prefer: [llm-small]
weight: 0.8
- name: upset-or-complex-escalates
when:
domains: [customer_support]
actions: [escalate]
prefer: [llm-frontier, human-escalation]
pin: trueExample: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
The escalate action comes from the request itself - a complaint, a chargeback, a ticket that bounced twice.
rules:
- name: real-code-to-the-coding-agent
when:
domains: [coding]
min_complexity: 0.45
prefer: [coding-agent]
weight: 0.7
- name: prose-never-pays-coding-prices
when:
domains: [general_chat, marketing, hr]
avoid: [coding-agent]
weight: 0.6Example: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
Complexity is a signal, so a one-line regex question never wakes the coding agent.
rules:
- name: account-data-stays-onprem
when:
domains: [finance]
contains_pii: true
prefer: [llm-onprem]
pin: true
- name: statements-are-extraction
when:
domains: [finance]
actions: [extract]
prefer: [llm-mid]
weight: 0.6Example: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
pin restricts the candidates instead of nudging them; the hash-chained audit records why.
rules:
- name: phi-stays-onprem
when:
contains_pii: true
prefer: [llm-onprem]
avoid: [llm-frontier, llm-mid]
weight: 1.0
- name: clinical-review
when:
domains: [medical]
min_complexity: 0.6
prefer: [clinician-review]
pin: trueExample: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
Policies run before scoring, so no objective weight can trade the boundary away.
rules:
- name: contracts-need-context
when:
domains: [legal]
min_complexity: 0.5
prefer: [llm-frontier]
weight: 0.8
- name: anything-doubtful-to-counsel
when:
domains: [legal]
actions: [escalate]
prefer: [counsel-review]
pin: true
# router settings:
# min_confidence: 0.55
# fallback_target: counsel-reviewExample: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
The floor is one router setting: below min_confidence the request goes to fallback_target instead.
rules:
- name: bulk-copy-on-cheap-models
when:
domains: [marketing]
actions: [generation]
max_complexity: 0.5
prefer: [llm-small, llm-mid]
weight: 0.8
- name: brand-critical-gets-the-best
when:
domains: [marketing]
context: { brand_critical: true }
prefer: [llm-frontier]
pin: trueExample: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
Budgets are declared per target in the catalogue; context keys let the caller flag what matters.
rules:
- name: faqs-on-the-small-model
when:
domains: [customer_support]
max_complexity: 0.35
prefer: [llm-small]
weight: 0.8
- name: upset-or-complex-escalates
when:
domains: [customer_support]
actions: [escalate]
prefer: [llm-frontier, human-escalation]
pin: trueExample: Illustrative configuration or synthetic data, not a customer's.A reference configuration to start from - the rules the router enforces, not a description of how a named customer runs it.
The escalate action comes from the request itself - a complaint, a chargeback, a ticket that bounced twice.


Who edits the file
Photo: Fahad Puthawala
Why a file, not a form
Your AI policy becomes a document your compliance team can read, your platform team can review and your auditor can quote.
For the business
Cloud, self-hosted or on-premises
The same router ships as a hosted platform, a container image and a Helm chart; the data boundary is a routing rule.
Deployment optionsOne URL, every vendor
Point your OpenAI-compatible client at one address; add, swap or retire providers in the catalogue without touching application code.
Every vendor side by side89% less
On the 150-prompt benchmark the router spent 89% less than sending every prompt to the reference model, and the judged quality went up, not down.
Read the benchmarkThe free plan runs the same rules engine as the enterprise edition. Paste the file into your workspace policy or run it in the Python package on your own machine.
Free plan, no card. Fifteen thousand decisions a month with the full trace.
Support assistant
Answers from the documentation; checking which model is on duty
Hi - I answer from the OpenSmartRoute documentation: routing, the API, plans and quotas, self-hosting. Ask away, or open a support ticket if you need a person.