omniroute 3.1.3 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__051203a6._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__7fa4d14e._.js +1 -1
- package/app/.next/server/chunks/_05c48915._.js +1 -1
- package/app/.next/server/chunks/_06515a8a._.js +1 -1
- package/app/.next/server/chunks/_2115d8de._.js +1 -1
- package/app/.next/server/chunks/_3ac953eb._.js +1 -1
- package/app/.next/server/chunks/_4b8fd853._.js +1 -1
- package/app/.next/server/chunks/_68683848._.js +1 -1
- package/app/.next/server/chunks/_ee9b677b._.js +1 -1
- package/app/.next/server/chunks/_efd5ede2._.js +1 -1
- package/app/.next/server/chunks/src_4787afd3._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_zh-CN_json_f4112d90._.js +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{a9e7753a48031b3b.js → baf0a258e0ffe591.js} +1 -1
- package/app/CHANGELOG.md +24 -0
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/utils/aiSdkCompat.ts +9 -2
- package/app/package-lock.json +2 -2
- package/app/package.json +1 -1
- package/app/src/i18n/messages/cs.json +17 -17
- package/app/src/i18n/messages/zh-CN.json +282 -245
- package/app/src/sse/services/auth.ts +23 -0
- package/app/tests/unit/t26-ai-sdk-accept-header-compat.test.mjs +16 -2
- package/package.json +1 -1
- /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → xr28pZiWERP5X_Cmq10cV}/_buildManifest.js +0 -0
- /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → xr28pZiWERP5X_Cmq10cV}/_clientMiddlewareManifest.json +0 -0
- /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → xr28pZiWERP5X_Cmq10cV}/_ssgManifest.js +0 -0
|
@@ -368,6 +368,29 @@ export async function getProviderCredentials(
|
|
|
368
368
|
return null;
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
+
// Auto-decay backoffLevel for accounts whose rateLimitedUntil has passed.
|
|
372
|
+
// Without this, high backoffLevel permanently deprioritizes accounts even
|
|
373
|
+
// after the rate limit window expires, creating a deadlock where the account
|
|
374
|
+
// needs a successful request to reset but never gets selected.
|
|
375
|
+
for (const c of connections) {
|
|
376
|
+
if (
|
|
377
|
+
c.backoffLevel > 0 &&
|
|
378
|
+
!isTerminalConnectionStatus(c) &&
|
|
379
|
+
!isAccountUnavailable(c.rateLimitedUntil)
|
|
380
|
+
) {
|
|
381
|
+
c.backoffLevel = 0;
|
|
382
|
+
updateProviderConnection(c.id, {
|
|
383
|
+
backoffLevel: 0,
|
|
384
|
+
testStatus: "active",
|
|
385
|
+
lastError: null,
|
|
386
|
+
lastErrorAt: null,
|
|
387
|
+
lastErrorType: null,
|
|
388
|
+
lastErrorSource: null,
|
|
389
|
+
errorCode: null,
|
|
390
|
+
}).catch(() => {});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
371
394
|
// Filter out unavailable accounts and excluded connection
|
|
372
395
|
const availableConnections = connections.filter((c) => {
|
|
373
396
|
if (excludeConnectionId && c.id === excludeConnectionId) return false;
|
|
@@ -4,9 +4,10 @@ import assert from "node:assert/strict";
|
|
|
4
4
|
const { clientWantsJsonResponse, resolveStreamFlag, stripMarkdownCodeFence } =
|
|
5
5
|
await import("../../open-sse/utils/aiSdkCompat.ts");
|
|
6
6
|
|
|
7
|
-
test("T26: Accept application/json
|
|
7
|
+
test("T26: explicit stream:true takes priority over Accept application/json (#656)", () => {
|
|
8
8
|
assert.equal(clientWantsJsonResponse("application/json"), true);
|
|
9
|
-
|
|
9
|
+
// Body stream:true always wins — even with Accept: application/json
|
|
10
|
+
assert.equal(resolveStreamFlag(true, "application/json"), true);
|
|
10
11
|
});
|
|
11
12
|
|
|
12
13
|
test("T26: text/event-stream keeps SSE behavior", () => {
|
|
@@ -28,3 +29,16 @@ test("T26: non-fenced content is returned unchanged", () => {
|
|
|
28
29
|
const plain = '{"name":"omniroute"}';
|
|
29
30
|
assert.equal(stripMarkdownCodeFence(plain), plain);
|
|
30
31
|
});
|
|
32
|
+
|
|
33
|
+
test("T26: undefined stream falls back to Accept header heuristic (#656)", () => {
|
|
34
|
+
// No explicit stream param — Accept: application/json means no streaming
|
|
35
|
+
assert.equal(resolveStreamFlag(undefined, "application/json"), false);
|
|
36
|
+
// No explicit stream param + no JSON accept = stream by default
|
|
37
|
+
assert.equal(resolveStreamFlag(undefined, "text/event-stream"), true);
|
|
38
|
+
assert.equal(resolveStreamFlag(undefined, undefined), true);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("T26: explicit stream:false always prevents streaming", () => {
|
|
42
|
+
assert.equal(resolveStreamFlag(false, "text/event-stream"), false);
|
|
43
|
+
assert.equal(resolveStreamFlag(false, undefined), false);
|
|
44
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.5",
|
|
4
4
|
"description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|