THE ROUTING ENGINE.
Every request passes through three stages in order: semantic cache lookup, provider scoring, and execution with automatic failover. This page explains exactly how each stage works.
The Three Stages
01
Semantic Cache
The request is embedded using Google text-embedding-004 and compared against recent responses stored in Redis. If cosine similarity exceeds 0.92, the cached response is returned immediately — no LLM call, no cost.
02
Provider Scoring
All healthy providers are scored against your chosen routing mode (cost, speed, quality, or balanced). The top scorer is selected as the primary candidate. Two backup candidates are retained for failover.
03
Execution + Failover
The primary provider is called. On any failure — rate limit, timeout, 5xx — the router automatically retries with the next-ranked provider. This happens transparently; your client sees one clean response.
Scoring Algorithm
Each provider candidate receives a composite score between 0 and 1. The weights shift depending on the routing mode you specify. A provider that is down or degraded is penalized before any mode-specific scoring.
Scoring Factors
| Factor | Source | Description |
|---|---|---|
| success_rate | DB: facilitator_health | 7-day rolling success ratio. A provider at 99% beats one at 95%. |
| p95_settle_ms | DB: facilitator_health | 95th-percentile latency in ms. Weighted heavily in speed mode. |
| cost_per_1k_tokens | lib/ai-providers/registry.ts | Input + output token price. Primary factor in cost mode. |
| reputation_score | ERC-8004 on-chain | On-chain reputation from ERC-8004 registry. Normalized 0–1. |
| health_status | Live health probe | healthy=1.0, degraded=0.5, down=0. Applied as a multiplier. |
Weight Distribution by Mode
| Mode | Cost | Speed | Quality | Reliability |
|---|---|---|---|---|
| cost | 70% | 10% | 10% | 10% |
| speed | 10% | 70% | 10% | 10% |
| quality | 10% | 10% | 70% | 10% |
| balanced | 25% | 25% | 25% | 25% |
Semantic Cache Detail
The cache is tenant-scoped — one tenant's responses never leak to another. The similarity threshold of 0.92 is the empirically calibrated default: high enough to block hallucination-risk false positives, low enough to catch paraphrased duplicates.
Embedding model
- text-embedding-004 (Google)
Similarity metric
- Cosine similarity
Default threshold
- 0.92 (configurable per request)
Storage backend
- Redis with vector index
Scope
- Per-tenant (never shared across accounts)
Cache hit latency
- < 50ms (vs 1–10s for LLM call)
Cache hit cost
- $0.00
TTL
- 24 hours (default)
Opt out of caching
To bypass the cache for a specific request (e.g., real-time data queries), set "cache": false in the p402 object. The request will still be routed normally but the response will not be stored.
Automatic Failover
The router holds a ranked list of three provider candidates for every request. If the top-ranked provider fails for any reason, the router immediately retries with the next candidate — no delay, no error surfaced to your client.
Fallback Mechanism
- HTTP 429 (rate limit): Immediate retry with candidate #2
- HTTP 5xx (server error): Immediate retry with candidate #2
- Connection timeout (> 30s): Abort + retry with candidate #2
- All 3 candidates fail: Return HTTP 503 with PROVIDER_UNAVAILABLE
- Budget exceeded mid-stream: Return HTTP 403 with BUDGET_EXCEEDED; no retry
Failover is transparent. The p402_metadata.provider field in the response tells you which provider actually served the request. If failover occurred, this will differ from what you might expect based on your mode. You can use this to diagnose provider degradation.
OpenRouter Meta-Provider
P402 treats OpenRouter as a single provider that proxies 300+ models. When your routing mode selects OpenRouter, the model within OpenRouter is further optimized based on your mode. This means you get access to every new frontier model the moment OpenRouter adds it — no adapter changes required on your end.
Model freshness
- GPT-4.1, Claude 4.5, Gemini 2.0 Pro available the day they land on OpenRouter.
Unified billing
- One OPENROUTER_API_KEY covers all 300+ models. P402 adds a transparent 1% routing fee on top.
Fallback depth
- If your primary direct provider (e.g., Anthropic) fails, OpenRouter serves as a deep fallback pool.
Model pinning
- Force a specific model with "model": "anthropic/claude-opus-4" in configuration.
Per-Request Configuration
The p402 object in your request body controls routing behavior for that request. All fields are optional; omitting them uses account defaults.
JSON — p402 configuration object
{
"messages": [...],
"p402": {
"mode": "cost", // "cost" | "speed" | "quality" | "balanced"
"cache": true, // true = use semantic cache (default: true)
"session_id": "ses_...", // budget-capped session (optional)
"max_cost_usd": 0.01, // hard ceiling per request (optional)
"provider": "anthropic", // force a specific provider (optional)
"model": "claude-opus-4" // force a specific model (optional)
}
}
Per-Request Parameters
- mode: Selects the weight profile for provider scoring. Defaults to "balanced" if not set.
- cache: Set false to skip semantic cache lookup and storage for this request. Useful for real-time or personalized responses.
- session_id: Attaches this request to a budget-capped session. Requests that would exceed the session budget return HTTP 403 before the LLM is called.
- max_cost_usd: A per-request cost ceiling. If the cheapest available provider exceeds this, you get COST_LIMIT_EXCEEDED rather than a surprise charge.
- provider: Bypasses scoring entirely and routes to this specific provider. Use for compliance requirements or testing. Falls back to normal routing if the provider is down.
- model: Forces a specific model. The provider that serves this model is selected automatically unless you also specify provider.
Routing Decision in the Response
Every response includes a p402_metadata field that tells you exactly what happened: which provider was selected, what it cost, and whether the response came from cache.
JSON — p402_metadata
{
"p402_metadata": {
"provider": "deepseek", // Provider that served the request
"model": "deepseek-v3", // Model used
"cost_usd": 0.0003, // What you were charged
"direct_cost": 0.0031, // What GPT-4o would have cost
"savings": 0.0028, // Savings from intelligent routing
"input_tokens": 24,
"output_tokens": 187,
"cached": false, // true = served from semantic cache
"latency_ms": 1240, // Time from request to first token
"mode": "cost", // Mode used for this request
"failover": false // true = primary provider failed, used fallback
}
}