@ltgiang/9router 0.5.35 → 0.5.37
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-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +12 -12
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/reorder/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/order/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/connections/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/pool/pull/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/pool/push/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/pool/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +12 -12
- package/app/.next-cli-build/server/chunks/1961.js +1 -1
- package/app/.next-cli-build/server/chunks/3008.js +1 -1
- package/app/.next-cli-build/server/chunks/8668.js +1 -1
- package/app/.next-cli-build/server/chunks/8914.js +1 -1
- package/app/.next-cli-build/server/chunks/920.js +4 -4
- package/app/.next-cli-build/server/chunks/9212.js +1 -1
- package/app/.next-cli-build/server/chunks/9325.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/{1321-50f4a279c657e7d7.js → 1321-87efb6064fab51ca.js} +1 -1
- package/app/cli/.build-home/.9router/db/backups/{upgrade-0.5.20-to-0.5.21-0.5.21-20260630-174438 → upgrade-0.5.26-to-0.5.35-0.5.35-20260706-101856}/data.sqlite +0 -0
- package/app/cli/.build-home/.9router/db/backups/{upgrade-0.5.19-to-0.5.20-0.5.20-20260630-145650 → upgrade-0.5.35-to-0.5.36-0.5.36-20260706-103333}/data.sqlite +0 -0
- package/app/cli/.build-home/.9router/db/data.sqlite +0 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- /package/app/.next-cli-build/static/{nMoFzSF3RJha5ZfLRM8ZG → CZsjEfWjq_f7idhY_DQnQ}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{nMoFzSF3RJha5ZfLRM8ZG → CZsjEfWjq_f7idhY_DQnQ}/_ssgManifest.js +0 -0
|
@@ -13,10 +13,10 @@ Generate a JSON object with this exact structure:
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
Important: Return ONLY the JSON object, no markdown, no explanation.`,L=[],M="_omnirouteSkipUniversalHandoff";function N(a){let b=Number(a?.handoffThreshold),c=Number(a?.maxMessagesForSummary),d=Array.isArray(a?.handoffProviders),e=d?(a?.handoffProviders).map(a=>"string"==typeof a?a.trim().toLowerCase():"").filter(Boolean):["codex"];return{handoffModel:"string"==typeof a?.handoffModel&&a.handoffModel.trim().length>0?a.handoffModel.trim():"",handoffThreshold:Number.isFinite(b)&&b>0&&b<.95?b:.85,handoffProviders:d?e:["codex"],maxMessagesForSummary:Number.isFinite(c)&&c>=5&&c<=100?Math.round(c):30}}function O(a){return"string"==typeof a?a:Array.isArray(a)?a.map(a=>a&&"object"==typeof a?"string"==typeof a.text?String(a.text):"string"==typeof a.content?String(a.content):"":"").filter(Boolean).join("\n"):""}function P(a){return a.map((a,b)=>{let c="string"==typeof a.role?a.role:"unknown",d=O(a.content).trim();return d?`[${b+1}] ${c.toUpperCase()}:
|
|
16
|
-
${d}`:""}).filter(Boolean).join("\n\n")}function Q(a,b){let c=a.filter(a=>a&&"object"==typeof a),d=c.filter(a=>"string"==typeof a.role&&("system"===a.role||"developer"===a.role)),e=c.filter(a=>"string"!=typeof a.role||"system"!==a.role&&"developer"!==a.role),f=[...d,...e.slice(-b)];for(;f.length>d.length+1;){let a=P(f);if(8e3>=(0,G.estimateTokens)(a))return f;f=[...d,...f.slice(d.length+1)]}let g=P(f);if((0,G.estimateTokens)(g)>8e3){if(d.length>0)return d;let a=e[e.length-1];return a?[a]:[]}return f}function R(a,b,c=240){return Array.isArray(a)?a.map(a=>"string"==typeof a?a.trim():"").filter(Boolean).slice(0,b).map(a=>a.slice(0,c)):[]}function S(a){let b=function(a){let b=String((0,H.yN)(a)||"").replace(I,"").trim();if(!b)return"";try{return JSON.parse(b),b}catch{let a=b.indexOf("{"),c=b.lastIndexOf("}");if(a>=0&&c>a)return b.slice(a,c+1);return b}}(a);if(!b)return null;try{let a=JSON.parse(b),c="string"==typeof a.summary?a.summary.trim().slice(0,2e3):"",d="string"==typeof a.taskProgress?a.taskProgress.trim().slice(0,1200):"",e=R(a.keyDecisions,8),f=R(a.activeEntities,10);if(!c)return null;return{summary:c,keyDecisions:e,taskProgress:d,activeEntities:f}}catch{return null}}function T(a){return a.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function U(a){let b=(Array.isArray(a.choices)?a.choices:[])[0],c=b?.message;if("string"==typeof c?.content)return c.content;if(Array.isArray(c?.content))return O(c.content);for(let b of Array.isArray(a.output)?a.output:[])if(b&&"object"==typeof b){for(let a of Array.isArray(b.content)?b.content:[])if("string"==typeof a?.text)return a.text}for(let b of Array.isArray(a.content)?a.content:[])if(b&&"object"==typeof b&&"string"==typeof b.text)return String(b.text);return""}async function V(a){let b=N(a.config),c=b.handoffModel||a.model,d=P(Q(Array.isArray(a.messages)?a.messages:[],b.maxMessagesForSummary));if(!d)return;let e=K.replace("{HISTORY}",d),f=await a.handleSingleModel({model:c,messages:[{role:"user",content:e}],stream:!1,max_tokens:800,temperature:.1,_omnirouteSkipContextRelay:!0,_omnirouteInternalRequest:"context-handoff"},c);if(!f.ok)return;let g="";try{let a=await f.clone().json();g=U(a)}catch{try{g=await f.clone().text()}catch{g=""}}let h=S(g);h&&(a.sessionId,a.comboName,a.connectionId,h.summary,h.keyDecisions,h.taskProgress,h.activeEntities,Array.isArray(a.messages)&&a.messages.length,b.handoffThreshold,new Date().toISOString(),a.expiresAt||new Date(Date.now()+18e6).toISOString())}async function W(a){let b=P(Q(Array.isArray(a.messages)?a.messages:[],a.maxMessages));if(!b)return;let c=K.replace("{HISTORY}",b),d=a.handoffModel||a.currModel,e=await a.handleSingleModel({model:d,messages:[{role:"user",content:c}],stream:!1,max_tokens:800,temperature:.1,_omnirouteSkipContextRelay:!0,_omnirouteInternalRequest:"universal-handoff"},d);if(!e.ok)return;let f="";try{let a=await e.clone().json();f=U(a)}catch{try{f=await e.clone().text()}catch{f=""}}let g=S(f);g&&(a.sessionId,a.comboName,a.prevModel,g.summary,g.keyDecisions,g.taskProgress,g.activeEntities,Array.isArray(a.messages)&&a.messages.length,a.prevModel,new Date().toISOString(),new Date(Date.now()+a.ttlMs).toISOString())}var X=c(77868),Y=c(74016),Z=c(69069);let $=new Map;function _(a,b=3){$.has(a)||$.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=$.get(a);return c.max=b,c}function aa(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function ab(a){let b=$.get(a);if(b){for(;b.queue.length>0&&b.running<b.max&&!aa(b);){let c=b.queue.shift();if(!c)break;clearTimeout(c.timer),b.running++,c.resolve(ac(a))}0===b.running&&0===b.queue.length&&$.delete(a)}}function ac(a){let b=!1;return()=>{if(b)return;b=!0;let c=$.get(a);if(c&&c.running>0){if(c.running--,0===c.running&&0===c.queue.length)return void $.delete(a);ab(a)}}}function ad(a,{maxConcurrency:b=3,timeoutMs:c=3e4,maxQueueSize:d}={}){let e=_(a,b);if(e.running<e.max&&!aa(e))return e.running++,Promise.resolve(ac(a));if("number"==typeof d&&d>=0&&e.queue.length>=d){let b=Error(`Semaphore queue full (${d}) for ${a}`);return b.code="SEMAPHORE_QUEUE_FULL",0===e.running&&0===e.queue.length&&$.delete(a),Promise.reject(b)}return new Promise((b,d)=>{let f=setTimeout(()=>{let b=e.queue.findIndex(a=>a.timer===f);-1!==b&&e.queue.splice(b,1);let g=Error(`Semaphore timeout after ${c}ms for ${a}`);g.code="SEMAPHORE_TIMEOUT",d(g)},c);e.queue.push({resolve:b,reject:d,timer:f})})}var ae=c(15300),af=c(40669);let ag=/<omniModel>([^<]+)<\/omniModel>/,ah=/(?:\\n|\n|\r){0,16}<omniModel>([^<]+)<\/omniModel>(?:\\n|\n|\r){0,16}/g;var ai=c(50102),aj=c(61408);function ak(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function al(a){let b=new Set;return a.filter(a=>!b.has(a.executionKey)&&(b.add(a.executionKey),!0))}var am=c(80238);let an=["function","class","import","def","SELECT","async","await","const","let","var","return","```","algorithm","compile","debug","refactor","typescript","python","javascript","code","implement","write a","create a component","endpoint","repository","deploy","install","script","api","database","query","schema","interface","generic","enum","module","package","dependency","fun\xe7\xe3o","classe","importar","definir","consulta","ass\xedncrono","aguardar","constante","vari\xe1vel","retornar","algoritmo","compilar","depurar","refatorar","c\xf3digo","implementar","criar um","componente","como fazer","reposit\xf3rio","configurar","instalar","banco de dados","escrever uma fun\xe7\xe3o","criar uma classe","funci\xf3n","clase","importar","definir","consulta","as\xedncrono","esperar","constante","variable","retornar","algoritmo","compilar","depurar","refactorizar","c\xf3digo","implementar","函数","类","导入","定义","查询","异步","等待","常量","变量","返回","算法","编译","调试","代码","関数","クラス","インポート","非同期","定数","変数","コード","アルゴリズム","функция","класс","импорт","запрос","асинхронный","константа","переменная","алгоритм","код","funktion","klasse","importieren","abfrage","asynchron","konstante","variable","algorithmus","code","함수","클래스","가져오기","정의","쿼리","비동기","대기","상수","변수","반환","코드","دالة","فئة","استيراد","استعلام","غير متزامن","ثابت","متغير","كود","خوارزمية"],ao=["prove","theorem","derive","step by step","chain of thought","formally","mathematical","proof","logically","analyze","reasoning","deduce","infer","hypothesis","convergence","provar","teorema","derivar","passo a passo","cadeia de pensamento","formalmente","matem\xe1tico","prova","logicamente","analisar","racioc\xednio","deduzir","inferir","hip\xf3tese","demonstrar","c\xe1lculo","equa\xe7\xe3o diferencial","integral","otimiza\xe7\xe3o","demostrar","teorema","derivar","paso a paso","formalmente","matem\xe1tico","l\xf3gicamente","证明","定理","推导","逐步","思维链","数学","逻辑","分析","証明","定理","導出","論理的","分析","доказать","теорема","шаг за шагом","математически","логически","beweisen","theorem","schritt f\xfcr schritt","mathematisch","logisch","증명","정리","단계별","수학적","논리적","إثبات","نظرية","خطوة بخطوة","رياضي","منطقياً"],ap=["calculate","solve","equation","proof","formula","integral","derivative","theorem","algebra","geometry","arithmetic","polynomial","matrix","vector","statistics","probability","calcular","resolver","equa\xe7\xe3o","f\xf3rmula","integral","derivada","teorema","\xe1lgebra","geometria","aritm\xe9tica","polin\xf4mio","matriz","vetor","estat\xedstica","probabilidade","calcular","resolver","ecuaci\xf3n","f\xf3rmula","integral","derivada","teorema","\xe1lgebra","geometr\xeda","aritm\xe9tica","polinomio","matriz","vector","estad\xedstica","probabilidad","计算","求解","方程","公式","积分","导数","代数","几何","算术","多项式","矩阵","向量","统计","概率","計算","方程式","公式","積分","微分","代数","幾何学","算術","多項式","行列","ベクトル","統計","確率","вычислить","решить","уравнение","формула","интеграл","производная","алгебра","геометрия","арифметика","полином","матрица","вектор","статистика","вероятность","berechnen","gleichung","formel","integral","ableitung","algebra","geometrie","arithmetik","polynom","matrix","vektor","statistik","wahrscheinlichkeit","계산","방정식","공식","적분","미분","대수","기하학","산술","다항식","행렬","벡터","통계","확률","حل","معادلة","صيغة","تكامل","مشتق","جبر","هندسة","حساب","متعدد الحدود","مصفوفة","متجه","إحصاء","احتمال"],aq=["write","story","poem","creative","brainstorm","blog","article","copywrite","marketing","narrative","fiction","screenplay","lyrics","essay","escrever","hist\xf3ria","poema","criativo","brainstorm","blog","artigo","reda\xe7\xe3o","marketing","narrativa","fic\xe7\xe3o","roteiro","letras","ensaio","escribir","historia","poema","creativo","blog","art\xedculo","redacci\xf3n","marketing","narrativa","ficci\xf3n","guion","letras","ensayo","写","故事","诗","创意","头脑风暴","博客","文章","文案","营销","叙事","小说","剧本","歌词","散文","書く","物語","詩","クリエイティブ","ブログ","記事","コピーライティング","マーケティング","ナラティブ","小説","脚本","歌詞","エッセイ","написать","история","стихотворение","креативный","блог","статья","копирайтинг","маркетинг","нарратив","фантастика","сценарий","текст песни","эссе","schreiben","geschichte","gedicht","kreativ","blog","artikel","texten","marketing","erz\xe4hlung","fiktion","drehbuch","songtext","aufsatz","쓰기","이야기","시","창의적","블로그","기사","카피라이팅","마케팅","서사","소설","시나리오","가사","에세이","كتابة","قصة","قصيدة","إبداعي","مقال","تسويق","سرد","رواية","سيناريو","كلمات أغنية","مقالة"],ar=["what is","define","translate","hello","yes or no","summarize","list","tell me","who is","o que \xe9","definir","traduzir","ol\xe1","oi","sim ou n\xe3o","resumir","listar","me diga","quem \xe9","quando foi","onde fica","explique brevemente","de forma simples","qu\xe9 es","definir","traducir","hola","resumir","listar","什么是","定义","翻译","你好","总结","列出","что такое","определить","перевести","привет","резюмировать","was ist","definieren","\xfcbersetzen","hallo","zusammenfassen","이란","정의","번역","안녕","요약","ما هو","تعريف","ترجمة","مرحبا","ملخص"],as={enabled:!0,simpleMaxWords:60};var at=c(26621);let au={coding:{"claude-sonnet":.95,"claude-opus":.92,"claude-haiku":.78,"gpt-4o":.9,"gpt-4o-mini":.8,"gpt-4-turbo":.88,o1:.93,o3:.95,"o4-mini":.88,codex:.98,"gemini-pro":.85,"gemini-flash":.8,"gemini-2.5-pro":.92,"gemini-2.5-flash":.82,"deepseek-coder":.9,"deepseek-v3":.85,"deepseek-r1":.88,"deepseek-chat":.84,"deepseek-v3.2":.86,qwen:.78,llama:.72,mistral:.75,mixtral:.77,"grok-4-fast":.8,"grok-4":.82,"grok-3":.8,"kimi-k2":.82,"glm-5.1":.78,"glm-5":.78,"minimax-m2.5":.75,"minimax-m2":.72},review:{"claude-sonnet":.92,"claude-opus":.95,"claude-haiku":.7,"gpt-4o":.88,"gpt-4o-mini":.72,o1:.9,o3:.92,"gemini-pro":.9,"gemini-2.5-pro":.93,"gemini-flash":.75,"deepseek-r1":.85,"deepseek-v3":.8},planning:{"claude-opus":.95,"claude-sonnet":.9,"gpt-4o":.88,o1:.92,o3:.95,"gemini-2.5-pro":.93,"gemini-pro":.88,"deepseek-r1":.85},analysis:{"claude-opus":.95,"claude-sonnet":.92,"gemini-2.5-pro":.95,"gemini-pro":.88,"gemini-3.1-pro":.95,"gpt-4o":.85,o1:.9,o3:.93,"deepseek-r1":.88,"deepseek-chat":.8,"kimi-k2":.82,"glm-5.1":.82,"glm-5":.78,"minimax-m2.5":.76},debugging:{"claude-sonnet":.93,"claude-opus":.9,"gpt-4o":.88,o1:.85,"deepseek-coder":.9,"deepseek-v3":.82,"gemini-flash":.78,codex:.92},documentation:{"claude-sonnet":.9,"claude-opus":.88,"gpt-4o":.92,"gpt-4o-mini":.85,"gemini-pro":.88,"gemini-flash":.82,"deepseek-v3":.78},default:{"claude-sonnet":.85,"claude-opus":.85,"gpt-4o":.85,"gemini-pro":.8,"gemini-3.1-pro":.85,"deepseek-v3":.75,"deepseek-chat":.74,"gemini-flash":.72,"grok-4-fast":.72,"grok-4":.74,"grok-3":.73,"kimi-k2":.76,"glm-5.1":.75,"glm-5":.7,"minimax-m2.5":.7}},av=[{pattern:"coder",taskType:"coding",boost:.15},{pattern:"code",taskType:"coding",boost:.1},{pattern:"fast",taskType:"coding",boost:.05},{pattern:"thinking",taskType:"planning",boost:.1},{pattern:"thinking",taskType:"analysis",boost:.1}],aw={premium:{coding:.92,review:.93,planning:.94,analysis:.95,debugging:.9,documentation:.88,default:.85},standard:{coding:.85,review:.84,planning:.85,analysis:.85,debugging:.82,documentation:.85,default:.78},fast:{coding:.78,review:.72,planning:.7,analysis:.72,debugging:.75,documentation:.8,default:.72},budget:{coding:.65,review:.6,planning:.55,analysis:.58,debugging:.6,documentation:.7,default:.55}},ax=new Map;function ay(a,b,c){let d=`${a}:${b}:${c}`;if(ax.has(d))return ax.get(d);try{!1;return null}catch{return null}}let az=null;function aA(a,b){return function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=ay(c,d,"user_override");if(null!==e)return{score:e,source:"user_override"};let f=ay(c,d,"arena_elo");if(null!==f)return{score:f,source:"arena_elo"};let g=function(a,b){if(!a.endsWith(aB))return null;let c=a.slice(0,-aB.length);return 0===c.length||c===a?null:ay(c,b,"arena_elo")}(c,d);if(null!==g)return{score:g,source:"arena_elo_free_alias"};let h=function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=ay(c,d,"models_dev_tier");if(null!==e)return e;let f=function(){if(az)return az;try{let a=(0,at.sm)().prepare("SELECT * FROM model_capabilities").all(),b={};for(let c of a){let a="string"==typeof c.model_id?c.model_id:"";a&&(b[a.toLowerCase()]={tool_call:!0===c.tool_call||1===c.tool_call||!1!==c.tool_call&&0!==c.tool_call&&null,reasoning:!0===c.reasoning||1===c.reasoning||!1!==c.reasoning&&0!==c.reasoning&&null,limit_context:"number"==typeof c.limit_context?c.limit_context:null})}return az=b,b}catch{return null}}();if(!f)return null;let g=f[c];if(!g)return null;let h=aw[!0===g.reasoning?"premium":!0===g.tool_call&&(g.limit_context??0)>=128e3?"standard":!0===g.tool_call?"fast":"budget"];return h?h[d]??h.default??null:null}(c,d);if(null!==h)return{score:h,source:"models_dev_tier"};let i=function(a,b){for(let[c,d]of Object.entries(au[b]||au.default))if(a.includes(c))return d;return null}(c,d);return null!==i?{score:i,source:"fitness_table"}:{score:function(a,b){let c=.5;for(let d of av)a.includes(d.pattern)&&b===d.taskType&&(c+=d.boost);return Math.min(1,c)}(c,d),source:"wildcard_boost"}}(a,b).score}let aB="-free";function aC(a){return Number.isFinite(a)?Math.min(1,Math.max(0,a)):0}let aD="free",aE={"gpt-4o":{inputCostPer1M:2.5,outputCostPer1M:10,isFree:!1},"gpt-4o-mini":{inputCostPer1M:.15,outputCostPer1M:.6,isFree:!1},"claude-fable-5":{inputCostPer1M:15,outputCostPer1M:75,isFree:!1},"claude-opus-4-8":{inputCostPer1M:15,outputCostPer1M:75,isFree:!1},"claude-opus-4-7":{inputCostPer1M:15,outputCostPer1M:75,isFree:!1},"claude-sonnet-4-6":{inputCostPer1M:3,outputCostPer1M:15,isFree:!1},"claude-haiku-4-5":{inputCostPer1M:.8,outputCostPer1M:4,isFree:!1},"gemini-2.5-flash":{inputCostPer1M:.15,outputCostPer1M:.6,isFree:!1},"gemini-2.5-pro":{inputCostPer1M:1.25,outputCostPer1M:5,isFree:!1},"deepseek-chat":{inputCostPer1M:.27,outputCostPer1M:1.1,isFree:!1},"deepseek-reasoner":{inputCostPer1M:.55,outputCostPer1M:2.19,isFree:!1},"glm-4.7":{inputCostPer1M:.6,outputCostPer1M:.6,isFree:!1},"glm-5.1":{inputCostPer1M:.5,outputCostPer1M:.5,isFree:!1},"minimax-m2.1":{inputCostPer1M:.2,outputCostPer1M:.2,isFree:!1},"grok-4-fast":{inputCostPer1M:.2,outputCostPer1M:.5,isFree:!1},"kimi-k2-thinking":{inputCostPer1M:0,outputCostPer1M:0,isFree:!0},"qwen3-coder-plus":{inputCostPer1M:0,outputCostPer1M:0,isFree:!0},"longcat-2.0":{inputCostPer1M:.75,outputCostPer1M:2.95,isFree:!0,freeQuotaLimit:1e7}};function aF(a,b){let c=b.toLowerCase();if(aE[c])return aE[c];let d=`${a}/${b}`.toLowerCase();return aE[d]?aE[d]:{inputCostPer1M:5,outputCostPer1M:15,isFree:!1}}var aG=c(44046),aH=c(40615);let aI=aG.Ik({provider:aG.Yj().min(1),tier:aG.k5(["free","cheap","premium"])}),aJ=aG.Ik({provider:aG.Yj().min(1),modelPattern:aG.Yj().min(1),tier:aG.k5(["free","cheap","premium"])});aG.Ik({version:aG.Yj().default("1.0.0"),defaults:aG.Ik({freeThreshold:aG.ai().min(0).default(0),cheapThreshold:aG.ai().min(0).default(1)}),providerOverrides:aG.YO(aI).default([]),modelOverrides:aG.YO(aJ).default([]),freeProviders:aG.YO(aG.Yj()).default([])});let aK={version:"1.0.0",defaults:{freeThreshold:0,cheapThreshold:1},providerOverrides:[],modelOverrides:[],freeProviders:[...new Set(["kiro","qoder","pollinations","longcat","cloudflare-ai","qwen","nvidia-nim","cerebras","groq",...function(){try{let a=[];for(let b of Object.values(aH.vh)){if(!b||"object"!=typeof b||!0!==b.noAuth)continue;let c=b.serviceKinds;(!Array.isArray(c)||0===c.length||c.includes("llm"))&&"string"==typeof b.id&&b.id.length>0&&a.push(b.id)}return a}catch{return[]}}()])]},aL=new Map;function aM(a,b){let c,d,e=`${a}::${b}`;if(aL.has(e))return aL.get(e);if(aK.freeProviders.includes(a.toLowerCase())){let c={provider:a,model:b,tier:aD,reason:`Provider '${a}' is in explicit free providers list`,costPer1MInput:0,costPer1MOutput:0,hasFreeTier:!0};return aL.set(e,c),c}let f=aK.providerOverrides.find(b=>b.provider.toLowerCase()===a.toLowerCase());if(f){let c=aF(a,b),d={provider:a,model:b,tier:f.tier,reason:`Provider-level override: '${a}' → ${f.tier}`,costPer1MInput:c.inputCostPer1M,costPer1MOutput:c.outputCostPer1M,hasFreeTier:c.isFree,freeQuotaLimit:c.freeQuotaLimit};return aL.set(e,d),d}let g=aK.modelOverrides.find(c=>{var d;let e;return c.provider.toLowerCase()===a.toLowerCase()&&(d=c.modelPattern,e=d.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*"),RegExp(`^${e}$`,"i").test(b))});if(g){let c=aF(a,b),d={provider:a,model:b,tier:g.tier,reason:`Model-level override: '${a}/${b}' matches '${g.modelPattern}' → ${g.tier}`,costPer1MInput:c.inputCostPer1M,costPer1MOutput:c.outputCostPer1M,hasFreeTier:c.isFree,freeQuotaLimit:c.freeQuotaLimit};return aL.set(e,d),d}let h=aF(a,b);h.isFree||h.inputCostPer1M<=aK.defaults.freeThreshold?(c=aD,d=`Cost-based: $${h.inputCostPer1M}/M input ≤ free threshold ($${aK.defaults.freeThreshold}/M)`):h.inputCostPer1M<=aK.defaults.cheapThreshold?(c="cheap",d=`Cost-based: $${h.inputCostPer1M}/M input ≤ cheap threshold ($${aK.defaults.cheapThreshold}/M)`):(c="premium",d=`Cost-based: $${h.inputCostPer1M}/M input > cheap threshold ($${aK.defaults.cheapThreshold}/M)`);let i={provider:a,model:b,tier:c,reason:d,costPer1MInput:h.inputCostPer1M,costPer1MOutput:h.outputCostPer1M,hasFreeTier:h.isFree,freeQuotaLimit:h.freeQuotaLimit};return aL.set(e,i),i}let aN={quota:.15,health:.2,costInv:.15,latencyInv:.12,taskFit:.08,stability:.05,tierPriority:.05,tierAffinity:.05,specificityMatch:.05,contextAffinity:.05,resetWindowAffinity:0,connectionDensity:.05};function aO(a,b){return aC(b.quota*a.quota+b.health*a.health+b.costInv*a.costInv+b.latencyInv*a.latencyInv+b.taskFit*a.taskFit+b.stability*a.stability+b.tierPriority*a.tierPriority+(b.tierAffinity??0)*a.tierAffinity+(b.specificityMatch??0)*a.specificityMatch+(b.contextAffinity??0)*a.contextAffinity+(b.resetWindowAffinity??0)*a.resetWindowAffinity+(b.connectionDensity??0)*a.connectionDensity)}function aP(a,b,c,d,e){var f,g;let h=Math.max(...b.map(a=>a.costPer1MTokens),.001),i=Math.max(...b.map(a=>a.p95LatencyMs),1),j=Math.max(...b.map(a=>a.latencyStdDev),.001);return{quota:aC(a.quotaRemaining/100),health:"CLOSED"===a.circuitBreakerState?1:.5*("HALF_OPEN"===a.circuitBreakerState),costInv:aC(1-a.costPer1MTokens/h),latencyInv:aC(1-a.p95LatencyMs/i),taskFit:aC(d(a.model,c)),stability:aC(1-a.latencyStdDev/j),tierPriority:(f=a.accountTier,g=a.quotaResetIntervalSecs,Math.min(1,.8*(({ultra:1,pro:.67,standard:.33,free:0})[f?.toLowerCase()??""]??.33)+.2*(null!=g&&g>0?Math.max(0,1-g/2592e3):0))),tierAffinity:function(a,b){if(!b)return .5;try{let c=aM(a.provider,a.model),d=["free","cheap","premium"],e=d.indexOf(c.tier),f=d.indexOf(b.recommendedMinTier);if(e===f)return 1;if(1===Math.abs(e-f))return .7;return .3}catch{return .5}}(a,e),specificityMatch:function(a,b){if(!b)return .5;try{let c=aM(a.provider,a.model),d=b.specificity.score;if("free"===c.tier)return d<=15?.9:.2;if("cheap"===c.tier)return d>15&&d<=50?.9:.4;if("premium"===c.tier)return d>50?.9:.3;return .5}catch{return .5}}(a,e),contextAffinity:aC(a.contextAffinity??.5),resetWindowAffinity:aC(a.resetWindowAffinity??.5),connectionDensity:aC(((a.connectionPoolSize??1)-1)/10)}}function aQ(a,b,c=aN,d=()=>.5,e){return a.map(f=>{let g=aP(f,a,b,d,e);return{provider:f.provider,model:f.model,score:aO(g,c),factors:g,connectionId:f.connectionId}}).sort((a,b)=>b.score-a.score)}var aR=c(87094),aS=c(57247);let aT=Number(process.env.QUOTA_SOFT_DEPRIORITIZE_FACTOR??"0.7"),aU=Number(process.env.STATUS_SOFT_DEPRIORITIZE_FACTOR??"0.5"),aV=new Map;function aW(a,b,c){if(!a||!b)return;let d=aV.get(a);if(!d)return;let e=d.get(b);e&&(e.quotaSoftPenalty=c)}function aX(a){return Array.isArray(a)?a.map(a=>"string"==typeof a?a.trim():"").filter(Boolean):"string"==typeof a?a.split(",").map(a=>a.trim()).filter(Boolean):[]}async function aY(a,b,c){let{tags:d,matchMode:e}=void 0;if(0===d.length||0===a.length)return a;let f=Array.from(new Set(a.map(a=>a.providerId||a.provider))).filter(a=>"string"==typeof a&&a.length>0),g=new Map;await Promise.all(f.map(async a=>{try{let b=await (0,aR.P)({provider:a,isActive:!0});g.set(a,Array.isArray(b)?b:[])}catch(b){c.warn?.("COMBO",`Tag routing failed to load connections for provider=${a}: ${b instanceof Error?b.message:String(b)}`),g.set(a,[])}}));let h=a.reduce((a,b)=>{let c=b.providerId||b.provider,d=(g.get(c)?.filter(a=>{let c="string"==typeof a.id&&a.id.trim().length>0?a.id:null;return!!c&&(!b.connectionId||c===b.connectionId)})||[]).filter(a=>void a.providerSpecificData).map(a=>a.id).filter(a=>"string"==typeof a);if(0===d.length)return a;if(b.connectionId)return a.push(b),a;let e=Array.from(new Set(d)),f=Array.isArray(b.allowedConnectionIds)?b.allowedConnectionIds.filter(a=>"string"==typeof a&&a.length>0):null,h=f&&f.length>0?e.filter(a=>f.includes(a)):e;return 0===h.length||a.push({...b,allowedConnectionIds:h}),a},[]);return 0===h.length?(c.info?.("COMBO",`Tag routing matched 0/${a.length} targets for [${d.join(", ")}] (${e}); falling back to the full target set`),a):(c.info?.("COMBO",`Tag routing matched ${h.length}/${a.length} targets for [${d.join(", ")}] (${e})`),h)}async function aZ(a,b){let c=b?.autoConfig||(ak(b?.config?.auto)?(b?.config).auto:null)||b?.config||{};if(Array.isArray(c?.candidatePool)&&c.candidatePool.length>0)return a;try{let b=await (0,aR.P)({isActive:!0});for(let c of[...new Set(b.map(a=>a.provider).filter(a=>"string"==typeof a&&a.length>0))])for(let b of(0,aS.SM)(c)){let d=`${c}/${b.id}`;a.some(a=>a.modelStr===d)||a.push({kind:"model",stepId:d,executionKey:d,provider:c,providerId:c,modelStr:d,weight:1,connectionId:null,label:null})}}catch{}return a}var a$=c(92085);let a_=()=>void 0,a0={"ship-fast":{quota:.14,health:.28,costInv:.05,latencyInv:.32,taskFit:.1,stability:0,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:.01,resetWindowAffinity:0,connectionDensity:.05},"cost-saver":{quota:.14,health:.19,costInv:.37,latencyInv:.05,taskFit:.1,stability:.05,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05},"quality-first":{quota:.1,health:.18,costInv:.05,latencyInv:.05,taskFit:.37,stability:.15,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05},"offline-friendly":{quota:.37,health:.28,costInv:.1,latencyInv:.05,taskFit:0,stability:.1,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05},"reliability-first":{quota:.14,health:.37,costInv:.04,latencyInv:.05,taskFit:.1,stability:.2,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05}};class a1{isExcluded(a){let b=this.exclusions.get(a);return!(!b||Date.now()-b.excludedAt>b.cooldownMs)}evaluate(a,b,c){let d=this.exclusions.get(a);if(d&&b>=.3&&Date.now()-d.excludedAt>d.cooldownMs)return this.exclusions.delete(a),{excluded:!1,reason:`Re-admitted: score ${b.toFixed(2)} >= 0.3`};if(this.isExcluded(a))return"HALF_OPEN"===c&&d?(d.probeCount++,{excluded:!1,isProbe:!0,reason:`Probe request #${d.probeCount}`}):{excluded:!0,reason:d?.reason||"Excluded"};if(b<.2){let c=d?Math.min(2*d.cooldownMs,18e5):3e5;return this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:c,reason:`Score ${b.toFixed(2)} < 0.2`,probeCount:0}),{excluded:!0,reason:`Excluded: score ${b.toFixed(2)} below threshold`}}return"OPEN"===c?(this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:3e5,reason:"Circuit breaker OPEN",probeCount:0}),{excluded:!0,reason:"Circuit breaker OPEN"}):{excluded:!1}}recordProbeResult(a,b){let c=this.exclusions.get(a);c&&(b&&c.probeCount>=3?this.exclusions.delete(a):b||(c.cooldownMs=Math.min(2*c.cooldownMs,18e5),c.excludedAt=Date.now(),c.probeCount=0))}updateIncidentMode(a){let b=a.length;if(0===b)return this.incidentMode=!1,!1;let c=a.filter(a=>"OPEN"===a).length;return this.incidentMode=c/b>.5,this.incidentMode}isInIncidentMode(){return this.incidentMode}getExclusions(){return[...this.exclusions.values()]}getStatus(){let a=Date.now();return{exclusionCount:this.exclusions.size,incidentMode:this.incidentMode,exclusions:[...this.exclusions.values()].map(b=>({provider:b.provider,reason:b.reason,remainingMs:Math.max(0,b.cooldownMs-(a-b.excludedAt))}))}}constructor(){this.exclusions=new Map,this.incidentMode=!1}}let a2=null,a3={smart:{top:.5,mid:.3,rest:.2},fast:{top:.3,mid:.5,rest:.2},cheap:{top:.2,mid:.3,rest:.5},coding:{top:.6,mid:.25,rest:.15},default:{top:.45,mid:.35,rest:.2}};class a4{constructor(a){this.tierCounters=new Map,this.rrCounter=0,this.comboName=a}pick(a){if(0===a.length)throw Error(`ScoreTierRotator: no candidates to pick from for combo=${this.comboName}`);if(1===a.length)return a[0];let b=function(a){if(0===a.length)return{top:[],mid:[],rest:[]};let b=a[0].score,c=b-a[a.length-1].score,d=[],e=[],f=[];for(let g of a){let a=b-g.score;a<=1e-4?d.push(g):c<=1e-4||a<=.3*c?e.push(g):f.push(g)}if(0===e.length&&f.length>0){let a=Math.ceil(f.length/2);e.push(...f.splice(0,a))}return{top:d,mid:e,rest:f}}(a),c=a[0].score,d=a[a.length-1].score;if(b.top.length>0&&c-d>=.1)return this.pickFromPool(b.top);let e=function(a){let b=a.toLowerCase();if(a3[b])return a3[b];for(let a of Object.keys(a3))if(b.startsWith(`${a}-`)||b.includes(a))return a3[a];return a3.default}(this.comboName);return function(a,b,c,d){let e={top:a.top.length>0?b.top:0,mid:a.mid.length>0?b.mid:0,rest:a.rest.length>0?b.rest:0},f=e.top+e.mid+e.rest;if(f<=0)return d();let g=Math.random()*f,h=0;return e.top>0&&(h+=e.top)>=g?c(a.top):e.mid>0&&(h+=e.mid)>=g?c(a.mid):e.rest>0?c(a.rest):d()}(b,e,a=>this.pickFromPool(a),()=>this.advance(b,e,a))}advance(a,b,c){for(let c of["top","mid","rest"])if(a[c].length>0&&b[c]>0){let b=this.tierCounters.get(c)??0,d=a[c][b%a[c].length];return this.tierCounters.set(c,b+1),d}return a.top[0]??a.mid[0]??a.rest[0]??c[0]}pickFromPool(a){if(0===a.length)throw Error("pickFromPool: empty pool");if(1===a.length)return a[0];let b=a[this.rrCounter%a.length];return this.rrCounter=(this.rrCounter+1)%a.length,b}}let a5=new Map;function a6(a){let b=a5.get(a);return b||(b=new a4(a),a5.set(a,b)),b}c(58353);class a7{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=aQ(c.length>0?c:a,b.taskType,void 0,aA),e=d[0];if(!e)throw Error("[RulesStrategy] No candidates to score");return{provider:e.provider,model:e.model,strategy:this.name,reason:`RulesStrategy: score=${e.score.toFixed(3)} (quota=${e.factors.quota.toFixed(2)}, health=${e.factors.health.toFixed(2)}, cost=${e.factors.costInv.toFixed(2)}, taskFit=${e.factors.taskFit.toFixed(2)})`,candidatesConsidered:d.length,finalScore:e.score}}constructor(){this.name="rules",this.description="6-factor weighted scoring: quota, health, cost, latency, taskFit, stability"}}class a8{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a,e=[...d].sort((a,b)=>a.costPer1MTokens-b.costPer1MTokens)[0];if(!e)throw Error("[CostStrategy] No candidates available");return{provider:e.provider,model:e.model,strategy:this.name,reason:`CostStrategy: cheapest at $${e.costPer1MTokens.toFixed(3)}/1M tokens`,candidatesConsidered:d.length,finalScore:0===e.costPer1MTokens?1:1/e.costPer1MTokens}}constructor(){this.name="cost",this.description="Always selects cheapest available provider (by costPer1MTokens)"}}function a9(a){let b=Number(a);return Number.isFinite(b)&&b>0?b:null}function ba(a,b,c=1){return Math.max(...a.map(a=>a9(b(a))??0),c)}function bb(a,b){return null==a?.5:be(a,b)}class bc{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a;if(0===d.length)throw Error("[LatencyStrategy] No candidates available");let e=ba(d,a=>a.p95LatencyMs),f=ba(d,a=>a.avgTtftMs??a.p95LatencyMs),g=ba(d,a=>a.avgE2ELatencyMs??a.p95LatencyMs),h=ba(d,a=>a.avgTokensPerSecond),i=ba(d,a=>a.latencyStdDev,.001),j=d.map(a=>{let b,c=a9(a.p95LatencyMs),d=a9(a.avgTtftMs)??c,j=a9(a.avgE2ELatencyMs)??c,k=a9(a.avgTokensPerSecond),l=Number.isFinite(b=Number(a.failureRate??a.errorRate))&&b>=0?Math.min(1,b):0,m=bg(a),n=bb(c,e),o=bb(d,f),p=bb(j,g),q=null==k?.5:aC(k/Math.max(h,1e-6)),r=1-l,s=.25*o+.2*q+.18*p+.12*n+.15*r+.05*m+.05*bb(a9(a.latencyStdDev),i);return{candidate:a,score:s*Math.max(.05,r*r)*Math.max(.25,m),ttft:d,e2e:j,tps:k,failureRate:l}}).sort((a,b)=>b.score-a.score)[0];if(!j)throw Error("[LatencyStrategy] No candidates available");return{provider:j.candidate.provider,model:j.candidate.model,strategy:this.name,reason:`LatencyStrategy: ttft=${j.ttft??"n/a"}ms, tps=${j.tps??"n/a"}, e2e=${j.e2e??"n/a"}ms, p95=${j.candidate.p95LatencyMs}ms, failRate=${(100*j.failureRate).toFixed(2)}%`,candidatesConsidered:d.length,finalScore:j.score}}constructor(){this.name="latency",this.description="Prioritizes the fastest reliable provider-model pair using TTFT, TPS, E2E latency, health, fail rate, and stability"}}function bd(a){let b=Number(a);return Number.isFinite(b)&&b>0?b:void 0}function be(a,b){return!Number.isFinite(a)||a<0?0:!Number.isFinite(b)||b<=0?1:aC(1-a/b)}function bf(a,b){return b<=0?+(0===a):aC(b/Math.max(a,1e-6))}function bg(a){return"CLOSED"===a.circuitBreakerState?1:.5*("HALF_OPEN"===a.circuitBreakerState)}class bh{select(a,b){let c,d=a.filter(a=>"OPEN"!==a.circuitBreakerState),e=d.length>0?d:a;if(0===e.length)throw Error("[SLAStrategy] No candidates available");let f=Math.max(...e.map(a=>a.costPer1MTokens),.001),g=Math.max(...e.map(a=>a.latencyStdDev),.001),h={targetP95Ms:bd(b.sla?.targetP95Ms)??2e3,maxErrorRate:(Number.isFinite(c=Number(b.sla?.maxErrorRate))&&c>=0?Math.min(1,c):void 0)??.05,maxCostPer1MTokens:bd(b.sla?.maxCostPer1MTokens)??0,hardConstraints:b.sla?.hardConstraints===!0},i=e.map(a=>{let b,c=bf(a.p95LatencyMs,h.targetP95Ms),d=bf(a.errorRate,h.maxErrorRate),e=h.maxCostPer1MTokens>0?bf(a.costPer1MTokens,h.maxCostPer1MTokens):be(a.costPer1MTokens,f),i=be(a.latencyStdDev,g),j=bg(a),k=(b=+("OPEN"===a.circuitBreakerState),a.p95LatencyMs>h.targetP95Ms&&(b+=(a.p95LatencyMs-h.targetP95Ms)/h.targetP95Ms),a.errorRate>h.maxErrorRate&&(b+=h.maxErrorRate>0?(a.errorRate-h.maxErrorRate)/h.maxErrorRate:a.errorRate),h.maxCostPer1MTokens>0&&a.costPer1MTokens>h.maxCostPer1MTokens&&(b+=(a.costPer1MTokens-h.maxCostPer1MTokens)/h.maxCostPer1MTokens),b);return{candidate:a,violationScore:k,score:.35*c+.35*d+.15*j+.1*e+.05*i}}).sort((a,b)=>h.hardConstraints&&a.violationScore-b.violationScore||b.score-a.score),j=i[0];if(!j)throw Error("[SLAStrategy] No candidates available after scoring");let k=i.some(a=>0===a.violationScore);return{provider:j.candidate.provider,model:j.candidate.model,strategy:this.name,reason:`SLAStrategy: p95=${j.candidate.p95LatencyMs}ms/${h.targetP95Ms}ms, errorRate=${(100*j.candidate.errorRate).toFixed(2)}%/${(100*h.maxErrorRate).toFixed(2)}%, cost=$${j.candidate.costPer1MTokens.toFixed(3)}/1M${k?"":"; no candidate met all SLA constraints"}`,candidatesConsidered:e.length,finalScore:j.score}}constructor(){this.name="sla-aware",this.description="Selects the provider most likely to satisfy latency, error-rate, and cost SLOs"}}class bi{select(a,b){if(!1===b.lkgpEnabled)return bp("rules").select(a,b);if(b.lastKnownGoodProvider){let c=a.filter(a=>a.provider===b.lastKnownGoodProvider&&"OPEN"!==a.circuitBreakerState);if(c.length>0){let a=c[0];return{provider:a.provider,model:a.model,strategy:this.name,reason:`LKGP: using last known good provider ${a.provider}`,candidatesConsidered:1,finalScore:1}}}return bp("rules").select(a,b)}constructor(){this.name="lkgp",this.description="Tries last known good provider first, then falls back to rules"}}let bj=new Map,bk=new a7,bl=new a8,bm=new bc,bn=new bh,bo=new bi;function bp(a){let b=bj.get(a);return b||(console.warn(`[RouterStrategy] Strategy '${a}' not found, falling back to 'rules'`),bk)}bj.set("rules",bk),bj.set("cost",bl),bj.set("eco",bl),bj.set("latency",bm),bj.set("fast",bm),bj.set("sla-aware",bn),bj.set("sla",bn),bj.set("lkgp",bo);let bq=["coding","fast","cheap","offline","smart","lkgp"],br=()=>void 0,bs=()=>void 0,bt={"best-reasoning":{minFitness:.85},cheapest:{maxFitness:.75},moderate:{minFitness:.6,maxFitness:.9}},bu={code:"code",math:"math",reasoning:"reasoning",creative:"creative",medium:"medium",simple:"simple"};async function bv({body:a,combo:b,handleChatCore:c,log:d,settings:e,signal:f}){let g=b.config;if(!(g?.pipeline_enabled??e.pipeline_enabled))throw d.info("PIPELINE","Pipeline disabled for this combo"),Error("PIPELINE_DISABLED");let h=a.messages||[],i=function(a){let b=0;for(let c of a)if("string"==typeof c.content)b+=Math.ceil(c.content.length/4);else if(Array.isArray(c.content))for(let a of c.content)"object"==typeof a&&null!==a&&"string"==typeof a.text&&(b+=Math.ceil(a.text.length/4));return b}(h),j=g?.skip_pipeline_for_tokens_under??e.skip_pipeline_for_tokens_under??50;if(i<j)throw d.info("PIPELINE",`Token estimate ${i} < threshold ${j}, skipping pipeline`),Error("PIPELINE_TOKEN_THRESHOLD");let k=[...h].reverse().find(a=>"user"===a.role),l="string"==typeof k?.content?k.content:Array.isArray(k?.content)?k.content.filter(a=>"text"===a.type).map(a=>a.text||"").join(" "):"",m=h.find(a=>"system"===a.role),n=function(a,b){let c=`${b??""} ${a}`.toLowerCase(),d=a.trim().split(/\s+/).length;for(let a of an)if(c.includes(a.toLowerCase()))return"code";for(let a of ap)if(c.includes(a.toLowerCase()))return"math";for(let a of ao)if(c.includes(a.toLowerCase()))return"reasoning";for(let a of aq)if(c.includes(a.toLowerCase()))return"creative";if(d<60){for(let a of ar)if(c.includes(a.toLowerCase()))return"simple"}return"medium"}(l,"string"==typeof m?.content?m.content:void 0),o=bu[n]??"simple";d.info("PIPELINE",`Intent: ${n} → task: ${o}`);let p=br(l,o),q=b.models,r=Array.isArray(q)?q.map(a=>{if("string"==typeof a)return a;let b=a?.model;return"string"==typeof b?b:null}).filter(a=>"string"==typeof a&&a.length>0):[],s=r.length?r:["deepseek-chat"],t=async({messages:b,stream:e,fitnessTier:f})=>{let g=f?function(a,b,c){let d=b.map(a=>({model:a,fitness:aA(a,c)})).sort((a,b)=>b.fitness-a.fitness),e=bt[a];if(!e)return d[0]?.model??"deepseek-chat";let f=d.filter(({fitness:a})=>(void 0===e.minFitness||!(a<e.minFitness))&&(void 0===e.maxFitness||!(a>e.maxFitness)));return f[0]?.model??d[0]?.model??"deepseek-chat"}(f,s,o):void 0,h={...a,messages:b,stream:e};d.info("PIPELINE",`Stage: tier=${f}, model=${g}, stream=${e}`);let i=await c(h,g);if(e)return{text:"",response:i};if(!i.ok){let a=await i.text().catch(()=>"unknown error");return d.warn("PIPELINE",`Stage returned ${i.status}: ${a.slice(0,200)}`),{text:""}}try{let a=await i.json(),b=a?.choices?.[0]?.message?.content;if("string"==typeof b)return{text:b};return{text:JSON.stringify(a)}}catch{return d.warn("PIPELINE","Failed to parse stage response as JSON"),{text:""}}},u=g?.max_reflection_loops??e.max_reflection_loops??1,v=async a=>t({...a,fitnessTier:a.fitnessTier}),w=await bs(p,v),x=0;for(;"fail"===w.reflectVerdict&&x<u;){x++,d.info("PIPELINE",`Reflection failed, re-running (loop ${x}/${u})`);let a=br(l,o),b=await bs(a,v);if("pass"===b.reflectVerdict){w=b;break}}let y=w.stages[w.stages.length-1];return y?.text===""&&w.text||d.info("PIPELINE",`Complete: ${w.stages.length} stages, fallback=${w.fallback}, verdict=${w.reflectVerdict}`),w}var bw=c(47215),bx=c(29385),by=c(77598);function bz(a){return"number"!=typeof a||!Number.isFinite(a)||a<=0?0:a>=1?1:a}function bA(a){return 1-Math.max(bz(a?.util5h),bz(a?.util7d))}async function bB(a,b){try{let d=(await c.e(1999).then(c.bind(c,71999))).getSaturation,[e,f]=await Promise.all([d(a,b,{unit:"percent",window:"5h"}),d(a,b,{unit:"percent",window:"weekly"})]);return{util5h:e,util7d:f}}catch{return}}let bC=new Map;function bD(a,b){let c=bC.get(a);if(c)c.connectionId=b,c.lastUsedAt=Date.now();else{let c=Date.now();for(let[a,b]of bC)c-b.lastUsedAt>9e5&&bC.delete(a);for(;bC.size>500;){let a=null,b=1/0;for(let[c,d]of bC)d.lastUsedAt<b&&(b=d.lastUsedAt,a=c);if(null===a)break;bC.delete(a)}bC.set(a,{connectionId:b,createdAt:Date.now(),lastUsedAt:Date.now()})}}async function bE(a,b){let c={targets:a,messageHash:null,stuck:!1};try{if(a.length<=1)return c;let d=function(a){let b;if(!Array.isArray(a)||0===a.length)return null;let c=a.find(a=>a?.role==="user");if(!c)return null;if("string"==typeof c.content)b=c.content;else{if(!Array.isArray(c.content))return null;b=c.content.filter(a=>null!=a&&"object"==typeof a).map(a=>"string"==typeof a.text?a.text:"").join("")}return b?(0,by.createHash)("sha256").update(b).digest("hex").slice(0,16):null}(b);if(!d)return c;let e=bC.get(d);if(!e)return{targets:a,messageHash:d,stuck:!1};if(Date.now()-e.lastUsedAt>9e5)return bC.delete(d),{targets:a,messageHash:d,stuck:!1};let{connectionId:f}=e,g=a.findIndex(a=>a.connectionId===f);if(-1===g)return bC.delete(d),{targets:a,messageHash:d,stuck:!1};let h=a[g],i=await bB(f,h.provider);if(.15>=bA(i))return bC.delete(d),{targets:a,messageHash:d,stuck:!1};let j=[a[g],...a.slice(0,g),...a.slice(g+1)];return e.lastUsedAt=Date.now(),{targets:j,messageHash:d,stuck:!0}}catch{return c}}let bF=new Map;function bG(a,b=Date.now()){if(!a)return 0;let c=bF.get(a);return!c||c.expiresAtMs<=b?0:c.count}let bH=new Map;function bI(a){return Number.isFinite(a)&&a>0?a:1}let bJ=[429,502,503,504],bK=[/unavailable/i,/service temporarily unavailable/i];function bL(a,b,c){let{provider:d,modelStr:e,connectionId:f}=a;return d&&f&&c.has(`${d}:${f}`)?`Skipping ${e} — connection ${f} for provider ${d} had connection error (#1731v2)`:d&&b.has(d)?`Skipping ${e} — provider ${d} marked exhausted this request (#1731)`:null}function bM(a){let b=Math.floor(Number(a));return!Number.isFinite(b)||b<1?3:Math.min(b,10)}function bN(a,b){let c=Number(a);return!Number.isFinite(c)||c<0?b:c}function bO(a){return(0,e.yj)(404,a)}function bP(a){if(!a||"object"!=typeof a)return!1;let b=a.error;if(!b||"object"!=typeof b)return!1;let c=b.code;return"STREAM_READINESS_TIMEOUT"===c||"STREAM_EARLY_EOF"===c}function bQ(a){if(!a||"object"!=typeof a)return!1;let b=a.error;return!!b&&"object"==typeof b&&"TOKEN_LIMIT_EXCEEDED"===b.code}function bR(a){return{executionKey:a.executionKey,stepId:a.stepId,provider:a.provider,providerId:a.providerId,connectionId:a.connectionId,label:a.label}}async function bS(a){try{let b=await (0,aR.getProviderConnectionById)(a),c=b?.maxConcurrent;return"number"==typeof c&&Number.isFinite(c)&&c>0?c:null}catch{return null}}async function bT(a){let b=new Map,c=new Set;for(let b of a){let a=b.connectionId??"";a&&c.add(a)}for(let a of c)b.set(a,await bS(a));return b}async function bU(a,b,c,d){let e=a?.connectionId??"";if(!e||null===b||b<=0)return null;try{return await ad(`qsconn:${e}`,{maxConcurrency:b,timeoutMs:c.queueTimeoutMs,maxQueueSize:c.maxQueueSize})}catch{return d.warn("COMBO",`Quota-share concurrency: connection ${e} gate saturated (cap=${b}) — proceeding without a slot`),null}}let bV=async()=>void 0,bW=new Map;function bX(a=Date.now()){for(let[b,c]of bW)c.expiresAt<=a&&bW.delete(b);for(;bW.size>200;){let a=bW.keys().next().value;if(!a)break;bW.delete(a)}}function bY(a,b,c,d){let e=Number(a);return Number.isFinite(e)?Math.min(d,Math.max(c,e)):b}function bZ(a){let b=new Map;for(let c of a){let a=c.suiteId,d=b.get(a);(!d||new Date(c.createdAt).getTime()>new Date(d.createdAt).getTime())&&b.set(a,c)}return Array.from(b.values())}function b$(a,b,c={}){var d;let e,f,g,h,i,j=(g=bY((f=b&&"object"==typeof b&&!Array.isArray(b)?b:{}).qualityWeight,.85,0,1),i=g+(h=bY(f.latencyWeight,.15,0,1)),{enabled:!0===f.enabled,suiteIds:Array.isArray(d=f.suiteIds)?[...new Set(d.map(a=>String(a||"").trim()).filter(Boolean))].slice(0,50):[],maxAgeHours:bY(f.maxAgeHours,720,1,8760),minCases:Math.floor(bY(f.minCases,1,1,1e5)),qualityWeight:i>0?g/i:1,latencyWeight:i>0?h/i:0,cacheTtlMs:Math.floor(bY(f.cacheTtlMs,6e4,1e3,3e5))});if(!j.enabled||a.length<=1)return a;let k=a.map(a=>{var b;let c,d;return b=a.modelStr,d="string"==typeof(c=(0,af.parseModel)(b)).model?c.model.trim():"",[...new Set([b.trim(),d].filter(Boolean))]}),l=[...new Set(k.flat())];if(0===l.length)return a;try{e=function(a,b){let c=Date.now();bX(c);let d=JSON.stringify({targetIds:[...a].sort(),suiteIds:[...b.suiteIds].sort(),maxAgeHours:b.maxAgeHours,minCases:b.minCases}),e=bW.get(d);if(e&&e.expiresAt>c)return e.runs;let f=bV({targetIds:a,suiteIds:b.suiteIds,maxAgeHours:b.maxAgeHours});return bW.set(d,{expiresAt:c+b.cacheTtlMs,runs:f}),bX(c),f}(l,j)}catch(b){return c.warn?.("COMBO","Eval-driven routing skipped because eval history could not be loaded",{error:b instanceof Error?b.message:String(b)}),a}if(0===e.length)return a;let m=new Map;for(let a of e){let b=a.target.id;if(!b)continue;let c=m.get(b)||[];c.push(a),m.set(b,c)}let n=k.map(a=>{let b=new Map;for(let c of a)for(let a of m.get(c)||[])b.set(a.id,a);return Array.from(b.values())}),o=n.flatMap(a=>bZ(a)).filter(a=>a.summary.total>=j.minCases&&a.avgLatencyMs>0).map(a=>a.avgLatencyMs),p=o.length>0?Math.min(...o):null,q=a.map((a,b)=>({target:a,index:b,score:function(a,b,c){let d=bZ(a).filter(a=>a.summary.total>=b.minCases);if(0===d.length)return null;let e=d.reduce((a,b)=>a+b.summary.total,0);if(e<b.minCases)return null;let f=d.reduce((a,b)=>a+b.summary.passRate*b.summary.total,0)/e,g=d.reduce((a,b)=>a+Math.max(0,b.avgLatencyMs)*b.summary.total,0)/e,h=c&&g>0?Math.max(0,Math.min(1,c/g)):.5;return{score:Math.max(0,Math.min(1,f/100))*b.qualityWeight+h*b.latencyWeight,passRate:f,avgLatencyMs:g,totalCases:e,runs:d.length}}(n[b]||[],j,p)})),r=q.filter(a=>a.score).length;return 0===r?a:(q.sort((a,b)=>{if(a.score&&b.score){let c=b.score.score-a.score.score;return Math.abs(c)>1e-4?c:a.index-b.index}return a.score?-1:b.score?1:a.index-b.index}),c.info?.("COMBO",`Eval-driven routing: ranked ${r}/${a.length} targets by eval history`),c.debug?.("COMBO",`Eval-driven routing scores: ${q.filter(a=>a.score).map(a=>`${a.target.modelStr}=${a.score?.score.toFixed(3)} pass=${a.score?.passRate.toFixed(1)} cases=${a.score?.totalCases}`).join(", ")}`),q.map(a=>a.target))}function b_(a){return Math.ceil(a.length/4)}function b0(a){return a.reduce((a,b)=>"string"==typeof b.content?a+b_(b.content):Array.isArray(b.content)?a+b.content.reduce((a,b)=>a+("string"==typeof b?.text?b_(b.text):0),0):a,0)}function b1(a){var b,c,d,e;let f,g=function(a){let b,c,d,e,f,g,h,i,j,k,l;return{codeComplexity:(d=(c=(b=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n")).match(/```[\s\S]*?```/g))?c.length:0,f=(e=b.match(/`[^`]+`/g))?e.length:0,Math.min(25,Math.round(5*d+.5*f+2*[/function\s+\w+\s*\(/gi,/const\s+\w+\s*=/gi,/import\s+.*from/gi,/class\s+\w+/gi,/interface\s+\w+/gi,/async\s+function/gi,/def\s+\w+\s*\(/gi,/SELECT\s+.*FROM/gi,/\$\{.*\}/g].reduce((a,c)=>{let d=b.match(c);return a+(d?d.length:0)},0)))),mathComplexity:(i=(h=(g=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n")).match(/\$\$[\s\S]*?\$\$|\$[^$]+\$/g))?h.length:0,Math.min(20,Math.round(4*i+1.5*[/[+\-*/^]=/g,/\b(sin|cos|tan|log|sqrt|sum|prod|int|lim)\b/gi,/\b\d+\s*[+\-*/]\s*\d+\s*=/g,/∑|∏|∫|√|∞|π/g,/\bf'(?:x)?\b/g,/\bdx\b/g].reduce((a,b)=>{let c=g.match(b);return a+(c?c.length:0)},0)))),reasoningDepth:(j=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n"),k=[/\b(first|step\s*\d|secondly|finally|therefore|thus|consequently|because|since)\b/gi,/\b(let me think|let's reason|let's analyze|step by step|breaking this down)\b/gi,/\b(we need to|we must|we should|the approach is|the solution involves)\b/gi,/(?:\d+\.\s+)(?:\w+)/g,/\b(if\s+.+\s+then\s+|assuming\s+|suppose\s+|consider\s+that)\b/gi].reduce((a,b)=>{let c=j.match(b);return a+(c?c.length:0)},0),Math.min(20,Math.round(2*k+Math.min(5,a.messages.length)))),contextSize:(l=b0(a.messages))>64e3?15:l>32e3?12:l>16e3?9:l>8e3?6:l>4e3?4:2*(l>1e3),toolCalling:function(a){if(!a.tools||0===a.tools.length)return 0;let b=a.tools.length;return b>20?10:b>10?8:b>5?6:b>2?4:2}(a),domainSpecificity:function(a){let b=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n"),c=0;for(let[,a]of Object.entries({medical:[/\bdiagnosis\b/i,/\bsymptoms\b/i,/\btreatment\b/i,/\bpatient\b/i,/\bclinical\b/i],legal:[/\bpursuant\b/i,/\bstatute\b/i,/\bliability\b/i,/\bjurisdiction\b/i,/\bhereby\b/i],scientific:[/\bhypothesis\b/i,/\bmethodology\b/i,/\bempirical\b/i,/\bsignificant\b/i],financial:[/\bportfolio\b/i,/\bdividend\b/i,/\bamortization\b/i,/\barbitrage\b/i]}))c=Math.max(c,a.reduce((a,c)=>a+2*!!c.test(b),0));return Math.min(10,c)}(a)}}(a),h=(b=g).codeComplexity+b.mathComplexity+b.reasoningDepth+b.contextSize+b.toolCalling+b.domainSpecificity,i=b0(a.messages),j=(f=[],(c=g).codeComplexity>0&&f.push("code-complexity"),c.mathComplexity>0&&f.push("math-complexity"),c.reasoningDepth>0&&f.push("reasoning-depth"),c.contextSize>0&&f.push("context-size"),c.toolCalling>0&&f.push("tool-calling"),c.domainSpecificity>0&&f.push("domain-specificity"),f),k=(d=g,e=a,Math.min(1,Object.values(d).filter(a=>a>0).length/6*.8+.1*!!(e.messages.length>=2)));return{score:Math.min(100,h),breakdown:g,rulesTriggered:j,inputTokens:i,confidence:k}}function b2(a){return a<=5?"trivial":a<=20?"simple":a<=40?"moderate":a<=65?"complex":"expert"}function b3(a){switch(a){case"trivial":case"simple":return"free";case"moderate":case"complex":return"cheap";case"expert":return"premium"}}function b4(a,b){var c,d,e;let f=new Map;for(let b of a){if("model"!==b.kind)continue;let a=`${b.provider}::${b.modelStr}`;f.has(a)||f.set(a,aM(b.provider,b.modelStr))}let g=b1(b),h=b2(g.score),i=b3(h),j=["free","cheap","premium"],k=j.indexOf(i),l=[],m=[],n=[];for(let b of a){if("model"!==b.kind)continue;let a=`${b.provider}::${b.modelStr}`,c=f.get(a);if(!c)continue;let d=j.indexOf(c.tier);d>=k?(l.push(b),d>k&&m.push(b)):n.push(b)}let o=(c=h,d=l.length,e=n.length,"expert"===c?"require-premium":"complex"===c||"moderate"===c?"prefer-cheap":"simple"===c||"trivial"===c?"prefer-free":"default");return{tierAssignments:f,specificity:g,specificityLevel:h,recommendedMinTier:i,eligibleTargets:l,overqualifiedTargets:m,underqualifiedTargets:n,strategyModifier:o}}let b5=["free","cheap","premium"];function b6(a,b){return b5.indexOf(a)>=b5.indexOf(b)?a:b}let b7=new Map,b8=null;function b9(a,b){return b?`${a}:${b}`:a}function ca(a,b,c){if(!a||"unknown"===a)return;let d=b9(a,b),e=b7.get(d),f=Date.now(),g=Math.max(18e5,c?.providerCooldown?.maxRetryCooldownMs??ai.aD.providerCooldown.maxRetryCooldownMs);e?(e.lastFailureAt=f,e.failureCount++,e.retentionMs=Math.max(e.retentionMs,g)):b7.set(d,{lastFailureAt:f,failureCount:1,retentionMs:g}),!b8&&(b8=setInterval(()=>{!function(a=Date.now()){for(let[b,c]of b7)a-c.lastFailureAt>c.retentionMs&&b7.delete(b)}()},6e4)).unref&&b8.unref()}function cb(a,b,c){if(!a||"unknown"===a)return!1;let d=b9(a,b),e=b7.get(d);if(!e||0===e.failureCount)return!1;let f=Date.now()-e.lastFailureAt,g=c?.providerCooldown?.minRetryCooldownMs??ai.aD.providerCooldown.minRetryCooldownMs,h=c?.providerCooldown?.maxRetryCooldownMs??ai.aD.providerCooldown.maxRetryCooldownMs;return f<Math.min(g*Math.pow(2,Math.min(Math.max(0,e.failureCount-1),10)),h)}function cc(a,b){if(!a||"unknown"===a)return;let c=b9(a,b),d=b7.get(c);d&&(d.failureCount=0)}var cd=c(69190);function ce(a){let b="number"==typeof a?a:"string"==typeof a&&""!==a.trim()?Number(a):null;if(null===b||!Number.isFinite(b))return null;let c=Math.floor(b);return c>0?c:null}function cf(a,b,c={}){if(!1===c.enabled)return null;let d=ce(b);if(null===d)return null;let e=(0,cd.w8)(a);if(!0!==e.supportsThinking)return null;let f=ce(e.maxOutputTokens);if(null===f)return null;if(d>f)return f;if(d===f)return d;let g=Math.max(d+1e3,Math.ceil(1.5*d));return g>f?d:g}let cg=new Map,ch=new Map,ci=new Map;function cj(a){let b=Number(a);return Number.isFinite(b)?Math.min(Math.max(Math.floor(b),1),1e3):1}function ck(a,b,c){let d=ch.get(a),e=d?b.findIndex(a=>a.executionKey===d.executionKey):-1;if(c>1&&d&&e>=0&&d.successCount<c)return{startIndex:e,counter:cg.get(a)||0};let f=cg.get(a)||0;return{startIndex:f%b.length,counter:f}}function cl(a,b,c,d){let e=ch.get(a),f=e?.executionKey===b.executionKey?e.successCount+1:1;if(f>=c){let c=d.findIndex(a=>a.executionKey===b.executionKey);cg.set(a,c>=0?c+1:(cg.get(a)||0)+1),ch.delete(a);return}ch.set(a,{executionKey:b.executionKey,successCount:f})}function cm(a,b){let c=ci.get(a);return!c||b<=1||c.successCount>=b?null:c.executionKey}function cn(a,b,c){let d=ci.get(a),e=d?.executionKey===b?d.successCount+1:1;e>=c?ci.delete(a):ci.set(a,{executionKey:b,successCount:e})}var co=c(9024);function cp(a){return a.length>60?`${a.slice(0,60)}…`:a}var cq=c(78769);function cr(a){return"number"!=typeof a?a:new Date(a>0&&a<1e9?Date.now()+1e3*a:a)}async function cs(a,b,c,d){let e,f,g;if(b){if(!(a.headers.get("content-type")||"").includes("text/event-stream")||!a.body)return{valid:!0};let b=a.body.getReader(),d=new TextDecoder("utf-8"),e=[],f="",g=!1,j=!1,k=!1,l=(0,co.DY)(),m="";function h(){let a=f.split(/\r?\n/);for(let b of(f=a[a.length-1],l.normalize(a.slice(0,-1)))){let a,c=b.trim();if(c.startsWith("event:")){m=c.slice(6).trim();continue}if(!c.startsWith("data:")){c||(m="");continue}let d=c.slice(5).trim();if(!d||"[DONE]"===d)continue;try{a=JSON.parse(d)}catch{continue}let e=("string"==typeof a.type?a.type:null)||m||"";if(m="",(0,co.Z_)(a,e))return!0;switch(e){case"message_start":g=!0;break;case"content_block_start":case"content_block_delta":case"content_block_stop":return j=!0,!0;case"message_stop":k=!0;break;case"message_delta":{let b=a.delta;b&&"object"==typeof b&&null!=b.stop_reason&&(k=!0)}}}return!1}function i(b){let c=e.slice(),d=0;return new Response(new ReadableStream({async pull(a){if(d<c.length)return void a.enqueue(c[d++]);try{let{done:c,value:d}=await b.read();c?a.close():a.enqueue(d)}catch{a.close()}}}),{status:a.status,statusText:a.statusText,headers:a.headers})}try{for(;;){let{done:a,value:l}=await b.read();if(a){let a=d.decode(void 0,{stream:!1});if(a&&(f+=a),f.trim()&&(f+="\n\n"),h(),g&&k&&!j)return c.warn?.("COMBO","Streaming Claude response has complete lifecycle but zero content blocks (content_filter?) — marking as invalid for combo failover"),{valid:!1,reason:"streaming empty content block"};let e=i(b);return{valid:!0,clonedResponse:e}}if(e.push(l),f+=d.decode(l,{stream:!0}),h()){let a=i(b);return{valid:!0,clonedResponse:a}}}}catch{return{valid:!0}}}let j=a.headers.get("content-type")||"";if(!j.includes("application/json")&&!j.includes("text/"))return{valid:!0};try{e=a.clone()}catch{return{valid:!0}}try{f=await e.text()}catch{return{valid:!0}}if(!f||0===f.trim().length)return{valid:!1,reason:"empty response body"};try{g=JSON.parse(f)}catch{if(f.startsWith("data:")||f.startsWith("event:"))return{valid:!0};return{valid:!1,reason:"response is not valid JSON"}}if(d){let a=function(a,b){if(!b||"object"!=typeof b)return{valid:!0};let c=function(a){if(!a||"object"!=typeof a)return"";let b=a.choices;if(Array.isArray(b)){let a=[];for(let c of b){let b=c?.message,d=b?.content;if("string"==typeof d)a.push(d);else if(Array.isArray(d))for(let b of d){let c=b?.text;"string"==typeof c&&a.push(c)}}if(a.length)return a.join("")}let c=a.output;if(Array.isArray(c)){let a=[];for(let b of c){let c=b?.content;if(Array.isArray(c))for(let b of c){let c=b?.text;"string"==typeof c&&a.push(c)}}if(a.length)return a.join("")}return""}(a);for(let a of b.forbiddenSubstrings??[])if("string"==typeof a&&a.length>0&&c.includes(a))return{valid:!1,reason:`response contains forbidden substring "${cp(a)}"`};for(let a of b.requiredSubstrings??[])if("string"==typeof a&&a.length>0&&!c.includes(a))return{valid:!1,reason:`response missing required substring "${cp(a)}"`};if("number"==typeof b.minContentLength&&Number.isFinite(b.minContentLength)&&b.minContentLength>0&&c.trim().length<b.minContentLength)return{valid:!1,reason:`response content shorter than ${b.minContentLength} chars`};for(let c of b.jsonPathPredicates??[])if(c&&"string"==typeof c.path&&c.path&&!function(a,b,c){switch(b){case"exists":return null!=a;case"nonEmpty":return null!=a&&("string"==typeof a?a.trim().length>0:Array.isArray(a)?a.length>0:"object"==typeof a?Object.keys(a).length>0:!!a);case"equals":return a===c;case"notEquals":return a!==c}}(function(a,b){let c=a;for(let a of function(a){let b=[],c="",d=()=>{c&&(b.push(c),c="")};for(let e=0;e<a.length;e++){let f=a[e];if("."===f)d();else if("["===f){d();let c="";for(e++;e<a.length&&"]"!==a[e];)c+=a[e],e++;let f=c.trim(),g=Number(f);b.push(""!==f&&Number.isInteger(g)?g:f)}else c+=f}return d(),b}(b)){if(null==c)return;if("number"==typeof a){if(!Array.isArray(c))return;c=c[a]}else{if("object"!=typeof c)return;c=c[a]}}return c}(a,c.path),c.condition,c.value))return{valid:!1,reason:`jsonpath check failed: "${cp(c.path)}" ${c.condition}`};return{valid:!0}}(g,d);if(!a.valid)return{valid:!1,reason:a.reason}}let k=g?.choices;if(g?.object==="response"){var l;if(!(Array.isArray(l=g.output)&&l.some(a=>{if(!a||"object"!=typeof a)return!1;if("message"!==a.type)return!!a.type;let b=a.content;return Array.isArray(b)&&b.some(a=>!!a&&"object"==typeof a&&"string"==typeof a.text&&a.text.length>0)})))return{valid:!1,reason:"empty_choices"};let b="string"==typeof g.status?g.status:"";return b&&!["completed","done"].includes(b)?{valid:!1,reason:"no_terminal"}:{valid:!0,clonedResponse:new Response(f,{status:a.status,statusText:a.statusText,headers:a.headers})}}if(!Array.isArray(k)||0===k.length){if(g?.output||g?.result||g?.data||g?.response)return{valid:!0};if(g?.error){let a=g.error;return{valid:!1,reason:`upstream error in 200 body: ${a?.message||JSON.stringify(g.error).substring(0,200)}`}}return{valid:!0}}let m=k[0],n=m?.message||m?.delta;if(!n)return{valid:!1,reason:"choice has no message object"};let o=n.content,p=n.tool_calls,q=n.reasoning_content??n.reasoning,r="string"==typeof q&&q.trim().length>0,s=Array.isArray(p)&&p.length>0;if(!(null!=o&&""!==o||r)&&!s)return{valid:!1,reason:"empty content and no tool_calls in response"};if((null==o||""===o)&&r&&!s){let a=g?.usage;if(a){let b=Number(a.completion_tokens)||0,c=(0,cq.Zr)(a);if(b>0&&c>=.9*b)return{valid:!1,reason:`reasoning consumed ${c}/${b} tokens — no content output`}}}return{valid:!0,clonedResponse:new Response(f,{status:a.status,statusText:a.statusText,headers:a.headers})}}let ct=new Set(["quota_exhausted","auth_error","not_found","not_found_local"]),cu=new Set(["rate_limit","rate_limited","transient","overloaded","server_error"]),cv=()=>void 0,cw=()=>void 0;var cx=c(47593);async function cy({body:a,models:b,handleSingleModel:c,log:d,comboName:f,judgeModel:g,tuning:h}){var i,j;let k,l,m=Array.isArray(b)?b.filter(Boolean):[];if(0===m.length)return(0,e.yj)(400,"Fusion combo has no models");if(1===m.length)return c(a,m[0]);let n={minPanel:h?.minPanel??2,stragglerGraceMs:h?.stragglerGraceMs??8e3,panelHardTimeoutMs:h?.panelHardTimeoutMs??9e4},o=Math.min(Math.max(2,n.minPanel),m.length),p=g&&g.trim()?g.trim():m[0];d.info("FUSION",`Combo "${f??""}" | panel=${m.length} [${m.join(", ")}] | judge=${p} | quorum=${o}`);let{tools:q,tool_choice:r,...s}=a,t={...s,stream:!1},u=Date.now(),v=m.map(a=>{var b,d;return b=c(t,a),d=n.panelHardTimeoutMs,new Promise(a=>{let c=setTimeout(()=>a({__timeout:!0}),d);Promise.resolve(b).then(b=>{clearTimeout(c),a(b)}).catch(b=>{clearTimeout(c),a({__error:b})})})}),w=await (i={...n,minPanel:o},new Promise(a=>{let b=Array(v.length),c=0,d=0,e=!1,f=null,g=()=>{e||(e=!0,clearTimeout(h),f&&clearTimeout(f),a(b))},h=setTimeout(g,i.panelHardTimeoutMs);v.forEach((a,e)=>{Promise.resolve(a).then(a=>{b[e]=a}).catch(a=>{b[e]={__error:a}}).finally(()=>{c++;let a=b[e];if(a&&a.ok&&d++,c===v.length)return g();d>=i.minPanel&&!f&&(f=setTimeout(g,i.stragglerGraceMs))})})}));d.info("FUSION",`fan-out collected in ${Date.now()-u}ms`);let x=[];for(let a=0;a<w.length;a++){let b=w[a],c=m[a];if(!b){d.warn("FUSION",`Panel ${c} dropped (straggler/timeout)`);continue}if(b.__timeout){d.warn("FUSION",`Panel ${c} timed out`);continue}if(b.__error){d.warn("FUSION",`Panel ${c} threw`,{error:(0,e.sanitizeErrorMessage)(b.__error)});continue}if(!b.ok){d.warn("FUSION",`Panel ${c} failed`,{status:b.status});continue}try{let a=await b.clone().json(),e=function(a){if(!a||"object"!=typeof a)return"";let b=a.choices,c=b?.[0];if(c){let a=c.message??c.delta??{},b=(0,cx.kU)(a.content);if(b.trim())return b;if("string"==typeof c.text&&c.text.trim())return c.text}let d=(0,cx.kU)(a.content);if(d.trim())return d;let e=a.candidates,f=e?.[0]?.content?.parts;if(Array.isArray(f)){let a=f.map(a=>"string"==typeof a?.text?a.text:"").join("");if(a.trim())return a}let g=a.output;if(Array.isArray(g)){let a=g.flatMap(a=>Array.isArray(a.content)?a.content.map(a=>"string"==typeof a?.text?a.text:""):[]).join("");if(a.trim())return a}return""}(a);e?(x.push({model:c,text:e}),d.info("FUSION",`Panel ${c} ok (${e.length} chars)`)):d.warn("FUSION",`Panel ${c} returned empty content`)}catch(a){d.warn("FUSION",`Panel ${c} unparseable`,{error:(0,e.sanitizeErrorMessage)(a)})}}if(0===x.length)return d.warn("FUSION","All panel models failed"),(0,e.yj)(503,"All fusion panel models failed");if(1===x.length)return d.info("FUSION",`Only ${x[0].model} succeeded — answering directly (no fusion)`),c(a,x[0].model);let y=(k=x.map((a,b)=>`[Source ${b+1}]
|
|
17
|
-
${a.text}`).join("\n\n"),j=[`You are the JUDGE in a model-fusion panel. ${x.length} expert models independently answered the user's most recent request. Their responses are below, anonymized by source.`,"\nDo NOT mention that multiple models were used, and do NOT refer to the sources. Produce ONE authoritative final answer addressed directly to the user.\n\nFirst, internally analyze the panel along these dimensions: consensus (points most sources agree on — treat as higher-confidence), contradictions (where they disagree — resolve with your own judgment), partial coverage, unique insights only one source surfaced, and blind spots every source missed. Then write the best possible final answer grounded in that analysis — more complete and correct than any single response, with no filler.\n\n=== PANEL RESPONSES ===",k,"=== END PANEL RESPONSES ===\n\nNow write the final answer to the user's original request."].join("\n"),l={...a},Array.isArray(a.messages)?l.messages=[...a.messages,{role:"user",content:j}]:Array.isArray(a.input)?l.input=[...a.input,{role:"user",content:j}]:Array.isArray(a.contents)?l.contents=[...a.contents,{role:"user",parts:[{text:j}]}]:l.messages=[{role:"user",content:j}],l);return d.info("FUSION",`Judging ${x.length} answers with ${p}`),c(y,p)}let cz=[408,500,502,503,504,524];function cA(a,b){let{result:c,fallbackResult:e,errorText:f,rawModel:g,isTokenLimitBreach:h,allAccountsRateLimited:i,sets:j,log:k,tag:l,exhaustedLogLevel:m,structuredError:n}=b,{exhaustedProviders:o,exhaustedConnections:p,transientRateLimitedProviders:q}=j,r=a.provider,s=!!(r&&"unknown"!==r)&&!(0,d.DZ)(r,g)&&((0,d.je)(e)||(0,d.w7)(n?.code||f)===aj.QS.QUOTA_EXHAUSTED||i);if(s){o.add(r);let a="debug"===m?k.debug:k.info;a?.(l,`Provider ${r} quota exhausted — marking for skip on remaining targets (#1731)`)}else 429===c.status&&!h&&r&&"unknown"!==r&&q.add(r),function(a,b){var c;let d,{result:e,errorText:f,sets:g,log:h,tag:i}=b,j=a.provider;if(!j||"unknown"===j||!cz.includes(e.status)||"string"==typeof(d=e.headers?.get?.("x-omniroute-provider-breaker"))&&"open"===d.toLowerCase()||/provider_circuit_open/i.test(f)||(c=e.status,502===c&&/empty content/i.test(f)))return;let k=a.connectionId??void 0;k?(g.exhaustedConnections.add(`${j}:${k}`),h.info(i,`Provider ${j} connection ${k} error (${e.status}) — marking for skip on remaining targets (#1731v2)`)):(g.exhaustedProviders.add(j),h.info(i,`Provider ${j} connection error (${e.status}) — marking for skip on remaining targets (#1731)`))}(a,{result:c,errorText:f,sets:j,log:k,tag:l});return s}async function cB(a){return a.isModelAvailable&&!await a.isModelAvailable(a.unit.modelStr,a.unit)?(0,e.yj)(503,`Model ${a.unit.modelStr} is unavailable`):a.handleSingleModel(a.body,a.unit.modelStr,{...a.unit,effectiveComboStrategy:a.effectiveComboStrategy,failoverBeforeRetry:a.failoverBeforeRetry})}async function cC(a){var b,c,d;let f=(b=a.allCombos,c=a.unit.comboName,(Array.isArray(b)?b:b?.combos||[]).filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)&&"string"==typeof a.name).find(a=>a.name===c)||null);if(!f)return(0,e.yj)(503,`Nested combo "${a.unit.comboName}" not found`);let g=(d={context:a.nesting,childComboName:f.name}).context.depth>=d.context.maxDepth?(0,e.yj)(503,`Max combo nesting depth (${d.context.maxDepth}) exceeded`):d.context.visitedComboNames.includes(d.childComboName)?(0,e.yj)(503,`Circular combo reference detected: ${d.childComboName}`):{...d.context,depth:d.context.depth+1,visitedComboNames:[...d.context.visitedComboNames,d.childComboName]};return g instanceof Response?g:a.runCombo({...a.baseOptions,body:a.body,combo:f,nesting:g})}async function cD(a){return"model"===a.unit.kind?cB({body:a.body,unit:a.unit,handleSingleModel:a.handleSingleModel,isModelAvailable:a.isModelAvailable,failoverBeforeRetry:a.failoverBeforeRetry,effectiveComboStrategy:a.effectiveComboStrategy}):cC({body:a.body,unit:a.unit,allCombos:a.allCombos,runCombo:a.runCombo,baseOptions:a.baseOptions,nesting:a.nesting})}async function cE(a){let b=Number(a.config.maxRetries??1),c=bN(a.config.retryDelayMs,2e3),d=function(a,b){if("random"===a){let a=[...b];for(let b=a.length-1;b>0;b-=1){let c=Math.floor(Math.random()*(b+1));[a[b],a[c]]=[a[c],a[b]]}return a}if("weighted"===a){let a=function(a){let b=a.reduce((a,b)=>a+Math.max(0,Number(b.weight)||0),0);if(b<=0)return a[0]||null;let c=Math.random()*b;for(let b of a)if((c-=Math.max(0,Number(b.weight)||0))<=0)return b;return a[a.length-1]||null}(b);return a?[a,...b.filter(b=>b.executionKey!==a.executionKey)]:b}return b}(a.strategy,a.units),f=a.body?.stream===!0,g=Date.now(),h=a.effectiveComboStrategy??a.strategy,i=null,j=0;for(let k of d){for(let d=0;d<=b;d+=1){if(a.signal?.aborted)return{response:(0,e.yj)(499,"Client disconnected"),unit:k};if(a.nesting.attemptBudget.count+=1,a.nesting.attemptBudget.count>a.nesting.attemptBudget.limit)return{response:(0,e.yj)(503,"Maximum combo retry limit reached"),unit:k};d>0&&await new Promise(a=>setTimeout(a,c)),a.log.info("COMBO",`Trying ${k.kind} ${"combo-ref"===k.kind?`combo:${k.comboName}`:k.modelStr}${d>0?` (retry ${d})`:""}`);let b=await cD({body:a.body,unit:k,allCombos:a.allCombos,handleSingleModel:a.handleSingleModel,isModelAvailable:a.isModelAvailable,runCombo:a.runCombo,baseOptions:a.baseOptions,nesting:a.nesting,failoverBeforeRetry:a.config.failoverBeforeRetry,effectiveComboStrategy:h});if(i=b,b.ok){if("combo-ref"===k.kind)return t(a.combo.name,null,{success:!0,latencyMs:Date.now()-g,fallbackCount:j,strategy:h,target:{executionKey:k.executionKey,stepId:k.stepId,label:k.label}}),{response:b,unit:k};let c=await cs(b,f,a.log,a.config.responseValidation);if(c.valid)return t(a.combo.name,k.modelStr,{success:!0,latencyMs:Date.now()-g,fallbackCount:j,strategy:h,target:{executionKey:k.executionKey,stepId:k.stepId,label:k.label}}),{response:c.clonedResponse??b,unit:k}}if(![408,429,500,502,503,504].includes(b.status))break}j+=1}return t(a.combo.name,null,{success:!1,latencyMs:Date.now()-g,fallbackCount:j,strategy:h}),{response:i||(0,e.yj)(503,"All nested combo units unavailable"),unit:null}}var cF=c(47493),cG=c(80540);function cH(a){if("string"==typeof a){let b=a.trim(),c=b.indexOf("/");return!(c<=0)&&b.slice(c+1).includes("*")}return!(!a||"object"!=typeof a||Array.isArray(a))&&"provider-wildcard"===a.kind&&"string"==typeof a.providerId}async function cI(a){let b=new Set,c=[];try{for(let d of(await (0,cG.Kb)(a)))d.id&&!b.has(d.id)&&(b.add(d.id),c.push(d.id))}catch{}for(let d of(0,aS.SM)(a))d.id&&!b.has(d.id)&&(b.add(d.id),c.push(d.id));return c}async function cJ(a,b){let c=await cI(a.providerId);if(0===c.length)return null;let d=a.modelPattern,e="*"===d?c:c.filter(a=>(0,cF.UF)(a,d));return 0===e.length?null:e.map(c=>{let e={kind:"model",model:`${a.providerId}/${c}`,providerId:a.providerId,weight:a.weight,_expandedFromWildcard:`${a.providerId}/${d}`,_parentCombo:b};return null!==a.label&&(e.label=a.label),null!==a.connectionId&&(e.connectionId=a.connectionId),null!==a.allowedConnectionIds&&(e.allowedConnectionIds=a.allowedConnectionIds),e})}async function cK(a){let b=a.models;if(!Array.isArray(b)||0===b.length)return a;let c=!1;for(let a of b)if(cH(a)){c=!0;break}if(!c)return a;let d=[];for(let c of b){if(!cH(c)){d.push(c);continue}let b=function(a){if("string"==typeof a){let b=a.trim(),c=b.indexOf("/");if(c<=0)return null;let d=b.slice(0,c),e=b.slice(c+1);return e.includes("*")?{providerId:d,modelPattern:e,weight:0,label:null,connectionId:null,allowedConnectionIds:null}:null}if(a&&"object"==typeof a&&!Array.isArray(a)){if("provider-wildcard"!==a.kind)return null;let b="string"==typeof a.providerId?a.providerId.trim():"";if(!b)return null;let c="string"==typeof a.modelPattern?a.modelPattern.trim():"*",d="number"==typeof a.weight&&Number.isFinite(a.weight)?a.weight:0,e="string"==typeof a.label&&a.label.trim()?a.label.trim():null,f="string"==typeof a.connectionId&&a.connectionId.trim()?a.connectionId.trim():null,g=Array.isArray(a.allowedConnectionIds)?a.allowedConnectionIds.map(a=>"string"==typeof a?a.trim():"").filter(Boolean):null;return{providerId:b,modelPattern:c,weight:d,label:e,connectionId:f,allowedConnectionIds:g?.length?g:null}}return null}(c);if(!b){d.push(c);continue}let e=await cJ(b,a.name);e&&e.length>0?d.push(...e):d.push(c)}return{...a,models:d}}async function cL(a){return Promise.all(a.map(a=>cK(a)))}function cM(a){return{model:"",weight:null}}async function cN(a){try{let{getPricingForModel:b}=await Promise.resolve().then(c.bind(c,89718)),d=await Promise.all(a.map(async a=>{let c=(0,af.parseModel)(a),d=c.provider||c.providerAlias||"unknown",e=c.model||a;try{let c=await b(d,e),f=Number(c?.input);return{modelStr:a,cost:Number.isFinite(f)?f:1/0}}catch{return{modelStr:a,cost:1/0}}}));return d.sort((a,b)=>a.cost-b.cost),d.map(a=>a.modelStr)}catch{return a}}async function cO(a){let b=await cN(a.map(a=>a.modelStr)),c=new Map;for(let b of a){let a=c.get(b.modelStr)||[];a.push(b),c.set(b.modelStr,a)}return b.map(a=>{let b=c.get(a);return b?.shift()||null}).filter(a=>null!==a)}function cP(a,b){let c=(0,ae.qF)(a.provider)?.getStatus?.()?.state;if("OPEN"===c)return-1/0;let d=b?.byModel?.[a.modelStr]||null,e=Number(d?.successRate),f=Number(d?.avgLatencyMs);return(Number.isFinite(e)?e/100:.5)+(Number.isFinite(f)&&f>0?1/Math.log10(f+10):.25)-.25*("HALF_OPEN"===c)}function cQ(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function cR(a){return(Array.isArray(a)?a:a?.combos||[]).map(a=>({...a,id:cQ(a.id)||void 0,name:cQ(a.name)||"",models:Array.isArray(a.models)?a.models:[],config:ak(a.config)?a.config:null,autoConfig:ak(a.autoConfig)?a.autoConfig:null,context_cache_protection:"boolean"==typeof a.context_cache_protection||"number"==typeof a.context_cache_protection?a.context_cache_protection:void 0,system_message:"string"==typeof a.system_message?a.system_message:null}))}function cS(a,b,c,d,e=[]){var f;let g,h;if(!h)return null;let i=[...e,h.id].join(">"),j="string"==typeof h.label?h.label:null,k=h.weight||0;return"combo-ref"===h.kind?{kind:"combo-ref",stepId:h.id,executionKey:i,comboName:h.comboName,weight:k,label:j}:null}function cT(a){let b=ak(a?.config)?a.config.compositeTiers:null;if(!ak(b))return[];let c=cQ(b.defaultTier),d=ak(b.tiers)?b.tiers:null;if(!c||!d)return[];let e=[],f=new Set,g=new Set,h=new Map(Object.entries(d).map(([a,b])=>{if(!ak(b))return null;let c=cQ(a),d=cQ(b.stepId),e=cQ(b.fallbackTier);return c&&d?[c,{stepId:d,fallbackTier:e}]:null}).filter(a=>null!==a)),i=c;for(;i&&h.has(i)&&!f.has(i);){f.add(i);let a=h.get(i);if(!a)break;g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId)),i=a.fallbackTier}for(let a of h.values())g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId));return e}function cU(a,b,c=[]){return function(a,b){let c=cT(b);if(0===c.length)return a;let d=new Map(a.map(a=>[a.stepId,a])),e=new Set,f=[];for(let a of c){let b=d.get(a);!b||e.has(b.stepId)||(f.push(b),e.add(b.stepId))}for(let b of a)e.has(b.stepId)||(f.push(b),e.add(b.stepId));return f}(function(a,b,c=[]){return(a.models||[]).map((d,e)=>cS(d,a.name,e,b,c)).filter(a=>null!==a)}(a,b,c),a)}function cV(a,b,c=new Set,d=0,e=[],f=3){if("model"===a.kind)return[a];if(d>f)return[];let g=cR(b),h=g.find(b=>b.name===a.comboName);return!h||c.has(a.comboName)?[]:cW(h,g,new Set(c),d+1,[...e,a.stepId],f)}function cW(a,b,c=new Set,d=0,e=[],f=3){let g=(a.models||[]).map((b,c)=>cS(b,a.name,c,null,e)).filter(a=>a?.kind==="model");if(d>f)return g;if(c.has(a.name))return[];c.add(a.name);let h=cU(a,b,e),i=[];for(let a of h){if("combo-ref"===a.kind){i.push(...cV(a,b,new Set(c),d,e,f));continue}i.push(a)}return i}function cX(a,b){let c,d=(c=cR(b).find(b=>b.name===a),c?.models&&c.models.length>0?c:null);return d?d.models.map(a=>cM(a).model):null}function cY(a){let b=(0,af.parseModel)(a),c=b.provider||b.providerAlias||"unknown",d=b.model||a;return(0,cd.et)(c,d)}function cZ(a){let b=Number(a);return Number.isFinite(b)&&b>0?Math.ceil(b):0}function c$(a,b=0){if(b>8||null==a)return!1;if("string"==typeof a)return a.startsWith("data:image/");if(Array.isArray(a))return a.some(a=>c$(a,b+1));if(!ak(a))return!1;let c="string"==typeof a.type?a.type.toLowerCase():null;if("image"===c||"image_url"===c||"input_image"===c||"image_url"in a||"input_image"in a)return!0;let d=ak(a.source)?a.source:null;return!!("string"==typeof d?.media_type?d.media_type.toLowerCase():"").startsWith("image/")||Object.values(a).some(a=>c$(a,b+1))}function c_(a,b,c,d="Context-aware fallback"){let e,f,g,h;if(0===a.length)return a;let i=(e=function(a){let b={};for(let c of["messages","input","tools","functions","response_format"])void 0!==a[c]&&(b[c]=a[c]);return Object.keys(b).length>0?(0,G.estimateTokens)(b):0}(b),f=Math.max(cZ(b.max_tokens),cZ(b.max_completion_tokens)),{requiresTools:!!(Array.isArray(b.tools)&&b.tools.length>0||Array.isArray(b.functions)&&b.functions.length>0),requiresVision:c$(b.messages)||c$(b.input),requiresStructuredOutput:(g=ak(b.response_format)?b.response_format:null,"json_object"===(h="string"==typeof g?.type?g.type:null)||"json_schema"===h),estimatedInputTokens:e,requestedOutputTokens:f,requiredContextTokens:e+f});if(!(i.requiresTools||i.requiresVision||i.requiresStructuredOutput||i.requiredContextTokens>0))return a;let j=[],k=a.filter(a=>{var b,c;let d,e,f,g=(d=(0,bw.w8)(a.modelStr),e=[],i.requiresTools&&(!1===d.supportsTools||!d.toolCalling)&&e.push("tools"),i.requiresVision&&!0!==d.supportsVision&&e.push("vision"),i.requiresStructuredOutput&&!1===d.structuredOutput&&e.push("structured_output"),b=i.requestedOutputTokens,c=d.maxOutputTokens,!(b<=0)&&null!==c&&c<b&&e.push("output_tokens"),f=d.maxInputTokens??d.contextWindow??null,i.requiredContextTokens>0&&null!=f&&f<i.requiredContextTokens&&e.push("context_window"),e);return 0===g.length||(j.push({target:a,reasons:g}),!1)});return k.length===a.length?a:0===k.length?(c.warn("COMBO",`${d}: all ${a.length} targets were filtered by request requirements; preserving strategy order`),c.debug?.("COMBO",`${d}: rejected targets ${j.map(a=>`${a.target.modelStr}(${a.reasons.join("+")})`).join(", ")}`),a):(c.info("COMBO",`${d}: kept ${k.length}/${a.length} targets for request requirements`),c.debug?.("COMBO",`${d}: rejected targets ${j.map(a=>`${a.target.modelStr}(${a.reasons.join("+")})`).join(", ")}`),k)}function c0(a,b,c=3){return b?cW(a,b,new Set,0,[],c):cU(a,null).filter(a=>a?.kind==="model")}function c1(a,b){return cU(a,b).map(c=>({step:c,targets:b?cV(c,b,new Set([a.name])):"model"===c.kind?[c]:[]})).filter(a=>a.targets.length>0)}function c2(a){let b=ak(a.shadowRouting)?a.shadowRouting:{},c=Number(b.sampleRate??1),d=Number(b.maxTargets??2),e=Number(b.timeoutMs??3e4);return{enabled:!0===b.enabled,targets:Array.isArray(b.targets)?b.targets:[],sampleRate:Number.isFinite(c)?Math.max(0,Math.min(1,c)):1,maxTargets:Number.isFinite(d)?Math.max(1,Math.min(10,Math.floor(d))):2,timeoutMs:Number.isFinite(e)?Math.max(1e3,Math.min(12e4,Math.floor(e))):3e4}}function c3(a,b,c){let d=c2(b);return!d.enabled||0===d.targets.length||d.sampleRate<=0||(void 0)>d.sampleRate?[]:cW({...a,name:`${a.name}:shadow`,models:d.targets},c,new Set([a.name]),0,["shadow"]).slice(0,d.maxTargets).map(a=>({...a,trafficType:"shadow"}))}async function c4(a){try{if(!a.body)return;await a.arrayBuffer()}catch{}}function c5(a){return"function"==typeof structuredClone?structuredClone(a):JSON.parse(JSON.stringify(a))}function c6(a,b,c,d,e,f,g,h){let i;if(0===d.length)return;let j=c2(b);try{i=c5(c)}catch(a){h.warn("COMBO","Shadow routing skipped: failed to clone request body",{error:a instanceof Error?a.message:String(a)});return}let k=async()=>{await Promise.all(d.map(async b=>{let c=Date.now();try{var d,k;let l={...c5(i),model:b.modelStr,stream:!1};if(f&&!await f(b.modelStr,b)){u(a.name,b.modelStr,{success:!1,latencyMs:Date.now()-c,target:bR(b)}),h.info("COMBO",`Shadow target skipped (unavailable): ${b.modelStr}`);return}let m=await (d=e(l,b.modelStr,{...b,failoverBeforeRetry:!0,trafficType:"shadow"}),k=j.timeoutMs,new Promise((a,b)=>{let c=setTimeout(()=>b(Error("Shadow route timed out")),k);d.then(b=>{clearTimeout(c),a(b)},a=>{clearTimeout(c),b(a)})}));await c4(m.clone()),u(a.name,b.modelStr,{success:m.ok,latencyMs:Date.now()-c,target:bR(b)}),h.info("COMBO",`Shadow target ${b.modelStr} completed with status ${m.status} (${g})`)}catch(d){u(a.name,b.modelStr,{success:!1,latencyMs:Date.now()-c,target:bR(b)}),h.warn("COMBO",`Shadow target ${b.modelStr} failed`,{error:d instanceof Error?d.message:String(d)})}}))};setTimeout(()=>void k(),0)}let c7=["weekly","session","monthly"];function c8(a){let b=Number(a);return Number.isFinite(b)?b:null}function c9(a,b){let c=c8(a);return null===c?b:Math.max(0,Math.min(100,c))}function da(a,b){let c=c8(a);return null===c||c<0?b:c}function db(a,b,c){let d=c8(a);return null===d||d<0?b:Math.min(c,Math.floor(d))}function dc(a){let b=Array.isArray(a?.resetWindowWindows)?a.resetWindowWindows:null,c=b?.filter(a=>c7.includes(String(a))).filter((a,b,c)=>c.indexOf(a)===b);return{windows:c&&c.length>0?c:a?.resetWindowIncludeSession===!0?["weekly","session"]:["weekly"],tieBandMs:Math.max(0,c8(a?.resetWindowTieBandMs)??6e4),quotaCacheTtlMs:db(a?.resetWindowQuotaCacheTtlMs,0,3e5),quotaCacheMaxStaleMs:db(a?.resetWindowQuotaCacheMaxStaleMs,0,36e5)}}function dd(a){return(a.providerId||a.provider||"").toLowerCase()||null}function de(a){return"string"==typeof a&&a.trim().length>0?a.trim():"number"==typeof a&&Number.isFinite(a)?String(a):null}function df(a){if(!a)return NaN;let b=Date.parse(a);if(Number.isFinite(b))return b;if(!/^\d+(?:\.\d+)?$/.test(a))return NaN;let c=Number(a);return Number.isFinite(c)?c<1e10?1e3*c:c:NaN}function dg(a,b){if(!ak(a))return null;let c=a[b];return ak(c)?{percentUsed:c8(c.percentUsed),resetAt:de(c.resetAt)}:null}function dh(a,b,c,d,e){let f=aC(a);return d*f+function(a,b){if(!a)return .5;let c=df(a);if(!Number.isFinite(c))return .5;let d=c-Date.now();return d<=0?1:aC(1-d/b)}(b,c)*(1-f)*e}function di(a,b){if(!a||!ak(a)||!0===a.limitReached)return 1/0;let c=1/0;for(let d of b){let b=function(a,b){return(a&&ak(a)?"session"===b?dg(a,"window5h"):"weekly"===b?dg(a,"window7d")||dg(a,"windowWeekly"):"monthly"===b?dg(a,"windowMonthly"):null:null)||function(a,b){let c;if(!a||!ak(a)||!ak(a.windows))return null;let d=Object.entries(a.windows).map(([a,b])=>({key:a.toLowerCase(),value:b})).filter(({key:a})=>a===b||a.startsWith(`${b} `));if(0===d.length)return null;d.sort((a,b)=>a.key.localeCompare(b.key));let e=d[0].value;return ak(e)?{percentUsed:null===(c=c8(e.percentUsed))?null:c>1?aC(c/100):aC(c),resetAt:de(e.resetAt)}:null}(a,b)}(a,d),e=df(b?.resetAt??null);Number.isFinite(e)&&(c=Math.min(c,e))}return Number.isFinite(c)||(c=df(de(a.resetAt))),Number.isFinite(c)?c:1/0}let dj=new Map,dk=new Map;async function dl(a,b,c,d,e){let f=dd(a);if(!f||!(0,Z.__)(f))return[];if(!b.has(f)){let a=dj.get(f);if(a&&Date.now()-a.fetchedAt<3e4)return b.set(f,a.connections),a.connections;c.has(f)||c.set(f,(async()=>{try{let a=await (0,aR.P)({provider:f,isActive:!0}),b=Array.isArray(a)?a:[];if(!dj.has(f)&&dj.size>=200){let a=dj.keys().next().value;void 0!==a&&dj.delete(a)}return dj.set(f,{connections:b,fetchedAt:Date.now()}),b}catch(a){return e.warn?.("COMBO","Reset-aware failed to load quota-aware connections.",{comboName:d,err:a,operation:"getProviderConnections",provider:f}),[]}})());let g=await c.get(f);b.set(f,g)}return b.get(f)||[]}function dm(a){if(!Array.isArray(a))return null;let b=a.filter(a=>"string"==typeof a&&a.trim().length>0);return b.length>0?b:null}async function dn(a,b,c,d){let e=new Map,f=new Map,g=new Map,h=[];for(let{target:k,connections:l}of(await Promise.all(a.map(async a=>({connections:await dl(a,e,f,b,c),target:a}))))){var i,j;for(let a of l)"string"==typeof a.id&&g.set(a.id,a);let a=(i=k,j=l,i.connectionId?[i.connectionId]:Array.isArray(i.allowedConnectionIds)&&i.allowedConnectionIds.length>0?i.allowedConnectionIds.filter(a=>"string"==typeof a&&a.trim().length>0):j.map(a=>"string"==typeof a.id?a.id:null).filter(a=>!!a)),b=function(a,b){let c=dm(b);if(!c)return a;let d=new Set(c);return a.filter(a=>d.has(a))}(a,d);if(0===b.length){if(a.length>0&&dm(d))continue;h.push(k);continue}for(let a of b)h.push({...k,connectionId:a,executionKey:k.connectionId===a?k.executionKey:`${k.executionKey}@${a}`})}return{connectionById:g,expandedTargets:h}}async function dp({comboName:a,config:b,connectionById:c,expandedTargets:d,log:e,scoreQuota:f}){let g=new Map;return dr(d,5,async(d,h)=>{let i=null,j=dd(d),k=j?(0,Z.__)(j):null;if(k&&j&&d.connectionId){let f=`${j}:${d.connectionId}`;g.has(f)||g.set(f,ds({provider:j,connectionId:d.connectionId,connection:c.get(d.connectionId),fetcher:k,config:b,log:e,comboName:a})),i=await g.get(f)}return{target:d,index:h,...f(i)}})}function dq(a,b,c){let d=b;if(b.length>1){let a=cg.get(c)||0;if(!cg.has(c)&&cg.size>=500){let a=cg.keys().next().value;void 0!==a&&cg.delete(a)}cg.set(c,a+1);let e=a%b.length;d=[...b.slice(e),...b.slice(0,e)]}let e=new Set(d.map(a=>a.target.executionKey));return[...d,...a.filter(a=>!e.has(a.target.executionKey))]}async function dr(a,b,c){let d=Array(a.length),e=0,f=Math.max(1,Math.min(b,a.length));return await Promise.all(Array.from({length:f},async()=>{for(;e<a.length;){let b=e++;d[b]=await c(a[b],b)}})),d}async function ds({provider:a,connectionId:b,connection:c,fetcher:d,config:e,log:f,comboName:g}){let h=`${a}:${b}`,i=e.quotaCacheTtlMs,j=e.quotaCacheMaxStaleMs,k=Date.now(),l=dk.get(h);if(i<=0&&j<=0)try{return await d(b,c)}catch(c){return f.warn?.("COMBO","Reset-aware quota fetch failed.",{comboName:g,connectionId:b,err:c,operation:"quotaFetch",provider:a}),null}let m=()=>{let e=dk.get(h);if(e?.refreshPromise!=null)return e.refreshPromise;let i=d(b,c).then(a=>{if(a){if(!dk.has(h)&&dk.size>=200){let a=dk.keys().next().value;void 0!==a&&dk.delete(a)}dk.set(h,{quota:a,fetchedAt:Date.now(),refreshPromise:null})}else dk.delete(h);return a}).catch(c=>{let d=dk.get(h);if(d){if(!dk.has(h)&&dk.size>=200){let a=dk.keys().next().value;void 0!==a&&dk.delete(a)}dk.set(h,{...d,refreshPromise:null})}return f.warn?.("COMBO","Reset-aware quota fetch failed.",{comboName:g,connectionId:b,err:c,operation:"quotaFetch",provider:a}),null});if(!dk.has(h)&&dk.size>=200){let a=dk.keys().next().value;void 0!==a&&dk.delete(a)}return dk.set(h,{quota:e?.quota??l?.quota??null,fetchedAt:e?.fetchedAt??l?.fetchedAt??0,refreshPromise:i}),i};if(i>0&&l){let a=k-l.fetchedAt;if(a<=i)return l.quota;if(j>0&&a<=i+j)return m(),l.quota}return m()}async function dt(a,b){if(0===a.length)return new Map;let c=await dr(a,5,async a=>{let c=await (0,d.LN)(a.provider).catch(()=>null);if("OPEN"===(0,ae.qF)(a.provider).getStatus().state)return{key:a.executionKey,result:{profile:c,available:!1}};let e=!0;return b&&(e=await Promise.resolve(b(a.modelStr,a)).catch(()=>!0)),{key:a.executionKey,result:{profile:c,available:e}}}),e=new Map;for(let{key:a,result:b}of c)e.set(a,b);return e}async function du(a,b,c,d,e){let f,g,h;if(0===a.length)return a;let i={sessionWeight:h=(g=(f=da(c?.resetAwareSessionWeight,.35))+da(c?.resetAwareWeeklyWeight,.65))>0?f/g:.35,weeklyWeight:1-h,tieBand:c9(c?.resetAwareTieBandPercent,5)/100,exhaustionGuard:c9(c?.resetAwareExhaustionGuardPercent,10)/100,quotaCacheTtlMs:db(c?.resetAwareQuotaCacheTtlMs,0,3e5),quotaCacheMaxStaleMs:db(c?.resetAwareQuotaCacheMaxStaleMs,0,36e5)},{connectionById:j,expandedTargets:k}=await dn(a,b,d,e),l=await dp({comboName:b,config:i,connectionById:j,expandedTargets:k,log:d,scoreQuota:a=>({score:function(a,b){if(!a||!ak(a))return{score:.5};if(!0===a.limitReached)return{score:-1/0};let c=aC(c8(a.percentUsed)??.5),d=dg(a,"window5h"),e=dg(a,"window7d")||dg(a,"windowWeekly"),f=aC(1-(d?.percentUsed??c)),g=aC(1-(e?.percentUsed??c)),h=dh(f,d?.resetAt,18e6,.45,.55),i=dh(g,e?.resetAt??de(a.resetAt),6048e5,.25,.75),j=b.sessionWeight*h+b.weeklyWeight*i;return b.exhaustionGuard>0&&f<b.exhaustionGuard&&(j*=Math.max(.05,f/b.exhaustionGuard)),{score:j}}(a,i).score})});l.sort((a,b)=>b.score!==a.score?b.score-a.score:a.index-b.index);let m=l[0]?.score??0,n=l.filter(a=>m-a.score<=i.tieBand);return dq(l,n,`reset-aware:${b}`).map(a=>a.target)}async function dv(a,b,c,d,e){if(0===a.length)return a;let f=dc(c),{connectionById:g,expandedTargets:h}=await dn(a,b,d,e),i=await dp({comboName:b,config:f,connectionById:g,expandedTargets:h,log:d,scoreQuota:a=>({resetMs:di(a,f.windows)})});i.sort((a,b)=>a.resetMs!==b.resetMs?a.resetMs-b.resetMs:a.index-b.index);let j=i[0]?.resetMs??1/0;if(!Number.isFinite(j)||f.tieBandMs<=0)return i.map(a=>a.target);let k=i.filter(a=>a.resetMs-j<=f.tieBandMs);return k.length<=1?i.map(a=>a.target):dq(i,k,`reset-window:${b}`).map(a=>a.target)}async function dw(){return(await c.e(1999).then(c.bind(c,71999))).getSaturation}async function dx(a,b,c,d){if(a.length<=1)return a;try{let{expandedTargets:e}=await dn(a,b,c,d);if(e.length<=1)return e;let f=await dw(),g=new Map,h=a=>`${a.provider}:${a.connectionId}`;await dr(e,5,async a=>{if(!a.connectionId)return;let b=h(a);g.has(b)||(g.set(b,(async()=>{let[b,c]=await Promise.all([f(a.connectionId,a.provider,{unit:"percent",window:"5h"}),f(a.connectionId,a.provider,{unit:"percent",window:"weekly"})]);return{util5h:b,util7d:c}})()),await g.get(b))});let i=new Map;for(let a of e){if(!a.connectionId)continue;let b=await g.get(h(a));b&&i.set(a.executionKey,b)}if(e.length<=1)return e;let j=e.map((a,b)=>({candidate:a,index:b,headroom:bA(i.get(a.executionKey))}));return j.sort((a,b)=>b.headroom!==a.headroom?b.headroom-a.headroom:a.index-b.index),j.map(a=>a.candidate)}catch(d){return c.warn?.({err:d?.message,comboName:b},"headroom ordering failed — keeping target order"),a}}let dy={light:1,standard:2,heavy:3,critical:4},dz={light:35,standard:65,heavy:95,critical:120},dA=/\b(hi|hello|thanks|thank you|ping|format|rewrite|grammar|translate|summari[sz]e|short|quick|one[- ]?liner|explain briefly)\b/i,dB=/\b(debug|root cause|architecture|architectural|refactor|migrate|implementation|implement|design|analy[sz]e|investigate|compare|benchmark|whitebox|codebase|end[- ]?to[- ]?end|e2e)\b/i,dC=/\b(critical|security|vulnerability|exploit|rce|remote code execution|supply chain|account takeover|auth bypass|privilege escalation|tenant|cross[- ]tenant|sandbox escape|ssrf|deserialization|prod incident|data exfiltration|bug bounty)\b/i;function dD(a,b=[]){if(null==a)return b;if("string"==typeof a||"number"==typeof a||"boolean"==typeof a)return b.push(String(a)),b;if(Array.isArray(a)){for(let c of a)dD(c,b);return b}return"object"!=typeof a||("string"==typeof a.text&&b.push(a.text),"string"==typeof a.input_text&&b.push(a.input_text),"string"==typeof a.output_text&&b.push(a.output_text),"string"==typeof a.content?b.push(a.content):Array.isArray(a.content)&&dD(a.content,b),Array.isArray(a.parts)&&dD(a.parts,b),"string"==typeof a.query&&b.push(a.query),"string"==typeof a.url&&b.push(a.url)),b}function dE(a){var b,c;let d,e,f,g,h,i,j,k,l,m,n,o,p=(d=(c=b=a??{}).contents??c.request?.contents,e=dD([c.system,c.instructions,c.messages,c.input,d,c.query,c.url]).join("\n").length,f=b.contents??b.request?.contents,g=(Array.isArray(b.messages)?b.messages.length:0)+(Array.isArray(b.input)?b.input.length:0)+(Array.isArray(b.contents)?b.contents.length:0)+(Array.isArray(f)?f.length:0),h=Array.isArray(b?.tools)?b.tools.length:0,i=b.generationConfig,k=(j=[b.max_tokens,b.max_output_tokens,b.max_completion_tokens,i?.maxOutputTokens].map(a=>Number.parseInt(String(a??""),10)).filter(a=>Number.isFinite(a))).length>0?Math.max(...j):0,l=b?.reasoning,m=String(b?.reasoning_effort??l?.effort??"").toLowerCase(),n=b?.contents??b?.request?.contents,o=dD([b?.system,b?.instructions,b?.messages,b?.input,n,b?.query,b?.url]).join("\n"),{promptChars:e,messageCount:g,toolCount:h,outputTokens:k,effort:m,hasExplicitReasoning:!!(m&&"none"!==m&&"off"!==m&&"disabled"!==m),lightKeyword:dA.test(o),heavyKeyword:dB.test(o),criticalKeyword:dC.test(o)}),q=[],r=(a,b)=>(a&&q.push(b),a),s=/^(high|xhigh|max|maximum|hard|deep)$/.test(p.effort),t=!p.hasExplicitReasoning||/^(low|minimal|none|off|disabled)$/.test(p.effort);return r(p.promptChars>=1e5,"huge-context")||r(p.outputTokens>=32768,"huge-output")||r(p.toolCount>=8&&p.promptChars>=16e3,"many-tools-large-context")||r(p.criticalKeyword&&(s||p.toolCount>=3||p.promptChars>=8e3),"critical-domain")?{level:"critical",weight:dy.critical,...p,reasons:q}:[r(p.promptChars>=5e4,"large-context"),r(p.promptChars>=24e3,"medium-large-context"),r(p.messageCount>=16,"long-conversation"),r(p.toolCount>=4,"many-tools"),r(p.outputTokens>=8192,"large-output"),r(s,"high-reasoning-effort"),r(p.criticalKeyword,"security-sensitive"),r(p.heavyKeyword&&p.promptChars>=4e3,"complex-task")].filter(Boolean).length>=2||p.promptChars>=5e4||s?{level:"heavy",weight:dy.heavy,...p,reasons:q}:p.promptChars<=2e3&&p.messageCount<=3&&0===p.toolCount&&p.outputTokens<=1500&&t&&!p.criticalKeyword&&!p.heavyKeyword||p.lightKeyword&&p.promptChars<=4e3&&0===p.toolCount&&t&&!p.criticalKeyword?{level:"light",weight:dy.light,...p,reasons:q.length>0?q:["small-simple-request"]}:{level:"standard",weight:dy.standard,...p,reasons:q.length>0?q:["default"]}}let dF=new Set(["vision"]);function dG(a){return String(a??"").replace(/\s+/g," ").trim().slice(0,12e3)}function dH(a,b,c="content"){if(!Array.isArray(a))return"";for(let d of a){if(!d||"object"!=typeof d||!b.has(String(d.role??"")))continue;let a=dG(dD("parts"===c?d.parts:d.content).join("\n"));if(a)return a}return""}function dI(a,b,c="content"){return Array.isArray(a)?dG(a.filter(a=>!!a&&"object"==typeof a&&b.has(String(a.role??""))).map(a=>dD("parts"===c?a.parts:a.content).join("\n")).filter(Boolean).join("\n")):""}function dJ(a){let b=dG(a);return b?(0,by.createHash)("sha1").update(b).digest("hex").slice(0,24):null}let dK={"grok-4-fast-non-reasoning":1143,"grok-4-1-fast-non-reasoning":1244,"gemini-2.5-flash":1238,"kimi-k2.5":1646,"gpt-4o-mini":2764,"claude-sonnet-4.6":4e3,"claude-opus-4.6":6e3,"deepseek-chat":2e3};function dL(a){return dK[String(a||"").toLowerCase()]??1500}function dM(a){return Number.isFinite(a)?Math.max(0,Math.min(100,a)):100}function dN(a){if(!a||"object"!=typeof a||Array.isArray(a))return{};let b={};for(let[c,d]of Object.entries(a)){let a=Number(d);c&&Number.isFinite(a)&&(b[c]=a)}return b}let dO=new Set(["banned","credits_exhausted","deactivated","expired","rate_limited"]);async function dP(a,b,d=null,e=dc(null),f=null){let g=v(b),h=(f??(0,ai.xv)(null))?.quotaPreflight?.enabled===!0,{getPricingForModel:i}=await Promise.resolve().then(c.bind(c,89718)),j=new Map,k={};try{let{getModelLatencyStats:a}=await c.e(4989).then(c.bind(c,47370));k=await a({windowHours:24,minSamples:3,maxRows:1e4})}catch{}let l=Array.from(new Set(a.map(a=>a.provider||(0,af.parseModel)(a.modelStr).provider||"unknown"))),m=new Map,n=new Map,o=new Map;await Promise.all(l.map(async a=>{try{let b=await (0,aR.P)({provider:a,isActive:!0}),c=Array.isArray(b)?b:[];for(let b of(m.set(a,c.length),n.set(a,c),c))b&&"object"==typeof b&&"string"==typeof b.id&&o.set(b.id,b)}catch{m.set(a,0),n.set(a,[])}}));let p=[];for(let b of a){let a=b.provider||(0,af.parseModel)(b.modelStr).provider||"unknown",c=n.get(a)||[];if(b.connectionId){p.push(b);continue}let d=c.map(a=>a&&"object"==typeof a&&"string"==typeof a.id?a.id:null).filter(a=>null!==a),e=Array.isArray(b.allowedConnectionIds)?new Set(b.allowedConnectionIds.filter(a=>"string"==typeof a&&a.trim().length>0)):null,f=e?d.filter(a=>e.has(a)):d;if(0===f.length){p.push(b);continue}for(let a of f)p.push({...b,connectionId:a,executionKey:`${b.executionKey}@${a}`})}return(await Promise.all(p.map(async a=>{let c,l,n,p=a.modelStr,q=(0,af.parseModel)(p),r=a.provider||q.provider||q.providerAlias||"unknown",s=q.model||p,t=k[`${r}/${s}`]||null,u=Number(t?.totalRequests),v=Number.isFinite(u)&&u>=10,w=1;try{let a=await i(r,s),b=Number(a?.input),c=Number(a?.output);Number.isFinite(b)&&b>=0&&(w=Number.isFinite(c)&&c>=0?.6*b+.4*c:b)}catch{}let x=g?.byModel?.[p]||null,y=Number(x?.avgLatencyMs),z=Number(x?.successRate),A=Number(t?.p95LatencyMs),B=Number(t?.latencyStdDev),C=Number(t?.successRate),D=v?Number.isFinite(A)&&A>0?A:dL(s):Number.isFinite(y)&&y>0?y:dL(s),E=v?Number.isFinite(C)&&C>=0&&C<=1?1-C:.05:Number.isFinite(z)&&z>=0&&z<=100?1-z/100:.05,F=v&&Number.isFinite(B)&&B>0?Math.max(10,B):Math.max(10,.1*D),G=(0,ae.qF)(r)?.getStatus?.()?.state,H=(n=(0,bx.bb)(d||null))?a.connectionId===n?1:a.connectionId?.1:.5:.5,I=.5,J=100,K=!1,L=(0,Z.__)(r),M=a.connectionId?o.get(a.connectionId):void 0,N=function(a){var b;if(!a)return;let c="string"==typeof(b=a.testStatus)?b.trim().toLowerCase():"";return dO.has(c)?c:"unavailable"===c&&function(a){if(null==a||""===a)return!1;let b=new Date(String(a)).getTime();return Number.isFinite(b)&&b>Date.now()}(a.rateLimitedUntil)?"rate_limited":void 0}(M),O=h?N:void 0,P=!1;if(O?(K=!0,c=O,J=0):N&&(P=!0,l=N),L&&a.connectionId){let d=`${r}:${a.connectionId}`;j.has(d)||j.set(d,ds({provider:r,connectionId:a.connectionId,connection:M,fetcher:L,config:e,log:{},comboName:b}));let g=await j.get(d);if(I=function(a,b){var c;let d=di(a,b.windows);if(!Number.isFinite(d))return .5;let e=d-Date.now();return e<=0?1:aC(1-e/((c=b.windows).includes("monthly")?2592e6:c.includes("weekly")?6048e5:18e6))}(g,e),K||(J=function(a){if(!a||"object"!=typeof a)return 100;if(!0===a.limitReached)return 0;let b=a.windows;if(b&&"object"==typeof b&&!Array.isArray(b)){let a=null;for(let c of Object.values(b)){if(!c||"object"!=typeof c)continue;let b=Number(c.percentUsed);if(!Number.isFinite(b))continue;let d=dM((1-b)*100);a=null===a?d:Math.min(a,d)}if(null!==a)return a}let c=Number(a.percentUsed);return Number.isFinite(c)?dM((1-c)*100):100}(g)),!K&&h){let a,b,d,e,h,i=(0,Z.dN)(g,(a=(f??(0,ai.xv)(null))?.quotaPreflight,b=a?.defaultThresholdPercent??2,d=a?.warnThresholdPercent??20,e=dN(a?.providerWindowDefaults?.[r]),h=dN(M?.quotaWindowThresholds),{resolveMinRemainingPercent:a=>{if(null!==a){let b,c;for(let d of(b=[a],(c=a.toLowerCase())!==a&&b.push(c),"codex"===r&&((c.includes("session")||"5h"===c||"five_hour"===c)&&b.push("session"),(c.includes("weekly")||"7d"===c||"seven_day"===c)&&b.push("weekly"),(c.includes("monthly")||"30d"===c)&&b.push("monthly")),[...new Set(b)])){let a=h[d];if("number"==typeof a)return a;let b=e[d];if("number"==typeof b)return b}}return b},resolveWarnRemainingPercent:()=>d}));i.proceed||(K=!0,c=i.reason||"quota_exhausted")}}return{stepId:a.stepId,executionKey:a.executionKey,modelStr:p,provider:r,model:s,quotaRemaining:J,quotaTotal:100,circuitBreakerState:"OPEN"===G||"HALF_OPEN"===G?G:"CLOSED",costPer1MTokens:w,p95LatencyMs:D,latencyStdDev:F,errorRate:E,accountTier:"standard",quotaResetIntervalSecs:86400,contextAffinity:H,resetWindowAffinity:I,quotaCutoffBlocked:K,quotaCutoffReason:c,statusPenalty:P,statusPenaltyReason:l,connectionPoolSize:m.get(r)??1,connectionId:a.connectionId??void 0}}))).filter(a=>{let b=null.get(a.provider);return!b?.has(a.model)})}let dQ=new Set(["credits_exhausted","banned","expired"]);async function dR(a){try{let b=(0,af.parseModel)(a).provider;if(!b)return!1;let c=(0,ae.qF)(b)?.getStatus?.()?.state,d=await (0,aR.P)({provider:b,isActive:!0});return function(a,b,c,d={}){if("OPEN"===a||!Array.isArray(b)||0===b.length)return!0;let e=d.backoffLevel??Number(process.env.PIN_DROP_BACKOFF_LEVEL||"2"),f=d.graceMs??Number(process.env.PIN_DROP_GRACE_MS||"20000");return!b.some(a=>{let b="string"==typeof a.testStatus?a.testStatus:"";if(dQ.has(b)||Number(a.backoffLevel??0)>=e)return!1;let d=a.rateLimitedUntil?new Date(String(a.rateLimitedUntil)).getTime():0;return!Number.isFinite(d)||!(d-c>f)})}(c,d||[],Date.now())}catch{return!1}}async function dS({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,relayOptions:l,signal:m,apiKeyAllowedConnections:n=null,nesting:o=null}){let q,s={body:(aH={body:a,combo:b,settings:i,relayOptions:l,log:h}).body,combo:aH.combo,settings:aH.settings??null,relayOptions:aH.relayOptions??null,log:aH.log},{strategy:u,relayConfig:w,resilienceSettings:y,universalHandoffConfig:H,effectiveSessionId:I,pinnedModel:K,clientRequestedStream:O,config:P,comboTargetTimeoutMs:Q,reasoningTokenBufferEnabled:R}=function(a){var b,c,d;let e,f,g,h,i,j,k,{combo:l,settings:m,relayOptions:n}=a,o=void l.strategy,p="context-relay"===o?N(n?.config||null):null,q=m?(0,ai.xv)(m):(0,ai.xv)(null),r=(b=l.universal_handoff||l.universalHandoff,c=n?.universalHandoffConfig,e=b??{},f=c??{},g=(a,b)=>"boolean"==typeof e[a]?e[a]:"boolean"==typeof f[a]?f[a]:b,h=(a,b)=>{if("string"==typeof e[a]){let b=e[a].trim();if(b.length>0)return b}if("string"==typeof f[a]){let b=f[a].trim();if(b.length>0)return b}return b},i=(a,b,c,d)=>{let g,h=e[a]??f[a];if("number"==typeof h&&Number.isFinite(h))g=h;else if("string"==typeof h){let a=Number(h);Number.isFinite(a)&&(g=a)}return void 0===g?b:void 0!==c&&g<c?c:void 0!==d&&g>d?d:g},j=h("trigger","on-switch"),{enabled:g("enabled",!0),trigger:"always"===j||"on-error"===j?j:"on-switch",providerAllowlist:Array.isArray(k=e[d="providerAllowlist"]??f[d])?k.map(a=>"string"==typeof a?a.trim().toLowerCase():"").filter(Boolean):L,maxMessagesForSummary:i("maxMessagesForSummary",30,5,100),handoffModel:h("handoffModel",""),ttlMinutes:i("ttlMinutes",300,1,10080),preserveSystemPrompt:g("preserveSystemPrompt",!0)}),{effectiveSessionId:s,pinnedModel:t}=function(a){let{combo:b,relayOptions:c,log:d}=a,e=b.context_cache_protection?c?.sessionId??function(a){try{return(0,am.Tn)(a)??null}catch{return null}}(a.body):null,f=null;if(b.context_cache_protection&&e&&!a.body?.[M]){let c=E(e,b.name);c&&(a.body={...a.body,model:c},f=c,d.info("COMBO",`[#401] Context cache: pinned model=${c} (server-side)`))}return{effectiveSessionId:e,pinnedModel:f}}(a),{body:u}=function(a,b){var c;if(!b)return{body:a,pinnedModel:null};let d=Array.isArray(a.messages)?[...a.messages]:[],e=null;e=null,b.system_message&&b.system_message.trim()&&(c=d,d=[{role:"system",content:b.system_message},...c.filter(a=>"system"!==a.role)]);let f=function(a,b){let c;if(!a||!b)return a;try{c=new RegExp(b)}catch{return console.warn(`[ComboAgent] Invalid tool_filter_regex: "${b}"`),a}return a.filter(a=>{let b=a.function?.name??a.name??"";return c.test(String(b))})}(a.tools,b.tool_filter_regex);return d=d.map(a=>"string"==typeof a.content&&ag.test(a.content)?{...a,content:a.content.replace(ah,"").trimEnd()}:a),{body:{...a,messages:d,...f!==a.tools&&{tools:f}},pinnedModel:e}}(a.body,l);a.body=u;let v=a.body?.stream===!0,w=m?C(l,m):{...x,...l?.config||{}},y=function(a,b,c=0){let d=A(b),e=z(a)?A(a.targetTimeoutMs):0;if(e>0)return d<=0?e:Math.min(e,d);let f=A(c);return d<=0||f<=0?d:Math.min(f,d)}(w,aj.MT,12e4),B=!1!==w.reasoningTokenBufferEnabled;return{strategy:o,relayConfig:p,resilienceSettings:q,universalHandoffConfig:r,effectiveSessionId:s,pinnedModel:t,clientRequestedStream:v,config:w,comboTargetTimeoutMs:y,reasoningTokenBufferEnabled:B}}(s);a=s.body;let S=async(a,b,c)=>{let d;if(Q<=0)return f(a,b,c).catch(a=>(0,e.yj)(502,a?.message??"Upstream model error"));let g=new AbortController,i=!1,j=new Promise(a=>{d=setTimeout(()=>{i=!0,h.warn("COMBO",`Model ${b} exceeded ${Q}ms timeout — falling back`),g.abort(Error("combo-per-model-timeout")),a(new Response(JSON.stringify({error:{message:`Model ${b} timed out`}}),{status:524,headers:{"Content-Type":"application/json"}}))},Q)}),k={...c??{},modelAbortSignal:g.signal},l=c?.modelAbortSignal??null,m=null;l&&(l.aborted?g.abort(Error("hedge-cancelled")):(m=()=>{g.abort(Error("hedge-cancelled"))},l.addEventListener("abort",m,{once:!0})));try{return await Promise.race([f(a,b,k).catch(a=>i?new Response(null,{status:599}):(0,e.yj)(502,a?.message??"Upstream model error")),j])}finally{clearTimeout(d),l&&m&&l.removeEventListener("abort",m)}};if(K){let c=!(Array.isArray(j)?j.length>0:!!j)||c0(b,j,bM(P.maxComboDepth)).some(a=>a.modelStr===K),d=!!c&&await dR(K);return c&&!d?h.info("COMBO",`Bypassing strategy — routing directly to pinned context model: ${K}`):h.warn("COMBO",c?`Context-cache pin "${K}" provider durably unhealthy — dropping pin, using strategy`:`Stale context-cache pin "${K}" not in combo "${b.name}" targets — dropping pin, using strategy`),S(a,K)}if("fusion"===u){let c=(b.models||[]).map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"string"==typeof a.model?a.model:null).filter(a=>!!a),d="string"==typeof P.judgeModel?P.judgeModel:void 0,e=P.fusionTuning&&"object"==typeof P.fusionTuning?P.fusionTuning:void 0;return cy({body:a,models:c,handleSingleModel:S,log:h,comboName:b.name,judgeModel:d,tuning:e})}let U=o||{depth:0,maxDepth:bM(P.maxComboDepth),visitedComboNames:[b.name],rootComboName:b.name,attemptBudget:{count:0,limit:30}},Z="execute"==("execute"===P.nestedComboMode?"execute":"flatten")&&j?function(a,b,c,d=3){return"flatten"!==c&&b?(!function a(b,c,d=new Set,e=0,f=3){if(e>f)throw Error(`Max combo nesting depth (${f}) exceeded at "${b}"`);if(d.has(b))throw Error(`Circular combo reference detected: ${b}`);d.add(b);let g=cR(c),h=g.find(a=>a.name===b);if(h?.models)for(let b of h.models){let c=cM(b).model;g.find(a=>a.name===c)&&a(c,g,new Set(d),e+1,f)}}(a.name,b,new Set,0,d),cU(a,b)):c0(a,b,d)}(b,j,"execute",U.maxDepth):[],$=Z.some(a=>"combo-ref"===a.kind),_=new Set(["priority","round-robin","random","strict-random","weighted","fill-first"]);if($&&_.has(u)){let c=Z,d=u;if("weighted"===u){let a=cj(P.stickyWeightedLimit),e=cm(b.name,a),f=e?c.find(a=>a.executionKey===e):null;f&&(c=[f,...c.filter(a=>a.executionKey!==f.executionKey)],d="priority")}if("random"===u&&([...c],c=void 0),"strict-random"===u){let a=await (b.name,c.map(a=>a.executionKey),null),d=c.find(b=>b.executionKey===a)||c[0];c=[d,...c.filter(a=>a.executionKey!==d.executionKey)]}let e=null,k=c;if("round-robin"===u){let a=P.stickyRoundRobinLimit;e=cj(null!=a?a:i?.stickyRoundRobinLimit);let{startIndex:d,counter:f}=ck(b.name,c,e);e<=1&&cg.set(b.name,f+1),c=c.map((a,b)=>c[(d+b)%c.length]),k=Z}let o=await cE({body:a,combo:b,strategy:d,effectiveComboStrategy:u,units:c,handleSingleModel:S,isModelAvailable:g,log:h,config:P,settings:i,allCombos:j,signal:m,nesting:U,baseOptions:{body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,relayOptions:l,signal:m,apiKeyAllowedConnections:n},runCombo:dS});if("weighted"===u&&o.response.ok&&o.unit){let a=cj(P.stickyWeightedLimit);a>1&&cn(b.name,o.unit.executionKey,a)}return"round-robin"===u&&o.response.ok&&o.unit&&e&&e>1&&cl(b.name,o.unit,e,k),o.response}if("round-robin"===u)return dT({body:a,combo:b,handleSingleModel:S,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:m});let aa=P.maxRetries??1,ab=bN(P.retryDelayMs,2e3),ac=bN(P.fallbackDelayMs,0),ad=P.maxSetRetries??0,at=bN(P.setRetryDelayMs,2e3),au=async a=>{let b=(0,af.parseModel)(a.modelStr).model||a.modelStr;return!(a.provider&&"OPEN"===(0,ae.qF)(a.provider).getStatus().state||y.providerCooldown.enabled&&a.provider&&"unknown"!==a.provider&&cb(a.provider,a.connectionId??void 0,y)||a.provider&&b&&(0,d.qw)(a.provider,a.connectionId||"",b))&&(!g||await g(a.modelStr,a))},av=await cK(b),aw=j?Array.isArray(j)?await cL(j):{...j,combos:await cL(j.combos||[])}:j,ax=cj(P.stickyWeightedLimit);if("weighted"===u&&!ci.has(b.name)&&ci.size>=500){let a=ci.keys().next().value;void 0!==a&&ci.delete(a)}let ay=new Set;if("weighted"===u)for(let a of q=c1(av,aw))(await Promise.all(a.targets.map(au))).some(Boolean)&&ay.add(a.step.executionKey);let az="weighted"===u?cm(b.name,ax):null,aB=az&&ay.has(az)?az:null;"weighted"!==u||ax<=1?ci.delete(b.name):az&&!aB&&ci.delete(b.name);let aD="weighted"===u?function(a,b,c=null,d=null,e){let f=cU(a,b).filter(a=>!d||d.has(a.executionKey));if(0===f.length)return{orderedTargets:[],selectedStep:null,orderedSteps:[]};let g=c&&f.find(a=>a.executionKey===c)||function(a){if(0===a.length)return null;let b=a.reduce((a,b)=>a+(b.weight||0),0);if(b<=0)return a[void a.length];let c=(void 0)*b;for(let b of a)if((c-=b.weight||0)<=0)return b;return a.at(-1)}(f);if(!g)return{orderedTargets:[],selectedStep:null,orderedSteps:[]};let h=function(a,b,c=!1){let d=a.find(a=>a.executionKey===b),e=a.filter(a=>a.executionKey!==b);return c||e.sort((a,b)=>b.weight-a.weight),d?[d,...e]:e}(f,g.executionKey,cT(a).length>0),i=new Map((e||c1(a,b)).map(a=>[a.step.executionKey,a.targets]));return{orderedTargets:al(h.flatMap(a=>i.get(a.executionKey)||[])),selectedStep:g,orderedSteps:h}}(av,aw,aB,ay,q):null,aE=a=>{if(!aD?.orderedSteps)return null;let b=aD.orderedSteps.find(b=>a.executionKey===b.executionKey||a.executionKey.startsWith(b.executionKey+">"));return b?.executionKey||null},aF="weighted"===u?aD?.orderedTargets||[]:c0(av,aw,bM(P.maxComboDepth));if(aF=await aY(aF,a,h),"weighted"===u?h.info("COMBO",`Weighted selection${aB?" (sticky)":""}${j?" with nested resolution":""}: ${aF.length} total targets`):j&&h.info("COMBO",`${u} with nested resolution: ${aF.length} total targets`),"auto"===u){let c=function(a){if("string"!=typeof a||!a.startsWith("auto"))return{valid:!1,error:"Not an auto-prefixed model"};let b=a.split("/");if(1===b.length)if("auto"===b[0])return{valid:!0,variant:void 0};else return{valid:!1,error:"Invalid auto prefix format"};if(2===b.length){if("auto"!==b[0])return{valid:!1,error:"Invalid auto prefix format"};let a=b[1];return""===a||bq.includes(a)?{valid:!0,variant:""===a?void 0:a}:{valid:!1,error:`Invalid auto variant: ${a}`}}return{valid:!1,error:"Invalid auto prefix format"}}(b.name);if("smart"===(c.valid?c.variant:void 0)||P.pipeline_enabled)try{let c=await bv({body:a,combo:b,handleChatCore:S,log:{info:h.info,warn:h.warn,error:h.error??h.warn},settings:i??{},signal:m??void 0});return c instanceof Response?c:function(a,b){let c="string"==typeof b.model&&b.model.length>0?b.model:"auto",d=`chatcmpl-pipeline-${Date.now()}`,e=Math.floor(Date.now()/1e3),f=a.text??"";if(!0!==b.stream)return new Response(JSON.stringify({id:d,object:"chat.completion",created:e,model:c,choices:[{index:0,message:{role:"assistant",content:f},finish_reason:"stop"}],usage:{prompt_tokens:0,completion_tokens:0,total_tokens:0}}),{status:200,headers:{"Content-Type":"application/json"}});let g=(a,b)=>`data: ${JSON.stringify({id:d,object:"chat.completion.chunk",created:e,model:c,choices:[{index:0,delta:a,finish_reason:b}]})}
|
|
16
|
+
${d}`:""}).filter(Boolean).join("\n\n")}function Q(a,b){let c=a.filter(a=>a&&"object"==typeof a),d=c.filter(a=>"string"==typeof a.role&&("system"===a.role||"developer"===a.role)),e=c.filter(a=>"string"!=typeof a.role||"system"!==a.role&&"developer"!==a.role),f=[...d,...e.slice(-b)];for(;f.length>d.length+1;){let a=P(f);if(8e3>=(0,G.estimateTokens)(a))return f;f=[...d,...f.slice(d.length+1)]}let g=P(f);if((0,G.estimateTokens)(g)>8e3){if(d.length>0)return d;let a=e[e.length-1];return a?[a]:[]}return f}function R(a,b,c=240){return Array.isArray(a)?a.map(a=>"string"==typeof a?a.trim():"").filter(Boolean).slice(0,b).map(a=>a.slice(0,c)):[]}function S(a){let b=function(a){let b=String((0,H.yN)(a)||"").replace(I,"").trim();if(!b)return"";try{return JSON.parse(b),b}catch{let a=b.indexOf("{"),c=b.lastIndexOf("}");if(a>=0&&c>a)return b.slice(a,c+1);return b}}(a);if(!b)return null;try{let a=JSON.parse(b),c="string"==typeof a.summary?a.summary.trim().slice(0,2e3):"",d="string"==typeof a.taskProgress?a.taskProgress.trim().slice(0,1200):"",e=R(a.keyDecisions,8),f=R(a.activeEntities,10);if(!c)return null;return{summary:c,keyDecisions:e,taskProgress:d,activeEntities:f}}catch{return null}}function T(a){return a.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function U(a){let b=(Array.isArray(a.choices)?a.choices:[])[0],c=b?.message;if("string"==typeof c?.content)return c.content;if(Array.isArray(c?.content))return O(c.content);for(let b of Array.isArray(a.output)?a.output:[])if(b&&"object"==typeof b){for(let a of Array.isArray(b.content)?b.content:[])if("string"==typeof a?.text)return a.text}for(let b of Array.isArray(a.content)?a.content:[])if(b&&"object"==typeof b&&"string"==typeof b.text)return String(b.text);return""}async function V(a){let b=N(a.config),c=b.handoffModel||a.model,d=P(Q(Array.isArray(a.messages)?a.messages:[],b.maxMessagesForSummary));if(!d)return;let e=K.replace("{HISTORY}",d),f=await a.handleSingleModel({model:c,messages:[{role:"user",content:e}],stream:!1,max_tokens:800,temperature:.1,_omnirouteSkipContextRelay:!0,_omnirouteInternalRequest:"context-handoff"},c);if(!f.ok)return;let g="";try{let a=await f.clone().json();g=U(a)}catch{try{g=await f.clone().text()}catch{g=""}}let h=S(g);h&&(a.sessionId,a.comboName,a.connectionId,h.summary,h.keyDecisions,h.taskProgress,h.activeEntities,Array.isArray(a.messages)&&a.messages.length,b.handoffThreshold,new Date().toISOString(),a.expiresAt||new Date(Date.now()+18e6).toISOString())}async function W(a){let b=P(Q(Array.isArray(a.messages)?a.messages:[],a.maxMessages));if(!b)return;let c=K.replace("{HISTORY}",b),d=a.handoffModel||a.currModel,e=await a.handleSingleModel({model:d,messages:[{role:"user",content:c}],stream:!1,max_tokens:800,temperature:.1,_omnirouteSkipContextRelay:!0,_omnirouteInternalRequest:"universal-handoff"},d);if(!e.ok)return;let f="";try{let a=await e.clone().json();f=U(a)}catch{try{f=await e.clone().text()}catch{f=""}}let g=S(f);g&&(a.sessionId,a.comboName,a.prevModel,g.summary,g.keyDecisions,g.taskProgress,g.activeEntities,Array.isArray(a.messages)&&a.messages.length,a.prevModel,new Date().toISOString(),new Date(Date.now()+a.ttlMs).toISOString())}var X=c(77868),Y=c(74016),Z=c(69069);let $=new Map;function _(a,b=3){$.has(a)||$.set(a,{running:0,max:b,queue:[],rateLimitedUntil:null});let c=$.get(a);return c.max=b,c}function aa(a){return!!a.rateLimitedUntil&&(!(Date.now()>=a.rateLimitedUntil)||(a.rateLimitedUntil=null,!1))}function ab(a){let b=$.get(a);if(b){for(;b.queue.length>0&&b.running<b.max&&!aa(b);){let c=b.queue.shift();if(!c)break;clearTimeout(c.timer),b.running++,c.resolve(ac(a))}0===b.running&&0===b.queue.length&&$.delete(a)}}function ac(a){let b=!1;return()=>{if(b)return;b=!0;let c=$.get(a);if(c&&c.running>0){if(c.running--,0===c.running&&0===c.queue.length)return void $.delete(a);ab(a)}}}function ad(a,{maxConcurrency:b=3,timeoutMs:c=3e4,maxQueueSize:d}={}){let e=_(a,b);if(e.running<e.max&&!aa(e))return e.running++,Promise.resolve(ac(a));if("number"==typeof d&&d>=0&&e.queue.length>=d){let b=Error(`Semaphore queue full (${d}) for ${a}`);return b.code="SEMAPHORE_QUEUE_FULL",0===e.running&&0===e.queue.length&&$.delete(a),Promise.reject(b)}return new Promise((b,d)=>{let f=setTimeout(()=>{let b=e.queue.findIndex(a=>a.timer===f);-1!==b&&e.queue.splice(b,1);let g=Error(`Semaphore timeout after ${c}ms for ${a}`);g.code="SEMAPHORE_TIMEOUT",d(g)},c);e.queue.push({resolve:b,reject:d,timer:f})})}var ae=c(15300),af=c(40669);let ag=/<omniModel>([^<]+)<\/omniModel>/,ah=/(?:\\n|\n|\r){0,16}<omniModel>([^<]+)<\/omniModel>(?:\\n|\n|\r){0,16}/g;var ai=c(50102),aj=c(61408);function ak(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function al(a){let b=new Set;return a.filter(a=>!b.has(a.executionKey)&&(b.add(a.executionKey),!0))}var am=c(80238);let an=["function","class","import","def","SELECT","async","await","const","let","var","return","```","algorithm","compile","debug","refactor","typescript","python","javascript","code","implement","write a","create a component","endpoint","repository","deploy","install","script","api","database","query","schema","interface","generic","enum","module","package","dependency","fun\xe7\xe3o","classe","importar","definir","consulta","ass\xedncrono","aguardar","constante","vari\xe1vel","retornar","algoritmo","compilar","depurar","refatorar","c\xf3digo","implementar","criar um","componente","como fazer","reposit\xf3rio","configurar","instalar","banco de dados","escrever uma fun\xe7\xe3o","criar uma classe","funci\xf3n","clase","importar","definir","consulta","as\xedncrono","esperar","constante","variable","retornar","algoritmo","compilar","depurar","refactorizar","c\xf3digo","implementar","函数","类","导入","定义","查询","异步","等待","常量","变量","返回","算法","编译","调试","代码","関数","クラス","インポート","非同期","定数","変数","コード","アルゴリズム","функция","класс","импорт","запрос","асинхронный","константа","переменная","алгоритм","код","funktion","klasse","importieren","abfrage","asynchron","konstante","variable","algorithmus","code","함수","클래스","가져오기","정의","쿼리","비동기","대기","상수","변수","반환","코드","دالة","فئة","استيراد","استعلام","غير متزامن","ثابت","متغير","كود","خوارزمية"],ao=["prove","theorem","derive","step by step","chain of thought","formally","mathematical","proof","logically","analyze","reasoning","deduce","infer","hypothesis","convergence","provar","teorema","derivar","passo a passo","cadeia de pensamento","formalmente","matem\xe1tico","prova","logicamente","analisar","racioc\xednio","deduzir","inferir","hip\xf3tese","demonstrar","c\xe1lculo","equa\xe7\xe3o diferencial","integral","otimiza\xe7\xe3o","demostrar","teorema","derivar","paso a paso","formalmente","matem\xe1tico","l\xf3gicamente","证明","定理","推导","逐步","思维链","数学","逻辑","分析","証明","定理","導出","論理的","分析","доказать","теорема","шаг за шагом","математически","логически","beweisen","theorem","schritt f\xfcr schritt","mathematisch","logisch","증명","정리","단계별","수학적","논리적","إثبات","نظرية","خطوة بخطوة","رياضي","منطقياً"],ap=["calculate","solve","equation","proof","formula","integral","derivative","theorem","algebra","geometry","arithmetic","polynomial","matrix","vector","statistics","probability","calcular","resolver","equa\xe7\xe3o","f\xf3rmula","integral","derivada","teorema","\xe1lgebra","geometria","aritm\xe9tica","polin\xf4mio","matriz","vetor","estat\xedstica","probabilidade","calcular","resolver","ecuaci\xf3n","f\xf3rmula","integral","derivada","teorema","\xe1lgebra","geometr\xeda","aritm\xe9tica","polinomio","matriz","vector","estad\xedstica","probabilidad","计算","求解","方程","公式","积分","导数","代数","几何","算术","多项式","矩阵","向量","统计","概率","計算","方程式","公式","積分","微分","代数","幾何学","算術","多項式","行列","ベクトル","統計","確率","вычислить","решить","уравнение","формула","интеграл","производная","алгебра","геометрия","арифметика","полином","матрица","вектор","статистика","вероятность","berechnen","gleichung","formel","integral","ableitung","algebra","geometrie","arithmetik","polynom","matrix","vektor","statistik","wahrscheinlichkeit","계산","방정식","공식","적분","미분","대수","기하학","산술","다항식","행렬","벡터","통계","확률","حل","معادلة","صيغة","تكامل","مشتق","جبر","هندسة","حساب","متعدد الحدود","مصفوفة","متجه","إحصاء","احتمال"],aq=["write","story","poem","creative","brainstorm","blog","article","copywrite","marketing","narrative","fiction","screenplay","lyrics","essay","escrever","hist\xf3ria","poema","criativo","brainstorm","blog","artigo","reda\xe7\xe3o","marketing","narrativa","fic\xe7\xe3o","roteiro","letras","ensaio","escribir","historia","poema","creativo","blog","art\xedculo","redacci\xf3n","marketing","narrativa","ficci\xf3n","guion","letras","ensayo","写","故事","诗","创意","头脑风暴","博客","文章","文案","营销","叙事","小说","剧本","歌词","散文","書く","物語","詩","クリエイティブ","ブログ","記事","コピーライティング","マーケティング","ナラティブ","小説","脚本","歌詞","エッセイ","написать","история","стихотворение","креативный","блог","статья","копирайтинг","маркетинг","нарратив","фантастика","сценарий","текст песни","эссе","schreiben","geschichte","gedicht","kreativ","blog","artikel","texten","marketing","erz\xe4hlung","fiktion","drehbuch","songtext","aufsatz","쓰기","이야기","시","창의적","블로그","기사","카피라이팅","마케팅","서사","소설","시나리오","가사","에세이","كتابة","قصة","قصيدة","إبداعي","مقال","تسويق","سرد","رواية","سيناريو","كلمات أغنية","مقالة"],ar=["what is","define","translate","hello","yes or no","summarize","list","tell me","who is","o que \xe9","definir","traduzir","ol\xe1","oi","sim ou n\xe3o","resumir","listar","me diga","quem \xe9","quando foi","onde fica","explique brevemente","de forma simples","qu\xe9 es","definir","traducir","hola","resumir","listar","什么是","定义","翻译","你好","总结","列出","что такое","определить","перевести","привет","резюмировать","was ist","definieren","\xfcbersetzen","hallo","zusammenfassen","이란","정의","번역","안녕","요약","ما هو","تعريف","ترجمة","مرحبا","ملخص"],as={enabled:!0,simpleMaxWords:60};var at=c(26621);let au={coding:{"claude-sonnet":.95,"claude-opus":.92,"claude-haiku":.78,"gpt-4o":.9,"gpt-4o-mini":.8,"gpt-4-turbo":.88,o1:.93,o3:.95,"o4-mini":.88,codex:.98,"gemini-pro":.85,"gemini-flash":.8,"gemini-2.5-pro":.92,"gemini-2.5-flash":.82,"deepseek-coder":.9,"deepseek-v3":.85,"deepseek-r1":.88,"deepseek-chat":.84,"deepseek-v3.2":.86,qwen:.78,llama:.72,mistral:.75,mixtral:.77,"grok-4-fast":.8,"grok-4":.82,"grok-3":.8,"kimi-k2":.82,"glm-5.1":.78,"glm-5":.78,"minimax-m2.5":.75,"minimax-m2":.72},review:{"claude-sonnet":.92,"claude-opus":.95,"claude-haiku":.7,"gpt-4o":.88,"gpt-4o-mini":.72,o1:.9,o3:.92,"gemini-pro":.9,"gemini-2.5-pro":.93,"gemini-flash":.75,"deepseek-r1":.85,"deepseek-v3":.8},planning:{"claude-opus":.95,"claude-sonnet":.9,"gpt-4o":.88,o1:.92,o3:.95,"gemini-2.5-pro":.93,"gemini-pro":.88,"deepseek-r1":.85},analysis:{"claude-opus":.95,"claude-sonnet":.92,"gemini-2.5-pro":.95,"gemini-pro":.88,"gemini-3.1-pro":.95,"gpt-4o":.85,o1:.9,o3:.93,"deepseek-r1":.88,"deepseek-chat":.8,"kimi-k2":.82,"glm-5.1":.82,"glm-5":.78,"minimax-m2.5":.76},debugging:{"claude-sonnet":.93,"claude-opus":.9,"gpt-4o":.88,o1:.85,"deepseek-coder":.9,"deepseek-v3":.82,"gemini-flash":.78,codex:.92},documentation:{"claude-sonnet":.9,"claude-opus":.88,"gpt-4o":.92,"gpt-4o-mini":.85,"gemini-pro":.88,"gemini-flash":.82,"deepseek-v3":.78},default:{"claude-sonnet":.85,"claude-opus":.85,"gpt-4o":.85,"gemini-pro":.8,"gemini-3.1-pro":.85,"deepseek-v3":.75,"deepseek-chat":.74,"gemini-flash":.72,"grok-4-fast":.72,"grok-4":.74,"grok-3":.73,"kimi-k2":.76,"glm-5.1":.75,"glm-5":.7,"minimax-m2.5":.7}},av=[{pattern:"coder",taskType:"coding",boost:.15},{pattern:"code",taskType:"coding",boost:.1},{pattern:"fast",taskType:"coding",boost:.05},{pattern:"thinking",taskType:"planning",boost:.1},{pattern:"thinking",taskType:"analysis",boost:.1}],aw={premium:{coding:.92,review:.93,planning:.94,analysis:.95,debugging:.9,documentation:.88,default:.85},standard:{coding:.85,review:.84,planning:.85,analysis:.85,debugging:.82,documentation:.85,default:.78},fast:{coding:.78,review:.72,planning:.7,analysis:.72,debugging:.75,documentation:.8,default:.72},budget:{coding:.65,review:.6,planning:.55,analysis:.58,debugging:.6,documentation:.7,default:.55}},ax=new Map;function ay(a,b,c){let d=`${a}:${b}:${c}`;if(ax.has(d))return ax.get(d);try{!1;return null}catch{return null}}let az=null;function aA(a,b){return function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=ay(c,d,"user_override");if(null!==e)return{score:e,source:"user_override"};let f=ay(c,d,"arena_elo");if(null!==f)return{score:f,source:"arena_elo"};let g=function(a,b){if(!a.endsWith(aB))return null;let c=a.slice(0,-aB.length);return 0===c.length||c===a?null:ay(c,b,"arena_elo")}(c,d);if(null!==g)return{score:g,source:"arena_elo_free_alias"};let h=function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=ay(c,d,"models_dev_tier");if(null!==e)return e;let f=function(){if(az)return az;try{let a=(0,at.sm)().prepare("SELECT * FROM model_capabilities").all(),b={};for(let c of a){let a="string"==typeof c.model_id?c.model_id:"";a&&(b[a.toLowerCase()]={tool_call:!0===c.tool_call||1===c.tool_call||!1!==c.tool_call&&0!==c.tool_call&&null,reasoning:!0===c.reasoning||1===c.reasoning||!1!==c.reasoning&&0!==c.reasoning&&null,limit_context:"number"==typeof c.limit_context?c.limit_context:null})}return az=b,b}catch{return null}}();if(!f)return null;let g=f[c];if(!g)return null;let h=aw[!0===g.reasoning?"premium":!0===g.tool_call&&(g.limit_context??0)>=128e3?"standard":!0===g.tool_call?"fast":"budget"];return h?h[d]??h.default??null:null}(c,d);if(null!==h)return{score:h,source:"models_dev_tier"};let i=function(a,b){for(let[c,d]of Object.entries(au[b]||au.default))if(a.includes(c))return d;return null}(c,d);return null!==i?{score:i,source:"fitness_table"}:{score:function(a,b){let c=.5;for(let d of av)a.includes(d.pattern)&&b===d.taskType&&(c+=d.boost);return Math.min(1,c)}(c,d),source:"wildcard_boost"}}(a,b).score}let aB="-free";function aC(a){return Number.isFinite(a)?Math.min(1,Math.max(0,a)):0}let aD="free",aE={"gpt-4o":{inputCostPer1M:2.5,outputCostPer1M:10,isFree:!1},"gpt-4o-mini":{inputCostPer1M:.15,outputCostPer1M:.6,isFree:!1},"claude-fable-5":{inputCostPer1M:15,outputCostPer1M:75,isFree:!1},"claude-opus-4-8":{inputCostPer1M:15,outputCostPer1M:75,isFree:!1},"claude-opus-4-7":{inputCostPer1M:15,outputCostPer1M:75,isFree:!1},"claude-sonnet-4-6":{inputCostPer1M:3,outputCostPer1M:15,isFree:!1},"claude-haiku-4-5":{inputCostPer1M:.8,outputCostPer1M:4,isFree:!1},"gemini-2.5-flash":{inputCostPer1M:.15,outputCostPer1M:.6,isFree:!1},"gemini-2.5-pro":{inputCostPer1M:1.25,outputCostPer1M:5,isFree:!1},"deepseek-chat":{inputCostPer1M:.27,outputCostPer1M:1.1,isFree:!1},"deepseek-reasoner":{inputCostPer1M:.55,outputCostPer1M:2.19,isFree:!1},"glm-4.7":{inputCostPer1M:.6,outputCostPer1M:.6,isFree:!1},"glm-5.1":{inputCostPer1M:.5,outputCostPer1M:.5,isFree:!1},"minimax-m2.1":{inputCostPer1M:.2,outputCostPer1M:.2,isFree:!1},"grok-4-fast":{inputCostPer1M:.2,outputCostPer1M:.5,isFree:!1},"kimi-k2-thinking":{inputCostPer1M:0,outputCostPer1M:0,isFree:!0},"qwen3-coder-plus":{inputCostPer1M:0,outputCostPer1M:0,isFree:!0},"longcat-2.0":{inputCostPer1M:.75,outputCostPer1M:2.95,isFree:!0,freeQuotaLimit:1e7}};function aF(a,b){let c=b.toLowerCase();if(aE[c])return aE[c];let d=`${a}/${b}`.toLowerCase();return aE[d]?aE[d]:{inputCostPer1M:5,outputCostPer1M:15,isFree:!1}}var aG=c(44046),aH=c(40615);let aI=aG.Ik({provider:aG.Yj().min(1),tier:aG.k5(["free","cheap","premium"])}),aJ=aG.Ik({provider:aG.Yj().min(1),modelPattern:aG.Yj().min(1),tier:aG.k5(["free","cheap","premium"])});aG.Ik({version:aG.Yj().default("1.0.0"),defaults:aG.Ik({freeThreshold:aG.ai().min(0).default(0),cheapThreshold:aG.ai().min(0).default(1)}),providerOverrides:aG.YO(aI).default([]),modelOverrides:aG.YO(aJ).default([]),freeProviders:aG.YO(aG.Yj()).default([])});let aK={version:"1.0.0",defaults:{freeThreshold:0,cheapThreshold:1},providerOverrides:[],modelOverrides:[],freeProviders:[...new Set(["kiro","qoder","pollinations","longcat","cloudflare-ai","qwen","nvidia-nim","cerebras","groq",...function(){try{let a=[];for(let b of Object.values(aH.vh)){if(!b||"object"!=typeof b||!0!==b.noAuth)continue;let c=b.serviceKinds;(!Array.isArray(c)||0===c.length||c.includes("llm"))&&"string"==typeof b.id&&b.id.length>0&&a.push(b.id)}return a}catch{return[]}}()])]},aL=new Map;function aM(a,b){let c,d,e=`${a}::${b}`;if(aL.has(e))return aL.get(e);if(aK.freeProviders.includes(a.toLowerCase())){let c={provider:a,model:b,tier:aD,reason:`Provider '${a}' is in explicit free providers list`,costPer1MInput:0,costPer1MOutput:0,hasFreeTier:!0};return aL.set(e,c),c}let f=aK.providerOverrides.find(b=>b.provider.toLowerCase()===a.toLowerCase());if(f){let c=aF(a,b),d={provider:a,model:b,tier:f.tier,reason:`Provider-level override: '${a}' → ${f.tier}`,costPer1MInput:c.inputCostPer1M,costPer1MOutput:c.outputCostPer1M,hasFreeTier:c.isFree,freeQuotaLimit:c.freeQuotaLimit};return aL.set(e,d),d}let g=aK.modelOverrides.find(c=>{var d;let e;return c.provider.toLowerCase()===a.toLowerCase()&&(d=c.modelPattern,e=d.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*"),RegExp(`^${e}$`,"i").test(b))});if(g){let c=aF(a,b),d={provider:a,model:b,tier:g.tier,reason:`Model-level override: '${a}/${b}' matches '${g.modelPattern}' → ${g.tier}`,costPer1MInput:c.inputCostPer1M,costPer1MOutput:c.outputCostPer1M,hasFreeTier:c.isFree,freeQuotaLimit:c.freeQuotaLimit};return aL.set(e,d),d}let h=aF(a,b);h.isFree||h.inputCostPer1M<=aK.defaults.freeThreshold?(c=aD,d=`Cost-based: $${h.inputCostPer1M}/M input ≤ free threshold ($${aK.defaults.freeThreshold}/M)`):h.inputCostPer1M<=aK.defaults.cheapThreshold?(c="cheap",d=`Cost-based: $${h.inputCostPer1M}/M input ≤ cheap threshold ($${aK.defaults.cheapThreshold}/M)`):(c="premium",d=`Cost-based: $${h.inputCostPer1M}/M input > cheap threshold ($${aK.defaults.cheapThreshold}/M)`);let i={provider:a,model:b,tier:c,reason:d,costPer1MInput:h.inputCostPer1M,costPer1MOutput:h.outputCostPer1M,hasFreeTier:h.isFree,freeQuotaLimit:h.freeQuotaLimit};return aL.set(e,i),i}let aN={quota:.15,health:.2,costInv:.15,latencyInv:.12,taskFit:.08,stability:.05,tierPriority:.05,tierAffinity:.05,specificityMatch:.05,contextAffinity:.05,resetWindowAffinity:0,connectionDensity:.05};function aO(a,b){return aC(b.quota*a.quota+b.health*a.health+b.costInv*a.costInv+b.latencyInv*a.latencyInv+b.taskFit*a.taskFit+b.stability*a.stability+b.tierPriority*a.tierPriority+(b.tierAffinity??0)*a.tierAffinity+(b.specificityMatch??0)*a.specificityMatch+(b.contextAffinity??0)*a.contextAffinity+(b.resetWindowAffinity??0)*a.resetWindowAffinity+(b.connectionDensity??0)*a.connectionDensity)}function aP(a,b,c,d,e){var f,g;let h=Math.max(...b.map(a=>a.costPer1MTokens),.001),i=Math.max(...b.map(a=>a.p95LatencyMs),1),j=Math.max(...b.map(a=>a.latencyStdDev),.001);return{quota:aC(a.quotaRemaining/100),health:"CLOSED"===a.circuitBreakerState?1:.5*("HALF_OPEN"===a.circuitBreakerState),costInv:aC(1-a.costPer1MTokens/h),latencyInv:aC(1-a.p95LatencyMs/i),taskFit:aC(d(a.model,c)),stability:aC(1-a.latencyStdDev/j),tierPriority:(f=a.accountTier,g=a.quotaResetIntervalSecs,Math.min(1,.8*(({ultra:1,pro:.67,standard:.33,free:0})[f?.toLowerCase()??""]??.33)+.2*(null!=g&&g>0?Math.max(0,1-g/2592e3):0))),tierAffinity:function(a,b){if(!b)return .5;try{let c=aM(a.provider,a.model),d=["free","cheap","premium"],e=d.indexOf(c.tier),f=d.indexOf(b.recommendedMinTier);if(e===f)return 1;if(1===Math.abs(e-f))return .7;return .3}catch{return .5}}(a,e),specificityMatch:function(a,b){if(!b)return .5;try{let c=aM(a.provider,a.model),d=b.specificity.score;if("free"===c.tier)return d<=15?.9:.2;if("cheap"===c.tier)return d>15&&d<=50?.9:.4;if("premium"===c.tier)return d>50?.9:.3;return .5}catch{return .5}}(a,e),contextAffinity:aC(a.contextAffinity??.5),resetWindowAffinity:aC(a.resetWindowAffinity??.5),connectionDensity:aC(((a.connectionPoolSize??1)-1)/10)}}function aQ(a,b,c=aN,d=()=>.5,e){return a.map(f=>{let g=aP(f,a,b,d,e);return{provider:f.provider,model:f.model,score:aO(g,c),factors:g,connectionId:f.connectionId}}).sort((a,b)=>b.score-a.score)}var aR=c(87094),aS=c(57247);let aT=Number(process.env.QUOTA_SOFT_DEPRIORITIZE_FACTOR??"0.7"),aU=Number(process.env.STATUS_SOFT_DEPRIORITIZE_FACTOR??"0.5"),aV=new Map;function aW(a,b,c){if(!a||!b)return;let d=aV.get(a);if(!d)return;let e=d.get(b);e&&(e.quotaSoftPenalty=c)}function aX(a){return Array.isArray(a)?a.map(a=>"string"==typeof a?a.trim():"").filter(Boolean):"string"==typeof a?a.split(",").map(a=>a.trim()).filter(Boolean):[]}async function aY(a,b,c){let{tags:d,matchMode:e}={tags:[],matchMode:"all"};if(0===d.length||0===a.length)return a;let f=Array.from(new Set(a.map(a=>a.providerId||a.provider))).filter(a=>"string"==typeof a&&a.length>0),g=new Map;await Promise.all(f.map(async a=>{try{let b=await (0,aR.P)({provider:a,isActive:!0});g.set(a,Array.isArray(b)?b:[])}catch(b){c.warn?.("COMBO",`Tag routing failed to load connections for provider=${a}: ${b instanceof Error?b.message:String(b)}`),g.set(a,[])}}));let h=a.reduce((a,b)=>{let c=b.providerId||b.provider,d=(g.get(c)?.filter(a=>{let c="string"==typeof a.id&&a.id.trim().length>0?a.id:null;return!!c&&(!b.connectionId||c===b.connectionId)})||[]).filter(a=>(a.providerSpecificData,!1)).map(a=>a.id).filter(a=>"string"==typeof a);if(0===d.length)return a;if(b.connectionId)return a.push(b),a;let e=Array.from(new Set(d)),f=Array.isArray(b.allowedConnectionIds)?b.allowedConnectionIds.filter(a=>"string"==typeof a&&a.length>0):null,h=f&&f.length>0?e.filter(a=>f.includes(a)):e;return 0===h.length||a.push({...b,allowedConnectionIds:h}),a},[]);return 0===h.length?(c.info?.("COMBO",`Tag routing matched 0/${a.length} targets for [${d.join(", ")}] (${e}); falling back to the full target set`),a):(c.info?.("COMBO",`Tag routing matched ${h.length}/${a.length} targets for [${d.join(", ")}] (${e})`),h)}async function aZ(a,b){let c=b?.autoConfig||(ak(b?.config?.auto)?(b?.config).auto:null)||b?.config||{};if(Array.isArray(c?.candidatePool)&&c.candidatePool.length>0)return a;try{let b=await (0,aR.P)({isActive:!0});for(let c of[...new Set(b.map(a=>a.provider).filter(a=>"string"==typeof a&&a.length>0))])for(let b of(0,aS.SM)(c)){let d=`${c}/${b.id}`;a.some(a=>a.modelStr===d)||a.push({kind:"model",stepId:d,executionKey:d,provider:c,providerId:c,modelStr:d,weight:1,connectionId:null,label:null})}}catch{}return a}var a$=c(92085);let a_=()=>void 0,a0={"ship-fast":{quota:.14,health:.28,costInv:.05,latencyInv:.32,taskFit:.1,stability:0,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:.01,resetWindowAffinity:0,connectionDensity:.05},"cost-saver":{quota:.14,health:.19,costInv:.37,latencyInv:.05,taskFit:.1,stability:.05,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05},"quality-first":{quota:.1,health:.18,costInv:.05,latencyInv:.05,taskFit:.37,stability:.15,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05},"offline-friendly":{quota:.37,health:.28,costInv:.1,latencyInv:.05,taskFit:0,stability:.1,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05},"reliability-first":{quota:.14,health:.37,costInv:.04,latencyInv:.05,taskFit:.1,stability:.2,tierPriority:.05,tierAffinity:0,specificityMatch:0,contextAffinity:0,resetWindowAffinity:0,connectionDensity:.05}};class a1{isExcluded(a){let b=this.exclusions.get(a);return!(!b||Date.now()-b.excludedAt>b.cooldownMs)}evaluate(a,b,c){let d=this.exclusions.get(a);if(d&&b>=.3&&Date.now()-d.excludedAt>d.cooldownMs)return this.exclusions.delete(a),{excluded:!1,reason:`Re-admitted: score ${b.toFixed(2)} >= 0.3`};if(this.isExcluded(a))return"HALF_OPEN"===c&&d?(d.probeCount++,{excluded:!1,isProbe:!0,reason:`Probe request #${d.probeCount}`}):{excluded:!0,reason:d?.reason||"Excluded"};if(b<.2){let c=d?Math.min(2*d.cooldownMs,18e5):3e5;return this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:c,reason:`Score ${b.toFixed(2)} < 0.2`,probeCount:0}),{excluded:!0,reason:`Excluded: score ${b.toFixed(2)} below threshold`}}return"OPEN"===c?(this.exclusions.set(a,{provider:a,excludedAt:Date.now(),cooldownMs:3e5,reason:"Circuit breaker OPEN",probeCount:0}),{excluded:!0,reason:"Circuit breaker OPEN"}):{excluded:!1}}recordProbeResult(a,b){let c=this.exclusions.get(a);c&&(b&&c.probeCount>=3?this.exclusions.delete(a):b||(c.cooldownMs=Math.min(2*c.cooldownMs,18e5),c.excludedAt=Date.now(),c.probeCount=0))}updateIncidentMode(a){let b=a.length;if(0===b)return this.incidentMode=!1,!1;let c=a.filter(a=>"OPEN"===a).length;return this.incidentMode=c/b>.5,this.incidentMode}isInIncidentMode(){return this.incidentMode}getExclusions(){return[...this.exclusions.values()]}getStatus(){let a=Date.now();return{exclusionCount:this.exclusions.size,incidentMode:this.incidentMode,exclusions:[...this.exclusions.values()].map(b=>({provider:b.provider,reason:b.reason,remainingMs:Math.max(0,b.cooldownMs-(a-b.excludedAt))}))}}constructor(){this.exclusions=new Map,this.incidentMode=!1}}let a2=null,a3={smart:{top:.5,mid:.3,rest:.2},fast:{top:.3,mid:.5,rest:.2},cheap:{top:.2,mid:.3,rest:.5},coding:{top:.6,mid:.25,rest:.15},default:{top:.45,mid:.35,rest:.2}};class a4{constructor(a){this.tierCounters=new Map,this.rrCounter=0,this.comboName=a}pick(a){if(0===a.length)throw Error(`ScoreTierRotator: no candidates to pick from for combo=${this.comboName}`);if(1===a.length)return a[0];let b=function(a){if(0===a.length)return{top:[],mid:[],rest:[]};let b=a[0].score,c=b-a[a.length-1].score,d=[],e=[],f=[];for(let g of a){let a=b-g.score;a<=1e-4?d.push(g):c<=1e-4||a<=.3*c?e.push(g):f.push(g)}if(0===e.length&&f.length>0){let a=Math.ceil(f.length/2);e.push(...f.splice(0,a))}return{top:d,mid:e,rest:f}}(a),c=a[0].score,d=a[a.length-1].score;if(b.top.length>0&&c-d>=.1)return this.pickFromPool(b.top);let e=function(a){let b=a.toLowerCase();if(a3[b])return a3[b];for(let a of Object.keys(a3))if(b.startsWith(`${a}-`)||b.includes(a))return a3[a];return a3.default}(this.comboName);return function(a,b,c,d){let e={top:a.top.length>0?b.top:0,mid:a.mid.length>0?b.mid:0,rest:a.rest.length>0?b.rest:0},f=e.top+e.mid+e.rest;if(f<=0)return d();let g=Math.random()*f,h=0;return e.top>0&&(h+=e.top)>=g?c(a.top):e.mid>0&&(h+=e.mid)>=g?c(a.mid):e.rest>0?c(a.rest):d()}(b,e,a=>this.pickFromPool(a),()=>this.advance(b,e,a))}advance(a,b,c){for(let c of["top","mid","rest"])if(a[c].length>0&&b[c]>0){let b=this.tierCounters.get(c)??0,d=a[c][b%a[c].length];return this.tierCounters.set(c,b+1),d}return a.top[0]??a.mid[0]??a.rest[0]??c[0]}pickFromPool(a){if(0===a.length)throw Error("pickFromPool: empty pool");if(1===a.length)return a[0];let b=a[this.rrCounter%a.length];return this.rrCounter=(this.rrCounter+1)%a.length,b}}let a5=new Map;function a6(a){let b=a5.get(a);return b||(b=new a4(a),a5.set(a,b)),b}c(58353);class a7{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=aQ(c.length>0?c:a,b.taskType,void 0,aA),e=d[0];if(!e)throw Error("[RulesStrategy] No candidates to score");return{provider:e.provider,model:e.model,strategy:this.name,reason:`RulesStrategy: score=${e.score.toFixed(3)} (quota=${e.factors.quota.toFixed(2)}, health=${e.factors.health.toFixed(2)}, cost=${e.factors.costInv.toFixed(2)}, taskFit=${e.factors.taskFit.toFixed(2)})`,candidatesConsidered:d.length,finalScore:e.score}}constructor(){this.name="rules",this.description="6-factor weighted scoring: quota, health, cost, latency, taskFit, stability"}}class a8{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a,e=[...d].sort((a,b)=>a.costPer1MTokens-b.costPer1MTokens)[0];if(!e)throw Error("[CostStrategy] No candidates available");return{provider:e.provider,model:e.model,strategy:this.name,reason:`CostStrategy: cheapest at $${e.costPer1MTokens.toFixed(3)}/1M tokens`,candidatesConsidered:d.length,finalScore:0===e.costPer1MTokens?1:1/e.costPer1MTokens}}constructor(){this.name="cost",this.description="Always selects cheapest available provider (by costPer1MTokens)"}}function a9(a){let b=Number(a);return Number.isFinite(b)&&b>0?b:null}function ba(a,b,c=1){return Math.max(...a.map(a=>a9(b(a))??0),c)}function bb(a,b){return null==a?.5:be(a,b)}class bc{select(a,b){let c=a.filter(a=>"OPEN"!==a.circuitBreakerState),d=c.length>0?c:a;if(0===d.length)throw Error("[LatencyStrategy] No candidates available");let e=ba(d,a=>a.p95LatencyMs),f=ba(d,a=>a.avgTtftMs??a.p95LatencyMs),g=ba(d,a=>a.avgE2ELatencyMs??a.p95LatencyMs),h=ba(d,a=>a.avgTokensPerSecond),i=ba(d,a=>a.latencyStdDev,.001),j=d.map(a=>{let b,c=a9(a.p95LatencyMs),d=a9(a.avgTtftMs)??c,j=a9(a.avgE2ELatencyMs)??c,k=a9(a.avgTokensPerSecond),l=Number.isFinite(b=Number(a.failureRate??a.errorRate))&&b>=0?Math.min(1,b):0,m=bg(a),n=bb(c,e),o=bb(d,f),p=bb(j,g),q=null==k?.5:aC(k/Math.max(h,1e-6)),r=1-l,s=.25*o+.2*q+.18*p+.12*n+.15*r+.05*m+.05*bb(a9(a.latencyStdDev),i);return{candidate:a,score:s*Math.max(.05,r*r)*Math.max(.25,m),ttft:d,e2e:j,tps:k,failureRate:l}}).sort((a,b)=>b.score-a.score)[0];if(!j)throw Error("[LatencyStrategy] No candidates available");return{provider:j.candidate.provider,model:j.candidate.model,strategy:this.name,reason:`LatencyStrategy: ttft=${j.ttft??"n/a"}ms, tps=${j.tps??"n/a"}, e2e=${j.e2e??"n/a"}ms, p95=${j.candidate.p95LatencyMs}ms, failRate=${(100*j.failureRate).toFixed(2)}%`,candidatesConsidered:d.length,finalScore:j.score}}constructor(){this.name="latency",this.description="Prioritizes the fastest reliable provider-model pair using TTFT, TPS, E2E latency, health, fail rate, and stability"}}function bd(a){let b=Number(a);return Number.isFinite(b)&&b>0?b:void 0}function be(a,b){return!Number.isFinite(a)||a<0?0:!Number.isFinite(b)||b<=0?1:aC(1-a/b)}function bf(a,b){return b<=0?+(0===a):aC(b/Math.max(a,1e-6))}function bg(a){return"CLOSED"===a.circuitBreakerState?1:.5*("HALF_OPEN"===a.circuitBreakerState)}class bh{select(a,b){let c,d=a.filter(a=>"OPEN"!==a.circuitBreakerState),e=d.length>0?d:a;if(0===e.length)throw Error("[SLAStrategy] No candidates available");let f=Math.max(...e.map(a=>a.costPer1MTokens),.001),g=Math.max(...e.map(a=>a.latencyStdDev),.001),h={targetP95Ms:bd(b.sla?.targetP95Ms)??2e3,maxErrorRate:(Number.isFinite(c=Number(b.sla?.maxErrorRate))&&c>=0?Math.min(1,c):void 0)??.05,maxCostPer1MTokens:bd(b.sla?.maxCostPer1MTokens)??0,hardConstraints:b.sla?.hardConstraints===!0},i=e.map(a=>{let b,c=bf(a.p95LatencyMs,h.targetP95Ms),d=bf(a.errorRate,h.maxErrorRate),e=h.maxCostPer1MTokens>0?bf(a.costPer1MTokens,h.maxCostPer1MTokens):be(a.costPer1MTokens,f),i=be(a.latencyStdDev,g),j=bg(a),k=(b=+("OPEN"===a.circuitBreakerState),a.p95LatencyMs>h.targetP95Ms&&(b+=(a.p95LatencyMs-h.targetP95Ms)/h.targetP95Ms),a.errorRate>h.maxErrorRate&&(b+=h.maxErrorRate>0?(a.errorRate-h.maxErrorRate)/h.maxErrorRate:a.errorRate),h.maxCostPer1MTokens>0&&a.costPer1MTokens>h.maxCostPer1MTokens&&(b+=(a.costPer1MTokens-h.maxCostPer1MTokens)/h.maxCostPer1MTokens),b);return{candidate:a,violationScore:k,score:.35*c+.35*d+.15*j+.1*e+.05*i}}).sort((a,b)=>h.hardConstraints&&a.violationScore-b.violationScore||b.score-a.score),j=i[0];if(!j)throw Error("[SLAStrategy] No candidates available after scoring");let k=i.some(a=>0===a.violationScore);return{provider:j.candidate.provider,model:j.candidate.model,strategy:this.name,reason:`SLAStrategy: p95=${j.candidate.p95LatencyMs}ms/${h.targetP95Ms}ms, errorRate=${(100*j.candidate.errorRate).toFixed(2)}%/${(100*h.maxErrorRate).toFixed(2)}%, cost=$${j.candidate.costPer1MTokens.toFixed(3)}/1M${k?"":"; no candidate met all SLA constraints"}`,candidatesConsidered:e.length,finalScore:j.score}}constructor(){this.name="sla-aware",this.description="Selects the provider most likely to satisfy latency, error-rate, and cost SLOs"}}class bi{select(a,b){if(!1===b.lkgpEnabled)return bp("rules").select(a,b);if(b.lastKnownGoodProvider){let c=a.filter(a=>a.provider===b.lastKnownGoodProvider&&"OPEN"!==a.circuitBreakerState);if(c.length>0){let a=c[0];return{provider:a.provider,model:a.model,strategy:this.name,reason:`LKGP: using last known good provider ${a.provider}`,candidatesConsidered:1,finalScore:1}}}return bp("rules").select(a,b)}constructor(){this.name="lkgp",this.description="Tries last known good provider first, then falls back to rules"}}let bj=new Map,bk=new a7,bl=new a8,bm=new bc,bn=new bh,bo=new bi;function bp(a){let b=bj.get(a);return b||(console.warn(`[RouterStrategy] Strategy '${a}' not found, falling back to 'rules'`),bk)}bj.set("rules",bk),bj.set("cost",bl),bj.set("eco",bl),bj.set("latency",bm),bj.set("fast",bm),bj.set("sla-aware",bn),bj.set("sla",bn),bj.set("lkgp",bo);let bq=["coding","fast","cheap","offline","smart","lkgp"],br=()=>void 0,bs=()=>void 0,bt={"best-reasoning":{minFitness:.85},cheapest:{maxFitness:.75},moderate:{minFitness:.6,maxFitness:.9}},bu={code:"code",math:"math",reasoning:"reasoning",creative:"creative",medium:"medium",simple:"simple"};async function bv({body:a,combo:b,handleChatCore:c,log:d,settings:e,signal:f}){let g=b.config;if(!(g?.pipeline_enabled??e.pipeline_enabled))throw d.info("PIPELINE","Pipeline disabled for this combo"),Error("PIPELINE_DISABLED");let h=a.messages||[],i=function(a){let b=0;for(let c of a)if("string"==typeof c.content)b+=Math.ceil(c.content.length/4);else if(Array.isArray(c.content))for(let a of c.content)"object"==typeof a&&null!==a&&"string"==typeof a.text&&(b+=Math.ceil(a.text.length/4));return b}(h),j=g?.skip_pipeline_for_tokens_under??e.skip_pipeline_for_tokens_under??50;if(i<j)throw d.info("PIPELINE",`Token estimate ${i} < threshold ${j}, skipping pipeline`),Error("PIPELINE_TOKEN_THRESHOLD");let k=[...h].reverse().find(a=>"user"===a.role),l="string"==typeof k?.content?k.content:Array.isArray(k?.content)?k.content.filter(a=>"text"===a.type).map(a=>a.text||"").join(" "):"",m=h.find(a=>"system"===a.role),n=function(a,b){let c=`${b??""} ${a}`.toLowerCase(),d=a.trim().split(/\s+/).length;for(let a of an)if(c.includes(a.toLowerCase()))return"code";for(let a of ap)if(c.includes(a.toLowerCase()))return"math";for(let a of ao)if(c.includes(a.toLowerCase()))return"reasoning";for(let a of aq)if(c.includes(a.toLowerCase()))return"creative";if(d<60){for(let a of ar)if(c.includes(a.toLowerCase()))return"simple"}return"medium"}(l,"string"==typeof m?.content?m.content:void 0),o=bu[n]??"simple";d.info("PIPELINE",`Intent: ${n} → task: ${o}`);let p=br(l,o),q=b.models,r=Array.isArray(q)?q.map(a=>{if("string"==typeof a)return a;let b=a?.model;return"string"==typeof b?b:null}).filter(a=>"string"==typeof a&&a.length>0):[],s=r.length?r:["deepseek-chat"],t=async({messages:b,stream:e,fitnessTier:f})=>{let g=f?function(a,b,c){let d=b.map(a=>({model:a,fitness:aA(a,c)})).sort((a,b)=>b.fitness-a.fitness),e=bt[a];if(!e)return d[0]?.model??"deepseek-chat";let f=d.filter(({fitness:a})=>(void 0===e.minFitness||!(a<e.minFitness))&&(void 0===e.maxFitness||!(a>e.maxFitness)));return f[0]?.model??d[0]?.model??"deepseek-chat"}(f,s,o):void 0,h={...a,messages:b,stream:e};d.info("PIPELINE",`Stage: tier=${f}, model=${g}, stream=${e}`);let i=await c(h,g);if(e)return{text:"",response:i};if(!i.ok){let a=await i.text().catch(()=>"unknown error");return d.warn("PIPELINE",`Stage returned ${i.status}: ${a.slice(0,200)}`),{text:""}}try{let a=await i.json(),b=a?.choices?.[0]?.message?.content;if("string"==typeof b)return{text:b};return{text:JSON.stringify(a)}}catch{return d.warn("PIPELINE","Failed to parse stage response as JSON"),{text:""}}},u=g?.max_reflection_loops??e.max_reflection_loops??1,v=async a=>t({...a,fitnessTier:a.fitnessTier}),w=await bs(p,v),x=0;for(;"fail"===w.reflectVerdict&&x<u;){x++,d.info("PIPELINE",`Reflection failed, re-running (loop ${x}/${u})`);let a=br(l,o),b=await bs(a,v);if("pass"===b.reflectVerdict){w=b;break}}let y=w.stages[w.stages.length-1];return y?.text===""&&w.text||d.info("PIPELINE",`Complete: ${w.stages.length} stages, fallback=${w.fallback}, verdict=${w.reflectVerdict}`),w}var bw=c(47215),bx=c(29385),by=c(77598);function bz(a){return"number"!=typeof a||!Number.isFinite(a)||a<=0?0:a>=1?1:a}function bA(a){return 1-Math.max(bz(a?.util5h),bz(a?.util7d))}async function bB(a,b){try{let d=(await c.e(1999).then(c.bind(c,71999))).getSaturation,[e,f]=await Promise.all([d(a,b,{unit:"percent",window:"5h"}),d(a,b,{unit:"percent",window:"weekly"})]);return{util5h:e,util7d:f}}catch{return}}let bC=new Map;function bD(a,b){let c=bC.get(a);if(c)c.connectionId=b,c.lastUsedAt=Date.now();else{let c=Date.now();for(let[a,b]of bC)c-b.lastUsedAt>9e5&&bC.delete(a);for(;bC.size>500;){let a=null,b=1/0;for(let[c,d]of bC)d.lastUsedAt<b&&(b=d.lastUsedAt,a=c);if(null===a)break;bC.delete(a)}bC.set(a,{connectionId:b,createdAt:Date.now(),lastUsedAt:Date.now()})}}async function bE(a,b){let c={targets:a,messageHash:null,stuck:!1};try{if(a.length<=1)return c;let d=function(a){let b;if(!Array.isArray(a)||0===a.length)return null;let c=a.find(a=>a?.role==="user");if(!c)return null;if("string"==typeof c.content)b=c.content;else{if(!Array.isArray(c.content))return null;b=c.content.filter(a=>null!=a&&"object"==typeof a).map(a=>"string"==typeof a.text?a.text:"").join("")}return b?(0,by.createHash)("sha256").update(b).digest("hex").slice(0,16):null}(b);if(!d)return c;let e=bC.get(d);if(!e)return{targets:a,messageHash:d,stuck:!1};if(Date.now()-e.lastUsedAt>9e5)return bC.delete(d),{targets:a,messageHash:d,stuck:!1};let{connectionId:f}=e,g=a.findIndex(a=>a.connectionId===f);if(-1===g)return bC.delete(d),{targets:a,messageHash:d,stuck:!1};let h=a[g],i=await bB(f,h.provider);if(.15>=bA(i))return bC.delete(d),{targets:a,messageHash:d,stuck:!1};let j=[a[g],...a.slice(0,g),...a.slice(g+1)];return e.lastUsedAt=Date.now(),{targets:j,messageHash:d,stuck:!0}}catch{return c}}let bF=new Map;function bG(a,b=Date.now()){if(!a)return 0;let c=bF.get(a);return!c||c.expiresAtMs<=b?0:c.count}let bH=new Map;function bI(a){return Number.isFinite(a)&&a>0?a:1}let bJ=[429,502,503,504],bK=[/unavailable/i,/service temporarily unavailable/i];function bL(a,b,c){let{provider:d,modelStr:e,connectionId:f}=a;return d&&f&&c.has(`${d}:${f}`)?`Skipping ${e} — connection ${f} for provider ${d} had connection error (#1731v2)`:d&&b.has(d)?`Skipping ${e} — provider ${d} marked exhausted this request (#1731)`:null}function bM(a){let b=Math.floor(Number(a));return!Number.isFinite(b)||b<1?3:Math.min(b,10)}function bN(a,b){let c=Number(a);return!Number.isFinite(c)||c<0?b:c}function bO(a){return(0,e.yj)(404,a)}function bP(a){if(!a||"object"!=typeof a)return!1;let b=a.error;if(!b||"object"!=typeof b)return!1;let c=b.code;return"STREAM_READINESS_TIMEOUT"===c||"STREAM_EARLY_EOF"===c}function bQ(a){if(!a||"object"!=typeof a)return!1;let b=a.error;return!!b&&"object"==typeof b&&"TOKEN_LIMIT_EXCEEDED"===b.code}function bR(a){return{executionKey:a.executionKey,stepId:a.stepId,provider:a.provider,providerId:a.providerId,connectionId:a.connectionId,label:a.label}}async function bS(a){try{let b=await (0,aR.getProviderConnectionById)(a),c=b?.maxConcurrent;return"number"==typeof c&&Number.isFinite(c)&&c>0?c:null}catch{return null}}async function bT(a){let b=new Map,c=new Set;for(let b of a){let a=b.connectionId??"";a&&c.add(a)}for(let a of c)b.set(a,await bS(a));return b}async function bU(a,b,c,d){let e=a?.connectionId??"";if(!e||null===b||b<=0)return null;try{return await ad(`qsconn:${e}`,{maxConcurrency:b,timeoutMs:c.queueTimeoutMs,maxQueueSize:c.maxQueueSize})}catch{return d.warn("COMBO",`Quota-share concurrency: connection ${e} gate saturated (cap=${b}) — proceeding without a slot`),null}}let bV=async()=>void 0,bW=new Map;function bX(a=Date.now()){for(let[b,c]of bW)c.expiresAt<=a&&bW.delete(b);for(;bW.size>200;){let a=bW.keys().next().value;if(!a)break;bW.delete(a)}}function bY(a,b,c,d){let e=Number(a);return Number.isFinite(e)?Math.min(d,Math.max(c,e)):b}function bZ(a){let b=new Map;for(let c of a){let a=c.suiteId,d=b.get(a);(!d||new Date(c.createdAt).getTime()>new Date(d.createdAt).getTime())&&b.set(a,c)}return Array.from(b.values())}function b$(a,b,c={}){var d;let e,f,g,h,i,j=(g=bY((f=b&&"object"==typeof b&&!Array.isArray(b)?b:{}).qualityWeight,.85,0,1),i=g+(h=bY(f.latencyWeight,.15,0,1)),{enabled:!0===f.enabled,suiteIds:Array.isArray(d=f.suiteIds)?[...new Set(d.map(a=>String(a||"").trim()).filter(Boolean))].slice(0,50):[],maxAgeHours:bY(f.maxAgeHours,720,1,8760),minCases:Math.floor(bY(f.minCases,1,1,1e5)),qualityWeight:i>0?g/i:1,latencyWeight:i>0?h/i:0,cacheTtlMs:Math.floor(bY(f.cacheTtlMs,6e4,1e3,3e5))});if(!j.enabled||a.length<=1)return a;let k=a.map(a=>{var b;let c,d;return b=a.modelStr,d="string"==typeof(c=(0,af.parseModel)(b)).model?c.model.trim():"",[...new Set([b.trim(),d].filter(Boolean))]}),l=[...new Set(k.flat())];if(0===l.length)return a;try{e=function(a,b){let c=Date.now();bX(c);let d=JSON.stringify({targetIds:[...a].sort(),suiteIds:[...b.suiteIds].sort(),maxAgeHours:b.maxAgeHours,minCases:b.minCases}),e=bW.get(d);if(e&&e.expiresAt>c)return e.runs;let f=bV({targetIds:a,suiteIds:b.suiteIds,maxAgeHours:b.maxAgeHours});return bW.set(d,{expiresAt:c+b.cacheTtlMs,runs:f}),bX(c),f}(l,j)}catch(b){return c.warn?.("COMBO","Eval-driven routing skipped because eval history could not be loaded",{error:b instanceof Error?b.message:String(b)}),a}if(0===e.length)return a;let m=new Map;for(let a of e){let b=a.target.id;if(!b)continue;let c=m.get(b)||[];c.push(a),m.set(b,c)}let n=k.map(a=>{let b=new Map;for(let c of a)for(let a of m.get(c)||[])b.set(a.id,a);return Array.from(b.values())}),o=n.flatMap(a=>bZ(a)).filter(a=>a.summary.total>=j.minCases&&a.avgLatencyMs>0).map(a=>a.avgLatencyMs),p=o.length>0?Math.min(...o):null,q=a.map((a,b)=>({target:a,index:b,score:function(a,b,c){let d=bZ(a).filter(a=>a.summary.total>=b.minCases);if(0===d.length)return null;let e=d.reduce((a,b)=>a+b.summary.total,0);if(e<b.minCases)return null;let f=d.reduce((a,b)=>a+b.summary.passRate*b.summary.total,0)/e,g=d.reduce((a,b)=>a+Math.max(0,b.avgLatencyMs)*b.summary.total,0)/e,h=c&&g>0?Math.max(0,Math.min(1,c/g)):.5;return{score:Math.max(0,Math.min(1,f/100))*b.qualityWeight+h*b.latencyWeight,passRate:f,avgLatencyMs:g,totalCases:e,runs:d.length}}(n[b]||[],j,p)})),r=q.filter(a=>a.score).length;return 0===r?a:(q.sort((a,b)=>{if(a.score&&b.score){let c=b.score.score-a.score.score;return Math.abs(c)>1e-4?c:a.index-b.index}return a.score?-1:b.score?1:a.index-b.index}),c.info?.("COMBO",`Eval-driven routing: ranked ${r}/${a.length} targets by eval history`),c.debug?.("COMBO",`Eval-driven routing scores: ${q.filter(a=>a.score).map(a=>`${a.target.modelStr}=${a.score?.score.toFixed(3)} pass=${a.score?.passRate.toFixed(1)} cases=${a.score?.totalCases}`).join(", ")}`),q.map(a=>a.target))}function b_(a){return Math.ceil(a.length/4)}function b0(a){return a.reduce((a,b)=>"string"==typeof b.content?a+b_(b.content):Array.isArray(b.content)?a+b.content.reduce((a,b)=>a+("string"==typeof b?.text?b_(b.text):0),0):a,0)}function b1(a){var b,c,d,e;let f,g=function(a){let b,c,d,e,f,g,h,i,j,k,l;return{codeComplexity:(d=(c=(b=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n")).match(/```[\s\S]*?```/g))?c.length:0,f=(e=b.match(/`[^`]+`/g))?e.length:0,Math.min(25,Math.round(5*d+.5*f+2*[/function\s+\w+\s*\(/gi,/const\s+\w+\s*=/gi,/import\s+.*from/gi,/class\s+\w+/gi,/interface\s+\w+/gi,/async\s+function/gi,/def\s+\w+\s*\(/gi,/SELECT\s+.*FROM/gi,/\$\{.*\}/g].reduce((a,c)=>{let d=b.match(c);return a+(d?d.length:0)},0)))),mathComplexity:(i=(h=(g=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n")).match(/\$\$[\s\S]*?\$\$|\$[^$]+\$/g))?h.length:0,Math.min(20,Math.round(4*i+1.5*[/[+\-*/^]=/g,/\b(sin|cos|tan|log|sqrt|sum|prod|int|lim)\b/gi,/\b\d+\s*[+\-*/]\s*\d+\s*=/g,/∑|∏|∫|√|∞|π/g,/\bf'(?:x)?\b/g,/\bdx\b/g].reduce((a,b)=>{let c=g.match(b);return a+(c?c.length:0)},0)))),reasoningDepth:(j=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n"),k=[/\b(first|step\s*\d|secondly|finally|therefore|thus|consequently|because|since)\b/gi,/\b(let me think|let's reason|let's analyze|step by step|breaking this down)\b/gi,/\b(we need to|we must|we should|the approach is|the solution involves)\b/gi,/(?:\d+\.\s+)(?:\w+)/g,/\b(if\s+.+\s+then\s+|assuming\s+|suppose\s+|consider\s+that)\b/gi].reduce((a,b)=>{let c=j.match(b);return a+(c?c.length:0)},0),Math.min(20,Math.round(2*k+Math.min(5,a.messages.length)))),contextSize:(l=b0(a.messages))>64e3?15:l>32e3?12:l>16e3?9:l>8e3?6:l>4e3?4:2*(l>1e3),toolCalling:function(a){if(!a.tools||0===a.tools.length)return 0;let b=a.tools.length;return b>20?10:b>10?8:b>5?6:b>2?4:2}(a),domainSpecificity:function(a){let b=a.messages.map(a=>"string"==typeof a.content?a.content:"").join("\n"),c=0;for(let[,a]of Object.entries({medical:[/\bdiagnosis\b/i,/\bsymptoms\b/i,/\btreatment\b/i,/\bpatient\b/i,/\bclinical\b/i],legal:[/\bpursuant\b/i,/\bstatute\b/i,/\bliability\b/i,/\bjurisdiction\b/i,/\bhereby\b/i],scientific:[/\bhypothesis\b/i,/\bmethodology\b/i,/\bempirical\b/i,/\bsignificant\b/i],financial:[/\bportfolio\b/i,/\bdividend\b/i,/\bamortization\b/i,/\barbitrage\b/i]}))c=Math.max(c,a.reduce((a,c)=>a+2*!!c.test(b),0));return Math.min(10,c)}(a)}}(a),h=(b=g).codeComplexity+b.mathComplexity+b.reasoningDepth+b.contextSize+b.toolCalling+b.domainSpecificity,i=b0(a.messages),j=(f=[],(c=g).codeComplexity>0&&f.push("code-complexity"),c.mathComplexity>0&&f.push("math-complexity"),c.reasoningDepth>0&&f.push("reasoning-depth"),c.contextSize>0&&f.push("context-size"),c.toolCalling>0&&f.push("tool-calling"),c.domainSpecificity>0&&f.push("domain-specificity"),f),k=(d=g,e=a,Math.min(1,Object.values(d).filter(a=>a>0).length/6*.8+.1*!!(e.messages.length>=2)));return{score:Math.min(100,h),breakdown:g,rulesTriggered:j,inputTokens:i,confidence:k}}function b2(a){return a<=5?"trivial":a<=20?"simple":a<=40?"moderate":a<=65?"complex":"expert"}function b3(a){switch(a){case"trivial":case"simple":return"free";case"moderate":case"complex":return"cheap";case"expert":return"premium"}}function b4(a,b){var c,d,e;let f=new Map;for(let b of a){if("model"!==b.kind)continue;let a=`${b.provider}::${b.modelStr}`;f.has(a)||f.set(a,aM(b.provider,b.modelStr))}let g=b1(b),h=b2(g.score),i=b3(h),j=["free","cheap","premium"],k=j.indexOf(i),l=[],m=[],n=[];for(let b of a){if("model"!==b.kind)continue;let a=`${b.provider}::${b.modelStr}`,c=f.get(a);if(!c)continue;let d=j.indexOf(c.tier);d>=k?(l.push(b),d>k&&m.push(b)):n.push(b)}let o=(c=h,d=l.length,e=n.length,"expert"===c?"require-premium":"complex"===c||"moderate"===c?"prefer-cheap":"simple"===c||"trivial"===c?"prefer-free":"default");return{tierAssignments:f,specificity:g,specificityLevel:h,recommendedMinTier:i,eligibleTargets:l,overqualifiedTargets:m,underqualifiedTargets:n,strategyModifier:o}}let b5=["free","cheap","premium"];function b6(a,b){return b5.indexOf(a)>=b5.indexOf(b)?a:b}let b7=new Map,b8=null;function b9(a,b){return b?`${a}:${b}`:a}function ca(a,b,c){if(!a||"unknown"===a)return;let d=b9(a,b),e=b7.get(d),f=Date.now(),g=Math.max(18e5,c?.providerCooldown?.maxRetryCooldownMs??ai.aD.providerCooldown.maxRetryCooldownMs);e?(e.lastFailureAt=f,e.failureCount++,e.retentionMs=Math.max(e.retentionMs,g)):b7.set(d,{lastFailureAt:f,failureCount:1,retentionMs:g}),!b8&&(b8=setInterval(()=>{!function(a=Date.now()){for(let[b,c]of b7)a-c.lastFailureAt>c.retentionMs&&b7.delete(b)}()},6e4)).unref&&b8.unref()}function cb(a,b,c){if(!a||"unknown"===a)return!1;let d=b9(a,b),e=b7.get(d);if(!e||0===e.failureCount)return!1;let f=Date.now()-e.lastFailureAt,g=c?.providerCooldown?.minRetryCooldownMs??ai.aD.providerCooldown.minRetryCooldownMs,h=c?.providerCooldown?.maxRetryCooldownMs??ai.aD.providerCooldown.maxRetryCooldownMs;return f<Math.min(g*Math.pow(2,Math.min(Math.max(0,e.failureCount-1),10)),h)}function cc(a,b){if(!a||"unknown"===a)return;let c=b9(a,b),d=b7.get(c);d&&(d.failureCount=0)}var cd=c(69190);function ce(a){let b="number"==typeof a?a:"string"==typeof a&&""!==a.trim()?Number(a):null;if(null===b||!Number.isFinite(b))return null;let c=Math.floor(b);return c>0?c:null}function cf(a,b,c={}){if(!1===c.enabled)return null;let d=ce(b);if(null===d)return null;let e=(0,cd.w8)(a);if(!0!==e.supportsThinking)return null;let f=ce(e.maxOutputTokens);if(null===f)return null;if(d>f)return f;if(d===f)return d;let g=Math.max(d+1e3,Math.ceil(1.5*d));return g>f?d:g}let cg=new Map,ch=new Map,ci=new Map;function cj(a){let b=Number(a);return Number.isFinite(b)?Math.min(Math.max(Math.floor(b),1),1e3):1}function ck(a,b,c){let d=ch.get(a),e=d?b.findIndex(a=>a.executionKey===d.executionKey):-1;if(c>1&&d&&e>=0&&d.successCount<c)return{startIndex:e,counter:cg.get(a)||0};let f=cg.get(a)||0;return{startIndex:f%b.length,counter:f}}function cl(a,b,c,d){let e=ch.get(a),f=e?.executionKey===b.executionKey?e.successCount+1:1;if(f>=c){let c=d.findIndex(a=>a.executionKey===b.executionKey);cg.set(a,c>=0?c+1:(cg.get(a)||0)+1),ch.delete(a);return}ch.set(a,{executionKey:b.executionKey,successCount:f})}function cm(a,b){let c=ci.get(a);return!c||b<=1||c.successCount>=b?null:c.executionKey}function cn(a,b,c){let d=ci.get(a),e=d?.executionKey===b?d.successCount+1:1;e>=c?ci.delete(a):ci.set(a,{executionKey:b,successCount:e})}var co=c(9024);function cp(a){return a.length>60?`${a.slice(0,60)}…`:a}var cq=c(78769);function cr(a){return"number"!=typeof a?a:new Date(a>0&&a<1e9?Date.now()+1e3*a:a)}async function cs(a,b,c,d){let e,f,g;if(b){if(!(a.headers.get("content-type")||"").includes("text/event-stream")||!a.body)return{valid:!0};let b=a.body.getReader(),d=new TextDecoder("utf-8"),e=[],f="",g=!1,j=!1,k=!1,l=(0,co.DY)(),m="";function h(){let a=f.split(/\r?\n/);for(let b of(f=a[a.length-1],l.normalize(a.slice(0,-1)))){let a,c=b.trim();if(c.startsWith("event:")){m=c.slice(6).trim();continue}if(!c.startsWith("data:")){c||(m="");continue}let d=c.slice(5).trim();if(!d||"[DONE]"===d)continue;try{a=JSON.parse(d)}catch{continue}let e=("string"==typeof a.type?a.type:null)||m||"";if(m="",(0,co.Z_)(a,e))return!0;switch(e){case"message_start":g=!0;break;case"content_block_start":case"content_block_delta":case"content_block_stop":return j=!0,!0;case"message_stop":k=!0;break;case"message_delta":{let b=a.delta;b&&"object"==typeof b&&null!=b.stop_reason&&(k=!0)}}}return!1}function i(b){let c=e.slice(),d=0;return new Response(new ReadableStream({async pull(a){if(d<c.length)return void a.enqueue(c[d++]);try{let{done:c,value:d}=await b.read();c?a.close():a.enqueue(d)}catch{a.close()}}}),{status:a.status,statusText:a.statusText,headers:a.headers})}try{for(;;){let{done:a,value:l}=await b.read();if(a){let a=d.decode(void 0,{stream:!1});if(a&&(f+=a),f.trim()&&(f+="\n\n"),h(),g&&k&&!j)return c.warn?.("COMBO","Streaming Claude response has complete lifecycle but zero content blocks (content_filter?) — marking as invalid for combo failover"),{valid:!1,reason:"streaming empty content block"};let e=i(b);return{valid:!0,clonedResponse:e}}if(e.push(l),f+=d.decode(l,{stream:!0}),h()){let a=i(b);return{valid:!0,clonedResponse:a}}}}catch{return{valid:!0}}}let j=a.headers.get("content-type")||"";if(!j.includes("application/json")&&!j.includes("text/"))return{valid:!0};try{e=a.clone()}catch{return{valid:!0}}try{f=await e.text()}catch{return{valid:!0}}if(!f||0===f.trim().length)return{valid:!1,reason:"empty response body"};try{g=JSON.parse(f)}catch{if(f.startsWith("data:")||f.startsWith("event:"))return{valid:!0};return{valid:!1,reason:"response is not valid JSON"}}if(d){let a=function(a,b){if(!b||"object"!=typeof b)return{valid:!0};let c=function(a){if(!a||"object"!=typeof a)return"";let b=a.choices;if(Array.isArray(b)){let a=[];for(let c of b){let b=c?.message,d=b?.content;if("string"==typeof d)a.push(d);else if(Array.isArray(d))for(let b of d){let c=b?.text;"string"==typeof c&&a.push(c)}}if(a.length)return a.join("")}let c=a.output;if(Array.isArray(c)){let a=[];for(let b of c){let c=b?.content;if(Array.isArray(c))for(let b of c){let c=b?.text;"string"==typeof c&&a.push(c)}}if(a.length)return a.join("")}return""}(a);for(let a of b.forbiddenSubstrings??[])if("string"==typeof a&&a.length>0&&c.includes(a))return{valid:!1,reason:`response contains forbidden substring "${cp(a)}"`};for(let a of b.requiredSubstrings??[])if("string"==typeof a&&a.length>0&&!c.includes(a))return{valid:!1,reason:`response missing required substring "${cp(a)}"`};if("number"==typeof b.minContentLength&&Number.isFinite(b.minContentLength)&&b.minContentLength>0&&c.trim().length<b.minContentLength)return{valid:!1,reason:`response content shorter than ${b.minContentLength} chars`};for(let c of b.jsonPathPredicates??[])if(c&&"string"==typeof c.path&&c.path&&!function(a,b,c){switch(b){case"exists":return null!=a;case"nonEmpty":return null!=a&&("string"==typeof a?a.trim().length>0:Array.isArray(a)?a.length>0:"object"==typeof a?Object.keys(a).length>0:!!a);case"equals":return a===c;case"notEquals":return a!==c}}(function(a,b){let c=a;for(let a of function(a){let b=[],c="",d=()=>{c&&(b.push(c),c="")};for(let e=0;e<a.length;e++){let f=a[e];if("."===f)d();else if("["===f){d();let c="";for(e++;e<a.length&&"]"!==a[e];)c+=a[e],e++;let f=c.trim(),g=Number(f);b.push(""!==f&&Number.isInteger(g)?g:f)}else c+=f}return d(),b}(b)){if(null==c)return;if("number"==typeof a){if(!Array.isArray(c))return;c=c[a]}else{if("object"!=typeof c)return;c=c[a]}}return c}(a,c.path),c.condition,c.value))return{valid:!1,reason:`jsonpath check failed: "${cp(c.path)}" ${c.condition}`};return{valid:!0}}(g,d);if(!a.valid)return{valid:!1,reason:a.reason}}let k=g?.choices;if(g?.object==="response"){var l;if(!(Array.isArray(l=g.output)&&l.some(a=>{if(!a||"object"!=typeof a)return!1;if("message"!==a.type)return!!a.type;let b=a.content;return Array.isArray(b)&&b.some(a=>!!a&&"object"==typeof a&&"string"==typeof a.text&&a.text.length>0)})))return{valid:!1,reason:"empty_choices"};let b="string"==typeof g.status?g.status:"";return b&&!["completed","done"].includes(b)?{valid:!1,reason:"no_terminal"}:{valid:!0,clonedResponse:new Response(f,{status:a.status,statusText:a.statusText,headers:a.headers})}}if(!Array.isArray(k)||0===k.length){if(g?.output||g?.result||g?.data||g?.response)return{valid:!0};if(g?.error){let a=g.error;return{valid:!1,reason:`upstream error in 200 body: ${a?.message||JSON.stringify(g.error).substring(0,200)}`}}return{valid:!0}}let m=k[0],n=m?.message||m?.delta;if(!n)return{valid:!1,reason:"choice has no message object"};let o=n.content,p=n.tool_calls,q=n.reasoning_content??n.reasoning,r="string"==typeof q&&q.trim().length>0,s=Array.isArray(p)&&p.length>0;if(!(null!=o&&""!==o||r)&&!s)return{valid:!1,reason:"empty content and no tool_calls in response"};if((null==o||""===o)&&r&&!s){let a=g?.usage;if(a){let b=Number(a.completion_tokens)||0,c=(0,cq.Zr)(a);if(b>0&&c>=.9*b)return{valid:!1,reason:`reasoning consumed ${c}/${b} tokens — no content output`}}}return{valid:!0,clonedResponse:new Response(f,{status:a.status,statusText:a.statusText,headers:a.headers})}}let ct=new Set(["quota_exhausted","auth_error","not_found","not_found_local"]),cu=new Set(["rate_limit","rate_limited","transient","overloaded","server_error"]),cv=()=>void 0,cw=()=>void 0;var cx=c(47593);async function cy({body:a,models:b,handleSingleModel:c,log:d,comboName:f,judgeModel:g,tuning:h}){var i,j;let k,l,m=Array.isArray(b)?b.filter(Boolean):[];if(0===m.length)return(0,e.yj)(400,"Fusion combo has no models");if(1===m.length)return c(a,m[0]);let n={minPanel:h?.minPanel??2,stragglerGraceMs:h?.stragglerGraceMs??8e3,panelHardTimeoutMs:h?.panelHardTimeoutMs??9e4},o=Math.min(Math.max(2,n.minPanel),m.length),p=g&&g.trim()?g.trim():m[0];d.info("FUSION",`Combo "${f??""}" | panel=${m.length} [${m.join(", ")}] | judge=${p} | quorum=${o}`);let{tools:q,tool_choice:r,...s}=a,t={...s,stream:!1},u=Date.now(),v=m.map(a=>{var b,d;return b=c(t,a),d=n.panelHardTimeoutMs,new Promise(a=>{let c=setTimeout(()=>a({__timeout:!0}),d);Promise.resolve(b).then(b=>{clearTimeout(c),a(b)}).catch(b=>{clearTimeout(c),a({__error:b})})})}),w=await (i={...n,minPanel:o},new Promise(a=>{let b=Array(v.length),c=0,d=0,e=!1,f=null,g=()=>{e||(e=!0,clearTimeout(h),f&&clearTimeout(f),a(b))},h=setTimeout(g,i.panelHardTimeoutMs);v.forEach((a,e)=>{Promise.resolve(a).then(a=>{b[e]=a}).catch(a=>{b[e]={__error:a}}).finally(()=>{c++;let a=b[e];if(a&&a.ok&&d++,c===v.length)return g();d>=i.minPanel&&!f&&(f=setTimeout(g,i.stragglerGraceMs))})})}));d.info("FUSION",`fan-out collected in ${Date.now()-u}ms`);let x=[];for(let a=0;a<w.length;a++){let b=w[a],c=m[a];if(!b){d.warn("FUSION",`Panel ${c} dropped (straggler/timeout)`);continue}if(b.__timeout){d.warn("FUSION",`Panel ${c} timed out`);continue}if(b.__error){d.warn("FUSION",`Panel ${c} threw`,{error:(0,e.sanitizeErrorMessage)(b.__error)});continue}if(!b.ok){d.warn("FUSION",`Panel ${c} failed`,{status:b.status});continue}try{let a=await b.clone().json(),e=function(a){if(!a||"object"!=typeof a)return"";let b=a.choices,c=b?.[0];if(c){let a=c.message??c.delta??{},b=(0,cx.kU)(a.content);if(b.trim())return b;if("string"==typeof c.text&&c.text.trim())return c.text}let d=(0,cx.kU)(a.content);if(d.trim())return d;let e=a.candidates,f=e?.[0]?.content?.parts;if(Array.isArray(f)){let a=f.map(a=>"string"==typeof a?.text?a.text:"").join("");if(a.trim())return a}let g=a.output;if(Array.isArray(g)){let a=g.flatMap(a=>Array.isArray(a.content)?a.content.map(a=>"string"==typeof a?.text?a.text:""):[]).join("");if(a.trim())return a}return""}(a);e?(x.push({model:c,text:e}),d.info("FUSION",`Panel ${c} ok (${e.length} chars)`)):d.warn("FUSION",`Panel ${c} returned empty content`)}catch(a){d.warn("FUSION",`Panel ${c} unparseable`,{error:(0,e.sanitizeErrorMessage)(a)})}}if(0===x.length)return d.warn("FUSION","All panel models failed"),(0,e.yj)(503,"All fusion panel models failed");if(1===x.length)return d.info("FUSION",`Only ${x[0].model} succeeded — answering directly (no fusion)`),c(a,x[0].model);let y=(k=x.map((a,b)=>`[Source ${b+1}]
|
|
17
|
+
${a.text}`).join("\n\n"),j=[`You are the JUDGE in a model-fusion panel. ${x.length} expert models independently answered the user's most recent request. Their responses are below, anonymized by source.`,"\nDo NOT mention that multiple models were used, and do NOT refer to the sources. Produce ONE authoritative final answer addressed directly to the user.\n\nFirst, internally analyze the panel along these dimensions: consensus (points most sources agree on — treat as higher-confidence), contradictions (where they disagree — resolve with your own judgment), partial coverage, unique insights only one source surfaced, and blind spots every source missed. Then write the best possible final answer grounded in that analysis — more complete and correct than any single response, with no filler.\n\n=== PANEL RESPONSES ===",k,"=== END PANEL RESPONSES ===\n\nNow write the final answer to the user's original request."].join("\n"),l={...a},Array.isArray(a.messages)?l.messages=[...a.messages,{role:"user",content:j}]:Array.isArray(a.input)?l.input=[...a.input,{role:"user",content:j}]:Array.isArray(a.contents)?l.contents=[...a.contents,{role:"user",parts:[{text:j}]}]:l.messages=[{role:"user",content:j}],l);return d.info("FUSION",`Judging ${x.length} answers with ${p}`),c(y,p)}let cz=[408,500,502,503,504,524];function cA(a,b){let{result:c,fallbackResult:e,errorText:f,rawModel:g,isTokenLimitBreach:h,allAccountsRateLimited:i,sets:j,log:k,tag:l,exhaustedLogLevel:m,structuredError:n}=b,{exhaustedProviders:o,exhaustedConnections:p,transientRateLimitedProviders:q}=j,r=a.provider,s=!!(r&&"unknown"!==r)&&!(0,d.DZ)(r,g)&&((0,d.je)(e)||(0,d.w7)(n?.code||f)===aj.QS.QUOTA_EXHAUSTED||i);if(s){o.add(r);let a="debug"===m?k.debug:k.info;a?.(l,`Provider ${r} quota exhausted — marking for skip on remaining targets (#1731)`)}else 429===c.status&&!h&&r&&"unknown"!==r&&q.add(r),function(a,b){var c;let d,{result:e,errorText:f,sets:g,log:h,tag:i}=b,j=a.provider;if(!j||"unknown"===j||!cz.includes(e.status)||"string"==typeof(d=e.headers?.get?.("x-omniroute-provider-breaker"))&&"open"===d.toLowerCase()||/provider_circuit_open/i.test(f)||(c=e.status,502===c&&/empty content/i.test(f)))return;let k=a.connectionId??void 0;k?(g.exhaustedConnections.add(`${j}:${k}`),h.info(i,`Provider ${j} connection ${k} error (${e.status}) — marking for skip on remaining targets (#1731v2)`)):(g.exhaustedProviders.add(j),h.info(i,`Provider ${j} connection error (${e.status}) — marking for skip on remaining targets (#1731)`))}(a,{result:c,errorText:f,sets:j,log:k,tag:l});return s}async function cB(a){return a.isModelAvailable&&!await a.isModelAvailable(a.unit.modelStr,a.unit)?(0,e.yj)(503,`Model ${a.unit.modelStr} is unavailable`):a.handleSingleModel(a.body,a.unit.modelStr,{...a.unit,effectiveComboStrategy:a.effectiveComboStrategy,failoverBeforeRetry:a.failoverBeforeRetry})}async function cC(a){var b,c,d;let f=(b=a.allCombos,c=a.unit.comboName,(Array.isArray(b)?b:b?.combos||[]).filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)&&"string"==typeof a.name).find(a=>a.name===c)||null);if(!f)return(0,e.yj)(503,`Nested combo "${a.unit.comboName}" not found`);let g=(d={context:a.nesting,childComboName:f.name}).context.depth>=d.context.maxDepth?(0,e.yj)(503,`Max combo nesting depth (${d.context.maxDepth}) exceeded`):d.context.visitedComboNames.includes(d.childComboName)?(0,e.yj)(503,`Circular combo reference detected: ${d.childComboName}`):{...d.context,depth:d.context.depth+1,visitedComboNames:[...d.context.visitedComboNames,d.childComboName]};return g instanceof Response?g:a.runCombo({...a.baseOptions,body:a.body,combo:f,nesting:g})}async function cD(a){return"model"===a.unit.kind?cB({body:a.body,unit:a.unit,handleSingleModel:a.handleSingleModel,isModelAvailable:a.isModelAvailable,failoverBeforeRetry:a.failoverBeforeRetry,effectiveComboStrategy:a.effectiveComboStrategy}):cC({body:a.body,unit:a.unit,allCombos:a.allCombos,runCombo:a.runCombo,baseOptions:a.baseOptions,nesting:a.nesting})}async function cE(a){let b=Number(a.config.maxRetries??1),c=bN(a.config.retryDelayMs,2e3),d=function(a,b){if("random"===a){let a=[...b];for(let b=a.length-1;b>0;b-=1){let c=Math.floor(Math.random()*(b+1));[a[b],a[c]]=[a[c],a[b]]}return a}if("weighted"===a){let a=function(a){let b=a.reduce((a,b)=>a+Math.max(0,Number(b.weight)||0),0);if(b<=0)return a[0]||null;let c=Math.random()*b;for(let b of a)if((c-=Math.max(0,Number(b.weight)||0))<=0)return b;return a[a.length-1]||null}(b);return a?[a,...b.filter(b=>b.executionKey!==a.executionKey)]:b}return b}(a.strategy,a.units),f=a.body?.stream===!0,g=Date.now(),h=a.effectiveComboStrategy??a.strategy,i=null,j=0;for(let k of d){for(let d=0;d<=b;d+=1){if(a.signal?.aborted)return{response:(0,e.yj)(499,"Client disconnected"),unit:k};if(a.nesting.attemptBudget.count+=1,a.nesting.attemptBudget.count>a.nesting.attemptBudget.limit)return{response:(0,e.yj)(503,"Maximum combo retry limit reached"),unit:k};d>0&&await new Promise(a=>setTimeout(a,c)),a.log.info("COMBO",`Trying ${k.kind} ${"combo-ref"===k.kind?`combo:${k.comboName}`:k.modelStr}${d>0?` (retry ${d})`:""}`);let b=await cD({body:a.body,unit:k,allCombos:a.allCombos,handleSingleModel:a.handleSingleModel,isModelAvailable:a.isModelAvailable,runCombo:a.runCombo,baseOptions:a.baseOptions,nesting:a.nesting,failoverBeforeRetry:a.config.failoverBeforeRetry,effectiveComboStrategy:h});if(i=b,b.ok){if("combo-ref"===k.kind)return t(a.combo.name,null,{success:!0,latencyMs:Date.now()-g,fallbackCount:j,strategy:h,target:{executionKey:k.executionKey,stepId:k.stepId,label:k.label}}),{response:b,unit:k};let c=await cs(b,f,a.log,a.config.responseValidation);if(c.valid)return t(a.combo.name,k.modelStr,{success:!0,latencyMs:Date.now()-g,fallbackCount:j,strategy:h,target:{executionKey:k.executionKey,stepId:k.stepId,label:k.label}}),{response:c.clonedResponse??b,unit:k}}if(![408,429,500,502,503,504].includes(b.status))break}j+=1}return t(a.combo.name,null,{success:!1,latencyMs:Date.now()-g,fallbackCount:j,strategy:h}),{response:i||(0,e.yj)(503,"All nested combo units unavailable"),unit:null}}var cF=c(47493),cG=c(80540);function cH(a){if("string"==typeof a){let b=a.trim(),c=b.indexOf("/");return!(c<=0)&&b.slice(c+1).includes("*")}return!(!a||"object"!=typeof a||Array.isArray(a))&&"provider-wildcard"===a.kind&&"string"==typeof a.providerId}async function cI(a){let b=new Set,c=[];try{for(let d of(await (0,cG.Kb)(a)))d.id&&!b.has(d.id)&&(b.add(d.id),c.push(d.id))}catch{}for(let d of(0,aS.SM)(a))d.id&&!b.has(d.id)&&(b.add(d.id),c.push(d.id));return c}async function cJ(a,b){let c=await cI(a.providerId);if(0===c.length)return null;let d=a.modelPattern,e="*"===d?c:c.filter(a=>(0,cF.UF)(a,d));return 0===e.length?null:e.map(c=>{let e={kind:"model",model:`${a.providerId}/${c}`,providerId:a.providerId,weight:a.weight,_expandedFromWildcard:`${a.providerId}/${d}`,_parentCombo:b};return null!==a.label&&(e.label=a.label),null!==a.connectionId&&(e.connectionId=a.connectionId),null!==a.allowedConnectionIds&&(e.allowedConnectionIds=a.allowedConnectionIds),e})}async function cK(a){let b=a.models;if(!Array.isArray(b)||0===b.length)return a;let c=!1;for(let a of b)if(cH(a)){c=!0;break}if(!c)return a;let d=[];for(let c of b){if(!cH(c)){d.push(c);continue}let b=function(a){if("string"==typeof a){let b=a.trim(),c=b.indexOf("/");if(c<=0)return null;let d=b.slice(0,c),e=b.slice(c+1);return e.includes("*")?{providerId:d,modelPattern:e,weight:0,label:null,connectionId:null,allowedConnectionIds:null}:null}if(a&&"object"==typeof a&&!Array.isArray(a)){if("provider-wildcard"!==a.kind)return null;let b="string"==typeof a.providerId?a.providerId.trim():"";if(!b)return null;let c="string"==typeof a.modelPattern?a.modelPattern.trim():"*",d="number"==typeof a.weight&&Number.isFinite(a.weight)?a.weight:0,e="string"==typeof a.label&&a.label.trim()?a.label.trim():null,f="string"==typeof a.connectionId&&a.connectionId.trim()?a.connectionId.trim():null,g=Array.isArray(a.allowedConnectionIds)?a.allowedConnectionIds.map(a=>"string"==typeof a?a.trim():"").filter(Boolean):null;return{providerId:b,modelPattern:c,weight:d,label:e,connectionId:f,allowedConnectionIds:g?.length?g:null}}return null}(c);if(!b){d.push(c);continue}let e=await cJ(b,a.name);e&&e.length>0?d.push(...e):d.push(c)}return{...a,models:d}}async function cL(a){return Promise.all(a.map(a=>cK(a)))}function cM(a){return{model:"",weight:null}}async function cN(a){try{let{getPricingForModel:b}=await Promise.resolve().then(c.bind(c,89718)),d=await Promise.all(a.map(async a=>{let c=(0,af.parseModel)(a),d=c.provider||c.providerAlias||"unknown",e=c.model||a;try{let c=await b(d,e),f=Number(c?.input);return{modelStr:a,cost:Number.isFinite(f)?f:1/0}}catch{return{modelStr:a,cost:1/0}}}));return d.sort((a,b)=>a.cost-b.cost),d.map(a=>a.modelStr)}catch{return a}}async function cO(a){let b=await cN(a.map(a=>a.modelStr)),c=new Map;for(let b of a){let a=c.get(b.modelStr)||[];a.push(b),c.set(b.modelStr,a)}return b.map(a=>{let b=c.get(a);return b?.shift()||null}).filter(a=>null!==a)}function cP(a,b){let c=(0,ae.qF)(a.provider)?.getStatus?.()?.state;if("OPEN"===c)return-1/0;let d=b?.byModel?.[a.modelStr]||null,e=Number(d?.successRate),f=Number(d?.avgLatencyMs);return(Number.isFinite(e)?e/100:.5)+(Number.isFinite(f)&&f>0?1/Math.log10(f+10):.25)-.25*("HALF_OPEN"===c)}function cQ(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function cR(a){return(Array.isArray(a)?a:a?.combos||[]).map(a=>({...a,id:cQ(a.id)||void 0,name:cQ(a.name)||"",models:Array.isArray(a.models)?a.models:[],config:ak(a.config)?a.config:null,autoConfig:ak(a.autoConfig)?a.autoConfig:null,context_cache_protection:"boolean"==typeof a.context_cache_protection||"number"==typeof a.context_cache_protection?a.context_cache_protection:void 0,system_message:"string"==typeof a.system_message?a.system_message:null}))}function cS(a,b,c,d,e=[]){var f;let g,h;if(!h)return null;let i=[...e,h.id].join(">"),j="string"==typeof h.label?h.label:null,k=h.weight||0;return"combo-ref"===h.kind?{kind:"combo-ref",stepId:h.id,executionKey:i,comboName:h.comboName,weight:k,label:j}:null}function cT(a){let b=ak(a?.config)?a.config.compositeTiers:null;if(!ak(b))return[];let c=cQ(b.defaultTier),d=ak(b.tiers)?b.tiers:null;if(!c||!d)return[];let e=[],f=new Set,g=new Set,h=new Map(Object.entries(d).map(([a,b])=>{if(!ak(b))return null;let c=cQ(a),d=cQ(b.stepId),e=cQ(b.fallbackTier);return c&&d?[c,{stepId:d,fallbackTier:e}]:null}).filter(a=>null!==a)),i=c;for(;i&&h.has(i)&&!f.has(i);){f.add(i);let a=h.get(i);if(!a)break;g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId)),i=a.fallbackTier}for(let a of h.values())g.has(a.stepId)||(e.push(a.stepId),g.add(a.stepId));return e}function cU(a,b,c=[]){return function(a,b){let c=cT(b);if(0===c.length)return a;let d=new Map(a.map(a=>[a.stepId,a])),e=new Set,f=[];for(let a of c){let b=d.get(a);!b||e.has(b.stepId)||(f.push(b),e.add(b.stepId))}for(let b of a)e.has(b.stepId)||(f.push(b),e.add(b.stepId));return f}(function(a,b,c=[]){return(a.models||[]).map((d,e)=>cS(d,a.name,e,b,c)).filter(a=>null!==a)}(a,b,c),a)}function cV(a,b,c=new Set,d=0,e=[],f=3){if("model"===a.kind)return[a];if(d>f)return[];let g=cR(b),h=g.find(b=>b.name===a.comboName);return!h||c.has(a.comboName)?[]:cW(h,g,new Set(c),d+1,[...e,a.stepId],f)}function cW(a,b,c=new Set,d=0,e=[],f=3){let g=(a.models||[]).map((b,c)=>cS(b,a.name,c,null,e)).filter(a=>a?.kind==="model");if(d>f)return g;if(c.has(a.name))return[];c.add(a.name);let h=cU(a,b,e),i=[];for(let a of h){if("combo-ref"===a.kind){i.push(...cV(a,b,new Set(c),d,e,f));continue}i.push(a)}return i}function cX(a,b){let c,d=(c=cR(b).find(b=>b.name===a),c?.models&&c.models.length>0?c:null);return d?d.models.map(a=>cM(a).model):null}function cY(a){let b=(0,af.parseModel)(a),c=b.provider||b.providerAlias||"unknown",d=b.model||a;return(0,cd.et)(c,d)}function cZ(a){let b=Number(a);return Number.isFinite(b)&&b>0?Math.ceil(b):0}function c$(a,b=0){if(b>8||null==a)return!1;if("string"==typeof a)return a.startsWith("data:image/");if(Array.isArray(a))return a.some(a=>c$(a,b+1));if(!ak(a))return!1;let c="string"==typeof a.type?a.type.toLowerCase():null;if("image"===c||"image_url"===c||"input_image"===c||"image_url"in a||"input_image"in a)return!0;let d=ak(a.source)?a.source:null;return!!("string"==typeof d?.media_type?d.media_type.toLowerCase():"").startsWith("image/")||Object.values(a).some(a=>c$(a,b+1))}function c_(a,b,c,d="Context-aware fallback"){let e,f,g,h;if(0===a.length)return a;let i=(e=function(a){let b={};for(let c of["messages","input","tools","functions","response_format"])void 0!==a[c]&&(b[c]=a[c]);return Object.keys(b).length>0?(0,G.estimateTokens)(b):0}(b),f=Math.max(cZ(b.max_tokens),cZ(b.max_completion_tokens)),{requiresTools:!!(Array.isArray(b.tools)&&b.tools.length>0||Array.isArray(b.functions)&&b.functions.length>0),requiresVision:c$(b.messages)||c$(b.input),requiresStructuredOutput:(g=ak(b.response_format)?b.response_format:null,"json_object"===(h="string"==typeof g?.type?g.type:null)||"json_schema"===h),estimatedInputTokens:e,requestedOutputTokens:f,requiredContextTokens:e+f});if(!(i.requiresTools||i.requiresVision||i.requiresStructuredOutput||i.requiredContextTokens>0))return a;let j=[],k=a.filter(a=>{var b,c;let d,e,f,g=(d=(0,bw.w8)(a.modelStr),e=[],i.requiresTools&&(!1===d.supportsTools||!d.toolCalling)&&e.push("tools"),i.requiresVision&&!0!==d.supportsVision&&e.push("vision"),i.requiresStructuredOutput&&!1===d.structuredOutput&&e.push("structured_output"),b=i.requestedOutputTokens,c=d.maxOutputTokens,!(b<=0)&&null!==c&&c<b&&e.push("output_tokens"),f=d.maxInputTokens??d.contextWindow??null,i.requiredContextTokens>0&&null!=f&&f<i.requiredContextTokens&&e.push("context_window"),e);return 0===g.length||(j.push({target:a,reasons:g}),!1)});return k.length===a.length?a:0===k.length?(c.warn("COMBO",`${d}: all ${a.length} targets were filtered by request requirements; preserving strategy order`),c.debug?.("COMBO",`${d}: rejected targets ${j.map(a=>`${a.target.modelStr}(${a.reasons.join("+")})`).join(", ")}`),a):(c.info("COMBO",`${d}: kept ${k.length}/${a.length} targets for request requirements`),c.debug?.("COMBO",`${d}: rejected targets ${j.map(a=>`${a.target.modelStr}(${a.reasons.join("+")})`).join(", ")}`),k)}function c0(a,b,c=3){return b?cW(a,b,new Set,0,[],c):cU(a,null).filter(a=>a?.kind==="model")}function c1(a,b){return cU(a,b).map(c=>({step:c,targets:b?cV(c,b,new Set([a.name])):"model"===c.kind?[c]:[]})).filter(a=>a.targets.length>0)}function c2(a){let b=ak(a.shadowRouting)?a.shadowRouting:{},c=Number(b.sampleRate??1),d=Number(b.maxTargets??2),e=Number(b.timeoutMs??3e4);return{enabled:!0===b.enabled,targets:Array.isArray(b.targets)?b.targets:[],sampleRate:Number.isFinite(c)?Math.max(0,Math.min(1,c)):1,maxTargets:Number.isFinite(d)?Math.max(1,Math.min(10,Math.floor(d))):2,timeoutMs:Number.isFinite(e)?Math.max(1e3,Math.min(12e4,Math.floor(e))):3e4}}function c3(a,b,c){let d=c2(b);return!d.enabled||0===d.targets.length||d.sampleRate<=0||(void 0)>d.sampleRate?[]:cW({...a,name:`${a.name}:shadow`,models:d.targets},c,new Set([a.name]),0,["shadow"]).slice(0,d.maxTargets).map(a=>({...a,trafficType:"shadow"}))}async function c4(a){try{if(!a.body)return;await a.arrayBuffer()}catch{}}function c5(a){return"function"==typeof structuredClone?structuredClone(a):JSON.parse(JSON.stringify(a))}function c6(a,b,c,d,e,f,g,h){let i;if(0===d.length)return;let j=c2(b);try{i=c5(c)}catch(a){h.warn("COMBO","Shadow routing skipped: failed to clone request body",{error:a instanceof Error?a.message:String(a)});return}let k=async()=>{await Promise.all(d.map(async b=>{let c=Date.now();try{var d,k;let l={...c5(i),model:b.modelStr,stream:!1};if(f&&!await f(b.modelStr,b)){u(a.name,b.modelStr,{success:!1,latencyMs:Date.now()-c,target:bR(b)}),h.info("COMBO",`Shadow target skipped (unavailable): ${b.modelStr}`);return}let m=await (d=e(l,b.modelStr,{...b,failoverBeforeRetry:!0,trafficType:"shadow"}),k=j.timeoutMs,new Promise((a,b)=>{let c=setTimeout(()=>b(Error("Shadow route timed out")),k);d.then(b=>{clearTimeout(c),a(b)},a=>{clearTimeout(c),b(a)})}));await c4(m.clone()),u(a.name,b.modelStr,{success:m.ok,latencyMs:Date.now()-c,target:bR(b)}),h.info("COMBO",`Shadow target ${b.modelStr} completed with status ${m.status} (${g})`)}catch(d){u(a.name,b.modelStr,{success:!1,latencyMs:Date.now()-c,target:bR(b)}),h.warn("COMBO",`Shadow target ${b.modelStr} failed`,{error:d instanceof Error?d.message:String(d)})}}))};setTimeout(()=>void k(),0)}let c7=["weekly","session","monthly"];function c8(a){let b=Number(a);return Number.isFinite(b)?b:null}function c9(a,b){let c=c8(a);return null===c?b:Math.max(0,Math.min(100,c))}function da(a,b){let c=c8(a);return null===c||c<0?b:c}function db(a,b,c){let d=c8(a);return null===d||d<0?b:Math.min(c,Math.floor(d))}function dc(a){let b=Array.isArray(a?.resetWindowWindows)?a.resetWindowWindows:null,c=b?.filter(a=>c7.includes(String(a))).filter((a,b,c)=>c.indexOf(a)===b);return{windows:c&&c.length>0?c:a?.resetWindowIncludeSession===!0?["weekly","session"]:["weekly"],tieBandMs:Math.max(0,c8(a?.resetWindowTieBandMs)??6e4),quotaCacheTtlMs:db(a?.resetWindowQuotaCacheTtlMs,0,3e5),quotaCacheMaxStaleMs:db(a?.resetWindowQuotaCacheMaxStaleMs,0,36e5)}}function dd(a){return(a.providerId||a.provider||"").toLowerCase()||null}function de(a){return"string"==typeof a&&a.trim().length>0?a.trim():"number"==typeof a&&Number.isFinite(a)?String(a):null}function df(a){if(!a)return NaN;let b=Date.parse(a);if(Number.isFinite(b))return b;if(!/^\d+(?:\.\d+)?$/.test(a))return NaN;let c=Number(a);return Number.isFinite(c)?c<1e10?1e3*c:c:NaN}function dg(a,b){if(!ak(a))return null;let c=a[b];return ak(c)?{percentUsed:c8(c.percentUsed),resetAt:de(c.resetAt)}:null}function dh(a,b,c,d,e){let f=aC(a);return d*f+function(a,b){if(!a)return .5;let c=df(a);if(!Number.isFinite(c))return .5;let d=c-Date.now();return d<=0?1:aC(1-d/b)}(b,c)*(1-f)*e}function di(a,b){if(!a||!ak(a)||!0===a.limitReached)return 1/0;let c=1/0;for(let d of b){let b=function(a,b){return(a&&ak(a)?"session"===b?dg(a,"window5h"):"weekly"===b?dg(a,"window7d")||dg(a,"windowWeekly"):"monthly"===b?dg(a,"windowMonthly"):null:null)||function(a,b){let c;if(!a||!ak(a)||!ak(a.windows))return null;let d=Object.entries(a.windows).map(([a,b])=>({key:a.toLowerCase(),value:b})).filter(({key:a})=>a===b||a.startsWith(`${b} `));if(0===d.length)return null;d.sort((a,b)=>a.key.localeCompare(b.key));let e=d[0].value;return ak(e)?{percentUsed:null===(c=c8(e.percentUsed))?null:c>1?aC(c/100):aC(c),resetAt:de(e.resetAt)}:null}(a,b)}(a,d),e=df(b?.resetAt??null);Number.isFinite(e)&&(c=Math.min(c,e))}return Number.isFinite(c)||(c=df(de(a.resetAt))),Number.isFinite(c)?c:1/0}let dj=new Map,dk=new Map;async function dl(a,b,c,d,e){let f=dd(a);if(!f||!(0,Z.__)(f))return[];if(!b.has(f)){let a=dj.get(f);if(a&&Date.now()-a.fetchedAt<3e4)return b.set(f,a.connections),a.connections;c.has(f)||c.set(f,(async()=>{try{let a=await (0,aR.P)({provider:f,isActive:!0}),b=Array.isArray(a)?a:[];if(!dj.has(f)&&dj.size>=200){let a=dj.keys().next().value;void 0!==a&&dj.delete(a)}return dj.set(f,{connections:b,fetchedAt:Date.now()}),b}catch(a){return e.warn?.("COMBO","Reset-aware failed to load quota-aware connections.",{comboName:d,err:a,operation:"getProviderConnections",provider:f}),[]}})());let g=await c.get(f);b.set(f,g)}return b.get(f)||[]}function dm(a){if(!Array.isArray(a))return null;let b=a.filter(a=>"string"==typeof a&&a.trim().length>0);return b.length>0?b:null}async function dn(a,b,c,d){let e=new Map,f=new Map,g=new Map,h=[];for(let{target:k,connections:l}of(await Promise.all(a.map(async a=>({connections:await dl(a,e,f,b,c),target:a}))))){var i,j;for(let a of l)"string"==typeof a.id&&g.set(a.id,a);let a=(i=k,j=l,i.connectionId?[i.connectionId]:Array.isArray(i.allowedConnectionIds)&&i.allowedConnectionIds.length>0?i.allowedConnectionIds.filter(a=>"string"==typeof a&&a.trim().length>0):j.map(a=>"string"==typeof a.id?a.id:null).filter(a=>!!a)),b=function(a,b){let c=dm(b);if(!c)return a;let d=new Set(c);return a.filter(a=>d.has(a))}(a,d);if(0===b.length){if(a.length>0&&dm(d))continue;h.push(k);continue}for(let a of b)h.push({...k,connectionId:a,executionKey:k.connectionId===a?k.executionKey:`${k.executionKey}@${a}`})}return{connectionById:g,expandedTargets:h}}async function dp({comboName:a,config:b,connectionById:c,expandedTargets:d,log:e,scoreQuota:f}){let g=new Map;return dr(d,5,async(d,h)=>{let i=null,j=dd(d),k=j?(0,Z.__)(j):null;if(k&&j&&d.connectionId){let f=`${j}:${d.connectionId}`;g.has(f)||g.set(f,ds({provider:j,connectionId:d.connectionId,connection:c.get(d.connectionId),fetcher:k,config:b,log:e,comboName:a})),i=await g.get(f)}return{target:d,index:h,...f(i)}})}function dq(a,b,c){let d=b;if(b.length>1){let a=cg.get(c)||0;if(!cg.has(c)&&cg.size>=500){let a=cg.keys().next().value;void 0!==a&&cg.delete(a)}cg.set(c,a+1);let e=a%b.length;d=[...b.slice(e),...b.slice(0,e)]}let e=new Set(d.map(a=>a.target.executionKey));return[...d,...a.filter(a=>!e.has(a.target.executionKey))]}async function dr(a,b,c){let d=Array(a.length),e=0,f=Math.max(1,Math.min(b,a.length));return await Promise.all(Array.from({length:f},async()=>{for(;e<a.length;){let b=e++;d[b]=await c(a[b],b)}})),d}async function ds({provider:a,connectionId:b,connection:c,fetcher:d,config:e,log:f,comboName:g}){let h=`${a}:${b}`,i=e.quotaCacheTtlMs,j=e.quotaCacheMaxStaleMs,k=Date.now(),l=dk.get(h);if(i<=0&&j<=0)try{return await d(b,c)}catch(c){return f.warn?.("COMBO","Reset-aware quota fetch failed.",{comboName:g,connectionId:b,err:c,operation:"quotaFetch",provider:a}),null}let m=()=>{let e=dk.get(h);if(e?.refreshPromise!=null)return e.refreshPromise;let i=d(b,c).then(a=>{if(a){if(!dk.has(h)&&dk.size>=200){let a=dk.keys().next().value;void 0!==a&&dk.delete(a)}dk.set(h,{quota:a,fetchedAt:Date.now(),refreshPromise:null})}else dk.delete(h);return a}).catch(c=>{let d=dk.get(h);if(d){if(!dk.has(h)&&dk.size>=200){let a=dk.keys().next().value;void 0!==a&&dk.delete(a)}dk.set(h,{...d,refreshPromise:null})}return f.warn?.("COMBO","Reset-aware quota fetch failed.",{comboName:g,connectionId:b,err:c,operation:"quotaFetch",provider:a}),null});if(!dk.has(h)&&dk.size>=200){let a=dk.keys().next().value;void 0!==a&&dk.delete(a)}return dk.set(h,{quota:e?.quota??l?.quota??null,fetchedAt:e?.fetchedAt??l?.fetchedAt??0,refreshPromise:i}),i};if(i>0&&l){let a=k-l.fetchedAt;if(a<=i)return l.quota;if(j>0&&a<=i+j)return m(),l.quota}return m()}async function dt(a,b){if(0===a.length)return new Map;let c=await dr(a,5,async a=>{let c=await (0,d.LN)(a.provider).catch(()=>null);if("OPEN"===(0,ae.qF)(a.provider).getStatus().state)return{key:a.executionKey,result:{profile:c,available:!1}};let e=!0;return b&&(e=await Promise.resolve(b(a.modelStr,a)).catch(()=>!0)),{key:a.executionKey,result:{profile:c,available:e}}}),e=new Map;for(let{key:a,result:b}of c)e.set(a,b);return e}async function du(a,b,c,d,e){let f,g,h;if(0===a.length)return a;let i={sessionWeight:h=(g=(f=da(c?.resetAwareSessionWeight,.35))+da(c?.resetAwareWeeklyWeight,.65))>0?f/g:.35,weeklyWeight:1-h,tieBand:c9(c?.resetAwareTieBandPercent,5)/100,exhaustionGuard:c9(c?.resetAwareExhaustionGuardPercent,10)/100,quotaCacheTtlMs:db(c?.resetAwareQuotaCacheTtlMs,0,3e5),quotaCacheMaxStaleMs:db(c?.resetAwareQuotaCacheMaxStaleMs,0,36e5)},{connectionById:j,expandedTargets:k}=await dn(a,b,d,e),l=await dp({comboName:b,config:i,connectionById:j,expandedTargets:k,log:d,scoreQuota:a=>({score:function(a,b){if(!a||!ak(a))return{score:.5};if(!0===a.limitReached)return{score:-1/0};let c=aC(c8(a.percentUsed)??.5),d=dg(a,"window5h"),e=dg(a,"window7d")||dg(a,"windowWeekly"),f=aC(1-(d?.percentUsed??c)),g=aC(1-(e?.percentUsed??c)),h=dh(f,d?.resetAt,18e6,.45,.55),i=dh(g,e?.resetAt??de(a.resetAt),6048e5,.25,.75),j=b.sessionWeight*h+b.weeklyWeight*i;return b.exhaustionGuard>0&&f<b.exhaustionGuard&&(j*=Math.max(.05,f/b.exhaustionGuard)),{score:j}}(a,i).score})});l.sort((a,b)=>b.score!==a.score?b.score-a.score:a.index-b.index);let m=l[0]?.score??0,n=l.filter(a=>m-a.score<=i.tieBand);return dq(l,n,`reset-aware:${b}`).map(a=>a.target)}async function dv(a,b,c,d,e){if(0===a.length)return a;let f=dc(c),{connectionById:g,expandedTargets:h}=await dn(a,b,d,e),i=await dp({comboName:b,config:f,connectionById:g,expandedTargets:h,log:d,scoreQuota:a=>({resetMs:di(a,f.windows)})});i.sort((a,b)=>a.resetMs!==b.resetMs?a.resetMs-b.resetMs:a.index-b.index);let j=i[0]?.resetMs??1/0;if(!Number.isFinite(j)||f.tieBandMs<=0)return i.map(a=>a.target);let k=i.filter(a=>a.resetMs-j<=f.tieBandMs);return k.length<=1?i.map(a=>a.target):dq(i,k,`reset-window:${b}`).map(a=>a.target)}async function dw(){return(await c.e(1999).then(c.bind(c,71999))).getSaturation}async function dx(a,b,c,d){if(a.length<=1)return a;try{let{expandedTargets:e}=await dn(a,b,c,d);if(e.length<=1)return e;let f=await dw(),g=new Map,h=a=>`${a.provider}:${a.connectionId}`;await dr(e,5,async a=>{if(!a.connectionId)return;let b=h(a);g.has(b)||(g.set(b,(async()=>{let[b,c]=await Promise.all([f(a.connectionId,a.provider,{unit:"percent",window:"5h"}),f(a.connectionId,a.provider,{unit:"percent",window:"weekly"})]);return{util5h:b,util7d:c}})()),await g.get(b))});let i=new Map;for(let a of e){if(!a.connectionId)continue;let b=await g.get(h(a));b&&i.set(a.executionKey,b)}if(e.length<=1)return e;let j=e.map((a,b)=>({candidate:a,index:b,headroom:bA(i.get(a.executionKey))}));return j.sort((a,b)=>b.headroom!==a.headroom?b.headroom-a.headroom:a.index-b.index),j.map(a=>a.candidate)}catch(d){return c.warn?.({err:d?.message,comboName:b},"headroom ordering failed — keeping target order"),a}}let dy={light:1,standard:2,heavy:3,critical:4},dz={light:35,standard:65,heavy:95,critical:120},dA=/\b(hi|hello|thanks|thank you|ping|format|rewrite|grammar|translate|summari[sz]e|short|quick|one[- ]?liner|explain briefly)\b/i,dB=/\b(debug|root cause|architecture|architectural|refactor|migrate|implementation|implement|design|analy[sz]e|investigate|compare|benchmark|whitebox|codebase|end[- ]?to[- ]?end|e2e)\b/i,dC=/\b(critical|security|vulnerability|exploit|rce|remote code execution|supply chain|account takeover|auth bypass|privilege escalation|tenant|cross[- ]tenant|sandbox escape|ssrf|deserialization|prod incident|data exfiltration|bug bounty)\b/i;function dD(a,b=[]){if(null==a)return b;if("string"==typeof a||"number"==typeof a||"boolean"==typeof a)return b.push(String(a)),b;if(Array.isArray(a)){for(let c of a)dD(c,b);return b}return"object"!=typeof a||("string"==typeof a.text&&b.push(a.text),"string"==typeof a.input_text&&b.push(a.input_text),"string"==typeof a.output_text&&b.push(a.output_text),"string"==typeof a.content?b.push(a.content):Array.isArray(a.content)&&dD(a.content,b),Array.isArray(a.parts)&&dD(a.parts,b),"string"==typeof a.query&&b.push(a.query),"string"==typeof a.url&&b.push(a.url)),b}function dE(a){var b,c;let d,e,f,g,h,i,j,k,l,m,n,o,p=(d=(c=b=a??{}).contents??c.request?.contents,e=dD([c.system,c.instructions,c.messages,c.input,d,c.query,c.url]).join("\n").length,f=b.contents??b.request?.contents,g=(Array.isArray(b.messages)?b.messages.length:0)+(Array.isArray(b.input)?b.input.length:0)+(Array.isArray(b.contents)?b.contents.length:0)+(Array.isArray(f)?f.length:0),h=Array.isArray(b?.tools)?b.tools.length:0,i=b.generationConfig,k=(j=[b.max_tokens,b.max_output_tokens,b.max_completion_tokens,i?.maxOutputTokens].map(a=>Number.parseInt(String(a??""),10)).filter(a=>Number.isFinite(a))).length>0?Math.max(...j):0,l=b?.reasoning,m=String(b?.reasoning_effort??l?.effort??"").toLowerCase(),n=b?.contents??b?.request?.contents,o=dD([b?.system,b?.instructions,b?.messages,b?.input,n,b?.query,b?.url]).join("\n"),{promptChars:e,messageCount:g,toolCount:h,outputTokens:k,effort:m,hasExplicitReasoning:!!(m&&"none"!==m&&"off"!==m&&"disabled"!==m),lightKeyword:dA.test(o),heavyKeyword:dB.test(o),criticalKeyword:dC.test(o)}),q=[],r=(a,b)=>(a&&q.push(b),a),s=/^(high|xhigh|max|maximum|hard|deep)$/.test(p.effort),t=!p.hasExplicitReasoning||/^(low|minimal|none|off|disabled)$/.test(p.effort);return r(p.promptChars>=1e5,"huge-context")||r(p.outputTokens>=32768,"huge-output")||r(p.toolCount>=8&&p.promptChars>=16e3,"many-tools-large-context")||r(p.criticalKeyword&&(s||p.toolCount>=3||p.promptChars>=8e3),"critical-domain")?{level:"critical",weight:dy.critical,...p,reasons:q}:[r(p.promptChars>=5e4,"large-context"),r(p.promptChars>=24e3,"medium-large-context"),r(p.messageCount>=16,"long-conversation"),r(p.toolCount>=4,"many-tools"),r(p.outputTokens>=8192,"large-output"),r(s,"high-reasoning-effort"),r(p.criticalKeyword,"security-sensitive"),r(p.heavyKeyword&&p.promptChars>=4e3,"complex-task")].filter(Boolean).length>=2||p.promptChars>=5e4||s?{level:"heavy",weight:dy.heavy,...p,reasons:q}:p.promptChars<=2e3&&p.messageCount<=3&&0===p.toolCount&&p.outputTokens<=1500&&t&&!p.criticalKeyword&&!p.heavyKeyword||p.lightKeyword&&p.promptChars<=4e3&&0===p.toolCount&&t&&!p.criticalKeyword?{level:"light",weight:dy.light,...p,reasons:q.length>0?q:["small-simple-request"]}:{level:"standard",weight:dy.standard,...p,reasons:q.length>0?q:["default"]}}let dF=new Set(["vision"]);function dG(a){return String(a??"").replace(/\s+/g," ").trim().slice(0,12e3)}function dH(a,b,c="content"){if(!Array.isArray(a))return"";for(let d of a){if(!d||"object"!=typeof d||!b.has(String(d.role??"")))continue;let a=dG(dD("parts"===c?d.parts:d.content).join("\n"));if(a)return a}return""}function dI(a,b,c="content"){return Array.isArray(a)?dG(a.filter(a=>!!a&&"object"==typeof a&&b.has(String(a.role??""))).map(a=>dD("parts"===c?a.parts:a.content).join("\n")).filter(Boolean).join("\n")):""}function dJ(a){let b=dG(a);return b?(0,by.createHash)("sha1").update(b).digest("hex").slice(0,24):null}let dK={"grok-4-fast-non-reasoning":1143,"grok-4-1-fast-non-reasoning":1244,"gemini-2.5-flash":1238,"kimi-k2.5":1646,"gpt-4o-mini":2764,"claude-sonnet-4.6":4e3,"claude-opus-4.6":6e3,"deepseek-chat":2e3};function dL(a){return dK[String(a||"").toLowerCase()]??1500}function dM(a){return Number.isFinite(a)?Math.max(0,Math.min(100,a)):100}function dN(a){if(!a||"object"!=typeof a||Array.isArray(a))return{};let b={};for(let[c,d]of Object.entries(a)){let a=Number(d);c&&Number.isFinite(a)&&(b[c]=a)}return b}let dO=new Set(["banned","credits_exhausted","deactivated","expired","rate_limited"]);async function dP(a,b,d=null,e=dc(null),f=null){let g=v(b),h=(f??(0,ai.xv)(null))?.quotaPreflight?.enabled===!0,{getPricingForModel:i}=await Promise.resolve().then(c.bind(c,89718)),j=new Map,k={};try{let{getModelLatencyStats:a}=await c.e(4989).then(c.bind(c,47370));k=await a({windowHours:24,minSamples:3,maxRows:1e4})}catch{}let l=Array.from(new Set(a.map(a=>a.provider||(0,af.parseModel)(a.modelStr).provider||"unknown"))),m=new Map,n=new Map,o=new Map;await Promise.all(l.map(async a=>{try{let b=await (0,aR.P)({provider:a,isActive:!0}),c=Array.isArray(b)?b:[];for(let b of(m.set(a,c.length),n.set(a,c),c))b&&"object"==typeof b&&"string"==typeof b.id&&o.set(b.id,b)}catch{m.set(a,0),n.set(a,[])}}));let p=[];for(let b of a){let a=b.provider||(0,af.parseModel)(b.modelStr).provider||"unknown",c=n.get(a)||[];if(b.connectionId){p.push(b);continue}let d=c.map(a=>a&&"object"==typeof a&&"string"==typeof a.id?a.id:null).filter(a=>null!==a),e=Array.isArray(b.allowedConnectionIds)?new Set(b.allowedConnectionIds.filter(a=>"string"==typeof a&&a.trim().length>0)):null,f=e?d.filter(a=>e.has(a)):d;if(0===f.length){p.push(b);continue}for(let a of f)p.push({...b,connectionId:a,executionKey:`${b.executionKey}@${a}`})}return(await Promise.all(p.map(async a=>{let c,l,n,p=a.modelStr,q=(0,af.parseModel)(p),r=a.provider||q.provider||q.providerAlias||"unknown",s=q.model||p,t=k[`${r}/${s}`]||null,u=Number(t?.totalRequests),v=Number.isFinite(u)&&u>=10,w=1;try{let a=await i(r,s),b=Number(a?.input),c=Number(a?.output);Number.isFinite(b)&&b>=0&&(w=Number.isFinite(c)&&c>=0?.6*b+.4*c:b)}catch{}let x=g?.byModel?.[p]||null,y=Number(x?.avgLatencyMs),z=Number(x?.successRate),A=Number(t?.p95LatencyMs),B=Number(t?.latencyStdDev),C=Number(t?.successRate),D=v?Number.isFinite(A)&&A>0?A:dL(s):Number.isFinite(y)&&y>0?y:dL(s),E=v?Number.isFinite(C)&&C>=0&&C<=1?1-C:.05:Number.isFinite(z)&&z>=0&&z<=100?1-z/100:.05,F=v&&Number.isFinite(B)&&B>0?Math.max(10,B):Math.max(10,.1*D),G=(0,ae.qF)(r)?.getStatus?.()?.state,H=(n=(0,bx.bb)(d||null))?a.connectionId===n?1:a.connectionId?.1:.5:.5,I=.5,J=100,K=!1,L=(0,Z.__)(r),M=a.connectionId?o.get(a.connectionId):void 0,N=function(a){var b;if(!a)return;let c="string"==typeof(b=a.testStatus)?b.trim().toLowerCase():"";return dO.has(c)?c:"unavailable"===c&&function(a){if(null==a||""===a)return!1;let b=new Date(String(a)).getTime();return Number.isFinite(b)&&b>Date.now()}(a.rateLimitedUntil)?"rate_limited":void 0}(M),O=h?N:void 0,P=!1;if(O?(K=!0,c=O,J=0):N&&(P=!0,l=N),L&&a.connectionId){let d=`${r}:${a.connectionId}`;j.has(d)||j.set(d,ds({provider:r,connectionId:a.connectionId,connection:M,fetcher:L,config:e,log:{},comboName:b}));let g=await j.get(d);if(I=function(a,b){var c;let d=di(a,b.windows);if(!Number.isFinite(d))return .5;let e=d-Date.now();return e<=0?1:aC(1-e/((c=b.windows).includes("monthly")?2592e6:c.includes("weekly")?6048e5:18e6))}(g,e),K||(J=function(a){if(!a||"object"!=typeof a)return 100;if(!0===a.limitReached)return 0;let b=a.windows;if(b&&"object"==typeof b&&!Array.isArray(b)){let a=null;for(let c of Object.values(b)){if(!c||"object"!=typeof c)continue;let b=Number(c.percentUsed);if(!Number.isFinite(b))continue;let d=dM((1-b)*100);a=null===a?d:Math.min(a,d)}if(null!==a)return a}let c=Number(a.percentUsed);return Number.isFinite(c)?dM((1-c)*100):100}(g)),!K&&h){let a,b,d,e,h,i=(0,Z.dN)(g,(a=(f??(0,ai.xv)(null))?.quotaPreflight,b=a?.defaultThresholdPercent??2,d=a?.warnThresholdPercent??20,e=dN(a?.providerWindowDefaults?.[r]),h=dN(M?.quotaWindowThresholds),{resolveMinRemainingPercent:a=>{if(null!==a){let b,c;for(let d of(b=[a],(c=a.toLowerCase())!==a&&b.push(c),"codex"===r&&((c.includes("session")||"5h"===c||"five_hour"===c)&&b.push("session"),(c.includes("weekly")||"7d"===c||"seven_day"===c)&&b.push("weekly"),(c.includes("monthly")||"30d"===c)&&b.push("monthly")),[...new Set(b)])){let a=h[d];if("number"==typeof a)return a;let b=e[d];if("number"==typeof b)return b}}return b},resolveWarnRemainingPercent:()=>d}));i.proceed||(K=!0,c=i.reason||"quota_exhausted")}}return{stepId:a.stepId,executionKey:a.executionKey,modelStr:p,provider:r,model:s,quotaRemaining:J,quotaTotal:100,circuitBreakerState:"OPEN"===G||"HALF_OPEN"===G?G:"CLOSED",costPer1MTokens:w,p95LatencyMs:D,latencyStdDev:F,errorRate:E,accountTier:"standard",quotaResetIntervalSecs:86400,contextAffinity:H,resetWindowAffinity:I,quotaCutoffBlocked:K,quotaCutoffReason:c,statusPenalty:P,statusPenaltyReason:l,connectionPoolSize:m.get(r)??1,connectionId:a.connectionId??void 0}}))).filter(a=>{let b=null.get(a.provider);return!b?.has(a.model)})}let dQ=new Set(["credits_exhausted","banned","expired"]);async function dR(a){try{let b=(0,af.parseModel)(a).provider;if(!b)return!1;let c=(0,ae.qF)(b)?.getStatus?.()?.state,d=await (0,aR.P)({provider:b,isActive:!0});return function(a,b,c,d={}){if("OPEN"===a||!Array.isArray(b)||0===b.length)return!0;let e=d.backoffLevel??Number(process.env.PIN_DROP_BACKOFF_LEVEL||"2"),f=d.graceMs??Number(process.env.PIN_DROP_GRACE_MS||"20000");return!b.some(a=>{let b="string"==typeof a.testStatus?a.testStatus:"";if(dQ.has(b)||Number(a.backoffLevel??0)>=e)return!1;let d=a.rateLimitedUntil?new Date(String(a.rateLimitedUntil)).getTime():0;return!Number.isFinite(d)||!(d-c>f)})}(c,d||[],Date.now())}catch{return!1}}async function dS({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,relayOptions:l,signal:m,apiKeyAllowedConnections:n=null,nesting:o=null,comboName:q,models:s,comboStrategy:u,comboStickyLimit:w}){let y;b||(b={name:q,models:s||[],strategy:u,config:{stickyRoundRobinLimit:w}});let H={body:(aL={body:a,combo:b,settings:i,relayOptions:l,log:h}).body,combo:aL.combo,settings:aL.settings??null,relayOptions:aL.relayOptions??null,log:aL.log},{strategy:I,relayConfig:K,resilienceSettings:O,universalHandoffConfig:P,effectiveSessionId:Q,pinnedModel:R,clientRequestedStream:S,config:U,comboTargetTimeoutMs:Z,reasoningTokenBufferEnabled:$}=function(a){var b,c,d;let e,f,g,h,i,j,k,{combo:l,settings:m,relayOptions:n}=a,o=l.strategy||"priority",p="context-relay"===o?N(n?.config||null):null,q=m?(0,ai.xv)(m):(0,ai.xv)(null),r=(b=l.universal_handoff||l.universalHandoff,c=n?.universalHandoffConfig,e=b??{},f=c??{},g=(a,b)=>"boolean"==typeof e[a]?e[a]:"boolean"==typeof f[a]?f[a]:b,h=(a,b)=>{if("string"==typeof e[a]){let b=e[a].trim();if(b.length>0)return b}if("string"==typeof f[a]){let b=f[a].trim();if(b.length>0)return b}return b},i=(a,b,c,d)=>{let g,h=e[a]??f[a];if("number"==typeof h&&Number.isFinite(h))g=h;else if("string"==typeof h){let a=Number(h);Number.isFinite(a)&&(g=a)}return void 0===g?b:void 0!==c&&g<c?c:void 0!==d&&g>d?d:g},j=h("trigger","on-switch"),{enabled:g("enabled",!0),trigger:"always"===j||"on-error"===j?j:"on-switch",providerAllowlist:Array.isArray(k=e[d="providerAllowlist"]??f[d])?k.map(a=>"string"==typeof a?a.trim().toLowerCase():"").filter(Boolean):L,maxMessagesForSummary:i("maxMessagesForSummary",30,5,100),handoffModel:h("handoffModel",""),ttlMinutes:i("ttlMinutes",300,1,10080),preserveSystemPrompt:g("preserveSystemPrompt",!0)}),{effectiveSessionId:s,pinnedModel:t}=function(a){let{combo:b,relayOptions:c,log:d}=a,e=b.context_cache_protection?c?.sessionId??function(a){try{return(0,am.Tn)(a)??null}catch{return null}}(a.body):null,f=null;if(b.context_cache_protection&&e&&!a.body?.[M]){let c=E(e,b.name);c&&(a.body={...a.body,model:c},f=c,d.info("COMBO",`[#401] Context cache: pinned model=${c} (server-side)`))}return{effectiveSessionId:e,pinnedModel:f}}(a),{body:u}=function(a,b){var c;if(!b)return{body:a,pinnedModel:null};let d=Array.isArray(a.messages)?[...a.messages]:[],e=null;e=null,b.system_message&&b.system_message.trim()&&(c=d,d=[{role:"system",content:b.system_message},...c.filter(a=>"system"!==a.role)]);let f=function(a,b){let c;if(!a||!b)return a;try{c=new RegExp(b)}catch{return console.warn(`[ComboAgent] Invalid tool_filter_regex: "${b}"`),a}return a.filter(a=>{let b=a.function?.name??a.name??"";return c.test(String(b))})}(a.tools,b.tool_filter_regex);return d=d.map(a=>"string"==typeof a.content&&ag.test(a.content)?{...a,content:a.content.replace(ah,"").trimEnd()}:a),{body:{...a,messages:d,...f!==a.tools&&{tools:f}},pinnedModel:e}}(a.body,l);a.body=u;let v=a.body?.stream===!0,w=m?C(l,m):{...x,...l?.config||{}},y=function(a,b,c=0){let d=A(b),e=z(a)?A(a.targetTimeoutMs):0;if(e>0)return d<=0?e:Math.min(e,d);let f=A(c);return d<=0||f<=0?d:Math.min(f,d)}(w,aj.MT,12e4),B=!1!==w.reasoningTokenBufferEnabled;return{strategy:o,relayConfig:p,resilienceSettings:q,universalHandoffConfig:r,effectiveSessionId:s,pinnedModel:t,clientRequestedStream:v,config:w,comboTargetTimeoutMs:y,reasoningTokenBufferEnabled:B}}(H);a=H.body;let _=async(a,b,c)=>{let d;if(Z<=0)return f(a,b,c).catch(a=>(0,e.yj)(502,a?.message??"Upstream model error"));let g=new AbortController,i=!1,j=new Promise(a=>{d=setTimeout(()=>{i=!0,h.warn("COMBO",`Model ${b} exceeded ${Z}ms timeout — falling back`),g.abort(Error("combo-per-model-timeout")),a(new Response(JSON.stringify({error:{message:`Model ${b} timed out`}}),{status:524,headers:{"Content-Type":"application/json"}}))},Z)}),k={...c??{},modelAbortSignal:g.signal},l=c?.modelAbortSignal??null,m=null;l&&(l.aborted?g.abort(Error("hedge-cancelled")):(m=()=>{g.abort(Error("hedge-cancelled"))},l.addEventListener("abort",m,{once:!0})));try{return await Promise.race([f(a,b,k).catch(a=>i?new Response(null,{status:599}):(0,e.yj)(502,a?.message??"Upstream model error")),j])}finally{clearTimeout(d),l&&m&&l.removeEventListener("abort",m)}};if(R){let c=!(Array.isArray(j)?j.length>0:!!j)||c0(b,j,bM(U.maxComboDepth)).some(a=>a.modelStr===R),d=!!c&&await dR(R);return c&&!d?h.info("COMBO",`Bypassing strategy — routing directly to pinned context model: ${R}`):h.warn("COMBO",c?`Context-cache pin "${R}" provider durably unhealthy — dropping pin, using strategy`:`Stale context-cache pin "${R}" not in combo "${b.name}" targets — dropping pin, using strategy`),_(a,R)}if("fusion"===I){let c=(b.models||[]).map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"string"==typeof a.model?a.model:null).filter(a=>!!a),d="string"==typeof U.judgeModel?U.judgeModel:void 0,e=U.fusionTuning&&"object"==typeof U.fusionTuning?U.fusionTuning:void 0;return cy({body:a,models:c,handleSingleModel:_,log:h,comboName:b.name,judgeModel:d,tuning:e})}let aa=o||{depth:0,maxDepth:bM(U.maxComboDepth),visitedComboNames:[b.name],rootComboName:b.name,attemptBudget:{count:0,limit:30}},ab="execute"==("execute"===U.nestedComboMode?"execute":"flatten")&&j?function(a,b,c,d=3){return"flatten"!==c&&b?(!function a(b,c,d=new Set,e=0,f=3){if(e>f)throw Error(`Max combo nesting depth (${f}) exceeded at "${b}"`);if(d.has(b))throw Error(`Circular combo reference detected: ${b}`);d.add(b);let g=cR(c),h=g.find(a=>a.name===b);if(h?.models)for(let b of h.models){let c=cM(b).model;g.find(a=>a.name===c)&&a(c,g,new Set(d),e+1,f)}}(a.name,b,new Set,0,d),cU(a,b)):c0(a,b,d)}(b,j,"execute",aa.maxDepth):[],ac=ab.some(a=>"combo-ref"===a.kind),ad=new Set(["priority","round-robin","random","strict-random","weighted","fill-first"]);if(ac&&ad.has(I)){let c=ab,d=I;if("weighted"===I){let a=cj(U.stickyWeightedLimit),e=cm(b.name,a),f=e?c.find(a=>a.executionKey===e):null;f&&(c=[f,...c.filter(a=>a.executionKey!==f.executionKey)],d="priority")}if("random"===I&&([...c],c=void 0),"strict-random"===I){let a=await (b.name,c.map(a=>a.executionKey),null),d=c.find(b=>b.executionKey===a)||c[0];c=[d,...c.filter(a=>a.executionKey!==d.executionKey)]}let e=null,k=c;if("round-robin"===I){let a=U.stickyRoundRobinLimit;e=cj(null!=a?a:i?.stickyRoundRobinLimit);let{startIndex:d,counter:f}=ck(b.name,c,e);e<=1&&cg.set(b.name,f+1),c=c.map((a,b)=>c[(d+b)%c.length]),k=ab}let o=await cE({body:a,combo:b,strategy:d,effectiveComboStrategy:I,units:c,handleSingleModel:_,isModelAvailable:g,log:h,config:U,settings:i,allCombos:j,signal:m,nesting:aa,baseOptions:{body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,relayOptions:l,signal:m,apiKeyAllowedConnections:n},runCombo:dS});if("weighted"===I&&o.response.ok&&o.unit){let a=cj(U.stickyWeightedLimit);a>1&&cn(b.name,o.unit.executionKey,a)}return"round-robin"===I&&o.response.ok&&o.unit&&e&&e>1&&cl(b.name,o.unit,e,k),o.response}if("round-robin"===I)return dT({body:a,combo:b,handleSingleModel:_,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:m});let at=U.maxRetries??1,au=bN(U.retryDelayMs,2e3),av=bN(U.fallbackDelayMs,0),aw=U.maxSetRetries??0,ax=bN(U.setRetryDelayMs,2e3),ay=async a=>{let b=(0,af.parseModel)(a.modelStr).model||a.modelStr;return!(a.provider&&"OPEN"===(0,ae.qF)(a.provider).getStatus().state||O.providerCooldown.enabled&&a.provider&&"unknown"!==a.provider&&cb(a.provider,a.connectionId??void 0,O)||a.provider&&b&&(0,d.qw)(a.provider,a.connectionId||"",b))&&(!g||await g(a.modelStr,a))},az=await cK(b),aB=j?Array.isArray(j)?await cL(j):{...j,combos:await cL(j.combos||[])}:j,aD=cj(U.stickyWeightedLimit);if("weighted"===I&&!ci.has(b.name)&&ci.size>=500){let a=ci.keys().next().value;void 0!==a&&ci.delete(a)}let aE=new Set;if("weighted"===I)for(let a of y=c1(az,aB))(await Promise.all(a.targets.map(ay))).some(Boolean)&&aE.add(a.step.executionKey);let aF="weighted"===I?cm(b.name,aD):null,aG=aF&&aE.has(aF)?aF:null;"weighted"!==I||aD<=1?ci.delete(b.name):aF&&!aG&&ci.delete(b.name);let aH="weighted"===I?function(a,b,c=null,d=null,e){let f=cU(a,b).filter(a=>!d||d.has(a.executionKey));if(0===f.length)return{orderedTargets:[],selectedStep:null,orderedSteps:[]};let g=c&&f.find(a=>a.executionKey===c)||function(a){if(0===a.length)return null;let b=a.reduce((a,b)=>a+(b.weight||0),0);if(b<=0)return a[void a.length];let c=(void 0)*b;for(let b of a)if((c-=b.weight||0)<=0)return b;return a.at(-1)}(f);if(!g)return{orderedTargets:[],selectedStep:null,orderedSteps:[]};let h=function(a,b,c=!1){let d=a.find(a=>a.executionKey===b),e=a.filter(a=>a.executionKey!==b);return c||e.sort((a,b)=>b.weight-a.weight),d?[d,...e]:e}(f,g.executionKey,cT(a).length>0),i=new Map((e||c1(a,b)).map(a=>[a.step.executionKey,a.targets]));return{orderedTargets:al(h.flatMap(a=>i.get(a.executionKey)||[])),selectedStep:g,orderedSteps:h}}(az,aB,aG,aE,y):null,aI=a=>{if(!aH?.orderedSteps)return null;let b=aH.orderedSteps.find(b=>a.executionKey===b.executionKey||a.executionKey.startsWith(b.executionKey+">"));return b?.executionKey||null},aJ="weighted"===I?aH?.orderedTargets||[]:c0(az,aB,bM(U.maxComboDepth));if(aJ=await aY(aJ,a,h),"weighted"===I?h.info("COMBO",`Weighted selection${aG?" (sticky)":""}${j?" with nested resolution":""}: ${aJ.length} total targets`):j&&h.info("COMBO",`${I} with nested resolution: ${aJ.length} total targets`),"auto"===I){let c=function(a){if("string"!=typeof a||!a.startsWith("auto"))return{valid:!1,error:"Not an auto-prefixed model"};let b=a.split("/");if(1===b.length)if("auto"===b[0])return{valid:!0,variant:void 0};else return{valid:!1,error:"Invalid auto prefix format"};if(2===b.length){if("auto"!==b[0])return{valid:!1,error:"Invalid auto prefix format"};let a=b[1];return""===a||bq.includes(a)?{valid:!0,variant:""===a?void 0:a}:{valid:!1,error:`Invalid auto variant: ${a}`}}return{valid:!1,error:"Invalid auto prefix format"}}(b.name);if("smart"===(c.valid?c.variant:void 0)||U.pipeline_enabled)try{let c=await bv({body:a,combo:b,handleChatCore:_,log:{info:h.info,warn:h.warn,error:h.error??h.warn},settings:i??{},signal:m??void 0});return c instanceof Response?c:function(a,b){let c="string"==typeof b.model&&b.model.length>0?b.model:"auto",d=`chatcmpl-pipeline-${Date.now()}`,e=Math.floor(Date.now()/1e3),f=a.text??"";if(!0!==b.stream)return new Response(JSON.stringify({id:d,object:"chat.completion",created:e,model:c,choices:[{index:0,message:{role:"assistant",content:f},finish_reason:"stop"}],usage:{prompt_tokens:0,completion_tokens:0,total_tokens:0}}),{status:200,headers:{"Content-Type":"application/json"}});let g=(a,b)=>`data: ${JSON.stringify({id:d,object:"chat.completion.chunk",created:e,model:c,choices:[{index:0,delta:a,finish_reason:b}]})}
|
|
18
18
|
|
|
19
|
-
`;return new Response(g({role:"assistant",content:f},null)+g({},"stop")+"data: [DONE]\n\n",{status:200,headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache",Connection:"keep-alive"}})}(c,a)}catch(b){let a=b instanceof Error?b.message:"";"PIPELINE_DISABLED"===a?h.info("COMBO","Pipeline disabled, falling through to standard auto routing"):"PIPELINE_TOKEN_THRESHOLD"===a?h.info("COMBO","Pipeline skipped (prompt below token threshold), falling through to standard auto routing"):h.warn("COMBO","Pipeline dispatch failed, falling through to standard auto routing",{err:b})}}let aG=!1;if("auto"===u){var aH,aI;let d,f,g,j,m,n=Array.isArray(a?.tools)&&a.tools.length>0,o=[...aF];if(n){let a=o.filter(a=>(0,bw.P5)(a.modelStr));a.length>0?o=a:h.warn("COMBO","Auto strategy: all candidates filtered by tool-calling policy, falling back to full pool")}let q=a.messages,s=(0,G.estimateTokens)("string"==typeof q||null!==q&&"object"==typeof q?q:[]);if(s>0){let a=o.filter(a=>{let b=cY(a.modelStr);return null==b||b>=s});a.length>0?(h.debug?.("COMBO",`Auto strategy: context-window filter kept ${a.length}/${o.length} candidates (est. ${s} tokens)`),o=a):h.warn("COMBO",`Auto strategy: all candidates filtered by context-window policy (est. ${s} tokens), falling back to full pool`),o=await aZ(o,b)}let t=function(a){if(!a||"object"!=typeof a)return"";let b=Array.isArray(a.messages)?[...a.messages].reverse().find(a=>ak(a)&&"user"===a.role):null;if(ak(b)){var c;return"string"==typeof(c=b.content)?c:Array.isArray(c)?c.map(a=>ak(a)&&"string"==typeof a.text?a.text:"").join("\n"):""}if("string"==typeof a.input)return a.input;if(Array.isArray(a.input)){let b=a.input.map(a=>ak(a)?"string"==typeof a.content?a.content:"string"==typeof a.text?a.text:"":"").filter(Boolean).join("\n");if(b)return b}return"string"==typeof a.prompt?a.prompt:""}(a),u="string"==typeof b?.system_message?b.system_message:void 0,v=function(a,b,c){if(!b.enabled)return"medium";let d=`${c??""} ${a}`.toLowerCase(),e=a.trim().split(/\s+/).length,f=b.simpleMaxWords??60,g=[...an,...b.extraCodeKeywords??[]],h=[...ap,...b.extraMathKeywords??[]],i=[...ao,...b.extraReasoningKeywords??[]],j=[...aq,...b.extraCreativeKeywords??[]],k=[...ar,...b.extraSimpleKeywords??[]];for(let a of g)if(d.includes(a.toLowerCase()))return"code";for(let a of h)if(d.includes(a.toLowerCase()))return"math";for(let a of i)if(d.includes(a.toLowerCase()))return"reasoning";for(let a of j)if(d.includes(a.toLowerCase()))return"creative";if(e<f){for(let a of k)if(d.includes(a.toLowerCase()))return"simple"}return"medium"}(t,(f=i||{},g=b?.autoConfig||{},j=ak(b?.config?.auto)?b.config.auto:{},m=ak(g.intentConfig)&&g.intentConfig||ak(j.intentConfig)&&j.intentConfig||ak(b?.config?.intentConfig)&&b.config.intentConfig||{},{...as,...m,..."boolean"==typeof f.intentDetectionEnabled?{enabled:f.intentDetectionEnabled}:{},...Number.isFinite(Number(f.intentSimpleMaxWords))?{simpleMaxWords:Number(f.intentSimpleMaxWords)}:{},...aX(f.intentExtraCodeKeywords).length>0?{extraCodeKeywords:aX(f.intentExtraCodeKeywords)}:{},...aX(f.intentExtraReasoningKeywords).length>0?{extraReasoningKeywords:aX(f.intentExtraReasoningKeywords)}:{},...aX(f.intentExtraSimpleKeywords).length>0?{extraSimpleKeywords:aX(f.intentExtraSimpleKeywords)}:{}}),u);!function(a,b){!p.has(a)&&p.size>=500&&r(p,{deletePairedShadow:!0}),p.has(a)||p.set(a,k("priority"));let c=p.get(a);if(!c)return;let d=String(b||"unknown");c.intentCounts[d]=(c.intentCounts[d]||0)+1}(b.name,v);let w=function(a){switch(a){case"code":return"coding";case"reasoning":return"analysis";default:return"default"}}(v),x=b?.autoConfig||(ak(b?.config?.auto)?b.config.auto:null)||b?.config||{},z=ak(x)?x:{},A="string"==typeof z.routerStrategy?z.routerStrategy:"string"==typeof z.routingStrategy?z.routingStrategy:"string"==typeof z.strategyName?z.strategyName:"rules",B=Array.isArray(z.candidatePool)?z.candidatePool:[...new Set(o.map(a=>a.provider))],C=z.weights&&"object"==typeof z.weights?z.weights:aN,D=Number.isFinite(Number(z.explorationRate))?Number(z.explorationRate):.05,E=Number.isFinite(Number(z.budgetCap))?Number(z.budgetCap):void 0,F="string"==typeof z.modePack?z.modePack:void 0,H=dc(z),I=function(a){if(!a)return;let b=ak(a.sla)?a.sla:{},c=c8(a.slaTargetP95Ms??b.targetP95Ms),d=c8(a.slaMaxErrorRate??b.maxErrorRate),e=c8(a.slaMaxCostPer1MTokens??b.maxCostPer1MTokens),f=a.slaHardConstraints??b.hardConstraints,g={};return null!==c&&c>0&&(g.targetP95Ms=c),null!==d&&d>=0&&(g.maxErrorRate=aC(d)),null!==e&&e>0&&(g.maxCostPer1MTokens=e),"boolean"==typeof f&&(g.hardConstraints=f),Object.keys(g).length>0?g:void 0}(z);try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,89718)),e=await a(b.name,b.id||b.name);e&&(d=e.provider)}catch(a){h.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}let J=l?.bypassProviderQuotaPolicy===!0?{...y,quotaPreflight:{...y.quotaPreflight,enabled:!1}}:y,K=await dP(o,b.name,l?.sessionId,H,J),L=K.filter(a=>!0!==a.quotaCutoffBlocked),M=K.length-L.length;for(let a of(M>0&&h.info("COMBO",`Auto strategy: quota cutoff skipped ${M}/${K.length} account candidates`),L)){if(!a.executionKey)continue;let b=aV.get(a.executionKey);b||(b=new Map,aV.set(a.executionKey,b)),b.set(a.stepId,a)}if(K.length>0&&0===L.length)return(0,e.wO)(429,"All auto strategy candidates are below configured quota cutoffs");if(L.length>0){let c,f,g=null,i=null,j="";if("rules"!==A)try{let a=function(a,b,c="rules"){return bp(c).select(a,b)}(L,{taskType:w,requestHasTools:n,lastKnownGoodProvider:d,estimatedInputTokens:s,sla:I},A);g=a.provider,i=a.model,j=a.reason,aG=!0}catch(a){h.warn("COMBO",`Auto strategy '${A}' failed (${a?.message||"unknown"}), falling back to rules`)}if(!g||!i){let a=function(a,b,c="default"){let d,e=(a2||(a2=new a1),a2),f=a.weights;if(a.modePack){let b=a0[a.modePack];b&&(f=b)}.01>Math.abs(Object.values(f).reduce((a,b)=>a+b,0)-1)||(f=aN);let g=[],h=b.filter(b=>(!(a.candidatePool.length>0)||!!a.candidatePool.includes(b.provider))&&(!e.evaluate(b.provider,.5,b.circuitBreakerState).excluded||(g.push(b.provider),!1)));0===h.length&&(h.push(...b),g.length=0);let i=aQ(h,c,f,aA),j=i.filter(a=>!e.evaluate(a.provider,a.score,"CLOSED").excluded||(g.push(a.provider),!1)),k=j.length>0?j:i,l=Math.random()<(e.isInIncidentMode()?0:a.explorationRate)&&k.length>1;if(l){let a=Math.floor(Math.random()*k.length);d=k[a]}else d=a6(a.name).pick(k);if(a.budgetCap){let c=new Map;for(let a of b)c.set(`${a.provider}\0${a.model}`,a.costPer1MTokens);let e=a=>(c.get(`${a.provider}\0${a.model}`)??0)/1e6*1e3;if(e(d)>a.budgetCap){let b=k.filter(b=>e(b)<=a.budgetCap);if(b.length>0)d=a6(`${a.name}#budget`).pick(b);else{let a=[...k].sort((a,b)=>e(a)-e(b))[0];a&&(d=a)}}}return{provider:d.provider,model:d.model,score:d.score,isExploration:l,factors:d.factors,excluded:g,connectionId:d.connectionId}}({id:b.id||b.name,name:b.name,type:"auto",candidatePool:B,weights:C,modePack:F,budgetCap:E,explorationRate:D},L,w);g=a.provider,i=a.model,j=`score=${a.score.toFixed(3)}${a.isExploration?" (exploration)":""}`}let k=!0===P.complexityAwareRouting?function(a,b,c){try{let d,e,f,g,h={messages:Array.isArray(b?.messages)?b.messages:[],tools:Array.isArray(b?.tools)?b.tools:void 0,model:"string"==typeof b?.model?b.model:void 0},i=b4(a,h),j=(d=b1(h),e=b2(d.score),f=Array.isArray(h.tools)&&h.tools.length>0||d.breakdown.toolCalling>0,g=b3(e),f&&(g=b6(g,"cheap")),{score:d.score,level:e,recommendedTier:g,hasToolUse:f,signals:d.rulesTriggered});return i.recommendedMinTier=b6(i.recommendedMinTier,j.recommendedTier),c.info("COMBO",`Complexity-aware routing: level=${j.level} score=${j.score} minTier=${i.recommendedMinTier} tools=${j.hasToolUse}`),i}catch{return null}}(o.filter(a=>"model"===a.kind),a,h):null,l=(c=new Map((aI=o).map(a=>[a.executionKey,a])),(f=L.filter(a=>!0!==a.quotaCutoffBlocked)).map(a=>{let b=c.get(a.executionKey)||aI.find(b=>b.stepId===a.stepId||b.provider===a.provider&&b.modelStr===a.modelStr);if(!b)return null;let d={...b,stepId:a.stepId,executionKey:a.executionKey,modelStr:a.modelStr,provider:a.provider,connectionId:a.connectionId??b.connectionId},e=aO(aP(a,f,w??"general",aA,k??void 0),C);return"quotaSoftPenalty"in a&&!0===a.quotaSoftPenalty&&(e*=aT),"statusPenalty"in a&&!0===a.statusPenalty&&(e*=aU),{target:d,score:e}}).filter(a=>null!==a).sort((a,b)=>b.score-a.score)),m=l.map(a=>a.target),p=l.find(a=>{let b=(0,af.parseModel)(a.target.modelStr).model||a.target.modelStr;return a.target.provider===g&&b===i})?.target||m[0]||o[0];if(!p)return(0,e.wO)(429,"No auto strategy targets remained after quota cutoff filtering");aF=al([p,...m,...o].filter(a=>null!=a)),h.info("COMBO",`Auto selection: ${p?.modelStr||`${g}/${i}`} | intent=${v} task=${w} | strategy=${A} | ${j}`)}else h.warn("COMBO","Auto strategy has no candidates, keeping default ordering")}else if("lkgp"===u)try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,89718)),d=await a(b.name,b.id||b.name);if(d){let a=d.provider,c=d.connectionId,e=-1;if(c&&(e=aF.findIndex(b=>b.provider===a&&b.connectionId===c)),e<0&&(e=aF.findIndex(b=>b.provider===a||"string"==typeof b.modelStr&&b.modelStr.startsWith(`${a}/`))),e>0){let[d]=aF.splice(e,1);aF.unshift(d),h.info("COMBO",`[LKGP] Prioritizing last known good provider ${a}${c?` (account ${c})`:""} for combo "${b.name}"`)}else 0===e&&h.debug?.("COMBO",`[LKGP] Last known good provider ${a}${c?` (account ${c})`:""} already first for combo "${b.name}"`)}}catch(a){h.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}else if("strict-random"===u){let a=await (b.name,aF.map(a=>a.executionKey),null);aF=[aF.find(b=>b.executionKey===a)||null,...void aF.filter(b=>b.executionKey!==a)].filter(a=>null!==a),h.info("COMBO",`Strict-random deck: ${a} selected (${aF.length} targets)`)}else if("random"===u)[...aF],aF=void 0,h.info("COMBO",`Random shuffle: ${aF.length} targets`);else if("fill-first"===u)h.info("COMBO",`Fill-first ordering: preserving priority order (${aF.length} targets)`);else if("p2c"===u)aF=function(a,b){if(a.length<=1)return a;let c=v(b),d=void a.length,e=void a.length;e>=d&&e++;let f=a[d],g=cP(a[e],c)>cP(f,c)?e:d;return[a[g],...a.filter((a,b)=>b!==g)]}(aF,b.name),h.info("COMBO",`Power-of-two-choices ordering: selected ${aF[0]?.modelStr}`);else if("least-used"===u)aF=function(a,b){let c=function(a,b){let c=v(b);if(!c?.byModel)return a;let d=a.map(a=>({modelStr:a,requests:c.byModel[a]?.requests??0}));return d.sort((a,b)=>a.requests-b.requests),d.map(a=>a.modelStr)}(a.map(a=>a.modelStr),b),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(aF,b.name),h.info("COMBO",`Least-used ordering: ${aF[0]?.modelStr} has fewest requests`);else if("cost-optimized"===u){if(aF=await cO(aF),!0===P.manifestRouting)try{let b=b4(aF.filter(a=>"model"===a.kind),{messages:Array.isArray(a?.messages)?a.messages:[],tools:Array.isArray(a?.tools)?a.tools:void 0,model:"string"==typeof a?.model?a.model:void 0});if("require-premium"===b.strategyModifier){let a=aF.filter(a=>"model"!==a.kind||b.eligibleTargets.some(b=>b.provider===a.provider&&b.modelStr===a.modelStr));a.length>0&&(aF=a)}h.debug?.({strategyModifier:b.strategyModifier,specificityLevel:b.specificityLevel,score:b.specificity.score},"manifest routing applied")}catch(a){h.warn({err:a},"manifest routing failed, falling back to standard strategy")}h.info("COMBO",`Cost-optimized ordering: cheapest first (${aF[0]?.modelStr})`)}else if("reset-aware"===u)aF=await du(aF,b.name,P,h,n),h.info("COMBO",`Reset-aware ordering: ${aF[0]?.modelStr}${aF[0]?.connectionId?` (${aF[0].connectionId})`:""} first`);else if("reset-window"===u)aF=await dv(aF,b.name,P,h,n),h.info("COMBO",`Reset-window ordering: ${aF[0]?.modelStr}${aF[0]?.connectionId?` (${aF[0].connectionId})`:""} first`);else if("context-optimized"===u)aF=function(a){let b;if(!a.some(a=>null!=cY(a.modelStr)))return a;let c=((b=a.map(a=>a.modelStr).map(a=>({modelStr:a,context:cY(a)??0}))).sort((a,b)=>b.context-a.context),b.map(a=>a.modelStr)),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(aF),h.info("COMBO",`Context-optimized ordering: largest first (${aF[0]?.modelStr})`);else if("headroom"===u)aF=await dx(aF,b.name,h,n),h.info("COMBO",`Headroom ordering: ${aF[0]?.modelStr}${aF[0]?.connectionId?` (${aF[0].connectionId})`:""} has most free capacity`);else if("quota-share"===u){let c="string"==typeof a?.model?a.model:aF[0]?.modelStr??"",d=await bT(aF);aF=function(a,b,c,d=Date.now(),e){var f,g;let h,i,j,k,l,m;if(0===a.length)return{target:null,orderedTargets:[],decrementInflight:()=>{}};let n=(k=(j=c.indexOf("/"))>=0?c.slice(j+1):c,(l=a.filter(a=>""===(a.connectionId??"")||!0)).length>0?l:a),o=a.filter(a=>!n.includes(a)),{withRoom:p,atCap:q}=function(a,b,c){if(!b||0===b.size)return{withRoom:a,atCap:[]};let d=[],e=[];for(let f of a){let a=f.connectionId??"",g=function(a,b){if(!a||!b)return null;let c=b.get(a);return"number"!=typeof c||!Number.isFinite(c)||c<=0?null:c}(a,b);if(null===g){d.push(f);continue}bG(a,c)>=g?e.push(f):d.push(f)}return 0===d.length?{withRoom:a,atCap:[]}:{withRoom:d,atCap:e}}(n,e?.maxConcurrentByConnection,d),r=function(a,b){if(a.length<=1)return a.slice();let c=function(a){let b=bH.get(a);if(!b){if(bH.size>=200){let a=bH.keys().next().value;void 0!==a&&bH.delete(a)}b=new Map,bH.set(a,b)}return b}(b),d=a.reduce((a,b)=>a+bI(b.weight),0);for(let b of a){let a=bI(b.weight)/d;c.set(b.executionKey,(c.get(b.executionKey)??0)+a)}let e=a[0],f=c.get(e.executionKey)??0;for(let b=1;b<a.length;b++){let d=c.get(a[b].executionKey)??0;d>f&&(f=d,e=a[b])}c.set(e.executionKey,f-1);let g=a.filter(a=>a.executionKey!==e.executionKey);return[e,...g]}(p,b);r.length>=2&&1==(f=r[0],g=r[1],m=bG(f.connectionId??"",d),+(bG(g.connectionId??"",d)<m))?(h=r[1],i=[r[0],...r.slice(2)]):(h=r[0],i=r.slice(1));let s=h.connectionId??"";s&&function(a,b=12e4,c=Date.now()){if(!a)return;var d=c;for(let[a,b]of bF)b.expiresAtMs<=d&&bF.delete(a);let e=bF.get(a),f=(e&&e.expiresAtMs>c?e.count:0)+1;bF.set(a,{count:f,expiresAtMs:c+b})}(s,void 0,d);let t=[h,...i,...q,...o],u=!1;return{target:h,orderedTargets:t,decrementInflight:()=>{!u&&(u=!0,s&&function(a,b=Date.now()){if(!a)return;let c=bF.get(a);if(!c||c.expiresAtMs<=b)return bF.delete(a);let d=Math.max(0,c.count-1);0===d?bF.delete(a):bF.set(a,{count:d,expiresAtMs:c.expiresAtMs})}(s,d))}}}(aF,b.name,c,Date.now(),{maxConcurrentByConnection:d}).orderedTargets,h.info("COMBO",`Quota-share ordering: ${aF[0]?.modelStr}${aF[0]?.connectionId?` (${aF[0].connectionId})`:""} selected (DRR+P2C)`)}let aJ=await bE(aF,a.messages);if(aF=c_(aF=b$(aF=aJ.targets,P.evalRouting,h),a,h),["smart","task","task-aware","task_aware","auto"].includes(String(u??"").toLowerCase())){let b=dE(a),c=function(a){if(!a||"object"!=typeof a)return null;let b=a.metadata,c=[a.conversation_id,a.conversationId,a.thread_id,a.threadId,a.session_id,a.sessionId,b?.conversation_id,b?.conversationId,b?.thread_id,b?.threadId,b?.session_id,b?.sessionId].find(a=>null!=a&&String(a).trim());if(null!=c)return dJ(`explicit:${String(c).trim()}`);let d=new Set(["system","developer"]),e=new Set(["user"]),f=a.contents??a.request?.contents;return dJ([dD(a.system).join("\n"),dD(a.instructions).join("\n"),dI(a.messages??[],d),dI(a.input??[],d),dI(f??[],d,"parts"),dH(a.messages??[],e),"string"==typeof a.input?a.input:dH(a.input??[],e),dH(f??[],e,"parts"),a.query,a.url].filter(Boolean).join("\n"))}(a),d=function(a,b=dE({}),c=new Set){if(!Array.isArray(a)||a.length<=1)return a;let d=a.map((a,d)=>({t:a,i:d,score:function(a,b=dE({}),c=new Set){let d,e,f,g,h,i=(0,bw.w8)(a),j=dz[b.level],k=(d=`${a??""}`.toLowerCase(),e=(0,bw.w8)(a),f=35,e.reasoning&&(f+=18),!0===e.supportsVision&&(f+=3),e.toolCalling&&(f+=3),(g=e.contextWindow??0)>=1e6?f+=22:g>=4e5?f+=15:g>=2e5?f+=9:g>0&&g<=32e3&&(f-=10),(h=e.maxOutputTokens??0)>=128e3?f+=12:h>=64e3?f+=8:h>0&&h<=8192&&(f-=8),/\b(opus|mythos|gpt-5|o3|o4|pro|max|ultra|deepseek-v4-pro|sonnet-4|glm-5|kimi-k2\.7|minimax-m3|reasoner)\b/i.test(d)&&(f+=28),/\b(coder|code|coding)\b/i.test(d)&&(f+=8),/\b(haiku|flash|mini|lite|small|nano|instant|fast|turbo|3\.5|8b|7b)\b/i.test(d)&&(f-=24),Math.max(0,Math.min(150,f))),l=100-Math.abs(k-j);for(let a of c)dF.has(a)&&"vision"===a&&!0!==i.supportsVision&&(l-=1e4);(c.has("reasoning")||b.weight>=dy.heavy)&&!i.reasoning&&(l-=120),c.has("search")&&!i.toolCalling&&(l-=30);let m=Math.ceil((b.promptChars??0)/4),n=i.contextWindow??0;n>0&&m>.85*n&&(l-=200);let o=i.maxOutputTokens??0;return o>0&&b.outputTokens>0&&b.outputTokens>o&&(l-=80),"light"===b.level&&k>95&&(l-=35),"standard"===b.level&&k>125&&(l-=10),"heavy"===b.level&&k<65&&(l-=60),"critical"===b.level&&k<85&&(l-=100),l}(a.modelStr,b,c)})).sort((a,b)=>b.score-a.score||a.i-b.i).map(a=>a.t);return d.every((b,c)=>b===a[c])?a:d}(aF,b),e=aG?aF[0]:void 0,f=e?[e,...d.filter(a=>a!==e)]:d;if(f[0]?.modelStr!==aF[0]?.modelStr){let a=Array.isArray(b.reasons)&&b.reasons.length>0?` (${b.reasons.join(",")})`:"";h.info("COMBO",`task-route task=${b.level}${a} cacheKey=${c??"none"} → ${f[0]?.modelStr}`)}aF=f}let aK="priority"===u?await dt(aF,g).catch(()=>new Map):new Map;if(0===aF.length)return bO("Combo has no executable targets");c6(b,P,a,c3(b,P,j),f,g,u,h);let aL=aF.map(a=>a.executionKey).filter(Boolean),aM=0,aR="quota-share"===u&&y.comboCooldownWait.enabled,aS=0,aW=y.comboCooldownWait.budgetMs,a3="quota-share"===u&&y.quotaShareConcurrencyLimit.enabled,a4=async()=>{for(let f=0;f<=ad;f++){let j=new Set,k=new Set,n=new Set;if(f>0&&(h.info("COMBO",`All targets failed — retrying set (${f}/${ad})`),await new Promise(a=>{let b=setTimeout(a,at);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during set retry delay — aborting"),(0,e.yj)(499,"Client disconnected");let o=null,p=null,q=null,r=Date.now(),s=0,x=0,z=null,A=new Promise(a=>{z=a}),B=new Set,C=!1,G=new Map,K=!0===P.zeroLatencyOptimizationsEnabled,L=async f=>{var z,A,B,C,L,Q,U;let Z=aF[f],$=Z.modelStr,_=(0,af.parseModel)($).model||$,ad=Z.provider;if("OPEN"===(0,ae.qF)(ad).getStatus().state)return h.info("COMBO",`Skipping ${$} — circuit breaker OPEN for ${ad}`),f>0&&s++,null;if(y.providerCooldown.enabled&&ad&&"unknown"!==ad&&cb(ad,Z.connectionId??void 0,y))return h.info("COMBO",`Skipping ${$} — provider ${ad} in global cooldown`),f>0&&s++,null;let ag=aK.get(Z.executionKey),ah=ag?.profile??await (0,d.LN)(ad),ai=ad&&"unknown"!==ad&&n.has(ad)?{...Z,allowRateLimitedConnection:!0,modelAbortSignal:G.get(f).signal}:{...Z,modelAbortSignal:G.get(f).signal},aj=bL(Z,j,k);if(aj)return h.info("COMBO",aj),f>0&&s++,null;if(ad&&_&&(0,d.qw)(ad,Z.connectionId||"",_))return h.info("COMBO",`Skipping ${$} — model locked by resilience (cooldown active)`),f>0&&s++,null;if(g&&!await g($,ai))return h.debug?.("COMBO",`Skipping ${$} — no credentials available or model excluded`),f>0&&s++,null;let ak=Z.connectionId;if(ak){let a=(Q=ak,U=$,{allowed:!1,reason:`Credential gate: ${U} — connection ${Q} has known-bad credentials (skipping)`});if(!1===a.allowed)return z=a.reason||"Credential gate blocked",h?.info&&h.info("CREDENTIAL_GATE",z),f>0&&s++,null}for(let g=0;g<=aa;g++){if(m?.aborted)return h.info("COMBO",`Client disconnected — aborting combo loop before model ${$}`),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};if(++aM>30)return h.warn("COMBO","Maximum combo attempts (30) exceeded across all targets and fallbacks. Terminating loop to prevent runaway background requests."),{ok:!1,response:(0,e.yj)(503,"Maximum combo retry limit reached")};if(K&&P.predictiveTtftMs&&P.predictiveTtftMs>0&&0===g){let a=v(b.name);if(a){let b=aF[f].executionKey||$,c=a.byTarget[b]||a.byModel[$];if(A=P.predictiveTtftMs,c&&A>0&&(c.requests??0)>=5&&(c.avgLatencyMs??0)>A){h.warn("COMBO",`Predictive TTFT Circuit Breaker: skipping ${$} (avg ${c.avgLatencyMs}ms > max ${P.predictiveTtftMs}ms)`);break}}}if(g>0&&(h.info("COMBO",`Retrying ${$} in ${ab}ms (attempt ${g+1}/${aa+1})`),await new Promise(a=>{let b=setTimeout(a,ab);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during retry delay — aborting"),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};h.info("COMBO",`Trying model ${f+1}/${aF.length}: ${$}${g>0?` (retry ${g})`:""}`),(0,a$.I)("combo.target.attempt",{comboName:b.name,targetIndex:f,provider:ad,model:$,timestamp:Date.now(),strategy:u});let z=structuredClone(a);if(K&&f>0&&P.fallbackCompressionMode&&"off"!==P.fallbackCompressionMode){let{estimateTokens:a}=await Promise.resolve().then(c.bind(c,14720)),b=a(JSON.stringify(z));if(b>(P.fallbackCompressionThreshold??1e3)){let{applyCompression:a}=await Promise.all([c.e(1041),c.e(4036),c.e(2851)]).then(c.bind(c,14036)),d=a(z,P.fallbackCompressionMode,{model:$,bailout:{enabled:!0,minGainPercent:0}});d.compressed&&(h.info("COMBO",`Proactive fallback compression applied (${P.fallbackCompressionMode}): ${b} -> ${d.stats?.compressedTokens} tokens`),z=d.body)}}if(H.enabled&&l?.sessionId&&!a?.[M]){let a=E(l.sessionId,b.name);a&&a!==$&&(z=function(a,b,c,d,e){let f=function(a,b,c,d){let e=T(a),f=T(b),g=T(c);if(!d||!d.summary)return`<context_handoff>
|
|
19
|
+
`;return new Response(g({role:"assistant",content:f},null)+g({},"stop")+"data: [DONE]\n\n",{status:200,headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache",Connection:"keep-alive"}})}(c,a)}catch(b){let a=b instanceof Error?b.message:"";"PIPELINE_DISABLED"===a?h.info("COMBO","Pipeline disabled, falling through to standard auto routing"):"PIPELINE_TOKEN_THRESHOLD"===a?h.info("COMBO","Pipeline skipped (prompt below token threshold), falling through to standard auto routing"):h.warn("COMBO","Pipeline dispatch failed, falling through to standard auto routing",{err:b})}}let aK=!1;if("auto"===I){var aL,aM,aR;let d,f,g,j,m,n=Array.isArray(a?.tools)&&a.tools.length>0,o=[...aJ];if(n){let a=o.filter(a=>(0,bw.P5)(a.modelStr));a.length>0?o=a:h.warn("COMBO","Auto strategy: all candidates filtered by tool-calling policy, falling back to full pool")}let q=a.messages,s=(0,G.estimateTokens)("string"==typeof q||null!==q&&"object"==typeof q?q:[]);if(s>0){let a=o.filter(a=>{let b=cY(a.modelStr);return null==b||b>=s});a.length>0?(h.debug?.("COMBO",`Auto strategy: context-window filter kept ${a.length}/${o.length} candidates (est. ${s} tokens)`),o=a):h.warn("COMBO",`Auto strategy: all candidates filtered by context-window policy (est. ${s} tokens), falling back to full pool`),o=await aZ(o,b)}let t=function(a){if(!a||"object"!=typeof a)return"";let b=Array.isArray(a.messages)?[...a.messages].reverse().find(a=>ak(a)&&"user"===a.role):null;if(ak(b)){var c;return"string"==typeof(c=b.content)?c:Array.isArray(c)?c.map(a=>ak(a)&&"string"==typeof a.text?a.text:"").join("\n"):""}if("string"==typeof a.input)return a.input;if(Array.isArray(a.input)){let b=a.input.map(a=>ak(a)?"string"==typeof a.content?a.content:"string"==typeof a.text?a.text:"":"").filter(Boolean).join("\n");if(b)return b}return"string"==typeof a.prompt?a.prompt:""}(a),u="string"==typeof b?.system_message?b.system_message:void 0,v=function(a,b,c){if(!b.enabled)return"medium";let d=`${c??""} ${a}`.toLowerCase(),e=a.trim().split(/\s+/).length,f=b.simpleMaxWords??60,g=[...an,...b.extraCodeKeywords??[]],h=[...ap,...b.extraMathKeywords??[]],i=[...ao,...b.extraReasoningKeywords??[]],j=[...aq,...b.extraCreativeKeywords??[]],k=[...ar,...b.extraSimpleKeywords??[]];for(let a of g)if(d.includes(a.toLowerCase()))return"code";for(let a of h)if(d.includes(a.toLowerCase()))return"math";for(let a of i)if(d.includes(a.toLowerCase()))return"reasoning";for(let a of j)if(d.includes(a.toLowerCase()))return"creative";if(e<f){for(let a of k)if(d.includes(a.toLowerCase()))return"simple"}return"medium"}(t,(aM=b,f=i||{},g=aM?.autoConfig||{},j=ak(aM?.config?.auto)?aM.config.auto:{},m=ak(g.intentConfig)&&g.intentConfig||ak(j.intentConfig)&&j.intentConfig||ak(aM?.config?.intentConfig)&&aM.config.intentConfig||{},{...as,...m,..."boolean"==typeof f.intentDetectionEnabled?{enabled:f.intentDetectionEnabled}:{},...Number.isFinite(Number(f.intentSimpleMaxWords))?{simpleMaxWords:Number(f.intentSimpleMaxWords)}:{},...aX(f.intentExtraCodeKeywords).length>0?{extraCodeKeywords:aX(f.intentExtraCodeKeywords)}:{},...aX(f.intentExtraReasoningKeywords).length>0?{extraReasoningKeywords:aX(f.intentExtraReasoningKeywords)}:{},...aX(f.intentExtraSimpleKeywords).length>0?{extraSimpleKeywords:aX(f.intentExtraSimpleKeywords)}:{}}),u);!function(a,b){!p.has(a)&&p.size>=500&&r(p,{deletePairedShadow:!0}),p.has(a)||p.set(a,k("priority"));let c=p.get(a);if(!c)return;let d=String(b||"unknown");c.intentCounts[d]=(c.intentCounts[d]||0)+1}(b.name,v);let w=function(a){switch(a){case"code":return"coding";case"reasoning":return"analysis";default:return"default"}}(v),x=b?.autoConfig||(ak(b?.config?.auto)?b.config.auto:null)||b?.config||{},y=ak(x)?x:{},z="string"==typeof y.routerStrategy?y.routerStrategy:"string"==typeof y.routingStrategy?y.routingStrategy:"string"==typeof y.strategyName?y.strategyName:"rules",A=Array.isArray(y.candidatePool)?y.candidatePool:[...new Set(o.map(a=>a.provider))],B=y.weights&&"object"==typeof y.weights?y.weights:aN,C=Number.isFinite(Number(y.explorationRate))?Number(y.explorationRate):.05,D=Number.isFinite(Number(y.budgetCap))?Number(y.budgetCap):void 0,E="string"==typeof y.modePack?y.modePack:void 0,F=dc(y),H=function(a){if(!a)return;let b=ak(a.sla)?a.sla:{},c=c8(a.slaTargetP95Ms??b.targetP95Ms),d=c8(a.slaMaxErrorRate??b.maxErrorRate),e=c8(a.slaMaxCostPer1MTokens??b.maxCostPer1MTokens),f=a.slaHardConstraints??b.hardConstraints,g={};return null!==c&&c>0&&(g.targetP95Ms=c),null!==d&&d>=0&&(g.maxErrorRate=aC(d)),null!==e&&e>0&&(g.maxCostPer1MTokens=e),"boolean"==typeof f&&(g.hardConstraints=f),Object.keys(g).length>0?g:void 0}(y);try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,89718)),e=await a(b.name,b.id||b.name);e&&(d=e.provider)}catch(a){h.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}let I=l?.bypassProviderQuotaPolicy===!0?{...O,quotaPreflight:{...O.quotaPreflight,enabled:!1}}:O,J=await dP(o,b.name,l?.sessionId,F,I),K=J.filter(a=>!0!==a.quotaCutoffBlocked),L=J.length-K.length;for(let a of(L>0&&h.info("COMBO",`Auto strategy: quota cutoff skipped ${L}/${J.length} account candidates`),K)){if(!a.executionKey)continue;let b=aV.get(a.executionKey);b||(b=new Map,aV.set(a.executionKey,b)),b.set(a.stepId,a)}if(J.length>0&&0===K.length)return(0,e.wO)(429,"All auto strategy candidates are below configured quota cutoffs");if(K.length>0){let c,f,g=null,i=null,j="";if("rules"!==z)try{let a=function(a,b,c="rules"){return bp(c).select(a,b)}(K,{taskType:w,requestHasTools:n,lastKnownGoodProvider:d,estimatedInputTokens:s,sla:H},z);g=a.provider,i=a.model,j=a.reason,aK=!0}catch(a){h.warn("COMBO",`Auto strategy '${z}' failed (${a?.message||"unknown"}), falling back to rules`)}if(!g||!i){let a=function(a,b,c="default"){let d,e=(a2||(a2=new a1),a2),f=a.weights;if(a.modePack){let b=a0[a.modePack];b&&(f=b)}.01>Math.abs(Object.values(f).reduce((a,b)=>a+b,0)-1)||(f=aN);let g=[],h=b.filter(b=>(!(a.candidatePool.length>0)||!!a.candidatePool.includes(b.provider))&&(!e.evaluate(b.provider,.5,b.circuitBreakerState).excluded||(g.push(b.provider),!1)));0===h.length&&(h.push(...b),g.length=0);let i=aQ(h,c,f,aA),j=i.filter(a=>!e.evaluate(a.provider,a.score,"CLOSED").excluded||(g.push(a.provider),!1)),k=j.length>0?j:i,l=Math.random()<(e.isInIncidentMode()?0:a.explorationRate)&&k.length>1;if(l){let a=Math.floor(Math.random()*k.length);d=k[a]}else d=a6(a.name).pick(k);if(a.budgetCap){let c=new Map;for(let a of b)c.set(`${a.provider}\0${a.model}`,a.costPer1MTokens);let e=a=>(c.get(`${a.provider}\0${a.model}`)??0)/1e6*1e3;if(e(d)>a.budgetCap){let b=k.filter(b=>e(b)<=a.budgetCap);if(b.length>0)d=a6(`${a.name}#budget`).pick(b);else{let a=[...k].sort((a,b)=>e(a)-e(b))[0];a&&(d=a)}}}return{provider:d.provider,model:d.model,score:d.score,isExploration:l,factors:d.factors,excluded:g,connectionId:d.connectionId}}({id:b.id||b.name,name:b.name,type:"auto",candidatePool:A,weights:B,modePack:E,budgetCap:D,explorationRate:C},K,w);g=a.provider,i=a.model,j=`score=${a.score.toFixed(3)}${a.isExploration?" (exploration)":""}`}let k=!0===U.complexityAwareRouting?function(a,b,c){try{let d,e,f,g,h={messages:Array.isArray(b?.messages)?b.messages:[],tools:Array.isArray(b?.tools)?b.tools:void 0,model:"string"==typeof b?.model?b.model:void 0},i=b4(a,h),j=(d=b1(h),e=b2(d.score),f=Array.isArray(h.tools)&&h.tools.length>0||d.breakdown.toolCalling>0,g=b3(e),f&&(g=b6(g,"cheap")),{score:d.score,level:e,recommendedTier:g,hasToolUse:f,signals:d.rulesTriggered});return i.recommendedMinTier=b6(i.recommendedMinTier,j.recommendedTier),c.info("COMBO",`Complexity-aware routing: level=${j.level} score=${j.score} minTier=${i.recommendedMinTier} tools=${j.hasToolUse}`),i}catch{return null}}(o.filter(a=>"model"===a.kind),a,h):null,l=(c=new Map((aR=o).map(a=>[a.executionKey,a])),(f=K.filter(a=>!0!==a.quotaCutoffBlocked)).map(a=>{let b=c.get(a.executionKey)||aR.find(b=>b.stepId===a.stepId||b.provider===a.provider&&b.modelStr===a.modelStr);if(!b)return null;let d={...b,stepId:a.stepId,executionKey:a.executionKey,modelStr:a.modelStr,provider:a.provider,connectionId:a.connectionId??b.connectionId},e=aO(aP(a,f,w??"general",aA,k??void 0),B);return"quotaSoftPenalty"in a&&!0===a.quotaSoftPenalty&&(e*=aT),"statusPenalty"in a&&!0===a.statusPenalty&&(e*=aU),{target:d,score:e}}).filter(a=>null!==a).sort((a,b)=>b.score-a.score)),m=l.map(a=>a.target),p=l.find(a=>{let b=(0,af.parseModel)(a.target.modelStr).model||a.target.modelStr;return a.target.provider===g&&b===i})?.target||m[0]||o[0];if(!p)return(0,e.wO)(429,"No auto strategy targets remained after quota cutoff filtering");aJ=al([p,...m,...o].filter(a=>null!=a)),h.info("COMBO",`Auto selection: ${p?.modelStr||`${g}/${i}`} | intent=${v} task=${w} | strategy=${z} | ${j}`)}else h.warn("COMBO","Auto strategy has no candidates, keeping default ordering")}else if("lkgp"===I)try{let{getLKGP:a}=await Promise.resolve().then(c.bind(c,89718)),d=await a(b.name,b.id||b.name);if(d){let a=d.provider,c=d.connectionId,e=-1;if(c&&(e=aJ.findIndex(b=>b.provider===a&&b.connectionId===c)),e<0&&(e=aJ.findIndex(b=>b.provider===a||"string"==typeof b.modelStr&&b.modelStr.startsWith(`${a}/`))),e>0){let[d]=aJ.splice(e,1);aJ.unshift(d),h.info("COMBO",`[LKGP] Prioritizing last known good provider ${a}${c?` (account ${c})`:""} for combo "${b.name}"`)}else 0===e&&h.debug?.("COMBO",`[LKGP] Last known good provider ${a}${c?` (account ${c})`:""} already first for combo "${b.name}"`)}}catch(a){h.warn("COMBO","Failed to retrieve Last Known Good Provider. This is non-fatal.",{err:a})}else if("strict-random"===I){let a=await (b.name,aJ.map(a=>a.executionKey),null);aJ=[aJ.find(b=>b.executionKey===a)||null,...void aJ.filter(b=>b.executionKey!==a)].filter(a=>null!==a),h.info("COMBO",`Strict-random deck: ${a} selected (${aJ.length} targets)`)}else if("random"===I)[...aJ],aJ=void 0,h.info("COMBO",`Random shuffle: ${aJ.length} targets`);else if("fill-first"===I)h.info("COMBO",`Fill-first ordering: preserving priority order (${aJ.length} targets)`);else if("p2c"===I)aJ=function(a,b){if(a.length<=1)return a;let c=v(b),d=void a.length,e=void a.length;e>=d&&e++;let f=a[d],g=cP(a[e],c)>cP(f,c)?e:d;return[a[g],...a.filter((a,b)=>b!==g)]}(aJ,b.name),h.info("COMBO",`Power-of-two-choices ordering: selected ${aJ[0]?.modelStr}`);else if("least-used"===I)aJ=function(a,b){let c=function(a,b){let c=v(b);if(!c?.byModel)return a;let d=a.map(a=>({modelStr:a,requests:c.byModel[a]?.requests??0}));return d.sort((a,b)=>a.requests-b.requests),d.map(a=>a.modelStr)}(a.map(a=>a.modelStr),b),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(aJ,b.name),h.info("COMBO",`Least-used ordering: ${aJ[0]?.modelStr} has fewest requests`);else if("cost-optimized"===I){if(aJ=await cO(aJ),!0===U.manifestRouting)try{let b=b4(aJ.filter(a=>"model"===a.kind),{messages:Array.isArray(a?.messages)?a.messages:[],tools:Array.isArray(a?.tools)?a.tools:void 0,model:"string"==typeof a?.model?a.model:void 0});if("require-premium"===b.strategyModifier){let a=aJ.filter(a=>"model"!==a.kind||b.eligibleTargets.some(b=>b.provider===a.provider&&b.modelStr===a.modelStr));a.length>0&&(aJ=a)}h.debug?.({strategyModifier:b.strategyModifier,specificityLevel:b.specificityLevel,score:b.specificity.score},"manifest routing applied")}catch(a){h.warn({err:a},"manifest routing failed, falling back to standard strategy")}h.info("COMBO",`Cost-optimized ordering: cheapest first (${aJ[0]?.modelStr})`)}else if("reset-aware"===I)aJ=await du(aJ,b.name,U,h,n),h.info("COMBO",`Reset-aware ordering: ${aJ[0]?.modelStr}${aJ[0]?.connectionId?` (${aJ[0].connectionId})`:""} first`);else if("reset-window"===I)aJ=await dv(aJ,b.name,U,h,n),h.info("COMBO",`Reset-window ordering: ${aJ[0]?.modelStr}${aJ[0]?.connectionId?` (${aJ[0].connectionId})`:""} first`);else if("context-optimized"===I)aJ=function(a){let b;if(!a.some(a=>null!=cY(a.modelStr)))return a;let c=((b=a.map(a=>a.modelStr).map(a=>({modelStr:a,context:cY(a)??0}))).sort((a,b)=>b.context-a.context),b.map(a=>a.modelStr)),d=new Map;for(let b of a){let a=d.get(b.modelStr)||[];a.push(b),d.set(b.modelStr,a)}return c.map(a=>{let b=d.get(a);return b?.shift()||null}).filter(a=>null!==a)}(aJ),h.info("COMBO",`Context-optimized ordering: largest first (${aJ[0]?.modelStr})`);else if("headroom"===I)aJ=await dx(aJ,b.name,h,n),h.info("COMBO",`Headroom ordering: ${aJ[0]?.modelStr}${aJ[0]?.connectionId?` (${aJ[0].connectionId})`:""} has most free capacity`);else if("quota-share"===I){let c="string"==typeof a?.model?a.model:aJ[0]?.modelStr??"",d=await bT(aJ);aJ=function(a,b,c,d=Date.now(),e){var f,g;let h,i,j,k,l,m;if(0===a.length)return{target:null,orderedTargets:[],decrementInflight:()=>{}};let n=(k=(j=c.indexOf("/"))>=0?c.slice(j+1):c,(l=a.filter(a=>""===(a.connectionId??"")||!0)).length>0?l:a),o=a.filter(a=>!n.includes(a)),{withRoom:p,atCap:q}=function(a,b,c){if(!b||0===b.size)return{withRoom:a,atCap:[]};let d=[],e=[];for(let f of a){let a=f.connectionId??"",g=function(a,b){if(!a||!b)return null;let c=b.get(a);return"number"!=typeof c||!Number.isFinite(c)||c<=0?null:c}(a,b);if(null===g){d.push(f);continue}bG(a,c)>=g?e.push(f):d.push(f)}return 0===d.length?{withRoom:a,atCap:[]}:{withRoom:d,atCap:e}}(n,e?.maxConcurrentByConnection,d),r=function(a,b){if(a.length<=1)return a.slice();let c=function(a){let b=bH.get(a);if(!b){if(bH.size>=200){let a=bH.keys().next().value;void 0!==a&&bH.delete(a)}b=new Map,bH.set(a,b)}return b}(b),d=a.reduce((a,b)=>a+bI(b.weight),0);for(let b of a){let a=bI(b.weight)/d;c.set(b.executionKey,(c.get(b.executionKey)??0)+a)}let e=a[0],f=c.get(e.executionKey)??0;for(let b=1;b<a.length;b++){let d=c.get(a[b].executionKey)??0;d>f&&(f=d,e=a[b])}c.set(e.executionKey,f-1);let g=a.filter(a=>a.executionKey!==e.executionKey);return[e,...g]}(p,b);r.length>=2&&1==(f=r[0],g=r[1],m=bG(f.connectionId??"",d),+(bG(g.connectionId??"",d)<m))?(h=r[1],i=[r[0],...r.slice(2)]):(h=r[0],i=r.slice(1));let s=h.connectionId??"";s&&function(a,b=12e4,c=Date.now()){if(!a)return;var d=c;for(let[a,b]of bF)b.expiresAtMs<=d&&bF.delete(a);let e=bF.get(a),f=(e&&e.expiresAtMs>c?e.count:0)+1;bF.set(a,{count:f,expiresAtMs:c+b})}(s,void 0,d);let t=[h,...i,...q,...o],u=!1;return{target:h,orderedTargets:t,decrementInflight:()=>{!u&&(u=!0,s&&function(a,b=Date.now()){if(!a)return;let c=bF.get(a);if(!c||c.expiresAtMs<=b)return bF.delete(a);let d=Math.max(0,c.count-1);0===d?bF.delete(a):bF.set(a,{count:d,expiresAtMs:c.expiresAtMs})}(s,d))}}}(aJ,b.name,c,Date.now(),{maxConcurrentByConnection:d}).orderedTargets,h.info("COMBO",`Quota-share ordering: ${aJ[0]?.modelStr}${aJ[0]?.connectionId?` (${aJ[0].connectionId})`:""} selected (DRR+P2C)`)}let aS=await bE(aJ,a.messages);if(aJ=c_(aJ=b$(aJ=aS.targets,U.evalRouting,h),a,h),["smart","task","task-aware","task_aware","auto"].includes(String(I??"").toLowerCase())){let b=dE(a),c=function(a){if(!a||"object"!=typeof a)return null;let b=a.metadata,c=[a.conversation_id,a.conversationId,a.thread_id,a.threadId,a.session_id,a.sessionId,b?.conversation_id,b?.conversationId,b?.thread_id,b?.threadId,b?.session_id,b?.sessionId].find(a=>null!=a&&String(a).trim());if(null!=c)return dJ(`explicit:${String(c).trim()}`);let d=new Set(["system","developer"]),e=new Set(["user"]),f=a.contents??a.request?.contents;return dJ([dD(a.system).join("\n"),dD(a.instructions).join("\n"),dI(a.messages??[],d),dI(a.input??[],d),dI(f??[],d,"parts"),dH(a.messages??[],e),"string"==typeof a.input?a.input:dH(a.input??[],e),dH(f??[],e,"parts"),a.query,a.url].filter(Boolean).join("\n"))}(a),d=function(a,b=dE({}),c=new Set){if(!Array.isArray(a)||a.length<=1)return a;let d=a.map((a,d)=>({t:a,i:d,score:function(a,b=dE({}),c=new Set){let d,e,f,g,h,i=(0,bw.w8)(a),j=dz[b.level],k=(d=`${a??""}`.toLowerCase(),e=(0,bw.w8)(a),f=35,e.reasoning&&(f+=18),!0===e.supportsVision&&(f+=3),e.toolCalling&&(f+=3),(g=e.contextWindow??0)>=1e6?f+=22:g>=4e5?f+=15:g>=2e5?f+=9:g>0&&g<=32e3&&(f-=10),(h=e.maxOutputTokens??0)>=128e3?f+=12:h>=64e3?f+=8:h>0&&h<=8192&&(f-=8),/\b(opus|mythos|gpt-5|o3|o4|pro|max|ultra|deepseek-v4-pro|sonnet-4|glm-5|kimi-k2\.7|minimax-m3|reasoner)\b/i.test(d)&&(f+=28),/\b(coder|code|coding)\b/i.test(d)&&(f+=8),/\b(haiku|flash|mini|lite|small|nano|instant|fast|turbo|3\.5|8b|7b)\b/i.test(d)&&(f-=24),Math.max(0,Math.min(150,f))),l=100-Math.abs(k-j);for(let a of c)dF.has(a)&&"vision"===a&&!0!==i.supportsVision&&(l-=1e4);(c.has("reasoning")||b.weight>=dy.heavy)&&!i.reasoning&&(l-=120),c.has("search")&&!i.toolCalling&&(l-=30);let m=Math.ceil((b.promptChars??0)/4),n=i.contextWindow??0;n>0&&m>.85*n&&(l-=200);let o=i.maxOutputTokens??0;return o>0&&b.outputTokens>0&&b.outputTokens>o&&(l-=80),"light"===b.level&&k>95&&(l-=35),"standard"===b.level&&k>125&&(l-=10),"heavy"===b.level&&k<65&&(l-=60),"critical"===b.level&&k<85&&(l-=100),l}(a.modelStr,b,c)})).sort((a,b)=>b.score-a.score||a.i-b.i).map(a=>a.t);return d.every((b,c)=>b===a[c])?a:d}(aJ,b),e=aK?aJ[0]:void 0,f=e?[e,...d.filter(a=>a!==e)]:d;if(f[0]?.modelStr!==aJ[0]?.modelStr){let a=Array.isArray(b.reasons)&&b.reasons.length>0?` (${b.reasons.join(",")})`:"";h.info("COMBO",`task-route task=${b.level}${a} cacheKey=${c??"none"} → ${f[0]?.modelStr}`)}aJ=f}let aW="priority"===I?await dt(aJ,g).catch(()=>new Map):new Map;if(0===aJ.length)return bO("Combo has no executable targets");c6(b,U,a,c3(b,U,j),f,g,I,h);let a3=aJ.map(a=>a.executionKey).filter(Boolean),a4=0,a5="quota-share"===I&&O.comboCooldownWait.enabled,a7=0,a8=O.comboCooldownWait.budgetMs,a9="quota-share"===I&&O.quotaShareConcurrencyLimit.enabled,ba=async()=>{for(let f=0;f<=aw;f++){let j=new Set,k=new Set,n=new Set;if(f>0&&(h.info("COMBO",`All targets failed — retrying set (${f}/${aw})`),await new Promise(a=>{let b=setTimeout(a,ax);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during set retry delay — aborting"),(0,e.yj)(499,"Client disconnected");let o=null,p=null,q=null,r=Date.now(),s=0,u=0,w=null,x=new Promise(a=>{w=a}),y=new Set,z=!1,A=new Map,B=!0===U.zeroLatencyOptimizationsEnabled,C=async f=>{var w,x,y,z,C,G,H;let L=aJ[f],R=L.modelStr,Z=(0,af.parseModel)(R).model||R,aa=L.provider;if("OPEN"===(0,ae.qF)(aa).getStatus().state)return h.info("COMBO",`Skipping ${R} — circuit breaker OPEN for ${aa}`),f>0&&s++,null;if(O.providerCooldown.enabled&&aa&&"unknown"!==aa&&cb(aa,L.connectionId??void 0,O))return h.info("COMBO",`Skipping ${R} — provider ${aa} in global cooldown`),f>0&&s++,null;let ab=aW.get(L.executionKey),ac=ab?.profile??await (0,d.LN)(aa),ad=aa&&"unknown"!==aa&&n.has(aa)?{...L,allowRateLimitedConnection:!0,modelAbortSignal:A.get(f).signal}:{...L,modelAbortSignal:A.get(f).signal},ag=bL(L,j,k);if(ag)return h.info("COMBO",ag),f>0&&s++,null;if(aa&&Z&&(0,d.qw)(aa,L.connectionId||"",Z))return h.info("COMBO",`Skipping ${R} — model locked by resilience (cooldown active)`),f>0&&s++,null;if(g&&!await g(R,ad))return h.debug?.("COMBO",`Skipping ${R} — no credentials available or model excluded`),f>0&&s++,null;let ah=L.connectionId;if(ah){let a=(G=ah,H=R,{allowed:!1,reason:`Credential gate: ${H} — connection ${G} has known-bad credentials (skipping)`});if(!1===a.allowed)return w=a.reason||"Credential gate blocked",h?.info&&h.info("CREDENTIAL_GATE",w),f>0&&s++,null}for(let g=0;g<=at;g++){if(m?.aborted)return h.info("COMBO",`Client disconnected — aborting combo loop before model ${R}`),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};if(++a4>30)return h.warn("COMBO","Maximum combo attempts (30) exceeded across all targets and fallbacks. Terminating loop to prevent runaway background requests."),{ok:!1,response:(0,e.yj)(503,"Maximum combo retry limit reached")};if(B&&U.predictiveTtftMs&&U.predictiveTtftMs>0&&0===g){let a=v(b.name);if(a){let b=aJ[f].executionKey||R,c=a.byTarget[b]||a.byModel[R];if(x=U.predictiveTtftMs,c&&x>0&&(c.requests??0)>=5&&(c.avgLatencyMs??0)>x){h.warn("COMBO",`Predictive TTFT Circuit Breaker: skipping ${R} (avg ${c.avgLatencyMs}ms > max ${U.predictiveTtftMs}ms)`);break}}}if(g>0&&(h.info("COMBO",`Retrying ${R} in ${au}ms (attempt ${g+1}/${at+1})`),await new Promise(a=>{let b=setTimeout(a,au);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during retry delay — aborting"),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};h.info("COMBO",`Trying model ${f+1}/${aJ.length}: ${R}${g>0?` (retry ${g})`:""}`),(0,a$.I)("combo.target.attempt",{comboName:b.name,targetIndex:f,provider:aa,model:R,timestamp:Date.now(),strategy:I});let w=structuredClone(a);if(B&&f>0&&U.fallbackCompressionMode&&"off"!==U.fallbackCompressionMode){let{estimateTokens:a}=await Promise.resolve().then(c.bind(c,14720)),b=a(JSON.stringify(w));if(b>(U.fallbackCompressionThreshold??1e3)){let{applyCompression:a}=await Promise.all([c.e(1041),c.e(4036),c.e(2851)]).then(c.bind(c,14036)),d=a(w,U.fallbackCompressionMode,{model:R,bailout:{enabled:!0,minGainPercent:0}});d.compressed&&(h.info("COMBO",`Proactive fallback compression applied (${U.fallbackCompressionMode}): ${b} -> ${d.stats?.compressedTokens} tokens`),w=d.body)}}if(P.enabled&&l?.sessionId&&!a?.[M]){let a=E(l.sessionId,b.name);a&&a!==R&&(w=function(a,b,c,d,e){let f=function(a,b,c,d){let e=T(a),f=T(b),g=T(c);if(!d||!d.summary)return`<context_handoff>
|
|
20
20
|
<transfer_reason>${g}</transfer_reason>
|
|
21
21
|
<previous_model>${e}</previous_model>
|
|
22
22
|
<current_model>${f}</current_model>
|
|
@@ -38,4 +38,4 @@ Continues conversation transfered from ${e} to ${f}.
|
|
|
38
38
|
The context above contains a concise summary of prior work.
|
|
39
39
|
Continue seamlessly from where the session left off.`}(b,c,d,e);if(Object.prototype.hasOwnProperty.call(a,"input")||Object.prototype.hasOwnProperty.call(a,"instructions")){let b="string"==typeof a.instructions&&a.instructions.trim().length>0?a.instructions:"",c={...a,instructions:b?`${f}
|
|
40
40
|
|
|
41
|
-
${b}`:f};if(Array.isArray(c.messages)&&0===c.messages.length){let{messages:a,...b}=c;return b}return c}let g=Array.isArray(a.messages)?[...a.messages]:[];return{...a,messages:[{role:"system",content:f},...g]}}(z,a,$,`Model routing: ${a} → ${$}`,D(l.sessionId,b.name)))}{let a=z,b=ce(a.max_tokens),c=cf($,a.max_tokens,{enabled:R});null!==b&&null!==c&&(a.max_tokens=c,c!==b&&h.info("COMBO",`Reasoning model ${$}: adjusted max_tokens ${b} -> ${c}`))}let G=await S(z,$,{...ai,effectiveComboStrategy:u,failoverBeforeRetry:P.failoverBeforeRetry});if(G.ok){let e=G.headers?.get("X-OmniRoute-Selected-Connection-Id")||G.headers?.get("x-omniroute-selected-connection-id")||Z.connectionId||"",g=await cs(G,O,h,P.responseValidation);if(!g.valid){if(h.warn("COMBO",`Model ${$} returned 200 but failed quality check: ${g.reason}`),t(b.name,$,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:u,target:bR(Z)}),x++,o=`Upstream response failed quality validation: ${g.reason}`,q||(q=502),f>0&&s++,ad&&_){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(502)&&(0,d.E$)(ad,Z.connectionId||"",_,"quality_failure",502,a.baseCooldownMs,ah,{exactCooldownMs:a.useExponentialBackoff?0:a.baseCooldownMs,maxCooldownMs:a.maxCooldownMs})}return(0,a$.I)("combo.target.failed",{comboName:b.name,targetIndex:f,provider:ad,model:$,error:`Quality: ${g.reason}`,latencyMs:Date.now()-r}),null}if(ad&&_){let a=(0,d.lB)(ad,e,_);a.cleared?h.info("COMBO",`Model ${$} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug("COMBO",`Model ${$} decayed to failureCount=${a.newFailureCount}`)}let j=Date.now()-r;if((0,a$.I)("combo.target.succeeded",{comboName:b.name,targetIndex:f,provider:ad,model:$,latencyMs:j}),h.info("COMBO",`Model ${$} succeeded (${j}ms, ${s} fallbacks)`),t(b.name,$,{success:!0,latencyMs:j,fallbackCount:s,strategy:u,target:bR(Z)}),x++,ad&&"unknown"!==ad&&cc(ad,e||void 0),"weighted"===u&&ax>1){let a=aE(Z);a&&cn(b.name,a,ax)}if(a_("request.completed",{combo:b.name,provider:ad,model:$,account:"string"==typeof Z.label&&Z.label.trim().length>0?Z.label.trim():"",accountId:e??"",latencyMs:j,fallbackCount:s}),b.context_cache_protection&&I&&!a?.[M]&&F(I,b.name,$,ad,Z.connectionId??void 0),H.enabled&&l?.sessionId&&!a?.[M]){let c=E(l.sessionId,b.name);if(F(l.sessionId,b.name,$,ad,Z.connectionId??void 0),c&&c!==$){let d=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if("generate"!==function(a){if(!a.universalConfig.enabled||!a.previousModel||a.previousModel===a.currentModel)return"skip";if(a.sessionId){let b=D(a.sessionId,a.comboName);if(b&&b.summary)return"inject"}return"generate"}({sessionId:a.sessionId,comboName:a.comboName,previousModel:a.prevModel,currentModel:a.currModel,universalConfig:a.universalConfig})||!a.sessionId)return;let d=(b=a.sessionId,c=a.comboName,`${b}::${c}`);if(J.has(d))return;J.add(d);let e=60*(a.universalConfig.ttlMinutes||300)*1e3;setImmediate(()=>{W({sessionId:a.sessionId,comboName:a.comboName,messages:a.messages,prevModel:a.prevModel||"unknown",currModel:a.currModel,handoffModel:a.universalConfig.handoffModel||a.currModel,ttlMs:e,maxMessages:a.universalConfig.maxMessagesForSummary,providerAllowlist:a.universalConfig.providerAllowlist,handleSingleModel:a.handleSingleModel}).catch(a=>{console.warn("[universal-handoff] Generation failed:",a?.message||a)}).finally(()=>{J.delete(d)})})}({sessionId:l.sessionId,comboName:b.name,messages:d,prevModel:c,currModel:$,universalConfig:H,handleSingleModel:S})}F(l.sessionId,b.name,$,ad,Z.connectionId??void 0)}if("context-relay"===u&&l?.sessionId&&w&&w.handoffProviders.includes(ad)&&"codex"===ad){let c=(0,bx.bb)(l.sessionId);if(c){let d=await (0,Y.GF)(c).catch(()=>null);if(d){let e=[d.windows?.session?.resetAt,d.windows?.weekly?.resetAt,d.resetAt].filter(a=>"string"==typeof a&&a.length>0).sort((a,b)=>a.localeCompare(b)),f=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if(!a.sessionId||!a.connectionId)return;let d=N(a.config);if(0===d.handoffProviders.length||a.percentUsed<d.handoffThreshold||a.percentUsed>=.95)return;a.sessionId,a.comboName;let e=(b=a.sessionId,c=a.comboName,`${b}::${c}`);J.has(e)||(J.add(e),setImmediate(()=>{V({...a,sessionId:a.sessionId,connectionId:a.connectionId,config:d}).catch(a=>{console.warn("[context-relay] Handoff generation failed:",a?.message||a)}).finally(()=>{J.delete(e)})}))}({sessionId:l.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:$,expiresAt:e[0]||null,config:w,handleSingleModel:S})}}}if(aJ.messageHash&&Z.connectionId&&bD(aJ.messageHash,Z.connectionId),ad){let a=e||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,Z.executionKey,ad,a),d(b.name,b.id||b.name,ad,a)])}catch(a){h.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return{ok:!0,response:g.clonedResponse??G}}let Q=G.statusText||"",U=null,ae=null;try{let a=G.clone();try{let b=await a.text();if(b){Q=b.substring(0,500),U=JSON.parse(b);let a=U?.error;Q="object"==typeof a&&a?.message||("string"==typeof a?a:null)||U?.message||Q,ae=U?.retryAfter||null}}catch{}}catch{}if(ae&&(!p||new Date(ae)<new Date(p))&&(p=ae),"string"!=typeof Q)try{Q=JSON.stringify(Q)}catch{Q=String(Q)}let af=(502===G.status||504===G.status)&&bP(U),ag=429===G.status&&bQ(U);if(499===G.status)return h.info("COMBO",`Client disconnected (499) during ${$} — stopping combo loop`),t(b.name,$,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:u,target:bR(Z)}),x++,{ok:!1,response:G};let aj=U?.error,ak=aj&&"object"==typeof aj?{code:void 0!==aj.code&&null!==aj.code?String(aj.code):void 0,type:void 0!==aj.type&&null!==aj.type?String(aj.type):void 0}:void 0,al=(0,d.hk)(G.status,Q,0,null,ad,G.headers,ah,ak),{cooldownMs:am}=al,an=G.headers?.get("X-OmniRoute-Selected-Connection-Id")||G.headers?.get("x-omniroute-selected-connection-id")||void 0,ao=an?{...Z,connectionId:an}:Z,ap=cA(ao,{result:G,fallbackResult:al,errorText:Q,rawModel:_,isTokenLimitBreach:ag,allAccountsRateLimited:!1,sets:{exhaustedProviders:j,exhaustedConnections:k,transientRateLimitedProviders:n},log:h,tag:"COMBO",exhaustedLogLevel:"info",structuredError:ak});if(400===G.status&&al.shouldFallback&&(B=Q,!(/\bcontext.*(?:length_exceeded|too long|overflow|exceeded|window|limit)\b/i.test(B)||/exceeds.*context/i.test(B)||/your input exceeds/i.test(B)))&&(C=Q,!(/\bmax_tokens\b.*(?:illegal|must|range|invalid)/i.test(C)||/\bparameter is illegal\b/i.test(C)||/\bis illegal.*range\b/i.test(C)))&&(Q.toLowerCase().includes("context")||Q.toLowerCase().includes("prompt")||Q.toLowerCase().includes("token")||Q.toLowerCase().includes("malformed")||Q.toLowerCase().includes("invalid")||Q.toLowerCase().includes("bad request")))return h.warn("COMBO",`400 Bad Request with body-specific error detected on ${$} — skipping fallback to other targets to prevent infinite loop`),t(b.name,$,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:u,target:bR(Z)}),x++,o=Q||String(G.status),q||(q=G.status),f>0&&s++,h.warn("COMBO",`Model ${$} failed with body-specific error, stopping combo`),{ok:!1,response:G};let aq=aF[f+1],ar="string"==typeof aq?.provider&&aq.provider===ad;!(L={isStreamReadinessFailure:af,status:G.status,sameProviderNext:ar,skipProviderBreaker:al.skipProviderBreaker}).isStreamReadinessFailure&&(0,d.v6)(L.status)&&!L.sameProviderNext&&!L.skipProviderBreaker&&(0,d.p8)(ad,h,ao.connectionId,ah);let as=!af&&!ag&&[408,429,500,502,503,504].includes(G.status);if(g<aa&&as&&!ap){let a=!1;if(ad&&_&&0===g){let b=(0,X.Sy)(i);b.enabled&&b.errorCodes.includes(G.status)&&((0,d.E$)(ad,ao.connectionId||"",_,(0,d.M$)(G.status),G.status,b.baseCooldownMs,ah,{exactCooldownMs:(0,d.pX)(am,b),maxCooldownMs:b.maxCooldownMs}),a=!0)}if(a)return h.info("COMBO",`Skipping retry for ${$} — model lockout active`),f>0&&s++,null;continue}if(t(b.name,$,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:u,target:bR(Z)}),x++,o=Q||String(G.status),q||(q=G.status),f>0&&s++,ad&&_){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(G.status)&&(0,d.E$)(ad,ao.connectionId||"",_,(0,d.M$)(G.status),G.status,a.baseCooldownMs,ah,{exactCooldownMs:(0,d.pX)(am,a),maxCooldownMs:a.maxCooldownMs})}h.warn("COMBO",`Model ${$} failed, trying next`,{status:G.status}),y.providerCooldown.enabled&&ad&&"unknown"!==ad&&ca(ad,ao.connectionId??void 0,y);let at=ac>0&&am>0&&am<=5e3?Math.min(am,ac):0;if([502,503,504].includes(G.status)&&at>0&&(h.debug?.("COMBO",`Waiting ${at}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,at);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during fallback wait — aborting"),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};break}return null};for(let a=0;a<aF.length&&!C;a++){let b=new AbortController;G.set(a,b);let c=()=>b.abort();m?.addEventListener("abort",c);let d=(async()=>{try{let b=await L(a);if(b&&!C)if(b.ok)for(let[c,d]of(C=!0,z(b.response),G.entries()))c!==a&&d.abort();else b.response&&(C=!0,z(b.response))}finally{m?.removeEventListener("abort",c)}})().catch(b=>{(h.error??h.warn)("COMBO",`Speculative task error for target ${a}`,b)});if(B.add(d),d.finally(()=>B.delete(d)),K&&P.hedging&&a+1<aF.length){let a=bN(P.hedgeDelayMs,500),b=new Promise(b=>{setTimeout(b,a)});await Promise.race([d,A,b])}else await Promise.race([d,A])}if(!C&&B.size>0&&await Promise.race([A,Promise.all([...B])]),C)return await A;let Q=Date.now()-r;if(0===x&&t(b.name,null,{success:!1,latencyMs:Q,fallbackCount:s,strategy:u}),f<ad)continue;if(!q)return a_("request.failed",{combo:b.name,reason:"ALL_ACCOUNTS_INACTIVE",latencyMs:Q,fallbackCount:s}),new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let U=q,Z=o||"All combo models unavailable";if(p){if(aR&&429===U){let a=function(a){let{targets:b,earliestRetryAfter:c,attempt:d,budgetLeftMs:e,settings:f,lookupLock:g,computeWaitMs:h}=a;if(!f.enabled)return{wait:!1,waitMs:0,reason:null};let i=null;for(let a of b){let b="string"==typeof a.provider?a.provider:"";if(!b)continue;let c=g(b,"string"==typeof a.connectionId?a.connectionId:"");if(!c)continue;let d="number"==typeof c.remainingMs&&Number.isFinite(c.remainingMs)?c.remainingMs:0;d<=0||(!i||d<i.remainingMs)&&(i={reason:c.reason,remainingMs:d})}if(!i)return{wait:!1,waitMs:0,reason:null};let j=h(c),k="number"==typeof j&&Number.isFinite(j)&&j>0?j:0,l=Math.max(i.remainingMs,k)+50;return{...function(a){var b;let{reason:c,attempt:d,budgetLeftMs:e,settings:f}=a,g="number"==typeof(b=a.waitMs)&&Number.isFinite(b)&&b>0?b:0;return{wait:!0===f.enabled&&!("string"!=typeof c||0===c.length||ct.has(c))&&cu.has(c)&&g>0&&g<=f.maxWaitMs&&d<f.maxAttempts&&e>=g,waitMs:g}}({reason:i.reason,waitMs:l,attempt:d,budgetLeftMs:e,settings:f}),reason:"string"==typeof i.reason?i.reason:null}}({targets:aF,earliestRetryAfter:p,attempt:aS,budgetLeftMs:aW,settings:y.comboCooldownWait,lookupLock:(a,b)=>{let c=(0,af.parseModel)(aF[0]?.modelStr??"").model||"";return(0,d.ls)(a,b,c)},computeWaitMs:a=>cv(a).waitMs});if(a.wait){if(h.info("COMBO",`Quota-share cooldown wait: ${Z} — waiting ${Math.ceil(a.waitMs/1e3)}s (reason=${a.reason??"?"}) then retrying (attempt ${aS+1}/${y.comboCooldownWait.maxAttempts})`),!await cw(a.waitMs,m))return h.info("COMBO","Quota-share cooldown wait aborted by client disconnect"),(0,e.yj)(499,"Request aborted");return aS+=1,aW=Math.max(0,aW-a.waitMs),a4()}}let a=(0,d.Qo)(cr(p));return h.warn("COMBO",`All models failed | ${Z} (${a})`),(0,e.wO)(U,Z,p,a)}return h.warn("COMBO",`All models failed | ${Z}`),new Response(JSON.stringify({error:{message:Z}}),{status:U,headers:{"Content-Type":"application/json"}})}return(0,e.yj)(503,"Combo routing completed without an upstream response")},a5=null,a7=aF[0]?.connectionId;if(a3&&a7){let a=await bS(a7);a5=await bU(aF[0],a,{queueTimeoutMs:P.queueTimeoutMs??3e4,maxQueueSize:B(P)},h)}try{return await a4()}finally{a5?.();for(let a of aL)aV.delete(a)}}async function dT({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:k}){var l;let m,n=i?C(b,i):{...x,...b.config||{}},o=(l=n.concurrencyPerModel??3,m=new Map,async a=>{var b;if(!a)return l;let c=m.get(a);return void 0===c&&(c=await bS(a),m.set(a,c)),"number"==typeof(b=c)&&Number.isFinite(b)&&b>0?Math.floor(b):l}),p=n.queueTimeoutMs??3e4,q=B(n),r=n.maxRetries??1,s=bN(n.retryDelayMs,2e3),u=bN(n.fallbackDelayMs,0),v=!1!==n.reasoningTokenBufferEnabled,w=i?(0,ai.xv)(i):(0,ai.xv)(null),y=c0(await cK(b),j?Array.isArray(j)?await cL(j):{...j,combos:await cL(j.combos||[])}:j,bM(n.maxComboDepth)),z=c_(b$(await aY(y,a,h),n.evalRouting,h),a,h,"Context-aware round-robin fallback"),A=z.length;if(0===A)return bO("Round-robin combo has no executable targets");c6(b,n,a,c3(b,n,j),f,g,"round-robin",h);let D=n.stickyRoundRobinLimit,E=cj(null!=D?D:i?.stickyRoundRobinLimit),F=E>1;if(F){let a=ch.get(b.name);if(a){let c=z.find(b=>b.executionKey===a.executionKey);if(c){let a=(0,af.parseModel)(c.modelStr).model||c.modelStr;(!c.provider||"OPEN"!==(0,ae.qF)(c.provider).getStatus().state)&&!(w.providerCooldown.enabled&&c.provider&&"unknown"!==c.provider&&cb(c.provider,c.connectionId??void 0,w))&&!(c.provider&&a&&(0,d.qw)(c.provider,c.connectionId||"",a))&&(!g||await g(c.modelStr,c))||(h.info("COMBO-RR",`Clearing stale sticky target ${c.modelStr} — unavailable`),ch.delete(b.name))}}}if(!cg.has(b.name)&&!ch.has(b.name)&&cg.size>=500){let a=cg.keys().next().value;void 0!==a&&(cg.delete(a),ch.delete(a))}cg.has(b.name)||cg.set(b.name,0);let{startIndex:G,counter:H}=ck(b.name,z,E);F||cg.set(b.name,H+1);let I=await bE(z,a?.messages),J=G;if(I.stuck){let a=z.findIndex(a=>a.connectionId===I.targets[0]?.connectionId);a>=0&&(J=a)}let K=a?.stream===!0,L=Date.now(),M=null,N=null,O=null,P=0,Q=0,R=0,S=new Set,T=new Set,U=new Set;for(let i=0;i<A;i++){let j,l=z[(J+i)%A],m=l.modelStr,x=l.provider,y=await (0,d.LN)(x),B=`combo:${b.name}:${l.executionKey}`,C=x&&"unknown"!==x&&U.has(x)?{...l,allowRateLimitedConnection:!0}:l;if(g&&!await g(m,C)){h.debug?.("COMBO-RR",`Skipping ${m} — no credentials available or model excluded`),i>0&&Q++;continue}if(w.providerCooldown.enabled&&x&&"unknown"!==x&&cb(x,l.connectionId,w)){h.info("COMBO-RR",`Skipping ${m} — provider ${x} in global cooldown`),i>0&&Q++;continue}let D=bL(l,S,T);if(D){h.info("COMBO-RR",D),i>0&&Q++;continue}let G=await o(l.connectionId);try{j=await ad(B,{maxConcurrency:G,timeoutMs:p,maxQueueSize:q})}catch(b){let a=ak(b)&&"string"==typeof b.code?b.code:null;if("SEMAPHORE_TIMEOUT"===a||"SEMAPHORE_QUEUE_FULL"===a){h.warn("COMBO-RR",`Semaphore ${"SEMAPHORE_QUEUE_FULL"===a?"queue full":"timeout"} for ${m}, trying next model`),i>0&&Q++;continue}throw b}try{for(let g=0;g<=r;g++){if(++P>30)return h.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");g>0&&(h.info("COMBO-RR",`Retrying ${m} in ${s}ms (attempt ${g+1}/${r+1})`),await new Promise(a=>setTimeout(a,s))),h.info("COMBO-RR",`[RR #${H}] → ${m}${i>0?` (fallback +${i})`:""}${g>0?` (retry ${g})`:""}`);let j=a;{let b=ce(a.max_tokens),c=cf(m,a.max_tokens,{enabled:v});null!==b&&null!==c&&c!==b&&(j={...a,max_tokens:c},h.info("COMBO-RR",`Reasoning model ${m}: adjusted max_tokens ${b} -> ${c}`))}let o=await f(j,m,{...C,effectiveComboStrategy:"round-robin",failoverBeforeRetry:n.failoverBeforeRetry});if(o.ok){let a=await cs(o,K,h,n.responseValidation);if(!a.valid){h.warn("COMBO-RR",`${m} returned 200 but failed quality check: ${a.reason}`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=`Upstream response failed quality validation: ${a.reason}`,N||(N=502),i>0&&Q++;break}let e=Date.now()-L;h.info("COMBO-RR",`${m} succeeded (${e}ms, ${Q} fallbacks)`),t(b.name,m,{success:!0,latencyMs:e,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++;let f=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||l.connectionId||"",g=(0,af.parseModel)(m).model||m;if(x&&g){let a=(0,d.lB)(x,f,g);a.cleared?h.info("COMBO-RR",`Model ${m} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug?.("COMBO-RR",`Model ${m} decayed to failureCount=${a.newFailureCount}`)}if(x&&"unknown"!==x&&cc(x,f||void 0),F&&cl(b.name,l,E,z),I.messageHash){let a=f||l.connectionId;a&&bD(I.messageHash,a)}if(x){let a=f||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,l.executionKey,x,a),d(b.name,b.id||b.name,x,a)])}catch(a){h.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return a.clonedResponse??o}let p=o.statusText||"",q=null,A=null;try{let a=o.clone();try{let b=await a.text();if(b){p=b.substring(0,500),A=JSON.parse(b);let a=A?.error;p="object"==typeof a&&a?.message||("string"==typeof a?a:null)||A?.message||p,q=A?.retryAfter||null}}catch{}}catch{}if(499===o.status)return h.info("COMBO-RR",`Client disconnected (499) during ${m} — stopping combo loop`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,o;if(q&&(!O||new Date(q)<new Date(O))&&(O=q),"string"!=typeof p)try{p=JSON.stringify(p)}catch{p=String(p)}let D=(502===o.status||504===o.status)&&bP(A),G=429===o.status&&bQ(A),J=A?.error,V=J&&"object"==typeof J?{code:void 0!==J.code&&null!==J.code?String(J.code):void 0,type:void 0!==J.type&&null!==J.type?String(J.type):void 0}:void 0,W=(0,d.hk)(o.status,p,0,null,x,o.headers,y,V),{cooldownMs:X}=W,Y=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||void 0,Z=Y?{...l,connectionId:Y}:l,$=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&bK.some(a=>a.test(c))}(o.status,o.headers?.get("content-type")??null,p),aa=cA(Z,{result:o,fallbackResult:W,errorText:p,rawModel:(0,af.parseModel)(m).model||m,isTokenLimitBreach:G,allAccountsRateLimited:$,sets:{exhaustedProviders:S,exhaustedConnections:T,transientRateLimitedProviders:U},log:h,tag:"COMBO-RR",exhaustedLogLevel:"debug",structuredError:V});!D&&!G&&bJ.includes(o.status)&&X>0&&(!function(a,b){let c=_(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,ab(a))},b+50)}(B,X),h.warn("COMBO-RR",`${m} error ${o.status}, cooldown ${X}ms`)),$&&h.info("COMBO-RR",`All accounts rate-limited for ${m}, falling back to next model`);let ac=!D&&!G&&[408,429,500,502,503,504].includes(o.status);if(g<r&&ac&&!aa)continue;t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=p||String(o.status),N||(N=o.status),i>0&&Q++,h.warn("COMBO-RR",`${m} failed, trying next model`,{status:o.status}),w.providerCooldown.enabled&&x&&"unknown"!==x&&ca(x,Z.connectionId??void 0,w);let ad=u>0&&X>0&&X<=5e3?Math.min(X,u):0;if([502,503,504].includes(o.status)&&ad>0&&(h.debug?.("COMBO-RR",`Waiting ${ad}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,ad);k?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),k?.aborted))return h.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{j()}}let V=Date.now()-L;if(0===R&&t(b.name,null,{success:!1,latencyMs:V,fallbackCount:Q,strategy:"round-robin"}),!N)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let W=N,X=M||"All round-robin combo models unavailable";if(O){let a=(0,d.Qo)(cr(O));return h.warn("COMBO-RR",`All models failed | ${X} (${a})`),(0,e.wO)(W,X,O,a)}return h.warn("COMBO-RR",`All models failed | ${X}`),new Response(JSON.stringify({error:{message:X}}),{status:W,headers:{"Content-Type":"application/json"}})}let dU=new Map;function dV(a){a?dU.delete(a):dU.clear()}}};
|
|
41
|
+
${b}`:f};if(Array.isArray(c.messages)&&0===c.messages.length){let{messages:a,...b}=c;return b}return c}let g=Array.isArray(a.messages)?[...a.messages]:[];return{...a,messages:[{role:"system",content:f},...g]}}(w,a,R,`Model routing: ${a} → ${R}`,D(l.sessionId,b.name)))}{let a=w,b=ce(a.max_tokens),c=cf(R,a.max_tokens,{enabled:$});null!==b&&null!==c&&(a.max_tokens=c,c!==b&&h.info("COMBO",`Reasoning model ${R}: adjusted max_tokens ${b} -> ${c}`))}let A=await _(w,R,{...ad,effectiveComboStrategy:I,failoverBeforeRetry:U.failoverBeforeRetry});if(A.ok){let e=A.headers?.get("X-OmniRoute-Selected-Connection-Id")||A.headers?.get("x-omniroute-selected-connection-id")||L.connectionId||"",g=await cs(A,S,h,U.responseValidation);if(!g.valid){if(h.warn("COMBO",`Model ${R} returned 200 but failed quality check: ${g.reason}`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=`Upstream response failed quality validation: ${g.reason}`,q||(q=502),f>0&&s++,aa&&Z){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(502)&&(0,d.E$)(aa,L.connectionId||"",Z,"quality_failure",502,a.baseCooldownMs,ac,{exactCooldownMs:a.useExponentialBackoff?0:a.baseCooldownMs,maxCooldownMs:a.maxCooldownMs})}return(0,a$.I)("combo.target.failed",{comboName:b.name,targetIndex:f,provider:aa,model:R,error:`Quality: ${g.reason}`,latencyMs:Date.now()-r}),null}if(aa&&Z){let a=(0,d.lB)(aa,e,Z);a.cleared?h.info("COMBO",`Model ${R} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug("COMBO",`Model ${R} decayed to failureCount=${a.newFailureCount}`)}let j=Date.now()-r;if((0,a$.I)("combo.target.succeeded",{comboName:b.name,targetIndex:f,provider:aa,model:R,latencyMs:j}),h.info("COMBO",`Model ${R} succeeded (${j}ms, ${s} fallbacks)`),t(b.name,R,{success:!0,latencyMs:j,fallbackCount:s,strategy:I,target:bR(L)}),u++,aa&&"unknown"!==aa&&cc(aa,e||void 0),"weighted"===I&&aD>1){let a=aI(L);a&&cn(b.name,a,aD)}if(a_("request.completed",{combo:b.name,provider:aa,model:R,account:"string"==typeof L.label&&L.label.trim().length>0?L.label.trim():"",accountId:e??"",latencyMs:j,fallbackCount:s}),b.context_cache_protection&&Q&&!a?.[M]&&F(Q,b.name,R,aa,L.connectionId??void 0),P.enabled&&l?.sessionId&&!a?.[M]){let c=E(l.sessionId,b.name);if(F(l.sessionId,b.name,R,aa,L.connectionId??void 0),c&&c!==R){let d=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if("generate"!==function(a){if(!a.universalConfig.enabled||!a.previousModel||a.previousModel===a.currentModel)return"skip";if(a.sessionId){let b=D(a.sessionId,a.comboName);if(b&&b.summary)return"inject"}return"generate"}({sessionId:a.sessionId,comboName:a.comboName,previousModel:a.prevModel,currentModel:a.currModel,universalConfig:a.universalConfig})||!a.sessionId)return;let d=(b=a.sessionId,c=a.comboName,`${b}::${c}`);if(J.has(d))return;J.add(d);let e=60*(a.universalConfig.ttlMinutes||300)*1e3;setImmediate(()=>{W({sessionId:a.sessionId,comboName:a.comboName,messages:a.messages,prevModel:a.prevModel||"unknown",currModel:a.currModel,handoffModel:a.universalConfig.handoffModel||a.currModel,ttlMs:e,maxMessages:a.universalConfig.maxMessagesForSummary,providerAllowlist:a.universalConfig.providerAllowlist,handleSingleModel:a.handleSingleModel}).catch(a=>{console.warn("[universal-handoff] Generation failed:",a?.message||a)}).finally(()=>{J.delete(d)})})}({sessionId:l.sessionId,comboName:b.name,messages:d,prevModel:c,currModel:R,universalConfig:P,handleSingleModel:_})}F(l.sessionId,b.name,R,aa,L.connectionId??void 0)}if("context-relay"===I&&l?.sessionId&&K&&K.handoffProviders.includes(aa)&&"codex"===aa){let c=(0,bx.bb)(l.sessionId);if(c){let d=await (0,Y.GF)(c).catch(()=>null);if(d){let e=[d.windows?.session?.resetAt,d.windows?.weekly?.resetAt,d.resetAt].filter(a=>"string"==typeof a&&a.length>0).sort((a,b)=>a.localeCompare(b)),f=Array.isArray(a?.messages)&&a.messages.length>0?a.messages:Array.isArray(a?.input)?a.input:[];!function(a){var b,c;if(!a.sessionId||!a.connectionId)return;let d=N(a.config);if(0===d.handoffProviders.length||a.percentUsed<d.handoffThreshold||a.percentUsed>=.95)return;a.sessionId,a.comboName;let e=(b=a.sessionId,c=a.comboName,`${b}::${c}`);J.has(e)||(J.add(e),setImmediate(()=>{V({...a,sessionId:a.sessionId,connectionId:a.connectionId,config:d}).catch(a=>{console.warn("[context-relay] Handoff generation failed:",a?.message||a)}).finally(()=>{J.delete(e)})}))}({sessionId:l.sessionId,comboName:b.name,connectionId:c,percentUsed:d.percentUsed,messages:f,model:R,expiresAt:e[0]||null,config:K,handleSingleModel:_})}}}if(aS.messageHash&&L.connectionId&&bD(aS.messageHash,L.connectionId),aa){let a=e||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,L.executionKey,aa,a),d(b.name,b.id||b.name,aa,a)])}catch(a){h.warn("COMBO","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return{ok:!0,response:g.clonedResponse??A}}let G=A.statusText||"",H=null,ab=null;try{let a=A.clone();try{let b=await a.text();if(b){G=b.substring(0,500),H=JSON.parse(b);let a=H?.error;G="object"==typeof a&&a?.message||("string"==typeof a?a:null)||H?.message||G,ab=H?.retryAfter||null}}catch{}}catch{}if(ab&&(!p||new Date(ab)<new Date(p))&&(p=ab),"string"!=typeof G)try{G=JSON.stringify(G)}catch{G=String(G)}let ae=(502===A.status||504===A.status)&&bP(H),af=429===A.status&&bQ(H);if(499===A.status)return h.info("COMBO",`Client disconnected (499) during ${R} — stopping combo loop`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,{ok:!1,response:A};let ag=H?.error,ah=ag&&"object"==typeof ag?{code:void 0!==ag.code&&null!==ag.code?String(ag.code):void 0,type:void 0!==ag.type&&null!==ag.type?String(ag.type):void 0}:void 0,ai=(0,d.hk)(A.status,G,0,null,aa,A.headers,ac,ah),{cooldownMs:aj}=ai,ak=A.headers?.get("X-OmniRoute-Selected-Connection-Id")||A.headers?.get("x-omniroute-selected-connection-id")||void 0,al=ak?{...L,connectionId:ak}:L,am=cA(al,{result:A,fallbackResult:ai,errorText:G,rawModel:Z,isTokenLimitBreach:af,allAccountsRateLimited:!1,sets:{exhaustedProviders:j,exhaustedConnections:k,transientRateLimitedProviders:n},log:h,tag:"COMBO",exhaustedLogLevel:"info",structuredError:ah});if(400===A.status&&ai.shouldFallback&&(y=G,!(/\bcontext.*(?:length_exceeded|too long|overflow|exceeded|window|limit)\b/i.test(y)||/exceeds.*context/i.test(y)||/your input exceeds/i.test(y)))&&(z=G,!(/\bmax_tokens\b.*(?:illegal|must|range|invalid)/i.test(z)||/\bparameter is illegal\b/i.test(z)||/\bis illegal.*range\b/i.test(z)))&&(G.toLowerCase().includes("context")||G.toLowerCase().includes("prompt")||G.toLowerCase().includes("token")||G.toLowerCase().includes("malformed")||G.toLowerCase().includes("invalid")||G.toLowerCase().includes("bad request")))return h.warn("COMBO",`400 Bad Request with body-specific error detected on ${R} — skipping fallback to other targets to prevent infinite loop`),t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=G||String(A.status),q||(q=A.status),f>0&&s++,h.warn("COMBO",`Model ${R} failed with body-specific error, stopping combo`),{ok:!1,response:A};let an=aJ[f+1],ao="string"==typeof an?.provider&&an.provider===aa;!(C={isStreamReadinessFailure:ae,status:A.status,sameProviderNext:ao,skipProviderBreaker:ai.skipProviderBreaker}).isStreamReadinessFailure&&(0,d.v6)(C.status)&&!C.sameProviderNext&&!C.skipProviderBreaker&&(0,d.p8)(aa,h,al.connectionId,ac);let ap=!ae&&!af&&[408,429,500,502,503,504].includes(A.status);if(g<at&&ap&&!am){let a=!1;if(aa&&Z&&0===g){let b=(0,X.Sy)(i);b.enabled&&b.errorCodes.includes(A.status)&&((0,d.E$)(aa,al.connectionId||"",Z,(0,d.M$)(A.status),A.status,b.baseCooldownMs,ac,{exactCooldownMs:(0,d.pX)(aj,b),maxCooldownMs:b.maxCooldownMs}),a=!0)}if(a)return h.info("COMBO",`Skipping retry for ${R} — model lockout active`),f>0&&s++,null;continue}if(t(b.name,R,{success:!1,latencyMs:Date.now()-r,fallbackCount:s,strategy:I,target:bR(L)}),u++,o=G||String(A.status),q||(q=A.status),f>0&&s++,aa&&Z){let a=(0,X.Sy)(i);a.enabled&&a.errorCodes.includes(A.status)&&(0,d.E$)(aa,al.connectionId||"",Z,(0,d.M$)(A.status),A.status,a.baseCooldownMs,ac,{exactCooldownMs:(0,d.pX)(aj,a),maxCooldownMs:a.maxCooldownMs})}h.warn("COMBO",`Model ${R} failed, trying next`,{status:A.status}),O.providerCooldown.enabled&&aa&&"unknown"!==aa&&ca(aa,al.connectionId??void 0,O);let aq=av>0&&aj>0&&aj<=5e3?Math.min(aj,av):0;if([502,503,504].includes(A.status)&&aq>0&&(h.debug?.("COMBO",`Waiting ${aq}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,aq);m?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),m?.aborted))return h.info("COMBO","Client disconnected during fallback wait — aborting"),{ok:!1,response:(0,e.yj)(499,"Client disconnected")};break}return null};for(let a=0;a<aJ.length&&!z;a++){let b=new AbortController;A.set(a,b);let c=()=>b.abort();m?.addEventListener("abort",c);let d=(async()=>{try{let b=await C(a);if(b&&!z)if(b.ok)for(let[c,d]of(z=!0,w(b.response),A.entries()))c!==a&&d.abort();else b.response&&(z=!0,w(b.response))}finally{m?.removeEventListener("abort",c)}})().catch(b=>{(h.error??h.warn)("COMBO",`Speculative task error for target ${a}`,b)});if(y.add(d),d.finally(()=>y.delete(d)),B&&U.hedging&&a+1<aJ.length){let a=bN(U.hedgeDelayMs,500),b=new Promise(b=>{setTimeout(b,a)});await Promise.race([d,x,b])}else await Promise.race([d,x])}if(!z&&y.size>0&&await Promise.race([x,Promise.all([...y])]),z)return await x;let G=Date.now()-r;if(0===u&&t(b.name,null,{success:!1,latencyMs:G,fallbackCount:s,strategy:I}),f<aw)continue;if(!q)return a_("request.failed",{combo:b.name,reason:"ALL_ACCOUNTS_INACTIVE",latencyMs:G,fallbackCount:s}),new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let H=q,L=o||"All combo models unavailable";if(p){if(a5&&429===H){let a=function(a){let{targets:b,earliestRetryAfter:c,attempt:d,budgetLeftMs:e,settings:f,lookupLock:g,computeWaitMs:h}=a;if(!f.enabled)return{wait:!1,waitMs:0,reason:null};let i=null;for(let a of b){let b="string"==typeof a.provider?a.provider:"";if(!b)continue;let c=g(b,"string"==typeof a.connectionId?a.connectionId:"");if(!c)continue;let d="number"==typeof c.remainingMs&&Number.isFinite(c.remainingMs)?c.remainingMs:0;d<=0||(!i||d<i.remainingMs)&&(i={reason:c.reason,remainingMs:d})}if(!i)return{wait:!1,waitMs:0,reason:null};let j=h(c),k="number"==typeof j&&Number.isFinite(j)&&j>0?j:0,l=Math.max(i.remainingMs,k)+50;return{...function(a){var b;let{reason:c,attempt:d,budgetLeftMs:e,settings:f}=a,g="number"==typeof(b=a.waitMs)&&Number.isFinite(b)&&b>0?b:0;return{wait:!0===f.enabled&&!("string"!=typeof c||0===c.length||ct.has(c))&&cu.has(c)&&g>0&&g<=f.maxWaitMs&&d<f.maxAttempts&&e>=g,waitMs:g}}({reason:i.reason,waitMs:l,attempt:d,budgetLeftMs:e,settings:f}),reason:"string"==typeof i.reason?i.reason:null}}({targets:aJ,earliestRetryAfter:p,attempt:a7,budgetLeftMs:a8,settings:O.comboCooldownWait,lookupLock:(a,b)=>{let c=(0,af.parseModel)(aJ[0]?.modelStr??"").model||"";return(0,d.ls)(a,b,c)},computeWaitMs:a=>cv(a).waitMs});if(a.wait){if(h.info("COMBO",`Quota-share cooldown wait: ${L} — waiting ${Math.ceil(a.waitMs/1e3)}s (reason=${a.reason??"?"}) then retrying (attempt ${a7+1}/${O.comboCooldownWait.maxAttempts})`),!await cw(a.waitMs,m))return h.info("COMBO","Quota-share cooldown wait aborted by client disconnect"),(0,e.yj)(499,"Request aborted");return a7+=1,a8=Math.max(0,a8-a.waitMs),ba()}}let a=(0,d.Qo)(cr(p));return h.warn("COMBO",`All models failed | ${L} (${a})`),(0,e.wO)(H,L,p,a)}return h.warn("COMBO",`All models failed | ${L}`),new Response(JSON.stringify({error:{message:L}}),{status:H,headers:{"Content-Type":"application/json"}})}return(0,e.yj)(503,"Combo routing completed without an upstream response")},bb=null,bc=aJ[0]?.connectionId;if(a9&&bc){let a=await bS(bc);bb=await bU(aJ[0],a,{queueTimeoutMs:U.queueTimeoutMs??3e4,maxQueueSize:B(U)},h)}try{return await ba()}finally{bb?.();for(let a of a3)aV.delete(a)}}async function dT({body:a,combo:b,handleSingleModel:f,isModelAvailable:g,log:h,settings:i,allCombos:j,signal:k}){var l;let m,n=i?C(b,i):{...x,...b.config||{}},o=(l=n.concurrencyPerModel??3,m=new Map,async a=>{var b;if(!a)return l;let c=m.get(a);return void 0===c&&(c=await bS(a),m.set(a,c)),"number"==typeof(b=c)&&Number.isFinite(b)&&b>0?Math.floor(b):l}),p=n.queueTimeoutMs??3e4,q=B(n),r=n.maxRetries??1,s=bN(n.retryDelayMs,2e3),u=bN(n.fallbackDelayMs,0),v=!1!==n.reasoningTokenBufferEnabled,w=i?(0,ai.xv)(i):(0,ai.xv)(null),y=c0(await cK(b),j?Array.isArray(j)?await cL(j):{...j,combos:await cL(j.combos||[])}:j,bM(n.maxComboDepth)),z=c_(b$(await aY(y,a,h),n.evalRouting,h),a,h,"Context-aware round-robin fallback"),A=z.length;if(0===A)return bO("Round-robin combo has no executable targets");c6(b,n,a,c3(b,n,j),f,g,"round-robin",h);let D=n.stickyRoundRobinLimit,E=cj(null!=D?D:i?.stickyRoundRobinLimit),F=E>1;if(F){let a=ch.get(b.name);if(a){let c=z.find(b=>b.executionKey===a.executionKey);if(c){let a=(0,af.parseModel)(c.modelStr).model||c.modelStr;(!c.provider||"OPEN"!==(0,ae.qF)(c.provider).getStatus().state)&&!(w.providerCooldown.enabled&&c.provider&&"unknown"!==c.provider&&cb(c.provider,c.connectionId??void 0,w))&&!(c.provider&&a&&(0,d.qw)(c.provider,c.connectionId||"",a))&&(!g||await g(c.modelStr,c))||(h.info("COMBO-RR",`Clearing stale sticky target ${c.modelStr} — unavailable`),ch.delete(b.name))}}}if(!cg.has(b.name)&&!ch.has(b.name)&&cg.size>=500){let a=cg.keys().next().value;void 0!==a&&(cg.delete(a),ch.delete(a))}cg.has(b.name)||cg.set(b.name,0);let{startIndex:G,counter:H}=ck(b.name,z,E);F||cg.set(b.name,H+1);let I=await bE(z,a?.messages),J=G;if(I.stuck){let a=z.findIndex(a=>a.connectionId===I.targets[0]?.connectionId);a>=0&&(J=a)}let K=a?.stream===!0,L=Date.now(),M=null,N=null,O=null,P=0,Q=0,R=0,S=new Set,T=new Set,U=new Set;for(let i=0;i<A;i++){let j,l=z[(J+i)%A],m=l.modelStr,x=l.provider,y=await (0,d.LN)(x),B=`combo:${b.name}:${l.executionKey}`,C=x&&"unknown"!==x&&U.has(x)?{...l,allowRateLimitedConnection:!0}:l;if(g&&!await g(m,C)){h.debug?.("COMBO-RR",`Skipping ${m} — no credentials available or model excluded`),i>0&&Q++;continue}if(w.providerCooldown.enabled&&x&&"unknown"!==x&&cb(x,l.connectionId,w)){h.info("COMBO-RR",`Skipping ${m} — provider ${x} in global cooldown`),i>0&&Q++;continue}let D=bL(l,S,T);if(D){h.info("COMBO-RR",D),i>0&&Q++;continue}let G=await o(l.connectionId);try{j=await ad(B,{maxConcurrency:G,timeoutMs:p,maxQueueSize:q})}catch(b){let a=ak(b)&&"string"==typeof b.code?b.code:null;if("SEMAPHORE_TIMEOUT"===a||"SEMAPHORE_QUEUE_FULL"===a){h.warn("COMBO-RR",`Semaphore ${"SEMAPHORE_QUEUE_FULL"===a?"queue full":"timeout"} for ${m}, trying next model`),i>0&&Q++;continue}throw b}try{for(let g=0;g<=r;g++){if(++P>30)return h.warn("COMBO-RR","Maximum combo attempts (30) exceeded. Terminating loop to prevent runaway requests."),(0,e.yj)(503,"Maximum combo retry limit reached");g>0&&(h.info("COMBO-RR",`Retrying ${m} in ${s}ms (attempt ${g+1}/${r+1})`),await new Promise(a=>setTimeout(a,s))),h.info("COMBO-RR",`[RR #${H}] → ${m}${i>0?` (fallback +${i})`:""}${g>0?` (retry ${g})`:""}`);let j=a;{let b=ce(a.max_tokens),c=cf(m,a.max_tokens,{enabled:v});null!==b&&null!==c&&c!==b&&(j={...a,max_tokens:c},h.info("COMBO-RR",`Reasoning model ${m}: adjusted max_tokens ${b} -> ${c}`))}let o=await f(j,m,{...C,effectiveComboStrategy:"round-robin",failoverBeforeRetry:n.failoverBeforeRetry});if(o.ok){let a=await cs(o,K,h,n.responseValidation);if(!a.valid){h.warn("COMBO-RR",`${m} returned 200 but failed quality check: ${a.reason}`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=`Upstream response failed quality validation: ${a.reason}`,N||(N=502),i>0&&Q++;break}let e=Date.now()-L;h.info("COMBO-RR",`${m} succeeded (${e}ms, ${Q} fallbacks)`),t(b.name,m,{success:!0,latencyMs:e,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++;let f=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||l.connectionId||"",g=(0,af.parseModel)(m).model||m;if(x&&g){let a=(0,d.lB)(x,f,g);a.cleared?h.info("COMBO-RR",`Model ${m} fully recovered — lockout cleared`):a.newFailureCount>0&&h.debug?.("COMBO-RR",`Model ${m} decayed to failureCount=${a.newFailureCount}`)}if(x&&"unknown"!==x&&cc(x,f||void 0),F&&cl(b.name,l,E,z),I.messageHash){let a=f||l.connectionId;a&&bD(I.messageHash,a)}if(x){let a=f||void 0;(async()=>{try{let{setLKGP:d}=await Promise.resolve().then(c.bind(c,89718));await Promise.all([d(b.name,l.executionKey,x,a),d(b.name,b.id||b.name,x,a)])}catch(a){h.warn("COMBO-RR","Failed to record Last Known Good Provider. This is non-fatal.",{err:a})}})()}return a.clonedResponse??o}let p=o.statusText||"",q=null,A=null;try{let a=o.clone();try{let b=await a.text();if(b){p=b.substring(0,500),A=JSON.parse(b);let a=A?.error;p="object"==typeof a&&a?.message||("string"==typeof a?a:null)||A?.message||p,q=A?.retryAfter||null}}catch{}}catch{}if(499===o.status)return h.info("COMBO-RR",`Client disconnected (499) during ${m} — stopping combo loop`),t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,o;if(q&&(!O||new Date(q)<new Date(O))&&(O=q),"string"!=typeof p)try{p=JSON.stringify(p)}catch{p=String(p)}let D=(502===o.status||504===o.status)&&bP(A),G=429===o.status&&bQ(A),J=A?.error,V=J&&"object"==typeof J?{code:void 0!==J.code&&null!==J.code?String(J.code):void 0,type:void 0!==J.type&&null!==J.type?String(J.type):void 0}:void 0,W=(0,d.hk)(o.status,p,0,null,x,o.headers,y,V),{cooldownMs:X}=W,Y=o.headers?.get("X-OmniRoute-Selected-Connection-Id")||o.headers?.get("x-omniroute-selected-connection-id")||void 0,Z=Y?{...l,connectionId:Y}:l,$=function(a,b,c){return 503===a&&!!b?.includes("application/json")&&bK.some(a=>a.test(c))}(o.status,o.headers?.get("content-type")??null,p),aa=cA(Z,{result:o,fallbackResult:W,errorText:p,rawModel:(0,af.parseModel)(m).model||m,isTokenLimitBreach:G,allAccountsRateLimited:$,sets:{exhaustedProviders:S,exhaustedConnections:T,transientRateLimitedProviders:U},log:h,tag:"COMBO-RR",exhaustedLogLevel:"debug",structuredError:V});!D&&!G&&bJ.includes(o.status)&&X>0&&(!function(a,b){let c=_(a);c.rateLimitedUntil=Date.now()+b,setTimeout(()=>{c.rateLimitedUntil&&Date.now()>=c.rateLimitedUntil&&(c.rateLimitedUntil=null,ab(a))},b+50)}(B,X),h.warn("COMBO-RR",`${m} error ${o.status}, cooldown ${X}ms`)),$&&h.info("COMBO-RR",`All accounts rate-limited for ${m}, falling back to next model`);let ac=!D&&!G&&[408,429,500,502,503,504].includes(o.status);if(g<r&&ac&&!aa)continue;t(b.name,m,{success:!1,latencyMs:Date.now()-L,fallbackCount:Q,strategy:"round-robin",target:bR(l)}),R++,M=p||String(o.status),N||(N=o.status),i>0&&Q++,h.warn("COMBO-RR",`${m} failed, trying next model`,{status:o.status}),w.providerCooldown.enabled&&x&&"unknown"!==x&&ca(x,Z.connectionId??void 0,w);let ad=u>0&&X>0&&X<=5e3?Math.min(X,u):0;if([502,503,504].includes(o.status)&&ad>0&&(h.debug?.("COMBO-RR",`Waiting ${ad}ms before fallback to next model`),await new Promise(a=>{let b=setTimeout(a,ad);k?.addEventListener("abort",()=>{clearTimeout(b),a(void 0)},{once:!0})}),k?.aborted))return h.info("COMBO-RR","Client disconnected during fallback wait — aborting"),(0,e.yj)(499,"Client disconnected");break}}finally{j()}}let V=Date.now()-L;if(0===R&&t(b.name,null,{success:!1,latencyMs:V,fallbackCount:Q,strategy:"round-robin"}),!N)return new Response(JSON.stringify({error:{message:"Service temporarily unavailable: all upstream accounts are inactive",type:"service_unavailable",code:"ALL_ACCOUNTS_INACTIVE"}}),{status:503,headers:{"Content-Type":"application/json"}});let W=N,X=M||"All round-robin combo models unavailable";if(O){let a=(0,d.Qo)(cr(O));return h.warn("COMBO-RR",`All models failed | ${X} (${a})`),(0,e.wO)(W,X,O,a)}return h.warn("COMBO-RR",`All models failed | ${X}`),new Response(JSON.stringify({error:{message:X}}),{status:W,headers:{"Content-Type":"application/json"}})}let dU=new Map;function dV(a){a?dU.delete(a):dU.clear()}}};
|