Document Ox Alpha provider limits

b0ed63583300 · Devin AI · · parent 503f15f86fde

Document Ox Alpha provider limits

Co-Authored-By: Christopher David <chris@openagents.com>
Co-Authored-By
Christopher David <chris@openagents.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • added docs/2026-08-23-ox-alpha-provider-limits.md
  • modified docs/episode-triage.md

Diff

2 files changed, +125 -0

docs/2026-08-23-ox-alpha-provider-limits.md added +123

@@ -0,0 +1,123 @@

1
# Ox Alpha provider limits
2
3
Date: 2026-08-23
4
5
Status: Point-in-time measurement
6
7
This document records the Ox Alpha capacity that a router can verify without
8
guessing. The measurements use public model catalogs and one bounded,
9
unauthenticated completion request per provider. Authenticated provider keys
10
were not available, so the run did not attempt load testing or claim a
11
concurrent-request ceiling.
12
13
Provider promotions and model availability can change without notice. Recheck
14
the linked sources and the authenticated limit endpoints before changing a
15
production routing budget.
16
17
## Evidence labels
18
19
- **Measured**: A provider API returned the value or response on 2026-08-23.
20
- **Documented**: Current provider documentation states the value.
21
- **Observed**: The value was recorded from a provider surface, but the current
22
  public surface does not expose enough information to reproduce it.
23
- **Claimed**: A provider or announcement advertised the value without an API
24
  receipt that a router can enforce.
25
- **Unknown**: The provider does not publish the value, or an authenticated
26
  request is required.
27
28
## Limit map
29
30
| Provider | Model | Availability measurement | Context | Maximum output | RPM | TPM | Other quota | Concurrent requests | Limit scope |
31
| --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- | --- |
32
| OpenRouter | `stealth/ox-alpha` | Public catalog listed the model at `$0` input and output. An unauthenticated completion returned `401`. | 1,048,576 measured | 131,072 measured | 20 documented for free models | Unknown | 50 requests/day before $10 of lifetime credit; 1,000 requests/day after $10, documented for free models | Unknown | OpenRouter documents that additional accounts or API keys do not increase its global rate limit. The exact treatment of this zero-priced slug, which does not end in `:free`, requires an authenticated response. |
33
| Nous Portal | `stealth/ox-alpha` | Public catalog listed the model at `$0` input and output, but an unauthenticated completion returned `400` with `Unknown model`. | 1,048,576 measured | 131,072 measured | 50 observed for the Free plan | 500,000 observed for the Free plan | No numeric daily quota verified | Unknown | Unknown. The public plan page describes account plans but does not state whether multiple keys share one quota. |
34
| Venice | `stealth-ox-alpha` | Public catalog listed the beta model as online at `$0` input and output. An unauthenticated completion returned `402` with `Authentication required`. | 1,048,576 measured | 131,072 measured | Unknown for Ox Alpha | Unknown for Ox Alpha | Venice documents model tiers from 20 to 500 RPM and 500,000 to 1,000,000 TPM, but does not map Ox Alpha to a tier publicly. | Unknown | The authenticated `/api_keys/rate_limits` endpoint returns limits for one key. Whether multiple keys share another account-level ceiling remains unknown. |
35
| OpenCode Zen | `x-preview-f-free` | Documentation listed Ox Alpha Free. An unauthenticated completion reached the gateway and returned `503` with `Endpoint is unavailable`. | Unknown | Unknown | Unknown | Unknown | OpenCode Go lists dashes for Ox Alpha's five-hour, weekly, and monthly request estimates. | Unknown | Unknown |
36
37
The OpenRouter free-model quota applies across free-model traffic rather than
38
reserving capacity for Ox Alpha. OpenRouter can also return an upstream
39
provider `429` after its own quota accepts a request.
40
41
The Nous Free plan values were recorded in issue #40 on 2026-08-22 as
42
50 RPM and 500,000 TPM. The current unauthenticated plan page says only
43
“Standard rate limits,” so treat those numbers as an observation until an
44
authenticated key reports matching headers or limits.
45
46
Venice publishes these default model tiers:
47
48
| Tier | RPM | TPM |
49
| --- | ---: | ---: |
50
| XS | 500 | 1,000,000 |
51
| S | 75 | 750,000 |
52
| M | 50 | 750,000 |
53
| L | 20 | 500,000 |
54
55
Do not assign Ox Alpha one of these budgets by model size or performance. Use
56
`GET /api/v1/api_keys/rate_limits` with the routing key and record the returned
57
model mapping.
58
59
## Routing conclusion
60
61
The current evidence does not support a multi-request concurrency budget for
62
any provider. A router can use these results as admission gates:
63
64
- Keep OpenRouter within the documented 20 RPM and account-level daily quota,
65
  but start with one in-flight request until an authenticated probe finds the
