Skip to content

Provider troubleshooting

This page covers issues with the upstream provider (OpenRouter). Public clients can do very little here beyond recognizing the problem. Most actions live in operator docs.

429 from OpenRouter

OpenRouter rate limits apply. The gateway retries up to 3 times with exponential backoff before returning 429 to the client.

Symptoms. Sudden spike in sgw_requests_total{status="429"}. The structured logs show "OpenRouter API failed after retries with status 429".

Client action. Back off. Reduce request rate.

Operator action. Check OpenRouter's dashboard for the key. If the limit is persistent and traffic is justified, request a higher quota from OpenRouter.

5xx from OpenRouter

Symptoms. Spike in sgw_requests_total{status="500"|"502"|"503"|"504"}. The logs show OpenRouter API failed after retries with status <code> or OpenRouter connection failed: <reason>.

Client action. Re-issue once. If it persists, treat the upstream as unavailable and use a different model or wait.

Operator action. Check OpenRouter's status page. Cross-reference with artifacts/WAVE-H/PROVIDER-EVENTS.jsonl (the canonical provider event log from the post-production validation). If the outage is sustained, consider toggling model aliases via the registry — but that requires a release.

GLM fallback firing too often

Symptoms. Non-zero sgw_routing_decisions_total{action="FALLBACK_GLM_INVOKE"}. Look at the upstream error rate for Pro.

Client action. None — the fallback is already happening.

Operator action. Check OpenRouter's status for DeepSeek V4 Pro. If the outage is sustained, the policy has no automatic remediation beyond GLM-5.2; consider an architectural change (new release) to extend the cross-family fallback chain.

GLM fallback also failing

Symptoms. sgw_routing_decisions_total{action="FALLBACK_GLM_FAIL"} is non-zero. The gateway returns 500 to the client.

Client action. Treat as a sustained upstream outage. Wait for OpenRouter to recover.

Operator action. Consider whether to deploy a hot-fix that routes Pro requests to Flash temporarily. Do not edit the registry in production — issue a release.

Auth error from OpenRouter

Symptoms. 500 from the gateway with OpenRouter API error: 401.

Client action. None — the server-side OpenRouter key is bad.

Operator action. Rotate the OpenRouter key following the procedure at docs-internal/operations/secret-rotation.md (operator-only).

Provider-side content refusal

Symptoms. 500 from the gateway with OpenRouter API error: 400 and an OpenRouter-supplied refusal reason.

Client action. Rephrase the prompt. If you suspect the privacy gate has incorrectly upgraded the request to sensitive=true, examine the privacy gate's output (the structured logs do not include the redaction details, but the policy decision records the original and redacted message counts).

Operator action. None.

What the gateway does NOT do

  • It does not pre-screen prompts for content policy. OpenRouter handles that.
  • It does not maintain a list of "good" model IDs. The registry is frozen; the operator must update it via a release.
  • It does not retry non-retryable 4xx errors. 400 / 401 / 403 from OpenRouter come back to the client immediately.

See also