llm-simple-router 1.0.13 → 1.0.14
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/frontend-dist/assets/{AuthLayout-C7E43a6p.js → AuthLayout-BDZ1YG1E.js} +1 -1
- package/frontend-dist/assets/{Card-L1MI4nan.js → Card-D_Tw50z-.js} +1 -1
- package/frontend-dist/assets/{CardContent-DUzyQmbU.js → CardContent-D_GzsM_k.js} +1 -1
- package/frontend-dist/assets/{CardTitle-oL3GJ7xA.js → CardTitle-BFTTUnhj.js} +1 -1
- package/frontend-dist/assets/{CascadingModelSelect-C_Ydm0fg.js → CascadingModelSelect-C5_CzSuh.js} +1 -1
- package/frontend-dist/assets/{Checkbox-OkYUPlFe.js → Checkbox-CCMjk9vf.js} +1 -1
- package/frontend-dist/assets/{CollapsibleContent-4ZwwyZPz.js → CollapsibleContent-B2UPvxPb.js} +1 -1
- package/frontend-dist/assets/{CollapsibleTrigger-Cg651F6-.js → CollapsibleTrigger-Nr_5sVsH.js} +1 -1
- package/frontend-dist/assets/{ConcurrencyControl-LFw4H_oP.js → ConcurrencyControl-Ohv8itIj.js} +1 -1
- package/frontend-dist/assets/{Dashboard-Bqups5aa.js → Dashboard-BQ9TlUQC.js} +1 -1
- package/frontend-dist/assets/{Input-CLu4bS6g.js → Input-BR3Kn_wA.js} +1 -1
- package/frontend-dist/assets/{Label-DVu1uVI7.js → Label-DN8P1c9z.js} +1 -1
- package/frontend-dist/assets/{Login--CFSqs7j.js → Login-DY-qbjAc.js} +1 -1
- package/frontend-dist/assets/{Logs-CJPid8DO.js → Logs-Cb13eG3D.js} +1 -1
- package/frontend-dist/assets/{ModelMappings-BTM9yiL6.js → ModelMappings-C9Toywxe.js} +1 -1
- package/frontend-dist/assets/{Monitor-CBLKclHj.js → Monitor-DHVY-WPj.js} +1 -1
- package/frontend-dist/assets/{Providers-5RjiOHfn.js → Providers-gY8ZLgUc.js} +1 -1
- package/frontend-dist/assets/{ProxyEnhancement-XKgw6IoB.js → ProxyEnhancement-kCyj9t2I.js} +1 -1
- package/frontend-dist/assets/{QuickSetup-CISVMd51.js → QuickSetup-CjIVRxF1.js} +1 -1
- package/frontend-dist/assets/{RetryRules-DVSEfmo2.js → RetryRules-y_6aUANS.js} +1 -1
- package/frontend-dist/assets/{RouterKeys-Cx2n1D0b.js → RouterKeys-BbwR9hDg.js} +1 -1
- package/frontend-dist/assets/{RovingFocusItem-CB_XB24W.js → RovingFocusItem-VwbXf1MB.js} +1 -1
- package/frontend-dist/assets/{Schedules-BMD8vrVd.js → Schedules-p2sctwkc.js} +1 -1
- package/frontend-dist/assets/{Separator-DHTeoMaB.js → Separator-Br1km3eK.js} +1 -1
- package/frontend-dist/assets/{Settings-C3yzrB1_.js → Settings-BWMe3ng7.js} +1 -1
- package/frontend-dist/assets/{Setup-Cgf37mQl.js → Setup-B5pBp6pL.js} +1 -1
- package/frontend-dist/assets/{Skeleton-DcA4Afm_.js → Skeleton-BghQc4eO.js} +1 -1
- package/frontend-dist/assets/{Switch-BDu-VJJd.js → Switch-Bzp4wFcG.js} +1 -1
- package/frontend-dist/assets/{TableHeader-ncK52pod.js → TableHeader-BMLGvQfN.js} +1 -1
- package/frontend-dist/assets/{TabsTrigger-DeTfRTma.js → TabsTrigger-Bh5OQLTQ.js} +1 -1
- package/frontend-dist/assets/{UnifiedRequestDialog-CLHb7t0f.js → UnifiedRequestDialog-Ckfn1VW1.js} +1 -1
- package/frontend-dist/assets/{VisuallyHiddenInput-DcH9Mxb9.js → VisuallyHiddenInput-CNd9_ZYU.js} +1 -1
- package/frontend-dist/assets/arrow-down-DJpsdr-b.js +1 -0
- package/frontend-dist/assets/{badge-DhXKxnV5.js → badge-CSOPIDH0.js} +1 -1
- package/frontend-dist/assets/{button-BuzJlj9X.js → button-DrEBx6kL.js} +2 -2
- package/frontend-dist/assets/chevron-right-DKNhr7vH.js +1 -0
- package/frontend-dist/assets/{dialog-CtPySx34.js → dialog-NNn0XuVD.js} +1 -1
- package/frontend-dist/assets/{image-BkW18kNK.js → image-CqmiJ8tH.js} +1 -1
- package/frontend-dist/assets/{index-BjnFvPid.js → index-BE0sEUYE.js} +2 -2
- package/frontend-dist/assets/{model-patches-DQFF0Cuh.js → model-patches-BackGcoz.js} +1 -1
- package/frontend-dist/assets/{pencil-i0P0IRz5.js → pencil-BDFBpqCv.js} +1 -1
- package/frontend-dist/assets/plus-DABSjQj-.js +1 -0
- package/frontend-dist/assets/search-B5dcokFd.js +1 -0
- package/frontend-dist/assets/{sparkles-BGb3coPL.js → sparkles-Dd-_vKtR.js} +1 -1
- package/frontend-dist/assets/{transform-domain-pYyIPtkg.js → transform-domain-CM0hlPfl.js} +1 -1
- package/frontend-dist/assets/{trash-2-DhD7GboJ.js → trash-2-Cnu9oob7.js} +1 -1
- package/frontend-dist/assets/{useClipboard-tJg52v7m.js → useClipboard-Bn8FwbFu.js} +1 -1
- package/frontend-dist/assets/{useLogRetention-D7ZaYfCW.js → useLogRetention-CwgQ1oEN.js} +1 -1
- package/frontend-dist/assets/{useProviderGroups-DMuF_-28.js → useProviderGroups-cMSONEIb.js} +1 -1
- package/frontend-dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend-dist/assets/arrow-down-CuC5m7VK.js +0 -1
- package/frontend-dist/assets/chevron-right-LdKvgE7W.js +0 -1
- package/frontend-dist/assets/plus-fHe1ysx9.js +0 -1
- package/frontend-dist/assets/search-Dast7lfE.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ft as e,Mt as t,Yt as n,h as r,nt as i,ot as a,q as o,qt as s,r as c,vt as l}from"./button-
|
|
1
|
+
import{Ft as e,Mt as t,Yt as n,h as r,nt as i,ot as a,q as o,qt as s,r as c,vt as l}from"./button-DrEBx6kL.js";var u=a({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(a,{emit:u}){let d=a,f=r(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(r,a)=>t((l(),i(`input`,{"onUpdate:modelValue":a[0]||=t=>e(f)?f.value=t:null,"data-slot":`input`,class:n(s(c)(`dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,d.class))},null,2)),[[o,s(f)]])}});export{u as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e,et as t,i as n,jt as r,o as i,ot as a,pt as o,qt as s,r as c,vt as l,xt as u}from"./button-
|
|
1
|
+
import{S as e,et as t,i as n,jt as r,o as i,ot as a,pt as o,qt as s,r as c,vt as l,xt as u}from"./button-DrEBx6kL.js";var d=a({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(e){let a=e;return i(),(e,i)=>(l(),t(s(n),o(a,{onMousedown:i[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:r(()=>[u(e.$slots,`default`)]),_:3},16))}}),f=a({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(n){let i=n,a=e(i,`class`);return(e,n)=>(l(),t(s(d),o({"data-slot":`label`},s(a),{class:s(c)(`gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed`,i.class)}),{default:r(()=>[u(e.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,Qt as r,U as i,Y as a,at as o,et as s,it as c,j as l,jt as u,n as d,nt as f,ot as p,qt as m,tt as h,vt as g,zt as _}from"./button-
|
|
1
|
+
import{$ as e,A as t,B as n,Qt as r,U as i,Y as a,at as o,et as s,it as c,j as l,jt as u,n as d,nt as f,ot as p,qt as m,tt as h,vt as g,zt as _}from"./button-DrEBx6kL.js";import{t as v}from"./Label-DN8P1c9z.js";import{t as y}from"./Input-BR3Kn_wA.js";import{t as b}from"./AuthLayout-BDZ1YG1E.js";var x={key:0,class:`text-destructive text-sm`},S=p({__name:`Login`,setup(p){let{t:S}=i(),C=n(),w=_(``),T=_(``),E=_(!1);async function D(){if(w.value){T.value=``,E.value=!0;try{await t.login(w.value),C.push(`/`)}catch(e){console.error(`login:`,e),T.value=l(e,S(`login.loginFailed`))}finally{E.value=!1}}}return(t,n)=>(g(),s(b,{subtitle:m(S)(`login.subtitle`)},{default:u(()=>[e(`form`,{onSubmit:a(D,[`prevent`]),class:`space-y-4`},[e(`div`,null,[o(m(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:u(()=>[c(r(m(S)(`login.password`)),1)]),_:1}),o(m(y),{modelValue:w.value,"onUpdate:modelValue":n[0]||=e=>w.value=e,type:`password`,placeholder:m(S)(`login.passwordPlaceholder`),disabled:E.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),T.value?(g(),f(`p`,x,r(T.value),1)):h(``,!0),o(m(d),{type:`submit`,class:`w-full`,disabled:E.value},{default:u(()=>[c(r(E.value?m(S)(`login.loggingIn`):m(S)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1},8,[`subtitle`]))}});export{S as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Ft as n,Ot as r,Q as i,Qt as a,U as o,X as s,Y as c,Yt as l,at as u,bt as d,et as f,gt as p,it as m,j as h,jt as g,n as _,nt as v,ot as y,qt as b,tt as x,vt as S,zt as C}from"./button-BuzJlj9X.js";import{r as w,t as ee}from"./UnifiedRequestDialog-CLHb7t0f.js";import{n as T,t as te}from"./useClipboard-tJg52v7m.js";import{a as E,i as D,o as O}from"./TabsTrigger-DeTfRTma.js";import{a as ne,n as re,o as ie,r as ae,t as oe}from"./dialog-CtPySx34.js";import{t as se}from"./Label-DVu1uVI7.js";import{Ot as k,_ as A,_t as ce,a as j,c as le,f as ue,g as M,h as N,kt as de,l as fe,m as P,o as pe,p as me,s as he,t as ge,u as _e,v as F,vt as ve,wt as ye,xt as I}from"./index-BjnFvPid.js";import{t as L}from"./Skeleton-DcA4Afm_.js";import{t as R}from"./badge-DhXKxnV5.js";import{t as z}from"./Input-CLu4bS6g.js";import{t as be}from"./Card-L1MI4nan.js";import{a as xe,i as B,n as V,o as Se,r as H,t as Ce}from"./TableHeader-ncK52pod.js";import{t as we}from"./useLogRetention-D7ZaYfCW.js";var Te={key:1,class:`ml-4 text-muted-foreground text-xs`},U={class:`inline-flex items-center gap-1`},W={class:`font-mono`},G={class:`text-muted-foreground`},K={key:2,class:`text-muted-foreground`},Ee={class:`flex flex-wrap gap-1`},q={class:`block truncate`},J={key:1,class:`text-muted-foreground`},De=y({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1},copiedId:{default:null}},emits:[`toggleExpand`,`openDetail`,`copy`],setup(t,{emit:n}){let r=t,d=n,{t:p}=o(),h=i(()=>r.log.thinking_level??`off`);function y(e){if(!e)return p(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch(e){return console.error(`LogTableRow.formatLog:`,e),p(`logs.row.unknown`)}}return(n,r)=>(S(),f(b(H),{class:l([`group`,{"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild}])},{default:g(()=>[u(b(B),{class:`w-10`},{default:g(()=>[!t.isChild&&t.log.child_count?(S(),f(b(_),{key:0,variant:`ghost`,size:`xs`,onClick:r[0]||=e=>d(`toggleExpand`,t.log)},{default:g(()=>[u(b(ce),{class:l([`size-3 transition-transform`,t.expanded?``:`-rotate-90`])},null,8,[`class`])]),_:1})):x(``,!0),t.isChild?(S(),v(`span`,Te,`└`)):x(``,!0)]),_:1}),u(b(B),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:g(()=>[e(`span`,U,[m(a(t.log.id.slice(0,8))+` `,1),u(b(O),{"delay-duration":300},{default:g(()=>[u(b(D),{"as-child":``},{default:g(()=>[u(b(_),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:r[1]||=c(e=>d(`copy`,t.log.id),[`stop`])},{default:g(()=>[t.copiedId===t.log.id?(S(),f(b(ve),{key:0,class:`size-3 text-success`})):(S(),f(b(T),{key:1,class:`size-3`}))]),_:1})]),_:1}),u(b(E),null,{default:g(()=>[m(a(b(p)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})])]),_:1},8,[`title`]),u(b(B),{class:`font-mono text-xs text-muted-foreground whitespace-nowrap`},{default:g(()=>[m(a(b(ye)(t.log.created_at)),1)]),_:1}),u(b(B),{class:`font-mono text-xs whitespace-nowrap`},{default:g(()=>[m(a(t.log.model||`-`)+` `,1),u(b(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[m(a(t.log.api_type),1)]),_:1})]),_:1}),u(b(B),{class:`text-xs whitespace-nowrap`},{default:g(()=>[!t.isChild&&t.log.provider_id===b(`router`)?(S(),f(b(R),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:g(()=>[m(a(b(p)(`logs.row.proxyEnhancement`,{label:y(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(S(),v(s,{key:1},[e(`span`,W,a(t.log.backend_model||`-`),1),r[3]||=e(`span`,{class:`text-muted-foreground`},` @ `,-1),e(`span`,G,a(t.log.provider_name||t.log.provider_id||`-`),1),u(b(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[m(a(t.log.api_type),1)]),_:1})],64)):(S(),v(`span`,K,`-`))]),_:1}),u(b(B),null,{default:g(()=>[e(`div`,Ee,[t.log.upstream_api_type&&t.log.upstream_api_type!==t.log.api_type?(S(),f(b(R),{key:0,variant:t.log.api_type===`openai`?`default`:`secondary`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[m(a(t.log.api_type)+` → `+a(t.log.upstream_api_type),1)]),_:1},8,[`variant`])):x(``,!0),u(b(R),{variant:(t.log.status_code??0)<400?`default`:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[m(a(t.log.status_code||`-`),1)]),_:1},8,[`variant`]),h.value?(S(),f(b(R),{key:1,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[m(a(h.value),1)]),_:1})):x(``,!0),t.log.is_stream?(S(),f(b(R),{key:2,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[...r[4]||=[m(` SSE `,-1)]]),_:1})):x(``,!0),t.log.is_retry?(S(),f(b(R),{key:3,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-warning-dark border-warning`},{default:g(()=>[m(a(b(p)(`logs.table.retry`)),1)]),_:1})):x(``,!0),t.log.is_failover?(S(),f(b(R),{key:4,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-danger-dark border-danger`},{default:g(()=>[m(a(b(p)(`logs.table.failover`)),1)]),_:1})):x(``,!0)])]),_:1}),u(b(B),{class:`text-xs text-muted-foreground font-mono`},{default:g(()=>[m(a(b(I)(t.log.latency_ms)),1)]),_:1}),u(b(B),{class:`text-destructive text-xs min-w-0 max-w-60 lg:max-w-xs`},{default:g(()=>[t.log.error_message?(S(),f(b(O),{key:0,"delay-duration":300},{default:g(()=>[u(b(D),{"as-child":``},{default:g(()=>[e(`span`,q,a(t.log.error_message),1)]),_:1}),u(b(E),{class:`max-w-sm whitespace-pre-wrap`},{default:g(()=>[m(a(t.log.error_message),1)]),_:1})]),_:1})):(S(),v(`span`,J,`-`))]),_:1}),u(b(B),null,{default:g(()=>[u(b(_),{variant:`ghost`,size:`sm`,onClick:r[2]||=e=>d(`openDetail`,t.log.id)},{default:g(()=>[m(a(b(p)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}});function Oe(e){try{return JSON.parse(e)}catch{return null}}var ke=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function Ae(){let{t:e}=o(),n=C(`5h`),r=C({start:``,end:``}),a=C(`all`),s=C(`all`),c=C(`all`),l=C(`all`),u=C(`all`),d=C(`all`),f=C([]),m=C([]),g=C([]),_=C([]),v=i(()=>r.value.start&&r.value.end&&r.value.start<r.value.end),y=i(()=>{let{start:t,end:n}=r.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),b={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function x(){let e={};if(v.value)e.start_time=de(r.value.start),e.end_time=k(r.value.end);else{let t=b[n.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return u.value!==`all`&&(e.api_type=u.value),a.value!==`all`&&(e.provider_id=a.value),s.value!==`all`&&(e.client_model=s.value),c.value!==`all`&&(e.backend_model=c.value),l.value!==`all`&&(e.router_key_id=l.value),d.value!==`all`&&(e.status_code=d.value),e}function S(){r.value={start:``,end:``}}async function w(){try{f.value=await t.getProviders()}catch(t){console.error(`Failed to load providers:`,t),j.error(h(t,e(`logs.messages.loadProvidersFailed`)))}}async function ee(){try{m.value=await t.getRouterKeys()}catch(t){console.error(`Failed to load router keys:`,t),j.error(h(t,e(`logs.messages.loadKeysFailed`)))}}async function T(){try{let e=await t.getMappingGroups(),n=new Set,r=new Set;for(let t of e){t.client_model&&n.add(t.client_model);let e=Oe(t.rule);if(e)for(let t of e.targets??[])t.backend_model&&r.add(t.backend_model)}g.value=[...n].sort(),_.value=[...r].sort()}catch(e){console.error(`useLogFilters.loadModelOptions:`,e),g.value=[],_.value=[]}}return p(async()=>{try{let e=await t.getLogsInit();e.providers&&(f.value=e.providers),e.router_keys&&(m.value=e.router_keys),e.client_models&&(g.value=e.client_models),e.backend_models&&(_.value=e.backend_models)}catch(e){console.error(`useLogFilters.init:`,e),await Promise.allSettled([w(),ee(),T()])}}),{PERIODS:ke,period:n,dateRange:r,dateRangeError:y,providerFilter:a,clientModelFilter:s,backendModelFilter:c,keyFilter:l,apiTypeFilter:u,statusFilter:d,providers:f,routerKeys:m,clientModelOptions:g,backendModelOptions:_,hasDateRange:v,clearDateRange:S,buildFilterParams:x}}var Y=20,je=864e5;function Me(){let{t:e}=o(),n=C([]),r=C(0),a=C(1),s=C({}),c=C(30),l=C(!1),u=C(!1),d=C(new Set),f=C({}),p=C({}),m=C(!1),g=C(null),_=i(()=>Math.ceil(r.value/Y));async function v(i){i&&(s.value=i),l.value=!0;try{let e=await t.getLogs({page:a.value,limit:Y,view:`grouped`,...s.value});n.value=e.data,r.value=e.total,d.value.clear(),f.value={},p.value={}}catch(t){console.error(`Failed to load logs:`,t),j.error(h(t,e(`logs.messages.loadFailed`)))}finally{l.value=!1}}function y(e){e>=1&&e<=_.value&&e!==a.value&&(a.value=e,v())}let b=C(null),x=C(!1);async function S(){try{let e=new Date(Date.now()-c.value*je).toISOString(),n=await t.deleteLogsBefore(e);u.value=!1,a.value=1,await v(),b.value=n.deleted,x.value=!0}catch(t){console.error(`Failed to cleanup logs:`,t),j.error(h(t,e(`logs.messages.cleanupFailed`)))}}async function ee(n){let r=n.id;if(d.value.has(r)){d.value.delete(r);return}if(d.value.add(r),!f.value[r]){p.value[r]=!0;try{f.value[r]=await t.getLogChildren(r)}catch(t){console.error(`Failed to load child logs:`,t),j.error(h(t,e(`logs.messages.loadSubRequestsFailed`)))}finally{p.value[r]=!1}}}async function T(n){try{let e=await t.getLogDetail(n);g.value=w(e,e.child_count?await t.getLogChildren(n):[]),m.value=!0}catch(t){console.error(`Failed to load log detail:`,t),j.error(h(t,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:Y,loading:l,logs:n,total:r,page:a,totalPages:_,cleanupDays:c,showCleanup:u,expandedRows:d,childLogs:f,childLoading:p,logDetailOpen:m,selectedLogEntry:g,cleanupResult:b,showCleanupResult:x,loadLogs:v,goToPage:y,handleCleanup:S,toggleExpand:ee,openLogDetail:T}}var Ne={class:`page`},Pe={class:`flex items-center justify-between mb-4`},Fe={class:`text-lg font-semibold text-foreground`},Ie={class:`flex flex-wrap items-center gap-2 mb-4`},Le={class:`flex`},Re={class:`flex items-center gap-1`},ze={key:1,class:`text-xs text-destructive whitespace-nowrap`},Be={key:0,class:`absolute inset-0 bg-background/50 flex items-center justify-center z-10`},Ve={class:`space-y-3 w-3/4`},He={class:`flex flex-col items-center gap-2`},Ue={class:`text-sm text-muted-foreground`},We={key:0,class:`text-xs text-muted-foreground`},Ge={class:`flex items-center justify-between mt-4`},Ke={class:`text-sm text-muted-foreground`},qe={class:`flex items-center gap-1`},Je={key:0,class:`px-2 text-sm text-muted-foreground`},Ye={class:`flex items-center justify-end mt-2 gap-2`},Xe={class:`text-xs text-muted-foreground`},Ze={class:`text-xs text-muted-foreground`},Qe={class:`text-sm text-muted-foreground`},$e={class:`mb-4`},et=9,tt=300,nt=7,X=2,Z=1,rt=2e3,it=y({__name:`Logs`,setup(t){let{t:c}=o(),{PERIODS:l,period:h,dateRange:y,dateRangeError:w,providerFilter:T,clientModelFilter:E,backendModelFilter:D,keyFilter:O,statusFilter:k,providers:ce,routerKeys:j,clientModelOptions:de,backendModelOptions:ve,clearDateRange:ye,buildFilterParams:I}=Ae(),{logs:R,total:Te,page:U,totalPages:W,cleanupDays:G,showCleanup:K,cleanupResult:Ee,showCleanupResult:q,expandedRows:J,childLogs:Oe,childLoading:ke,logDetailOpen:Y,selectedLogEntry:je,loadLogs:it,goToPage:Q,handleCleanup:at,toggleExpand:ot,openLogDetail:st,loading:ct}=Me(),lt=i(()=>{let e=W.value,t=U.value;if(e<=nt)return Array.from({length:e},(e,t)=>t+1);let n=[Z],r=Math.max(Z+1,t-X),i=Math.min(e-Z,t+X);r>Z+X&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-X&&n.push(`...`),n.push(e),n}),{retentionDays:ut,retentionSaving:dt,saveRetention:ft,loadRetention:pt}=we(),{copy:mt}=te(),$=C(null);function ht(e){mt(e),$.value=e,setTimeout(()=>{$.value===e&&($.value=null)},rt)}let gt=i(()=>T.value!==`all`||E.value!==`all`||D.value!==`all`||O.value!==`all`||k.value!==`all`||!!y.value.start||!!y.value.end);function _t(){h.value=`5h`,y.value={start:``,end:``},T.value=`all`,E.value=`all`,D.value=`all`,O.value=`all`,k.value=`all`}let vt=null;return r([h,y,T,E,D,O,k],()=>{U.value=1,vt&&clearTimeout(vt),vt=setTimeout(()=>it(I()),tt)},{deep:!0}),p(()=>{it(I()),pt()}),(t,r)=>(S(),v(`div`,Ne,[e(`div`,Pe,[e(`h2`,Fe,a(b(c)(`logs.title`)),1),u(b(_),{variant:`ghost`,size:`sm`,onClick:r[0]||=e=>K.value=!0},{default:g(()=>[m(a(b(c)(`logs.cleanupLogs`)),1)]),_:1})]),e(`div`,Ie,[e(`div`,Le,[(S(!0),v(s,null,d(b(l),e=>(S(),f(b(_),{key:e.value,variant:b(h)===e.value?`default`:`outline`,size:`sm`,class:`rounded-none first:rounded-l-md last:rounded-r-md -ml-px first:ml-0`,onClick:t=>h.value=e.value},{default:g(()=>[m(a(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),e(`div`,Re,[u(b(z),{type:`datetime-local`,modelValue:b(y).start,"onUpdate:modelValue":r[1]||=e=>b(y).start=e,class:`w-44`},null,8,[`modelValue`]),r[19]||=e(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),u(b(z),{type:`datetime-local`,modelValue:b(y).end,"onUpdate:modelValue":r[2]||=e=>b(y).end=e,class:`w-44`},null,8,[`modelValue`]),b(y).start||b(y).end?(S(),f(b(_),{key:0,variant:`ghost`,size:`sm`,onClick:b(ye)},{default:g(()=>[m(a(b(c)(`logs.clear`)),1)]),_:1},8,[`onClick`])):x(``,!0),b(w)?(S(),v(`span`,ze,a(b(w)),1)):x(``,!0)]),u(b(F),{modelValue:b(T),"onUpdate:modelValue":r[3]||=e=>n(T)?T.value=e:null},{default:g(()=>[u(b(N),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.allProviders`)),1)]),_:1}),(S(!0),v(s,null,d(b(ce),e=>(S(),f(b(M),{key:e.id,value:e.id},{default:g(()=>[m(a(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(E),"onUpdate:modelValue":r[4]||=e=>n(E)?E.value=e:null},{default:g(()=>[u(b(N),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.filters.allClientModels`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.filters.allClientModels`)),1)]),_:1}),(S(!0),v(s,null,d(b(de),e=>(S(),f(b(M),{key:e,value:e},{default:g(()=>[m(a(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(D),"onUpdate:modelValue":r[5]||=e=>n(D)?D.value=e:null},{default:g(()=>[u(b(N),{class:`w-32 truncate`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.filters.allBackendModels`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.filters.allBackendModels`)),1)]),_:1}),(S(!0),v(s,null,d(b(ve),e=>(S(),f(b(M),{key:e,value:e},{default:g(()=>[m(a(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(O),"onUpdate:modelValue":r[6]||=e=>n(O)?O.value=e:null},{default:g(()=>[u(b(N),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.allKeys`)),1)]),_:1}),(S(!0),v(s,null,d(b(j),e=>(S(),f(b(M),{key:e.id,value:e.id},{default:g(()=>[m(a(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(k),"onUpdate:modelValue":r[7]||=e=>n(k)?k.value=e:null},{default:g(()=>[u(b(N),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.allStatus`)),1)]),_:1}),u(b(M),{value:`200`},{default:g(()=>[...r[20]||=[m(`200`,-1)]]),_:1}),u(b(M),{value:`non200`},{default:g(()=>[m(a(b(c)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),u(b(be),{flush:``,class:`relative`},{default:g(()=>[b(ct)?(S(),v(`div`,Be,[e(`div`,Ve,[u(b(L),{class:`h-8 w-full`}),u(b(L),{class:`h-8 w-full`}),u(b(L),{class:`h-8 w-5/6`})])])):x(``,!0),u(b(ge),{"delay-duration":300},{default:g(()=>[u(b(Se),{class:`[&_td]:px-3 [&_th]:px-3`},{default:g(()=>[u(b(Ce),null,{default:g(()=>[u(b(H),{class:`bg-muted`},{default:g(()=>[u(b(V),{class:`w-10`}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.id`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.time`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.clientModel`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.targetModel`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.latency`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.tags`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.latency`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.error`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),u(b(xe),null,{default:g(()=>[(S(!0),v(s,null,d(b(R),e=>(S(),v(s,{key:e.id},[u(De,{log:e,expanded:b(J).has(e.id),"copied-id":$.value,onToggleExpand:b(ot),onOpenDetail:b(st),onCopy:ht},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),b(J).has(e.id)?(S(),v(s,{key:0},[b(ke)[e.id]?(S(),f(b(H),{key:0},{default:g(()=>[u(b(B),{colspan:et,class:`text-center py-2 pl-10`},{default:g(()=>[u(b(L),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):b(Oe)[e.id]?.length?(S(!0),v(s,{key:1},d(b(Oe)[e.id],e=>(S(),f(De,{key:e.id,log:e,"is-child":!0,"copied-id":$.value,onOpenDetail:b(st),onCopy:ht},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):x(``,!0)],64)):x(``,!0)],64))),128)),b(R).length===0&&!b(ct)?(S(),f(b(H),{key:0},{default:g(()=>[u(b(B),{colspan:et,class:`py-12 text-center`},{default:g(()=>[e(`div`,He,[e(`p`,Ue,a(b(c)(`logs.noLogs`)),1),gt.value?(S(),v(`p`,We,a(b(c)(`logs.noLogsFilterHint`)),1)):x(``,!0),gt.value?(S(),f(b(_),{key:1,variant:`ghost`,size:`sm`,onClick:_t},{default:g(()=>[m(a(b(c)(`logs.clearAllFilters`)),1)]),_:1})):x(``,!0)])]),_:1})]),_:1})):x(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),e(`div`,Ge,[e(`p`,Ke,a(b(c)(`logs.pagination`,{total:b(Te),page:b(U),totalPages:b(W)})),1),e(`div`,qe,[u(b(_),{variant:`outline`,size:`sm`,onClick:r[8]||=e=>b(Q)(1),disabled:b(U)<=1},{default:g(()=>[m(a(b(c)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),u(b(_),{variant:`outline`,size:`sm`,onClick:r[9]||=e=>b(Q)(b(U)-1),disabled:b(U)<=1},{default:g(()=>[m(a(b(c)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(S(!0),v(s,null,d(lt.value,e=>(S(),v(s,{key:e},[e===`...`?(S(),v(`span`,Je,`...`)):(S(),f(b(_),{key:1,variant:e===b(U)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>b(Q)(e)},{default:g(()=>[m(a(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),u(b(_),{variant:`outline`,size:`sm`,onClick:r[10]||=e=>b(Q)(b(U)+1),disabled:b(U)>=b(W)},{default:g(()=>[m(a(b(c)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),u(b(_),{variant:`outline`,size:`sm`,onClick:r[11]||=e=>b(Q)(b(W)),disabled:b(U)>=b(W)},{default:g(()=>[m(a(b(c)(`logs.lastPage`)),1)]),_:1},8,[`disabled`])])]),e(`div`,Ye,[e(`span`,Xe,a(b(c)(`logs.cleanup.autoCleanup`)),1),u(b(z),{type:`number`,modelValue:b(ut),"onUpdate:modelValue":r[12]||=e=>n(ut)?ut.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-16 h-6 text-xs`},null,8,[`modelValue`]),e(`span`,Ze,a(b(c)(`logs.cleanup.days`)),1),u(b(_),{size:`sm`,onClick:b(ft),disabled:b(dt)},{default:g(()=>[m(a(b(c)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])]),u(ee,{open:b(Y),"onUpdate:open":r[13]||=e=>n(Y)?Y.value=e:null,source:`history`,"log-entry":b(je)},null,8,[`open`,`log-entry`]),u(b(ie),{open:b(K),"onUpdate:open":r[16]||=e=>n(K)?K.value=e:null},{default:g(()=>[u(b(ne),null,{default:g(()=>[u(b(re),null,{default:g(()=>[u(b(oe),null,{default:g(()=>[m(a(b(c)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),e(`p`,Qe,a(b(c)(`logs.cleanup.description`)),1),e(`div`,$e,[u(b(se),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[m(a(b(c)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),u(b(z),{modelValue:b(G),"onUpdate:modelValue":r[14]||=e=>n(G)?G.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),u(b(ae),null,{default:g(()=>[u(b(_),{variant:`outline`,onClick:r[15]||=e=>K.value=!1},{default:g(()=>[m(a(b(c)(`common.cancel`)),1)]),_:1}),u(b(_),{variant:`destructive`,onClick:b(at)},{default:g(()=>[m(a(b(c)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),u(b(me),{open:b(q),"onUpdate:open":r[18]||=e=>n(q)?q.value=e:null},{default:g(()=>[u(b(_e),null,{default:g(()=>[u(b(he),null,{default:g(()=>[u(b(pe),null,{default:g(()=>[m(a(b(c)(`logs.cleanupResult.title`)),1)]),_:1}),u(b(fe),null,{default:g(()=>[m(a(b(c)(`logs.cleanupResult.description`,{count:b(Ee)})),1)]),_:1})]),_:1}),u(b(le),null,{default:g(()=>[u(b(ue),{onClick:r[17]||=e=>q.value=!1},{default:g(()=>[m(a(b(c)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{it as default};
|
|
1
|
+
import{$ as e,A as t,Ft as n,Ot as r,Q as i,Qt as a,U as o,X as s,Y as c,Yt as l,at as u,bt as d,et as f,gt as p,it as m,j as h,jt as g,n as _,nt as v,ot as y,qt as b,tt as x,vt as S,zt as C}from"./button-DrEBx6kL.js";import{r as w,t as ee}from"./UnifiedRequestDialog-Ckfn1VW1.js";import{n as T,t as te}from"./useClipboard-Bn8FwbFu.js";import{a as E,i as D,o as O}from"./TabsTrigger-Bh5OQLTQ.js";import{a as ne,n as re,o as ie,r as ae,t as oe}from"./dialog-NNn0XuVD.js";import{t as se}from"./Label-DN8P1c9z.js";import{Ot as k,_ as A,_t as ce,a as j,c as le,f as ue,g as M,h as N,kt as de,l as fe,m as P,o as pe,p as me,s as he,t as ge,u as _e,v as F,vt as ve,wt as ye,xt as I}from"./index-BE0sEUYE.js";import{t as L}from"./Skeleton-BghQc4eO.js";import{t as R}from"./badge-CSOPIDH0.js";import{t as z}from"./Input-BR3Kn_wA.js";import{t as be}from"./Card-D_Tw50z-.js";import{a as xe,i as B,n as V,o as Se,r as H,t as Ce}from"./TableHeader-BMLGvQfN.js";import{t as we}from"./useLogRetention-CwgQ1oEN.js";var Te={key:1,class:`ml-4 text-muted-foreground text-xs`},U={class:`inline-flex items-center gap-1`},W={class:`font-mono`},G={class:`text-muted-foreground`},K={key:2,class:`text-muted-foreground`},Ee={class:`flex flex-wrap gap-1`},q={class:`block truncate`},J={key:1,class:`text-muted-foreground`},De=y({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1},copiedId:{default:null}},emits:[`toggleExpand`,`openDetail`,`copy`],setup(t,{emit:n}){let r=t,d=n,{t:p}=o(),h=i(()=>r.log.thinking_level??`off`);function y(e){if(!e)return p(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch(e){return console.error(`LogTableRow.formatLog:`,e),p(`logs.row.unknown`)}}return(n,r)=>(S(),f(b(H),{class:l([`group`,{"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild}])},{default:g(()=>[u(b(B),{class:`w-10`},{default:g(()=>[!t.isChild&&t.log.child_count?(S(),f(b(_),{key:0,variant:`ghost`,size:`xs`,onClick:r[0]||=e=>d(`toggleExpand`,t.log)},{default:g(()=>[u(b(ce),{class:l([`size-3 transition-transform`,t.expanded?``:`-rotate-90`])},null,8,[`class`])]),_:1})):x(``,!0),t.isChild?(S(),v(`span`,Te,`└`)):x(``,!0)]),_:1}),u(b(B),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:g(()=>[e(`span`,U,[m(a(t.log.id.slice(0,8))+` `,1),u(b(O),{"delay-duration":300},{default:g(()=>[u(b(D),{"as-child":``},{default:g(()=>[u(b(_),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:r[1]||=c(e=>d(`copy`,t.log.id),[`stop`])},{default:g(()=>[t.copiedId===t.log.id?(S(),f(b(ve),{key:0,class:`size-3 text-success`})):(S(),f(b(T),{key:1,class:`size-3`}))]),_:1})]),_:1}),u(b(E),null,{default:g(()=>[m(a(b(p)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})])]),_:1},8,[`title`]),u(b(B),{class:`font-mono text-xs text-muted-foreground whitespace-nowrap`},{default:g(()=>[m(a(b(ye)(t.log.created_at)),1)]),_:1}),u(b(B),{class:`font-mono text-xs whitespace-nowrap`},{default:g(()=>[m(a(t.log.model||`-`)+` `,1),u(b(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[m(a(t.log.api_type),1)]),_:1})]),_:1}),u(b(B),{class:`text-xs whitespace-nowrap`},{default:g(()=>[!t.isChild&&t.log.provider_id===b(`router`)?(S(),f(b(R),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:g(()=>[m(a(b(p)(`logs.row.proxyEnhancement`,{label:y(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(S(),v(s,{key:1},[e(`span`,W,a(t.log.backend_model||`-`),1),r[3]||=e(`span`,{class:`text-muted-foreground`},` @ `,-1),e(`span`,G,a(t.log.provider_name||t.log.provider_id||`-`),1),u(b(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[m(a(t.log.api_type),1)]),_:1})],64)):(S(),v(`span`,K,`-`))]),_:1}),u(b(B),null,{default:g(()=>[e(`div`,Ee,[t.log.upstream_api_type&&t.log.upstream_api_type!==t.log.api_type?(S(),f(b(R),{key:0,variant:t.log.api_type===`openai`?`default`:`secondary`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[m(a(t.log.api_type)+` → `+a(t.log.upstream_api_type),1)]),_:1},8,[`variant`])):x(``,!0),u(b(R),{variant:(t.log.status_code??0)<400?`default`:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[m(a(t.log.status_code||`-`),1)]),_:1},8,[`variant`]),h.value?(S(),f(b(R),{key:1,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[m(a(h.value),1)]),_:1})):x(``,!0),t.log.is_stream?(S(),f(b(R),{key:2,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[...r[4]||=[m(` SSE `,-1)]]),_:1})):x(``,!0),t.log.is_retry?(S(),f(b(R),{key:3,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-warning-dark border-warning`},{default:g(()=>[m(a(b(p)(`logs.table.retry`)),1)]),_:1})):x(``,!0),t.log.is_failover?(S(),f(b(R),{key:4,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-danger-dark border-danger`},{default:g(()=>[m(a(b(p)(`logs.table.failover`)),1)]),_:1})):x(``,!0)])]),_:1}),u(b(B),{class:`text-xs text-muted-foreground font-mono`},{default:g(()=>[m(a(b(I)(t.log.latency_ms)),1)]),_:1}),u(b(B),{class:`text-destructive text-xs min-w-0 max-w-60 lg:max-w-xs`},{default:g(()=>[t.log.error_message?(S(),f(b(O),{key:0,"delay-duration":300},{default:g(()=>[u(b(D),{"as-child":``},{default:g(()=>[e(`span`,q,a(t.log.error_message),1)]),_:1}),u(b(E),{class:`max-w-sm whitespace-pre-wrap`},{default:g(()=>[m(a(t.log.error_message),1)]),_:1})]),_:1})):(S(),v(`span`,J,`-`))]),_:1}),u(b(B),null,{default:g(()=>[u(b(_),{variant:`ghost`,size:`sm`,onClick:r[2]||=e=>d(`openDetail`,t.log.id)},{default:g(()=>[m(a(b(p)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}});function Oe(e){try{return JSON.parse(e)}catch{return null}}var ke=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function Ae(){let{t:e}=o(),n=C(`5h`),r=C({start:``,end:``}),a=C(`all`),s=C(`all`),c=C(`all`),l=C(`all`),u=C(`all`),d=C(`all`),f=C([]),m=C([]),g=C([]),_=C([]),v=i(()=>r.value.start&&r.value.end&&r.value.start<r.value.end),y=i(()=>{let{start:t,end:n}=r.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),b={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function x(){let e={};if(v.value)e.start_time=de(r.value.start),e.end_time=k(r.value.end);else{let t=b[n.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return u.value!==`all`&&(e.api_type=u.value),a.value!==`all`&&(e.provider_id=a.value),s.value!==`all`&&(e.client_model=s.value),c.value!==`all`&&(e.backend_model=c.value),l.value!==`all`&&(e.router_key_id=l.value),d.value!==`all`&&(e.status_code=d.value),e}function S(){r.value={start:``,end:``}}async function w(){try{f.value=await t.getProviders()}catch(t){console.error(`Failed to load providers:`,t),j.error(h(t,e(`logs.messages.loadProvidersFailed`)))}}async function ee(){try{m.value=await t.getRouterKeys()}catch(t){console.error(`Failed to load router keys:`,t),j.error(h(t,e(`logs.messages.loadKeysFailed`)))}}async function T(){try{let e=await t.getMappingGroups(),n=new Set,r=new Set;for(let t of e){t.client_model&&n.add(t.client_model);let e=Oe(t.rule);if(e)for(let t of e.targets??[])t.backend_model&&r.add(t.backend_model)}g.value=[...n].sort(),_.value=[...r].sort()}catch(e){console.error(`useLogFilters.loadModelOptions:`,e),g.value=[],_.value=[]}}return p(async()=>{try{let e=await t.getLogsInit();e.providers&&(f.value=e.providers),e.router_keys&&(m.value=e.router_keys),e.client_models&&(g.value=e.client_models),e.backend_models&&(_.value=e.backend_models)}catch(e){console.error(`useLogFilters.init:`,e),await Promise.allSettled([w(),ee(),T()])}}),{PERIODS:ke,period:n,dateRange:r,dateRangeError:y,providerFilter:a,clientModelFilter:s,backendModelFilter:c,keyFilter:l,apiTypeFilter:u,statusFilter:d,providers:f,routerKeys:m,clientModelOptions:g,backendModelOptions:_,hasDateRange:v,clearDateRange:S,buildFilterParams:x}}var Y=20,je=864e5;function Me(){let{t:e}=o(),n=C([]),r=C(0),a=C(1),s=C({}),c=C(30),l=C(!1),u=C(!1),d=C(new Set),f=C({}),p=C({}),m=C(!1),g=C(null),_=i(()=>Math.ceil(r.value/Y));async function v(i){i&&(s.value=i),l.value=!0;try{let e=await t.getLogs({page:a.value,limit:Y,view:`grouped`,...s.value});n.value=e.data,r.value=e.total,d.value.clear(),f.value={},p.value={}}catch(t){console.error(`Failed to load logs:`,t),j.error(h(t,e(`logs.messages.loadFailed`)))}finally{l.value=!1}}function y(e){e>=1&&e<=_.value&&e!==a.value&&(a.value=e,v())}let b=C(null),x=C(!1);async function S(){try{let e=new Date(Date.now()-c.value*je).toISOString(),n=await t.deleteLogsBefore(e);u.value=!1,a.value=1,await v(),b.value=n.deleted,x.value=!0}catch(t){console.error(`Failed to cleanup logs:`,t),j.error(h(t,e(`logs.messages.cleanupFailed`)))}}async function ee(n){let r=n.id;if(d.value.has(r)){d.value.delete(r);return}if(d.value.add(r),!f.value[r]){p.value[r]=!0;try{f.value[r]=await t.getLogChildren(r)}catch(t){console.error(`Failed to load child logs:`,t),j.error(h(t,e(`logs.messages.loadSubRequestsFailed`)))}finally{p.value[r]=!1}}}async function T(n){try{let e=await t.getLogDetail(n);g.value=w(e,e.child_count?await t.getLogChildren(n):[]),m.value=!0}catch(t){console.error(`Failed to load log detail:`,t),j.error(h(t,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:Y,loading:l,logs:n,total:r,page:a,totalPages:_,cleanupDays:c,showCleanup:u,expandedRows:d,childLogs:f,childLoading:p,logDetailOpen:m,selectedLogEntry:g,cleanupResult:b,showCleanupResult:x,loadLogs:v,goToPage:y,handleCleanup:S,toggleExpand:ee,openLogDetail:T}}var Ne={class:`page`},Pe={class:`flex items-center justify-between mb-4`},Fe={class:`text-lg font-semibold text-foreground`},Ie={class:`flex flex-wrap items-center gap-2 mb-4`},Le={class:`flex`},Re={class:`flex items-center gap-1`},ze={key:1,class:`text-xs text-destructive whitespace-nowrap`},Be={key:0,class:`absolute inset-0 bg-background/50 flex items-center justify-center z-10`},Ve={class:`space-y-3 w-3/4`},He={class:`flex flex-col items-center gap-2`},Ue={class:`text-sm text-muted-foreground`},We={key:0,class:`text-xs text-muted-foreground`},Ge={class:`flex items-center justify-between mt-4`},Ke={class:`text-sm text-muted-foreground`},qe={class:`flex items-center gap-1`},Je={key:0,class:`px-2 text-sm text-muted-foreground`},Ye={class:`flex items-center justify-end mt-2 gap-2`},Xe={class:`text-xs text-muted-foreground`},Ze={class:`text-xs text-muted-foreground`},Qe={class:`text-sm text-muted-foreground`},$e={class:`mb-4`},et=9,tt=300,nt=7,X=2,Z=1,rt=2e3,it=y({__name:`Logs`,setup(t){let{t:c}=o(),{PERIODS:l,period:h,dateRange:y,dateRangeError:w,providerFilter:T,clientModelFilter:E,backendModelFilter:D,keyFilter:O,statusFilter:k,providers:ce,routerKeys:j,clientModelOptions:de,backendModelOptions:ve,clearDateRange:ye,buildFilterParams:I}=Ae(),{logs:R,total:Te,page:U,totalPages:W,cleanupDays:G,showCleanup:K,cleanupResult:Ee,showCleanupResult:q,expandedRows:J,childLogs:Oe,childLoading:ke,logDetailOpen:Y,selectedLogEntry:je,loadLogs:it,goToPage:Q,handleCleanup:at,toggleExpand:ot,openLogDetail:st,loading:ct}=Me(),lt=i(()=>{let e=W.value,t=U.value;if(e<=nt)return Array.from({length:e},(e,t)=>t+1);let n=[Z],r=Math.max(Z+1,t-X),i=Math.min(e-Z,t+X);r>Z+X&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-X&&n.push(`...`),n.push(e),n}),{retentionDays:ut,retentionSaving:dt,saveRetention:ft,loadRetention:pt}=we(),{copy:mt}=te(),$=C(null);function ht(e){mt(e),$.value=e,setTimeout(()=>{$.value===e&&($.value=null)},rt)}let gt=i(()=>T.value!==`all`||E.value!==`all`||D.value!==`all`||O.value!==`all`||k.value!==`all`||!!y.value.start||!!y.value.end);function _t(){h.value=`5h`,y.value={start:``,end:``},T.value=`all`,E.value=`all`,D.value=`all`,O.value=`all`,k.value=`all`}let vt=null;return r([h,y,T,E,D,O,k],()=>{U.value=1,vt&&clearTimeout(vt),vt=setTimeout(()=>it(I()),tt)},{deep:!0}),p(()=>{it(I()),pt()}),(t,r)=>(S(),v(`div`,Ne,[e(`div`,Pe,[e(`h2`,Fe,a(b(c)(`logs.title`)),1),u(b(_),{variant:`ghost`,size:`sm`,onClick:r[0]||=e=>K.value=!0},{default:g(()=>[m(a(b(c)(`logs.cleanupLogs`)),1)]),_:1})]),e(`div`,Ie,[e(`div`,Le,[(S(!0),v(s,null,d(b(l),e=>(S(),f(b(_),{key:e.value,variant:b(h)===e.value?`default`:`outline`,size:`sm`,class:`rounded-none first:rounded-l-md last:rounded-r-md -ml-px first:ml-0`,onClick:t=>h.value=e.value},{default:g(()=>[m(a(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),e(`div`,Re,[u(b(z),{type:`datetime-local`,modelValue:b(y).start,"onUpdate:modelValue":r[1]||=e=>b(y).start=e,class:`w-44`},null,8,[`modelValue`]),r[19]||=e(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),u(b(z),{type:`datetime-local`,modelValue:b(y).end,"onUpdate:modelValue":r[2]||=e=>b(y).end=e,class:`w-44`},null,8,[`modelValue`]),b(y).start||b(y).end?(S(),f(b(_),{key:0,variant:`ghost`,size:`sm`,onClick:b(ye)},{default:g(()=>[m(a(b(c)(`logs.clear`)),1)]),_:1},8,[`onClick`])):x(``,!0),b(w)?(S(),v(`span`,ze,a(b(w)),1)):x(``,!0)]),u(b(F),{modelValue:b(T),"onUpdate:modelValue":r[3]||=e=>n(T)?T.value=e:null},{default:g(()=>[u(b(N),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.allProviders`)),1)]),_:1}),(S(!0),v(s,null,d(b(ce),e=>(S(),f(b(M),{key:e.id,value:e.id},{default:g(()=>[m(a(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(E),"onUpdate:modelValue":r[4]||=e=>n(E)?E.value=e:null},{default:g(()=>[u(b(N),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.filters.allClientModels`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.filters.allClientModels`)),1)]),_:1}),(S(!0),v(s,null,d(b(de),e=>(S(),f(b(M),{key:e,value:e},{default:g(()=>[m(a(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(D),"onUpdate:modelValue":r[5]||=e=>n(D)?D.value=e:null},{default:g(()=>[u(b(N),{class:`w-32 truncate`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.filters.allBackendModels`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.filters.allBackendModels`)),1)]),_:1}),(S(!0),v(s,null,d(b(ve),e=>(S(),f(b(M),{key:e,value:e},{default:g(()=>[m(a(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(O),"onUpdate:modelValue":r[6]||=e=>n(O)?O.value=e:null},{default:g(()=>[u(b(N),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.allKeys`)),1)]),_:1}),(S(!0),v(s,null,d(b(j),e=>(S(),f(b(M),{key:e.id,value:e.id},{default:g(()=>[m(a(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),u(b(F),{modelValue:b(k),"onUpdate:modelValue":r[7]||=e=>n(k)?k.value=e:null},{default:g(()=>[u(b(N),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[u(b(P),{placeholder:b(c)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),u(b(A),null,{default:g(()=>[u(b(M),{value:`all`},{default:g(()=>[m(a(b(c)(`logs.allStatus`)),1)]),_:1}),u(b(M),{value:`200`},{default:g(()=>[...r[20]||=[m(`200`,-1)]]),_:1}),u(b(M),{value:`non200`},{default:g(()=>[m(a(b(c)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),u(b(be),{flush:``,class:`relative`},{default:g(()=>[b(ct)?(S(),v(`div`,Be,[e(`div`,Ve,[u(b(L),{class:`h-8 w-full`}),u(b(L),{class:`h-8 w-full`}),u(b(L),{class:`h-8 w-5/6`})])])):x(``,!0),u(b(ge),{"delay-duration":300},{default:g(()=>[u(b(Se),{class:`[&_td]:px-3 [&_th]:px-3`},{default:g(()=>[u(b(Ce),null,{default:g(()=>[u(b(H),{class:`bg-muted`},{default:g(()=>[u(b(V),{class:`w-10`}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.id`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.time`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.clientModel`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.targetModel`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.latency`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.tags`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.latency`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.error`)),1)]),_:1}),u(b(V),{class:`text-muted-foreground`},{default:g(()=>[m(a(b(c)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),u(b(xe),null,{default:g(()=>[(S(!0),v(s,null,d(b(R),e=>(S(),v(s,{key:e.id},[u(De,{log:e,expanded:b(J).has(e.id),"copied-id":$.value,onToggleExpand:b(ot),onOpenDetail:b(st),onCopy:ht},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),b(J).has(e.id)?(S(),v(s,{key:0},[b(ke)[e.id]?(S(),f(b(H),{key:0},{default:g(()=>[u(b(B),{colspan:et,class:`text-center py-2 pl-10`},{default:g(()=>[u(b(L),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):b(Oe)[e.id]?.length?(S(!0),v(s,{key:1},d(b(Oe)[e.id],e=>(S(),f(De,{key:e.id,log:e,"is-child":!0,"copied-id":$.value,onOpenDetail:b(st),onCopy:ht},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):x(``,!0)],64)):x(``,!0)],64))),128)),b(R).length===0&&!b(ct)?(S(),f(b(H),{key:0},{default:g(()=>[u(b(B),{colspan:et,class:`py-12 text-center`},{default:g(()=>[e(`div`,He,[e(`p`,Ue,a(b(c)(`logs.noLogs`)),1),gt.value?(S(),v(`p`,We,a(b(c)(`logs.noLogsFilterHint`)),1)):x(``,!0),gt.value?(S(),f(b(_),{key:1,variant:`ghost`,size:`sm`,onClick:_t},{default:g(()=>[m(a(b(c)(`logs.clearAllFilters`)),1)]),_:1})):x(``,!0)])]),_:1})]),_:1})):x(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),e(`div`,Ge,[e(`p`,Ke,a(b(c)(`logs.pagination`,{total:b(Te),page:b(U),totalPages:b(W)})),1),e(`div`,qe,[u(b(_),{variant:`outline`,size:`sm`,onClick:r[8]||=e=>b(Q)(1),disabled:b(U)<=1},{default:g(()=>[m(a(b(c)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),u(b(_),{variant:`outline`,size:`sm`,onClick:r[9]||=e=>b(Q)(b(U)-1),disabled:b(U)<=1},{default:g(()=>[m(a(b(c)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(S(!0),v(s,null,d(lt.value,e=>(S(),v(s,{key:e},[e===`...`?(S(),v(`span`,Je,`...`)):(S(),f(b(_),{key:1,variant:e===b(U)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>b(Q)(e)},{default:g(()=>[m(a(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),u(b(_),{variant:`outline`,size:`sm`,onClick:r[10]||=e=>b(Q)(b(U)+1),disabled:b(U)>=b(W)},{default:g(()=>[m(a(b(c)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),u(b(_),{variant:`outline`,size:`sm`,onClick:r[11]||=e=>b(Q)(b(W)),disabled:b(U)>=b(W)},{default:g(()=>[m(a(b(c)(`logs.lastPage`)),1)]),_:1},8,[`disabled`])])]),e(`div`,Ye,[e(`span`,Xe,a(b(c)(`logs.cleanup.autoCleanup`)),1),u(b(z),{type:`number`,modelValue:b(ut),"onUpdate:modelValue":r[12]||=e=>n(ut)?ut.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-16 h-6 text-xs`},null,8,[`modelValue`]),e(`span`,Ze,a(b(c)(`logs.cleanup.days`)),1),u(b(_),{size:`sm`,onClick:b(ft),disabled:b(dt)},{default:g(()=>[m(a(b(c)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])]),u(ee,{open:b(Y),"onUpdate:open":r[13]||=e=>n(Y)?Y.value=e:null,source:`history`,"log-entry":b(je)},null,8,[`open`,`log-entry`]),u(b(ie),{open:b(K),"onUpdate:open":r[16]||=e=>n(K)?K.value=e:null},{default:g(()=>[u(b(ne),null,{default:g(()=>[u(b(re),null,{default:g(()=>[u(b(oe),null,{default:g(()=>[m(a(b(c)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),e(`p`,Qe,a(b(c)(`logs.cleanup.description`)),1),e(`div`,$e,[u(b(se),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[m(a(b(c)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),u(b(z),{modelValue:b(G),"onUpdate:modelValue":r[14]||=e=>n(G)?G.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),u(b(ae),null,{default:g(()=>[u(b(_),{variant:`outline`,onClick:r[15]||=e=>K.value=!1},{default:g(()=>[m(a(b(c)(`common.cancel`)),1)]),_:1}),u(b(_),{variant:`destructive`,onClick:b(at)},{default:g(()=>[m(a(b(c)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),u(b(me),{open:b(q),"onUpdate:open":r[18]||=e=>n(q)?q.value=e:null},{default:g(()=>[u(b(_e),null,{default:g(()=>[u(b(he),null,{default:g(()=>[u(b(pe),null,{default:g(()=>[m(a(b(c)(`logs.cleanupResult.title`)),1)]),_:1}),u(b(fe),null,{default:g(()=>[m(a(b(c)(`logs.cleanupResult.description`,{count:b(Ee)})),1)]),_:1})]),_:1}),u(b(le),null,{default:g(()=>[u(b(ue),{onClick:r[17]||=e=>q.value=!1},{default:g(()=>[m(a(b(c)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{it as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Ot as n,Q as r,Qt as i,R as a,U as o,X as s,Yt as c,at as l,bt as u,et as ee,gt as te,it as d,j as f,jt as p,n as m,nt as h,ot as g,qt as _,tt as v,vt as y,zt as b}from"./button-BuzJlj9X.js";import{t as ne}from"./arrow-down-CuC5m7VK.js";import{t as re}from"./image-BkW18kNK.js";import{t as x}from"./plus-fHe1ysx9.js";import{a as ie,n as ae,o as oe,r as se,t as ce}from"./dialog-CtPySx34.js";import{t as S}from"./Label-DVu1uVI7.js";import{t as C}from"./Switch-BDu-VJJd.js";import{a as w,ct as le,lt as ue,ut as de}from"./index-BjnFvPid.js";import{t as T}from"./Input-CLu4bS6g.js";import{t as E}from"./CascadingModelSelect-C_Ydm0fg.js";import{t as fe}from"./useProviderGroups-DMuF_-28.js";var pe=a(`arrow-right-left`,[[`path`,{d:`m16 3 4 4-4 4`,key:`1x1c3m`}],[`path`,{d:`M20 7H4`,key:`zbl0bi`}],[`path`,{d:`m8 21-4-4 4-4`,key:`h9nckh`}],[`path`,{d:`M4 17h16`,key:`g4d7ey`}]]);function D(e,t){let n={},r=!1;try{let t=JSON.parse(e);n=t.default&&!t.targets?{targets:[t.default]}:t}catch{r=!0}let i=(n.targets??[]).map(e=>({backend_model:e.backend_model||``,provider_id:e.provider_id||``,overflow_provider_id:e.overflow_provider_id,overflow_model:e.overflow_model})),a=i[0],o=a?.overflow_provider_id&&a?.overflow_model?{provider_id:a.overflow_provider_id,model:a.overflow_model}:null,s=n.multimodal_fallback??null;return{data:{targets:i.length>0?i:[{backend_model:``,provider_id:t}],overflow:o,multimodal:s},parseError:r}}function O(e,t,n){let r=e.map((e,n)=>n===0&&t?{backend_model:e.backend_model,provider_id:e.provider_id,overflow_provider_id:t.provider_id,overflow_model:t.model}:{backend_model:e.backend_model,provider_id:e.provider_id});return JSON.stringify({targets:r,...n?{multimodal_fallback:n}:{}})}function me(e,t,n){let{data:r}=D(e,n),i=[];for(let e of r.targets){let n=t.find(t=>t.id===e.provider_id)?.name??e.provider_id.slice(0,6);i.push(n)}if(r.overflow){let e=t.find(e=>e.id===r.overflow.provider_id);i.push(`↓ `+(e?.name??`OF`))}return r.multimodal&&i.push(`MM`),i.join(` → `)}var he={class:`page`},ge={class:`flex items-center gap-4 mb-4`},_e={class:`text-base font-semibold text-foreground shrink-0`},ve={class:`flex gap-4`,style:{"min-height":`calc(100vh - 120px)`}},ye={class:`w-[340px] shrink-0 flex flex-col gap-2`},be={class:`font-mono text-[10px] text-muted-foreground/60 px-0.5`},k={class:`flex flex-col gap-0.5 flex-1 overflow-y-auto`},A=[`onClick`],j={class:`flex-1 min-w-0`},M={key:0,class:`py-8 text-center text-xs text-muted-foreground/50`},N={class:`flex-1 bg-card rounded-lg border border-border flex flex-col overflow-hidden`},xe={key:0,class:`flex-1 flex items-center justify-center text-muted-foreground/50 text-sm flex-col gap-2`},Se={class:`flex items-center gap-3 px-4 py-3 border-b border-border bg-background/30`},Ce={class:`font-mono text-sm font-bold flex-1 truncate`},we={class:`flex-1 overflow-y-auto px-4 py-4 space-y-5`},Te={class:`flex items-center gap-2 mb-2`},Ee={class:`text-xs font-semibold text-muted-foreground`},De={class:`font-mono text-[10px] text-muted-foreground/40 bg-muted/30 px-1.5 py-px rounded`},Oe={class:`flex flex-col gap-1.5`},ke={class:`flex-1`},Ae={class:`flex items-center gap-2 mb-2`},je={class:`text-xs font-semibold text-primary/60`},Me={key:0,class:`font-mono text-[10px] text-primary/40 bg-primary/8 px-1.5 py-px rounded`},Ne={class:`bg-background border border-border rounded-md px-3 py-2.5`},Pe={class:`flex items-center gap-2.5 mb-2`},Fe={class:`text-xs text-foreground`},Ie={key:0,class:`flex gap-2`},Le={class:`flex-1`},Re={key:1,class:`text-xs text-muted-foreground/40`},ze={class:`flex items-center gap-2 mb-2`},Be={class:`text-xs font-semibold text-blue-500/60`},Ve={key:0,class:`font-mono text-[10px] text-blue-500/40 bg-blue-500/8 px-1.5 py-px rounded`},He={class:`bg-background border border-border rounded-md px-3 py-2.5`},Ue={class:`flex items-center gap-2.5 mb-2`},We={class:`text-xs text-foreground`},Ge={key:0,class:`flex gap-2`},Ke={class:`flex-1`},qe={key:1,class:`text-xs text-muted-foreground/40`},Je={key:2,class:`flex items-center gap-2 mt-2 px-2 py-1.5 bg-warning/8 rounded`},Ye={class:`text-[10px] text-warning leading-relaxed`},Xe={class:`flex items-center justify-between px-4 py-2.5 border-t border-border bg-background/30`},P={key:0,class:`flex items-center gap-2 text-xs text-danger`},Ze={class:`font-mono text-[10px] text-muted-foreground/40`},Qe={class:`flex gap-2`},$e={class:`space-y-3 py-2`},et={class:`space-y-1.5`},tt={class:`space-y-1.5`},F=g({__name:`ModelMappings`,setup(a){let{t:g}=o(),F=b([]),I=b([]),L=b(null),R=b(``),z=b(!1),B=b(!1),V=b(!1),H=b(``),U=b(void 0),W=b([]),G=b(null),K=b(null),q=r(()=>fe(I.value)),J=r(()=>{let e=R.value.toLowerCase().trim();return e?F.value.filter(t=>t.client_model.toLowerCase().includes(e)):F.value}),Y=r(()=>F.value.find(e=>e.id===L.value)??null),X=r(()=>!!G.value),Z=r(()=>!!K.value),nt=r(()=>H.value.trim().length>0&&!!U.value?.model),Q=r(()=>I.value[0]?.id??``);function rt(e){let t=D(e.rule,Q.value);return t.parseError&&w.error(g(`mappings.messages.parseRuleFailed`)),t.data}function it(e){return me(e.rule,I.value,Q.value)}function at(e){L.value=e,B.value=!1}n(Y,e=>{if(!e)return;let t=rt(e);W.value=t.targets.map(e=>({...e})),G.value=t.overflow?{...t.overflow}:null,K.value=t.multimodal?{...t.multimodal}:null,B.value=!1});function ot(){let e=q.value[0];W.value.push({backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``})}function st(e){W.value.length<=1||W.value.splice(e,1)}function ct(e,t){W.value[e]={...W.value[e],provider_id:t.provider_id,backend_model:t.model}}function lt(e){if(e){let e=q.value[0];G.value={provider_id:e?.provider.id??``,model:e?.models[0]?.name??``}}else G.value=null}function ut(e){G.value={provider_id:e.provider_id,model:e.model}}function dt(e){if(e){let e=q.value[0];K.value={provider_id:e?.provider.id??``,backend_model:e?.models[0]?.name??``}}else K.value=null}function ft(e){K.value={provider_id:e.provider_id,backend_model:e.model}}async function $(){try{let e=await t.getMappingGroupsInit();F.value=e.groups,I.value=e.providers}catch(e){console.error(`ModelMappings.init:`,e),w.error(f(e,g(`mappings.messages.saveFailed`)))}!L.value&&F.value.length>0&&(L.value=F.value[0].id)}async function pt(){if(!Y.value)return;let e=Y.value.client_model.trim();if(e){z.value=!0;try{await t.updateMappingGroup(Y.value.id,{client_model:e,rule:O(W.value,G.value,K.value)}),await $(),w.success(g(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.save:`,e),w.error(f(e,g(`mappings.messages.saveFailed`)))}finally{z.value=!1}}}async function mt(){if(Y.value)try{await t.toggleMappingGroup(Y.value.id),await $()}catch(e){console.error(`ModelMappings.toggle:`,e),w.error(f(e,g(`mappings.messages.toggleFailed`)))}}async function ht(){if(Y.value)try{await t.deleteMappingGroup(Y.value.id),B.value=!1;let e=F.value.filter(e=>e.id!==Y.value.id);L.value=e.length>0?e[0].id:null,await $(),w.success(g(`common.deleteSuccess`))}catch(e){console.error(`ModelMappings.delete:`,e),w.error(f(e,g(`mappings.messages.deleteFailed`,{model:Y.value.client_model})))}}function gt(){H.value=``;let e=q.value[0];U.value=e?{provider_id:e.provider.id,model:e.models[0]?.name??``}:void 0,V.value=!0}async function _t(){let e=H.value.trim();if(!(!e||!U.value?.model))try{let n=O([{provider_id:U.value.provider_id,backend_model:U.value.model}],null,null),r=await t.createMappingGroup({client_model:e,rule:n});V.value=!1,await $(),L.value=r.id,w.success(g(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.add:`,e),w.error(f(e,g(`mappings.messages.saveFailed`)))}}return te($),(t,n)=>(y(),h(`div`,he,[e(`div`,ge,[e(`h2`,_e,i(_(g)(`mappings.title`)),1),n[9]||=e(`div`,{class:`flex-1`},null,-1),l(_(m),{size:`sm`,class:`h-[30px] gap-1.5`,onClick:gt},{default:p(()=>[l(_(x),{class:`w-3.5 h-3.5`}),d(` `+i(_(g)(`mappings.addGroup`)),1)]),_:1})]),e(`div`,ve,[e(`aside`,ye,[e(`div`,null,[l(_(T),{modelValue:R.value,"onUpdate:modelValue":n[0]||=e=>R.value=e,placeholder:_(g)(`common.search`)+`...`,class:`h-[30px] text-[13px]`},null,8,[`modelValue`,`placeholder`])]),e(`span`,be,i(J.value.length)+` / `+i(F.value.length)+` `+i(_(g)(`mappings.totalMappings`,{count:0}).replace(/\d+.*/,``)),1),e(`div`,k,[(y(!0),h(s,null,u(J.value,t=>(y(),h(`div`,{key:t.id,class:c([`flex items-center gap-2.5 px-3 py-2 bg-card rounded-lg border cursor-pointer transition-colors`,L.value===t.id?`border-primary bg-primary/10`:`border-border hover:bg-muted/30`]),onClick:e=>at(t.id)},[e(`div`,j,[e(`div`,{class:c([`font-mono text-xs font-semibold truncate`,t.is_active?`text-foreground`:`text-muted-foreground`])},i(t.client_model),3),e(`div`,{class:c([`text-[10px] truncate mt-0.5`,t.is_active?`text-muted-foreground/60`:`text-muted-foreground/30`])},i(it(t)),3)]),e(`span`,{class:c([`inline-flex items-center gap-1 px-1.5 py-px rounded-full text-[9px] font-mono font-semibold shrink-0`,t.is_active?`bg-success/12 text-success`:`bg-muted/40 text-muted-foreground/50`])},[e(`span`,{class:c([`w-1 h-1 rounded-full`,t.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),d(` `+i(t.is_active?`ON`:`OFF`),1)],2)],10,A))),128)),J.value.length===0?(y(),h(`div`,M,i(_(g)(`mappings.noGroups`)),1)):v(``,!0)])]),e(`main`,N,[Y.value?(y(),h(s,{key:1},[e(`div`,Se,[e(`span`,Ce,i(Y.value.client_model),1),e(`span`,{class:c([`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[10px] font-mono font-semibold h-5`,Y.value.is_active?`bg-success/12 text-success`:`bg-muted/40 text-muted-foreground/50`])},[e(`span`,{class:c([`w-1 h-1 rounded-full`,Y.value.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),d(` `+i(Y.value.is_active?`Active`:`Inactive`),1)],2),l(_(C),{"model-value":!!Y.value.is_active,"onUpdate:modelValue":mt},null,8,[`model-value`])]),e(`div`,we,[e(`section`,null,[e(`div`,Te,[l(_(le),{class:`w-3.5 h-3.5 text-primary/60`}),e(`span`,Ee,i(_(g)(`mappings.editor.failoverChain`)),1),e(`span`,De,i(W.value.length)+` target`+i(W.value.length>1?`s`:``),1)]),e(`div`,Oe,[(y(!0),h(s,null,u(W.value,(t,n)=>(y(),h(`div`,{key:n,class:`flex items-center gap-2 px-3 py-2 bg-background border border-border rounded-md`},[e(`span`,{class:c([`w-[22px] h-[22px] flex items-center justify-center rounded-full text-[10px] font-mono font-bold shrink-0`,n===0?`bg-primary/15 text-primary`:`bg-muted/40 text-muted-foreground`])},i(n+1),3),e(`div`,ke,[l(E,{providers:q.value,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:_(g)(`mappings.selectProviderModel`),"onUpdate:modelValue":e=>ct(n,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),W.value.length>1?(y(),ee(_(m),{key:0,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/30 hover:text-destructive`,onClick:e=>st(n)},{default:p(()=>[l(_(ue),{class:`w-3 h-3`})]),_:1},8,[`onClick`])):v(``,!0)]))),128))]),l(_(m),{variant:`ghost`,size:`sm`,class:`mt-1.5 text-xs text-muted-foreground/40 border border-dashed border-border hover:border-primary/40 hover:text-primary/60`,onClick:ot},{default:p(()=>[l(_(x),{class:`w-3 h-3 mr-1`}),d(` `+i(_(g)(`mappings.addBackup`)),1)]),_:1})]),n[10]||=e(`div`,{class:`border-t border-dashed border-primary/10`},null,-1),e(`section`,null,[e(`div`,Ae,[l(_(ne),{class:`w-3.5 h-3.5 text-primary/50`}),e(`span`,je,i(_(g)(`mappings.editor.contextOverflow`)),1),X.value?(y(),h(`span`,Me,i(_(g)(`mappings.enabled`)),1)):v(``,!0)]),e(`div`,Ne,[e(`div`,Pe,[l(_(C),{"model-value":X.value,"onUpdate:modelValue":lt},null,8,[`model-value`]),e(`span`,Fe,i(_(g)(`mappings.overflowTooltip`)),1)]),X.value?(y(),h(`div`,Ie,[e(`div`,Le,[l(E,{providers:q.value,"model-value":G.value?{provider_id:G.value.provider_id,model:G.value.model}:void 0,compact:``,dashed:``,placeholder:_(g)(`mappings.selectModel`),"onUpdate:modelValue":n[1]||=e=>ut(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(y(),h(`span`,Re,i(_(g)(`mappings.overflowTooltip`)),1))])]),e(`section`,null,[e(`div`,ze,[l(_(re),{class:`w-3.5 h-3.5 text-blue-500/50`}),e(`span`,Be,i(_(g)(`mappings.editor.multimodalFallback`)),1),Z.value?(y(),h(`span`,Ve,i(_(g)(`mappings.enabled`)),1)):v(``,!0)]),e(`div`,He,[e(`div`,Ue,[l(_(C),{"model-value":Z.value,"onUpdate:modelValue":dt},null,8,[`model-value`]),e(`span`,We,i(_(g)(`mappings.multimodalFallback.add`)),1)]),Z.value?(y(),h(`div`,Ge,[e(`div`,Ke,[l(E,{providers:q.value,"model-value":K.value?{provider_id:K.value.provider_id,model:K.value.backend_model}:void 0,compact:``,dashed:``,placeholder:_(g)(`mappings.multimodalFallback.selectProviderModel`),"onUpdate:modelValue":n[2]||=e=>ft(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(y(),h(`span`,qe,i(_(g)(`mappings.multimodalFallback.add`)),1)),Z.value?(y(),h(`div`,Je,[l(_(de),{class:`w-3 h-3 text-warning shrink-0`}),e(`span`,Ye,i(_(g)(`mappings.multimodalFallback.sessionLockWarning`)),1)])):v(``,!0)])])]),e(`div`,Xe,[B.value?(y(),h(`div`,P,[d(i(_(g)(`mappings.confirmDeleteDesc`,{model:Y.value.client_model}))+` `,1),l(_(m),{variant:`destructive`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:ht},{default:p(()=>[d(i(_(g)(`common.yes`)),1)]),_:1}),l(_(m),{variant:`ghost`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:n[3]||=e=>B.value=!1},{default:p(()=>[d(i(_(g)(`common.no`)),1)]),_:1})])):(y(),h(s,{key:1},[e(`span`,Ze,` ID: `+i(Y.value.id),1),e(`div`,Qe,[l(_(m),{variant:`ghost`,size:`sm`,class:`text-xs text-danger hover:text-danger`,onClick:n[4]||=e=>B.value=!0},{default:p(()=>[d(i(_(g)(`common.delete`)),1)]),_:1}),l(_(m),{size:`sm`,class:`text-xs`,disabled:z.value,onClick:pt},{default:p(()=>[d(i(z.value?_(g)(`common.saving`):_(g)(`common.save`)),1)]),_:1},8,[`disabled`])])],64))])],64)):(y(),h(`div`,xe,[l(_(pe),{class:`w-6 h-6 opacity-40`}),d(` `+i(_(g)(`mappings.selectProviderOrModel`)),1)]))])]),l(_(oe),{open:V.value,"onUpdate:open":n[8]||=e=>V.value=!1},{default:p(()=>[l(_(ie),{class:`max-w-md`},{default:p(()=>[l(_(ae),null,{default:p(()=>[l(_(ce),null,{default:p(()=>[d(i(_(g)(`mappings.addGroup`)),1)]),_:1})]),_:1}),e(`div`,$e,[e(`div`,et,[l(_(S),{class:`text-xs text-muted-foreground`},{default:p(()=>[d(i(_(g)(`mappings.clientModel`)),1)]),_:1}),l(_(T),{modelValue:H.value,"onUpdate:modelValue":n[5]||=e=>H.value=e,placeholder:_(g)(`mappings.editor.clientInputPlaceholder`),class:`h-8 font-mono text-xs`},null,8,[`modelValue`,`placeholder`])]),e(`div`,tt,[l(_(S),{class:`text-xs text-muted-foreground`},{default:p(()=>[d(i(_(g)(`mappings.selectProviderModel`)),1)]),_:1}),l(E,{providers:q.value,"model-value":U.value,compact:``,placeholder:_(g)(`mappings.selectProviderModel`),"onUpdate:modelValue":n[6]||=e=>U.value=e},null,8,[`providers`,`model-value`,`placeholder`])])]),l(_(se),null,{default:p(()=>[l(_(m),{variant:`ghost`,size:`sm`,onClick:n[7]||=e=>V.value=!1},{default:p(()=>[d(i(_(g)(`common.cancel`)),1)]),_:1}),l(_(m),{size:`sm`,disabled:!nt.value,onClick:_t},{default:p(()=>[d(i(_(g)(`mappings.addGroup`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{F as default};
|
|
1
|
+
import{$ as e,A as t,Ot as n,Q as r,Qt as i,R as a,U as o,X as s,Yt as c,at as l,bt as u,et as ee,gt as te,it as d,j as f,jt as p,n as m,nt as h,ot as g,qt as _,tt as v,vt as y,zt as b}from"./button-DrEBx6kL.js";import{t as ne}from"./arrow-down-DJpsdr-b.js";import{t as re}from"./image-CqmiJ8tH.js";import{t as x}from"./plus-DABSjQj-.js";import{a as ie,n as ae,o as oe,r as se,t as ce}from"./dialog-NNn0XuVD.js";import{t as S}from"./Label-DN8P1c9z.js";import{t as C}from"./Switch-Bzp4wFcG.js";import{a as w,ct as le,lt as ue,ut as de}from"./index-BE0sEUYE.js";import{t as T}from"./Input-BR3Kn_wA.js";import{t as E}from"./CascadingModelSelect-C5_CzSuh.js";import{t as fe}from"./useProviderGroups-cMSONEIb.js";var pe=a(`arrow-right-left`,[[`path`,{d:`m16 3 4 4-4 4`,key:`1x1c3m`}],[`path`,{d:`M20 7H4`,key:`zbl0bi`}],[`path`,{d:`m8 21-4-4 4-4`,key:`h9nckh`}],[`path`,{d:`M4 17h16`,key:`g4d7ey`}]]);function D(e,t){let n={},r=!1;try{let t=JSON.parse(e);n=t.default&&!t.targets?{targets:[t.default]}:t}catch{r=!0}let i=(n.targets??[]).map(e=>({backend_model:e.backend_model||``,provider_id:e.provider_id||``,overflow_provider_id:e.overflow_provider_id,overflow_model:e.overflow_model})),a=i[0],o=a?.overflow_provider_id&&a?.overflow_model?{provider_id:a.overflow_provider_id,model:a.overflow_model}:null,s=n.multimodal_fallback??null;return{data:{targets:i.length>0?i:[{backend_model:``,provider_id:t}],overflow:o,multimodal:s},parseError:r}}function O(e,t,n){let r=e.map((e,n)=>n===0&&t?{backend_model:e.backend_model,provider_id:e.provider_id,overflow_provider_id:t.provider_id,overflow_model:t.model}:{backend_model:e.backend_model,provider_id:e.provider_id});return JSON.stringify({targets:r,...n?{multimodal_fallback:n}:{}})}function me(e,t,n){let{data:r}=D(e,n),i=[];for(let e of r.targets){let n=t.find(t=>t.id===e.provider_id)?.name??e.provider_id.slice(0,6);i.push(n)}if(r.overflow){let e=t.find(e=>e.id===r.overflow.provider_id);i.push(`↓ `+(e?.name??`OF`))}return r.multimodal&&i.push(`MM`),i.join(` → `)}var he={class:`page`},ge={class:`flex items-center gap-4 mb-4`},_e={class:`text-base font-semibold text-foreground shrink-0`},ve={class:`flex gap-4`,style:{"min-height":`calc(100vh - 120px)`}},ye={class:`w-[340px] shrink-0 flex flex-col gap-2`},be={class:`font-mono text-[10px] text-muted-foreground/60 px-0.5`},k={class:`flex flex-col gap-0.5 flex-1 overflow-y-auto`},A=[`onClick`],j={class:`flex-1 min-w-0`},M={key:0,class:`py-8 text-center text-xs text-muted-foreground/50`},N={class:`flex-1 bg-card rounded-lg border border-border flex flex-col overflow-hidden`},xe={key:0,class:`flex-1 flex items-center justify-center text-muted-foreground/50 text-sm flex-col gap-2`},Se={class:`flex items-center gap-3 px-4 py-3 border-b border-border bg-background/30`},Ce={class:`font-mono text-sm font-bold flex-1 truncate`},we={class:`flex-1 overflow-y-auto px-4 py-4 space-y-5`},Te={class:`flex items-center gap-2 mb-2`},Ee={class:`text-xs font-semibold text-muted-foreground`},De={class:`font-mono text-[10px] text-muted-foreground/40 bg-muted/30 px-1.5 py-px rounded`},Oe={class:`flex flex-col gap-1.5`},ke={class:`flex-1`},Ae={class:`flex items-center gap-2 mb-2`},je={class:`text-xs font-semibold text-primary/60`},Me={key:0,class:`font-mono text-[10px] text-primary/40 bg-primary/8 px-1.5 py-px rounded`},Ne={class:`bg-background border border-border rounded-md px-3 py-2.5`},Pe={class:`flex items-center gap-2.5 mb-2`},Fe={class:`text-xs text-foreground`},Ie={key:0,class:`flex gap-2`},Le={class:`flex-1`},Re={key:1,class:`text-xs text-muted-foreground/40`},ze={class:`flex items-center gap-2 mb-2`},Be={class:`text-xs font-semibold text-blue-500/60`},Ve={key:0,class:`font-mono text-[10px] text-blue-500/40 bg-blue-500/8 px-1.5 py-px rounded`},He={class:`bg-background border border-border rounded-md px-3 py-2.5`},Ue={class:`flex items-center gap-2.5 mb-2`},We={class:`text-xs text-foreground`},Ge={key:0,class:`flex gap-2`},Ke={class:`flex-1`},qe={key:1,class:`text-xs text-muted-foreground/40`},Je={key:2,class:`flex items-center gap-2 mt-2 px-2 py-1.5 bg-warning/8 rounded`},Ye={class:`text-[10px] text-warning leading-relaxed`},Xe={class:`flex items-center justify-between px-4 py-2.5 border-t border-border bg-background/30`},P={key:0,class:`flex items-center gap-2 text-xs text-danger`},Ze={class:`font-mono text-[10px] text-muted-foreground/40`},Qe={class:`flex gap-2`},$e={class:`space-y-3 py-2`},et={class:`space-y-1.5`},tt={class:`space-y-1.5`},F=g({__name:`ModelMappings`,setup(a){let{t:g}=o(),F=b([]),I=b([]),L=b(null),R=b(``),z=b(!1),B=b(!1),V=b(!1),H=b(``),U=b(void 0),W=b([]),G=b(null),K=b(null),q=r(()=>fe(I.value)),J=r(()=>{let e=R.value.toLowerCase().trim();return e?F.value.filter(t=>t.client_model.toLowerCase().includes(e)):F.value}),Y=r(()=>F.value.find(e=>e.id===L.value)??null),X=r(()=>!!G.value),Z=r(()=>!!K.value),nt=r(()=>H.value.trim().length>0&&!!U.value?.model),Q=r(()=>I.value[0]?.id??``);function rt(e){let t=D(e.rule,Q.value);return t.parseError&&w.error(g(`mappings.messages.parseRuleFailed`)),t.data}function it(e){return me(e.rule,I.value,Q.value)}function at(e){L.value=e,B.value=!1}n(Y,e=>{if(!e)return;let t=rt(e);W.value=t.targets.map(e=>({...e})),G.value=t.overflow?{...t.overflow}:null,K.value=t.multimodal?{...t.multimodal}:null,B.value=!1});function ot(){let e=q.value[0];W.value.push({backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``})}function st(e){W.value.length<=1||W.value.splice(e,1)}function ct(e,t){W.value[e]={...W.value[e],provider_id:t.provider_id,backend_model:t.model}}function lt(e){if(e){let e=q.value[0];G.value={provider_id:e?.provider.id??``,model:e?.models[0]?.name??``}}else G.value=null}function ut(e){G.value={provider_id:e.provider_id,model:e.model}}function dt(e){if(e){let e=q.value[0];K.value={provider_id:e?.provider.id??``,backend_model:e?.models[0]?.name??``}}else K.value=null}function ft(e){K.value={provider_id:e.provider_id,backend_model:e.model}}async function $(){try{let e=await t.getMappingGroupsInit();F.value=e.groups,I.value=e.providers}catch(e){console.error(`ModelMappings.init:`,e),w.error(f(e,g(`mappings.messages.saveFailed`)))}!L.value&&F.value.length>0&&(L.value=F.value[0].id)}async function pt(){if(!Y.value)return;let e=Y.value.client_model.trim();if(e){z.value=!0;try{await t.updateMappingGroup(Y.value.id,{client_model:e,rule:O(W.value,G.value,K.value)}),await $(),w.success(g(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.save:`,e),w.error(f(e,g(`mappings.messages.saveFailed`)))}finally{z.value=!1}}}async function mt(){if(Y.value)try{await t.toggleMappingGroup(Y.value.id),await $()}catch(e){console.error(`ModelMappings.toggle:`,e),w.error(f(e,g(`mappings.messages.toggleFailed`)))}}async function ht(){if(Y.value)try{await t.deleteMappingGroup(Y.value.id),B.value=!1;let e=F.value.filter(e=>e.id!==Y.value.id);L.value=e.length>0?e[0].id:null,await $(),w.success(g(`common.deleteSuccess`))}catch(e){console.error(`ModelMappings.delete:`,e),w.error(f(e,g(`mappings.messages.deleteFailed`,{model:Y.value.client_model})))}}function gt(){H.value=``;let e=q.value[0];U.value=e?{provider_id:e.provider.id,model:e.models[0]?.name??``}:void 0,V.value=!0}async function _t(){let e=H.value.trim();if(!(!e||!U.value?.model))try{let n=O([{provider_id:U.value.provider_id,backend_model:U.value.model}],null,null),r=await t.createMappingGroup({client_model:e,rule:n});V.value=!1,await $(),L.value=r.id,w.success(g(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.add:`,e),w.error(f(e,g(`mappings.messages.saveFailed`)))}}return te($),(t,n)=>(y(),h(`div`,he,[e(`div`,ge,[e(`h2`,_e,i(_(g)(`mappings.title`)),1),n[9]||=e(`div`,{class:`flex-1`},null,-1),l(_(m),{size:`sm`,class:`h-[30px] gap-1.5`,onClick:gt},{default:p(()=>[l(_(x),{class:`w-3.5 h-3.5`}),d(` `+i(_(g)(`mappings.addGroup`)),1)]),_:1})]),e(`div`,ve,[e(`aside`,ye,[e(`div`,null,[l(_(T),{modelValue:R.value,"onUpdate:modelValue":n[0]||=e=>R.value=e,placeholder:_(g)(`common.search`)+`...`,class:`h-[30px] text-[13px]`},null,8,[`modelValue`,`placeholder`])]),e(`span`,be,i(J.value.length)+` / `+i(F.value.length)+` `+i(_(g)(`mappings.totalMappings`,{count:0}).replace(/\d+.*/,``)),1),e(`div`,k,[(y(!0),h(s,null,u(J.value,t=>(y(),h(`div`,{key:t.id,class:c([`flex items-center gap-2.5 px-3 py-2 bg-card rounded-lg border cursor-pointer transition-colors`,L.value===t.id?`border-primary bg-primary/10`:`border-border hover:bg-muted/30`]),onClick:e=>at(t.id)},[e(`div`,j,[e(`div`,{class:c([`font-mono text-xs font-semibold truncate`,t.is_active?`text-foreground`:`text-muted-foreground`])},i(t.client_model),3),e(`div`,{class:c([`text-[10px] truncate mt-0.5`,t.is_active?`text-muted-foreground/60`:`text-muted-foreground/30`])},i(it(t)),3)]),e(`span`,{class:c([`inline-flex items-center gap-1 px-1.5 py-px rounded-full text-[9px] font-mono font-semibold shrink-0`,t.is_active?`bg-success/12 text-success`:`bg-muted/40 text-muted-foreground/50`])},[e(`span`,{class:c([`w-1 h-1 rounded-full`,t.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),d(` `+i(t.is_active?`ON`:`OFF`),1)],2)],10,A))),128)),J.value.length===0?(y(),h(`div`,M,i(_(g)(`mappings.noGroups`)),1)):v(``,!0)])]),e(`main`,N,[Y.value?(y(),h(s,{key:1},[e(`div`,Se,[e(`span`,Ce,i(Y.value.client_model),1),e(`span`,{class:c([`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[10px] font-mono font-semibold h-5`,Y.value.is_active?`bg-success/12 text-success`:`bg-muted/40 text-muted-foreground/50`])},[e(`span`,{class:c([`w-1 h-1 rounded-full`,Y.value.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),d(` `+i(Y.value.is_active?`Active`:`Inactive`),1)],2),l(_(C),{"model-value":!!Y.value.is_active,"onUpdate:modelValue":mt},null,8,[`model-value`])]),e(`div`,we,[e(`section`,null,[e(`div`,Te,[l(_(le),{class:`w-3.5 h-3.5 text-primary/60`}),e(`span`,Ee,i(_(g)(`mappings.editor.failoverChain`)),1),e(`span`,De,i(W.value.length)+` target`+i(W.value.length>1?`s`:``),1)]),e(`div`,Oe,[(y(!0),h(s,null,u(W.value,(t,n)=>(y(),h(`div`,{key:n,class:`flex items-center gap-2 px-3 py-2 bg-background border border-border rounded-md`},[e(`span`,{class:c([`w-[22px] h-[22px] flex items-center justify-center rounded-full text-[10px] font-mono font-bold shrink-0`,n===0?`bg-primary/15 text-primary`:`bg-muted/40 text-muted-foreground`])},i(n+1),3),e(`div`,ke,[l(E,{providers:q.value,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:_(g)(`mappings.selectProviderModel`),"onUpdate:modelValue":e=>ct(n,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),W.value.length>1?(y(),ee(_(m),{key:0,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/30 hover:text-destructive`,onClick:e=>st(n)},{default:p(()=>[l(_(ue),{class:`w-3 h-3`})]),_:1},8,[`onClick`])):v(``,!0)]))),128))]),l(_(m),{variant:`ghost`,size:`sm`,class:`mt-1.5 text-xs text-muted-foreground/40 border border-dashed border-border hover:border-primary/40 hover:text-primary/60`,onClick:ot},{default:p(()=>[l(_(x),{class:`w-3 h-3 mr-1`}),d(` `+i(_(g)(`mappings.addBackup`)),1)]),_:1})]),n[10]||=e(`div`,{class:`border-t border-dashed border-primary/10`},null,-1),e(`section`,null,[e(`div`,Ae,[l(_(ne),{class:`w-3.5 h-3.5 text-primary/50`}),e(`span`,je,i(_(g)(`mappings.editor.contextOverflow`)),1),X.value?(y(),h(`span`,Me,i(_(g)(`mappings.enabled`)),1)):v(``,!0)]),e(`div`,Ne,[e(`div`,Pe,[l(_(C),{"model-value":X.value,"onUpdate:modelValue":lt},null,8,[`model-value`]),e(`span`,Fe,i(_(g)(`mappings.overflowTooltip`)),1)]),X.value?(y(),h(`div`,Ie,[e(`div`,Le,[l(E,{providers:q.value,"model-value":G.value?{provider_id:G.value.provider_id,model:G.value.model}:void 0,compact:``,dashed:``,placeholder:_(g)(`mappings.selectModel`),"onUpdate:modelValue":n[1]||=e=>ut(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(y(),h(`span`,Re,i(_(g)(`mappings.overflowTooltip`)),1))])]),e(`section`,null,[e(`div`,ze,[l(_(re),{class:`w-3.5 h-3.5 text-blue-500/50`}),e(`span`,Be,i(_(g)(`mappings.editor.multimodalFallback`)),1),Z.value?(y(),h(`span`,Ve,i(_(g)(`mappings.enabled`)),1)):v(``,!0)]),e(`div`,He,[e(`div`,Ue,[l(_(C),{"model-value":Z.value,"onUpdate:modelValue":dt},null,8,[`model-value`]),e(`span`,We,i(_(g)(`mappings.multimodalFallback.add`)),1)]),Z.value?(y(),h(`div`,Ge,[e(`div`,Ke,[l(E,{providers:q.value,"model-value":K.value?{provider_id:K.value.provider_id,model:K.value.backend_model}:void 0,compact:``,dashed:``,placeholder:_(g)(`mappings.multimodalFallback.selectProviderModel`),"onUpdate:modelValue":n[2]||=e=>ft(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(y(),h(`span`,qe,i(_(g)(`mappings.multimodalFallback.add`)),1)),Z.value?(y(),h(`div`,Je,[l(_(de),{class:`w-3 h-3 text-warning shrink-0`}),e(`span`,Ye,i(_(g)(`mappings.multimodalFallback.sessionLockWarning`)),1)])):v(``,!0)])])]),e(`div`,Xe,[B.value?(y(),h(`div`,P,[d(i(_(g)(`mappings.confirmDeleteDesc`,{model:Y.value.client_model}))+` `,1),l(_(m),{variant:`destructive`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:ht},{default:p(()=>[d(i(_(g)(`common.yes`)),1)]),_:1}),l(_(m),{variant:`ghost`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:n[3]||=e=>B.value=!1},{default:p(()=>[d(i(_(g)(`common.no`)),1)]),_:1})])):(y(),h(s,{key:1},[e(`span`,Ze,` ID: `+i(Y.value.id),1),e(`div`,Qe,[l(_(m),{variant:`ghost`,size:`sm`,class:`text-xs text-danger hover:text-danger`,onClick:n[4]||=e=>B.value=!0},{default:p(()=>[d(i(_(g)(`common.delete`)),1)]),_:1}),l(_(m),{size:`sm`,class:`text-xs`,disabled:z.value,onClick:pt},{default:p(()=>[d(i(z.value?_(g)(`common.saving`):_(g)(`common.save`)),1)]),_:1},8,[`disabled`])])],64))])],64)):(y(),h(`div`,xe,[l(_(pe),{class:`w-6 h-6 opacity-40`}),d(` `+i(_(g)(`mappings.selectProviderOrModel`)),1)]))])]),l(_(oe),{open:V.value,"onUpdate:open":n[8]||=e=>V.value=!1},{default:p(()=>[l(_(ie),{class:`max-w-md`},{default:p(()=>[l(_(ae),null,{default:p(()=>[l(_(ce),null,{default:p(()=>[d(i(_(g)(`mappings.addGroup`)),1)]),_:1})]),_:1}),e(`div`,$e,[e(`div`,et,[l(_(S),{class:`text-xs text-muted-foreground`},{default:p(()=>[d(i(_(g)(`mappings.clientModel`)),1)]),_:1}),l(_(T),{modelValue:H.value,"onUpdate:modelValue":n[5]||=e=>H.value=e,placeholder:_(g)(`mappings.editor.clientInputPlaceholder`),class:`h-8 font-mono text-xs`},null,8,[`modelValue`,`placeholder`])]),e(`div`,tt,[l(_(S),{class:`text-xs text-muted-foreground`},{default:p(()=>[d(i(_(g)(`mappings.selectProviderModel`)),1)]),_:1}),l(E,{providers:q.value,"model-value":U.value,compact:``,placeholder:_(g)(`mappings.selectProviderModel`),"onUpdate:modelValue":n[6]||=e=>U.value=e},null,8,[`providers`,`model-value`,`placeholder`])])]),l(_(se),null,{default:p(()=>[l(_(m),{variant:`ghost`,size:`sm`,onClick:n[7]||=e=>V.value=!1},{default:p(()=>[d(i(_(g)(`common.cancel`)),1)]),_:1}),l(_(m),{size:`sm`,disabled:!nt.value,onClick:_t},{default:p(()=>[d(i(_(g)(`mappings.addGroup`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{F as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Ft as n,Kt as r,Ot as i,Q as a,Qt as o,U as s,Vt as c,X as l,Y as u,Yt as d,Zt as f,_t as p,at as m,bt as h,et as g,gt as ee,it as _,j as te,jt as v,n as y,nt as b,ot as x,qt as S,tt as C,vt as w,zt as T}from"./button-BuzJlj9X.js";import{n as E,t as D}from"./UnifiedRequestDialog-CLHb7t0f.js";import{n as ne,t as O}from"./useClipboard-tJg52v7m.js";import{a as k,i as A,o as j}from"./TabsTrigger-DeTfRTma.js";import{n as re,t as ie}from"./CollapsibleContent-4ZwwyZPz.js";import{t as ae}from"./CollapsibleTrigger-Cg651F6-.js";import{_t as oe,a as se,c as ce,d as le,f as ue,l as de,lt as fe,o as pe,p as me,s as he,u as ge,vt as _e,yt as M}from"./index-BjnFvPid.js";import{t as ve}from"./badge-DhXKxnV5.js";import{a as ye,i as N,n as P,o as be,r as F,t as xe}from"./TableHeader-ncK52pod.js";function I(e){return e.adaptiveLimit??e.maxConcurrency}function L(e,t){let n=t>0?e/t:0;return n>=.8?`bg-danger`:n>=.5?`bg-warning`:`bg-primary`}function Se(e,t){return(t>0?e/t:0)>=.8?`text-danger`:``}var Ce={class:`flex items-stretch bg-card border border-border rounded-lg overflow-hidden mb-3`},we={class:`flex items-center gap-3.5 px-5 py-3 border-r border-border min-w-[180px]`,style:{background:`oklch(0.68 0.13 175 / 8%)`}},R={class:`text-[32px] font-bold text-primary font-mono leading-none`},Te={class:`flex flex-col gap-0.5`},Ee={class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`},z={class:`font-mono text-[11px] text-muted-foreground`},De={key:0,class:`inline-flex items-center gap-1 ml-3 px-2 py-0.5 rounded-full font-mono text-[11px] font-semibold bg-warning/10 text-warning`},Oe={class:`flex-1 px-4 py-2.5 flex flex-col gap-1 justify-center`},ke={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-0.5`},Ae={key:0,class:`text-[11px] text-muted-foreground py-1`},je=[`title`],B={class:`flex-1 h-1 bg-foreground/[0.06] rounded-sm overflow-hidden`},Me=x({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{},queuedCount:{},concurrency:{}},setup(t){let{t:n}=s();return(r,i)=>(w(),b(`div`,Ce,[e(`div`,we,[e(`span`,R,o(t.activeCount),1),e(`div`,Te,[e(`span`,Ee,o(S(n)(`monitor.header.activeRequests`)),1),e(`span`,z,o(S(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),t.queuedCount>0?(w(),b(`span`,De,o(t.queuedCount)+` `+o(S(n)(`monitor.queued`)),1)):C(``,!0)]),e(`div`,Oe,[e(`span`,ke,o(S(n)(`monitor.concurrency`)),1),t.concurrency.length===0?(w(),b(`div`,Ae,o(S(n)(`monitor.concurrencyPanel.noData`)),1)):C(``,!0),(w(!0),b(l,null,h(t.concurrency,t=>(w(),b(`div`,{key:t.providerId,class:`flex items-center gap-1.5`},[e(`span`,{class:`text-[11px] font-medium text-muted-foreground w-[130px] shrink-0 truncate`,title:t.providerName},o(t.providerName),9,je),e(`div`,B,[S(I)(t)>0?(w(),b(`div`,{key:0,class:d([`h-full rounded-sm transition-all duration-300`,S(L)(t.active,S(I)(t))]),style:f({width:`${Math.min(100,t.active/S(I)(t)*100)}%`})},null,6)):C(``,!0)]),e(`span`,{class:d([`font-mono text-[11px] text-muted-foreground w-10 text-right shrink-0`,S(Se)(t.active,S(I)(t))])},[t.adaptiveEnabled?(w(),b(l,{key:0},[_(o(t.active)+`/`+o(t.adaptiveLimit??t.maxConcurrency),1)],64)):t.maxConcurrency===0?(w(),b(l,{key:1},[_(o(S(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(w(),b(l,{key:2},[_(o(t.active)+`/`+o(t.maxConcurrency),1)],64))],2)]))),128))])]))}}),Ne={key:0,class:`text-[13px] text-muted-foreground py-2`},Pe={key:1},Fe={class:`flex items-center justify-between py-[3px]`},V={class:`text-[11px] text-muted-foreground`},Ie={class:`font-mono text-[11px] text-foreground`},H={class:`flex items-center justify-between py-[3px] border-t border-foreground/[0.04]`},Le={class:`text-[11px] text-muted-foreground`},Re={class:`font-mono text-[11px] text-success`},U={class:`flex items-center justify-between py-[3px] border-t border-foreground/[0.04]`},ze={class:`text-[11px] text-muted-foreground`},W={class:`font-mono text-[11px] text-foreground`},G={class:`mt-1 pt-1 border-t border-foreground/[0.04]`},K={class:`flex justify-between mb-[3px]`},Be={class:`text-[11px] text-muted-foreground`},Ve={class:`font-mono text-[10px] text-muted-foreground`},q={class:`h-1 bg-foreground/[0.06] rounded-sm overflow-hidden`},J=100,He=x({__name:`RuntimePanel`,props:{runtime:{}},setup(t){let{t:n}=s(),r=t,i=a(()=>!r.runtime||r.runtime.memoryUsage.heapTotal===0?0:Math.min(J,r.runtime.memoryUsage.heapUsed/r.runtime.memoryUsage.heapTotal*J));return(r,a)=>t.runtime?(w(),b(`div`,Pe,[e(`div`,Fe,[e(`span`,V,o(S(n)(`monitor.runtimePanel.memoryRss`)),1),e(`span`,Ie,o(S(M)(t.runtime.memoryUsage.rss)),1)]),e(`div`,H,[e(`span`,Le,o(S(n)(`monitor.runtimePanel.eventLoopDelay`)),1),e(`span`,Re,o(t.runtime.eventLoopDelayMs.toFixed(1))+`ms`,1)]),e(`div`,U,[e(`span`,ze,o(S(n)(`monitor.runtimePanel.activeHandles`)),1),e(`span`,W,o(t.runtime.activeHandles),1)]),e(`div`,G,[e(`div`,K,[e(`span`,Be,o(S(n)(`monitor.runtimePanel.heapUsage`)),1),e(`span`,Ve,o(S(M)(t.runtime.memoryUsage.heapUsed))+` / `+o(S(M)(t.runtime.memoryUsage.heapTotal)),1)]),e(`div`,q,[e(`div`,{class:`h-full bg-primary rounded-sm transition-all duration-300`,style:f({width:`${i.value}%`})},null,4)])])])):(w(),b(`div`,Ne,o(S(n)(`monitor.runtimePanel.noData`)),1))}}),Ue={key:0,class:`text-[13px] text-muted-foreground py-2`},We={key:1},Ge={class:`text-[11px] font-medium text-muted-foreground flex-1`},Ke={class:`font-mono text-[10px] text-muted-foreground w-9 text-right`},qe=x({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(t){let{t:n}=s(),r=t,i=a(()=>Object.values(r.byStatusCode).reduce((e,t)=>e+t,0)),c=a(()=>{let e=r.byStatusCode,t=i.value||1,n=u(e,200,299),a=u(e,400,499)-(e[429]||0),o=e[429]||0,s=u(e,500,599);return[{label:`2xx`,count:n,percent:(n/t*100).toFixed(1),textClass:`text-success`,dotClass:`bg-success`},{label:`4xx`,count:a,percent:(a/t*100).toFixed(1),textClass:`text-warning`,dotClass:`bg-warning`},{label:`429`,count:o,percent:(o/t*100).toFixed(1),textClass:`text-info`,dotClass:`bg-info`},{label:`5xx`,count:s,percent:(s/t*100).toFixed(1),textClass:`text-danger`,dotClass:`bg-danger`}].filter(e=>e.count>0)});function u(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(t,r)=>i.value===0?(w(),b(`div`,Ue,o(S(n)(`monitor.statusCodes.noData`)),1)):(w(),b(`div`,We,[(w(!0),b(l,null,h(c.value,t=>(w(),b(`div`,{key:t.label,class:`flex items-center gap-1.5 py-[3px] border-t border-foreground/[0.04] first:border-t-0`},[e(`span`,{class:d([`size-[5px] rounded-full shrink-0`,t.dotClass])},null,2),e(`span`,Ge,o(t.label),1),e(`span`,{class:d([`font-mono text-[11px]`,t.textClass])},o(t.count),3),e(`span`,Ke,o(t.percent)+`%`,1)]))),128))]))}}),Je={key:0,class:`text-sm text-muted-foreground py-4 text-center`},Y={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Ye={class:`flex flex-wrap gap-1`},Xe={key:0,class:`text-xs text-muted-foreground`},Ze=100,Qe=x({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=s(),r=t,i=a(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*Ze:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*Ze:0})):[]);return(r,a)=>t.stats?i.value.length===0?(w(),b(`div`,Y,o(S(n)(`monitor.providerTable.noProviders`)),1)):(w(),g(S(be),{key:2},{default:v(()=>[m(S(xe),null,{default:v(()=>[m(S(F),{class:`border-b-0`},{default:v(()=>[m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.provider`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.requests`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.successRate`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),m(S(ye),null,{default:v(()=>[(w(!0),b(l,null,h(i.value,t=>(w(),g(S(F),{key:t.id,class:`border-b-0 hover:bg-muted/50`},{default:v(()=>[m(S(N),{class:`font-medium text-[13px] py-1`},{default:v(()=>[_(o(t.name),1)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[_(o(t.stats.totalRequests),1)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[e(`span`,{class:d(t.successRate>=95?`text-success`:t.successRate>=80?`text-warning`:`text-danger`)},o(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[_(o(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[e(`span`,{class:d(t.retryRate>10?`text-warning`:``)},o(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),m(S(N),{class:`py-1`},{default:v(()=>[e(`div`,Ye,[(w(!0),b(l,null,h(t.stats.topErrors.slice(0,3),e=>(w(),g(S(ve),{key:e.code,variant:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:v(()=>[_(o(e.code)+` (`+o(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(w(),b(`span`,Xe,`--`)):C(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(w(),b(`div`,Je,o(S(n)(`monitor.providerTable.noData`)),1))}}),$e=3e4;function X(e,t,n){let r=null,i=null,a=0,o=null,s=!1;function c(){document.hidden?o=setTimeout(()=>{u(),n?.onClose?.()},$e):(o&&=(clearTimeout(o),null),r||l())}function l(){if(!r){r=new EventSource(e),r.onopen=()=>{a=0,n?.onOpen?.(),!s&&typeof document<`u`&&(document.addEventListener(`visibilitychange`,c),s=!0)};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{u(),n?.onClose?.();let e=Math.min(3e3*2**a,3e4);a++,i=setTimeout(l,e)}}}function u(){i&&=(clearTimeout(i),null),o&&=(clearTimeout(o),null),r&&=(r.close(),null)}return p(()=>{u(),s&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,c),s=!1),n?.onClose?.()}),{connect:l,disconnect:u}}var Z=200,Q=404,$=500;async function et(e,t){try{let n=tt(e.value,await t());n!==e.value&&(e.value=n)}catch(t){console.error(`useMonitorData.syncActiveOnSSEReconnect failed:`,t),e.value=[...e.value]}}function tt(e,t){let n=new Set(t.map(e=>e.id)),r=new Set(e.map(e=>e.id)),i=e.filter(e=>!n.has(e.id)),a=t.filter(e=>!r.has(e.id));if(i.length===0&&a.length===0)return e;let o=e.filter(e=>n.has(e.id));return[...a,...o]}function nt(e,t){let n;try{n=JSON.parse(e.data)}catch{return}switch(e.type){case`request_start`:{let e=n;t.recentCompleted.value.some(t=>t.id===e.id)||(t.activeRequests.value.unshift(e),r(t.activeRequests));break}case`request_update`:t.activeRequests.value=n;break;case`request_complete`:{let e=n;t.activeRequests.value=t.activeRequests.value.filter(t=>t.id!==e.id),t.recentCompleted.value.unshift(e),t.recentCompleted.value.length>Z&&(t.recentCompleted.value.length=Z);break}case`concurrency_update`:t.concurrency.value=n;break;case`stats_update`:t.stats.value=n;break;case`stream_content_update`:{let e=n;for(let n of e){let e=t.activeRequests.value.find(e=>e.id===n.id);e&&(e.streamTotalChars=n.totalChars,n.streamMetrics&&(e.streamMetrics=n.streamMetrics))}r(t.activeRequests);break}case`runtime_update`:t.runtime.value=n;break}}async function rt(e,n,r,i,a){try{let o=await t.getMonitorInit();o.active&&(e.value=o.active),o.recent&&(n.value=o.recent),o.stats&&(r.value=o.stats),o.concurrency&&(i.value=o.concurrency),o.runtime&&(a.value=o.runtime)}catch(e){console.error(`Failed to load initial monitor data:`,e),r.value=null,i.value=[],a.value=null}}function it(){let e=c([]),n=T([]),r=T(null),o=T([]),s=T(null),l=T(!1),u=!1,d=a(()=>e.value.filter(e=>e.isStream).length),f=a(()=>e.value.filter(e=>!e.queued)),m=a(()=>e.value.filter(e=>e.queued===!0)),h=t=>nt(t,{recentCompleted:n,activeRequests:e,concurrency:o,stats:r,runtime:s});async function g(){if(l.value=!0,!u){u=!0;return}await et(e,()=>t.getMonitorActive())}function ee(){l.value=!1}let _=()=>rt(e,n,r,o,s),{connect:te,disconnect:v}=X(`/admin/api/monitor/stream`,{request_start:h,request_update:h,request_complete:h,concurrency_update:h,stats_update:h,runtime_update:h,stream_content_update:h},{onOpen:g,onClose:ee}),y=T(null),b=T(!1),x=T(0);async function S(r){let i=++x.value,a=e.value.find(e=>e.id===r)??n.value.find(e=>e.id===r);if(!a){y.value=null;return}y.value=null,b.value=!0;try{if(a.status===`pending`){try{let e=await t.getMonitorRequest(r);if(i!==x.value)return;y.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==Q)throw e;if(i!==x.value)return;let n=await t.getLogDetail(r);if(i!==x.value)return;y.value=n.client_request?{clientRequest:n.client_request}:null}return}let e=await t.getLogDetail(r);if(i!==x.value)return;let n;if(!a.isStream){let t=e.upstream_response;if(t)try{let e=JSON.parse(t);n=(typeof e.body==`string`?e.body:t)??void 0}catch{n=t}}y.value={responseBody:n,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(i!==x.value)return;console.warn(`Failed to load log detail:`,e),y.value=null}finally{i===x.value&&(b.value=!1)}}let C=T(null),w=T(!1),E=T(null),D=null;function ne(n){if(O(),!n)return;let r=async()=>{let r=e.value.find(e=>e.id===n);if(!r||r.status===`completed`||r.status===`failed`){O();return}try{let e=await t.getMonitorRequest(n);if(C.value!==n)return;e.streamContent&&(E.value=e.streamContent)}catch(e){e?.response?.status===Q&&O()}};r(),D=setInterval(r,$)}function O(){D&&=(clearInterval(D),null)}function k(e){C.value=e,w.value=!0,E.value=null;let t=n.value.find(t=>t.id===e);t&&(t.status===`completed`||t.status===`failed`)&&(t.streamContent?E.value=t.streamContent:A(e)),ne(e),S(e)}async function A(e){try{let n=await t.getMonitorRequest(e);if(C.value!==e)return;n.streamContent&&(E.value=n.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let j=a(()=>C.value?e.value.find(e=>e.id===C.value)??n.value.find(e=>e.id===C.value)??null:null);return i(()=>j.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(O(),S(C.value))}),p(()=>{O()}),{activeRequests:e,recentCompleted:n,stats:r,concurrency:o,runtime:s,connected:l,streamCount:d,streamingRequests:f,queuedRequests:m,selectedRequestId:C,selectedRequest:j,requestDetailOpen:w,selectRequest:k,selectedStreamContent:E,logDetailData:y,nonStreamBodyLoading:b,connect:te,disconnect:v,loadInitialData:_}}var at={class:`page`},ot={class:`flex items-center justify-between mb-3`},st={class:`text-base font-semibold text-foreground`},ct={class:`bg-card border border-border rounded-lg overflow-hidden mb-3`},lt={class:`flex items-center border-b border-border px-3 bg-muted/30 dark:bg-muted/50`},ut={key:0,class:`absolute bottom-0 left-0 right-0 h-0.5 bg-primary rounded-t-sm`},dt={key:0,class:`inline-flex items-center px-1.5 py-px rounded-full font-mono text-[10px] font-semibold bg-primary/15 text-primary`},ft={key:1,class:`inline-flex items-center px-1.5 py-px rounded-full font-mono text-[10px] font-semibold bg-foreground/5 text-muted-foreground`},pt={class:`bg-foreground/[0.03] rounded-md px-4 py-2 grid grid-cols-4 gap-x-6 gap-y-1.5`},mt={class:`font-mono text-[12px] text-foreground`},ht={class:`font-mono text-[12px] text-foreground`},gt={class:`font-mono text-[12px] text-foreground`},_t={class:`font-mono text-[12px] text-foreground`},vt={class:`flex bg-card border border-border rounded-lg overflow-hidden mb-3 divide-x divide-border`},yt={class:`flex-1 px-3 py-2`},bt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},xt={class:`text-[13px] font-mono font-semibold text-success`},St={class:`flex-1 px-3 py-2`},Ct={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},wt={class:`text-[10px] font-mono text-muted-foreground`},Tt={class:`flex-1 px-3 py-2`},Et={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Dt={class:`text-[13px] font-mono font-semibold text-foreground`},Ot={class:`text-[10px] font-mono text-muted-foreground`},kt={class:`flex-1 px-3 py-2`},At={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},jt={class:`text-[13px] font-mono font-semibold text-foreground`},Mt={class:`text-[10px] font-mono text-muted-foreground`},Nt={class:`flex-1 px-3 py-2`},Pt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Ft={class:`text-[13px] font-mono font-semibold text-foreground`},It={class:`text-[10px] font-mono text-muted-foreground`},Lt={class:`mb-3`},Rt={class:`flex items-center justify-between bg-card border border-border rounded-t-lg px-4 py-1.5`},zt={class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`},Bt={class:`bg-card border border-border border-t-0 rounded-b-lg px-4 py-3`},Vt={class:`grid grid-cols-3 gap-px bg-border rounded-lg overflow-hidden border border-border`},Ht={class:`bg-card`},Ut={class:`flex items-center px-3 py-1.5 border-b border-border bg-muted/30 dark:bg-muted/50`},Wt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Gt={class:`p-3`},Kt={class:`bg-card`},qt={class:`flex items-center px-3 py-1.5 border-b border-border bg-muted/30 dark:bg-muted/50`},Jt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Yt={class:`p-3`},Xt={class:`bg-card`},Zt={class:`flex items-center px-3 py-1.5 border-b border-border bg-muted/30 dark:bg-muted/50`},Qt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},$t={class:`p-3`},en={class:`flex items-baseline gap-1.5 mb-2`},tn={class:`text-xl font-mono font-bold text-primary`},nn={class:`text-xs font-mono text-muted-foreground`},rn={class:`text-xs font-mono text-muted-foreground ml-auto`},an={class:`h-1 bg-foreground/10 rounded-full overflow-hidden mb-3`},on={class:`grid grid-cols-2 gap-2`},sn={class:`text-xs font-mono text-warning`},cn={class:`text-xs font-mono text-primary`},ln=2e3,un=1e3,dn=100,fn=5,pn=10,mn=100,hn=80,gn=50,_n=36e5,vn=6e4,yn=864e5,bn=3e3,xn=x({__name:`Monitor`,setup(r){let{t:i}=s(),{activeRequests:c,recentCompleted:x,stats:M,concurrency:I,runtime:L,connected:Se,streamCount:Ce,streamingRequests:we,queuedRequests:R,selectedRequestId:Te,selectedRequest:Ee,requestDetailOpen:z,selectRequest:De,selectedStreamContent:Oe,logDetailData:ke,loadInitialData:Ae,connect:je}=it(),B=T(`active`),Ne=a(()=>[{key:`active`,label:i(`monitor.activeRequests`),count:we.value.length},{key:`queued`,label:i(`monitor.queuedRequests`),count:R.value.length},{key:`recent`,label:i(`monitor.completed`),count:x.value.length}]),Pe={active:()=>we.value,queued:()=>R.value,recent:()=>x.value},Fe={active:i(`monitor.noActiveRequests`),queued:i(`monitor.noQueuedRequests`),recent:i(`monitor.noCompletedRequests`)},V=a(()=>Pe[B.value]()),Ie=a(()=>Fe[B.value]),H=T(null);function Le(e){H.value=H.value===e?null:e}let{copy:Re}=O(),U=T(null);function ze(e){Re(e),U.value=e,setTimeout(()=>{U.value===e&&(U.value=null)},ln)}let W=T(!1),G=T(null),K=a(()=>G.value?c.value.find(e=>e.id===G.value)??null:null);function Be(e){G.value=e,W.value=!0}async function Ve(){if(G.value){try{await t.killMonitorRequest(G.value),c.value=c.value.filter(e=>e.id!==G.value),se.success(i(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),se.error(te(e,i(`monitor.killFailed`)))}W.value=!1}}let q=T(!0),J=a(()=>!M.value||M.value.totalRequests===0?`0.0`:(M.value.errorCount/M.value.totalRequests*dn).toFixed(1)),Ue=a(()=>{let e=Number.parseFloat(J.value);return e>=pn?`text-danger`:e>=fn?`text-warning`:`text-foreground`}),We=a(()=>!M.value||M.value.totalRequests===0?`0.0`:(M.value.retryCount/M.value.totalRequests*dn).toFixed(1)),Ge=a(()=>M.value?M.value.p50LatencyMs.toFixed(0):`--`),Ke=a(()=>M.value?M.value.p99LatencyMs.toFixed(0):`--`),Je=a(()=>{if(!M.value||!L.value||L.value.uptimeMs===0)return`--`;let e=L.value.uptimeMs/un;return(M.value.totalRequests/e).toFixed(1)}),Y=a(()=>{let e=I.value.reduce((e,t)=>e+t.active,0),t=I.value.reduce((e,t)=>e+(t.adaptiveLimit??t.maxConcurrency),0);return{active:e,total:t,pct:t>0?Math.round(e/t*mn):0}}),Ye=a(()=>{let e=Y.value.pct;return e>=hn?`bg-danger`:e>=gn?`bg-warning`:`bg-primary`}),Xe=a(()=>L.value?$e(L.value.uptimeMs):`--`),Ze=a(()=>!L.value||!M.value?`--`:`${M.value.totalRequests} req`);function $e(e){let t=Math.floor(e/yn),n=Math.floor(e%yn/_n),r=Math.floor(e%_n/vn);return t>0?`${t}d ${n}h`:n>0?`${n}h ${r}m`:`${r}m`}let X=T(Date.now()),Z=null;function Q(){$(),Z=setInterval(()=>{X.value=Date.now()},bn)}function $(){Z&&=(clearInterval(Z),null)}function et(){document.hidden?$():(X.value=Date.now(),Q())}function tt(e){return`${(((e.completedAt??X.value)-e.startTime)/un).toFixed(1)}s`}function nt(e){let t=e.streamMetrics?.tokensPerSecond;return t==null?`--`:`${t.toFixed(0)} t/s`}function rt(e){let t=e.streamMetrics?.outputTokens;return t==null?`--`:`${t}`}function xn(e){return e.status===`failed`?`bg-danger`:e.queued?`bg-warning`:e.status===`completed`?`bg-success`:`bg-primary`}function Sn(e){return e.status===`pending`}return ee(async()=>{await Ae(),je(),Q(),document.addEventListener(`visibilitychange`,et)}),p(()=>{$(),document.removeEventListener(`visibilitychange`,et)}),(t,r)=>(w(),b(`div`,at,[e(`div`,ot,[e(`h2`,st,o(S(i)(`monitor.title`)),1),m(S(ve),{variant:S(Se)?`default`:`destructive`},{default:v(()=>[_(o(S(Se)?S(i)(`monitor.connected`):S(i)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])]),m(Me,{stats:S(M),"active-count":S(c).length,"stream-count":S(Ce),"queued-count":S(R).length,concurrency:S(I)},null,8,[`stats`,`active-count`,`stream-count`,`queued-count`,`concurrency`]),e(`div`,ct,[e(`div`,lt,[(w(!0),b(l,null,h(Ne.value,t=>(w(),g(S(y),{key:t.key,variant:`ghost`,class:d([`relative px-3.5 py-2 text-[13px] font-medium transition-colors flex items-center gap-2 h-auto rounded-none`,B.value===t.key?`text-primary`:`text-muted-foreground hover:text-foreground`]),onClick:e=>B.value=t.key},{default:v(()=>[_(o(t.label)+` `,1),e(`span`,{class:d([`font-mono text-[11px] font-semibold px-1.5 py-px rounded-full`,B.value===t.key?`bg-primary/15 text-primary`:`bg-foreground/5 text-muted-foreground`])},o(t.count),3),B.value===t.key?(w(),b(`span`,ut)):C(``,!0)]),_:2},1032,[`class`,`onClick`]))),128))]),m(S(E),{class:`h-[252px]`},{default:v(()=>[m(S(be),null,{default:v(()=>[m(S(xe),null,{default:v(()=>[m(S(F),{class:`border-b-0 hover:bg-transparent`},{default:v(()=>[m(S(P),{class:`w-9 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:v(()=>[...r[4]||=[_(`Model`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:v(()=>[...r[5]||=[_(`Provider`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-16`},{default:v(()=>[...r[6]||=[_(`Type`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:v(()=>[...r[7]||=[_(`Elapsed`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:v(()=>[...r[8]||=[_(`Speed`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:v(()=>[...r[9]||=[_(`Output`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-14`})]),_:1})]),_:1}),m(S(ye),null,{default:v(()=>[V.value.length===0?(w(),g(S(F),{key:0,class:`border-b-0 h-[220px]`},{default:v(()=>[m(S(N),{colspan:`8`,class:`text-center text-[13px] text-muted-foreground align-middle`},{default:v(()=>[_(o(Ie.value),1)]),_:1})]),_:1})):C(``,!0),(w(!0),b(l,null,h(V.value,t=>(w(),b(l,{key:t.id},[m(S(F),{class:d([`cursor-pointer transition-colors border-b border-foreground/[0.04] hover:bg-muted/40`,[S(Te)===t.id?`bg-primary/10`:``,B.value===`recent`?`opacity-60 hover:opacity-80`:``]]),onClick:e=>S(De)(t.id)},{default:v(()=>[m(S(N),{class:`px-3 py-1`},{default:v(()=>[e(`span`,{class:d([`inline-block size-2 rounded-full shrink-0`,xn(t)])},null,2)]),_:2},1024),m(S(N),{class:`px-3 py-1 text-[13px] font-medium truncate max-w-[200px]`},{default:v(()=>[_(o(t.model),1)]),_:2},1024),m(S(N),{class:`px-3 py-1 font-mono text-[11px] text-muted-foreground`},{default:v(()=>[_(o(t.providerName),1)]),_:2},1024),m(S(N),{class:`px-3 py-1`},{default:v(()=>[t.isStream?(w(),b(`span`,dt,` SSE `)):(w(),b(`span`,ft,` Sync `))]),_:2},1024),m(S(N),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:v(()=>[_(o(tt(t)),1)]),_:2},1024),m(S(N),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:v(()=>[_(o(nt(t)),1)]),_:2},1024),m(S(N),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:v(()=>[_(o(rt(t)),1)]),_:2},1024),m(S(N),{class:`px-3 py-1`},{default:v(()=>[e(`div`,{class:`flex items-center gap-0.5 justify-end`,onClick:r[0]||=u(()=>{},[`stop`])},[m(S(j),null,{default:v(()=>[m(S(A),{"as-child":``},{default:v(()=>[m(S(y),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:u(e=>ze(t.id),[`stop`])},{default:v(()=>[U.value===t.id?(w(),g(S(_e),{key:0,class:`size-3 text-success`})):(w(),g(S(ne),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),m(S(k),null,{default:v(()=>[_(o(S(i)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),Sn(t)?(w(),g(S(j),{key:0},{default:v(()=>[m(S(A),{"as-child":``},{default:v(()=>[m(S(y),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6 text-destructive hover:text-destructive`,onClick:u(e=>Be(t.id),[`stop`])},{default:v(()=>[m(S(fe),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),m(S(k),null,{default:v(()=>[_(o(S(i)(`monitor.kill`)),1)]),_:1})]),_:2},1024)):C(``,!0),m(S(y),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:u(e=>Le(t.id),[`stop`])},{default:v(()=>[m(S(oe),{class:d([`size-3 transition-transform`,{"rotate-180":H.value===t.id}])},null,8,[`class`])]),_:2},1032,[`onClick`])])]),_:2},1024)]),_:2},1032,[`class`,`onClick`]),H.value===t.id?(w(),g(S(F),{key:0,class:`border-b border-foreground/[0.04] bg-foreground/[0.02]`},{default:v(()=>[m(S(N),{colspan:`8`,class:`px-3 py-2`},{default:v(()=>[e(`div`,pt,[e(`div`,null,[r[10]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Request ID `,-1),e(`div`,mt,o(t.id),1)]),e(`div`,null,[r[11]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Input Tokens `,-1),e(`div`,ht,o(t.streamMetrics?.inputTokens?.toLocaleString()??`--`),1)]),e(`div`,null,[r[12]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Output Tokens `,-1),e(`div`,gt,o(t.streamMetrics?.outputTokens?.toLocaleString()??`--`),1)]),e(`div`,null,[r[13]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Cache Tokens `,-1),e(`div`,_t,o(t.streamMetrics?.cacheReadTokens?.toLocaleString()??`--`),1)])])]),_:2},1024)]),_:2},1024)):C(``,!0)],64))),128))]),_:1})]),_:1})]),_:1})]),e(`div`,vt,[e(`div`,yt,[e(`div`,bt,o(S(i)(`monitor.completed`)),1),e(`div`,xt,o(S(M)?.successCount??0),1),r[14]||=e(`div`,{class:`text-[10px] font-mono text-muted-foreground`},`last 5h`,-1)]),e(`div`,St,[e(`div`,Ct,o(S(i)(`monitor.header.errorRate`)),1),e(`div`,{class:d([`text-[13px] font-mono font-semibold`,Ue.value])},o(J.value)+`% `,3),e(`div`,wt,o(S(M)?.errorCount??0)+` / `+o(S(M)?.totalRequests??0),1)]),e(`div`,Tt,[e(`div`,Et,o(S(i)(`monitor.header.p50Latency`)),1),e(`div`,Dt,o(Ge.value)+`ms `,1),e(`div`,Ot,` avg `+o(S(M)?.avgLatencyMs?.toFixed(1)??`--`)+`s `,1)]),e(`div`,kt,[e(`div`,At,o(S(i)(`monitor.header.retryRate`)),1),e(`div`,jt,o(We.value)+`% `,1),e(`div`,Mt,o(S(M)?.retryCount??0)+` / `+o(S(M)?.totalRequests??0),1)]),e(`div`,Nt,[e(`div`,Pt,o(S(i)(`monitor.runtimePanel.uptime`)),1),e(`div`,Ft,o(Xe.value),1),e(`div`,It,o(Ze.value),1)])]),e(`div`,Lt,[m(S(re),{open:q.value,"onUpdate:open":r[1]||=e=>q.value=e},{default:v(()=>[e(`div`,Rt,[e(`span`,zt,o(S(i)(`monitor.providerStats`)),1),m(S(ae),{"as-child":``},{default:v(()=>[m(S(y),{variant:`ghost`,size:`xs`,class:`text-[11px] text-muted-foreground hover:text-foreground h-6 px-1.5`},{default:v(()=>[_(o(q.value?S(i)(`monitor.providerStatsHide`):S(i)(`monitor.providerStatsShow`)),1)]),_:1})]),_:1})]),m(S(ie),null,{default:v(()=>[e(`div`,Bt,[m(Qe,{stats:S(M)},null,8,[`stats`])])]),_:1})]),_:1},8,[`open`])]),e(`div`,Vt,[e(`div`,Ht,[e(`div`,Ut,[e(`span`,Wt,o(S(i)(`monitor.statusCodeDistribution`)),1)]),e(`div`,Gt,[m(qe,{"by-status-code":S(M)?.byStatusCode??{}},null,8,[`by-status-code`])])]),e(`div`,Kt,[e(`div`,qt,[e(`span`,Jt,o(S(i)(`monitor.runtime`)),1)]),e(`div`,Yt,[m(He,{runtime:S(L)},null,8,[`runtime`])])]),e(`div`,Xt,[e(`div`,Zt,[e(`span`,Qt,o(S(i)(`monitor.concurrency`)),1)]),e(`div`,$t,[e(`div`,en,[e(`span`,tn,o(Y.value.active),1),e(`span`,nn,`/ `+o(Y.value.total),1),e(`span`,rn,o(Y.value.pct)+`%`,1)]),e(`div`,an,[e(`div`,{class:d([`h-full rounded-full transition-all duration-300`,Ye.value]),style:f({width:`${Math.min(100,Y.value.pct)}%`})},null,6)]),e(`div`,on,[e(`div`,null,[r[15]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` P99 `,-1),e(`div`,sn,o(Ke.value)+`ms `,1)]),e(`div`,null,[r[16]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` QPS `,-1),e(`div`,cn,o(Je.value),1)])])])])]),m(D,{open:S(z),"onUpdate:open":r[2]||=e=>n(z)?z.value=e:null,source:`realtime`,request:S(Ee),"stream-content":S(Oe),"log-detail-data":S(ke)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),m(S(me),{open:W.value,"onUpdate:open":r[3]||=e=>W.value=e},{default:v(()=>[m(S(ge),null,{default:v(()=>[m(S(he),null,{default:v(()=>[m(S(pe),null,{default:v(()=>[_(o(S(i)(`monitor.killConfirmTitle`)),1)]),_:1}),K.value?(w(),g(S(de),{key:0},{default:v(()=>[_(o(S(i)(`monitor.killConfirm`,{model:K.value.model,provider:K.value.providerName})),1)]),_:1})):C(``,!0)]),_:1}),m(S(ce),null,{default:v(()=>[m(S(le),null,{default:v(()=>[_(o(S(i)(`monitor.killCancel`)),1)]),_:1}),m(S(ue),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:Ve},{default:v(()=>[_(o(S(i)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{xn as default};
|
|
1
|
+
import{$ as e,A as t,Ft as n,Kt as r,Ot as i,Q as a,Qt as o,U as s,Vt as c,X as l,Y as u,Yt as d,Zt as f,_t as p,at as m,bt as h,et as g,gt as ee,it as _,j as te,jt as v,n as y,nt as b,ot as x,qt as S,tt as C,vt as w,zt as T}from"./button-DrEBx6kL.js";import{n as E,t as D}from"./UnifiedRequestDialog-Ckfn1VW1.js";import{n as ne,t as O}from"./useClipboard-Bn8FwbFu.js";import{a as k,i as A,o as j}from"./TabsTrigger-Bh5OQLTQ.js";import{n as re,t as ie}from"./CollapsibleContent-B2UPvxPb.js";import{t as ae}from"./CollapsibleTrigger-Nr_5sVsH.js";import{_t as oe,a as se,c as ce,d as le,f as ue,l as de,lt as fe,o as pe,p as me,s as he,u as ge,vt as _e,yt as M}from"./index-BE0sEUYE.js";import{t as ve}from"./badge-CSOPIDH0.js";import{a as ye,i as N,n as P,o as be,r as F,t as xe}from"./TableHeader-BMLGvQfN.js";function I(e){return e.adaptiveLimit??e.maxConcurrency}function L(e,t){let n=t>0?e/t:0;return n>=.8?`bg-danger`:n>=.5?`bg-warning`:`bg-primary`}function Se(e,t){return(t>0?e/t:0)>=.8?`text-danger`:``}var Ce={class:`flex items-stretch bg-card border border-border rounded-lg overflow-hidden mb-3`},we={class:`flex items-center gap-3.5 px-5 py-3 border-r border-border min-w-[180px]`,style:{background:`oklch(0.68 0.13 175 / 8%)`}},R={class:`text-[32px] font-bold text-primary font-mono leading-none`},Te={class:`flex flex-col gap-0.5`},Ee={class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`},z={class:`font-mono text-[11px] text-muted-foreground`},De={key:0,class:`inline-flex items-center gap-1 ml-3 px-2 py-0.5 rounded-full font-mono text-[11px] font-semibold bg-warning/10 text-warning`},Oe={class:`flex-1 px-4 py-2.5 flex flex-col gap-1 justify-center`},ke={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-0.5`},Ae={key:0,class:`text-[11px] text-muted-foreground py-1`},je=[`title`],B={class:`flex-1 h-1 bg-foreground/[0.06] rounded-sm overflow-hidden`},Me=x({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{},queuedCount:{},concurrency:{}},setup(t){let{t:n}=s();return(r,i)=>(w(),b(`div`,Ce,[e(`div`,we,[e(`span`,R,o(t.activeCount),1),e(`div`,Te,[e(`span`,Ee,o(S(n)(`monitor.header.activeRequests`)),1),e(`span`,z,o(S(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),t.queuedCount>0?(w(),b(`span`,De,o(t.queuedCount)+` `+o(S(n)(`monitor.queued`)),1)):C(``,!0)]),e(`div`,Oe,[e(`span`,ke,o(S(n)(`monitor.concurrency`)),1),t.concurrency.length===0?(w(),b(`div`,Ae,o(S(n)(`monitor.concurrencyPanel.noData`)),1)):C(``,!0),(w(!0),b(l,null,h(t.concurrency,t=>(w(),b(`div`,{key:t.providerId,class:`flex items-center gap-1.5`},[e(`span`,{class:`text-[11px] font-medium text-muted-foreground w-[130px] shrink-0 truncate`,title:t.providerName},o(t.providerName),9,je),e(`div`,B,[S(I)(t)>0?(w(),b(`div`,{key:0,class:d([`h-full rounded-sm transition-all duration-300`,S(L)(t.active,S(I)(t))]),style:f({width:`${Math.min(100,t.active/S(I)(t)*100)}%`})},null,6)):C(``,!0)]),e(`span`,{class:d([`font-mono text-[11px] text-muted-foreground w-10 text-right shrink-0`,S(Se)(t.active,S(I)(t))])},[t.adaptiveEnabled?(w(),b(l,{key:0},[_(o(t.active)+`/`+o(t.adaptiveLimit??t.maxConcurrency),1)],64)):t.maxConcurrency===0?(w(),b(l,{key:1},[_(o(S(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(w(),b(l,{key:2},[_(o(t.active)+`/`+o(t.maxConcurrency),1)],64))],2)]))),128))])]))}}),Ne={key:0,class:`text-[13px] text-muted-foreground py-2`},Pe={key:1},Fe={class:`flex items-center justify-between py-[3px]`},V={class:`text-[11px] text-muted-foreground`},Ie={class:`font-mono text-[11px] text-foreground`},H={class:`flex items-center justify-between py-[3px] border-t border-foreground/[0.04]`},Le={class:`text-[11px] text-muted-foreground`},Re={class:`font-mono text-[11px] text-success`},U={class:`flex items-center justify-between py-[3px] border-t border-foreground/[0.04]`},ze={class:`text-[11px] text-muted-foreground`},W={class:`font-mono text-[11px] text-foreground`},G={class:`mt-1 pt-1 border-t border-foreground/[0.04]`},K={class:`flex justify-between mb-[3px]`},Be={class:`text-[11px] text-muted-foreground`},Ve={class:`font-mono text-[10px] text-muted-foreground`},q={class:`h-1 bg-foreground/[0.06] rounded-sm overflow-hidden`},J=100,He=x({__name:`RuntimePanel`,props:{runtime:{}},setup(t){let{t:n}=s(),r=t,i=a(()=>!r.runtime||r.runtime.memoryUsage.heapTotal===0?0:Math.min(J,r.runtime.memoryUsage.heapUsed/r.runtime.memoryUsage.heapTotal*J));return(r,a)=>t.runtime?(w(),b(`div`,Pe,[e(`div`,Fe,[e(`span`,V,o(S(n)(`monitor.runtimePanel.memoryRss`)),1),e(`span`,Ie,o(S(M)(t.runtime.memoryUsage.rss)),1)]),e(`div`,H,[e(`span`,Le,o(S(n)(`monitor.runtimePanel.eventLoopDelay`)),1),e(`span`,Re,o(t.runtime.eventLoopDelayMs.toFixed(1))+`ms`,1)]),e(`div`,U,[e(`span`,ze,o(S(n)(`monitor.runtimePanel.activeHandles`)),1),e(`span`,W,o(t.runtime.activeHandles),1)]),e(`div`,G,[e(`div`,K,[e(`span`,Be,o(S(n)(`monitor.runtimePanel.heapUsage`)),1),e(`span`,Ve,o(S(M)(t.runtime.memoryUsage.heapUsed))+` / `+o(S(M)(t.runtime.memoryUsage.heapTotal)),1)]),e(`div`,q,[e(`div`,{class:`h-full bg-primary rounded-sm transition-all duration-300`,style:f({width:`${i.value}%`})},null,4)])])])):(w(),b(`div`,Ne,o(S(n)(`monitor.runtimePanel.noData`)),1))}}),Ue={key:0,class:`text-[13px] text-muted-foreground py-2`},We={key:1},Ge={class:`text-[11px] font-medium text-muted-foreground flex-1`},Ke={class:`font-mono text-[10px] text-muted-foreground w-9 text-right`},qe=x({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(t){let{t:n}=s(),r=t,i=a(()=>Object.values(r.byStatusCode).reduce((e,t)=>e+t,0)),c=a(()=>{let e=r.byStatusCode,t=i.value||1,n=u(e,200,299),a=u(e,400,499)-(e[429]||0),o=e[429]||0,s=u(e,500,599);return[{label:`2xx`,count:n,percent:(n/t*100).toFixed(1),textClass:`text-success`,dotClass:`bg-success`},{label:`4xx`,count:a,percent:(a/t*100).toFixed(1),textClass:`text-warning`,dotClass:`bg-warning`},{label:`429`,count:o,percent:(o/t*100).toFixed(1),textClass:`text-info`,dotClass:`bg-info`},{label:`5xx`,count:s,percent:(s/t*100).toFixed(1),textClass:`text-danger`,dotClass:`bg-danger`}].filter(e=>e.count>0)});function u(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(t,r)=>i.value===0?(w(),b(`div`,Ue,o(S(n)(`monitor.statusCodes.noData`)),1)):(w(),b(`div`,We,[(w(!0),b(l,null,h(c.value,t=>(w(),b(`div`,{key:t.label,class:`flex items-center gap-1.5 py-[3px] border-t border-foreground/[0.04] first:border-t-0`},[e(`span`,{class:d([`size-[5px] rounded-full shrink-0`,t.dotClass])},null,2),e(`span`,Ge,o(t.label),1),e(`span`,{class:d([`font-mono text-[11px]`,t.textClass])},o(t.count),3),e(`span`,Ke,o(t.percent)+`%`,1)]))),128))]))}}),Je={key:0,class:`text-sm text-muted-foreground py-4 text-center`},Y={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Ye={class:`flex flex-wrap gap-1`},Xe={key:0,class:`text-xs text-muted-foreground`},Ze=100,Qe=x({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=s(),r=t,i=a(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*Ze:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*Ze:0})):[]);return(r,a)=>t.stats?i.value.length===0?(w(),b(`div`,Y,o(S(n)(`monitor.providerTable.noProviders`)),1)):(w(),g(S(be),{key:2},{default:v(()=>[m(S(xe),null,{default:v(()=>[m(S(F),{class:`border-b-0`},{default:v(()=>[m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.provider`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.requests`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.successRate`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),m(S(P),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:v(()=>[_(o(S(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),m(S(ye),null,{default:v(()=>[(w(!0),b(l,null,h(i.value,t=>(w(),g(S(F),{key:t.id,class:`border-b-0 hover:bg-muted/50`},{default:v(()=>[m(S(N),{class:`font-medium text-[13px] py-1`},{default:v(()=>[_(o(t.name),1)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[_(o(t.stats.totalRequests),1)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[e(`span`,{class:d(t.successRate>=95?`text-success`:t.successRate>=80?`text-warning`:`text-danger`)},o(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[_(o(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),m(S(N),{class:`text-right font-mono text-xs py-1`},{default:v(()=>[e(`span`,{class:d(t.retryRate>10?`text-warning`:``)},o(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),m(S(N),{class:`py-1`},{default:v(()=>[e(`div`,Ye,[(w(!0),b(l,null,h(t.stats.topErrors.slice(0,3),e=>(w(),g(S(ve),{key:e.code,variant:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:v(()=>[_(o(e.code)+` (`+o(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(w(),b(`span`,Xe,`--`)):C(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(w(),b(`div`,Je,o(S(n)(`monitor.providerTable.noData`)),1))}}),$e=3e4;function X(e,t,n){let r=null,i=null,a=0,o=null,s=!1;function c(){document.hidden?o=setTimeout(()=>{u(),n?.onClose?.()},$e):(o&&=(clearTimeout(o),null),r||l())}function l(){if(!r){r=new EventSource(e),r.onopen=()=>{a=0,n?.onOpen?.(),!s&&typeof document<`u`&&(document.addEventListener(`visibilitychange`,c),s=!0)};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{u(),n?.onClose?.();let e=Math.min(3e3*2**a,3e4);a++,i=setTimeout(l,e)}}}function u(){i&&=(clearTimeout(i),null),o&&=(clearTimeout(o),null),r&&=(r.close(),null)}return p(()=>{u(),s&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,c),s=!1),n?.onClose?.()}),{connect:l,disconnect:u}}var Z=200,Q=404,$=500;async function et(e,t){try{let n=tt(e.value,await t());n!==e.value&&(e.value=n)}catch(t){console.error(`useMonitorData.syncActiveOnSSEReconnect failed:`,t),e.value=[...e.value]}}function tt(e,t){let n=new Set(t.map(e=>e.id)),r=new Set(e.map(e=>e.id)),i=e.filter(e=>!n.has(e.id)),a=t.filter(e=>!r.has(e.id));if(i.length===0&&a.length===0)return e;let o=e.filter(e=>n.has(e.id));return[...a,...o]}function nt(e,t){let n;try{n=JSON.parse(e.data)}catch{return}switch(e.type){case`request_start`:{let e=n;t.recentCompleted.value.some(t=>t.id===e.id)||(t.activeRequests.value.unshift(e),r(t.activeRequests));break}case`request_update`:t.activeRequests.value=n;break;case`request_complete`:{let e=n;t.activeRequests.value=t.activeRequests.value.filter(t=>t.id!==e.id),t.recentCompleted.value.unshift(e),t.recentCompleted.value.length>Z&&(t.recentCompleted.value.length=Z);break}case`concurrency_update`:t.concurrency.value=n;break;case`stats_update`:t.stats.value=n;break;case`stream_content_update`:{let e=n;for(let n of e){let e=t.activeRequests.value.find(e=>e.id===n.id);e&&(e.streamTotalChars=n.totalChars,n.streamMetrics&&(e.streamMetrics=n.streamMetrics))}r(t.activeRequests);break}case`runtime_update`:t.runtime.value=n;break}}async function rt(e,n,r,i,a){try{let o=await t.getMonitorInit();o.active&&(e.value=o.active),o.recent&&(n.value=o.recent),o.stats&&(r.value=o.stats),o.concurrency&&(i.value=o.concurrency),o.runtime&&(a.value=o.runtime)}catch(e){console.error(`Failed to load initial monitor data:`,e),r.value=null,i.value=[],a.value=null}}function it(){let e=c([]),n=T([]),r=T(null),o=T([]),s=T(null),l=T(!1),u=!1,d=a(()=>e.value.filter(e=>e.isStream).length),f=a(()=>e.value.filter(e=>!e.queued)),m=a(()=>e.value.filter(e=>e.queued===!0)),h=t=>nt(t,{recentCompleted:n,activeRequests:e,concurrency:o,stats:r,runtime:s});async function g(){if(l.value=!0,!u){u=!0;return}await et(e,()=>t.getMonitorActive())}function ee(){l.value=!1}let _=()=>rt(e,n,r,o,s),{connect:te,disconnect:v}=X(`/admin/api/monitor/stream`,{request_start:h,request_update:h,request_complete:h,concurrency_update:h,stats_update:h,runtime_update:h,stream_content_update:h},{onOpen:g,onClose:ee}),y=T(null),b=T(!1),x=T(0);async function S(r){let i=++x.value,a=e.value.find(e=>e.id===r)??n.value.find(e=>e.id===r);if(!a){y.value=null;return}y.value=null,b.value=!0;try{if(a.status===`pending`){try{let e=await t.getMonitorRequest(r);if(i!==x.value)return;y.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==Q)throw e;if(i!==x.value)return;let n=await t.getLogDetail(r);if(i!==x.value)return;y.value=n.client_request?{clientRequest:n.client_request}:null}return}let e=await t.getLogDetail(r);if(i!==x.value)return;let n;if(!a.isStream){let t=e.upstream_response;if(t)try{let e=JSON.parse(t);n=(typeof e.body==`string`?e.body:t)??void 0}catch{n=t}}y.value={responseBody:n,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(i!==x.value)return;console.warn(`Failed to load log detail:`,e),y.value=null}finally{i===x.value&&(b.value=!1)}}let C=T(null),w=T(!1),E=T(null),D=null;function ne(n){if(O(),!n)return;let r=async()=>{let r=e.value.find(e=>e.id===n);if(!r||r.status===`completed`||r.status===`failed`){O();return}try{let e=await t.getMonitorRequest(n);if(C.value!==n)return;e.streamContent&&(E.value=e.streamContent)}catch(e){e?.response?.status===Q&&O()}};r(),D=setInterval(r,$)}function O(){D&&=(clearInterval(D),null)}function k(e){C.value=e,w.value=!0,E.value=null;let t=n.value.find(t=>t.id===e);t&&(t.status===`completed`||t.status===`failed`)&&(t.streamContent?E.value=t.streamContent:A(e)),ne(e),S(e)}async function A(e){try{let n=await t.getMonitorRequest(e);if(C.value!==e)return;n.streamContent&&(E.value=n.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let j=a(()=>C.value?e.value.find(e=>e.id===C.value)??n.value.find(e=>e.id===C.value)??null:null);return i(()=>j.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(O(),S(C.value))}),p(()=>{O()}),{activeRequests:e,recentCompleted:n,stats:r,concurrency:o,runtime:s,connected:l,streamCount:d,streamingRequests:f,queuedRequests:m,selectedRequestId:C,selectedRequest:j,requestDetailOpen:w,selectRequest:k,selectedStreamContent:E,logDetailData:y,nonStreamBodyLoading:b,connect:te,disconnect:v,loadInitialData:_}}var at={class:`page`},ot={class:`flex items-center justify-between mb-3`},st={class:`text-base font-semibold text-foreground`},ct={class:`bg-card border border-border rounded-lg overflow-hidden mb-3`},lt={class:`flex items-center border-b border-border px-3 bg-muted/30 dark:bg-muted/50`},ut={key:0,class:`absolute bottom-0 left-0 right-0 h-0.5 bg-primary rounded-t-sm`},dt={key:0,class:`inline-flex items-center px-1.5 py-px rounded-full font-mono text-[10px] font-semibold bg-primary/15 text-primary`},ft={key:1,class:`inline-flex items-center px-1.5 py-px rounded-full font-mono text-[10px] font-semibold bg-foreground/5 text-muted-foreground`},pt={class:`bg-foreground/[0.03] rounded-md px-4 py-2 grid grid-cols-4 gap-x-6 gap-y-1.5`},mt={class:`font-mono text-[12px] text-foreground`},ht={class:`font-mono text-[12px] text-foreground`},gt={class:`font-mono text-[12px] text-foreground`},_t={class:`font-mono text-[12px] text-foreground`},vt={class:`flex bg-card border border-border rounded-lg overflow-hidden mb-3 divide-x divide-border`},yt={class:`flex-1 px-3 py-2`},bt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},xt={class:`text-[13px] font-mono font-semibold text-success`},St={class:`flex-1 px-3 py-2`},Ct={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},wt={class:`text-[10px] font-mono text-muted-foreground`},Tt={class:`flex-1 px-3 py-2`},Et={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Dt={class:`text-[13px] font-mono font-semibold text-foreground`},Ot={class:`text-[10px] font-mono text-muted-foreground`},kt={class:`flex-1 px-3 py-2`},At={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},jt={class:`text-[13px] font-mono font-semibold text-foreground`},Mt={class:`text-[10px] font-mono text-muted-foreground`},Nt={class:`flex-1 px-3 py-2`},Pt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Ft={class:`text-[13px] font-mono font-semibold text-foreground`},It={class:`text-[10px] font-mono text-muted-foreground`},Lt={class:`mb-3`},Rt={class:`flex items-center justify-between bg-card border border-border rounded-t-lg px-4 py-1.5`},zt={class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`},Bt={class:`bg-card border border-border border-t-0 rounded-b-lg px-4 py-3`},Vt={class:`grid grid-cols-3 gap-px bg-border rounded-lg overflow-hidden border border-border`},Ht={class:`bg-card`},Ut={class:`flex items-center px-3 py-1.5 border-b border-border bg-muted/30 dark:bg-muted/50`},Wt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Gt={class:`p-3`},Kt={class:`bg-card`},qt={class:`flex items-center px-3 py-1.5 border-b border-border bg-muted/30 dark:bg-muted/50`},Jt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},Yt={class:`p-3`},Xt={class:`bg-card`},Zt={class:`flex items-center px-3 py-1.5 border-b border-border bg-muted/30 dark:bg-muted/50`},Qt={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},$t={class:`p-3`},en={class:`flex items-baseline gap-1.5 mb-2`},tn={class:`text-xl font-mono font-bold text-primary`},nn={class:`text-xs font-mono text-muted-foreground`},rn={class:`text-xs font-mono text-muted-foreground ml-auto`},an={class:`h-1 bg-foreground/10 rounded-full overflow-hidden mb-3`},on={class:`grid grid-cols-2 gap-2`},sn={class:`text-xs font-mono text-warning`},cn={class:`text-xs font-mono text-primary`},ln=2e3,un=1e3,dn=100,fn=5,pn=10,mn=100,hn=80,gn=50,_n=36e5,vn=6e4,yn=864e5,bn=3e3,xn=x({__name:`Monitor`,setup(r){let{t:i}=s(),{activeRequests:c,recentCompleted:x,stats:M,concurrency:I,runtime:L,connected:Se,streamCount:Ce,streamingRequests:we,queuedRequests:R,selectedRequestId:Te,selectedRequest:Ee,requestDetailOpen:z,selectRequest:De,selectedStreamContent:Oe,logDetailData:ke,loadInitialData:Ae,connect:je}=it(),B=T(`active`),Ne=a(()=>[{key:`active`,label:i(`monitor.activeRequests`),count:we.value.length},{key:`queued`,label:i(`monitor.queuedRequests`),count:R.value.length},{key:`recent`,label:i(`monitor.completed`),count:x.value.length}]),Pe={active:()=>we.value,queued:()=>R.value,recent:()=>x.value},Fe={active:i(`monitor.noActiveRequests`),queued:i(`monitor.noQueuedRequests`),recent:i(`monitor.noCompletedRequests`)},V=a(()=>Pe[B.value]()),Ie=a(()=>Fe[B.value]),H=T(null);function Le(e){H.value=H.value===e?null:e}let{copy:Re}=O(),U=T(null);function ze(e){Re(e),U.value=e,setTimeout(()=>{U.value===e&&(U.value=null)},ln)}let W=T(!1),G=T(null),K=a(()=>G.value?c.value.find(e=>e.id===G.value)??null:null);function Be(e){G.value=e,W.value=!0}async function Ve(){if(G.value){try{await t.killMonitorRequest(G.value),c.value=c.value.filter(e=>e.id!==G.value),se.success(i(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),se.error(te(e,i(`monitor.killFailed`)))}W.value=!1}}let q=T(!0),J=a(()=>!M.value||M.value.totalRequests===0?`0.0`:(M.value.errorCount/M.value.totalRequests*dn).toFixed(1)),Ue=a(()=>{let e=Number.parseFloat(J.value);return e>=pn?`text-danger`:e>=fn?`text-warning`:`text-foreground`}),We=a(()=>!M.value||M.value.totalRequests===0?`0.0`:(M.value.retryCount/M.value.totalRequests*dn).toFixed(1)),Ge=a(()=>M.value?M.value.p50LatencyMs.toFixed(0):`--`),Ke=a(()=>M.value?M.value.p99LatencyMs.toFixed(0):`--`),Je=a(()=>{if(!M.value||!L.value||L.value.uptimeMs===0)return`--`;let e=L.value.uptimeMs/un;return(M.value.totalRequests/e).toFixed(1)}),Y=a(()=>{let e=I.value.reduce((e,t)=>e+t.active,0),t=I.value.reduce((e,t)=>e+(t.adaptiveLimit??t.maxConcurrency),0);return{active:e,total:t,pct:t>0?Math.round(e/t*mn):0}}),Ye=a(()=>{let e=Y.value.pct;return e>=hn?`bg-danger`:e>=gn?`bg-warning`:`bg-primary`}),Xe=a(()=>L.value?$e(L.value.uptimeMs):`--`),Ze=a(()=>!L.value||!M.value?`--`:`${M.value.totalRequests} req`);function $e(e){let t=Math.floor(e/yn),n=Math.floor(e%yn/_n),r=Math.floor(e%_n/vn);return t>0?`${t}d ${n}h`:n>0?`${n}h ${r}m`:`${r}m`}let X=T(Date.now()),Z=null;function Q(){$(),Z=setInterval(()=>{X.value=Date.now()},bn)}function $(){Z&&=(clearInterval(Z),null)}function et(){document.hidden?$():(X.value=Date.now(),Q())}function tt(e){return`${(((e.completedAt??X.value)-e.startTime)/un).toFixed(1)}s`}function nt(e){let t=e.streamMetrics?.tokensPerSecond;return t==null?`--`:`${t.toFixed(0)} t/s`}function rt(e){let t=e.streamMetrics?.outputTokens;return t==null?`--`:`${t}`}function xn(e){return e.status===`failed`?`bg-danger`:e.queued?`bg-warning`:e.status===`completed`?`bg-success`:`bg-primary`}function Sn(e){return e.status===`pending`}return ee(async()=>{await Ae(),je(),Q(),document.addEventListener(`visibilitychange`,et)}),p(()=>{$(),document.removeEventListener(`visibilitychange`,et)}),(t,r)=>(w(),b(`div`,at,[e(`div`,ot,[e(`h2`,st,o(S(i)(`monitor.title`)),1),m(S(ve),{variant:S(Se)?`default`:`destructive`},{default:v(()=>[_(o(S(Se)?S(i)(`monitor.connected`):S(i)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])]),m(Me,{stats:S(M),"active-count":S(c).length,"stream-count":S(Ce),"queued-count":S(R).length,concurrency:S(I)},null,8,[`stats`,`active-count`,`stream-count`,`queued-count`,`concurrency`]),e(`div`,ct,[e(`div`,lt,[(w(!0),b(l,null,h(Ne.value,t=>(w(),g(S(y),{key:t.key,variant:`ghost`,class:d([`relative px-3.5 py-2 text-[13px] font-medium transition-colors flex items-center gap-2 h-auto rounded-none`,B.value===t.key?`text-primary`:`text-muted-foreground hover:text-foreground`]),onClick:e=>B.value=t.key},{default:v(()=>[_(o(t.label)+` `,1),e(`span`,{class:d([`font-mono text-[11px] font-semibold px-1.5 py-px rounded-full`,B.value===t.key?`bg-primary/15 text-primary`:`bg-foreground/5 text-muted-foreground`])},o(t.count),3),B.value===t.key?(w(),b(`span`,ut)):C(``,!0)]),_:2},1032,[`class`,`onClick`]))),128))]),m(S(E),{class:`h-[252px]`},{default:v(()=>[m(S(be),null,{default:v(()=>[m(S(xe),null,{default:v(()=>[m(S(F),{class:`border-b-0 hover:bg-transparent`},{default:v(()=>[m(S(P),{class:`w-9 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:v(()=>[...r[4]||=[_(`Model`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:v(()=>[...r[5]||=[_(`Provider`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-16`},{default:v(()=>[...r[6]||=[_(`Type`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:v(()=>[...r[7]||=[_(`Elapsed`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:v(()=>[...r[8]||=[_(`Speed`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:v(()=>[...r[9]||=[_(`Output`,-1)]]),_:1}),m(S(P),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-14`})]),_:1})]),_:1}),m(S(ye),null,{default:v(()=>[V.value.length===0?(w(),g(S(F),{key:0,class:`border-b-0 h-[220px]`},{default:v(()=>[m(S(N),{colspan:`8`,class:`text-center text-[13px] text-muted-foreground align-middle`},{default:v(()=>[_(o(Ie.value),1)]),_:1})]),_:1})):C(``,!0),(w(!0),b(l,null,h(V.value,t=>(w(),b(l,{key:t.id},[m(S(F),{class:d([`cursor-pointer transition-colors border-b border-foreground/[0.04] hover:bg-muted/40`,[S(Te)===t.id?`bg-primary/10`:``,B.value===`recent`?`opacity-60 hover:opacity-80`:``]]),onClick:e=>S(De)(t.id)},{default:v(()=>[m(S(N),{class:`px-3 py-1`},{default:v(()=>[e(`span`,{class:d([`inline-block size-2 rounded-full shrink-0`,xn(t)])},null,2)]),_:2},1024),m(S(N),{class:`px-3 py-1 text-[13px] font-medium truncate max-w-[200px]`},{default:v(()=>[_(o(t.model),1)]),_:2},1024),m(S(N),{class:`px-3 py-1 font-mono text-[11px] text-muted-foreground`},{default:v(()=>[_(o(t.providerName),1)]),_:2},1024),m(S(N),{class:`px-3 py-1`},{default:v(()=>[t.isStream?(w(),b(`span`,dt,` SSE `)):(w(),b(`span`,ft,` Sync `))]),_:2},1024),m(S(N),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:v(()=>[_(o(tt(t)),1)]),_:2},1024),m(S(N),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:v(()=>[_(o(nt(t)),1)]),_:2},1024),m(S(N),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:v(()=>[_(o(rt(t)),1)]),_:2},1024),m(S(N),{class:`px-3 py-1`},{default:v(()=>[e(`div`,{class:`flex items-center gap-0.5 justify-end`,onClick:r[0]||=u(()=>{},[`stop`])},[m(S(j),null,{default:v(()=>[m(S(A),{"as-child":``},{default:v(()=>[m(S(y),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:u(e=>ze(t.id),[`stop`])},{default:v(()=>[U.value===t.id?(w(),g(S(_e),{key:0,class:`size-3 text-success`})):(w(),g(S(ne),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),m(S(k),null,{default:v(()=>[_(o(S(i)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),Sn(t)?(w(),g(S(j),{key:0},{default:v(()=>[m(S(A),{"as-child":``},{default:v(()=>[m(S(y),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6 text-destructive hover:text-destructive`,onClick:u(e=>Be(t.id),[`stop`])},{default:v(()=>[m(S(fe),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),m(S(k),null,{default:v(()=>[_(o(S(i)(`monitor.kill`)),1)]),_:1})]),_:2},1024)):C(``,!0),m(S(y),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:u(e=>Le(t.id),[`stop`])},{default:v(()=>[m(S(oe),{class:d([`size-3 transition-transform`,{"rotate-180":H.value===t.id}])},null,8,[`class`])]),_:2},1032,[`onClick`])])]),_:2},1024)]),_:2},1032,[`class`,`onClick`]),H.value===t.id?(w(),g(S(F),{key:0,class:`border-b border-foreground/[0.04] bg-foreground/[0.02]`},{default:v(()=>[m(S(N),{colspan:`8`,class:`px-3 py-2`},{default:v(()=>[e(`div`,pt,[e(`div`,null,[r[10]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Request ID `,-1),e(`div`,mt,o(t.id),1)]),e(`div`,null,[r[11]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Input Tokens `,-1),e(`div`,ht,o(t.streamMetrics?.inputTokens?.toLocaleString()??`--`),1)]),e(`div`,null,[r[12]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Output Tokens `,-1),e(`div`,gt,o(t.streamMetrics?.outputTokens?.toLocaleString()??`--`),1)]),e(`div`,null,[r[13]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Cache Tokens `,-1),e(`div`,_t,o(t.streamMetrics?.cacheReadTokens?.toLocaleString()??`--`),1)])])]),_:2},1024)]),_:2},1024)):C(``,!0)],64))),128))]),_:1})]),_:1})]),_:1})]),e(`div`,vt,[e(`div`,yt,[e(`div`,bt,o(S(i)(`monitor.completed`)),1),e(`div`,xt,o(S(M)?.successCount??0),1),r[14]||=e(`div`,{class:`text-[10px] font-mono text-muted-foreground`},`last 5h`,-1)]),e(`div`,St,[e(`div`,Ct,o(S(i)(`monitor.header.errorRate`)),1),e(`div`,{class:d([`text-[13px] font-mono font-semibold`,Ue.value])},o(J.value)+`% `,3),e(`div`,wt,o(S(M)?.errorCount??0)+` / `+o(S(M)?.totalRequests??0),1)]),e(`div`,Tt,[e(`div`,Et,o(S(i)(`monitor.header.p50Latency`)),1),e(`div`,Dt,o(Ge.value)+`ms `,1),e(`div`,Ot,` avg `+o(S(M)?.avgLatencyMs?.toFixed(1)??`--`)+`s `,1)]),e(`div`,kt,[e(`div`,At,o(S(i)(`monitor.header.retryRate`)),1),e(`div`,jt,o(We.value)+`% `,1),e(`div`,Mt,o(S(M)?.retryCount??0)+` / `+o(S(M)?.totalRequests??0),1)]),e(`div`,Nt,[e(`div`,Pt,o(S(i)(`monitor.runtimePanel.uptime`)),1),e(`div`,Ft,o(Xe.value),1),e(`div`,It,o(Ze.value),1)])]),e(`div`,Lt,[m(S(re),{open:q.value,"onUpdate:open":r[1]||=e=>q.value=e},{default:v(()=>[e(`div`,Rt,[e(`span`,zt,o(S(i)(`monitor.providerStats`)),1),m(S(ae),{"as-child":``},{default:v(()=>[m(S(y),{variant:`ghost`,size:`xs`,class:`text-[11px] text-muted-foreground hover:text-foreground h-6 px-1.5`},{default:v(()=>[_(o(q.value?S(i)(`monitor.providerStatsHide`):S(i)(`monitor.providerStatsShow`)),1)]),_:1})]),_:1})]),m(S(ie),null,{default:v(()=>[e(`div`,Bt,[m(Qe,{stats:S(M)},null,8,[`stats`])])]),_:1})]),_:1},8,[`open`])]),e(`div`,Vt,[e(`div`,Ht,[e(`div`,Ut,[e(`span`,Wt,o(S(i)(`monitor.statusCodeDistribution`)),1)]),e(`div`,Gt,[m(qe,{"by-status-code":S(M)?.byStatusCode??{}},null,8,[`by-status-code`])])]),e(`div`,Kt,[e(`div`,qt,[e(`span`,Jt,o(S(i)(`monitor.runtime`)),1)]),e(`div`,Yt,[m(He,{runtime:S(L)},null,8,[`runtime`])])]),e(`div`,Xt,[e(`div`,Zt,[e(`span`,Qt,o(S(i)(`monitor.concurrency`)),1)]),e(`div`,$t,[e(`div`,en,[e(`span`,tn,o(Y.value.active),1),e(`span`,nn,`/ `+o(Y.value.total),1),e(`span`,rn,o(Y.value.pct)+`%`,1)]),e(`div`,an,[e(`div`,{class:d([`h-full rounded-full transition-all duration-300`,Ye.value]),style:f({width:`${Math.min(100,Y.value.pct)}%`})},null,6)]),e(`div`,on,[e(`div`,null,[r[15]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` P99 `,-1),e(`div`,sn,o(Ke.value)+`ms `,1)]),e(`div`,null,[r[16]||=e(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` QPS `,-1),e(`div`,cn,o(Je.value),1)])])])])]),m(D,{open:S(z),"onUpdate:open":r[2]||=e=>n(z)?z.value=e:null,source:`realtime`,request:S(Ee),"stream-content":S(Oe),"log-detail-data":S(ke)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),m(S(me),{open:W.value,"onUpdate:open":r[3]||=e=>W.value=e},{default:v(()=>[m(S(ge),null,{default:v(()=>[m(S(he),null,{default:v(()=>[m(S(pe),null,{default:v(()=>[_(o(S(i)(`monitor.killConfirmTitle`)),1)]),_:1}),K.value?(w(),g(S(de),{key:0},{default:v(()=>[_(o(S(i)(`monitor.killConfirm`,{model:K.value.model,provider:K.value.providerName})),1)]),_:1})):C(``,!0)]),_:1}),m(S(ce),null,{default:v(()=>[m(S(le),null,{default:v(()=>[_(o(S(i)(`monitor.killCancel`)),1)]),_:1}),m(S(ue),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:Ve},{default:v(()=>[_(o(S(i)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{xn as default};
|