66
  upstream ceiling for `stealth/ox-alpha`.
67
- Keep the Nous lane disabled until an authenticated completion resolves the
68
  public-catalog and completion-endpoint mismatch.
69
- Admit Venice only after its key-specific limit endpoint maps Ox Alpha to an
70
  RPM and TPM budget.
71
- Keep OpenCode Zen disabled while the Ox Alpha endpoint returns `503`.
72
73
The advertised OpenCode capacity of 100 trillion tokens per day and Nous
74
capacity of 1 quadrillion tokens per day are claims, not routing budgets. The
75
Nous Free plan observation is 500,000 TPM, which can carry at most 720 million
76
tokens per day if the limit remains continuously available.
77
78
## Measurement procedure
79
80
Use a dedicated free-tier account and key for each provider. Do not rotate
81
accounts or keys to evade a provider limit.
82
83
1. Fetch the provider's key or rate-limit endpoint and save the response
84
   headers without the authorization header.
85
2. Send one completion with a fixed prompt and `max_tokens: 16`. Confirm the
86
   model identifier, context metadata, and rate-limit headers.
87
3. Run three batches at concurrency 1, 2, 4, and 8. Stop at the first `429`,
88
   quota error, or batch with more than 20% provider failures.
89
4. Do not retry failed requests during the measurement. Record
90
   `Retry-After`, every `X-RateLimit-*` header, the accepted concurrency, and
91
   the first rejected concurrency.
92
5. Wait for the longest reported reset window before testing the next
93
   provider. Keep the prompt and output bound unchanged.
94
6. Repeat the probe with a second key in the same account. If the remaining
95
   quota changes for both keys, record the limit as account-scoped. Use a
96
   provider-supported organization test only when its terms permit one.
97
98
Use the following catalog and limit sources:
99
100
- [OpenRouter model catalog](https://openrouter.ai/api/v1/models)
101
- [OpenRouter limits](https://openrouter.ai/docs/api_reference/limits)
102
- [Nous model catalog](https://inference-api.nousresearch.com/v1/models)
103
- [Nous plans](https://portal.nousresearch.com/info)
104
- [Venice model catalog](https://api.venice.ai/api/v1/models)
105
- [Venice rate limits](https://docs.venice.ai/api-reference/rate-limiting)
106
- [OpenCode Zen](https://opencode.ai/docs/zen/)
107
- [OpenCode Go limits](https://opencode.ai/docs/go/)
108
109
## Probe receipts
110
111
The bounded unauthenticated probes ran between 04:44 and 04:46 UTC on
112
2026-08-23:
113
114
| Provider | Endpoint | HTTP status | Result |
115
| --- | --- | ---: | --- |
116
| OpenRouter | `POST https://openrouter.ai/api/v1/chat/completions` | `401` | `No cookie auth credentials found` |
117
| Nous Portal | `POST https://inference-api.nousresearch.com/v1/chat/completions` | `400` | `Unknown model: stealth/ox-alpha` |
118
| Venice | `POST https://api.venice.ai/api/v1/chat/completions` | `402` | `Authentication required` |
119
| OpenCode Zen | `POST https://opencode.ai/zen/v1/chat/completions` | `503` | `Endpoint is unavailable` |
120
121
Each request used the provider-specific model identifier, one user message
122
that requested `OK`, and an eight-token output bound. The run sent no
123
concurrent traffic.
docs/episode-triage.md modified +2

@@ -1235,6 +1235,8 @@ GCS checkpoints, recoverable commands); Firecracker strong class, GKE Agent

1235 1235
Sandbox standard class; first-class agent context — bake exact API usage into
1236 1236
agents instead of letting them traverse blindly. Platform ambition restated:
1237 1237
agentic Slack plus agentic GitHub plus agentic Linear in one open-source UI.
1238
The [Ox Alpha provider limit snapshot](2026-08-23-ox-alpha-provider-limits.md)
1239
records the verified capacity and the remaining authenticated probes.
1238 1240
1239 1241
### Batch synthesis and integration notes
1240 1242

This page updates live while a promote is in flight · changelog