You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(llm): rotate across multiple OpenRouter keys when an account fails
OPENROUTER_FALLBACK_KEYS (comma-separated) adds backup OpenRouter
accounts behind the primary key:
- llm.js builds one provider entry per key, so the platform chain
(tutor, fact-check, persona, agents) fails over key-by-key. Fallback
keys pair with the model's :free variant — they are typically
unfunded free-tier accounts where the paid model would always 402.
- /api/chat/proxy retries the next key on account-level statuses
(401/402/403/429) before any byte streams; request-shaped errors
stay final.
- Pricing strips the #n multi-key suffix so every OpenRouter key
prices to zero on the spend dashboard.
Also carries the in-flight free-first provider-tier refactor of llm.js
(NVIDIA NIM tier, server Anthropic as opt-in last resort) whose tests
are green. New fallback key validated live against the :free model and
set in Vercel prod+preview via the REST API.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,7 @@ Public history for [three.ws](https://three.ws), newest first. New pages come fr
7
7
## 2026-06-11
8
8
9
9
-**Avatar pages back online after image-engine outage** — Fetching an individual avatar was failing with a server error, which also broke the walking avatar on the home page. The image-processing engine the avatar dress-up baker relies on failed to load in production and took the whole endpoint down with it. Avatar lookups now load independently of the baker, and the missing image libraries ship with the deployment, so avatar pages and the home hero are back. `[fix, infra]`
10
+
-**Built-in AI stays up when a provider account runs dry** — The platform's built-in AI (chat, tutor, fact-checker, persona tools) now rotates across multiple OpenRouter accounts: when one account runs out of credits or hits a rate limit, the next takes over automatically, before any of the response has streamed. Paid x402 endpoints that previously returned errors during a provider outage now degrade to a backup account instead of failing. `[improvement, infra]`
10
11
-**Faster, quieter agents directory and site-wide page polish** — The on-chain agents directory now loads from our server-side index instead of contacting every agent's metadata host from your browser — pages render faster and no longer spray network errors. Also: the pump.fun cockpit's sidebar pages are now shareable deep links, mobile nav and footer links meet touch-target guidelines, anonymous visitors no longer trigger failed sign-in requests on Walk and Create, and assorted dead links were removed. (`/agents`) `[improvement, fix]`
11
12
-**Live $THREE market data, longer trade streams, and tutor session fixes** — $THREE market stats (price, holders, liquidity) are flowing again from our primary data source — a missing request header had been silently failing it to backups for days. Live trade streams no longer cut out after 30 seconds; they now run their full duration. The Pay-As-You-Learn Tutor no longer errors when resuming a session — running tabs persist correctly across questions — and Fact Checker results are cached properly so repeat checks of the same claim return instantly. `[fix, improvement]`
12
13
-**Scheduled jobs restored after dependency outage** — Every background job — pump.fun monitoring, coin payouts, club payouts, scheduled X posts, DCA runs, subscription billing, and the rest — had been failing since a recent dependency upgrade left a required Solana staking library out of the deployment. The missing library now ships with every deploy, and the image-processing engine behind avatar baking was rolled back to its proven version so it loads reliably in production. All scheduled jobs run again. `[fix, infra]`
Copy file name to clipboardExpand all lines: data/changelog.json
+9Lines changed: 9 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,15 @@
1
1
{
2
2
"$comment": "Curated changelog entries for three.ws — the editorial layer of the public changelog. New PAGE launches are tracked automatically via the `added` field in data/pages.json; this file is for everything else holders care about: improvements, fixes, SDK releases, trading/payments capabilities, security work. scripts/build-page-index.mjs merges both sources into CHANGELOG.md, public/changelog.json, and public/changelog.xml. Newest first. Allowed tags: feature, improvement, fix, sdk, infra, docs, security. `link` is optional and must be a live three.ws path.",
3
3
"entries": [
4
+
{
5
+
"date": "2026-06-11",
6
+
"title": "Built-in AI stays up when a provider account runs dry",
7
+
"summary": "The platform's built-in AI (chat, tutor, fact-checker, persona tools) now rotates across multiple OpenRouter accounts: when one account runs out of credits or hits a rate limit, the next takes over automatically, before any of the response has streamed. Paid x402 endpoints that previously returned errors during a provider outage now degrade to a backup account instead of failing.",
Copy file name to clipboardExpand all lines: public/changelog.json
+12-1Lines changed: 12 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
{
2
-
"generated_at": "2026-06-11T03:28:03.199Z",
2
+
"generated_at": "2026-06-11T04:19:59.255Z",
3
3
"generated_by": "scripts/build-page-index.mjs from data/pages.json + data/changelog.json",
4
4
"site": {
5
5
"name": "three.ws",
@@ -17,6 +17,17 @@
17
17
"infra"
18
18
]
19
19
},
20
+
{
21
+
"date": "2026-06-11",
22
+
"type": "update",
23
+
"title": "Built-in AI stays up when a provider account runs dry",
24
+
"summary": "The platform's built-in AI (chat, tutor, fact-checker, persona tools) now rotates across multiple OpenRouter accounts: when one account runs out of credits or hits a rate limit, the next takes over automatically, before any of the response has streamed. Paid x402 endpoints that previously returned errors during a provider outage now degrade to a backup account instead of failing.",
Copy file name to clipboardExpand all lines: public/changelog.xml
+8Lines changed: 8 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,14 @@
14
14
<category>fix</category>
15
15
<description>Fetching an individual avatar was failing with a server error, which also broke the walking avatar on the home page. The image-processing engine the avatar dress-up baker relies on failed to load in production and took the whole endpoint down with it. Avatar lookups now load independently of the baker, and the missing image libraries ship with the deployment, so avatar pages and the home hero are back.</description>
16
16
</item>
17
+
<item>
18
+
<title>Built-in AI stays up when a provider account runs dry</title>
19
+
<link>https://three.ws/changelog</link>
20
+
<guidisPermaLink="false">2026-06-11:Built-in AI stays up when a provider account runs dry</guid>
21
+
<pubDate>Thu, 11 Jun 2026 12:00:00 GMT</pubDate>
22
+
<category>improvement</category>
23
+
<description>The platform's built-in AI (chat, tutor, fact-checker, persona tools) now rotates across multiple OpenRouter accounts: when one account runs out of credits or hits a rate limit, the next takes over automatically, before any of the response has streamed. Paid x402 endpoints that previously returned errors during a provider outage now degrade to a backup account instead of failing.</description>
24
+
</item>
17
25
<item>
18
26
<title>Faster, quieter agents directory and site-wide page polish</title>
0 commit comments