omniroute 3.4.7 → 3.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +15 -15
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +11 -11
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +5 -5
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +14 -14
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/completions/route.js +14 -14
- package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +10 -10
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +16 -16
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route.js +5 -5
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/moderations/route.js +9 -9
- package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/music/generations/route.js +10 -10
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +16 -16
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +7 -7
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +10 -10
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/rerank/route.js +9 -9
- package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/[...path]/route.js +16 -16
- package/app/.next/server/app/api/v1/responses/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +16 -16
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js +5 -5
- package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/analytics/route.js +7 -7
- package/app/.next/server/app/api/v1/search/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route.js +10 -10
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +14 -14
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0nxyldc._.js → [root-of-the-server]__0-zca2p._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0urvs3.._.js → [root-of-the-server]__01hbf~_._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__01ojood._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__030_-af._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0j~-yu1._.js → [root-of-the-server]__03l6k3k._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__01b8762._.js → [root-of-the-server]__05~jdzu._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__07eee_s._.js → [root-of-the-server]__08~6j3q._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0a8ozdb._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0bd4ccn._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0_a98vk._.js → [root-of-the-server]__0d6bqbw._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0_c_.ye._.js → [root-of-the-server]__0f2rz58._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0jp3yj4._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__06stuoz._.js → [root-of-the-server]__0jvnjwl._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0mj7x5~._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0n-~kvf._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0-y3k-t._.js → [root-of-the-server]__0nzi7ym._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0ofxxzh._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0uu3t5x._.js → [root-of-the-server]__0pd~24c._.js} +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0s1dq3.._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0tsl88m._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0u5-mph._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0vi3.0k._.js → [root-of-the-server]__0uryxsh._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0lwc40h._.js → [root-of-the-server]__0v1kwmx._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__04y3b4q._.js → [root-of-the-server]__0vt49c9._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__0pylsu2._.js → [root-of-the-server]__0vy97gy._.js} +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0~s45~f._.js → [root-of-the-server]__0wd~o5b._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0x5yxjy._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__0vmajf6._.js → [root-of-the-server]__0x_hqjb._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0~0hd.s._.js +2 -2
- package/app/.next/server/chunks/{[root-of-the-server]__10~-ypp._.js → [root-of-the-server]__11ptf~3._.js} +1 -1
- package/app/.next/server/chunks/_00.pgsp._.js +1 -1
- package/app/.next/server/chunks/_013gowh._.js +1 -1
- package/app/.next/server/chunks/{_0ucpa5q._.js → _02._8wx._.js} +1 -1
- package/app/.next/server/chunks/_036lxbr._.js +1 -1
- package/app/.next/server/chunks/_05reh6o._.js +1 -1
- package/app/.next/server/chunks/{_0-~thzo._.js → _083_x9z._.js} +2 -2
- package/app/.next/server/chunks/_083a5zg._.js +1 -1
- package/app/.next/server/chunks/{_004r3br._.js → _08cwbl2._.js} +2 -2
- package/app/.next/server/chunks/_0a3.3sc._.js +1 -1
- package/app/.next/server/chunks/_0c.abwr._.js +1 -1
- package/app/.next/server/chunks/_0dfpto1._.js +1 -1
- package/app/.next/server/chunks/_0due8oe._.js +1 -1
- package/app/.next/server/chunks/_0h-j8c2._.js +1 -1
- package/app/.next/server/chunks/_0vx-r0i._.js +2 -2
- package/app/.next/server/chunks/_0w4f3bm._.js +1 -1
- package/app/.next/server/chunks/_10.rw9f._.js +1 -1
- package/app/.next/server/chunks/open-sse_0dawtxk._.js +2 -2
- package/app/.next/server/chunks/open-sse_0p~.88y._.js +1 -1
- package/app/.next/server/chunks/open-sse_0sthby3._.js +1 -1
- package/app/.next/server/chunks/src_0cbm0~g._.js +1 -1
- package/app/.next/server/chunks/src_shared_utils_apiKey_ts_0gzf59_._.js +1 -1
- package/app/.next/server/chunks/src_shared_utils_apiKey_ts_12~h.oz._.js +1 -1
- package/app/.next/server/chunks/ssr/_008ht2n._.js +1 -1
- package/app/.next/server/chunks/ssr/_0oo1f90._.js +1 -1
- package/app/.next/server/chunks/ssr/src_04s-8a5._.js +1 -1
- package/app/.next/server/chunks/ssr/src_0vjsxxr._.js +1 -1
- package/app/.next/server/chunks/ssr/src_shared_utils_apiKey_ts_0l8g1z8._.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +3 -3
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/0ipwpwjb2g0uv.js +1 -0
- package/app/.next/static/chunks/0~c--kcvaumm~.js +1 -0
- package/app/.next/static/chunks/{02q7h~xz7j6i3.js → 0~v1trn07bitv.js} +1 -1
- package/app/CHANGELOG.md +12 -0
- package/app/bin/reset-password.mjs +3 -1
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/config/registryUtils.ts +1 -0
- package/app/open-sse/config/videoRegistry.ts +1 -3
- package/app/open-sse/executors/antigravity.ts +22 -12
- package/app/open-sse/executors/gemini-cli.ts +3 -1
- package/app/open-sse/executors/qoder.ts +1 -8
- package/app/open-sse/handlers/audioSpeech.ts +1 -0
- package/app/open-sse/handlers/chatCore.ts +2 -1
- package/app/open-sse/handlers/embeddings.ts +1 -0
- package/app/open-sse/handlers/imageGeneration.ts +6 -2
- package/app/open-sse/handlers/musicGeneration.ts +9 -2
- package/app/open-sse/handlers/search.ts +1 -0
- package/app/open-sse/handlers/videoGeneration.ts +11 -3
- package/app/open-sse/mcp-server/index.ts +0 -1
- package/app/open-sse/package.json +1 -1
- package/app/open-sse/services/claudeCodeCompatible.ts +2 -2
- package/app/open-sse/services/modelCapabilities.ts +3 -4
- package/app/open-sse/services/qoderCli.ts +5 -2
- package/app/open-sse/services/tokenRefresh.ts +3 -1
- package/app/open-sse/services/usage.ts +13 -9
- package/app/open-sse/services/workflowFSM.ts +298 -61
- package/app/open-sse/translator/index.ts +5 -1
- package/app/open-sse/translator/response/gemini-to-openai.ts +5 -1
- package/app/open-sse/utils/progressTracker.ts +4 -1
- package/app/open-sse/utils/stream.ts +7 -1
- package/app/open-sse/utils/streamPayloadCollector.ts +5 -1
- package/app/package-lock.json +3 -3
- package/app/package.json +1 -1
- package/app/scripts/check-route-validation.mjs +3 -1
- package/app/scripts/i18n/apply-priority-overrides.mjs +7 -1
- package/app/scripts/prepublish.mjs +2 -2
- package/app/scripts/run-protocol-clients-tests.mjs +7 -1
- package/app/src/app/(dashboard)/dashboard/analytics/components/DiversityScoreCard.tsx +1 -1
- package/app/src/app/(dashboard)/dashboard/auto-combo/page.tsx +0 -1
- package/app/src/app/(dashboard)/dashboard/media/MediaPageClient.tsx +9 -3
- package/app/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +25 -23
- package/app/src/app/(dashboard)/dashboard/search-tools/components/SearchHistory.tsx +3 -1
- package/app/src/app/api/auth/status/route.ts +1 -3
- package/app/src/app/api/mcp/sse/route.ts +2 -2
- package/app/src/app/api/mcp/status/route.ts +1 -2
- package/app/src/app/api/mcp/stream/route.ts +5 -3
- package/app/src/app/api/openapi/spec/route.ts +4 -1
- package/app/src/app/api/openapi/try/route.ts +4 -1
- package/app/src/app/api/providers/[id]/models/route.ts +4 -4
- package/app/src/app/api/providers/[id]/sync-models/route.ts +9 -3
- package/app/src/app/api/settings/auto-disable-accounts/route.ts +6 -1
- package/app/src/app/api/skills/[id]/route.ts +4 -1
- package/app/src/app/api/v1/issues/report/route.ts +9 -1
- package/app/src/app/api/v1beta/models/route.ts +8 -6
- package/app/src/app/api/webhooks/[id]/route.ts +9 -7
- package/app/src/domain/fallbackPolicy.ts +0 -1
- package/app/src/domain/modelAvailability.ts +0 -1
- package/app/src/domain/providerExpiration.ts +2 -6
- package/app/src/lib/db/models.ts +23 -13
- package/app/src/lib/evals/evalRunner.ts +0 -1
- package/app/src/lib/evals/scheduler.ts +2 -6
- package/app/src/lib/oauth/services/antigravity.ts +6 -1
- package/app/src/lib/oauth/services/kiro.ts +12 -2
- package/app/src/lib/oauth/services/oauth.ts +10 -2
- package/app/src/lib/oauth/utils/server.ts +4 -1
- package/app/src/lib/plugins/index.ts +2 -8
- package/app/src/lib/usageAnalytics.ts +5 -1
- package/app/src/mitm/manager.js +1 -1
- package/app/src/mitm/manager.ts +1 -1
- package/app/src/shared/components/Button.tsx +0 -1
- package/app/src/shared/components/Card.tsx +0 -2
- package/app/src/shared/components/FilterBar.tsx +4 -12
- package/app/src/shared/components/Input.tsx +1 -1
- package/app/src/shared/components/Modal.tsx +0 -1
- package/app/src/shared/components/NotificationToast.tsx +1 -3
- package/app/src/shared/components/Select.tsx +1 -1
- package/app/src/shared/components/Sidebar.tsx +3 -3
- package/app/src/shared/components/ThemeToggle.tsx +7 -1
- package/app/src/shared/constants/cliCompatProviders.ts +0 -1
- package/app/src/shared/constants/errorCodes.ts +114 -19
- package/app/src/shared/utils/apiKey.ts +2 -4
- package/app/src/shared/utils/fetchTimeout.ts +0 -1
- package/app/src/shared/utils/inputSanitizer.ts +8 -4
- package/app/src/shared/utils/requestTimeout.ts +5 -1
- package/app/src/sse/handlers/chat.ts +1 -0
- package/app/src/sse/services/auth.ts +8 -3
- package/app/src/sse/services/streamState.ts +5 -1
- package/app/src/store/notificationStore.ts +3 -7
- package/app/tests/unit/t20-t22-provider-headers.test.mjs +3 -1
- package/bin/reset-password.mjs +3 -1
- package/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts +5 -1
- package/open-sse/mcp-server/index.ts +0 -1
- package/package.json +1 -1
- package/app/.next/server/chunks/_0-jnvci._.js +0 -19
- package/app/.next/static/chunks/0l88mho31mflv.js +0 -1
- package/app/.next/static/chunks/0wt-4zl7_gil8.js +0 -1
- /package/app/.next/static/{ri1SkwBU-ygQ2qIDe8jf2 → 1dZBzAZ8QsddVCQRQtqjg}/_buildManifest.js +0 -0
- /package/app/.next/static/{ri1SkwBU-ygQ2qIDe8jf2 → 1dZBzAZ8QsddVCQRQtqjg}/_clientMiddlewareManifest.js +0 -0
- /package/app/.next/static/{ri1SkwBU-ygQ2qIDe8jf2 → 1dZBzAZ8QsddVCQRQtqjg}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[920226,a=>{"use strict";var b=a.i(572131);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],920226)},862435,a=>{"use strict";let b=a=>c=>{try{let d=a(c);if(d instanceof Promise)return d;return{then:a=>b(a)(d),catch(a){return this}}}catch(a){return{then(a){return this},catch:c=>b(c)(a)}}};a.s(["persist",0,(a,c)=>(d,e,f)=>{let g,h={storage:function(a){let b;try{b=a()}catch(a){return}return{getItem:a=>{var c;let d=a=>null===a?null:JSON.parse(a,void 0),e=null!=(c=b.getItem(a))?c:null;return e instanceof Promise?e.then(d):d(e)},setItem:(a,c)=>b.setItem(a,JSON.stringify(c,void 0)),removeItem:a=>b.removeItem(a)}}(()=>window.localStorage),partialize:a=>a,version:0,merge:(a,b)=>({...b,...a}),...c},i=!1,j=0,k=new Set,l=new Set,m=h.storage;if(!m)return a((...a)=>{console.warn(`[zustand persist middleware] Unable to update item '${h.name}', the given storage is currently unavailable.`),d(...a)},e,f);let n=()=>{let a=h.partialize({...e()});return m.setItem(h.name,{state:a,version:h.version})},o=f.setState;f.setState=(a,b)=>(o(a,b),n());let p=a((...a)=>(d(...a),n()),e,f);f.getInitialState=()=>p;let q=()=>{var a,c;if(!m)return;let f=++j;i=!1,k.forEach(a=>{var b;return a(null!=(b=e())?b:p)});let o=(null==(c=h.onRehydrateStorage)?void 0:c.call(h,null!=(a=e())?a:p))||void 0;return b(m.getItem.bind(m))(h.name).then(a=>{if(a)if("number"!=typeof a.version||a.version===h.version)return[!1,a.state];else{if(h.migrate){let b=h.migrate(a.state,a.version);return b instanceof Promise?b.then(a=>[!0,a]):[!0,b]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(a=>{var b;if(f!==j)return;let[c,i]=a;if(d(g=h.merge(i,null!=(b=e())?b:p),!0),c)return n()}).then(()=>{f===j&&(null==o||o(e(),void 0),g=e(),i=!0,l.forEach(a=>a(g)))}).catch(a=>{f===j&&(null==o||o(void 0,a))})};return f.persist={setOptions:a=>{h={...h,...a},a.storage&&(m=a.storage)},clearStorage:()=>{null==m||m.removeItem(h.name)},getOptions:()=>h,rehydrate:()=>q(),hasHydrated:()=>i,onHydrate:a=>(k.add(a),()=>{k.delete(a)}),onFinishHydration:a=>(l.add(a),()=>{l.delete(a)})},h.skipHydration||q(),g||p}])},137849,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.
|
|
1
|
+
module.exports=[920226,a=>{"use strict";var b=a.i(572131);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],920226)},862435,a=>{"use strict";let b=a=>c=>{try{let d=a(c);if(d instanceof Promise)return d;return{then:a=>b(a)(d),catch(a){return this}}}catch(a){return{then(a){return this},catch:c=>b(c)(a)}}};a.s(["persist",0,(a,c)=>(d,e,f)=>{let g,h={storage:function(a){let b;try{b=a()}catch(a){return}return{getItem:a=>{var c;let d=a=>null===a?null:JSON.parse(a,void 0),e=null!=(c=b.getItem(a))?c:null;return e instanceof Promise?e.then(d):d(e)},setItem:(a,c)=>b.setItem(a,JSON.stringify(c,void 0)),removeItem:a=>b.removeItem(a)}}(()=>window.localStorage),partialize:a=>a,version:0,merge:(a,b)=>({...b,...a}),...c},i=!1,j=0,k=new Set,l=new Set,m=h.storage;if(!m)return a((...a)=>{console.warn(`[zustand persist middleware] Unable to update item '${h.name}', the given storage is currently unavailable.`),d(...a)},e,f);let n=()=>{let a=h.partialize({...e()});return m.setItem(h.name,{state:a,version:h.version})},o=f.setState;f.setState=(a,b)=>(o(a,b),n());let p=a((...a)=>(d(...a),n()),e,f);f.getInitialState=()=>p;let q=()=>{var a,c;if(!m)return;let f=++j;i=!1,k.forEach(a=>{var b;return a(null!=(b=e())?b:p)});let o=(null==(c=h.onRehydrateStorage)?void 0:c.call(h,null!=(a=e())?a:p))||void 0;return b(m.getItem.bind(m))(h.name).then(a=>{if(a)if("number"!=typeof a.version||a.version===h.version)return[!1,a.state];else{if(h.migrate){let b=h.migrate(a.state,a.version);return b instanceof Promise?b.then(a=>[!0,a]):[!0,b]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(a=>{var b;if(f!==j)return;let[c,i]=a;if(d(g=h.merge(i,null!=(b=e())?b:p),!0),c)return n()}).then(()=>{f===j&&(null==o||o(e(),void 0),g=e(),i=!0,l.forEach(a=>a(g)))}).catch(a=>{f===j&&(null==o||o(void 0,a))})};return f.persist={setOptions:a=>{h={...h,...a},a.storage&&(m=a.storage)},clearStorage:()=>{null==m||m.removeItem(h.name)},getOptions:()=>h,rehydrate:()=>q(),hasHydrated:()=>i,onHydrate:a=>(k.add(a),()=>{k.delete(a)}),onFinishHydration:a=>(l.add(a),()=>{l.delete(a)})},h.skipHydration||q(),g||p}])},137849,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.8",description:"Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3","js-yaml":"^4.1.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",yazl:"^3.3.1",zod:"^4.3.6",zustand:"^5.0.10"},optionalDependencies:{keytar:"^7.9.0"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",c8:"^11.0.0",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7",jsdom:"^29.0.1","lint-staged":"^16.2.7",prettier:"^3.8.1","prop-types":"^15.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{"lodash-es":"^4.18.1",dompurify:"^3.3.2","path-to-regexp":"^8.4.0",react:"$react","react-dom":"$react-dom"}}])},843314,a=>a.a(async(b,c)=>{try{var d=a.i(677850),e=b([d]);[d]=e.then?(await e)():e;let f=d.z.object({id:d.z.string().min(1),alias:d.z.string().min(1).optional(),name:d.z.string().min(1),icon:d.z.string().min(1),color:d.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.z.string().optional(),website:d.z.string().url().optional(),passthroughModels:d.z.boolean().optional(),deprecated:d.z.boolean().optional(),deprecationReason:d.z.string().optional(),hasFree:d.z.boolean().optional(),freeNote:d.z.string().optional(),authHint:d.z.string().optional(),apiHint:d.z.string().optional()}),g=d.z.record(d.z.string(),f);a.s(["validateProviders",0,function(a,b){let c=g.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
|
|
2
2
|
${a}`),Error(`Provider validation failed for ${b}`)}}]),c()}catch(a){c(a)}},!1),662073,a=>a.a(async(b,c)=>{try{var d=a.i(843314),e=b([d]);[d]=e.then?(await e)():e;let f={qoder:{id:"qoder",alias:"if",name:"Qoder AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gemini-cli",name:"Gemini CLI",icon:"terminal",color:"#4285F4",deprecated:!0,deprecationReason:"Google restricts third-party OAuth usage for Gemini CLI (Mar 2026). Pro models require paid plans. Use 'gemini' (API key) provider instead."},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},g=new Set(["qoder"]),h={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:void 0,name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},"kimi-coding":{id:"kimi-coding",alias:"kmc",name:"Kimi Coding",icon:"psychology",color:"#1E40AF",textIcon:"KC"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},i={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"bailian-coding-plan":{id:"bailian-coding-plan",alias:"bcp",name:"Alibaba Coding Plan",icon:"code",color:"#FF6A00",textIcon:"BCP",website:"https://www.alibabacloud.com/help/en/model-studio/coding-plan"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},"kimi-coding-apikey":{id:"kimi-coding-apikey",alias:"kmca",name:"Kimi Coding (API Key)",icon:"psychology",color:"#1E40AF",textIcon:"KC",website:"https://kimi.com"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://bailian.console.aliyun.com"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://modelstudio.console.alibabacloud.com"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini (Google AI Studio)",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",hasFree:!0,freeNote:"Free forever: 1,500 req/day for Gemini 2.5 Flash — no credit card, get key at aistudio.google.com"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com",hasFree:!0,freeNote:"Free tier: 30 RPM / 14.4K RPD — no credit card"},blackbox:{id:"blackbox",alias:"bb",name:"Blackbox AI",icon:"view_in_ar",color:"#1A1A2E",textIcon:"BB",website:"https://blackbox.ai"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai",hasFree:!0,freeNote:"$25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://inference.cerebras.ai",hasFree:!0,freeNote:"Free: 1M tokens/day, 60K TPM — world's fastest inference"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://build.nvidia.com",hasFree:!0,freeNote:"Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...)"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",name:"Ollama Cloud",icon:"cloud",color:"#58A6FF",textIcon:"OC",website:"https://ollama.com/settings/api-keys"},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io"},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai"},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht"},inworld:{id:"inworld",alias:"inworld",name:"Inworld",icon:"voice_chat",color:"#7B2EF2",textIcon:"IW",website:"https://inworld.ai"},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui"},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI"},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",hasFree:!0,freeNote:"Free Inference API for thousands of models (Whisper, VITS, SDXL…)"},synthetic:{id:"synthetic",alias:"synthetic",name:"Synthetic",icon:"verified_user",color:"#6366F1",textIcon:"SY",website:"https://synthetic.new",passthroughModels:!0},"kilo-gateway":{id:"kilo-gateway",alias:"kg",name:"Kilo Gateway",icon:"hub",color:"#617A91",textIcon:"KG",website:"https://kilo.ai",passthroughModels:!0},vertex:{id:"vertex",alias:"vertex",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VA",website:"https://cloud.google.com/vertex-ai",authHint:"Provide Service Account JSON or OAuth access_token"},zai:{id:"zai",alias:"zai",name:"Z.AI",icon:"psychology",color:"#2563EB",textIcon:"ZA",website:"https://open.bigmodel.cn",apiHint:"API key from https://open.bigmodel.cn/usercenter/apikeys"},"perplexity-search":{id:"perplexity-search",alias:"pplx-search",name:"Perplexity Search",icon:"search",color:"#20808D",textIcon:"PS",website:"https://docs.perplexity.ai/guides/search-quickstart",authHint:"Same API key as Perplexity (pplx-...)"},"serper-search":{id:"serper-search",alias:"serper-search",name:"Serper Search",icon:"search",color:"#4285F4",textIcon:"SP",website:"https://serper.dev",authHint:"API key from serper.dev dashboard"},"brave-search":{id:"brave-search",alias:"brave-search",name:"Brave Search",icon:"travel_explore",color:"#FB542B",textIcon:"BR",website:"https://brave.com/search/api",authHint:"Subscription token from Brave Search API dashboard"},"exa-search":{id:"exa-search",alias:"exa-search",name:"Exa Search",icon:"neurology",color:"#1E40AF",textIcon:"EX",website:"https://exa.ai",authHint:"API key from dashboard.exa.ai"},"tavily-search":{id:"tavily-search",alias:"tavily-search",name:"Tavily Search",icon:"manage_search",color:"#5B4FDB",textIcon:"TV",website:"https://tavily.com",authHint:"API key from app.tavily.com (format: tvly-...)"},"opencode-zen":{id:"opencode-zen",alias:"opencode-zen",name:"OpenCode Zen",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen"},"opencode-go":{id:"opencode-go",alias:"opencode-go",name:"OpenCode Go",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen/go"},alibaba:{id:"alibaba",alias:"ali",name:"Alibaba Cloud (DashScope)",icon:"cloud_queue",color:"#FF6600",textIcon:"AL",website:"https://dashscope-intl.aliyuncs.com",hasFree:!1},longcat:{id:"longcat",alias:"lc",name:"LongCat AI",icon:"auto_awesome",color:"#FF6B9D",textIcon:"LC",website:"https://longcat.chat",hasFree:!0,freeNote:"50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) — 100% free while public beta"},pollinations:{id:"pollinations",alias:"pol",name:"Pollinations AI",icon:"local_florist",color:"#4CAF50",textIcon:"PO",website:"https://pollinations.ai",hasFree:!0,freeNote:"No API key needed — access GPT-5, Claude, Gemini, DeepSeek V3, Llama 4 free (1 req/15s)"},puter:{id:"puter",alias:"pu",name:"Puter AI",icon:"cloud_circle",color:"#6366F1",textIcon:"PU",website:"https://puter.com",hasFree:!0,freeNote:"500+ models (GPT-5, Claude Opus 4, Gemini 3 Pro, Grok 4, DeepSeek V3...) — Users pay via free Puter account",passthroughModels:!0,authHint:"Get token at puter.com/dashboard → Copy Auth Token"},"cloudflare-ai":{id:"cloudflare-ai",alias:"cf",name:"Cloudflare Workers AI",icon:"cloud",color:"#F48120",textIcon:"CF",website:"https://developers.cloudflare.com/workers-ai/",hasFree:!0,freeNote:"Free 10K Neurons/day: ~150 LLM responses or 500s Whisper audio — edge inference globally",authHint:"Requires API Token AND Account ID (found at dash.cloudflare.com)"},scaleway:{id:"scaleway",alias:"scw",name:"Scaleway AI",icon:"cloud",color:"#4F0599",textIcon:"SCW",website:"https://www.scaleway.com/en/ai/generative-apis/",hasFree:!0,freeNote:"1M free tokens for new accounts — EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B"},aimlapi:{id:"aimlapi",alias:"aiml",name:"AI/ML API",icon:"hub",color:"#6366F1",textIcon:"AI",website:"https://aimlapi.com",hasFree:!0,freeNote:"$0.025/day free credits — 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint",passthroughModels:!0},novita:{id:"novita",alias:"novita",name:"Novita AI",icon:"auto_awesome",color:"#FF4081",textIcon:"NV",website:"https://novita.ai",passthroughModels:!0},piapi:{id:"piapi",alias:"pi",name:"PiAPI",icon:"api",color:"#7C4DFF",textIcon:"PI",website:"https://piapi.ai",passthroughModels:!0},getgoapi:{id:"getgoapi",alias:"ggo",name:"GoAPI",icon:"rocket_launch",color:"#FF6D00",textIcon:"GO",website:"https://api.getgoapi.com",passthroughModels:!0},laozhang:{id:"laozhang",alias:"lz",name:"LaoZhang AI",icon:"hub",color:"#FF1744",textIcon:"LZ",website:"https://api.laozhang.ai",passthroughModels:!0}},j="openai-compatible-",k="anthropic-compatible-",l="anthropic-compatible-cc-",m={...f,...h,...i,cliproxyapi:{id:"cliproxyapi",alias:"cpa",name:"CLIProxyAPI",icon:"proxy",color:"#6366F1",textIcon:"CPA",website:"https://github.com/router-for-me/CLIProxyAPI",defaultPort:8317,healthEndpoint:"/v1/models",managementPrefix:"/v0/management",configDir:"~/.cli-proxy-api",binaryName:"cli-proxy-api",githubRepo:"router-for-me/CLIProxyAPI"}},n=Object.values(m).reduce((a,b)=>(b.alias&&(a[b.alias]=b.id),a),{});Object.values(m).reduce((a,b)=>(a[b.id]=b.alias||b.id,a),{}),(0,d.validateProviders)(f,"FREE_PROVIDERS"),(0,d.validateProviders)(h,"OAUTH_PROVIDERS"),(0,d.validateProviders)(i,"APIKEY_PROVIDERS"),a.s(["AI_PROVIDERS",0,m,"ALIAS_TO_ID",0,n,"ANTHROPIC_COMPATIBLE_PREFIX",0,k,"APIKEY_PROVIDERS",0,i,"AUTH_METHODS",0,{oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}},"CLAUDE_CODE_COMPATIBLE_PREFIX",0,l,"FREE_PROVIDERS",0,f,"OAUTH_PROVIDERS",0,h,"OPENAI_COMPATIBLE_PREFIX",0,j,"USAGE_SUPPORTED_PROVIDERS",0,["antigravity","gemini-cli","kiro","github","codex","claude","kimi-coding","glm"],"getProviderAlias",0,function(a){let b=m[a];return b?.alias||a},"getProviderByAlias",0,function(a){for(let b of Object.values(m))if(b.alias===a||b.id===a)return b;return null},"isAnthropicCompatibleProvider",0,function(a){return"string"==typeof a&&a.startsWith(k)},"isClaudeCodeCompatibleProvider",0,function(a){return"string"==typeof a&&a.startsWith(l)},"isOpenAICompatibleProvider",0,function(a){return"string"==typeof a&&a.startsWith(j)},"supportsApiKeyOnFreeProvider",0,function(a){return g.has(a)}]),c()}catch(a){c(a)}},!1),911655,a=>{"use strict";var b=a.i(446786);let c=Object.freeze(["temperature","top_p","frequency_penalty","presence_penalty","logprobs","top_logprobs","n"]),d={format:"claude",executor:"default",baseUrl:"https://api.kimi.com/coding/v1/messages",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}]},e={claude:{id:"claude",alias:"cc",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",defaultContextLength:2e5,headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.63 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.74.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,b.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,b.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,b.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";default:return`Other::${(0,b.platform)()}`}}(),"X-Stainless-Timeout":"600"},oauth:{clientIdEnv:"CLAUDE_OAUTH_CLIENT_ID",clientIdDefault:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://console.anthropic.com/v1/oauth/token"},models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude 4.6 Sonnet"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}]},gemini:{id:"gemini",alias:"gemini",format:"gemini",executor:"default",baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",urlBuilder:(a,b,c)=>`${a}/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"x-goog-api-key",defaultContextLength:1e6,oauth:{clientIdEnv:"GEMINI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[]},"gemini-cli":{id:"gemini-cli",alias:"gemini-cli",format:"gemini-cli",executor:"gemini-cli",baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",urlBuilder:(a,b,c)=>`${a}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"oauth",authHeader:"bearer",defaultContextLength:1e6,oauth:{clientIdEnv:"GEMINI_CLI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-pro-preview-customtools",name:"Gemini 3.1 Pro Preview Custom Tools"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}]},codex:{id:"codex",alias:"cx",format:"openai-responses",executor:"codex",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",defaultContextLength:4e5,headers:{Version:"0.92.0","Openai-Beta":"responses=experimental","User-Agent":"codex-cli/0.92.0 (Windows 10.0.26100; x64)"},oauth:{clientIdEnv:"CODEX_OAUTH_CLIENT_ID",clientIdDefault:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecretEnv:"CODEX_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://auth.openai.com/oauth/token"},models:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.4-mini",name:"GPT 5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}]},qwen:{id:"qwen",alias:"qw",format:"openai",executor:"default",baseUrl:"https://chat.qwen.ai/api/v1/services/aigc/text-generation/generation",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"QwenCode/0.12.3 (linux; x64)","X-Dashscope-AuthType":"qwen-oauth","X-Dashscope-CacheControl":"enable","X-Dashscope-UserAgent":"QwenCode/0.12.3 (linux; x64)","X-Stainless-Arch":"x64","X-Stainless-Lang":"js","X-Stainless-Os":"Linux","X-Stainless-Package-Version":"5.11.0","X-Stainless-Retry-Count":"1","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v18.19.1",Connection:"keep-alive","Accept-Language":"*","Sec-Fetch-Mode":"cors"},oauth:{clientIdEnv:"QWEN_OAUTH_CLIENT_ID",clientIdDefault:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 (Coder Model)"}]},qoder:{id:"qoder",alias:"if",format:"openai",executor:"qoder",baseUrl:"https://api.qoder.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",headers:{"User-Agent":"Qoder-Cli"},oauth:{clientIdEnv:"QODER_OAUTH_CLIENT_ID",clientSecretEnv:"QODER_OAUTH_CLIENT_SECRET",tokenUrl:process.env.QODER_OAUTH_TOKEN_URL||"",authUrl:process.env.QODER_OAUTH_AUTHORIZE_URL||""},models:[{id:"qoder-rome-30ba3b",name:"Qoder ROME"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 Vision Plus"},{id:"kimi-k2-0905",name:"Kimi K2 0905"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek-V3.2-Exp"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b",name:"Qwen3 235B"}]},antigravity:{id:"antigravity",alias:void 0,format:"antigravity",executor:"antigravity",baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com","https://cloudcode-pa.googleapis.com"],urlBuilder:(a,b,c)=>`${a}${c?"/v1internal:streamGenerateContent?alt=sse":"/v1internal:generateContent"}`,authType:"oauth",authHeader:"bearer",headers:{"User-Agent":`antigravity/1.107.0 ${(0,b.platform)()}/${(0,b.arch)()}`},oauth:{clientIdEnv:"ANTIGRAVITY_OAUTH_CLIENT_ID",clientIdDefault:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecretEnv:"ANTIGRAVITY_OAUTH_CLIENT_SECRET",clientSecretDefault:"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"},models:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"gemini-3.1-flash-image",name:"Gemini 3.1 Flash Image"},{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro (High)"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro (Low)"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}],passthroughModels:!0},github:{id:"github",alias:"gh",format:"openai",executor:"github",baseUrl:"https://api.githubcopilot.com/chat/completions",responsesBaseUrl:"https://api.githubcopilot.com/responses",authType:"oauth",authHeader:"bearer",defaultContextLength:128e3,headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},models:[{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",targetFormat:"openai-responses"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex",targetFormat:"openai-responses"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5 (Full ID)"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}]},kiro:{id:"kiro",alias:"kr",format:"kiro",executor:"kiro",baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",authType:"oauth",authHeader:"bearer",defaultContextLength:2e5,headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},oauth:{tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},models:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"}]},cursor:{id:"cursor",alias:"cu",format:"cursor",executor:"cursor",baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",authType:"oauth",authHeader:"bearer",defaultContextLength:2e5,headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3",models:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.6-opus-high-thinking",name:"Claude 4.6 Opus High Thinking"},{id:"claude-4.6-opus-high",name:"Claude 4.6 Opus High"},{id:"claude-4.6-sonnet-high-thinking",name:"Claude 4.6 Sonnet High Thinking"},{id:"claude-4.6-sonnet-high",name:"Claude 4.6 Sonnet High"},{id:"claude-4.6-haiku",name:"Claude 4.6 Haiku"},{id:"claude-4.6-opus",name:"Claude 4.6 Opus"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"}]},openai:{id:"openai",alias:"openai",format:"openai",executor:"default",baseUrl:"https://api.openai.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",defaultContextLength:128e3,models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1",unsupportedParams:c},{id:"o1-mini",name:"O1 Mini",unsupportedParams:c},{id:"o1-pro",name:"O1 Pro",unsupportedParams:c},{id:"o3",name:"O3",unsupportedParams:c},{id:"o3-mini",name:"O3 Mini",unsupportedParams:c}]},anthropic:{id:"anthropic",alias:"anthropic",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",defaultContextLength:2e5,headers:{"Anthropic-Version":"2023-06-01"},models:[{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-sonnet-4-6-20251031",name:"Claude Sonnet 4.6 (Dated)"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-opus-4-6-20251031",name:"Claude Opus 4.6 (Dated)"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}]},"opencode-go":{id:"opencode-go",alias:"opencode-go",format:"openai",executor:"opencode",baseUrl:"https://opencode.ai/zen/go/v1",testKeyBaseUrl:"https://opencode.ai/zen/v1",authType:"apikey",authHeader:"Authorization",authPrefix:"Bearer",defaultContextLength:2e5,models:[{id:"glm-5",name:"GLM-5"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"minimax-m2.7",name:"MiniMax M2.7",targetFormat:"claude"},{id:"minimax-m2.5",name:"MiniMax M2.5",targetFormat:"claude"}]},"opencode-zen":{id:"opencode-zen",alias:"opencode-zen",format:"openai",executor:"opencode",baseUrl:"https://opencode.ai/zen/v1",modelsUrl:"https://opencode.ai/zen/v1/models",authType:"apikey",authHeader:"Authorization",authPrefix:"Bearer",defaultContextLength:2e5,models:[{id:"minimax-m2.5-free",name:"MiniMax M2.5 Free",contextLength:204800},{id:"big-pickle",name:"Big Pickle",contextLength:2e5},{id:"gpt-5-nano",name:"GPT 5 Nano",contextLength:4e5},{id:"mimo-v2-omni-free",name:"MiMo V2 Omni Free",contextLength:262144},{id:"mimo-v2-pro-free",name:"MiMo V2 Pro Free",contextLength:1048576},{id:"nemotron-3-super-free",name:"Nemotron 3 Super Free",contextLength:1e6},{id:"qwen3.6-plus-free",name:"Qwen 3.6 Plus Free",contextLength:1048576}]},openrouter:{id:"openrouter",alias:"openrouter",format:"openai",executor:"default",baseUrl:"https://openrouter.ai/api/v1/chat/completions",authType:"apikey",authHeader:"bearer",defaultContextLength:128e3,headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"},models:[{id:"auto",name:"Auto (Best Available)"}]},glm:{id:"glm",alias:"glm",format:"claude",executor:"default",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",defaultContextLength:2e5,urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"glm-5.1",name:"GLM 5.1",contextLength:204800},{id:"glm-5",name:"GLM 5"},{id:"glm-5-turbo",name:"GLM 5 Turbo"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)",contextLength:128e3},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-4.5v",name:"GLM 4.5V (Vision)",contextLength:16e3},{id:"glm-4.5",name:"GLM 4.5",contextLength:128e3},{id:"glm-4.5-air",name:"GLM 4.5 Air",contextLength:128e3}]},"bailian-coding-plan":{id:"bailian-coding-plan",alias:"bcp",format:"claude",executor:"default",baseUrl:"https://coding-intl.dashscope.aliyuncs.com/apps/anthropic/v1/messages",chatPath:"/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max (2026-01-23)"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"kimi-k2.5",name:"Kimi K2.5"}]},zai:{id:"zai",alias:"zai",format:"claude",executor:"default",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"glm-5",name:"GLM 5"},{id:"glm-5-turbo",name:"GLM 5 Turbo"}]},kimi:{id:"kimi",alias:"kimi",format:"openai",executor:"default",baseUrl:"https://api.moonshot.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"},{id:"kimi-for-coding",name:"Kimi For Coding"}]},"kimi-coding":{id:"kimi-coding",alias:"kmc",...d,urlSuffix:"?beta=true",authType:"oauth",oauth:{clientIdEnv:"KIMI_CODING_OAUTH_CLIENT_ID",clientIdDefault:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token",authUrl:"https://auth.kimi.com/api/oauth/device_authorization"}},"kimi-coding-apikey":{id:"kimi-coding-apikey",alias:"kmca",...d,authType:"apikey"},kilocode:{id:"kilocode",alias:"kc",format:"openrouter",executor:"openrouter",baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",modelsUrl:"https://api.kilo.ai/api/openrouter/models",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{initiateUrl:"https://api.kilo.ai/api/device-auth/codes",pollUrlBase:"https://api.kilo.ai/api/device-auth/codes"},models:[{id:"openrouter/free",name:"Free Models Router"},{id:"qwen/qwen3-vl-235b-a22b-thinking",name:"Qwen3 VL 235B A22B Thinking"},{id:"qwen/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen/qwen3-vl-30b-a3b-thinking",name:"Qwen3 VL 30B A3B Thinking"},{id:"stepfun/step-3.5-flash:free",name:"StepFun Step 3.5 Flash"},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview"},{id:"openai/gpt-4o-mini",name:"GPT-4o Mini"},{id:"openai/gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"openai/gpt-5-nano",name:"GPT-5 Nano"},{id:"openai/gpt-5-mini",name:"GPT-5 Mini"},{id:"anthropic/claude-3-haiku",name:"Claude 3 Haiku"},{id:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"deepseek/deepseek-chat-v3.1",name:"DeepSeek V3.1"},{id:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-scout",name:"Llama 4 Scout"},{id:"meta-llama/llama-4-maverick",name:"Llama 4 Maverick"},{id:"qwen/qwen3-8b",name:"Qwen3 8B"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"qwen/qwen3-coder",name:"Qwen3 Coder 480B"},{id:"qwen/qwq-32b",name:"QwQ 32B"},{id:"mistralai/mistral-small-24b-instruct-2501",name:"Mistral Small 3"},{id:"mistralai/mistral-7b-instruct",name:"Mistral 7B"},{id:"x-ai/grok-code-fast-1",name:"Grok Code Fast 1"},{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"}],passthroughModels:!0},cline:{id:"cline",alias:"cl",format:"openai",executor:"openai",baseUrl:"https://api.cline.bot/api/v1/chat/completions",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh",authUrl:"https://api.cline.bot/api/v1/auth/authorize"},extraHeaders:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},models:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"}],passthroughModels:!0},minimax:{id:"minimax",alias:"minimax",format:"claude",executor:"default",baseUrl:"https://api.minimax.io/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"minimax-m2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.7",name:"MiniMax M2.7 (Legacy Alias)"},{id:"minimax-m2.7-highspeed",name:"MiniMax M2.7 Highspeed"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5 (Legacy Alias)"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",format:"claude",executor:"default",baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"minimax-m2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.7",name:"MiniMax M2.7 (Legacy Alias)"},{id:"minimax-m2.7-highspeed",name:"MiniMax M2.7 Highspeed"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5 (Legacy Alias)"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},alicode:{id:"alicode",alias:"alicode",format:"openai",executor:"default",baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}]},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",format:"openai",executor:"default",baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}]},deepseek:{id:"deepseek",alias:"ds",format:"openai",executor:"default",baseUrl:"https://api.deepseek.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}]},groq:{id:"groq",alias:"groq",format:"openai",executor:"default",baseUrl:"https://api.groq.com/openai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}]},blackbox:{id:"blackbox",alias:"bb",format:"openai",executor:"default",baseUrl:"https://api.blackbox.ai/v1/chat/completions",modelsUrl:"https://api.blackbox.ai/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"blackboxai",name:"Blackbox AI"},{id:"blackboxai-pro",name:"Blackbox AI Pro"}]},xai:{id:"xai",alias:"xai",format:"openai",executor:"default",baseUrl:"https://api.x.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"grok-4-fast-non-reasoning",name:"Grok 4 Fast"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-4-1-fast-non-reasoning",name:"Grok 4.1 Fast"},{id:"grok-4-1-fast-reasoning",name:"Grok 4.1 Fast Reasoning"},{id:"grok-4-0709",name:"Grok 4 (0709)"},{id:"grok-4",name:"Grok 4"},{id:"grok-3",name:"Grok 3"},{id:"grok-3-mini",name:"Grok 3 Mini"}]},mistral:{id:"mistral",alias:"mistral",format:"openai",executor:"default",baseUrl:"https://api.mistral.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}]},perplexity:{id:"perplexity",alias:"pplx",format:"openai",executor:"default",baseUrl:"https://api.perplexity.ai/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}]},together:{id:"together",alias:"together",format:"openai",executor:"default",baseUrl:"https://api.together.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",name:"Llama 3.3 70B Turbo (🆓 Free)"},{id:"meta-llama/Llama-Vision-Free",name:"Llama Vision (🆓 Free)"},{id:"deepseek-ai/DeepSeek-R1-Distill-Llama-70B-Free",name:"DeepSeek R1 Distill 70B (🆓 Free)"},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}]},fireworks:{id:"fireworks",alias:"fireworks",format:"openai",executor:"default",baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}]},cerebras:{id:"cerebras",alias:"cerebras",format:"openai",executor:"default",baseUrl:"https://api.cerebras.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}]},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",format:"openai",executor:"default",baseUrl:"https://ollama.com/v1/chat/completions",modelsUrl:"https://ollama.com/api/tags",authType:"apikey",authHeader:"bearer",models:[{id:"gemma3:27b",name:"Gemma 3 27B"},{id:"llama3.3:70b",name:"Llama 3.3 70B"},{id:"qwen3:72b",name:"Qwen3 72B"},{id:"devstral:24b",name:"Devstral 24B"},{id:"deepseek-r2:671b",name:"DeepSeek R2 671B"},{id:"phi4:14b",name:"Phi 4 14B"},{id:"mistral-small3.2:24b",name:"Mistral Small 3.2 24B"}],passthroughModels:!0},cohere:{id:"cohere",alias:"cohere",format:"openai",executor:"default",baseUrl:"https://api.cohere.com/v2/chat",authType:"apikey",authHeader:"bearer",models:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}]},nvidia:{id:"nvidia",alias:"nvidia",format:"openai",executor:"default",baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-oss-120b",name:"GPT OSS 120B",toolCalling:!1},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B (OpenAI Prefix)",toolCalling:!1},{id:"meta/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B (NVIDIA Prefix)"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"deepseek-ai/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"},{id:"nvidia/llama-3.1-70b-instruct",name:"Llama 3.1 70B"},{id:"nvidia/llama-3.1-405b-instruct",name:"Llama 3.1 405B"}]},nebius:{id:"nebius",alias:"nebius",format:"openai",executor:"default",baseUrl:"https://api.tokenfactory.nebius.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}]},siliconflow:{id:"siliconflow",alias:"siliconflow",format:"openai",executor:"default",baseUrl:"https://api.siliconflow.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}]},hyperbolic:{id:"hyperbolic",alias:"hyp",format:"openai",executor:"default",baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}]},huggingface:{id:"huggingface",alias:"hf",format:"openai",executor:"default",baseUrl:"https://router.huggingface.co/hf-inference/models/meta-llama/Meta-Llama-3.1-70B-Instruct/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Meta-Llama-3.1-70B-Instruct",name:"Llama 3.1 70B Instruct"},{id:"meta-llama/Meta-Llama-3.1-8B-Instruct",name:"Llama 3.1 8B Instruct"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"mistralai/Mistral-7B-Instruct-v0.3",name:"Mistral 7B v0.3"},{id:"microsoft/Phi-3.5-mini-instruct",name:"Phi-3.5 Mini"}]},synthetic:{id:"synthetic",alias:"synthetic",format:"openai",executor:"default",baseUrl:"https://api.synthetic.new/openai/v1/chat/completions",modelsUrl:"https://api.synthetic.new/openai/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"hf:nvidia/Kimi-K2.5-NVFP4",name:"Kimi K2.5 (NVFP4)"},{id:"hf:MiniMaxAI/MiniMax-M2.5",name:"MiniMax M2.5"},{id:"hf:zai-org/GLM-4.7-Flash",name:"GLM 4.7 Flash"},{id:"hf:zai-org/GLM-4.7",name:"GLM 4.7"},{id:"hf:moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"hf:deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"}],passthroughModels:!0},"kilo-gateway":{id:"kilo-gateway",alias:"kg",format:"openai",executor:"default",baseUrl:"https://api.kilo.ai/api/gateway/chat/completions",modelsUrl:"https://api.kilo.ai/api/gateway/models",authType:"apikey",authHeader:"bearer",models:[{id:"kilo-auto/frontier",name:"Kilo Auto Frontier"},{id:"kilo-auto/balanced",name:"Kilo Auto Balanced"},{id:"kilo-auto/free",name:"Kilo Auto Free"},{id:"nvidia/nemotron-3-super-120b-a12b:free",name:"Nemotron 3 Super 120B (Free)"},{id:"minimax/minimax-m2.5:free",name:"MiniMax M2.5 (Free)"},{id:"arcee-ai/trinity-large-preview:free",name:"Trinity Large Preview (Free)"}],passthroughModels:!0},vertex:{id:"vertex",alias:"vertex",format:"gemini",executor:"vertex",baseUrl:"https://us-central1-aiplatform.googleapis.com/v1/projects",urlBuilder:(a,b,c)=>`https://generativelanguage.googleapis.com/v1beta/models/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"bearer",models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview (Vertex)"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview (Vertex)"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview (Vertex)"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Vertex)"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash (Vertex)"},{id:"gemini-2.0-flash-thinking-exp",name:"Gemini 2.0 Flash Thinking Exp (Vertex)"},{id:"gemma-2-27b-it",name:"Gemma 2 27B (Vertex)"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 (Vertex Partner)"},{id:"qwen3-next-80b",name:"Qwen3 Next 80B (Vertex Partner)"},{id:"glm-5",name:"GLM-5 (Vertex Partner)"},{id:"claude-opus-4-5@20251101",name:"Claude Opus 4.5 (Vertex)"},{id:"claude-sonnet-4-5@20251101",name:"Claude Sonnet 4.5 (Vertex)"}]},alibaba:{id:"alibaba",alias:"ali",format:"openai",executor:"default",baseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions",modelsUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"qwen-max",name:"Qwen Max"},{id:"qwen-max-2025-01-25",name:"Qwen Max (2025-01-25)"},{id:"qwen-plus",name:"Qwen Plus"},{id:"qwen-plus-2025-07-14",name:"Qwen Plus (2025-07-14)"},{id:"qwen-turbo",name:"Qwen Turbo"},{id:"qwen-turbo-2025-11-01",name:"Qwen Turbo (2025-11-01)"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"qwq-plus",name:"QwQ Plus (Reasoning)"},{id:"qwq-32b",name:"QwQ 32B"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"qwen3-235b-a22b",name:"Qwen3 235B A22B"}],passthroughModels:!0},longcat:{id:"longcat",alias:"lc",format:"openai",executor:"default",baseUrl:"https://api.longcat.chat/openai/v1/chat/completions",authType:"apikey",authHeader:"Authorization",authPrefix:"Bearer",models:[{id:"LongCat-Flash-Lite",name:"LongCat Flash-Lite (50M tok/day 🆓)"},{id:"LongCat-Flash-Chat",name:"LongCat Flash-Chat (500K tok/day 🆓)"},{id:"LongCat-Flash-Thinking",name:"LongCat Flash-Thinking (500K tok/day 🆓)"},{id:"LongCat-Flash-Thinking-2601",name:"LongCat Flash-Thinking-2601 (🆓)"},{id:"LongCat-Flash-Omni-2603",name:"LongCat Flash-Omni-2603 (🆓)"}]},pollinations:{id:"pollinations",alias:"pol",format:"openai",executor:"pollinations",baseUrl:"https://text.pollinations.ai/openai/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"openai",name:"GPT-5 via Pollinations (🆓)"},{id:"claude",name:"Claude via Pollinations (🆓)"},{id:"gemini",name:"Gemini via Pollinations (🆓)"},{id:"deepseek",name:"DeepSeek V3 via Pollinations (🆓)"},{id:"llama",name:"Llama 4 via Pollinations (🆓)"},{id:"mistral",name:"Mistral via Pollinations (🆓)"}]},puter:{id:"puter",alias:"pu",format:"openai",executor:"puter",baseUrl:"https://api.puter.com/puterai/openai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o-mini",name:"GPT-4o Mini (🆓 Puter)"},{id:"gpt-4o",name:"GPT-4o (Puter)"},{id:"gpt-4.1",name:"GPT-4.1 (Puter)"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini (Puter)"},{id:"gpt-5-nano",name:"GPT-5 Nano (Puter)"},{id:"gpt-5-mini",name:"GPT-5 Mini (Puter)"},{id:"gpt-5",name:"GPT-5 (Puter)"},{id:"o3-mini",name:"OpenAI o3-mini (Puter)"},{id:"o3",name:"OpenAI o3 (Puter)"},{id:"o4-mini",name:"OpenAI o4-mini (Puter)"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5 (Puter)"},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5 (Puter)"},{id:"claude-opus-4-5",name:"Claude Opus 4.5 (Puter)"},{id:"claude-sonnet-4",name:"Claude Sonnet 4 (Puter)"},{id:"claude-opus-4",name:"Claude Opus 4 (Puter)"},{id:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash (Puter)"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash (Puter)"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro (Puter)"},{id:"google/gemini-3-flash",name:"Gemini 3 Flash (Puter)"},{id:"google/gemini-3-pro",name:"Gemini 3 Pro (Puter)"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat (Puter)"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1 (Puter)"},{id:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2 (Puter)"},{id:"x-ai/grok-3",name:"Grok 3 (Puter)"},{id:"x-ai/grok-3-mini",name:"Grok 3 Mini (Puter)"},{id:"x-ai/grok-4",name:"Grok 4 (Puter)"},{id:"x-ai/grok-4-fast",name:"Grok 4 Fast (Puter)"},{id:"llama-4-scout",name:"Llama 4 Scout (Puter)"},{id:"llama-4-maverick",name:"Llama 4 Maverick (Puter)"},{id:"llama-3.3-70b-instruct",name:"Llama 3.3 70B (Puter)"},{id:"mistral-small-latest",name:"Mistral Small (Puter)"},{id:"mistral-medium-latest",name:"Mistral Medium (Puter)"},{id:"open-mistral-nemo",name:"Mistral Nemo (Puter)"},{id:"qwen/qwen3-235b-a22b",name:"Qwen3 235B (Puter)"},{id:"qwen/qwen3-32b",name:"Qwen3 32B (Puter)"},{id:"qwen/qwen3-coder",name:"Qwen3 Coder 480B (Puter)"}],passthroughModels:!0},"cloudflare-ai":{id:"cloudflare-ai",alias:"cf",format:"openai",executor:"cloudflare-ai",baseUrl:"https://api.cloudflare.com/client/v4/accounts",authType:"apikey",authHeader:"bearer",models:[{id:"@cf/meta/llama-3.3-70b-instruct",name:"Llama 3.3 70B (🆓 ~150 resp/day)"},{id:"@cf/meta/llama-3.1-8b-instruct",name:"Llama 3.1 8B (🆓)"},{id:"@cf/google/gemma-3-12b-it",name:"Gemma 3 12B (🆓)"},{id:"@cf/mistral/mistral-7b-instruct-v0.2-lora",name:"Mistral 7B (🆓)"},{id:"@cf/qwen/qwen2.5-coder-15b-instruct",name:"Qwen 2.5 Coder 15B (🆓)"},{id:"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",name:"DeepSeek R1 Distill 32B (🆓)"}]},scaleway:{id:"scaleway",alias:"scw",format:"openai",executor:"default",baseUrl:"https://api.scaleway.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"qwen3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B (1M free tok 🆓)"},{id:"llama-3.1-70b-instruct",name:"Llama 3.1 70B (🆓 EU)"},{id:"llama-3.1-8b-instruct",name:"Llama 3.1 8B (🆓 EU)"},{id:"mistral-small-3.2-24b-instruct-2506",name:"Mistral Small 3.2 (🆓 EU)"},{id:"deepseek-v3-0324",name:"DeepSeek V3 (🆓 EU)"},{id:"gpt-oss-120b",name:"GPT-OSS 120B (🆓 EU)"}]},aimlapi:{id:"aimlapi",alias:"aiml",format:"openai",executor:"default",baseUrl:"https://api.aimlapi.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o (via AI/ML API)"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet (via AI/ML API)"},{id:"gemini-1.5-pro",name:"Gemini 1.5 Pro (via AI/ML API)"},{id:"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",name:"Llama 3.1 70B (via AI/ML API)"},{id:"deepseek-chat",name:"DeepSeek Chat (via AI/ML API)"},{id:"mistral-large-latest",name:"Mistral Large (via AI/ML API)"}],passthroughModels:!0}};[..."u">typeof process&&process.env.LOCAL_HOSTNAMES?process.env.LOCAL_HOSTNAMES.split(",").map(a=>a.trim()).filter(Boolean):[]],(()=>{try{let a=new Set;for(let b of Object.values(e))b.passthroughModels&&a.add(b.id);return a}catch{return null}})();let f=new Map;for(let a of Object.values(e))a.alias&&a.alias!==a.id&&f.set(a.alias,a);let g=new Map;for(let a of Object.values(e))for(let b of a.models)b.unsupportedParams&&!g.has(b.id)&&g.set(b.id,b.unsupportedParams);let h=function(){let a={};for(let b of Object.values(e))if(b.models&&b.models.length>0){let c=b.alias||b.id;a[c]||(a[c]=b.models)}return a}(),i=function(){let a={};for(let b of Object.values(e))a[b.id]=b.alias||b.id;return a}();a.s(["PROVIDER_ID_TO_ALIAS",0,i,"PROVIDER_MODELS",0,h,"getModelsByProviderId",0,function(a){return h[i[a]||a]||[]}],911655)},867933,a=>a.a(async(b,c)=>{try{var d=a.i(911655),e=a.i(662073),f=b([e]);[e]=f.then?(await f)():f,Object.entries(e.AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.PROVIDER_MODELS).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),a.s([]),c()}catch(a){c(a)}},!1),817648,a=>a.a(async(b,c)=>{try{var d=a.i(137849),e=a.i(662073),f=a.i(867933),g=b([e,f]);[e,f]=g.then?(await g)():g;let h={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:d.default.version};a.s(["APP_CONFIG",0,h,"THEME_CONFIG",0,{storageKey:"theme",defaultTheme:"system"}]),c()}catch(a){c(a)}},!1),788164,a=>a.a(async(b,c)=>{try{var d=a.i(920226),e=a.i(862435),f=a.i(817648),g=b([f]);[f]=g.then?(await g)():g;let j=(0,d.create)()((0,e.persist)((a,b)=>({theme:f.THEME_CONFIG.defaultTheme,colorTheme:"coral",customColor:"#3b82f6",setTheme:b=>{a({theme:b}),h(b)},setColorTheme:c=>{a({colorTheme:c}),i(c,b().customColor)},setCustomColorTheme:b=>{let c,d,e=(d=(c=(b||"").trim()).startsWith("#")?c:`#${c}`,/^#([0-9a-fA-F]{6})$/.test(d)?d.toLowerCase():"#3b82f6");a({colorTheme:"custom",customColor:e}),i("custom",e)},toggleTheme:()=>{let c=b().theme,d="dark"===c?"light":"dark";a({theme:d}),h(d)},initTheme:()=>{let{theme:a,colorTheme:c,customColor:d}=b();h(a),i(c,d)}}),{name:f.THEME_CONFIG.storageKey}));function h(a){}function i(a,b){}a.s(["COLOR_THEMES",0,{coral:"#e54d5e",blue:"#3b82f6",red:"#ef4444",green:"#22c55e",violet:"#8b5cf6",orange:"#f97316",cyan:"#06b6d4"},"default",0,j]),c()}catch(a){c(a)}},!1),561487,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(788164),g=b([f]);[f]=g.then?(await g)():g,a.s(["ThemeProvider",0,function({children:a}){let{initTheme:b}=(0,f.default)();return(0,e.useEffect)(()=>{b()},[b]),(0,d.jsx)(d.Fragment,{children:a})}]),c()}catch(a){c(a)}},!1)];
|
|
3
3
|
|
|
4
4
|
//# sourceMappingURL=_0oo1f90._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[818819,a=>{"use strict";var b=a.i(930510);a.s(["UsageAnalytics",()=>b.default])},712612,a=>{"use strict";var b=a.i(29198);a.s(["DataTable",()=>b.default])},992962,a=>{"use strict";var b=a.i(198106);a.s(["FilterBar",()=>b.default])},537022,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(442308),h=a.i(292216),i=a.i(294023),j=a.i(609754),k=a.i(712612),l=a.i(992962),m=a.i(240246),n=b([g]);[g]=n.then?(await n)():n;let p=[{name:"contains",labelKey:"evalsStrategyContainsLabel",icon:"search",color:"text-sky-400",bg:"bg-sky-500/10",descriptionKey:"evalsStrategyContainsDescription"},{name:"exact",labelKey:"evalsStrategyExactLabel",icon:"check_circle",color:"text-emerald-400",bg:"bg-emerald-500/10",descriptionKey:"evalsStrategyExactDescription"},{name:"regex",labelKey:"evalsStrategyRegexLabel",icon:"code",color:"text-amber-400",bg:"bg-amber-500/10",descriptionKey:"evalsStrategyRegexDescription"},{name:"custom",labelKey:"evalsStrategyCustomLabel",icon:"tune",color:"text-violet-400",bg:"bg-violet-500/10",descriptionKey:"evalsStrategyCustomDescription"}];function o({t:a}){return(0,d.jsx)(h.Card,{className:"p-0 overflow-hidden",children:(0,d.jsx)("div",{className:"p-6",style:{background:"linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(59, 130, 246, 0.05) 50%, rgba(16, 185, 129, 0.05) 100%)"},children:(0,d.jsxs)("div",{className:"flex items-start gap-4",children:[(0,d.jsx)("div",{className:"p-3 rounded-xl bg-violet-500/10 text-violet-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[28px]",children:"science"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h2",{className:"text-xl font-bold text-text-main mb-1",children:a("modelEvals")}),(0,d.jsx)("p",{className:"text-sm text-text-muted leading-relaxed max-w-2xl",children:a("evalsHeroDescription")}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-4 mt-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-emerald-400",children:"verified"}),a("qualityValidation")]}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-sky-400",children:"compare"}),a("modelComparison")]}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-amber-400",children:"bug_report"}),a("regressionDetection")]}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-violet-400",children:"speed"}),a("latencyBenchmarks")]})]})]})]})})})}a.s(["default",0,function(){let a=(0,e.useTranslations)("usage"),[b,c]=(0,f.useState)([]),[g,n]=(0,f.useState)(null),[q,r]=(0,f.useState)(!0),[s,t]=(0,f.useState)(null),[u,v]=(0,f.useState)({current:0,total:0}),[w,x]=(0,f.useState)({}),[y,z]=(0,f.useState)(""),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),E=(0,m.useNotificationStore)(),F=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/evals");if(a.ok){let b=await a.json();c(Array.isArray(b)?b:b.suites||[])}}catch{}finally{r(!1)}},[]),G=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/keys");if(!a.ok)return;let b=await a.json(),c=b?.keys?.[0]?.key||null;n(c)}catch{}},[]);(0,f.useEffect)(()=>{F(),G()},[F,G]);let H=async a=>{try{let b={"Content-Type":"application/json"};g&&(b.Authorization=`Bearer ${g}`);let c=await fetch("/v1/chat/completions",{method:"POST",headers:b,body:JSON.stringify({model:a.model||"gpt-4o",messages:a.input?.messages||[],max_tokens:512,stream:!1})});if(!c.ok)return`[ERROR: HTTP ${c.status}]`;let d=await c.json();return d.choices?.[0]?.message?.content||"[No content returned]"}catch(a){return`[ERROR: ${a.message}]`}},I=async b=>{let c=b.cases||[];if(0===c.length)return void E.warning(a("notifyNoTestCases"));t(b.id),v({current:0,total:c.length});try{let d={};for(let a=0;a<c.length;a++){v({current:a+1,total:c.length});let b=await H(c[a]);d[c[a].id]=b}let e=await fetch("/api/evals",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({suiteId:b.id,outputs:d})}),f=await e.json();if(x(a=>({...a,[b.id]:f})),f.summary){let{passed:c,failed:d,total:e}=f.summary;0===d?E.success(a("notifyAllCasesPassed",{total:e}),a("notifyEvalTitle",{name:b.name||b.id})):E.warning(a("notifySomeCasesFailed",{passed:c,total:e,failed:d}),a("notifyEvalTitle",{name:b.name||b.id}))}B(b.id)}catch{E.error(a("notifyEvalRunFailed"))}finally{t(null),v({current:0,total:0})}},J=b.filter(a=>!y||a.name?.toLowerCase().includes(y.toLowerCase())||a.id?.toLowerCase().includes(y.toLowerCase())),K=b.reduce((a,b)=>a+(b.cases?.length||b.caseCount||0),0),L=[...new Set(b.flatMap(a=>(a.cases||[]).map(a=>a.model)).filter(Boolean))];if(q)return(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted p-8 animate-pulse",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"science"}),a("evalsLoading")]});if(0===b.length)return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(o,{t:a}),(0,d.jsx)(j.EmptyState,{icon:"science",title:a("noEvalSuitesFound"),description:a("noEvalSuitesDescription")})]});let M=[{key:"caseName",label:a("columnCase")},{key:"status",label:a("columnStatus")},{key:"durationMs",label:a("columnLatency")},{key:"details",label:a("columnDetails")}];return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(o,{t:a}),(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsSuites")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-violet-400",children:b.length})]}),(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsTestCases")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-sky-400",children:K})]}),(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsModels")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-emerald-400",children:L.length})]}),(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsCoverage")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-amber-400",children:a("statsStrategiesCount",{count:p.length})})]})]}),(0,d.jsxs)(h.Card,{className:"p-0 overflow-hidden",children:[(0,d.jsxs)("button",{onClick:()=>D(!C),className:"w-full flex items-center justify-between px-6 py-4 hover:bg-surface/30 transition-colors text-left",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-primary/10 text-primary",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"help"})}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:a("howItWorks")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("howItWorksSubtitle")})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted transition-transform duration-200 ${C?"rotate-180":""}`,children:"expand_more"})]}),C&&(0,d.jsxs)("div",{className:"px-6 pb-6 border-t border-border/10",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-4 rounded-lg bg-violet-500/5 border border-violet-500/10",children:[(0,d.jsx)("div",{className:"w-10 h-10 rounded-full bg-violet-500/20 flex items-center justify-center mb-3",children:(0,d.jsx)("span",{className:"text-lg font-bold text-violet-400",children:"1"})}),(0,d.jsx)("h4",{className:"text-sm font-semibold text-text-main mb-1",children:a("define")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("defineStepDescription")})]}),(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-4 rounded-lg bg-sky-500/5 border border-sky-500/10",children:[(0,d.jsx)("div",{className:"w-10 h-10 rounded-full bg-sky-500/20 flex items-center justify-center mb-3",children:(0,d.jsx)("span",{className:"text-lg font-bold text-sky-400",children:"2"})}),(0,d.jsx)("h4",{className:"text-sm font-semibold text-text-main mb-1",children:a("run")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("runStepDescription")})]}),(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-4 rounded-lg bg-emerald-500/5 border border-emerald-500/10",children:[(0,d.jsx)("div",{className:"w-10 h-10 rounded-full bg-emerald-500/20 flex items-center justify-center mb-3",children:(0,d.jsx)("span",{className:"text-lg font-bold text-emerald-400",children:"3"})}),(0,d.jsx)("h4",{className:"text-sm font-semibold text-text-main mb-1",children:a("evaluate")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("evaluateStepDescription")})]})]}),(0,d.jsxs)("div",{className:"mt-6",children:[(0,d.jsx)("h4",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide mb-3",children:a("evaluationStrategies")}),(0,d.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:p.map(b=>(0,d.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg ${b.bg} border border-transparent`,children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[18px] ${b.color}`,children:b.icon}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:`text-xs font-mono font-semibold ${b.color}`,children:a(b.labelKey)}),(0,d.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:a(b.descriptionKey)})]})]},b.name))})]}),L.length>0&&(0,d.jsxs)("div",{className:"mt-6",children:[(0,d.jsx)("h4",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide mb-3",children:a("modelsUnderTest")}),(0,d.jsx)("div",{className:"flex flex-wrap gap-2",children:L.map(a=>(0,d.jsx)("span",{className:"px-3 py-1.5 rounded-full text-xs font-mono font-medium bg-primary/10 text-primary border border-primary/20",children:a},a))})]})]})]}),(0,d.jsxs)(h.Card,{className:"p-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-violet-500/10 text-violet-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"science"})}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:a("evalSuites")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("evalSuitesHint")})]})]}),(0,d.jsx)(l.FilterBar,{searchValue:y,onSearchChange:z,placeholder:a("searchSuitesPlaceholder"),filters:[],activeFilters:{},onFilterChange:()=>{},children:null}),(0,d.jsx)("div",{className:"flex flex-col gap-3 mt-4",children:J.map(b=>{let c=w[b.id],e=s===b.id,f=A===b.id,g=b.cases?.length||b.caseCount||0,h=[...new Set((b.cases||[]).map(a=>a.model).filter(Boolean))];return(0,d.jsxs)("div",{className:"border border-border/30 rounded-lg overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 cursor-pointer hover:bg-surface/30 transition-colors",onClick:()=>B(f?null:b.id),children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:f?"expand_more":"chevron_right"}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("p",{className:"text-sm font-medium text-text-main",children:b.name||b.id}),c?.summary&&(0,d.jsxs)("span",{className:`px-2 py-0.5 rounded-full text-xs font-semibold ${100===c.summary.passRate?"bg-emerald-500/10 text-emerald-400":c.summary.passRate>=80?"bg-amber-500/10 text-amber-400":"bg-red-500/10 text-red-400"}`,children:[c.summary.passRate,"% ",a("passSuffix")]})]}),(0,d.jsxs)("p",{className:"text-xs text-text-muted",children:[a("casesCount",{count:g}),b.description&&(0,d.jsxs)("span",{className:"ml-1",children:["— ",b.description]})]}),h.length>0&&(0,d.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:h.map(a=>(0,d.jsx)("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-mono text-text-muted bg-black/5 dark:bg-white/5",children:a},a))})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[e&&u.total>0&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("div",{className:"w-24 h-1.5 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden",children:(0,d.jsx)("div",{className:"h-full bg-violet-500 rounded-full transition-all duration-300",style:{width:`${u.current/u.total*100}%`}})}),(0,d.jsxs)("span",{className:"text-xs text-text-muted font-mono tabular-nums",children:[u.current,"/",u.total]})]}),(0,d.jsx)(i.Button,{size:"sm",variant:"primary",onClick:a=>{a.stopPropagation(),I(b)},loading:e,disabled:e,children:e?a("runningProgress",{current:u.current,total:u.total}):a("runEval")})]})]}),f&&(0,d.jsx)("div",{className:"border-t border-border/20 p-4",children:c?.results?(0,d.jsxs)(d.Fragment,{children:[c.summary&&(0,d.jsxs)("div",{className:"flex items-center gap-4 mb-4 p-3 rounded-lg bg-surface/30 border border-border/20",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("span",{className:`text-lg font-bold ${100===c.summary.passRate?"text-emerald-400":c.summary.passRate>=80?"text-amber-400":"text-red-400"}`,children:[c.summary.passRate,"%"]}),(0,d.jsx)("span",{className:"text-xs text-text-muted",children:a("passRate")})]}),(0,d.jsx)("div",{className:"text-xs text-text-muted",children:a("summaryBreakdown",{passed:c.summary.passed,failed:c.summary.failed,total:c.summary.total})}),(0,d.jsx)("div",{className:"flex-1 h-2 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden",children:(0,d.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${c.summary.passRate}%`,background:100===c.summary.passRate?"linear-gradient(90deg, #22c55e, #16a34a)":c.summary.passRate>=80?"linear-gradient(90deg, #f59e0b, #d97706)":"linear-gradient(90deg, #ef4444, #dc2626)"}})})]}),(0,d.jsx)(k.DataTable,{columns:M,data:c.results.map((a,b)=>({...a,id:a.caseId||b})),renderCell:(b,c)=>{if("status"===c.key)return b.passed?(0,d.jsx)("span",{className:"text-emerald-400",children:a("passedIconLabel")}):(0,d.jsx)("span",{className:"text-red-400",children:a("failedIconLabel")});if("durationMs"===c.key)return(0,d.jsx)("span",{className:"text-text-muted text-xs font-mono",children:null!=b.durationMs?`${b.durationMs}ms`:"—"});if("details"===c.key){let c=b.details||{};return(0,d.jsx)("span",{className:"text-text-muted text-xs truncate max-w-[300px] block",children:String(c.searchTerm?a("detailsContains",{term:c.searchTerm}):c.pattern?a("detailsRegex",{pattern:c.pattern}):c.expected?a("detailsExpected",{expected:String(c.expected).slice(0,50)}):b.error||"—")})}return(0,d.jsx)("span",{className:"text-sm text-text-main",children:b[c.key]||"—"})},maxHeight:"400px",emptyMessage:a("noResultsYet")})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:"checklist"}),(0,d.jsx)("span",{className:"text-xs text-text-muted font-medium",children:a("testCasesCount",{count:(b.cases||[]).length})})]}),(0,d.jsx)(k.DataTable,{columns:[{key:"name",label:a("columnCase")},{key:"model",label:a("columnModel")},{key:"strategy",label:a("columnStrategy")},{key:"expected",label:a("columnExpected")}],data:(b.cases||[]).map((a,b)=>({id:a.id||b,name:a.name,model:a.model||"—",strategy:a.expected?.strategy||"—",expected:a.expected?.value?String(a.expected.value).slice(0,80):"—"})),renderCell:(a,b)=>{if("strategy"===b.key){let b=p.find(b=>b.name===a.strategy);return(0,d.jsx)("span",{className:`text-xs font-mono font-semibold ${b?.color||"text-text-muted"}`,children:a.strategy})}return"model"===b.key?(0,d.jsx)("span",{className:"text-xs font-mono text-primary/80",children:a.model}):"expected"===b.key?(0,d.jsx)("span",{className:"text-text-muted text-xs font-mono truncate max-w-[300px] block",children:a.expected}):(0,d.jsx)("span",{className:"text-sm text-text-main",children:a[b.key]||"—"})},maxHeight:"400px",emptyMessage:a("noTestCasesDefined")}),(0,d.jsxs)("p",{className:"text-xs text-text-muted mt-3 flex items-center gap-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"info"}),a("runEvalHint")]})]})})]},b.id)})})]})]})}]),c()}catch(a){c(a)}},!1),610254,a=>{"use strict";var b=a.i(187924),c=a.i(572131);function d({icon:a,label:c,value:e,sub:f}){return(0,b.jsxs)("div",{className:"card p-4 flex flex-col gap-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-text-muted text-sm",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:a}),c]}),(0,b.jsx)("div",{className:"text-2xl font-bold text-text",children:e}),f&&(0,b.jsx)("div",{className:"text-xs text-text-muted",children:f})]})}function e({provider:a,count:c,total:d,costUsd:f}){let g=d>0?Math.round(c/d*100):0;return(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsxs)("div",{className:"flex justify-between text-sm",children:[(0,b.jsx)("span",{className:"font-medium text-text",children:a}),(0,b.jsxs)("span",{className:"text-text-muted",children:[c," queries · $",f.toFixed(4)]})]}),(0,b.jsx)("div",{className:"h-2 rounded-full bg-bg-muted overflow-hidden",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:`${g}%`}})}),(0,b.jsxs)("div",{className:"text-xs text-text-muted text-right",children:[g,"%"]})]})}a.s(["default",0,function(){let[a,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null);if((0,c.useEffect)(()=>{fetch("/api/v1/search/analytics").then(a=>a.json()).then(a=>{f(a),h(!1)}).catch(a=>{j(a.message),h(!1)})},[]),g)return(0,b.jsxs)("div",{className:"flex items-center justify-center py-16 text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined animate-spin mr-2",children:"progress_activity"}),"Loading search analytics…"]});if(i||!a)return(0,b.jsxs)("div",{className:"card p-6 text-center text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[32px] mb-2 block",children:"search_off"}),i||"No search data available yet.",(0,b.jsx)("p",{className:"text-xs mt-2",children:"Search requests will appear here after the first search via /v1/search."})]});let k=Object.entries(a.byProvider).sort(([,a],[,b])=>b.count-a.count);return(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[(0,b.jsx)(d,{icon:"manage_search",label:"Total Searches",value:a.total.toLocaleString(),sub:`${a.today} today`}),(0,b.jsx)(d,{icon:"cached",label:"Cache Hit Rate",value:`${a.cacheHitRate}%`,sub:`${a.cached} cached requests`}),(0,b.jsx)(d,{icon:"attach_money",label:"Total Cost",value:`$${a.totalCostUsd.toFixed(4)}`,sub:"search API costs"}),(0,b.jsx)(d,{icon:"timer",label:"Avg Response",value:`${a.avgDurationMs}ms`,sub:a.errors>0?`${a.errors} errors`:"No errors"})]}),k.length>0&&(0,b.jsxs)("div",{className:"card p-5",children:[(0,b.jsxs)("h3",{className:"font-semibold text-text mb-4 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"hub"}),"Provider Breakdown"]}),(0,b.jsx)("div",{className:"flex flex-col gap-4",children:k.map(([c,d])=>(0,b.jsx)(e,{provider:c,count:d.count,total:a.total,costUsd:d.costUsd},c))})]}),0===a.total&&(0,b.jsxs)("div",{className:"card p-8 text-center text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[48px] mb-3 block text-primary opacity-50",children:"travel_explore"}),(0,b.jsx)("p",{className:"font-medium text-text",children:"No searches yet"}),(0,b.jsxs)("p",{className:"text-sm mt-1",children:["Use ",(0,b.jsx)("code",{className:"bg-bg-muted px-1 rounded",children:"POST /v1/search"})," to start routing web searches."]})]}),(0,b.jsxs)("div",{className:"text-xs text-text-muted border border-border rounded-lg p-3 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[16px] text-green-500 mt-0.5",children:"check_circle"}),(0,b.jsxs)("span",{children:[(0,b.jsx)("strong",{children:"Free tier available:"})," Serper (2,500/mo), Brave (2,000/mo), Exa (1,000/mo), Tavily (1,000/mo) — total 6,500+ free searches/month with automatic failover."]})]})]})}])},510290,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(442308),g=a.i(292216),h=a.i(415925),i=b([f]);[f]=i.then?(await i)():i,a.s(["default",0,function(){let[a,b]=(0,e.useState)(null),[c,f]=(0,e.useState)(!0);if((0,h.useTranslations)("analytics"),(0,e.useEffect)(()=>{fetch("/api/analytics/diversity").then(a=>a.json()).then(a=>{b(a),f(!1)}).catch(a=>{console.error(a),f(!1)})},[]),c||!a)return(0,d.jsx)(g.Card,{className:"p-5 flex flex-col justify-center items-center h-full min-h-[200px]",children:(0,d.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})});let i=Math.round(100*(a.score||0)),j="text-green-500",k="bg-green-500",l="Healthy Distribution";return i<40?(j="text-red-500",k="bg-red-500",l="High Vendor Lock-in Risk"):i<70&&(j="text-amber-500",k="bg-amber-500",l="Moderate Distribution"),(0,d.jsxs)(g.Card,{className:"p-5 flex flex-col h-full bg-[var(--card-bg,#1e1e2e)] relative overflow-hidden group",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px] text-cyan-400",children:"pie_chart"}),(0,d.jsx)("h3",{className:"font-semibold text-[var(--text-primary,#fff)] flex-1",children:"Provider Diversity Score"}),(0,d.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-md border ${k.replace("bg-","border-").replace("500","500/20")} ${k.replace("bg-","bg-").replace("500","500/10")} ${j}`,children:"Shannon Entropy"})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between mt-2 mb-6",children:[(0,d.jsxs)("div",{className:"flex flex-col",children:[(0,d.jsxs)("span",{className:`text-4xl font-bold tabular-nums tracking-tight ${j}`,children:[i,"%"]}),(0,d.jsx)("span",{className:"text-sm text-[var(--text-muted,#aaaaaa)] mt-1",children:l})]}),(0,d.jsx)("div",{className:"relative w-20 h-20 flex-shrink-0",children:(0,d.jsxs)("svg",{className:"w-full h-full transform -rotate-90",viewBox:"0 0 36 36",children:[(0,d.jsx)("path",{className:"text-[var(--border,#333)]",strokeWidth:"4",stroke:"currentColor",fill:"none",d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}),(0,d.jsx)("path",{className:j,strokeWidth:"4",strokeDasharray:`${i}, 100`,stroke:"currentColor",fill:"none",strokeLinecap:"round",d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"})]})})]}),(0,d.jsxs)("div",{className:"space-y-4 flex-1",children:[(0,d.jsx)("p",{className:"text-xs uppercase tracking-wider font-semibold text-[var(--text-muted,#888)]",children:"Provider Share"}),0===Object.keys(a.providers||{}).length?(0,d.jsx)("div",{className:"text-sm text-[var(--text-secondary,#666)] py-2",children:"No recent usage data available."}):(0,d.jsx)("div",{className:"space-y-3",children:Object.entries(a.providers).sort(([,a],[,b])=>b.share-a.share).slice(0,4).map(([a,b])=>(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,d.jsx)("span",{className:"font-medium text-[var(--text-primary,#ddd)] capitalize",children:a}),(0,d.jsxs)("span",{className:"font-mono text-[var(--text-muted,#aaa)]",children:[Math.round(100*b.share),"%"]})]}),(0,d.jsx)("div",{className:"w-full h-1.5 bg-[var(--surface,#333)] rounded-full overflow-hidden",children:(0,d.jsx)("div",{className:`h-full ${k} rounded-full`,style:{width:`${Math.round(100*b.share)}%`}})})]},a))})]}),(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-[var(--border,#333)] flex justify-between text-[11px] text-[var(--text-muted,#777)]",children:[(0,d.jsxs)("span",{children:["Window: ",a.windowSize," reqs"]}),(0,d.jsxs)("span",{children:["Based on Last ",Math.round(a.ttlMs/6e4)," mins"]})]})]})}]),c()}catch(a){c(a)}},!1),46357,a=>{"use strict";var b=a.i(187924),c=a.i(171302);let d=[{value:"1h",label:"1h"},{value:"24h",label:"24h"},{value:"7d",label:"7d"},{value:"30d",label:"30d"}];a.s(["default",0,function({value:a,onChange:e}){return(0,b.jsx)("div",{role:"tablist","aria-label":"Select time range",className:"inline-flex items-center gap-1 rounded-lg bg-black/5 p-1 dark:bg-white/5",children:d.map(d=>{let f=a===d.value;return(0,b.jsx)("button",{type:"button",role:"tab","aria-selected":f,tabIndex:f?0:-1,onClick:()=>e(d.value),className:(0,c.cn)("focus-ring h-9 rounded-md px-4 text-sm font-medium transition-all",f?"bg-primary text-white shadow-sm hover:bg-primary-hover":"text-text-muted hover:bg-black/5 hover:text-text-main dark:hover:bg-white/5"),children:d.label},d.value)})})}])},633851,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(780407),e=a.i(768932),f=a.i(656295),g=a.i(45063),h=a.i(909933),i=a.i(298382),j=a.i(612168),k=a.i(977368),l=a.i(625392),m=a.i(787293),n=a.i(972853),o=a.i(203041),p=a.i(296268),q=a.i(731080),r=["x1","y1","x2","y2","key"],s=["offset"],t=["xAxisId","yAxisId"],u=["xAxisId","yAxisId"];function v(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function w(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?v(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):v(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function x(){return(x=Object.assign.bind()).apply(null,arguments)}function y(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}var z=a=>{var{fill:b}=a;if(!b||"none"===b)return null;var{fillOpacity:d,x:e,y:f,width:g,height:h,ry:i}=a;return c.createElement("rect",{x:e,y:f,ry:i,width:g,height:h,stroke:"none",fill:b,fillOpacity:d,className:"recharts-cartesian-grid-bg"})};function A(a){var{option:b,lineItemProps:d}=a;if(c.isValidElement(b))e=c.cloneElement(b,d);else if("function"==typeof b)e=b(d);else{var e,f,{x1:g,y1:h,x2:i,y2:j,key:k}=d,l=y(d,r),m=null!=(f=(0,n.svgPropertiesNoEvents)(l))?f:{},{offset:o}=m,p=y(m,s);e=c.createElement("line",x({},p,{x1:g,y1:h,x2:i,y2:j,fill:"none",key:k}))}return e}function B(a){var{x:b,width:d,horizontal:e=!0,horizontalPoints:f}=a;if(!e||!f||!f.length)return null;var{xAxisId:g,yAxisId:h}=a,i=y(a,t),j=f.map((a,f)=>{var g=w(w({},i),{},{x1:b,y1:a,x2:b+d,y2:a,key:"line-".concat(f),index:f});return c.createElement(A,{key:"line-".concat(f),option:e,lineItemProps:g})});return c.createElement("g",{className:"recharts-cartesian-grid-horizontal"},j)}function C(a){var{y:b,height:d,vertical:e=!0,verticalPoints:f}=a;if(!e||!f||!f.length)return null;var{xAxisId:g,yAxisId:h}=a,i=y(a,u),j=f.map((a,f)=>{var g=w(w({},i),{},{x1:a,y1:b,x2:a,y2:b+d,key:"line-".concat(f),index:f});return c.createElement(A,{option:e,lineItemProps:g,key:"line-".concat(f)})});return c.createElement("g",{className:"recharts-cartesian-grid-vertical"},j)}function D(a){var{horizontalFill:b,fillOpacity:d,x:e,y:f,width:g,height:h,horizontalPoints:i,horizontal:j=!0}=a;if(!j||!b||!b.length||null==i)return null;var k=i.map(a=>Math.round(a+f-f)).sort((a,b)=>a-b);f!==k[0]&&k.unshift(0);var l=k.map((a,i)=>{var j=k[i+1],l=null==j?f+h-a:j-a;if(l<=0)return null;var m=i%b.length;return c.createElement("rect",{key:"react-".concat(i),y:a,x:e,height:l,width:g,stroke:"none",fill:b[m],fillOpacity:d,className:"recharts-cartesian-grid-bg"})});return c.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},l)}function E(a){var{vertical:b=!0,verticalFill:d,fillOpacity:e,x:f,y:g,width:h,height:i,verticalPoints:j}=a;if(!b||!d||!d.length)return null;var k=j.map(a=>Math.round(a+f-f)).sort((a,b)=>a-b);f!==k[0]&&k.unshift(0);var l=k.map((a,b)=>{var j=k[b+1],l=null==j?f+h-a:j-a;if(l<=0)return null;var m=b%d.length;return c.createElement("rect",{key:"react-".concat(b),x:a,y:g,width:l,height:i,stroke:"none",fill:d[m],fillOpacity:e,className:"recharts-cartesian-grid-bg"})});return c.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},l)}var F=(a,b)=>{var{xAxis:c,width:d,height:e,offset:i}=a;return(0,f.getCoordinatesOfGrid)((0,g.getTicks)(w(w(w({},h.defaultCartesianAxisProps),c),{},{ticks:(0,f.getTicksOfAxis)(c,!0),viewBox:{x:0,y:0,width:d,height:e}})),i.left,i.left+i.width,b)},G=(a,b)=>{var{yAxis:c,width:d,height:e,offset:i}=a;return(0,f.getCoordinatesOfGrid)((0,g.getTicks)(w(w(w({},h.defaultCartesianAxisProps),c),{},{ticks:(0,f.getTicksOfAxis)(c,!0),viewBox:{x:0,y:0,width:d,height:e}})),i.top,i.top+i.height,b)},H={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:q.DefaultZIndexes.grid};function I(a){var b=(0,i.useChartWidth)(),f=(0,i.useChartHeight)(),g=(0,i.useOffsetInternal)(),h=w(w({},(0,m.resolveDefaultProps)(a,H)),{},{x:(0,e.isNumber)(a.x)?a.x:g.left,y:(0,e.isNumber)(a.y)?a.y:g.top,width:(0,e.isNumber)(a.width)?a.width:g.width,height:(0,e.isNumber)(a.height)?a.height:g.height}),{xAxisId:n,yAxisId:q,x:r,y:s,width:t,height:u,syncWithTicks:v,horizontalValues:y,verticalValues:A}=h,I=(0,l.useIsPanorama)(),J=(0,k.useAppSelector)(a=>(0,j.selectAxisPropsNeededForCartesianGridTicksGenerator)(a,"xAxis",n,I)),K=(0,k.useAppSelector)(a=>(0,j.selectAxisPropsNeededForCartesianGridTicksGenerator)(a,"yAxis",q,I));if(!(0,o.isPositiveNumber)(t)||!(0,o.isPositiveNumber)(u)||!(0,e.isNumber)(r)||!(0,e.isNumber)(s))return null;var L=h.verticalCoordinatesGenerator||F,M=h.horizontalCoordinatesGenerator||G,{horizontalPoints:N,verticalPoints:O}=h;if((!N||!N.length)&&"function"==typeof M){var P=y&&y.length,Q=M({yAxis:K?w(w({},K),{},{ticks:P?y:K.ticks}):void 0,width:null!=b?b:t,height:null!=f?f:u,offset:g},!!P||v);(0,d.warn)(Array.isArray(Q),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof Q,"]")),Array.isArray(Q)&&(N=Q)}if((!O||!O.length)&&"function"==typeof L){var R=A&&A.length,S=L({xAxis:J?w(w({},J),{},{ticks:R?A:J.ticks}):void 0,width:null!=b?b:t,height:null!=f?f:u,offset:g},!!R||v);(0,d.warn)(Array.isArray(S),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof S,"]")),Array.isArray(S)&&(O=S)}return c.createElement(p.ZIndexLayer,{zIndex:h.zIndex},c.createElement("g",{className:"recharts-cartesian-grid"},c.createElement(z,{fill:h.fill,fillOpacity:h.fillOpacity,x:h.x,y:h.y,width:h.width,height:h.height,ry:h.ry}),c.createElement(D,x({},h,{horizontalPoints:N})),c.createElement(E,x({},h,{verticalPoints:O})),c.createElement(B,x({},h,{offset:g,horizontalPoints:N,xAxis:J,yAxis:K})),c.createElement(C,x({},h,{offset:g,verticalPoints:O,xAxis:J,yAxis:K}))))}I.displayName="CartesianGrid";var J=a.i(935112),K=a.i(320353),L=a.i(298621),M=a.i(603190),N=a.i(676805),O=a.i(952517);function P(){return(P=Object.assign.bind()).apply(null,arguments)}function Q(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function R(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?Q(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):Q(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var S={align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle",labelStyle:{}};function T(a){var{data:b,iconType:d,inactiveColor:e}=a,f=32/6,g=32/3,h=b.inactive?e:b.color,i=null!=d?d:b.type;if("none"===i)return null;if("plainline"===i)return c.createElement("line",{strokeWidth:4,fill:"none",stroke:h,strokeDasharray:function(a){if("object"==typeof a&&null!==a&&"strokeDasharray"in a)return String(a.strokeDasharray)}(b.payload),x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===i)return c.createElement("path",{strokeWidth:4,fill:"none",stroke:h,d:"M0,".concat(16,"h").concat(g,"\n A").concat(f,",").concat(f,",0,1,1,").concat(2*g,",").concat(16,"\n H").concat(32,"M").concat(2*g,",").concat(16,"\n A").concat(f,",").concat(f,",0,1,1,").concat(g,",").concat(16),className:"recharts-legend-icon"});if("rect"===i)return c.createElement("path",{stroke:"none",fill:h,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(c.isValidElement(b.legendIcon)){var j=R({},b);return delete j.legendIcon,c.cloneElement(b.legendIcon,j)}return c.createElement(N.Symbols,{fill:h,cx:16,cy:16,size:32,sizeType:"diameter",type:i})}function U(a){var{payload:b,iconSize:d,layout:e,formatter:f,inactiveColor:g,iconType:h,labelStyle:i}=a,j={x:0,y:0,width:32,height:32},k={display:"horizontal"===e?"inline-block":"block",marginRight:10},l={display:"inline-block",verticalAlign:"middle",marginRight:4};return b.map((b,e)=>{var m=b.formatter||f,n=(0,L.clsx)({"recharts-legend-item":!0,["legend-item-".concat(e)]:!0,inactive:b.inactive});if("none"===b.type)return null;var o="object"==typeof i?R({},i):{};o.color=b.inactive?g:o.color||b.color;var p=m?m(b.value,b,e):b.value;return c.createElement("li",P({className:n,style:k,key:"legend-item-".concat(e)},(0,O.adaptEventsOfChild)(a,b,e)),c.createElement(M.Surface,{width:d,height:d,viewBox:j,style:l,"aria-label":"".concat(b.value," legend icon")},c.createElement(T,{data:b,iconType:h,inactiveColor:g})),c.createElement("span",{className:"recharts-legend-item-text",style:o},p))})}var V=a=>{var b=(0,m.resolveDefaultProps)(a,S),{payload:d,layout:e,align:f}=b;return d&&d.length?c.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===e?f:"left"}},c.createElement(U,P({},b,{payload:d}))):null},W=a.i(363643),X=a.i(324993),Y=a.i(738620),Z=a.i(121402),$=a.i(795272),_=["contextPayload"];function aa(){return(aa=Object.assign.bind()).apply(null,arguments)}function ab(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function ac(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?ab(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):ab(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function ad(a){return a.value}function ae(a){var{contextPayload:b}=a,d=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,_),e=(0,W.getUniqPayload)(b,a.payloadUniqBy,ad),f=ac(ac({},d),{},{payload:e});return c.isValidElement(a.content)?c.cloneElement(a.content,f):"function"==typeof a.content?c.createElement(a.content,f):c.createElement(V,f)}function af(a){var b=(0,k.useAppDispatch)();return(0,c.useEffect)(()=>{b((0,Z.setLegendSettings)(a))},[b,a]),null}function ag(a){var b=(0,k.useAppDispatch)();return(0,c.useEffect)(()=>(b((0,Z.setLegendSize)(a)),()=>{b((0,Z.setLegendSize)({width:0,height:0}))}),[b,a]),null}var ah={align:"center",iconSize:14,inactiveColor:"#ccc",itemSorter:"value",layout:"horizontal",verticalAlign:"bottom"},ai=c.memo(function(a){var b,d=(0,m.resolveDefaultProps)(a,ah),e=(0,k.useAppSelector)(X.selectLegendPayload),f=(0,K.useLegendPortal)(),g=(0,i.useMargin)(),{width:h,height:j,wrapperStyle:l,portal:n}=d,[o,p]=(0,Y.useElementOffset)([e]),q=(0,i.useChartWidth)(),r=(0,i.useChartHeight)();if(null==q||null==r)return null;var s=q-((null==g?void 0:g.left)||0)-((null==g?void 0:g.right)||0),t=(b=d.layout,"vertical"===b&&null!=j?{height:j}:"horizontal"===b?{width:h||s}:null),u=n?l:ac(ac({position:"absolute",width:(null==t?void 0:t.width)||h||"auto",height:(null==t?void 0:t.height)||j||"auto"},function(a,b,c,d,e,f){var g,h,{layout:i,align:j,verticalAlign:k}=b;return a&&(void 0!==a.left&&null!==a.left||void 0!==a.right&&null!==a.right)||(g="center"===j&&"vertical"===i?{left:((d||0)-f.width)/2}:"right"===j?{right:c&&c.right||0}:{left:c&&c.left||0}),a&&(void 0!==a.top&&null!==a.top||void 0!==a.bottom&&null!==a.bottom)||(h="middle"===k?{top:((e||0)-f.height)/2}:"bottom"===k?{bottom:c&&c.bottom||0}:{top:c&&c.top||0}),ac(ac({},g),h)}(l,d,g,q,r,o)),l),v=null!=n?n:f;if(null==v||null==e)return null;var w=c.createElement("div",{className:"recharts-legend-wrapper",style:u,ref:p},c.createElement(af,{layout:d.layout,align:d.align,verticalAlign:d.verticalAlign,itemSorter:d.itemSorter}),!n&&c.createElement(ag,{width:o.width,height:o.height}),c.createElement(ae,aa({},d,t,{margin:g,chartWidth:q,chartHeight:r,contextPayload:e})));return(0,J.createPortal)(w,v)},$.propsAreEqual);ai.displayName="Legend";var aj=a.i(677924),ak=a.i(600554),al=a.i(931760),am=["axis"],an=(0,c.forwardRef)((a,b)=>c.createElement(al.CartesianChart,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:am,tooltipPayloadSearcher:ak.arrayTooltipSearcher,categoricalChartProps:a,ref:b})),ao=a.i(48662),ap=a.i(659854),aq=a.i(758042),ar=a.i(994222),as=a.i(436595),at=a.i(147089),au=a.i(46357);let av={"1h":"Last hour","24h":"Last 24 hours","7d":"Last 7 days","30d":"Last 30 days"},aw=["var(--color-primary)","var(--color-accent)","var(--color-success)","var(--color-warning)","var(--color-error)","var(--color-text-muted)"];function ax(a,b){let c=new Date(a);return Number.isNaN(c.getTime())?a:"1h"===b||"24h"===b?new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"}).format(c):new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}).format(c)}function ay(a,b){let c=new Date(a);return Number.isNaN(c.getTime())?a:new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"1h"===b||"24h"===b?"2-digit":void 0,minute:"1h"===b||"24h"===b?"2-digit":void 0}).format(c)}function az(a){return`${Math.round(a)}%`}a.s(["default",0,function(){let[a,d]=(0,c.useState)("24h"),[e,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),k=(0,c.useCallback)(async(a,b)=>{h(!0);try{let c=await fetch(`/api/usage/utilization?range=${a}`,{signal:b,cache:"no-store"});if(!c.ok)throw Error("Failed to fetch utilization data");let d=await c.json();f(d),j(null)}catch(a){if(a instanceof DOMException&&"AbortError"===a.name)return;j(a instanceof Error?a.message:"Failed to fetch utilization data"),f(null)}finally{b?.aborted||h(!1)}},[]);(0,c.useEffect)(()=>{let b=new AbortController;return k(a,b.signal),()=>b.abort()},[k,a]);let l=(0,c.useMemo)(()=>{let a=new Map;for(let[b,c]of(e?.providers??[]).entries())a.set(c,aw[b%aw.length]);return a},[e?.providers]),m=(0,c.useMemo)(()=>{if(!e?.data.length)return[];let a=new Map;for(let b of e.data){let c=a.get(b.timestamp)??{timestamp:b.timestamp,label:ax(b.timestamp,e.timeRange)};c[b.provider]=Number(b.remainingPct.toFixed(2)),a.set(b.timestamp,c)}return Array.from(a.entries()).sort(([a],[b])=>new Date(a).getTime()-new Date(b).getTime()).map(([,a])=>a)},[e]),n=(0,c.useMemo)(()=>(function(a){let b=new Map;for(let c of a){let a=b.get(c.provider);(!a||new Date(c.timestamp).getTime()>new Date(a.timestamp).getTime())&&b.set(c.provider,c)}return Array.from(b.values()).sort((a,b)=>b.remainingPct-a.remainingPct)})(e?.data??[]),[e?.data]),o=!!e?.data.length,[p,q]=(0,c.useState)(!1),r=(0,c.useCallback)(()=>{q(!0),j(null),k(a).finally(()=>q(!1))},[a,k]);return(0,b.jsx)("div",{className:"flex flex-col gap-6",children:(0,b.jsx)(as.default,{title:"Provider utilization",subtitle:av[a],icon:"monitoring",action:(0,b.jsx)(au.default,{value:a,onChange:d}),className:"overflow-hidden",children:g&&!o?(0,b.jsxs)("div",{className:"flex min-h-80 items-center justify-center text-sm text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin text-[18px]",children:"progress_activity"}),"Loading utilization data…"]}):i?(0,b.jsxs)("div",{className:"flex min-h-80 flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[32px] text-error",children:"error"}),(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-text-main",children:"Failed to load utilization data"}),(0,b.jsx)("p",{className:"text-sm text-text-muted",children:i})]}),(0,b.jsx)("button",{type:"button",onClick:r,disabled:p,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary-hover disabled:opacity-50 disabled:cursor-not-allowed",children:p?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}),"Retrying…"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"Retry"]})})]}):o?(0,b.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,b.jsx)("div",{className:"h-80 w-full rounded-xl border border-black/5 bg-black/[0.02] px-3 py-4 dark:border-white/5 dark:bg-white/[0.02]",children:(0,b.jsx)(ao.ResponsiveContainer,{width:"100%",height:"100%",children:(0,b.jsxs)(an,{data:m,margin:{top:8,right:16,bottom:0,left:0},children:[(0,b.jsx)(I,{stroke:"var(--color-border)",strokeDasharray:"3 3",vertical:!1}),(0,b.jsx)(aq.XAxis,{dataKey:"timestamp",tickFormatter:b=>ax(String(b),a),tick:{fill:"var(--color-text-muted)",fontSize:12},axisLine:{stroke:"var(--color-border)"},tickLine:{stroke:"var(--color-border)"},minTickGap:24}),(0,b.jsx)(ar.YAxis,{domain:[0,100],tickFormatter:az,tick:{fill:"var(--color-text-muted)",fontSize:12},axisLine:{stroke:"var(--color-border)"},tickLine:{stroke:"var(--color-border)"},width:44}),(0,b.jsx)(ap.Tooltip,{labelFormatter:b=>ay(String(b),a),formatter:(a,b)=>[az(a),b],contentStyle:{backgroundColor:"var(--color-surface)",borderColor:"var(--color-border)",borderRadius:12,color:"var(--color-text-main)",boxShadow:"var(--shadow-soft)"},itemStyle:{color:"var(--color-text-main)"},labelStyle:{color:"var(--color-text-main)",fontWeight:600}}),(0,b.jsx)(ai,{}),e?.providers.map(a=>(0,b.jsx)(aj.Line,{type:"monotone",dataKey:a,name:a,stroke:l.get(a)??"var(--color-primary)",strokeWidth:2.5,dot:!1,activeDot:{r:4,strokeWidth:0},connectNulls:!0},a))]})})}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3",children:n.map(c=>{let d=c.remainingPct<=20;return(0,b.jsxs)(as.default.Section,{className:"flex h-full flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("div",{className:"flex h-11 w-11 items-center justify-center rounded-xl border border-black/5 bg-surface text-text-main dark:border-white/5",children:(0,b.jsx)(at.default,{providerId:c.provider,size:22})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-sm font-semibold text-text-main",children:c.provider}),(0,b.jsx)("p",{className:"text-xs text-text-muted",children:"Latest quota snapshot"})]})]}),(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2.5 py-1 text-xs font-medium ${c.isExhausted?"bg-error/10 text-error":d?"bg-warning/10 text-warning":"bg-success/10 text-success"}`,children:c.isExhausted?"Exhausted":d?"Low":"Healthy"})]}),(0,b.jsxs)("div",{className:"flex items-end justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("p",{className:"text-3xl font-bold text-text-main",children:[c.remainingPct.toFixed(+(c.remainingPct<10)),"%"]}),(0,b.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Remaining capacity"})]}),(0,b.jsxs)("div",{className:"text-right text-xs text-text-muted",children:[(0,b.jsx)("p",{children:ay(c.timestamp,a)}),(0,b.jsx)("p",{className:"mt-1 uppercase tracking-[0.14em]",children:c.windowKey})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-black/5 dark:bg-white/5",children:(0,b.jsx)("div",{className:`h-full rounded-full transition-all ${c.isExhausted?"bg-error":d?"bg-warning":"bg-primary"}`,style:{width:`${Math.max(c.remainingPct,0)}%`}})}),(0,b.jsxs)("div",{className:"flex items-center justify-between text-xs text-text-muted",children:[(0,b.jsx)("span",{children:"0%"}),(0,b.jsx)("span",{children:"Remaining quota"}),(0,b.jsx)("span",{children:"100%"})]})]})]},c.provider)})})]}):(0,b.jsxs)("div",{className:"flex min-h-80 flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[40px] text-text-muted/70",children:"timeline"}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-text-main",children:"No utilization data available"}),(0,b.jsx)("p",{className:"max-w-md text-sm text-text-muted",children:"Provider quota snapshots will appear here after utilization data is collected."})]}),(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-text-main",children:"Getting started"}),(0,b.jsxs)("ul",{className:"mt-2 text-left text-xs text-text-muted",children:[(0,b.jsxs)("li",{className:"flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsxs)("span",{children:["Connect providers via OAuth or API keys in ",(0,b.jsx)("strong",{children:"Providers"})]})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Enable quota tracking by using the provider in a combo or direct request"})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Data will appear automatically as quota snapshots are collected"})]})]})]})]})})})}],633851)},230098,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(436595),e=a.i(497160),f=a.i(831097),g=a.i(46357),h=a.i(171302);function i(a,b=0){return`${a.toFixed(b)}%`}function j(a){return i(100*a,1)}function k({icon:a,label:c,value:d,subValue:e}){return(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs font-semibold uppercase tracking-wider text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:a}),c]}),(0,b.jsx)("div",{className:"mt-2 text-2xl font-semibold text-text-main",children:d}),e?(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e}):null]})}function l({label:a,value:c,meta:d}){let e=`${Math.max(100*c,6*(c>0))}%`;return(0,b.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border border-black/5 bg-black/[0.02] p-3 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 text-sm",children:[(0,b.jsx)("span",{className:"truncate font-medium text-text-main",children:a}),(0,b.jsx)("span",{className:"shrink-0 text-xs text-text-muted",children:d})]}),(0,b.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-black/5 dark:bg-white/5",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:e}})})]})}function m({combo:a}){var f;let g=(0,c.useMemo)(()=>[...a.usageSkew.modelDistribution].sort((a,b)=>b.requestShare-a.requestShare),[a.usageSkew.modelDistribution]);return(0,b.jsxs)(d.default,{className:"overflow-hidden p-0",children:[(0,b.jsx)("div",{className:"border-b border-black/5 px-6 py-5 dark:border-white/5",children:(0,b.jsxs)("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("h3",{className:"text-lg font-semibold text-text-main",children:a.comboName}),(0,b.jsx)(e.default,{variant:"primary",size:"sm",children:a.strategy})]}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-text-muted",children:[a.models.length," models across ",a.quotaHealth.providers.length," providers"]})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3 lg:min-w-[420px]",children:[(0,b.jsx)(k,{icon:"battery_status_good",label:"Worst quota left",value:i(a.quotaHealth.worstRemainingPct)}),(0,b.jsx)(k,{icon:"balance",label:"Usage skew",value:a.usageSkew.giniCoefficient.toFixed(2),subValue:"Gini coefficient"}),(0,b.jsx)(k,{icon:"bolt",label:"Success rate",value:i(100*a.performance.successRate,1),subValue:`${a.performance.totalRequests.toLocaleString()} requests`})]})]})}),(0,b.jsxs)("div",{className:"grid gap-6 px-6 py-5 xl:grid-cols-[1.1fr_1fr_0.95fr]",children:[(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Quota health"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Lowest remaining quota across providers with short trend signals."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-3",children:a.quotaHealth.providers.map(a=>{var c;let d="improving"===(c=a.trend)?{icon:"trending_up",label:"Improving",variant:"success"}:"declining"===c?{icon:"trending_down",label:"Declining",variant:"warning"}:{icon:"trending_flat",label:"Stable",variant:"default"},f=`${Math.max(a.remainingPct,6*(a.remainingPct>0))}%`;return(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-text-main",children:a.provider}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Remaining quota ",i(a.remainingPct,1)]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e.default,{variant:d.variant,size:"sm",icon:d.icon,children:d.label}),a.isExhausted?(0,b.jsx)(e.default,{variant:"error",size:"sm",children:"Exhausted"}):null]})]}),(0,b.jsx)("div",{className:"mt-3 h-2 overflow-hidden rounded-full bg-black/5 dark:bg-white/5",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:f}})})]},a.provider)})})]}),(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Usage skew"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Model request share and token share within this combo."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-3",children:g.map(a=>(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium text-text-main",children:a.model}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Request share ",j(a.requestShare)," · Token share"," ",j(a.tokenShare)]})]}),(0,b.jsx)(e.default,{size:"sm",children:j(a.requestShare)})]}),(0,b.jsxs)("div",{className:"mt-3 grid gap-2",children:[(0,b.jsx)(l,{label:"Requests",value:a.requestShare,meta:j(a.requestShare)}),(0,b.jsx)(l,{label:"Tokens",value:a.tokenShare,meta:j(a.tokenShare)})]})]},a.model))})]}),(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Performance"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Reliability and throughput for routed combo traffic."})]}),(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-3 xl:grid-cols-1",children:[(0,b.jsx)(k,{icon:"timer",label:"Avg latency",value:(f=a.performance.avgLatencyMs,`${Math.round(f).toLocaleString()}ms`)}),(0,b.jsx)(k,{icon:"task_alt",label:"Success rate",value:i(100*a.performance.successRate,1)}),(0,b.jsx)(k,{icon:"stacked_line_chart",label:"Total requests",value:a.performance.totalRequests.toLocaleString()})]})]})]})]})}function n(){return(0,b.jsx)("div",{className:"flex flex-col gap-4",children:[0,1].map(a=>(0,b.jsx)(d.default,{className:"p-6",children:(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 xl:flex-row xl:items-center xl:justify-between",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(f.Skeleton,{className:"h-6 w-40"}),(0,b.jsx)(f.Skeleton,{className:"h-4 w-52"})]}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3 xl:min-w-[420px]",children:[0,1,2].map(a=>(0,b.jsx)(f.Skeleton,{className:"h-24 rounded-lg"},a))})]}),(0,b.jsx)("div",{className:"grid gap-4 xl:grid-cols-3",children:[0,1,2].map(a=>(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)(f.Skeleton,{className:"h-5 w-28"}),(0,b.jsx)(f.Skeleton,{className:"h-24 rounded-lg"}),(0,b.jsx)(f.Skeleton,{className:"h-24 rounded-lg"})]},a))})]})},a))})}a.s(["default",0,function(){let[a,e]=(0,c.useState)("24h"),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!0),[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),s=(0,c.useCallback)(async(b,c=!1)=>{c?r(!0):l(!0),p(null);try{let c=await fetch(`/api/usage/combo-health?range=${a}`,{signal:b.signal});if(!c.ok)throw Error("Failed to fetch combo health data");let d=await c.json();j(d),p(null)}catch(a){if("AbortError"===a.name)return;p(a instanceof Error?a.message:"Unknown error"),c||j(null)}finally{!b.signal.aborted&&(l(!1),c&&r(!1))}},[a]);(0,c.useEffect)(()=>{let a=new AbortController;return s(a,!1),()=>a.abort()},[s]);let t=i?.combos??[],u=(0,c.useCallback)(()=>{s(new AbortController,!0)},[s]);return(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 rounded-xl border border-black/5 bg-surface p-5 shadow-sm dark:border-white/5 md:flex-row md:items-center md:justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Combo health"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Monitor quota pressure, skewed model usage, and delivery performance by combo."})]}),(0,b.jsx)(g.default,{value:a,onChange:e})]}),k?(0,b.jsx)(n,{}):null,!k&&o?(0,b.jsx)(d.default,{className:"p-8",children:(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[40px] text-error",children:"sync_problem"}),(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("div",{className:"font-medium text-text-main",children:"Unable to load combo health"}),(0,b.jsx)("div",{className:"text-sm text-text-muted",children:o})]}),(0,b.jsx)("button",{type:"button",onClick:u,disabled:q,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary-hover disabled:opacity-50 disabled:cursor-not-allowed",children:q?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}),"Retrying…"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"Retry"]})})]})}):null,k||o||0!==t.length?null:(0,b.jsx)(d.default,{className:"p-10",children:(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[40px] text-text-muted/70",children:"monitor_heart"}),(0,b.jsx)("div",{className:"text-base font-medium text-text-main",children:"No combo health data available"}),(0,b.jsx)("div",{className:"max-w-md text-sm text-text-muted",children:"Combo quota snapshots and routed requests will appear here after traffic starts flowing."}),(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-text-main",children:"Getting started"}),(0,b.jsxs)("ul",{className:"mt-2 text-left text-xs text-text-muted",children:[(0,b.jsxs)("li",{className:"flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsxs)("span",{children:["Create combos in ",(0,b.jsx)("strong",{children:"Combos"})," with multiple providers"]})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Send requests to combo endpoints to generate traffic data"})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Health metrics will appear automatically as requests are routed"})]})]})]})]})}),k||o||!(t.length>0)?null:(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-text-muted",children:[(0,b.jsx)(f.Spinner,{size:"sm",className:(0,h.cn)("text-primary","[&_.material-symbols-outlined]:text-[16px]")}),"Tracking ",t.length," combos for ",a]}),t.map(a=>(0,b.jsx)(m,{combo:a},a.comboId))]})]})}])},337276,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(442308),g=a.i(818819),h=a.i(831097),i=a.i(260860),j=a.i(537022),k=a.i(610254),l=a.i(510290),m=a.i(633851),n=a.i(230098),o=a.i(415925),p=b([f,j,l]);[f,j,l]=p.then?(await p)():p,a.s(["default",0,function(){let[a,b]=(0,e.useState)("overview"),c=(0,o.useTranslations)("analytics"),f={overview:c("overviewDescription"),evals:c("evalsDescription"),search:"Search request analytics — provider breakdown, cache hit rate, and cost tracking.",utilization:c("utilizationDescription"),comboHealth:c("comboHealthDescription")};return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary text-[28px]",children:"analytics"}),c("title")]}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-1",children:f[a]})]}),(0,d.jsx)(i.SegmentedControl,{options:[{value:"overview",label:c("overview")},{value:"evals",label:c("evals")},{value:"search",label:"Search"},{value:"utilization",label:c("utilization")},{value:"comboHealth",label:c("comboHealth")}],value:a,onChange:b}),"overview"===a&&(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:(0,d.jsx)(l.default,{})}),(0,d.jsx)(e.Suspense,{fallback:(0,d.jsx)(h.CardSkeleton,{}),children:(0,d.jsx)(g.UsageAnalytics,{})})]}),"evals"===a&&(0,d.jsx)(j.default,{}),"search"===a&&(0,d.jsx)(k.default,{}),"utilization"===a&&(0,d.jsx)(m.default,{}),"comboHealth"===a&&(0,d.jsx)(n.default,{})]})}]),c()}catch(a){c(a)}},!1)];
|
|
1
|
+
module.exports=[818819,a=>{"use strict";var b=a.i(930510);a.s(["UsageAnalytics",()=>b.default])},712612,a=>{"use strict";var b=a.i(29198);a.s(["DataTable",()=>b.default])},992962,a=>{"use strict";var b=a.i(198106);a.s(["FilterBar",()=>b.default])},537022,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(442308),h=a.i(292216),i=a.i(294023),j=a.i(609754),k=a.i(712612),l=a.i(992962),m=a.i(240246),n=b([g]);[g]=n.then?(await n)():n;let p=[{name:"contains",labelKey:"evalsStrategyContainsLabel",icon:"search",color:"text-sky-400",bg:"bg-sky-500/10",descriptionKey:"evalsStrategyContainsDescription"},{name:"exact",labelKey:"evalsStrategyExactLabel",icon:"check_circle",color:"text-emerald-400",bg:"bg-emerald-500/10",descriptionKey:"evalsStrategyExactDescription"},{name:"regex",labelKey:"evalsStrategyRegexLabel",icon:"code",color:"text-amber-400",bg:"bg-amber-500/10",descriptionKey:"evalsStrategyRegexDescription"},{name:"custom",labelKey:"evalsStrategyCustomLabel",icon:"tune",color:"text-violet-400",bg:"bg-violet-500/10",descriptionKey:"evalsStrategyCustomDescription"}];function o({t:a}){return(0,d.jsx)(h.Card,{className:"p-0 overflow-hidden",children:(0,d.jsx)("div",{className:"p-6",style:{background:"linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(59, 130, 246, 0.05) 50%, rgba(16, 185, 129, 0.05) 100%)"},children:(0,d.jsxs)("div",{className:"flex items-start gap-4",children:[(0,d.jsx)("div",{className:"p-3 rounded-xl bg-violet-500/10 text-violet-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[28px]",children:"science"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h2",{className:"text-xl font-bold text-text-main mb-1",children:a("modelEvals")}),(0,d.jsx)("p",{className:"text-sm text-text-muted leading-relaxed max-w-2xl",children:a("evalsHeroDescription")}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-4 mt-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-emerald-400",children:"verified"}),a("qualityValidation")]}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-sky-400",children:"compare"}),a("modelComparison")]}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-amber-400",children:"bug_report"}),a("regressionDetection")]}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-violet-400",children:"speed"}),a("latencyBenchmarks")]})]})]})]})})})}a.s(["default",0,function(){let a=(0,e.useTranslations)("usage"),[b,c]=(0,f.useState)([]),[g,n]=(0,f.useState)(null),[q,r]=(0,f.useState)(!0),[s,t]=(0,f.useState)(null),[u,v]=(0,f.useState)({current:0,total:0}),[w,x]=(0,f.useState)({}),[y,z]=(0,f.useState)(""),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),E=(0,m.useNotificationStore)(),F=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/evals");if(a.ok){let b=await a.json();c(Array.isArray(b)?b:b.suites||[])}}catch{}finally{r(!1)}},[]),G=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/keys");if(!a.ok)return;let b=await a.json(),c=b?.keys?.[0]?.key||null;n(c)}catch{}},[]);(0,f.useEffect)(()=>{F(),G()},[F,G]);let H=async a=>{try{let b={"Content-Type":"application/json"};g&&(b.Authorization=`Bearer ${g}`);let c=await fetch("/v1/chat/completions",{method:"POST",headers:b,body:JSON.stringify({model:a.model||"gpt-4o",messages:a.input?.messages||[],max_tokens:512,stream:!1})});if(!c.ok)return`[ERROR: HTTP ${c.status}]`;let d=await c.json();return d.choices?.[0]?.message?.content||"[No content returned]"}catch(a){return`[ERROR: ${a.message}]`}},I=async b=>{let c=b.cases||[];if(0===c.length)return void E.warning(a("notifyNoTestCases"));t(b.id),v({current:0,total:c.length});try{let d={};for(let a=0;a<c.length;a++){v({current:a+1,total:c.length});let b=await H(c[a]);d[c[a].id]=b}let e=await fetch("/api/evals",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({suiteId:b.id,outputs:d})}),f=await e.json();if(x(a=>({...a,[b.id]:f})),f.summary){let{passed:c,failed:d,total:e}=f.summary;0===d?E.success(a("notifyAllCasesPassed",{total:e}),a("notifyEvalTitle",{name:b.name||b.id})):E.warning(a("notifySomeCasesFailed",{passed:c,total:e,failed:d}),a("notifyEvalTitle",{name:b.name||b.id}))}B(b.id)}catch{E.error(a("notifyEvalRunFailed"))}finally{t(null),v({current:0,total:0})}},J=b.filter(a=>!y||a.name?.toLowerCase().includes(y.toLowerCase())||a.id?.toLowerCase().includes(y.toLowerCase())),K=b.reduce((a,b)=>a+(b.cases?.length||b.caseCount||0),0),L=[...new Set(b.flatMap(a=>(a.cases||[]).map(a=>a.model)).filter(Boolean))];if(q)return(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted p-8 animate-pulse",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"science"}),a("evalsLoading")]});if(0===b.length)return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(o,{t:a}),(0,d.jsx)(j.EmptyState,{icon:"science",title:a("noEvalSuitesFound"),description:a("noEvalSuitesDescription")})]});let M=[{key:"caseName",label:a("columnCase")},{key:"status",label:a("columnStatus")},{key:"durationMs",label:a("columnLatency")},{key:"details",label:a("columnDetails")}];return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(o,{t:a}),(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsSuites")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-violet-400",children:b.length})]}),(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsTestCases")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-sky-400",children:K})]}),(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsModels")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-emerald-400",children:L.length})]}),(0,d.jsxs)(h.Card,{className:"px-4 py-3 text-center",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase font-semibold tracking-wide",children:a("statsCoverage")}),(0,d.jsx)("div",{className:"text-2xl font-bold mt-1 text-amber-400",children:a("statsStrategiesCount",{count:p.length})})]})]}),(0,d.jsxs)(h.Card,{className:"p-0 overflow-hidden",children:[(0,d.jsxs)("button",{onClick:()=>D(!C),className:"w-full flex items-center justify-between px-6 py-4 hover:bg-surface/30 transition-colors text-left",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-primary/10 text-primary",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"help"})}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:a("howItWorks")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("howItWorksSubtitle")})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted transition-transform duration-200 ${C?"rotate-180":""}`,children:"expand_more"})]}),C&&(0,d.jsxs)("div",{className:"px-6 pb-6 border-t border-border/10",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4",children:[(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-4 rounded-lg bg-violet-500/5 border border-violet-500/10",children:[(0,d.jsx)("div",{className:"w-10 h-10 rounded-full bg-violet-500/20 flex items-center justify-center mb-3",children:(0,d.jsx)("span",{className:"text-lg font-bold text-violet-400",children:"1"})}),(0,d.jsx)("h4",{className:"text-sm font-semibold text-text-main mb-1",children:a("define")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("defineStepDescription")})]}),(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-4 rounded-lg bg-sky-500/5 border border-sky-500/10",children:[(0,d.jsx)("div",{className:"w-10 h-10 rounded-full bg-sky-500/20 flex items-center justify-center mb-3",children:(0,d.jsx)("span",{className:"text-lg font-bold text-sky-400",children:"2"})}),(0,d.jsx)("h4",{className:"text-sm font-semibold text-text-main mb-1",children:a("run")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("runStepDescription")})]}),(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-4 rounded-lg bg-emerald-500/5 border border-emerald-500/10",children:[(0,d.jsx)("div",{className:"w-10 h-10 rounded-full bg-emerald-500/20 flex items-center justify-center mb-3",children:(0,d.jsx)("span",{className:"text-lg font-bold text-emerald-400",children:"3"})}),(0,d.jsx)("h4",{className:"text-sm font-semibold text-text-main mb-1",children:a("evaluate")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("evaluateStepDescription")})]})]}),(0,d.jsxs)("div",{className:"mt-6",children:[(0,d.jsx)("h4",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide mb-3",children:a("evaluationStrategies")}),(0,d.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:p.map(b=>(0,d.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg ${b.bg} border border-transparent`,children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[18px] ${b.color}`,children:b.icon}),(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:`text-xs font-mono font-semibold ${b.color}`,children:a(b.labelKey)}),(0,d.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:a(b.descriptionKey)})]})]},b.name))})]}),L.length>0&&(0,d.jsxs)("div",{className:"mt-6",children:[(0,d.jsx)("h4",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide mb-3",children:a("modelsUnderTest")}),(0,d.jsx)("div",{className:"flex flex-wrap gap-2",children:L.map(a=>(0,d.jsx)("span",{className:"px-3 py-1.5 rounded-full text-xs font-mono font-medium bg-primary/10 text-primary border border-primary/20",children:a},a))})]})]})]}),(0,d.jsxs)(h.Card,{className:"p-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-violet-500/10 text-violet-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"science"})}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:a("evalSuites")}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a("evalSuitesHint")})]})]}),(0,d.jsx)(l.FilterBar,{searchValue:y,onSearchChange:z,placeholder:a("searchSuitesPlaceholder"),filters:[],activeFilters:{},onFilterChange:()=>{},children:null}),(0,d.jsx)("div",{className:"flex flex-col gap-3 mt-4",children:J.map(b=>{let c=w[b.id],e=s===b.id,f=A===b.id,g=b.cases?.length||b.caseCount||0,h=[...new Set((b.cases||[]).map(a=>a.model).filter(Boolean))];return(0,d.jsxs)("div",{className:"border border-border/30 rounded-lg overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 cursor-pointer hover:bg-surface/30 transition-colors",onClick:()=>B(f?null:b.id),children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:f?"expand_more":"chevron_right"}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("p",{className:"text-sm font-medium text-text-main",children:b.name||b.id}),c?.summary&&(0,d.jsxs)("span",{className:`px-2 py-0.5 rounded-full text-xs font-semibold ${100===c.summary.passRate?"bg-emerald-500/10 text-emerald-400":c.summary.passRate>=80?"bg-amber-500/10 text-amber-400":"bg-red-500/10 text-red-400"}`,children:[c.summary.passRate,"% ",a("passSuffix")]})]}),(0,d.jsxs)("p",{className:"text-xs text-text-muted",children:[a("casesCount",{count:g}),b.description&&(0,d.jsxs)("span",{className:"ml-1",children:["— ",b.description]})]}),h.length>0&&(0,d.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:h.map(a=>(0,d.jsx)("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-mono text-text-muted bg-black/5 dark:bg-white/5",children:a},a))})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[e&&u.total>0&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("div",{className:"w-24 h-1.5 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden",children:(0,d.jsx)("div",{className:"h-full bg-violet-500 rounded-full transition-all duration-300",style:{width:`${u.current/u.total*100}%`}})}),(0,d.jsxs)("span",{className:"text-xs text-text-muted font-mono tabular-nums",children:[u.current,"/",u.total]})]}),(0,d.jsx)(i.Button,{size:"sm",variant:"primary",onClick:a=>{a.stopPropagation(),I(b)},loading:e,disabled:e,children:e?a("runningProgress",{current:u.current,total:u.total}):a("runEval")})]})]}),f&&(0,d.jsx)("div",{className:"border-t border-border/20 p-4",children:c?.results?(0,d.jsxs)(d.Fragment,{children:[c.summary&&(0,d.jsxs)("div",{className:"flex items-center gap-4 mb-4 p-3 rounded-lg bg-surface/30 border border-border/20",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("span",{className:`text-lg font-bold ${100===c.summary.passRate?"text-emerald-400":c.summary.passRate>=80?"text-amber-400":"text-red-400"}`,children:[c.summary.passRate,"%"]}),(0,d.jsx)("span",{className:"text-xs text-text-muted",children:a("passRate")})]}),(0,d.jsx)("div",{className:"text-xs text-text-muted",children:a("summaryBreakdown",{passed:c.summary.passed,failed:c.summary.failed,total:c.summary.total})}),(0,d.jsx)("div",{className:"flex-1 h-2 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden",children:(0,d.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${c.summary.passRate}%`,background:100===c.summary.passRate?"linear-gradient(90deg, #22c55e, #16a34a)":c.summary.passRate>=80?"linear-gradient(90deg, #f59e0b, #d97706)":"linear-gradient(90deg, #ef4444, #dc2626)"}})})]}),(0,d.jsx)(k.DataTable,{columns:M,data:c.results.map((a,b)=>({...a,id:a.caseId||b})),renderCell:(b,c)=>{if("status"===c.key)return b.passed?(0,d.jsx)("span",{className:"text-emerald-400",children:a("passedIconLabel")}):(0,d.jsx)("span",{className:"text-red-400",children:a("failedIconLabel")});if("durationMs"===c.key)return(0,d.jsx)("span",{className:"text-text-muted text-xs font-mono",children:null!=b.durationMs?`${b.durationMs}ms`:"—"});if("details"===c.key){let c=b.details||{};return(0,d.jsx)("span",{className:"text-text-muted text-xs truncate max-w-[300px] block",children:String(c.searchTerm?a("detailsContains",{term:c.searchTerm}):c.pattern?a("detailsRegex",{pattern:c.pattern}):c.expected?a("detailsExpected",{expected:String(c.expected).slice(0,50)}):b.error||"—")})}return(0,d.jsx)("span",{className:"text-sm text-text-main",children:b[c.key]||"—"})},maxHeight:"400px",emptyMessage:a("noResultsYet")})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:"checklist"}),(0,d.jsx)("span",{className:"text-xs text-text-muted font-medium",children:a("testCasesCount",{count:(b.cases||[]).length})})]}),(0,d.jsx)(k.DataTable,{columns:[{key:"name",label:a("columnCase")},{key:"model",label:a("columnModel")},{key:"strategy",label:a("columnStrategy")},{key:"expected",label:a("columnExpected")}],data:(b.cases||[]).map((a,b)=>({id:a.id||b,name:a.name,model:a.model||"—",strategy:a.expected?.strategy||"—",expected:a.expected?.value?String(a.expected.value).slice(0,80):"—"})),renderCell:(a,b)=>{if("strategy"===b.key){let b=p.find(b=>b.name===a.strategy);return(0,d.jsx)("span",{className:`text-xs font-mono font-semibold ${b?.color||"text-text-muted"}`,children:a.strategy})}return"model"===b.key?(0,d.jsx)("span",{className:"text-xs font-mono text-primary/80",children:a.model}):"expected"===b.key?(0,d.jsx)("span",{className:"text-text-muted text-xs font-mono truncate max-w-[300px] block",children:a.expected}):(0,d.jsx)("span",{className:"text-sm text-text-main",children:a[b.key]||"—"})},maxHeight:"400px",emptyMessage:a("noTestCasesDefined")}),(0,d.jsxs)("p",{className:"text-xs text-text-muted mt-3 flex items-center gap-1.5",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"info"}),a("runEvalHint")]})]})})]},b.id)})})]})]})}]),c()}catch(a){c(a)}},!1),610254,a=>{"use strict";var b=a.i(187924),c=a.i(572131);function d({icon:a,label:c,value:e,sub:f}){return(0,b.jsxs)("div",{className:"card p-4 flex flex-col gap-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-text-muted text-sm",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:a}),c]}),(0,b.jsx)("div",{className:"text-2xl font-bold text-text",children:e}),f&&(0,b.jsx)("div",{className:"text-xs text-text-muted",children:f})]})}function e({provider:a,count:c,total:d,costUsd:f}){let g=d>0?Math.round(c/d*100):0;return(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsxs)("div",{className:"flex justify-between text-sm",children:[(0,b.jsx)("span",{className:"font-medium text-text",children:a}),(0,b.jsxs)("span",{className:"text-text-muted",children:[c," queries · $",f.toFixed(4)]})]}),(0,b.jsx)("div",{className:"h-2 rounded-full bg-bg-muted overflow-hidden",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:`${g}%`}})}),(0,b.jsxs)("div",{className:"text-xs text-text-muted text-right",children:[g,"%"]})]})}a.s(["default",0,function(){let[a,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null);if((0,c.useEffect)(()=>{fetch("/api/v1/search/analytics").then(a=>a.json()).then(a=>{f(a),h(!1)}).catch(a=>{j(a.message),h(!1)})},[]),g)return(0,b.jsxs)("div",{className:"flex items-center justify-center py-16 text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined animate-spin mr-2",children:"progress_activity"}),"Loading search analytics…"]});if(i||!a)return(0,b.jsxs)("div",{className:"card p-6 text-center text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[32px] mb-2 block",children:"search_off"}),i||"No search data available yet.",(0,b.jsx)("p",{className:"text-xs mt-2",children:"Search requests will appear here after the first search via /v1/search."})]});let k=Object.entries(a.byProvider).sort(([,a],[,b])=>b.count-a.count);return(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[(0,b.jsx)(d,{icon:"manage_search",label:"Total Searches",value:a.total.toLocaleString(),sub:`${a.today} today`}),(0,b.jsx)(d,{icon:"cached",label:"Cache Hit Rate",value:`${a.cacheHitRate}%`,sub:`${a.cached} cached requests`}),(0,b.jsx)(d,{icon:"attach_money",label:"Total Cost",value:`$${a.totalCostUsd.toFixed(4)}`,sub:"search API costs"}),(0,b.jsx)(d,{icon:"timer",label:"Avg Response",value:`${a.avgDurationMs}ms`,sub:a.errors>0?`${a.errors} errors`:"No errors"})]}),k.length>0&&(0,b.jsxs)("div",{className:"card p-5",children:[(0,b.jsxs)("h3",{className:"font-semibold text-text mb-4 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"hub"}),"Provider Breakdown"]}),(0,b.jsx)("div",{className:"flex flex-col gap-4",children:k.map(([c,d])=>(0,b.jsx)(e,{provider:c,count:d.count,total:a.total,costUsd:d.costUsd},c))})]}),0===a.total&&(0,b.jsxs)("div",{className:"card p-8 text-center text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[48px] mb-3 block text-primary opacity-50",children:"travel_explore"}),(0,b.jsx)("p",{className:"font-medium text-text",children:"No searches yet"}),(0,b.jsxs)("p",{className:"text-sm mt-1",children:["Use ",(0,b.jsx)("code",{className:"bg-bg-muted px-1 rounded",children:"POST /v1/search"})," to start routing web searches."]})]}),(0,b.jsxs)("div",{className:"text-xs text-text-muted border border-border rounded-lg p-3 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[16px] text-green-500 mt-0.5",children:"check_circle"}),(0,b.jsxs)("span",{children:[(0,b.jsx)("strong",{children:"Free tier available:"})," Serper (2,500/mo), Brave (2,000/mo), Exa (1,000/mo), Tavily (1,000/mo) — total 6,500+ free searches/month with automatic failover."]})]})]})}])},510290,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(442308),g=a.i(292216),h=a.i(415925),i=b([f]);[f]=i.then?(await i)():i,a.s(["default",0,function(){let[a,b]=(0,e.useState)(null),[c,f]=(0,e.useState)(!0);if((0,h.useTranslations)("analytics"),(0,e.useEffect)(()=>{fetch("/api/analytics/diversity").then(a=>a.json()).then(a=>{b(a),f(!1)}).catch(a=>{console.error(a),f(!1)})},[]),c||!a)return(0,d.jsx)(g.Card,{className:"p-5 flex flex-col justify-center items-center h-full min-h-[200px]",children:(0,d.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})});let i=Math.round(100*(a.score||0)),j="text-green-500",k="bg-green-500",l="Healthy Distribution";return i<40?(j="text-red-500",k="bg-red-500",l="High Vendor Lock-in Risk"):i<70&&(j="text-amber-500",k="bg-amber-500",l="Moderate Distribution"),(0,d.jsxs)(g.Card,{className:"p-5 flex flex-col h-full bg-[var(--card-bg,#1e1e2e)] relative overflow-hidden group",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px] text-cyan-400",children:"pie_chart"}),(0,d.jsx)("h3",{className:"font-semibold text-[var(--text-primary,#fff)] flex-1",children:"Provider Diversity Score"}),(0,d.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-md border ${k.replace("bg-","border-").replace("500","500/20")} ${k.replace("500","500/10")} ${j}`,children:"Shannon Entropy"})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between mt-2 mb-6",children:[(0,d.jsxs)("div",{className:"flex flex-col",children:[(0,d.jsxs)("span",{className:`text-4xl font-bold tabular-nums tracking-tight ${j}`,children:[i,"%"]}),(0,d.jsx)("span",{className:"text-sm text-[var(--text-muted,#aaaaaa)] mt-1",children:l})]}),(0,d.jsx)("div",{className:"relative w-20 h-20 flex-shrink-0",children:(0,d.jsxs)("svg",{className:"w-full h-full transform -rotate-90",viewBox:"0 0 36 36",children:[(0,d.jsx)("path",{className:"text-[var(--border,#333)]",strokeWidth:"4",stroke:"currentColor",fill:"none",d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}),(0,d.jsx)("path",{className:j,strokeWidth:"4",strokeDasharray:`${i}, 100`,stroke:"currentColor",fill:"none",strokeLinecap:"round",d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"})]})})]}),(0,d.jsxs)("div",{className:"space-y-4 flex-1",children:[(0,d.jsx)("p",{className:"text-xs uppercase tracking-wider font-semibold text-[var(--text-muted,#888)]",children:"Provider Share"}),0===Object.keys(a.providers||{}).length?(0,d.jsx)("div",{className:"text-sm text-[var(--text-secondary,#666)] py-2",children:"No recent usage data available."}):(0,d.jsx)("div",{className:"space-y-3",children:Object.entries(a.providers).sort(([,a],[,b])=>b.share-a.share).slice(0,4).map(([a,b])=>(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,d.jsx)("span",{className:"font-medium text-[var(--text-primary,#ddd)] capitalize",children:a}),(0,d.jsxs)("span",{className:"font-mono text-[var(--text-muted,#aaa)]",children:[Math.round(100*b.share),"%"]})]}),(0,d.jsx)("div",{className:"w-full h-1.5 bg-[var(--surface,#333)] rounded-full overflow-hidden",children:(0,d.jsx)("div",{className:`h-full ${k} rounded-full`,style:{width:`${Math.round(100*b.share)}%`}})})]},a))})]}),(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-[var(--border,#333)] flex justify-between text-[11px] text-[var(--text-muted,#777)]",children:[(0,d.jsxs)("span",{children:["Window: ",a.windowSize," reqs"]}),(0,d.jsxs)("span",{children:["Based on Last ",Math.round(a.ttlMs/6e4)," mins"]})]})]})}]),c()}catch(a){c(a)}},!1),46357,a=>{"use strict";var b=a.i(187924),c=a.i(171302);let d=[{value:"1h",label:"1h"},{value:"24h",label:"24h"},{value:"7d",label:"7d"},{value:"30d",label:"30d"}];a.s(["default",0,function({value:a,onChange:e}){return(0,b.jsx)("div",{role:"tablist","aria-label":"Select time range",className:"inline-flex items-center gap-1 rounded-lg bg-black/5 p-1 dark:bg-white/5",children:d.map(d=>{let f=a===d.value;return(0,b.jsx)("button",{type:"button",role:"tab","aria-selected":f,tabIndex:f?0:-1,onClick:()=>e(d.value),className:(0,c.cn)("focus-ring h-9 rounded-md px-4 text-sm font-medium transition-all",f?"bg-primary text-white shadow-sm hover:bg-primary-hover":"text-text-muted hover:bg-black/5 hover:text-text-main dark:hover:bg-white/5"),children:d.label},d.value)})})}])},633851,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(780407),e=a.i(768932),f=a.i(656295),g=a.i(45063),h=a.i(909933),i=a.i(298382),j=a.i(612168),k=a.i(977368),l=a.i(625392),m=a.i(787293),n=a.i(972853),o=a.i(203041),p=a.i(296268),q=a.i(731080),r=["x1","y1","x2","y2","key"],s=["offset"],t=["xAxisId","yAxisId"],u=["xAxisId","yAxisId"];function v(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function w(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?v(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):v(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function x(){return(x=Object.assign.bind()).apply(null,arguments)}function y(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}var z=a=>{var{fill:b}=a;if(!b||"none"===b)return null;var{fillOpacity:d,x:e,y:f,width:g,height:h,ry:i}=a;return c.createElement("rect",{x:e,y:f,ry:i,width:g,height:h,stroke:"none",fill:b,fillOpacity:d,className:"recharts-cartesian-grid-bg"})};function A(a){var{option:b,lineItemProps:d}=a;if(c.isValidElement(b))e=c.cloneElement(b,d);else if("function"==typeof b)e=b(d);else{var e,f,{x1:g,y1:h,x2:i,y2:j,key:k}=d,l=y(d,r),m=null!=(f=(0,n.svgPropertiesNoEvents)(l))?f:{},{offset:o}=m,p=y(m,s);e=c.createElement("line",x({},p,{x1:g,y1:h,x2:i,y2:j,fill:"none",key:k}))}return e}function B(a){var{x:b,width:d,horizontal:e=!0,horizontalPoints:f}=a;if(!e||!f||!f.length)return null;var{xAxisId:g,yAxisId:h}=a,i=y(a,t),j=f.map((a,f)=>{var g=w(w({},i),{},{x1:b,y1:a,x2:b+d,y2:a,key:"line-".concat(f),index:f});return c.createElement(A,{key:"line-".concat(f),option:e,lineItemProps:g})});return c.createElement("g",{className:"recharts-cartesian-grid-horizontal"},j)}function C(a){var{y:b,height:d,vertical:e=!0,verticalPoints:f}=a;if(!e||!f||!f.length)return null;var{xAxisId:g,yAxisId:h}=a,i=y(a,u),j=f.map((a,f)=>{var g=w(w({},i),{},{x1:a,y1:b,x2:a,y2:b+d,key:"line-".concat(f),index:f});return c.createElement(A,{option:e,lineItemProps:g,key:"line-".concat(f)})});return c.createElement("g",{className:"recharts-cartesian-grid-vertical"},j)}function D(a){var{horizontalFill:b,fillOpacity:d,x:e,y:f,width:g,height:h,horizontalPoints:i,horizontal:j=!0}=a;if(!j||!b||!b.length||null==i)return null;var k=i.map(a=>Math.round(a+f-f)).sort((a,b)=>a-b);f!==k[0]&&k.unshift(0);var l=k.map((a,i)=>{var j=k[i+1],l=null==j?f+h-a:j-a;if(l<=0)return null;var m=i%b.length;return c.createElement("rect",{key:"react-".concat(i),y:a,x:e,height:l,width:g,stroke:"none",fill:b[m],fillOpacity:d,className:"recharts-cartesian-grid-bg"})});return c.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},l)}function E(a){var{vertical:b=!0,verticalFill:d,fillOpacity:e,x:f,y:g,width:h,height:i,verticalPoints:j}=a;if(!b||!d||!d.length)return null;var k=j.map(a=>Math.round(a+f-f)).sort((a,b)=>a-b);f!==k[0]&&k.unshift(0);var l=k.map((a,b)=>{var j=k[b+1],l=null==j?f+h-a:j-a;if(l<=0)return null;var m=b%d.length;return c.createElement("rect",{key:"react-".concat(b),x:a,y:g,width:l,height:i,stroke:"none",fill:d[m],fillOpacity:e,className:"recharts-cartesian-grid-bg"})});return c.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},l)}var F=(a,b)=>{var{xAxis:c,width:d,height:e,offset:i}=a;return(0,f.getCoordinatesOfGrid)((0,g.getTicks)(w(w(w({},h.defaultCartesianAxisProps),c),{},{ticks:(0,f.getTicksOfAxis)(c,!0),viewBox:{x:0,y:0,width:d,height:e}})),i.left,i.left+i.width,b)},G=(a,b)=>{var{yAxis:c,width:d,height:e,offset:i}=a;return(0,f.getCoordinatesOfGrid)((0,g.getTicks)(w(w(w({},h.defaultCartesianAxisProps),c),{},{ticks:(0,f.getTicksOfAxis)(c,!0),viewBox:{x:0,y:0,width:d,height:e}})),i.top,i.top+i.height,b)},H={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:q.DefaultZIndexes.grid};function I(a){var b=(0,i.useChartWidth)(),f=(0,i.useChartHeight)(),g=(0,i.useOffsetInternal)(),h=w(w({},(0,m.resolveDefaultProps)(a,H)),{},{x:(0,e.isNumber)(a.x)?a.x:g.left,y:(0,e.isNumber)(a.y)?a.y:g.top,width:(0,e.isNumber)(a.width)?a.width:g.width,height:(0,e.isNumber)(a.height)?a.height:g.height}),{xAxisId:n,yAxisId:q,x:r,y:s,width:t,height:u,syncWithTicks:v,horizontalValues:y,verticalValues:A}=h,I=(0,l.useIsPanorama)(),J=(0,k.useAppSelector)(a=>(0,j.selectAxisPropsNeededForCartesianGridTicksGenerator)(a,"xAxis",n,I)),K=(0,k.useAppSelector)(a=>(0,j.selectAxisPropsNeededForCartesianGridTicksGenerator)(a,"yAxis",q,I));if(!(0,o.isPositiveNumber)(t)||!(0,o.isPositiveNumber)(u)||!(0,e.isNumber)(r)||!(0,e.isNumber)(s))return null;var L=h.verticalCoordinatesGenerator||F,M=h.horizontalCoordinatesGenerator||G,{horizontalPoints:N,verticalPoints:O}=h;if((!N||!N.length)&&"function"==typeof M){var P=y&&y.length,Q=M({yAxis:K?w(w({},K),{},{ticks:P?y:K.ticks}):void 0,width:null!=b?b:t,height:null!=f?f:u,offset:g},!!P||v);(0,d.warn)(Array.isArray(Q),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof Q,"]")),Array.isArray(Q)&&(N=Q)}if((!O||!O.length)&&"function"==typeof L){var R=A&&A.length,S=L({xAxis:J?w(w({},J),{},{ticks:R?A:J.ticks}):void 0,width:null!=b?b:t,height:null!=f?f:u,offset:g},!!R||v);(0,d.warn)(Array.isArray(S),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof S,"]")),Array.isArray(S)&&(O=S)}return c.createElement(p.ZIndexLayer,{zIndex:h.zIndex},c.createElement("g",{className:"recharts-cartesian-grid"},c.createElement(z,{fill:h.fill,fillOpacity:h.fillOpacity,x:h.x,y:h.y,width:h.width,height:h.height,ry:h.ry}),c.createElement(D,x({},h,{horizontalPoints:N})),c.createElement(E,x({},h,{verticalPoints:O})),c.createElement(B,x({},h,{offset:g,horizontalPoints:N,xAxis:J,yAxis:K})),c.createElement(C,x({},h,{offset:g,verticalPoints:O,xAxis:J,yAxis:K}))))}I.displayName="CartesianGrid";var J=a.i(935112),K=a.i(320353),L=a.i(298621),M=a.i(603190),N=a.i(676805),O=a.i(952517);function P(){return(P=Object.assign.bind()).apply(null,arguments)}function Q(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function R(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?Q(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):Q(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var S={align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle",labelStyle:{}};function T(a){var{data:b,iconType:d,inactiveColor:e}=a,f=32/6,g=32/3,h=b.inactive?e:b.color,i=null!=d?d:b.type;if("none"===i)return null;if("plainline"===i)return c.createElement("line",{strokeWidth:4,fill:"none",stroke:h,strokeDasharray:function(a){if("object"==typeof a&&null!==a&&"strokeDasharray"in a)return String(a.strokeDasharray)}(b.payload),x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===i)return c.createElement("path",{strokeWidth:4,fill:"none",stroke:h,d:"M0,".concat(16,"h").concat(g,"\n A").concat(f,",").concat(f,",0,1,1,").concat(2*g,",").concat(16,"\n H").concat(32,"M").concat(2*g,",").concat(16,"\n A").concat(f,",").concat(f,",0,1,1,").concat(g,",").concat(16),className:"recharts-legend-icon"});if("rect"===i)return c.createElement("path",{stroke:"none",fill:h,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(c.isValidElement(b.legendIcon)){var j=R({},b);return delete j.legendIcon,c.cloneElement(b.legendIcon,j)}return c.createElement(N.Symbols,{fill:h,cx:16,cy:16,size:32,sizeType:"diameter",type:i})}function U(a){var{payload:b,iconSize:d,layout:e,formatter:f,inactiveColor:g,iconType:h,labelStyle:i}=a,j={x:0,y:0,width:32,height:32},k={display:"horizontal"===e?"inline-block":"block",marginRight:10},l={display:"inline-block",verticalAlign:"middle",marginRight:4};return b.map((b,e)=>{var m=b.formatter||f,n=(0,L.clsx)({"recharts-legend-item":!0,["legend-item-".concat(e)]:!0,inactive:b.inactive});if("none"===b.type)return null;var o="object"==typeof i?R({},i):{};o.color=b.inactive?g:o.color||b.color;var p=m?m(b.value,b,e):b.value;return c.createElement("li",P({className:n,style:k,key:"legend-item-".concat(e)},(0,O.adaptEventsOfChild)(a,b,e)),c.createElement(M.Surface,{width:d,height:d,viewBox:j,style:l,"aria-label":"".concat(b.value," legend icon")},c.createElement(T,{data:b,iconType:h,inactiveColor:g})),c.createElement("span",{className:"recharts-legend-item-text",style:o},p))})}var V=a=>{var b=(0,m.resolveDefaultProps)(a,S),{payload:d,layout:e,align:f}=b;return d&&d.length?c.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===e?f:"left"}},c.createElement(U,P({},b,{payload:d}))):null},W=a.i(363643),X=a.i(324993),Y=a.i(738620),Z=a.i(121402),$=a.i(795272),_=["contextPayload"];function aa(){return(aa=Object.assign.bind()).apply(null,arguments)}function ab(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function ac(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?ab(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):ab(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function ad(a){return a.value}function ae(a){var{contextPayload:b}=a,d=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,_),e=(0,W.getUniqPayload)(b,a.payloadUniqBy,ad),f=ac(ac({},d),{},{payload:e});return c.isValidElement(a.content)?c.cloneElement(a.content,f):"function"==typeof a.content?c.createElement(a.content,f):c.createElement(V,f)}function af(a){var b=(0,k.useAppDispatch)();return(0,c.useEffect)(()=>{b((0,Z.setLegendSettings)(a))},[b,a]),null}function ag(a){var b=(0,k.useAppDispatch)();return(0,c.useEffect)(()=>(b((0,Z.setLegendSize)(a)),()=>{b((0,Z.setLegendSize)({width:0,height:0}))}),[b,a]),null}var ah={align:"center",iconSize:14,inactiveColor:"#ccc",itemSorter:"value",layout:"horizontal",verticalAlign:"bottom"},ai=c.memo(function(a){var b,d=(0,m.resolveDefaultProps)(a,ah),e=(0,k.useAppSelector)(X.selectLegendPayload),f=(0,K.useLegendPortal)(),g=(0,i.useMargin)(),{width:h,height:j,wrapperStyle:l,portal:n}=d,[o,p]=(0,Y.useElementOffset)([e]),q=(0,i.useChartWidth)(),r=(0,i.useChartHeight)();if(null==q||null==r)return null;var s=q-((null==g?void 0:g.left)||0)-((null==g?void 0:g.right)||0),t=(b=d.layout,"vertical"===b&&null!=j?{height:j}:"horizontal"===b?{width:h||s}:null),u=n?l:ac(ac({position:"absolute",width:(null==t?void 0:t.width)||h||"auto",height:(null==t?void 0:t.height)||j||"auto"},function(a,b,c,d,e,f){var g,h,{layout:i,align:j,verticalAlign:k}=b;return a&&(void 0!==a.left&&null!==a.left||void 0!==a.right&&null!==a.right)||(g="center"===j&&"vertical"===i?{left:((d||0)-f.width)/2}:"right"===j?{right:c&&c.right||0}:{left:c&&c.left||0}),a&&(void 0!==a.top&&null!==a.top||void 0!==a.bottom&&null!==a.bottom)||(h="middle"===k?{top:((e||0)-f.height)/2}:"bottom"===k?{bottom:c&&c.bottom||0}:{top:c&&c.top||0}),ac(ac({},g),h)}(l,d,g,q,r,o)),l),v=null!=n?n:f;if(null==v||null==e)return null;var w=c.createElement("div",{className:"recharts-legend-wrapper",style:u,ref:p},c.createElement(af,{layout:d.layout,align:d.align,verticalAlign:d.verticalAlign,itemSorter:d.itemSorter}),!n&&c.createElement(ag,{width:o.width,height:o.height}),c.createElement(ae,aa({},d,t,{margin:g,chartWidth:q,chartHeight:r,contextPayload:e})));return(0,J.createPortal)(w,v)},$.propsAreEqual);ai.displayName="Legend";var aj=a.i(677924),ak=a.i(600554),al=a.i(931760),am=["axis"],an=(0,c.forwardRef)((a,b)=>c.createElement(al.CartesianChart,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:am,tooltipPayloadSearcher:ak.arrayTooltipSearcher,categoricalChartProps:a,ref:b})),ao=a.i(48662),ap=a.i(659854),aq=a.i(758042),ar=a.i(994222),as=a.i(436595),at=a.i(147089),au=a.i(46357);let av={"1h":"Last hour","24h":"Last 24 hours","7d":"Last 7 days","30d":"Last 30 days"},aw=["var(--color-primary)","var(--color-accent)","var(--color-success)","var(--color-warning)","var(--color-error)","var(--color-text-muted)"];function ax(a,b){let c=new Date(a);return Number.isNaN(c.getTime())?a:"1h"===b||"24h"===b?new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"}).format(c):new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric"}).format(c)}function ay(a,b){let c=new Date(a);return Number.isNaN(c.getTime())?a:new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"1h"===b||"24h"===b?"2-digit":void 0,minute:"1h"===b||"24h"===b?"2-digit":void 0}).format(c)}function az(a){return`${Math.round(a)}%`}a.s(["default",0,function(){let[a,d]=(0,c.useState)("24h"),[e,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),k=(0,c.useCallback)(async(a,b)=>{h(!0);try{let c=await fetch(`/api/usage/utilization?range=${a}`,{signal:b,cache:"no-store"});if(!c.ok)throw Error("Failed to fetch utilization data");let d=await c.json();f(d),j(null)}catch(a){if(a instanceof DOMException&&"AbortError"===a.name)return;j(a instanceof Error?a.message:"Failed to fetch utilization data"),f(null)}finally{b?.aborted||h(!1)}},[]);(0,c.useEffect)(()=>{let b=new AbortController;return k(a,b.signal),()=>b.abort()},[k,a]);let l=(0,c.useMemo)(()=>{let a=new Map;for(let[b,c]of(e?.providers??[]).entries())a.set(c,aw[b%aw.length]);return a},[e?.providers]),m=(0,c.useMemo)(()=>{if(!e?.data.length)return[];let a=new Map;for(let b of e.data){let c=a.get(b.timestamp)??{timestamp:b.timestamp,label:ax(b.timestamp,e.timeRange)};c[b.provider]=Number(b.remainingPct.toFixed(2)),a.set(b.timestamp,c)}return Array.from(a.entries()).sort(([a],[b])=>new Date(a).getTime()-new Date(b).getTime()).map(([,a])=>a)},[e]),n=(0,c.useMemo)(()=>(function(a){let b=new Map;for(let c of a){let a=b.get(c.provider);(!a||new Date(c.timestamp).getTime()>new Date(a.timestamp).getTime())&&b.set(c.provider,c)}return Array.from(b.values()).sort((a,b)=>b.remainingPct-a.remainingPct)})(e?.data??[]),[e?.data]),o=!!e?.data.length,[p,q]=(0,c.useState)(!1),r=(0,c.useCallback)(()=>{q(!0),j(null),k(a).finally(()=>q(!1))},[a,k]);return(0,b.jsx)("div",{className:"flex flex-col gap-6",children:(0,b.jsx)(as.default,{title:"Provider utilization",subtitle:av[a],icon:"monitoring",action:(0,b.jsx)(au.default,{value:a,onChange:d}),className:"overflow-hidden",children:g&&!o?(0,b.jsxs)("div",{className:"flex min-h-80 items-center justify-center text-sm text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin text-[18px]",children:"progress_activity"}),"Loading utilization data…"]}):i?(0,b.jsxs)("div",{className:"flex min-h-80 flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[32px] text-error",children:"error"}),(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-text-main",children:"Failed to load utilization data"}),(0,b.jsx)("p",{className:"text-sm text-text-muted",children:i})]}),(0,b.jsx)("button",{type:"button",onClick:r,disabled:p,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary-hover disabled:opacity-50 disabled:cursor-not-allowed",children:p?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}),"Retrying…"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"Retry"]})})]}):o?(0,b.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,b.jsx)("div",{className:"h-80 w-full rounded-xl border border-black/5 bg-black/[0.02] px-3 py-4 dark:border-white/5 dark:bg-white/[0.02]",children:(0,b.jsx)(ao.ResponsiveContainer,{width:"100%",height:"100%",children:(0,b.jsxs)(an,{data:m,margin:{top:8,right:16,bottom:0,left:0},children:[(0,b.jsx)(I,{stroke:"var(--color-border)",strokeDasharray:"3 3",vertical:!1}),(0,b.jsx)(aq.XAxis,{dataKey:"timestamp",tickFormatter:b=>ax(String(b),a),tick:{fill:"var(--color-text-muted)",fontSize:12},axisLine:{stroke:"var(--color-border)"},tickLine:{stroke:"var(--color-border)"},minTickGap:24}),(0,b.jsx)(ar.YAxis,{domain:[0,100],tickFormatter:az,tick:{fill:"var(--color-text-muted)",fontSize:12},axisLine:{stroke:"var(--color-border)"},tickLine:{stroke:"var(--color-border)"},width:44}),(0,b.jsx)(ap.Tooltip,{labelFormatter:b=>ay(String(b),a),formatter:(a,b)=>[az(a),b],contentStyle:{backgroundColor:"var(--color-surface)",borderColor:"var(--color-border)",borderRadius:12,color:"var(--color-text-main)",boxShadow:"var(--shadow-soft)"},itemStyle:{color:"var(--color-text-main)"},labelStyle:{color:"var(--color-text-main)",fontWeight:600}}),(0,b.jsx)(ai,{}),e?.providers.map(a=>(0,b.jsx)(aj.Line,{type:"monotone",dataKey:a,name:a,stroke:l.get(a)??"var(--color-primary)",strokeWidth:2.5,dot:!1,activeDot:{r:4,strokeWidth:0},connectNulls:!0},a))]})})}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3",children:n.map(c=>{let d=c.remainingPct<=20;return(0,b.jsxs)(as.default.Section,{className:"flex h-full flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("div",{className:"flex h-11 w-11 items-center justify-center rounded-xl border border-black/5 bg-surface text-text-main dark:border-white/5",children:(0,b.jsx)(at.default,{providerId:c.provider,size:22})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-sm font-semibold text-text-main",children:c.provider}),(0,b.jsx)("p",{className:"text-xs text-text-muted",children:"Latest quota snapshot"})]})]}),(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2.5 py-1 text-xs font-medium ${c.isExhausted?"bg-error/10 text-error":d?"bg-warning/10 text-warning":"bg-success/10 text-success"}`,children:c.isExhausted?"Exhausted":d?"Low":"Healthy"})]}),(0,b.jsxs)("div",{className:"flex items-end justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("p",{className:"text-3xl font-bold text-text-main",children:[c.remainingPct.toFixed(+(c.remainingPct<10)),"%"]}),(0,b.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Remaining capacity"})]}),(0,b.jsxs)("div",{className:"text-right text-xs text-text-muted",children:[(0,b.jsx)("p",{children:ay(c.timestamp,a)}),(0,b.jsx)("p",{className:"mt-1 uppercase tracking-[0.14em]",children:c.windowKey})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-black/5 dark:bg-white/5",children:(0,b.jsx)("div",{className:`h-full rounded-full transition-all ${c.isExhausted?"bg-error":d?"bg-warning":"bg-primary"}`,style:{width:`${Math.max(c.remainingPct,0)}%`}})}),(0,b.jsxs)("div",{className:"flex items-center justify-between text-xs text-text-muted",children:[(0,b.jsx)("span",{children:"0%"}),(0,b.jsx)("span",{children:"Remaining quota"}),(0,b.jsx)("span",{children:"100%"})]})]})]},c.provider)})})]}):(0,b.jsxs)("div",{className:"flex min-h-80 flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[40px] text-text-muted/70",children:"timeline"}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-text-main",children:"No utilization data available"}),(0,b.jsx)("p",{className:"max-w-md text-sm text-text-muted",children:"Provider quota snapshots will appear here after utilization data is collected."})]}),(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-text-main",children:"Getting started"}),(0,b.jsxs)("ul",{className:"mt-2 text-left text-xs text-text-muted",children:[(0,b.jsxs)("li",{className:"flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsxs)("span",{children:["Connect providers via OAuth or API keys in ",(0,b.jsx)("strong",{children:"Providers"})]})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Enable quota tracking by using the provider in a combo or direct request"})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Data will appear automatically as quota snapshots are collected"})]})]})]})]})})})}],633851)},230098,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(436595),e=a.i(497160),f=a.i(831097),g=a.i(46357),h=a.i(171302);function i(a,b=0){return`${a.toFixed(b)}%`}function j(a){return i(100*a,1)}function k({icon:a,label:c,value:d,subValue:e}){return(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs font-semibold uppercase tracking-wider text-text-muted",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:a}),c]}),(0,b.jsx)("div",{className:"mt-2 text-2xl font-semibold text-text-main",children:d}),e?(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e}):null]})}function l({label:a,value:c,meta:d}){let e=`${Math.max(100*c,6*(c>0))}%`;return(0,b.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border border-black/5 bg-black/[0.02] p-3 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 text-sm",children:[(0,b.jsx)("span",{className:"truncate font-medium text-text-main",children:a}),(0,b.jsx)("span",{className:"shrink-0 text-xs text-text-muted",children:d})]}),(0,b.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-black/5 dark:bg-white/5",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:e}})})]})}function m({combo:a}){var f;let g=(0,c.useMemo)(()=>[...a.usageSkew.modelDistribution].sort((a,b)=>b.requestShare-a.requestShare),[a.usageSkew.modelDistribution]);return(0,b.jsxs)(d.default,{className:"overflow-hidden p-0",children:[(0,b.jsx)("div",{className:"border-b border-black/5 px-6 py-5 dark:border-white/5",children:(0,b.jsxs)("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("h3",{className:"text-lg font-semibold text-text-main",children:a.comboName}),(0,b.jsx)(e.default,{variant:"primary",size:"sm",children:a.strategy})]}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-text-muted",children:[a.models.length," models across ",a.quotaHealth.providers.length," providers"]})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3 lg:min-w-[420px]",children:[(0,b.jsx)(k,{icon:"battery_status_good",label:"Worst quota left",value:i(a.quotaHealth.worstRemainingPct)}),(0,b.jsx)(k,{icon:"balance",label:"Usage skew",value:a.usageSkew.giniCoefficient.toFixed(2),subValue:"Gini coefficient"}),(0,b.jsx)(k,{icon:"bolt",label:"Success rate",value:i(100*a.performance.successRate,1),subValue:`${a.performance.totalRequests.toLocaleString()} requests`})]})]})}),(0,b.jsxs)("div",{className:"grid gap-6 px-6 py-5 xl:grid-cols-[1.1fr_1fr_0.95fr]",children:[(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Quota health"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Lowest remaining quota across providers with short trend signals."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-3",children:a.quotaHealth.providers.map(a=>{var c;let d="improving"===(c=a.trend)?{icon:"trending_up",label:"Improving",variant:"success"}:"declining"===c?{icon:"trending_down",label:"Declining",variant:"warning"}:{icon:"trending_flat",label:"Stable",variant:"default"},f=`${Math.max(a.remainingPct,6*(a.remainingPct>0))}%`;return(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-text-main",children:a.provider}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Remaining quota ",i(a.remainingPct,1)]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e.default,{variant:d.variant,size:"sm",icon:d.icon,children:d.label}),a.isExhausted?(0,b.jsx)(e.default,{variant:"error",size:"sm",children:"Exhausted"}):null]})]}),(0,b.jsx)("div",{className:"mt-3 h-2 overflow-hidden rounded-full bg-black/5 dark:bg-white/5",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:f}})})]},a.provider)})})]}),(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Usage skew"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Model request share and token share within this combo."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-3",children:g.map(a=>(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium text-text-main",children:a.model}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Request share ",j(a.requestShare)," · Token share"," ",j(a.tokenShare)]})]}),(0,b.jsx)(e.default,{size:"sm",children:j(a.requestShare)})]}),(0,b.jsxs)("div",{className:"mt-3 grid gap-2",children:[(0,b.jsx)(l,{label:"Requests",value:a.requestShare,meta:j(a.requestShare)}),(0,b.jsx)(l,{label:"Tokens",value:a.tokenShare,meta:j(a.tokenShare)})]})]},a.model))})]}),(0,b.jsxs)("section",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-semibold text-text-main",children:"Performance"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Reliability and throughput for routed combo traffic."})]}),(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-3 xl:grid-cols-1",children:[(0,b.jsx)(k,{icon:"timer",label:"Avg latency",value:(f=a.performance.avgLatencyMs,`${Math.round(f).toLocaleString()}ms`)}),(0,b.jsx)(k,{icon:"task_alt",label:"Success rate",value:i(100*a.performance.successRate,1)}),(0,b.jsx)(k,{icon:"stacked_line_chart",label:"Total requests",value:a.performance.totalRequests.toLocaleString()})]})]})]})]})}function n(){return(0,b.jsx)("div",{className:"flex flex-col gap-4",children:[0,1].map(a=>(0,b.jsx)(d.default,{className:"p-6",children:(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 xl:flex-row xl:items-center xl:justify-between",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(f.Skeleton,{className:"h-6 w-40"}),(0,b.jsx)(f.Skeleton,{className:"h-4 w-52"})]}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3 xl:min-w-[420px]",children:[0,1,2].map(a=>(0,b.jsx)(f.Skeleton,{className:"h-24 rounded-lg"},a))})]}),(0,b.jsx)("div",{className:"grid gap-4 xl:grid-cols-3",children:[0,1,2].map(a=>(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)(f.Skeleton,{className:"h-5 w-28"}),(0,b.jsx)(f.Skeleton,{className:"h-24 rounded-lg"}),(0,b.jsx)(f.Skeleton,{className:"h-24 rounded-lg"})]},a))})]})},a))})}a.s(["default",0,function(){let[a,e]=(0,c.useState)("24h"),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!0),[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),s=(0,c.useCallback)(async(b,c=!1)=>{c?r(!0):l(!0),p(null);try{let c=await fetch(`/api/usage/combo-health?range=${a}`,{signal:b.signal});if(!c.ok)throw Error("Failed to fetch combo health data");let d=await c.json();j(d),p(null)}catch(a){if("AbortError"===a.name)return;p(a instanceof Error?a.message:"Unknown error"),c||j(null)}finally{!b.signal.aborted&&(l(!1),c&&r(!1))}},[a]);(0,c.useEffect)(()=>{let a=new AbortController;return s(a,!1),()=>a.abort()},[s]);let t=i?.combos??[],u=(0,c.useCallback)(()=>{s(new AbortController,!0)},[s]);return(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 rounded-xl border border-black/5 bg-surface p-5 shadow-sm dark:border-white/5 md:flex-row md:items-center md:justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Combo health"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Monitor quota pressure, skewed model usage, and delivery performance by combo."})]}),(0,b.jsx)(g.default,{value:a,onChange:e})]}),k?(0,b.jsx)(n,{}):null,!k&&o?(0,b.jsx)(d.default,{className:"p-8",children:(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[40px] text-error",children:"sync_problem"}),(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("div",{className:"font-medium text-text-main",children:"Unable to load combo health"}),(0,b.jsx)("div",{className:"text-sm text-text-muted",children:o})]}),(0,b.jsx)("button",{type:"button",onClick:u,disabled:q,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary-hover disabled:opacity-50 disabled:cursor-not-allowed",children:q?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}),"Retrying…"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"Retry"]})})]})}):null,k||o||0!==t.length?null:(0,b.jsx)(d.default,{className:"p-10",children:(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-4 text-center",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[40px] text-text-muted/70",children:"monitor_heart"}),(0,b.jsx)("div",{className:"text-base font-medium text-text-main",children:"No combo health data available"}),(0,b.jsx)("div",{className:"max-w-md text-sm text-text-muted",children:"Combo quota snapshots and routed requests will appear here after traffic starts flowing."}),(0,b.jsxs)("div",{className:"rounded-lg border border-black/5 bg-black/[0.02] p-4 dark:border-white/5 dark:bg-white/[0.02]",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-text-main",children:"Getting started"}),(0,b.jsxs)("ul",{className:"mt-2 text-left text-xs text-text-muted",children:[(0,b.jsxs)("li",{className:"flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsxs)("span",{children:["Create combos in ",(0,b.jsx)("strong",{children:"Combos"})," with multiple providers"]})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Send requests to combo endpoints to generate traffic data"})]}),(0,b.jsxs)("li",{className:"mt-1 flex items-start gap-2",children:[(0,b.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"check_circle"}),(0,b.jsx)("span",{children:"Health metrics will appear automatically as requests are routed"})]})]})]})]})}),k||o||!(t.length>0)?null:(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-text-muted",children:[(0,b.jsx)(f.Spinner,{size:"sm",className:(0,h.cn)("text-primary","[&_.material-symbols-outlined]:text-[16px]")}),"Tracking ",t.length," combos for ",a]}),t.map(a=>(0,b.jsx)(m,{combo:a},a.comboId))]})]})}])},337276,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(442308),g=a.i(818819),h=a.i(831097),i=a.i(260860),j=a.i(537022),k=a.i(610254),l=a.i(510290),m=a.i(633851),n=a.i(230098),o=a.i(415925),p=b([f,j,l]);[f,j,l]=p.then?(await p)():p,a.s(["default",0,function(){let[a,b]=(0,e.useState)("overview"),c=(0,o.useTranslations)("analytics"),f={overview:c("overviewDescription"),evals:c("evalsDescription"),search:"Search request analytics — provider breakdown, cache hit rate, and cost tracking.",utilization:c("utilizationDescription"),comboHealth:c("comboHealthDescription")};return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary text-[28px]",children:"analytics"}),c("title")]}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-1",children:f[a]})]}),(0,d.jsx)(i.SegmentedControl,{options:[{value:"overview",label:c("overview")},{value:"evals",label:c("evals")},{value:"search",label:"Search"},{value:"utilization",label:c("utilization")},{value:"comboHealth",label:c("comboHealth")}],value:a,onChange:b}),"overview"===a&&(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:(0,d.jsx)(l.default,{})}),(0,d.jsx)(e.Suspense,{fallback:(0,d.jsx)(h.CardSkeleton,{}),children:(0,d.jsx)(g.UsageAnalytics,{})})]}),"evals"===a&&(0,d.jsx)(j.default,{}),"search"===a&&(0,d.jsx)(k.default,{}),"utilization"===a&&(0,d.jsx)(m.default,{}),"comboHealth"===a&&(0,d.jsx)(n.default,{})]})}]),c()}catch(a){c(a)}},!1)];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_04s-8a5._.js.map
|