9Router: evaluate an AI gateway without assuming unlimited access
Build a read-only 9Router route receipt
Design an evidence record that separates requested model, actual attempts and accepted response without retaining secrets.
What you will learn
- Make each attempt visible
- Minimize retained data
- Test partial outcomes
Before you start
- Basic command-line and configuration reading
- Ability to work in a disposable authorized environment
Design an evidence record that separates requested model, actual attempts and accepted response without retaining secrets.
Key takeaways
- Final success should retain prior failures.
- Unknown usage must not become zero.
- A receipt needs no account mutation authority.
Make each attempt visible
Create a synthetic receipt containing requested model, configured route and each attempted destination. Store outcome and duration for every attempt, including failures. A final success should not erase the path taken to obtain it.
Keep the response acceptance check separate from transport success. For a coding workflow, the final answer may still use unsupported tools or lose necessary context. Record the specific client feature tested.
Minimize retained data
Use fake request identifiers and synthetic prompts in the exercise. Exclude authorization headers, account tokens and full private tool output. Store approved metadata or hashes when they are sufficient for comparison.
Label source revision and startup mode in the receipt. This connects the observed request boundary to the custom server actually used, rather than assuming all launch modes apply identical handling.
Test partial outcomes
Include fixtures for first-route success, failed first attempt, all routes failed and a response rejected by the client. Acceptance requires each state to match its evidence and missing usage to remain unknown.
Keep the first version read only and avoid automatic account changes. This is an independent learning proposal, not a claim about an existing 9Router endpoint. A ledger and a small attempt timeline explain it without Three.js.
Decision guide
| Criterion | Option A | Option B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
Implementation steps
- 1
Record every synthetic attempt and its outcome.
- 2
Separate response acceptance from transport status.
- 3
Test failed and partially observed routes without secrets.
Copy-ready example
{
"proposal": true,
"readOnly": true,
"requestId": "demo",
"requestedModel": "configured-model",
"attempts": [],
"clientAccepted": null,
"usage": null
}Frequently asked questions
Is this a documented gateway endpoint?
No. This chapter proposes an independent learning format.
Should it switch accounts automatically?
The initial exercise only records and explains evidence.
Sources
- 9Router / README.mdSource checked 2026-09-18
- 9Router / custom-server.jsSource checked 2026-09-18