llm-simple-router 0.12.0-dev.7cf31a2 → 1.0.0
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-AvTL8TD9.js → AuthLayout-De6aaM85.js} +1 -1
- package/frontend-dist/assets/{Card-_-Rsez1Z.js → Card-DneJRQNa.js} +1 -1
- package/frontend-dist/assets/{CardContent-CXB0aTQX.js → CardContent-BYiS-OLu.js} +1 -1
- package/frontend-dist/assets/{CardTitle-DEgSNH9O.js → CardTitle-8-tAyE6S.js} +1 -1
- package/frontend-dist/assets/{CascadingModelSelect-vGUnj1X-.js → CascadingModelSelect-CVnBWxd0.js} +1 -1
- package/frontend-dist/assets/{Checkbox-Bwhfqxux.js → Checkbox-lPPFNh3g.js} +1 -1
- package/frontend-dist/assets/{CollapsibleContent-DDzm_Bxn.js → CollapsibleContent-D0WBasYY.js} +1 -1
- package/frontend-dist/assets/{CollapsibleTrigger-CWUxEdhm.js → CollapsibleTrigger-DXlDbowG.js} +1 -1
- package/frontend-dist/assets/{ConcurrencyControl-DXIrmfyy.js → ConcurrencyControl-D4Dy75mf.js} +1 -1
- package/frontend-dist/assets/{Dashboard-Gzd7h17f.js → Dashboard-Blpliw39.js} +1 -1
- package/frontend-dist/assets/{Input-Qz28j7do.js → Input-DXSPfwpG.js} +1 -1
- package/frontend-dist/assets/{Label-CgLYbqNp.js → Label-CS89uu8N.js} +1 -1
- package/frontend-dist/assets/{Login-Dds3B1xs.js → Login-B4wMhZVq.js} +1 -1
- package/frontend-dist/assets/{Logs-OknLq4IX.js → Logs-DBG1OkfO.js} +1 -1
- package/frontend-dist/assets/{ModelMappings-BBOSIVlU.js → ModelMappings-BL0h2iuz.js} +1 -1
- package/frontend-dist/assets/{Monitor-BN6VeuSD.js → Monitor-RJxfMjTf.js} +1 -1
- package/frontend-dist/assets/{Providers-C6v2RKW1.js → Providers-BkhHz54V.js} +1 -1
- package/frontend-dist/assets/{ProxyEnhancement-Bs_ocCbv.js → ProxyEnhancement-CrivWqo3.js} +1 -1
- package/frontend-dist/assets/{QuickSetup-CG1X-HWo.js → QuickSetup-DMyFXs-z.js} +1 -1
- package/frontend-dist/assets/{RetryRules-DCXYuPl-.js → RetryRules-Y05oXut1.js} +1 -1
- package/frontend-dist/assets/{RouterKeys-4hYMVOwN.js → RouterKeys-wCF4H7ed.js} +1 -1
- package/frontend-dist/assets/{RovingFocusItem-CCbZ7_un.js → RovingFocusItem-BPCx-7_e.js} +1 -1
- package/frontend-dist/assets/{Schedules-C0Kf-gvS.js → Schedules-Ilqnnyoo.js} +1 -1
- package/frontend-dist/assets/{Settings-u7_Vhsqi.js → Settings-CTy9ACya.js} +1 -1
- package/frontend-dist/assets/{Setup-BXxAhB7r.js → Setup-jc3A_Hh3.js} +1 -1
- package/frontend-dist/assets/{Skeleton-QesVeTCW.js → Skeleton-CvU2Fu1Y.js} +1 -1
- package/frontend-dist/assets/{Switch-D2xEGYqH.js → Switch-BNj81rHC.js} +1 -1
- package/frontend-dist/assets/{TableHeader-CHaThXAU.js → TableHeader-D9Qt4Aoe.js} +1 -1
- package/frontend-dist/assets/{TabsTrigger-Cl1kx8BK.js → TabsTrigger-kt5pOTBd.js} +1 -1
- package/frontend-dist/assets/{TooltipTrigger-8hiSB2Rk.js → TooltipTrigger-ctVYouBP.js} +1 -1
- package/frontend-dist/assets/{UnifiedRequestDialog-Cm6Ao45M.js → UnifiedRequestDialog-Uq9NY1XD.js} +1 -1
- package/frontend-dist/assets/{VisuallyHiddenInput-Lv6BsAIS.js → VisuallyHiddenInput-TvNkj489.js} +1 -1
- package/frontend-dist/assets/arrow-down-DvUiNydP.js +1 -0
- package/frontend-dist/assets/{badge-C82CIl1p.js → badge-BrOplN8n.js} +1 -1
- package/frontend-dist/assets/{button-DXlWUlLe.js → button-BW3lV6lw.js} +2 -2
- package/frontend-dist/assets/chevron-right-CmJy_8oF.js +1 -0
- package/frontend-dist/assets/{dialog-DN2mvc9h.js → dialog-DI8w_067.js} +1 -1
- package/frontend-dist/assets/{image-8GxBtf66.js → image-CefgMOpc.js} +1 -1
- package/frontend-dist/assets/{index-FYAc4GSw.js → index-CkhT3okn.js} +2 -2
- package/frontend-dist/assets/{model-patches-Dr6eEIuK.js → model-patches-CHW7tS49.js} +1 -1
- package/frontend-dist/assets/{pencil-BzLz9HuE.js → pencil-x457kif0.js} +1 -1
- package/frontend-dist/assets/plus-CorbospU.js +1 -0
- package/frontend-dist/assets/search-EayCiSei.js +1 -0
- package/frontend-dist/assets/{sparkles-B2aVxqID.js → sparkles-BjqFR567.js} +1 -1
- package/frontend-dist/assets/{transform-domain-BGh_oMvU.js → transform-domain-BxLBDHCJ.js} +1 -1
- package/frontend-dist/assets/{trash-2-BFS2nrZH.js → trash-2-BPhI0Tuv.js} +1 -1
- package/frontend-dist/assets/{useClipboard-D_fR9Erj.js → useClipboard-Du9vZK8q.js} +1 -1
- package/frontend-dist/assets/{useLogRetention-CLvwmbya.js → useLogRetention-2fY-Rtfl.js} +1 -1
- package/frontend-dist/assets/{useProviderGroups-DYlN-TXY.js → useProviderGroups-C8ZizGfL.js} +1 -1
- package/frontend-dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend-dist/assets/arrow-down-C7Be80wb.js +0 -1
- package/frontend-dist/assets/chevron-right-DJE8HF-i.js +0 -1
- package/frontend-dist/assets/plus-DghQKiGV.js +0 -1
- package/frontend-dist/assets/search-BvelBk-g.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{At as e,G as t,Gt as n,Nt as r,et as i,gt as a,it as o,m as s,qt as c,r as l}from"./button-
|
|
1
|
+
import{At as e,G as t,Gt as n,Nt as r,et as i,gt as a,it as o,m as s,qt as c,r as l}from"./button-BW3lV6lw.js";var u=o({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(o,{emit:u}){let d=o,f=s(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(o,s)=>e((a(),i(`input`,{"onUpdate:modelValue":s[0]||=e=>r(f)?f.value=e:null,"data-slot":`input`,class:c(n(l)(`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)),[[t,n(f)]])}});export{u as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Gt as e,Q as t,dt as n,gt as r,i,it as a,kt as o,o as s,r as c,x as l,yt as u}from"./button-
|
|
1
|
+
import{Gt as e,Q as t,dt as n,gt as r,i,it as a,kt as o,o as s,r as c,x as l,yt as u}from"./button-BW3lV6lw.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(a){let c=a;return s(),(a,s)=>(r(),t(e(i),n(c,{onMousedown:s[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:o(()=>[u(a.$slots,`default`)]),_:3},16))}}),f=a({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(i){let a=i,s=l(a,`class`);return(i,l)=>(r(),t(e(d),n({"data-slot":`label`},e(s),{class:e(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`,a.class)}),{default:o(()=>[u(i.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Gt as n,H as r,Lt as i,Q as a,Xt as o,Z as s,et as c,gt as l,it as u,k as d,kt as f,n as p,nt as m,q as h,rt as g,z as _}from"./button-
|
|
1
|
+
import{$ as e,A as t,Gt as n,H as r,Lt as i,Q as a,Xt as o,Z as s,et as c,gt as l,it as u,k as d,kt as f,n as p,nt as m,q as h,rt as g,z as _}from"./button-BW3lV6lw.js";import{t as v}from"./Label-CS89uu8N.js";import{t as y}from"./AuthLayout-De6aaM85.js";import{t as b}from"./Input-DXSPfwpG.js";var x={key:0,class:`text-destructive text-sm`},S=u({__name:`Login`,setup(u){let{t:S}=r(),C=_(),w=i(``),T=i(``),E=i(!1);async function D(){if(w.value){T.value=``,E.value=!0;try{await d.login(w.value),C.push(`/`)}catch(e){console.error(`login:`,e),T.value=t(e,S(`login.loginFailed`))}finally{E.value=!1}}}return(t,r)=>(l(),a(y,{subtitle:n(S)(`login.subtitle`)},{default:f(()=>[s(`form`,{onSubmit:h(D,[`prevent`]),class:`space-y-4`},[s(`div`,null,[g(n(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:f(()=>[m(o(n(S)(`login.password`)),1)]),_:1}),g(n(b),{modelValue:w.value,"onUpdate:modelValue":r[0]||=e=>w.value=e,type:`password`,placeholder:n(S)(`login.passwordPlaceholder`),disabled:E.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),T.value?(l(),c(`p`,x,o(T.value),1)):e(``,!0),g(n(p),{type:`submit`,class:`w-full`,disabled:E.value},{default:f(()=>[m(o(E.value?n(S)(`login.loggingIn`):n(S)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1},8,[`subtitle`]))}});export{S as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Et as n,Gt as r,H as i,J as a,Lt as o,Nt as s,Q as c,X as l,Xt as u,Z as d,et as f,gt as p,it as m,k as h,kt as g,mt as _,n as v,nt as y,q as b,qt as x,rt as S,vt as C}from"./button-DXlWUlLe.js";import{r as w,t as T}from"./UnifiedRequestDialog-Cm6Ao45M.js";import{n as E,t as ee}from"./useClipboard-D_fR9Erj.js";import{n as D,r as O,t as k}from"./TooltipTrigger-8hiSB2Rk.js";import{a as te,n as ne,o as re,r as ie,t as ae}from"./dialog-DN2mvc9h.js";import{t as oe}from"./Label-CgLYbqNp.js";import{Dt as A,Et as se,St as ce,_ as j,a as M,c as le,f as ue,g as N,gt as de,h as P,ht as fe,l as pe,m as F,o as me,p as he,s as ge,t as _e,u as ve,v as I,yt as ye}from"./index-FYAc4GSw.js";import{t as L}from"./Skeleton-QesVeTCW.js";import{t as R}from"./badge-C82CIl1p.js";import{t as be}from"./Card-_-Rsez1Z.js";import{t as z}from"./Input-Qz28j7do.js";import{a as xe,i as B,n as V,o as Se,r as H,t as Ce}from"./TableHeader-CHaThXAU.js";import{t as we}from"./useLogRetention-CLvwmbya.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`},De={key:1,class:`text-muted-foreground`},Oe=m({__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 o=t,s=n,{t:m}=i(),h=l(()=>o.log.thinking_level??`off`);function _(e){if(!e)return m(`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),m(`logs.row.unknown`)}}return(n,i)=>(p(),c(r(H),{class:x([`group`,{"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild}])},{default:g(()=>[S(r(B),{class:`w-10`},{default:g(()=>[!t.isChild&&t.log.child_count?(p(),c(r(v),{key:0,variant:`ghost`,size:`xs`,onClick:i[0]||=e=>s(`toggleExpand`,t.log)},{default:g(()=>[S(r(fe),{class:x([`size-3 transition-transform`,t.expanded?``:`-rotate-90`])},null,8,[`class`])]),_:1})):e(``,!0),t.isChild?(p(),f(`span`,Te,`└`)):e(``,!0)]),_:1}),S(r(B),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:g(()=>[d(`span`,U,[y(u(t.log.id.slice(0,8))+` `,1),S(r(O),{"delay-duration":300},{default:g(()=>[S(r(k),{"as-child":``},{default:g(()=>[S(r(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:i[1]||=b(e=>s(`copy`,t.log.id),[`stop`])},{default:g(()=>[t.copiedId===t.log.id?(p(),c(r(de),{key:0,class:`size-3 text-success`})):(p(),c(r(E),{key:1,class:`size-3`}))]),_:1})]),_:1}),S(r(D),null,{default:g(()=>[y(u(r(m)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})])]),_:1},8,[`title`]),S(r(B),{class:`font-mono text-xs text-muted-foreground whitespace-nowrap`},{default:g(()=>[y(u(r(ce)(t.log.created_at)),1)]),_:1}),S(r(B),{class:`font-mono text-xs whitespace-nowrap`},{default:g(()=>[y(u(t.log.model||`-`)+` `,1),S(r(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[y(u(t.log.api_type),1)]),_:1})]),_:1}),S(r(B),{class:`text-xs whitespace-nowrap`},{default:g(()=>[!t.isChild&&t.log.provider_id===r(`router`)?(p(),c(r(R),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:g(()=>[y(u(r(m)(`logs.row.proxyEnhancement`,{label:_(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(p(),f(a,{key:1},[d(`span`,W,u(t.log.backend_model||`-`),1),i[3]||=d(`span`,{class:`text-muted-foreground`},` @ `,-1),d(`span`,G,u(t.log.provider_name||t.log.provider_id||`-`),1),S(r(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[y(u(t.log.api_type),1)]),_:1})],64)):(p(),f(`span`,K,`-`))]),_:1}),S(r(B),null,{default:g(()=>[d(`div`,Ee,[t.log.upstream_api_type&&t.log.upstream_api_type!==t.log.api_type?(p(),c(r(R),{key:0,variant:t.log.api_type===`openai`?`default`:`secondary`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[y(u(t.log.api_type)+` → `+u(t.log.upstream_api_type),1)]),_:1},8,[`variant`])):e(``,!0),S(r(R),{variant:(t.log.status_code??0)<400?`default`:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[y(u(t.log.status_code||`-`),1)]),_:1},8,[`variant`]),h.value?(p(),c(r(R),{key:1,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[y(u(h.value),1)]),_:1})):e(``,!0),t.log.is_stream?(p(),c(r(R),{key:2,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[...i[4]||=[y(` SSE `,-1)]]),_:1})):e(``,!0),t.log.is_retry?(p(),c(r(R),{key:3,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-warning-dark border-warning`},{default:g(()=>[y(u(r(m)(`logs.table.retry`)),1)]),_:1})):e(``,!0),t.log.is_failover?(p(),c(r(R),{key:4,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-danger-dark border-danger`},{default:g(()=>[y(u(r(m)(`logs.table.failover`)),1)]),_:1})):e(``,!0)])]),_:1}),S(r(B),{class:`text-xs text-muted-foreground font-mono`},{default:g(()=>[y(u(r(ye)(t.log.latency_ms)),1)]),_:1}),S(r(B),{class:`text-destructive text-xs min-w-0 max-w-60 lg:max-w-xs`},{default:g(()=>[t.log.error_message?(p(),c(r(O),{key:0,"delay-duration":300},{default:g(()=>[S(r(k),{"as-child":``},{default:g(()=>[d(`span`,q,u(t.log.error_message),1)]),_:1}),S(r(D),{class:`max-w-sm whitespace-pre-wrap`},{default:g(()=>[y(u(t.log.error_message),1)]),_:1})]),_:1})):(p(),f(`span`,De,`-`))]),_:1}),S(r(B),null,{default:g(()=>[S(r(v),{variant:`ghost`,size:`sm`,onClick:i[2]||=e=>s(`openDetail`,t.log.id)},{default:g(()=>[y(u(r(m)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),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}=i(),n=o(`5h`),r=o({start:``,end:``}),a=o(`all`),s=o(`all`),c=o(`all`),u=o(`all`),d=o(`all`),f=o(`all`),p=o([]),m=o([]),g=o([]),v=o([]),y=l(()=>r.value.start&&r.value.end&&r.value.start<r.value.end),b=l(()=>{let{start:t,end:n}=r.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),x={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function S(){let e={};if(y.value)e.start_time=A(r.value.start),e.end_time=se(r.value.end);else{let t=x[n.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return d.value!==`all`&&(e.api_type=d.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),u.value!==`all`&&(e.router_key_id=u.value),f.value!==`all`&&(e.status_code=f.value),e}function C(){r.value={start:``,end:``}}async function w(){try{p.value=await h.getProviders()}catch(n){console.error(`Failed to load providers:`,n),M.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function T(){try{m.value=await h.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),M.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function E(){try{let[e,t]=await Promise.allSettled([h.getMetricsSummary({period:`30d`}),h.getAvailableModels()]);g.value=t.status===`fulfilled`?t.value:[],v.value=e.status===`fulfilled`?[...new Set(e.value.rows.map(e=>e.backend_model))]:[]}catch(e){console.error(`useLogFilters.loadModelOptions:`,e),g.value=[],v.value=[]}}return _(()=>{Promise.allSettled([w(),T(),E()])}),{PERIODS:ke,period:n,dateRange:r,dateRangeError:b,providerFilter:a,clientModelFilter:s,backendModelFilter:c,keyFilter:u,apiTypeFilter:d,statusFilter:f,providers:p,routerKeys:m,clientModelOptions:g,backendModelOptions:v,hasDateRange:y,clearDateRange:C,buildFilterParams:S}}var J=20,Y=864e5;function je(){let{t:e}=i(),n=o([]),r=o(0),a=o(1),s=o({}),c=o(30),u=o(!1),d=o(!1),f=o(new Set),p=o({}),m=o({}),g=o(!1),_=o(null),v=l(()=>Math.ceil(r.value/J));async function y(i){i&&(s.value=i),u.value=!0;try{let e=await h.getLogs({page:a.value,limit:J,view:`grouped`,...s.value});n.value=e.data,r.value=e.total,f.value.clear(),p.value={},m.value={}}catch(n){console.error(`Failed to load logs:`,n),M.error(t(n,e(`logs.messages.loadFailed`)))}finally{u.value=!1}}function b(e){e>=1&&e<=v.value&&e!==a.value&&(a.value=e,y())}let x=o(null),S=o(!1);async function C(){try{let e=new Date(Date.now()-c.value*Y).toISOString(),t=await h.deleteLogsBefore(e);d.value=!1,a.value=1,await y(),x.value=t.deleted,S.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),M.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function T(n){let r=n.id;if(f.value.has(r)){f.value.delete(r);return}if(f.value.add(r),!p.value[r]){m.value[r]=!0;try{p.value[r]=await h.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),M.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{m.value[r]=!1}}}async function E(n){try{let e=await h.getLogDetail(n);_.value=w(e,e.child_count?await h.getLogChildren(n):[]),g.value=!0}catch(n){console.error(`Failed to load log detail:`,n),M.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:J,loading:u,logs:n,total:r,page:a,totalPages:v,cleanupDays:c,showCleanup:d,expandedRows:f,childLogs:p,childLoading:m,logDetailOpen:g,selectedLogEntry:_,cleanupResult:x,showCleanupResult:S,loadLogs:y,goToPage:b,handleCleanup:C,toggleExpand:T,openLogDetail:E}}var Me={class:`page`},Ne={class:`flex items-center justify-between mb-4`},Pe={class:`text-lg font-semibold text-foreground`},Fe={class:`flex flex-wrap items-center gap-2 mb-4`},Ie={class:`flex`},Le={class:`flex items-center gap-1`},Re={key:1,class:`text-xs text-destructive whitespace-nowrap`},ze={key:0,class:`absolute inset-0 bg-background/50 flex items-center justify-center z-10`},Be={class:`space-y-3 w-3/4`},Ve={class:`flex flex-col items-center gap-2`},He={class:`text-sm text-muted-foreground`},Ue={key:0,class:`text-xs text-muted-foreground`},We={class:`flex items-center justify-between mt-4`},Ge={class:`text-sm text-muted-foreground`},Ke={class:`flex items-center gap-1`},qe={key:0,class:`px-2 text-sm text-muted-foreground`},Je={class:`flex items-center justify-end mt-2 gap-2`},Ye={class:`text-xs text-muted-foreground`},Xe={class:`text-xs text-muted-foreground`},Ze={class:`text-sm text-muted-foreground`},Qe={class:`mb-4`},$e=9,et=300,tt=7,X=2,Z=1,nt=2e3,rt=m({__name:`Logs`,setup(t){let{t:m}=i(),{PERIODS:h,period:b,dateRange:x,dateRangeError:w,providerFilter:E,clientModelFilter:D,backendModelFilter:O,keyFilter:k,statusFilter:A,providers:se,routerKeys:ce,clientModelOptions:M,backendModelOptions:de,clearDateRange:fe,buildFilterParams:ye}=Ae(),{logs:R,total:Te,page:U,totalPages:W,cleanupDays:G,showCleanup:K,cleanupResult:Ee,showCleanupResult:q,expandedRows:De,childLogs:ke,childLoading:J,logDetailOpen:Y,selectedLogEntry:rt,loadLogs:it,goToPage:Q,handleCleanup:at,toggleExpand:ot,openLogDetail:st,loading:ct}=je(),lt=l(()=>{let e=W.value,t=U.value;if(e<=tt)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}=ee(),$=o(null);function ht(e){mt(e),$.value=e,setTimeout(()=>{$.value===e&&($.value=null)},nt)}let gt=l(()=>E.value!==`all`||D.value!==`all`||O.value!==`all`||k.value!==`all`||A.value!==`all`||!!x.value.start||!!x.value.end);function _t(){b.value=`5h`,x.value={start:``,end:``},E.value=`all`,D.value=`all`,O.value=`all`,k.value=`all`,A.value=`all`}let vt=null;return n([b,x,E,D,O,k,A],()=>{U.value=1,vt&&clearTimeout(vt),vt=setTimeout(()=>it(ye()),et)},{deep:!0}),_(()=>{it(ye()),pt()}),(t,n)=>(p(),f(`div`,Me,[d(`div`,Ne,[d(`h2`,Pe,u(r(m)(`logs.title`)),1),S(r(v),{variant:`ghost`,size:`sm`,onClick:n[0]||=e=>K.value=!0},{default:g(()=>[y(u(r(m)(`logs.cleanupLogs`)),1)]),_:1})]),d(`div`,Fe,[d(`div`,Ie,[(p(!0),f(a,null,C(r(h),e=>(p(),c(r(v),{key:e.value,variant:r(b)===e.value?`default`:`outline`,size:`sm`,class:`rounded-none first:rounded-l-md last:rounded-r-md -ml-px first:ml-0`,onClick:t=>b.value=e.value},{default:g(()=>[y(u(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),d(`div`,Le,[S(r(z),{type:`datetime-local`,modelValue:r(x).start,"onUpdate:modelValue":n[1]||=e=>r(x).start=e,class:`w-44`},null,8,[`modelValue`]),n[19]||=d(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),S(r(z),{type:`datetime-local`,modelValue:r(x).end,"onUpdate:modelValue":n[2]||=e=>r(x).end=e,class:`w-44`},null,8,[`modelValue`]),r(x).start||r(x).end?(p(),c(r(v),{key:0,variant:`ghost`,size:`sm`,onClick:r(fe)},{default:g(()=>[y(u(r(m)(`logs.clear`)),1)]),_:1},8,[`onClick`])):e(``,!0),r(w)?(p(),f(`span`,Re,u(r(w)),1)):e(``,!0)]),S(r(I),{modelValue:r(E),"onUpdate:modelValue":n[3]||=e=>s(E)?E.value=e:null},{default:g(()=>[S(r(P),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.allProviders`)),1)]),_:1}),(p(!0),f(a,null,C(r(se),e=>(p(),c(r(N),{key:e.id,value:e.id},{default:g(()=>[y(u(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(D),"onUpdate:modelValue":n[4]||=e=>s(D)?D.value=e:null},{default:g(()=>[S(r(P),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.filters.allClientModels`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.filters.allClientModels`)),1)]),_:1}),(p(!0),f(a,null,C(r(M),e=>(p(),c(r(N),{key:e,value:e},{default:g(()=>[y(u(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(O),"onUpdate:modelValue":n[5]||=e=>s(O)?O.value=e:null},{default:g(()=>[S(r(P),{class:`w-32 truncate`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.filters.allBackendModels`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.filters.allBackendModels`)),1)]),_:1}),(p(!0),f(a,null,C(r(de),e=>(p(),c(r(N),{key:e,value:e},{default:g(()=>[y(u(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(k),"onUpdate:modelValue":n[6]||=e=>s(k)?k.value=e:null},{default:g(()=>[S(r(P),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.allKeys`)),1)]),_:1}),(p(!0),f(a,null,C(r(ce),e=>(p(),c(r(N),{key:e.id,value:e.id},{default:g(()=>[y(u(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(A),"onUpdate:modelValue":n[7]||=e=>s(A)?A.value=e:null},{default:g(()=>[S(r(P),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.allStatus`)),1)]),_:1}),S(r(N),{value:`200`},{default:g(()=>[...n[20]||=[y(`200`,-1)]]),_:1}),S(r(N),{value:`non200`},{default:g(()=>[y(u(r(m)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),S(r(be),{flush:``,class:`relative`},{default:g(()=>[r(ct)?(p(),f(`div`,ze,[d(`div`,Be,[S(r(L),{class:`h-8 w-full`}),S(r(L),{class:`h-8 w-full`}),S(r(L),{class:`h-8 w-5/6`})])])):e(``,!0),S(r(_e),{"delay-duration":300},{default:g(()=>[S(r(Se),{class:`[&_td]:px-3 [&_th]:px-3`},{default:g(()=>[S(r(Ce),null,{default:g(()=>[S(r(H),{class:`bg-muted`},{default:g(()=>[S(r(V),{class:`w-10`}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.id`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.time`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.clientModel`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.targetModel`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.latency`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.tags`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.latency`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.error`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),S(r(xe),null,{default:g(()=>[(p(!0),f(a,null,C(r(R),t=>(p(),f(a,{key:t.id},[S(Oe,{log:t,expanded:r(De).has(t.id),"copied-id":$.value,onToggleExpand:r(ot),onOpenDetail:r(st),onCopy:ht},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),r(De).has(t.id)?(p(),f(a,{key:0},[r(J)[t.id]?(p(),c(r(H),{key:0},{default:g(()=>[S(r(B),{colspan:$e,class:`text-center py-2 pl-10`},{default:g(()=>[S(r(L),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):r(ke)[t.id]?.length?(p(!0),f(a,{key:1},C(r(ke)[t.id],e=>(p(),c(Oe,{key:e.id,log:e,"is-child":!0,"copied-id":$.value,onOpenDetail:r(st),onCopy:ht},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):e(``,!0)],64)):e(``,!0)],64))),128)),r(R).length===0&&!r(ct)?(p(),c(r(H),{key:0},{default:g(()=>[S(r(B),{colspan:$e,class:`py-12 text-center`},{default:g(()=>[d(`div`,Ve,[d(`p`,He,u(r(m)(`logs.noLogs`)),1),gt.value?(p(),f(`p`,Ue,u(r(m)(`logs.noLogsFilterHint`)),1)):e(``,!0),gt.value?(p(),c(r(v),{key:1,variant:`ghost`,size:`sm`,onClick:_t},{default:g(()=>[y(u(r(m)(`logs.clearAllFilters`)),1)]),_:1})):e(``,!0)])]),_:1})]),_:1})):e(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),d(`div`,We,[d(`p`,Ge,u(r(m)(`logs.pagination`,{total:r(Te),page:r(U),totalPages:r(W)})),1),d(`div`,Ke,[S(r(v),{variant:`outline`,size:`sm`,onClick:n[8]||=e=>r(Q)(1),disabled:r(U)<=1},{default:g(()=>[y(u(r(m)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),S(r(v),{variant:`outline`,size:`sm`,onClick:n[9]||=e=>r(Q)(r(U)-1),disabled:r(U)<=1},{default:g(()=>[y(u(r(m)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(p(!0),f(a,null,C(lt.value,e=>(p(),f(a,{key:e},[e===`...`?(p(),f(`span`,qe,`...`)):(p(),c(r(v),{key:1,variant:e===r(U)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>r(Q)(e)},{default:g(()=>[y(u(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),S(r(v),{variant:`outline`,size:`sm`,onClick:n[10]||=e=>r(Q)(r(U)+1),disabled:r(U)>=r(W)},{default:g(()=>[y(u(r(m)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),S(r(v),{variant:`outline`,size:`sm`,onClick:n[11]||=e=>r(Q)(r(W)),disabled:r(U)>=r(W)},{default:g(()=>[y(u(r(m)(`logs.lastPage`)),1)]),_:1},8,[`disabled`])])]),d(`div`,Je,[d(`span`,Ye,u(r(m)(`logs.cleanup.autoCleanup`)),1),S(r(z),{type:`number`,modelValue:r(ut),"onUpdate:modelValue":n[12]||=e=>s(ut)?ut.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-16 h-6 text-xs`},null,8,[`modelValue`]),d(`span`,Xe,u(r(m)(`logs.cleanup.days`)),1),S(r(v),{size:`sm`,onClick:r(ft),disabled:r(dt)},{default:g(()=>[y(u(r(m)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])]),S(T,{open:r(Y),"onUpdate:open":n[13]||=e=>s(Y)?Y.value=e:null,source:`history`,"log-entry":r(rt)},null,8,[`open`,`log-entry`]),S(r(re),{open:r(K),"onUpdate:open":n[16]||=e=>s(K)?K.value=e:null},{default:g(()=>[S(r(te),null,{default:g(()=>[S(r(ne),null,{default:g(()=>[S(r(ae),null,{default:g(()=>[y(u(r(m)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),d(`p`,Ze,u(r(m)(`logs.cleanup.description`)),1),d(`div`,Qe,[S(r(oe),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[y(u(r(m)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),S(r(z),{modelValue:r(G),"onUpdate:modelValue":n[14]||=e=>s(G)?G.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),S(r(ie),null,{default:g(()=>[S(r(v),{variant:`outline`,onClick:n[15]||=e=>K.value=!1},{default:g(()=>[y(u(r(m)(`common.cancel`)),1)]),_:1}),S(r(v),{variant:`destructive`,onClick:r(at)},{default:g(()=>[y(u(r(m)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),S(r(he),{open:r(q),"onUpdate:open":n[18]||=e=>s(q)?q.value=e:null},{default:g(()=>[S(r(ve),null,{default:g(()=>[S(r(ge),null,{default:g(()=>[S(r(me),null,{default:g(()=>[y(u(r(m)(`logs.cleanupResult.title`)),1)]),_:1}),S(r(pe),null,{default:g(()=>[y(u(r(m)(`logs.cleanupResult.description`,{count:r(Ee)})),1)]),_:1})]),_:1}),S(r(le),null,{default:g(()=>[S(r(ue),{onClick:n[17]||=e=>q.value=!1},{default:g(()=>[y(u(r(m)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{rt as default};
|
|
1
|
+
import{$ as e,A as t,Et as n,Gt as r,H as i,J as a,Lt as o,Nt as s,Q as c,X as l,Xt as u,Z as d,et as f,gt as p,it as m,k as h,kt as g,mt as _,n as v,nt as y,q as b,qt as x,rt as S,vt as C}from"./button-BW3lV6lw.js";import{r as w,t as T}from"./UnifiedRequestDialog-Uq9NY1XD.js";import{n as E,t as ee}from"./useClipboard-Du9vZK8q.js";import{n as D,r as O,t as k}from"./TooltipTrigger-ctVYouBP.js";import{a as te,n as ne,o as re,r as ie,t as ae}from"./dialog-DI8w_067.js";import{t as oe}from"./Label-CS89uu8N.js";import{Dt as A,Et as se,St as ce,_ as j,a as M,c as le,f as ue,g as N,gt as de,h as P,ht as fe,l as pe,m as F,o as me,p as he,s as ge,t as _e,u as ve,v as I,yt as ye}from"./index-CkhT3okn.js";import{t as L}from"./Skeleton-CvU2Fu1Y.js";import{t as R}from"./badge-BrOplN8n.js";import{t as be}from"./Card-DneJRQNa.js";import{t as z}from"./Input-DXSPfwpG.js";import{a as xe,i as B,n as V,o as Se,r as H,t as Ce}from"./TableHeader-D9Qt4Aoe.js";import{t as we}from"./useLogRetention-2fY-Rtfl.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`},De={key:1,class:`text-muted-foreground`},Oe=m({__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 o=t,s=n,{t:m}=i(),h=l(()=>o.log.thinking_level??`off`);function _(e){if(!e)return m(`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),m(`logs.row.unknown`)}}return(n,i)=>(p(),c(r(H),{class:x([`group`,{"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild}])},{default:g(()=>[S(r(B),{class:`w-10`},{default:g(()=>[!t.isChild&&t.log.child_count?(p(),c(r(v),{key:0,variant:`ghost`,size:`xs`,onClick:i[0]||=e=>s(`toggleExpand`,t.log)},{default:g(()=>[S(r(fe),{class:x([`size-3 transition-transform`,t.expanded?``:`-rotate-90`])},null,8,[`class`])]),_:1})):e(``,!0),t.isChild?(p(),f(`span`,Te,`└`)):e(``,!0)]),_:1}),S(r(B),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:g(()=>[d(`span`,U,[y(u(t.log.id.slice(0,8))+` `,1),S(r(O),{"delay-duration":300},{default:g(()=>[S(r(k),{"as-child":``},{default:g(()=>[S(r(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:i[1]||=b(e=>s(`copy`,t.log.id),[`stop`])},{default:g(()=>[t.copiedId===t.log.id?(p(),c(r(de),{key:0,class:`size-3 text-success`})):(p(),c(r(E),{key:1,class:`size-3`}))]),_:1})]),_:1}),S(r(D),null,{default:g(()=>[y(u(r(m)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})])]),_:1},8,[`title`]),S(r(B),{class:`font-mono text-xs text-muted-foreground whitespace-nowrap`},{default:g(()=>[y(u(r(ce)(t.log.created_at)),1)]),_:1}),S(r(B),{class:`font-mono text-xs whitespace-nowrap`},{default:g(()=>[y(u(t.log.model||`-`)+` `,1),S(r(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[y(u(t.log.api_type),1)]),_:1})]),_:1}),S(r(B),{class:`text-xs whitespace-nowrap`},{default:g(()=>[!t.isChild&&t.log.provider_id===r(`router`)?(p(),c(r(R),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:g(()=>[y(u(r(m)(`logs.row.proxyEnhancement`,{label:_(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(p(),f(a,{key:1},[d(`span`,W,u(t.log.backend_model||`-`),1),i[3]||=d(`span`,{class:`text-muted-foreground`},` @ `,-1),d(`span`,G,u(t.log.provider_name||t.log.provider_id||`-`),1),S(r(R),{variant:`secondary`,class:`ml-1 text-[10px] px-1 py-0`},{default:g(()=>[y(u(t.log.api_type),1)]),_:1})],64)):(p(),f(`span`,K,`-`))]),_:1}),S(r(B),null,{default:g(()=>[d(`div`,Ee,[t.log.upstream_api_type&&t.log.upstream_api_type!==t.log.api_type?(p(),c(r(R),{key:0,variant:t.log.api_type===`openai`?`default`:`secondary`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[y(u(t.log.api_type)+` → `+u(t.log.upstream_api_type),1)]),_:1},8,[`variant`])):e(``,!0),S(r(R),{variant:(t.log.status_code??0)<400?`default`:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[y(u(t.log.status_code||`-`),1)]),_:1},8,[`variant`]),h.value?(p(),c(r(R),{key:1,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[y(u(h.value),1)]),_:1})):e(``,!0),t.log.is_stream?(p(),c(r(R),{key:2,variant:`outline`,class:`text-[10px] px-1.5 py-0`},{default:g(()=>[...i[4]||=[y(` SSE `,-1)]]),_:1})):e(``,!0),t.log.is_retry?(p(),c(r(R),{key:3,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-warning-dark border-warning`},{default:g(()=>[y(u(r(m)(`logs.table.retry`)),1)]),_:1})):e(``,!0),t.log.is_failover?(p(),c(r(R),{key:4,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-danger-dark border-danger`},{default:g(()=>[y(u(r(m)(`logs.table.failover`)),1)]),_:1})):e(``,!0)])]),_:1}),S(r(B),{class:`text-xs text-muted-foreground font-mono`},{default:g(()=>[y(u(r(ye)(t.log.latency_ms)),1)]),_:1}),S(r(B),{class:`text-destructive text-xs min-w-0 max-w-60 lg:max-w-xs`},{default:g(()=>[t.log.error_message?(p(),c(r(O),{key:0,"delay-duration":300},{default:g(()=>[S(r(k),{"as-child":``},{default:g(()=>[d(`span`,q,u(t.log.error_message),1)]),_:1}),S(r(D),{class:`max-w-sm whitespace-pre-wrap`},{default:g(()=>[y(u(t.log.error_message),1)]),_:1})]),_:1})):(p(),f(`span`,De,`-`))]),_:1}),S(r(B),null,{default:g(()=>[S(r(v),{variant:`ghost`,size:`sm`,onClick:i[2]||=e=>s(`openDetail`,t.log.id)},{default:g(()=>[y(u(r(m)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),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}=i(),n=o(`5h`),r=o({start:``,end:``}),a=o(`all`),s=o(`all`),c=o(`all`),u=o(`all`),d=o(`all`),f=o(`all`),p=o([]),m=o([]),g=o([]),v=o([]),y=l(()=>r.value.start&&r.value.end&&r.value.start<r.value.end),b=l(()=>{let{start:t,end:n}=r.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),x={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function S(){let e={};if(y.value)e.start_time=A(r.value.start),e.end_time=se(r.value.end);else{let t=x[n.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return d.value!==`all`&&(e.api_type=d.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),u.value!==`all`&&(e.router_key_id=u.value),f.value!==`all`&&(e.status_code=f.value),e}function C(){r.value={start:``,end:``}}async function w(){try{p.value=await h.getProviders()}catch(n){console.error(`Failed to load providers:`,n),M.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function T(){try{m.value=await h.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),M.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function E(){try{let[e,t]=await Promise.allSettled([h.getMetricsSummary({period:`30d`}),h.getAvailableModels()]);g.value=t.status===`fulfilled`?t.value:[],v.value=e.status===`fulfilled`?[...new Set(e.value.rows.map(e=>e.backend_model))]:[]}catch(e){console.error(`useLogFilters.loadModelOptions:`,e),g.value=[],v.value=[]}}return _(()=>{Promise.allSettled([w(),T(),E()])}),{PERIODS:ke,period:n,dateRange:r,dateRangeError:b,providerFilter:a,clientModelFilter:s,backendModelFilter:c,keyFilter:u,apiTypeFilter:d,statusFilter:f,providers:p,routerKeys:m,clientModelOptions:g,backendModelOptions:v,hasDateRange:y,clearDateRange:C,buildFilterParams:S}}var J=20,Y=864e5;function je(){let{t:e}=i(),n=o([]),r=o(0),a=o(1),s=o({}),c=o(30),u=o(!1),d=o(!1),f=o(new Set),p=o({}),m=o({}),g=o(!1),_=o(null),v=l(()=>Math.ceil(r.value/J));async function y(i){i&&(s.value=i),u.value=!0;try{let e=await h.getLogs({page:a.value,limit:J,view:`grouped`,...s.value});n.value=e.data,r.value=e.total,f.value.clear(),p.value={},m.value={}}catch(n){console.error(`Failed to load logs:`,n),M.error(t(n,e(`logs.messages.loadFailed`)))}finally{u.value=!1}}function b(e){e>=1&&e<=v.value&&e!==a.value&&(a.value=e,y())}let x=o(null),S=o(!1);async function C(){try{let e=new Date(Date.now()-c.value*Y).toISOString(),t=await h.deleteLogsBefore(e);d.value=!1,a.value=1,await y(),x.value=t.deleted,S.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),M.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function T(n){let r=n.id;if(f.value.has(r)){f.value.delete(r);return}if(f.value.add(r),!p.value[r]){m.value[r]=!0;try{p.value[r]=await h.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),M.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{m.value[r]=!1}}}async function E(n){try{let e=await h.getLogDetail(n);_.value=w(e,e.child_count?await h.getLogChildren(n):[]),g.value=!0}catch(n){console.error(`Failed to load log detail:`,n),M.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:J,loading:u,logs:n,total:r,page:a,totalPages:v,cleanupDays:c,showCleanup:d,expandedRows:f,childLogs:p,childLoading:m,logDetailOpen:g,selectedLogEntry:_,cleanupResult:x,showCleanupResult:S,loadLogs:y,goToPage:b,handleCleanup:C,toggleExpand:T,openLogDetail:E}}var Me={class:`page`},Ne={class:`flex items-center justify-between mb-4`},Pe={class:`text-lg font-semibold text-foreground`},Fe={class:`flex flex-wrap items-center gap-2 mb-4`},Ie={class:`flex`},Le={class:`flex items-center gap-1`},Re={key:1,class:`text-xs text-destructive whitespace-nowrap`},ze={key:0,class:`absolute inset-0 bg-background/50 flex items-center justify-center z-10`},Be={class:`space-y-3 w-3/4`},Ve={class:`flex flex-col items-center gap-2`},He={class:`text-sm text-muted-foreground`},Ue={key:0,class:`text-xs text-muted-foreground`},We={class:`flex items-center justify-between mt-4`},Ge={class:`text-sm text-muted-foreground`},Ke={class:`flex items-center gap-1`},qe={key:0,class:`px-2 text-sm text-muted-foreground`},Je={class:`flex items-center justify-end mt-2 gap-2`},Ye={class:`text-xs text-muted-foreground`},Xe={class:`text-xs text-muted-foreground`},Ze={class:`text-sm text-muted-foreground`},Qe={class:`mb-4`},$e=9,et=300,tt=7,X=2,Z=1,nt=2e3,rt=m({__name:`Logs`,setup(t){let{t:m}=i(),{PERIODS:h,period:b,dateRange:x,dateRangeError:w,providerFilter:E,clientModelFilter:D,backendModelFilter:O,keyFilter:k,statusFilter:A,providers:se,routerKeys:ce,clientModelOptions:M,backendModelOptions:de,clearDateRange:fe,buildFilterParams:ye}=Ae(),{logs:R,total:Te,page:U,totalPages:W,cleanupDays:G,showCleanup:K,cleanupResult:Ee,showCleanupResult:q,expandedRows:De,childLogs:ke,childLoading:J,logDetailOpen:Y,selectedLogEntry:rt,loadLogs:it,goToPage:Q,handleCleanup:at,toggleExpand:ot,openLogDetail:st,loading:ct}=je(),lt=l(()=>{let e=W.value,t=U.value;if(e<=tt)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}=ee(),$=o(null);function ht(e){mt(e),$.value=e,setTimeout(()=>{$.value===e&&($.value=null)},nt)}let gt=l(()=>E.value!==`all`||D.value!==`all`||O.value!==`all`||k.value!==`all`||A.value!==`all`||!!x.value.start||!!x.value.end);function _t(){b.value=`5h`,x.value={start:``,end:``},E.value=`all`,D.value=`all`,O.value=`all`,k.value=`all`,A.value=`all`}let vt=null;return n([b,x,E,D,O,k,A],()=>{U.value=1,vt&&clearTimeout(vt),vt=setTimeout(()=>it(ye()),et)},{deep:!0}),_(()=>{it(ye()),pt()}),(t,n)=>(p(),f(`div`,Me,[d(`div`,Ne,[d(`h2`,Pe,u(r(m)(`logs.title`)),1),S(r(v),{variant:`ghost`,size:`sm`,onClick:n[0]||=e=>K.value=!0},{default:g(()=>[y(u(r(m)(`logs.cleanupLogs`)),1)]),_:1})]),d(`div`,Fe,[d(`div`,Ie,[(p(!0),f(a,null,C(r(h),e=>(p(),c(r(v),{key:e.value,variant:r(b)===e.value?`default`:`outline`,size:`sm`,class:`rounded-none first:rounded-l-md last:rounded-r-md -ml-px first:ml-0`,onClick:t=>b.value=e.value},{default:g(()=>[y(u(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),d(`div`,Le,[S(r(z),{type:`datetime-local`,modelValue:r(x).start,"onUpdate:modelValue":n[1]||=e=>r(x).start=e,class:`w-44`},null,8,[`modelValue`]),n[19]||=d(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),S(r(z),{type:`datetime-local`,modelValue:r(x).end,"onUpdate:modelValue":n[2]||=e=>r(x).end=e,class:`w-44`},null,8,[`modelValue`]),r(x).start||r(x).end?(p(),c(r(v),{key:0,variant:`ghost`,size:`sm`,onClick:r(fe)},{default:g(()=>[y(u(r(m)(`logs.clear`)),1)]),_:1},8,[`onClick`])):e(``,!0),r(w)?(p(),f(`span`,Re,u(r(w)),1)):e(``,!0)]),S(r(I),{modelValue:r(E),"onUpdate:modelValue":n[3]||=e=>s(E)?E.value=e:null},{default:g(()=>[S(r(P),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.allProviders`)),1)]),_:1}),(p(!0),f(a,null,C(r(se),e=>(p(),c(r(N),{key:e.id,value:e.id},{default:g(()=>[y(u(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(D),"onUpdate:modelValue":n[4]||=e=>s(D)?D.value=e:null},{default:g(()=>[S(r(P),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.filters.allClientModels`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.filters.allClientModels`)),1)]),_:1}),(p(!0),f(a,null,C(r(M),e=>(p(),c(r(N),{key:e,value:e},{default:g(()=>[y(u(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(O),"onUpdate:modelValue":n[5]||=e=>s(O)?O.value=e:null},{default:g(()=>[S(r(P),{class:`w-32 truncate`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.filters.allBackendModels`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.filters.allBackendModels`)),1)]),_:1}),(p(!0),f(a,null,C(r(de),e=>(p(),c(r(N),{key:e,value:e},{default:g(()=>[y(u(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(k),"onUpdate:modelValue":n[6]||=e=>s(k)?k.value=e:null},{default:g(()=>[S(r(P),{class:`w-32 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.allKeys`)),1)]),_:1}),(p(!0),f(a,null,C(r(ce),e=>(p(),c(r(N),{key:e.id,value:e.id},{default:g(()=>[y(u(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),S(r(I),{modelValue:r(A),"onUpdate:modelValue":n[7]||=e=>s(A)?A.value=e:null},{default:g(()=>[S(r(P),{class:`w-28 truncate h-8 text-xs`},{default:g(()=>[S(r(F),{placeholder:r(m)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),S(r(j),null,{default:g(()=>[S(r(N),{value:`all`},{default:g(()=>[y(u(r(m)(`logs.allStatus`)),1)]),_:1}),S(r(N),{value:`200`},{default:g(()=>[...n[20]||=[y(`200`,-1)]]),_:1}),S(r(N),{value:`non200`},{default:g(()=>[y(u(r(m)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),S(r(be),{flush:``,class:`relative`},{default:g(()=>[r(ct)?(p(),f(`div`,ze,[d(`div`,Be,[S(r(L),{class:`h-8 w-full`}),S(r(L),{class:`h-8 w-full`}),S(r(L),{class:`h-8 w-5/6`})])])):e(``,!0),S(r(_e),{"delay-duration":300},{default:g(()=>[S(r(Se),{class:`[&_td]:px-3 [&_th]:px-3`},{default:g(()=>[S(r(Ce),null,{default:g(()=>[S(r(H),{class:`bg-muted`},{default:g(()=>[S(r(V),{class:`w-10`}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.id`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.time`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.clientModel`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.targetModel`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.latency`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.tags`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.latency`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.error`)),1)]),_:1}),S(r(V),{class:`text-muted-foreground`},{default:g(()=>[y(u(r(m)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),S(r(xe),null,{default:g(()=>[(p(!0),f(a,null,C(r(R),t=>(p(),f(a,{key:t.id},[S(Oe,{log:t,expanded:r(De).has(t.id),"copied-id":$.value,onToggleExpand:r(ot),onOpenDetail:r(st),onCopy:ht},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),r(De).has(t.id)?(p(),f(a,{key:0},[r(J)[t.id]?(p(),c(r(H),{key:0},{default:g(()=>[S(r(B),{colspan:$e,class:`text-center py-2 pl-10`},{default:g(()=>[S(r(L),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):r(ke)[t.id]?.length?(p(!0),f(a,{key:1},C(r(ke)[t.id],e=>(p(),c(Oe,{key:e.id,log:e,"is-child":!0,"copied-id":$.value,onOpenDetail:r(st),onCopy:ht},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):e(``,!0)],64)):e(``,!0)],64))),128)),r(R).length===0&&!r(ct)?(p(),c(r(H),{key:0},{default:g(()=>[S(r(B),{colspan:$e,class:`py-12 text-center`},{default:g(()=>[d(`div`,Ve,[d(`p`,He,u(r(m)(`logs.noLogs`)),1),gt.value?(p(),f(`p`,Ue,u(r(m)(`logs.noLogsFilterHint`)),1)):e(``,!0),gt.value?(p(),c(r(v),{key:1,variant:`ghost`,size:`sm`,onClick:_t},{default:g(()=>[y(u(r(m)(`logs.clearAllFilters`)),1)]),_:1})):e(``,!0)])]),_:1})]),_:1})):e(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),d(`div`,We,[d(`p`,Ge,u(r(m)(`logs.pagination`,{total:r(Te),page:r(U),totalPages:r(W)})),1),d(`div`,Ke,[S(r(v),{variant:`outline`,size:`sm`,onClick:n[8]||=e=>r(Q)(1),disabled:r(U)<=1},{default:g(()=>[y(u(r(m)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),S(r(v),{variant:`outline`,size:`sm`,onClick:n[9]||=e=>r(Q)(r(U)-1),disabled:r(U)<=1},{default:g(()=>[y(u(r(m)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(p(!0),f(a,null,C(lt.value,e=>(p(),f(a,{key:e},[e===`...`?(p(),f(`span`,qe,`...`)):(p(),c(r(v),{key:1,variant:e===r(U)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>r(Q)(e)},{default:g(()=>[y(u(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),S(r(v),{variant:`outline`,size:`sm`,onClick:n[10]||=e=>r(Q)(r(U)+1),disabled:r(U)>=r(W)},{default:g(()=>[y(u(r(m)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),S(r(v),{variant:`outline`,size:`sm`,onClick:n[11]||=e=>r(Q)(r(W)),disabled:r(U)>=r(W)},{default:g(()=>[y(u(r(m)(`logs.lastPage`)),1)]),_:1},8,[`disabled`])])]),d(`div`,Je,[d(`span`,Ye,u(r(m)(`logs.cleanup.autoCleanup`)),1),S(r(z),{type:`number`,modelValue:r(ut),"onUpdate:modelValue":n[12]||=e=>s(ut)?ut.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-16 h-6 text-xs`},null,8,[`modelValue`]),d(`span`,Xe,u(r(m)(`logs.cleanup.days`)),1),S(r(v),{size:`sm`,onClick:r(ft),disabled:r(dt)},{default:g(()=>[y(u(r(m)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])]),S(T,{open:r(Y),"onUpdate:open":n[13]||=e=>s(Y)?Y.value=e:null,source:`history`,"log-entry":r(rt)},null,8,[`open`,`log-entry`]),S(r(re),{open:r(K),"onUpdate:open":n[16]||=e=>s(K)?K.value=e:null},{default:g(()=>[S(r(te),null,{default:g(()=>[S(r(ne),null,{default:g(()=>[S(r(ae),null,{default:g(()=>[y(u(r(m)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),d(`p`,Ze,u(r(m)(`logs.cleanup.description`)),1),d(`div`,Qe,[S(r(oe),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[y(u(r(m)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),S(r(z),{modelValue:r(G),"onUpdate:modelValue":n[14]||=e=>s(G)?G.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),S(r(ie),null,{default:g(()=>[S(r(v),{variant:`outline`,onClick:n[15]||=e=>K.value=!1},{default:g(()=>[y(u(r(m)(`common.cancel`)),1)]),_:1}),S(r(v),{variant:`destructive`,onClick:r(at)},{default:g(()=>[y(u(r(m)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),S(r(he),{open:r(q),"onUpdate:open":n[18]||=e=>s(q)?q.value=e:null},{default:g(()=>[S(r(ve),null,{default:g(()=>[S(r(ge),null,{default:g(()=>[S(r(me),null,{default:g(()=>[y(u(r(m)(`logs.cleanupResult.title`)),1)]),_:1}),S(r(pe),null,{default:g(()=>[y(u(r(m)(`logs.cleanupResult.description`,{count:r(Ee)})),1)]),_:1})]),_:1}),S(r(le),null,{default:g(()=>[S(r(ue),{onClick:n[17]||=e=>q.value=!1},{default:g(()=>[y(u(r(m)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{rt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Et as n,Gt as r,H as i,J as a,L as o,Lt as s,Q as ee,X as c,Xt as l,Z as u,et as d,gt as f,it as p,k as m,kt as h,mt as te,n as g,nt as _,qt as v,rt as y,vt as b}from"./button-DXlWUlLe.js";import{t as ne}from"./arrow-down-C7Be80wb.js";import{t as re}from"./image-8GxBtf66.js";import{t as x}from"./plus-DghQKiGV.js";import{a as ie,n as ae,o as oe,r as se,t as ce}from"./dialog-DN2mvc9h.js";import{t as S}from"./Label-CgLYbqNp.js";import{t as C}from"./Switch-D2xEGYqH.js";import{a as w,ct as le,ot as ue,st as de}from"./index-FYAc4GSw.js";import{t as T}from"./Input-Qz28j7do.js";import{t as E}from"./CascadingModelSelect-vGUnj1X-.js";import{t as fe}from"./useProviderGroups-DYlN-TXY.js";var pe=o(`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=p({__name:`ModelMappings`,setup(o){let{t:p}=i(),F=s([]),I=s([]),L=s(null),R=s(``),z=s(!1),B=s(!1),V=s(!1),H=s(``),U=s(void 0),W=s([]),G=s(null),K=s(null),q=c(()=>fe(I.value)),J=c(()=>{let e=R.value.toLowerCase().trim();return e?F.value.filter(t=>t.client_model.toLowerCase().includes(e)):F.value}),Y=c(()=>F.value.find(e=>e.id===L.value)??null),X=c(()=>!!G.value),Z=c(()=>!!K.value),nt=c(()=>H.value.trim().length>0&&!!U.value?.model),Q=c(()=>I.value[0]?.id??``);function rt(e){let t=D(e.rule,Q.value);return t.parseError&&w.error(p(`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 $(){let e=await Promise.allSettled([m.getMappingGroups(),m.getProviders()]);e[0].status===`fulfilled`&&(F.value=e[0].value),e[1].status===`fulfilled`&&(I.value=e[1].value),!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 m.updateMappingGroup(Y.value.id,{client_model:e,rule:O(W.value,G.value,K.value)}),await $(),w.success(p(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.save:`,e),w.error(t(e,p(`mappings.messages.saveFailed`)))}finally{z.value=!1}}}async function mt(){if(Y.value)try{await m.toggleMappingGroup(Y.value.id),await $()}catch(e){console.error(`ModelMappings.toggle:`,e),w.error(t(e,p(`mappings.messages.toggleFailed`)))}}async function ht(){if(Y.value)try{await m.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(p(`common.deleteSuccess`))}catch(e){console.error(`ModelMappings.delete:`,e),w.error(t(e,p(`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 t=O([{provider_id:U.value.provider_id,backend_model:U.value.model}],null,null),n=await m.createMappingGroup({client_model:e,rule:t});V.value=!1,await $(),L.value=n.id,w.success(p(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.add:`,e),w.error(t(e,p(`mappings.messages.saveFailed`)))}}return te($),(t,n)=>(f(),d(`div`,he,[u(`div`,ge,[u(`h2`,_e,l(r(p)(`mappings.title`)),1),n[9]||=u(`div`,{class:`flex-1`},null,-1),y(r(g),{size:`sm`,class:`h-[30px] gap-1.5`,onClick:gt},{default:h(()=>[y(r(x),{class:`w-3.5 h-3.5`}),_(` `+l(r(p)(`mappings.addGroup`)),1)]),_:1})]),u(`div`,ve,[u(`aside`,ye,[u(`div`,null,[y(r(T),{modelValue:R.value,"onUpdate:modelValue":n[0]||=e=>R.value=e,placeholder:r(p)(`common.search`)+`...`,class:`h-[30px] text-[13px]`},null,8,[`modelValue`,`placeholder`])]),u(`span`,be,l(J.value.length)+` / `+l(F.value.length)+` `+l(r(p)(`mappings.totalMappings`,{count:0}).replace(/\d+.*/,``)),1),u(`div`,k,[(f(!0),d(a,null,b(J.value,e=>(f(),d(`div`,{key:e.id,class:v([`flex items-center gap-2.5 px-3 py-2 bg-card rounded-lg border cursor-pointer transition-colors`,L.value===e.id?`border-primary bg-primary/10`:`border-border hover:bg-muted/30`]),onClick:t=>at(e.id)},[u(`div`,j,[u(`div`,{class:v([`font-mono text-xs font-semibold truncate`,e.is_active?`text-foreground`:`text-muted-foreground`])},l(e.client_model),3),u(`div`,{class:v([`text-[10px] truncate mt-0.5`,e.is_active?`text-muted-foreground/60`:`text-muted-foreground/30`])},l(it(e)),3)]),u(`span`,{class:v([`inline-flex items-center gap-1 px-1.5 py-px rounded-full text-[9px] font-mono font-semibold shrink-0`,e.is_active?`bg-success/12 text-success`:`bg-muted/40 text-muted-foreground/50`])},[u(`span`,{class:v([`w-1 h-1 rounded-full`,e.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),_(` `+l(e.is_active?`ON`:`OFF`),1)],2)],10,A))),128)),J.value.length===0?(f(),d(`div`,M,l(r(p)(`mappings.noGroups`)),1)):e(``,!0)])]),u(`main`,N,[Y.value?(f(),d(a,{key:1},[u(`div`,Se,[u(`span`,Ce,l(Y.value.client_model),1),u(`span`,{class:v([`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`])},[u(`span`,{class:v([`w-1 h-1 rounded-full`,Y.value.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),_(` `+l(Y.value.is_active?`Active`:`Inactive`),1)],2),y(r(C),{"model-value":!!Y.value.is_active,"onUpdate:modelValue":mt},null,8,[`model-value`])]),u(`div`,we,[u(`section`,null,[u(`div`,Te,[y(r(ue),{class:`w-3.5 h-3.5 text-primary/60`}),u(`span`,Ee,l(r(p)(`mappings.editor.failoverChain`)),1),u(`span`,De,l(W.value.length)+` target`+l(W.value.length>1?`s`:``),1)]),u(`div`,Oe,[(f(!0),d(a,null,b(W.value,(t,n)=>(f(),d(`div`,{key:n,class:`flex items-center gap-2 px-3 py-2 bg-background border border-border rounded-md`},[u(`span`,{class:v([`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`])},l(n+1),3),u(`div`,ke,[y(E,{providers:q.value,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:r(p)(`mappings.selectProviderModel`),"onUpdate:modelValue":e=>ct(n,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),W.value.length>1?(f(),ee(r(g),{key:0,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/30 hover:text-destructive`,onClick:e=>st(n)},{default:h(()=>[y(r(de),{class:`w-3 h-3`})]),_:1},8,[`onClick`])):e(``,!0)]))),128))]),y(r(g),{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:h(()=>[y(r(x),{class:`w-3 h-3 mr-1`}),_(` `+l(r(p)(`mappings.addBackup`)),1)]),_:1})]),n[10]||=u(`div`,{class:`border-t border-dashed border-primary/10`},null,-1),u(`section`,null,[u(`div`,Ae,[y(r(ne),{class:`w-3.5 h-3.5 text-primary/50`}),u(`span`,je,l(r(p)(`mappings.editor.contextOverflow`)),1),X.value?(f(),d(`span`,Me,l(r(p)(`mappings.enabled`)),1)):e(``,!0)]),u(`div`,Ne,[u(`div`,Pe,[y(r(C),{"model-value":X.value,"onUpdate:modelValue":lt},null,8,[`model-value`]),u(`span`,Fe,l(r(p)(`mappings.overflowTooltip`)),1)]),X.value?(f(),d(`div`,Ie,[u(`div`,Le,[y(E,{providers:q.value,"model-value":G.value?{provider_id:G.value.provider_id,model:G.value.model}:void 0,compact:``,dashed:``,placeholder:r(p)(`mappings.selectModel`),"onUpdate:modelValue":n[1]||=e=>ut(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(f(),d(`span`,Re,l(r(p)(`mappings.overflowTooltip`)),1))])]),u(`section`,null,[u(`div`,ze,[y(r(re),{class:`w-3.5 h-3.5 text-blue-500/50`}),u(`span`,Be,l(r(p)(`mappings.editor.multimodalFallback`)),1),Z.value?(f(),d(`span`,Ve,l(r(p)(`mappings.enabled`)),1)):e(``,!0)]),u(`div`,He,[u(`div`,Ue,[y(r(C),{"model-value":Z.value,"onUpdate:modelValue":dt},null,8,[`model-value`]),u(`span`,We,l(r(p)(`mappings.multimodalFallback.add`)),1)]),Z.value?(f(),d(`div`,Ge,[u(`div`,Ke,[y(E,{providers:q.value,"model-value":K.value?{provider_id:K.value.provider_id,model:K.value.backend_model}:void 0,compact:``,dashed:``,placeholder:r(p)(`mappings.multimodalFallback.selectProviderModel`),"onUpdate:modelValue":n[2]||=e=>ft(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(f(),d(`span`,qe,l(r(p)(`mappings.multimodalFallback.add`)),1)),Z.value?(f(),d(`div`,Je,[y(r(le),{class:`w-3 h-3 text-warning shrink-0`}),u(`span`,Ye,l(r(p)(`mappings.multimodalFallback.sessionLockWarning`)),1)])):e(``,!0)])])]),u(`div`,Xe,[B.value?(f(),d(`div`,P,[_(l(r(p)(`mappings.confirmDeleteDesc`,{model:Y.value.client_model}))+` `,1),y(r(g),{variant:`destructive`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:ht},{default:h(()=>[_(l(r(p)(`common.yes`)),1)]),_:1}),y(r(g),{variant:`ghost`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:n[3]||=e=>B.value=!1},{default:h(()=>[_(l(r(p)(`common.no`)),1)]),_:1})])):(f(),d(a,{key:1},[u(`span`,Ze,` ID: `+l(Y.value.id),1),u(`div`,Qe,[y(r(g),{variant:`ghost`,size:`sm`,class:`text-xs text-danger hover:text-danger`,onClick:n[4]||=e=>B.value=!0},{default:h(()=>[_(l(r(p)(`common.delete`)),1)]),_:1}),y(r(g),{size:`sm`,class:`text-xs`,disabled:z.value,onClick:pt},{default:h(()=>[_(l(z.value?r(p)(`common.saving`):r(p)(`common.save`)),1)]),_:1},8,[`disabled`])])],64))])],64)):(f(),d(`div`,xe,[y(r(pe),{class:`w-6 h-6 opacity-40`}),_(` `+l(r(p)(`mappings.selectProviderOrModel`)),1)]))])]),y(r(oe),{open:V.value,"onUpdate:open":n[8]||=e=>V.value=!1},{default:h(()=>[y(r(ie),{class:`max-w-md`},{default:h(()=>[y(r(ae),null,{default:h(()=>[y(r(ce),null,{default:h(()=>[_(l(r(p)(`mappings.addGroup`)),1)]),_:1})]),_:1}),u(`div`,$e,[u(`div`,et,[y(r(S),{class:`text-xs text-muted-foreground`},{default:h(()=>[_(l(r(p)(`mappings.clientModel`)),1)]),_:1}),y(r(T),{modelValue:H.value,"onUpdate:modelValue":n[5]||=e=>H.value=e,placeholder:r(p)(`mappings.editor.clientInputPlaceholder`),class:`h-8 font-mono text-xs`},null,8,[`modelValue`,`placeholder`])]),u(`div`,tt,[y(r(S),{class:`text-xs text-muted-foreground`},{default:h(()=>[_(l(r(p)(`mappings.selectProviderModel`)),1)]),_:1}),y(E,{providers:q.value,"model-value":U.value,compact:``,placeholder:r(p)(`mappings.selectProviderModel`),"onUpdate:modelValue":n[6]||=e=>U.value=e},null,8,[`providers`,`model-value`,`placeholder`])])]),y(r(se),null,{default:h(()=>[y(r(g),{variant:`ghost`,size:`sm`,onClick:n[7]||=e=>V.value=!1},{default:h(()=>[_(l(r(p)(`common.cancel`)),1)]),_:1}),y(r(g),{size:`sm`,disabled:!nt.value,onClick:_t},{default:h(()=>[_(l(r(p)(`mappings.addGroup`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{F as default};
|
|
1
|
+
import{$ as e,A as t,Et as n,Gt as r,H as i,J as a,L as o,Lt as s,Q as ee,X as c,Xt as l,Z as u,et as d,gt as f,it as p,k as m,kt as h,mt as te,n as g,nt as _,qt as v,rt as y,vt as b}from"./button-BW3lV6lw.js";import{t as ne}from"./arrow-down-DvUiNydP.js";import{t as re}from"./image-CefgMOpc.js";import{t as x}from"./plus-CorbospU.js";import{a as ie,n as ae,o as oe,r as se,t as ce}from"./dialog-DI8w_067.js";import{t as S}from"./Label-CS89uu8N.js";import{t as C}from"./Switch-BNj81rHC.js";import{a as w,ct as le,ot as ue,st as de}from"./index-CkhT3okn.js";import{t as T}from"./Input-DXSPfwpG.js";import{t as E}from"./CascadingModelSelect-CVnBWxd0.js";import{t as fe}from"./useProviderGroups-C8ZizGfL.js";var pe=o(`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=p({__name:`ModelMappings`,setup(o){let{t:p}=i(),F=s([]),I=s([]),L=s(null),R=s(``),z=s(!1),B=s(!1),V=s(!1),H=s(``),U=s(void 0),W=s([]),G=s(null),K=s(null),q=c(()=>fe(I.value)),J=c(()=>{let e=R.value.toLowerCase().trim();return e?F.value.filter(t=>t.client_model.toLowerCase().includes(e)):F.value}),Y=c(()=>F.value.find(e=>e.id===L.value)??null),X=c(()=>!!G.value),Z=c(()=>!!K.value),nt=c(()=>H.value.trim().length>0&&!!U.value?.model),Q=c(()=>I.value[0]?.id??``);function rt(e){let t=D(e.rule,Q.value);return t.parseError&&w.error(p(`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 $(){let e=await Promise.allSettled([m.getMappingGroups(),m.getProviders()]);e[0].status===`fulfilled`&&(F.value=e[0].value),e[1].status===`fulfilled`&&(I.value=e[1].value),!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 m.updateMappingGroup(Y.value.id,{client_model:e,rule:O(W.value,G.value,K.value)}),await $(),w.success(p(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.save:`,e),w.error(t(e,p(`mappings.messages.saveFailed`)))}finally{z.value=!1}}}async function mt(){if(Y.value)try{await m.toggleMappingGroup(Y.value.id),await $()}catch(e){console.error(`ModelMappings.toggle:`,e),w.error(t(e,p(`mappings.messages.toggleFailed`)))}}async function ht(){if(Y.value)try{await m.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(p(`common.deleteSuccess`))}catch(e){console.error(`ModelMappings.delete:`,e),w.error(t(e,p(`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 t=O([{provider_id:U.value.provider_id,backend_model:U.value.model}],null,null),n=await m.createMappingGroup({client_model:e,rule:t});V.value=!1,await $(),L.value=n.id,w.success(p(`common.saveSuccess`))}catch(e){console.error(`ModelMappings.add:`,e),w.error(t(e,p(`mappings.messages.saveFailed`)))}}return te($),(t,n)=>(f(),d(`div`,he,[u(`div`,ge,[u(`h2`,_e,l(r(p)(`mappings.title`)),1),n[9]||=u(`div`,{class:`flex-1`},null,-1),y(r(g),{size:`sm`,class:`h-[30px] gap-1.5`,onClick:gt},{default:h(()=>[y(r(x),{class:`w-3.5 h-3.5`}),_(` `+l(r(p)(`mappings.addGroup`)),1)]),_:1})]),u(`div`,ve,[u(`aside`,ye,[u(`div`,null,[y(r(T),{modelValue:R.value,"onUpdate:modelValue":n[0]||=e=>R.value=e,placeholder:r(p)(`common.search`)+`...`,class:`h-[30px] text-[13px]`},null,8,[`modelValue`,`placeholder`])]),u(`span`,be,l(J.value.length)+` / `+l(F.value.length)+` `+l(r(p)(`mappings.totalMappings`,{count:0}).replace(/\d+.*/,``)),1),u(`div`,k,[(f(!0),d(a,null,b(J.value,e=>(f(),d(`div`,{key:e.id,class:v([`flex items-center gap-2.5 px-3 py-2 bg-card rounded-lg border cursor-pointer transition-colors`,L.value===e.id?`border-primary bg-primary/10`:`border-border hover:bg-muted/30`]),onClick:t=>at(e.id)},[u(`div`,j,[u(`div`,{class:v([`font-mono text-xs font-semibold truncate`,e.is_active?`text-foreground`:`text-muted-foreground`])},l(e.client_model),3),u(`div`,{class:v([`text-[10px] truncate mt-0.5`,e.is_active?`text-muted-foreground/60`:`text-muted-foreground/30`])},l(it(e)),3)]),u(`span`,{class:v([`inline-flex items-center gap-1 px-1.5 py-px rounded-full text-[9px] font-mono font-semibold shrink-0`,e.is_active?`bg-success/12 text-success`:`bg-muted/40 text-muted-foreground/50`])},[u(`span`,{class:v([`w-1 h-1 rounded-full`,e.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),_(` `+l(e.is_active?`ON`:`OFF`),1)],2)],10,A))),128)),J.value.length===0?(f(),d(`div`,M,l(r(p)(`mappings.noGroups`)),1)):e(``,!0)])]),u(`main`,N,[Y.value?(f(),d(a,{key:1},[u(`div`,Se,[u(`span`,Ce,l(Y.value.client_model),1),u(`span`,{class:v([`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`])},[u(`span`,{class:v([`w-1 h-1 rounded-full`,Y.value.is_active?`bg-success`:`bg-muted-foreground/40`])},null,2),_(` `+l(Y.value.is_active?`Active`:`Inactive`),1)],2),y(r(C),{"model-value":!!Y.value.is_active,"onUpdate:modelValue":mt},null,8,[`model-value`])]),u(`div`,we,[u(`section`,null,[u(`div`,Te,[y(r(ue),{class:`w-3.5 h-3.5 text-primary/60`}),u(`span`,Ee,l(r(p)(`mappings.editor.failoverChain`)),1),u(`span`,De,l(W.value.length)+` target`+l(W.value.length>1?`s`:``),1)]),u(`div`,Oe,[(f(!0),d(a,null,b(W.value,(t,n)=>(f(),d(`div`,{key:n,class:`flex items-center gap-2 px-3 py-2 bg-background border border-border rounded-md`},[u(`span`,{class:v([`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`])},l(n+1),3),u(`div`,ke,[y(E,{providers:q.value,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:r(p)(`mappings.selectProviderModel`),"onUpdate:modelValue":e=>ct(n,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),W.value.length>1?(f(),ee(r(g),{key:0,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/30 hover:text-destructive`,onClick:e=>st(n)},{default:h(()=>[y(r(de),{class:`w-3 h-3`})]),_:1},8,[`onClick`])):e(``,!0)]))),128))]),y(r(g),{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:h(()=>[y(r(x),{class:`w-3 h-3 mr-1`}),_(` `+l(r(p)(`mappings.addBackup`)),1)]),_:1})]),n[10]||=u(`div`,{class:`border-t border-dashed border-primary/10`},null,-1),u(`section`,null,[u(`div`,Ae,[y(r(ne),{class:`w-3.5 h-3.5 text-primary/50`}),u(`span`,je,l(r(p)(`mappings.editor.contextOverflow`)),1),X.value?(f(),d(`span`,Me,l(r(p)(`mappings.enabled`)),1)):e(``,!0)]),u(`div`,Ne,[u(`div`,Pe,[y(r(C),{"model-value":X.value,"onUpdate:modelValue":lt},null,8,[`model-value`]),u(`span`,Fe,l(r(p)(`mappings.overflowTooltip`)),1)]),X.value?(f(),d(`div`,Ie,[u(`div`,Le,[y(E,{providers:q.value,"model-value":G.value?{provider_id:G.value.provider_id,model:G.value.model}:void 0,compact:``,dashed:``,placeholder:r(p)(`mappings.selectModel`),"onUpdate:modelValue":n[1]||=e=>ut(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(f(),d(`span`,Re,l(r(p)(`mappings.overflowTooltip`)),1))])]),u(`section`,null,[u(`div`,ze,[y(r(re),{class:`w-3.5 h-3.5 text-blue-500/50`}),u(`span`,Be,l(r(p)(`mappings.editor.multimodalFallback`)),1),Z.value?(f(),d(`span`,Ve,l(r(p)(`mappings.enabled`)),1)):e(``,!0)]),u(`div`,He,[u(`div`,Ue,[y(r(C),{"model-value":Z.value,"onUpdate:modelValue":dt},null,8,[`model-value`]),u(`span`,We,l(r(p)(`mappings.multimodalFallback.add`)),1)]),Z.value?(f(),d(`div`,Ge,[u(`div`,Ke,[y(E,{providers:q.value,"model-value":K.value?{provider_id:K.value.provider_id,model:K.value.backend_model}:void 0,compact:``,dashed:``,placeholder:r(p)(`mappings.multimodalFallback.selectProviderModel`),"onUpdate:modelValue":n[2]||=e=>ft(e)},null,8,[`providers`,`model-value`,`placeholder`])])])):(f(),d(`span`,qe,l(r(p)(`mappings.multimodalFallback.add`)),1)),Z.value?(f(),d(`div`,Je,[y(r(le),{class:`w-3 h-3 text-warning shrink-0`}),u(`span`,Ye,l(r(p)(`mappings.multimodalFallback.sessionLockWarning`)),1)])):e(``,!0)])])]),u(`div`,Xe,[B.value?(f(),d(`div`,P,[_(l(r(p)(`mappings.confirmDeleteDesc`,{model:Y.value.client_model}))+` `,1),y(r(g),{variant:`destructive`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:ht},{default:h(()=>[_(l(r(p)(`common.yes`)),1)]),_:1}),y(r(g),{variant:`ghost`,size:`sm`,class:`h-6 text-[11px] px-2`,onClick:n[3]||=e=>B.value=!1},{default:h(()=>[_(l(r(p)(`common.no`)),1)]),_:1})])):(f(),d(a,{key:1},[u(`span`,Ze,` ID: `+l(Y.value.id),1),u(`div`,Qe,[y(r(g),{variant:`ghost`,size:`sm`,class:`text-xs text-danger hover:text-danger`,onClick:n[4]||=e=>B.value=!0},{default:h(()=>[_(l(r(p)(`common.delete`)),1)]),_:1}),y(r(g),{size:`sm`,class:`text-xs`,disabled:z.value,onClick:pt},{default:h(()=>[_(l(z.value?r(p)(`common.saving`):r(p)(`common.save`)),1)]),_:1},8,[`disabled`])])],64))])],64)):(f(),d(`div`,xe,[y(r(pe),{class:`w-6 h-6 opacity-40`}),_(` `+l(r(p)(`mappings.selectProviderOrModel`)),1)]))])]),y(r(oe),{open:V.value,"onUpdate:open":n[8]||=e=>V.value=!1},{default:h(()=>[y(r(ie),{class:`max-w-md`},{default:h(()=>[y(r(ae),null,{default:h(()=>[y(r(ce),null,{default:h(()=>[_(l(r(p)(`mappings.addGroup`)),1)]),_:1})]),_:1}),u(`div`,$e,[u(`div`,et,[y(r(S),{class:`text-xs text-muted-foreground`},{default:h(()=>[_(l(r(p)(`mappings.clientModel`)),1)]),_:1}),y(r(T),{modelValue:H.value,"onUpdate:modelValue":n[5]||=e=>H.value=e,placeholder:r(p)(`mappings.editor.clientInputPlaceholder`),class:`h-8 font-mono text-xs`},null,8,[`modelValue`,`placeholder`])]),u(`div`,tt,[y(r(S),{class:`text-xs text-muted-foreground`},{default:h(()=>[_(l(r(p)(`mappings.selectProviderModel`)),1)]),_:1}),y(E,{providers:q.value,"model-value":U.value,compact:``,placeholder:r(p)(`mappings.selectProviderModel`),"onUpdate:modelValue":n[6]||=e=>U.value=e},null,8,[`providers`,`model-value`,`placeholder`])])]),y(r(se),null,{default:h(()=>[y(r(g),{variant:`ghost`,size:`sm`,onClick:n[7]||=e=>V.value=!1},{default:h(()=>[_(l(r(p)(`common.cancel`)),1)]),_:1}),y(r(g),{size:`sm`,disabled:!nt.value,onClick:_t},{default:h(()=>[_(l(r(p)(`mappings.addGroup`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{F as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Et as n,Gt as r,H as i,J as a,Lt as o,Nt as s,Q as c,Wt as l,X as u,Xt as d,Yt as f,Z as p,et as m,gt as h,ht as g,it as _,k as v,kt as y,mt as ee,n as b,nt as x,q as S,qt as C,rt as w,vt as T,zt as E}from"./button-DXlWUlLe.js";import{n as D,t as O}from"./UnifiedRequestDialog-Cm6Ao45M.js";import{n as te,t as k}from"./useClipboard-D_fR9Erj.js";import{n as ne,r as re,t as A}from"./TooltipTrigger-8hiSB2Rk.js";import{n as ie,t as ae}from"./CollapsibleContent-DDzm_Bxn.js";import{t as oe}from"./CollapsibleTrigger-CWUxEdhm.js";import{_t as j,a as se,c as ce,d as le,f as ue,gt as de,ht as fe,l as pe,o as me,p as he,s as ge,st as _e,u as ve}from"./index-FYAc4GSw.js";import{t as ye}from"./badge-C82CIl1p.js";import{a as be,i as M,n as N,o as xe,r as P,t as Se}from"./TableHeader-CHaThXAU.js";function F(e){return e.adaptiveLimit??e.maxConcurrency}function I(e,t){let n=t>0?e/t:0;return n>=.8?`bg-danger`:n>=.5?`bg-warning`:`bg-primary`}function L(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`},R={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%)`}},z={class:`text-[32px] font-bold text-primary font-mono leading-none`},we={class:`flex flex-col gap-0.5`},Te={class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`},B={class:`font-mono text-[11px] text-muted-foreground`},Ee={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`},De={class:`flex-1 px-4 py-2.5 flex flex-col gap-1 justify-center`},Oe={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-0.5`},ke={key:0,class:`text-[11px] text-muted-foreground py-1`},Ae=[`title`],V={class:`flex-1 h-1 bg-foreground/[0.06] rounded-sm overflow-hidden`},je=_({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{},queuedCount:{},concurrency:{}},setup(t){let{t:n}=i();return(i,o)=>(h(),m(`div`,Ce,[p(`div`,R,[p(`span`,z,d(t.activeCount),1),p(`div`,we,[p(`span`,Te,d(r(n)(`monitor.header.activeRequests`)),1),p(`span`,B,d(r(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),t.queuedCount>0?(h(),m(`span`,Ee,d(t.queuedCount)+` `+d(r(n)(`monitor.queued`)),1)):e(``,!0)]),p(`div`,De,[p(`span`,Oe,d(r(n)(`monitor.concurrency`)),1),t.concurrency.length===0?(h(),m(`div`,ke,d(r(n)(`monitor.concurrencyPanel.noData`)),1)):e(``,!0),(h(!0),m(a,null,T(t.concurrency,t=>(h(),m(`div`,{key:t.providerId,class:`flex items-center gap-1.5`},[p(`span`,{class:`text-[11px] font-medium text-muted-foreground w-[130px] shrink-0 truncate`,title:t.providerName},d(t.providerName),9,Ae),p(`div`,V,[r(F)(t)>0?(h(),m(`div`,{key:0,class:C([`h-full rounded-sm transition-all duration-300`,r(I)(t.active,r(F)(t))]),style:f({width:`${Math.min(100,t.active/r(F)(t)*100)}%`})},null,6)):e(``,!0)]),p(`span`,{class:C([`font-mono text-[11px] text-muted-foreground w-10 text-right shrink-0`,r(L)(t.active,r(F)(t))])},[t.adaptiveEnabled?(h(),m(a,{key:0},[x(d(t.active)+`/`+d(t.adaptiveLimit??t.maxConcurrency),1)],64)):t.maxConcurrency===0?(h(),m(a,{key:1},[x(d(r(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(h(),m(a,{key:2},[x(d(t.active)+`/`+d(t.maxConcurrency),1)],64))],2)]))),128))])]))}}),Me={key:0,class:`text-[13px] text-muted-foreground py-2`},Ne={key:1},Pe={class:`flex items-center justify-between py-[3px]`},Fe={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=_({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let{t}=i(),n=e,a=u(()=>!n.runtime||n.runtime.memoryUsage.heapTotal===0?0:Math.min(J,n.runtime.memoryUsage.heapUsed/n.runtime.memoryUsage.heapTotal*J));return(n,i)=>e.runtime?(h(),m(`div`,Ne,[p(`div`,Pe,[p(`span`,Fe,d(r(t)(`monitor.runtimePanel.memoryRss`)),1),p(`span`,Ie,d(r(j)(e.runtime.memoryUsage.rss)),1)]),p(`div`,H,[p(`span`,Le,d(r(t)(`monitor.runtimePanel.eventLoopDelay`)),1),p(`span`,Re,d(e.runtime.eventLoopDelayMs.toFixed(1))+`ms`,1)]),p(`div`,U,[p(`span`,ze,d(r(t)(`monitor.runtimePanel.activeHandles`)),1),p(`span`,W,d(e.runtime.activeHandles),1)]),p(`div`,G,[p(`div`,K,[p(`span`,Be,d(r(t)(`monitor.runtimePanel.heapUsage`)),1),p(`span`,Ve,d(r(j)(e.runtime.memoryUsage.heapUsed))+` / `+d(r(j)(e.runtime.memoryUsage.heapTotal)),1)]),p(`div`,q,[p(`div`,{class:`h-full bg-primary rounded-sm transition-all duration-300`,style:f({width:`${a.value}%`})},null,4)])])])):(h(),m(`div`,Me,d(r(t)(`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=_({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let{t}=i(),n=e,o=u(()=>Object.values(n.byStatusCode).reduce((e,t)=>e+t,0)),s=u(()=>{let e=n.byStatusCode,t=o.value||1,r=c(e,200,299),i=c(e,400,499)-(e[429]||0),a=e[429]||0,s=c(e,500,599);return[{label:`2xx`,count:r,percent:(r/t*100).toFixed(1),textClass:`text-success`,dotClass:`bg-success`},{label:`4xx`,count:i,percent:(i/t*100).toFixed(1),textClass:`text-warning`,dotClass:`bg-warning`},{label:`429`,count:a,percent:(a/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 c(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(e,n)=>o.value===0?(h(),m(`div`,Ue,d(r(t)(`monitor.statusCodes.noData`)),1)):(h(),m(`div`,We,[(h(!0),m(a,null,T(s.value,e=>(h(),m(`div`,{key:e.label,class:`flex items-center gap-1.5 py-[3px] border-t border-foreground/[0.04] first:border-t-0`},[p(`span`,{class:C([`size-[5px] rounded-full shrink-0`,e.dotClass])},null,2),p(`span`,Ge,d(e.label),1),p(`span`,{class:C([`font-mono text-[11px]`,e.textClass])},d(e.count),3),p(`span`,Ke,d(e.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=_({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=i(),o=t,s=u(()=>o.stats?Object.entries(o.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(i,o)=>t.stats?s.value.length===0?(h(),m(`div`,Y,d(r(n)(`monitor.providerTable.noProviders`)),1)):(h(),c(r(xe),{key:2},{default:y(()=>[w(r(Se),null,{default:y(()=>[w(r(P),{class:`border-b-0`},{default:y(()=>[w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.provider`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.requests`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.successRate`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),w(r(be),null,{default:y(()=>[(h(!0),m(a,null,T(s.value,t=>(h(),c(r(P),{key:t.id,class:`border-b-0 hover:bg-muted/50`},{default:y(()=>[w(r(M),{class:`font-medium text-[13px] py-1`},{default:y(()=>[x(d(t.name),1)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[x(d(t.stats.totalRequests),1)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[p(`span`,{class:C(t.successRate>=95?`text-success`:t.successRate>=80?`text-warning`:`text-danger`)},d(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[x(d(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[p(`span`,{class:C(t.retryRate>10?`text-warning`:``)},d(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),w(r(M),{class:`py-1`},{default:y(()=>[p(`div`,Ye,[(h(!0),m(a,null,T(t.stats.topErrors.slice(0,3),e=>(h(),c(r(ye),{key:e.code,variant:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:y(()=>[x(d(e.code)+` (`+d(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(h(),m(`span`,Xe,`--`)):e(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(h(),m(`div`,Je,d(r(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 g(()=>{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),l(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))}l(t.activeRequests);break}case`runtime_update`:t.runtime.value=n;break}}async function rt(e,t,n,r,i){try{let[a,o,s,c,l]=await Promise.allSettled([v.getMonitorActive(),v.getMonitorRecent(),v.getMonitorStats(),v.getMonitorConcurrency(),v.getMonitorRuntime()]);a.status===`fulfilled`&&(e.value=a.value),o.status===`fulfilled`&&(t.value=o.value),s.status===`fulfilled`&&(n.value=s.value),c.status===`fulfilled`&&(r.value=c.value),l.status===`fulfilled`&&(i.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,r.value=[],i.value=null}}function it(){let e=E([]),t=o([]),r=o(null),i=o([]),a=o(null),s=o(!1),c=!1,l=u(()=>e.value.filter(e=>e.isStream).length),d=u(()=>e.value.filter(e=>!e.queued)),f=u(()=>e.value.filter(e=>e.queued===!0)),p=n=>nt(n,{recentCompleted:t,activeRequests:e,concurrency:i,stats:r,runtime:a});async function m(){if(s.value=!0,!c){c=!0;return}await et(e,()=>v.getMonitorActive())}function h(){s.value=!1}let _=()=>rt(e,t,r,i,a),{connect:y,disconnect:ee}=X(`/admin/api/monitor/stream`,{request_start:p,request_update:p,request_complete:p,concurrency_update:p,stats_update:p,runtime_update:p,stream_content_update:p},{onOpen:m,onClose:h}),b=o(null),x=o(!1),S=o(0);async function C(n){let r=++S.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){b.value=null;return}b.value=null,x.value=!0;try{if(i.status===`pending`){try{let e=await v.getMonitorRequest(n);if(r!==S.value)return;b.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==Q)throw e;if(r!==S.value)return;let t=await v.getLogDetail(n);if(r!==S.value)return;b.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await v.getLogDetail(n);if(r!==S.value)return;let t;if(!i.isStream){let n=e.upstream_response;if(n)try{let e=JSON.parse(n);t=(typeof e.body==`string`?e.body:n)??void 0}catch{t=n}}b.value={responseBody:t,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(r!==S.value)return;console.warn(`Failed to load log detail:`,e),b.value=null}finally{r===S.value&&(x.value=!1)}}let w=o(null),T=o(!1),D=o(null),O=null;function te(t){if(k(),!t)return;let n=async()=>{let n=e.value.find(e=>e.id===t);if(!n||n.status===`completed`||n.status===`failed`){k();return}try{let e=await v.getMonitorRequest(t);if(w.value!==t)return;e.streamContent&&(D.value=e.streamContent)}catch(e){e?.response?.status===Q&&k()}};n(),O=setInterval(n,$)}function k(){O&&=(clearInterval(O),null)}function ne(e){w.value=e,T.value=!0,D.value=null;let n=t.value.find(t=>t.id===e);n&&(n.status===`completed`||n.status===`failed`)&&(n.streamContent?D.value=n.streamContent:re(e)),te(e),C(e)}async function re(e){try{let t=await v.getMonitorRequest(e);if(w.value!==e)return;t.streamContent&&(D.value=t.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let A=u(()=>w.value?e.value.find(e=>e.id===w.value)??t.value.find(e=>e.id===w.value)??null:null);return n(()=>A.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(k(),C(w.value))}),g(()=>{k()}),{activeRequests:e,recentCompleted:t,stats:r,concurrency:i,runtime:a,connected:s,streamCount:l,streamingRequests:d,queuedRequests:f,selectedRequestId:w,selectedRequest:A,requestDetailOpen:T,selectRequest:ne,selectedStreamContent:D,logDetailData:b,nonStreamBodyLoading:x,connect:y,disconnect:ee,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=_({__name:`Monitor`,setup(n){let{t:l}=i(),{activeRequests:_,recentCompleted:E,stats:j,concurrency:F,runtime:I,connected:L,streamCount:Ce,streamingRequests:R,queuedRequests:z,selectedRequestId:we,selectedRequest:Te,requestDetailOpen:B,selectRequest:Ee,selectedStreamContent:De,logDetailData:Oe,loadInitialData:ke,connect:Ae}=it(),V=o(`active`),Me=u(()=>[{key:`active`,label:l(`monitor.activeRequests`),count:R.value.length},{key:`queued`,label:l(`monitor.queuedRequests`),count:z.value.length},{key:`recent`,label:l(`monitor.completed`),count:E.value.length}]),Ne={active:()=>R.value,queued:()=>z.value,recent:()=>E.value},Pe={active:l(`monitor.noActiveRequests`),queued:l(`monitor.noQueuedRequests`),recent:l(`monitor.noCompletedRequests`)},Fe=u(()=>Ne[V.value]()),Ie=u(()=>Pe[V.value]),H=o(null);function Le(e){H.value=H.value===e?null:e}let{copy:Re}=k(),U=o(null);function ze(e){Re(e),U.value=e,setTimeout(()=>{U.value===e&&(U.value=null)},ln)}let W=o(!1),G=o(null),K=u(()=>G.value?_.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 v.killMonitorRequest(G.value),_.value=_.value.filter(e=>e.id!==G.value),se.success(l(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),se.error(t(e,l(`monitor.killFailed`)))}W.value=!1}}let q=o(!0),J=u(()=>!j.value||j.value.totalRequests===0?`0.0`:(j.value.errorCount/j.value.totalRequests*dn).toFixed(1)),Ue=u(()=>{let e=Number.parseFloat(J.value);return e>=pn?`text-danger`:e>=fn?`text-warning`:`text-foreground`}),We=u(()=>!j.value||j.value.totalRequests===0?`0.0`:(j.value.retryCount/j.value.totalRequests*dn).toFixed(1)),Ge=u(()=>j.value?j.value.p50LatencyMs.toFixed(0):`--`),Ke=u(()=>j.value?j.value.p99LatencyMs.toFixed(0):`--`),Je=u(()=>{if(!j.value||!I.value||I.value.uptimeMs===0)return`--`;let e=I.value.uptimeMs/un;return(j.value.totalRequests/e).toFixed(1)}),Y=u(()=>{let e=F.value.reduce((e,t)=>e+t.active,0),t=F.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=u(()=>{let e=Y.value.pct;return e>=hn?`bg-danger`:e>=gn?`bg-warning`:`bg-primary`}),Xe=u(()=>I.value?$e(I.value.uptimeMs):`--`),Ze=u(()=>!I.value||!j.value?`--`:`${j.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=o(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 ke(),Ae(),Q(),document.addEventListener(`visibilitychange`,et)}),g(()=>{$(),document.removeEventListener(`visibilitychange`,et)}),(t,n)=>(h(),m(`div`,at,[p(`div`,ot,[p(`h2`,st,d(r(l)(`monitor.title`)),1),w(r(ye),{variant:r(L)?`default`:`destructive`},{default:y(()=>[x(d(r(L)?r(l)(`monitor.connected`):r(l)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])]),w(je,{stats:r(j),"active-count":r(_).length,"stream-count":r(Ce),"queued-count":r(z).length,concurrency:r(F)},null,8,[`stats`,`active-count`,`stream-count`,`queued-count`,`concurrency`]),p(`div`,ct,[p(`div`,lt,[(h(!0),m(a,null,T(Me.value,t=>(h(),c(r(b),{key:t.key,variant:`ghost`,class:C([`relative px-3.5 py-2 text-[13px] font-medium transition-colors flex items-center gap-2 h-auto rounded-none`,V.value===t.key?`text-primary`:`text-muted-foreground hover:text-foreground`]),onClick:e=>V.value=t.key},{default:y(()=>[x(d(t.label)+` `,1),p(`span`,{class:C([`font-mono text-[11px] font-semibold px-1.5 py-px rounded-full`,V.value===t.key?`bg-primary/15 text-primary`:`bg-foreground/5 text-muted-foreground`])},d(t.count),3),V.value===t.key?(h(),m(`span`,ut)):e(``,!0)]),_:2},1032,[`class`,`onClick`]))),128))]),w(r(D),{class:`h-[252px]`},{default:y(()=>[w(r(xe),null,{default:y(()=>[w(r(Se),null,{default:y(()=>[w(r(P),{class:`border-b-0 hover:bg-transparent`},{default:y(()=>[w(r(N),{class:`w-9 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:y(()=>[...n[4]||=[x(`Model`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:y(()=>[...n[5]||=[x(`Provider`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-16`},{default:y(()=>[...n[6]||=[x(`Type`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:y(()=>[...n[7]||=[x(`Elapsed`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:y(()=>[...n[8]||=[x(`Speed`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:y(()=>[...n[9]||=[x(`Output`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-14`})]),_:1})]),_:1}),w(r(be),null,{default:y(()=>[Fe.value.length===0?(h(),c(r(P),{key:0,class:`border-b-0 h-[220px]`},{default:y(()=>[w(r(M),{colspan:`8`,class:`text-center text-[13px] text-muted-foreground align-middle`},{default:y(()=>[x(d(Ie.value),1)]),_:1})]),_:1})):e(``,!0),(h(!0),m(a,null,T(Fe.value,t=>(h(),m(a,{key:t.id},[w(r(P),{class:C([`cursor-pointer transition-colors border-b border-foreground/[0.04] hover:bg-muted/40`,[r(we)===t.id?`bg-primary/10`:``,V.value===`recent`?`opacity-60 hover:opacity-80`:``]]),onClick:e=>r(Ee)(t.id)},{default:y(()=>[w(r(M),{class:`px-3 py-1`},{default:y(()=>[p(`span`,{class:C([`inline-block size-2 rounded-full shrink-0`,xn(t)])},null,2)]),_:2},1024),w(r(M),{class:`px-3 py-1 text-[13px] font-medium truncate max-w-[200px]`},{default:y(()=>[x(d(t.model),1)]),_:2},1024),w(r(M),{class:`px-3 py-1 font-mono text-[11px] text-muted-foreground`},{default:y(()=>[x(d(t.providerName),1)]),_:2},1024),w(r(M),{class:`px-3 py-1`},{default:y(()=>[t.isStream?(h(),m(`span`,dt,` SSE `)):(h(),m(`span`,ft,` Sync `))]),_:2},1024),w(r(M),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:y(()=>[x(d(tt(t)),1)]),_:2},1024),w(r(M),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:y(()=>[x(d(nt(t)),1)]),_:2},1024),w(r(M),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:y(()=>[x(d(rt(t)),1)]),_:2},1024),w(r(M),{class:`px-3 py-1`},{default:y(()=>[p(`div`,{class:`flex items-center gap-0.5 justify-end`,onClick:n[0]||=S(()=>{},[`stop`])},[w(r(re),null,{default:y(()=>[w(r(A),{"as-child":``},{default:y(()=>[w(r(b),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:S(e=>ze(t.id),[`stop`])},{default:y(()=>[U.value===t.id?(h(),c(r(de),{key:0,class:`size-3 text-success`})):(h(),c(r(te),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),w(r(ne),null,{default:y(()=>[x(d(r(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),Sn(t)?(h(),c(r(re),{key:0},{default:y(()=>[w(r(A),{"as-child":``},{default:y(()=>[w(r(b),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6 text-destructive hover:text-destructive`,onClick:S(e=>Be(t.id),[`stop`])},{default:y(()=>[w(r(_e),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),w(r(ne),null,{default:y(()=>[x(d(r(l)(`monitor.kill`)),1)]),_:1})]),_:2},1024)):e(``,!0),w(r(b),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:S(e=>Le(t.id),[`stop`])},{default:y(()=>[w(r(fe),{class:C([`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?(h(),c(r(P),{key:0,class:`border-b border-foreground/[0.04] bg-foreground/[0.02]`},{default:y(()=>[w(r(M),{colspan:`8`,class:`px-3 py-2`},{default:y(()=>[p(`div`,pt,[p(`div`,null,[n[10]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Request ID `,-1),p(`div`,mt,d(t.id),1)]),p(`div`,null,[n[11]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Input Tokens `,-1),p(`div`,ht,d(t.streamMetrics?.inputTokens?.toLocaleString()??`--`),1)]),p(`div`,null,[n[12]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Output Tokens `,-1),p(`div`,gt,d(t.streamMetrics?.outputTokens?.toLocaleString()??`--`),1)]),p(`div`,null,[n[13]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Cache Tokens `,-1),p(`div`,_t,d(t.streamMetrics?.cacheReadTokens?.toLocaleString()??`--`),1)])])]),_:2},1024)]),_:2},1024)):e(``,!0)],64))),128))]),_:1})]),_:1})]),_:1})]),p(`div`,vt,[p(`div`,yt,[p(`div`,bt,d(r(l)(`monitor.completed`)),1),p(`div`,xt,d(r(j)?.successCount??0),1),n[14]||=p(`div`,{class:`text-[10px] font-mono text-muted-foreground`},`last 5h`,-1)]),p(`div`,St,[p(`div`,Ct,d(r(l)(`monitor.header.errorRate`)),1),p(`div`,{class:C([`text-[13px] font-mono font-semibold`,Ue.value])},d(J.value)+`% `,3),p(`div`,wt,d(r(j)?.errorCount??0)+` / `+d(r(j)?.totalRequests??0),1)]),p(`div`,Tt,[p(`div`,Et,d(r(l)(`monitor.header.p50Latency`)),1),p(`div`,Dt,d(Ge.value)+`ms `,1),p(`div`,Ot,` avg `+d(r(j)?.avgLatencyMs?.toFixed(1)??`--`)+`s `,1)]),p(`div`,kt,[p(`div`,At,d(r(l)(`monitor.header.retryRate`)),1),p(`div`,jt,d(We.value)+`% `,1),p(`div`,Mt,d(r(j)?.retryCount??0)+` / `+d(r(j)?.totalRequests??0),1)]),p(`div`,Nt,[p(`div`,Pt,d(r(l)(`monitor.runtimePanel.uptime`)),1),p(`div`,Ft,d(Xe.value),1),p(`div`,It,d(Ze.value),1)])]),p(`div`,Lt,[w(r(ie),{open:q.value,"onUpdate:open":n[1]||=e=>q.value=e},{default:y(()=>[p(`div`,Rt,[p(`span`,zt,d(r(l)(`monitor.providerStats`)),1),w(r(oe),{"as-child":``},{default:y(()=>[w(r(b),{variant:`ghost`,size:`xs`,class:`text-[11px] text-muted-foreground hover:text-foreground h-6 px-1.5`},{default:y(()=>[x(d(q.value?r(l)(`monitor.providerStatsHide`):r(l)(`monitor.providerStatsShow`)),1)]),_:1})]),_:1})]),w(r(ae),null,{default:y(()=>[p(`div`,Bt,[w(Qe,{stats:r(j)},null,8,[`stats`])])]),_:1})]),_:1},8,[`open`])]),p(`div`,Vt,[p(`div`,Ht,[p(`div`,Ut,[p(`span`,Wt,d(r(l)(`monitor.statusCodeDistribution`)),1)]),p(`div`,Gt,[w(qe,{"by-status-code":r(j)?.byStatusCode??{}},null,8,[`by-status-code`])])]),p(`div`,Kt,[p(`div`,qt,[p(`span`,Jt,d(r(l)(`monitor.runtime`)),1)]),p(`div`,Yt,[w(He,{runtime:r(I)},null,8,[`runtime`])])]),p(`div`,Xt,[p(`div`,Zt,[p(`span`,Qt,d(r(l)(`monitor.concurrency`)),1)]),p(`div`,$t,[p(`div`,en,[p(`span`,tn,d(Y.value.active),1),p(`span`,nn,`/ `+d(Y.value.total),1),p(`span`,rn,d(Y.value.pct)+`%`,1)]),p(`div`,an,[p(`div`,{class:C([`h-full rounded-full transition-all duration-300`,Ye.value]),style:f({width:`${Math.min(100,Y.value.pct)}%`})},null,6)]),p(`div`,on,[p(`div`,null,[n[15]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` P99 `,-1),p(`div`,sn,d(Ke.value)+`ms `,1)]),p(`div`,null,[n[16]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` QPS `,-1),p(`div`,cn,d(Je.value),1)])])])])]),w(O,{open:r(B),"onUpdate:open":n[2]||=e=>s(B)?B.value=e:null,source:`realtime`,request:r(Te),"stream-content":r(De),"log-detail-data":r(Oe)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),w(r(he),{open:W.value,"onUpdate:open":n[3]||=e=>W.value=e},{default:y(()=>[w(r(ve),null,{default:y(()=>[w(r(ge),null,{default:y(()=>[w(r(me),null,{default:y(()=>[x(d(r(l)(`monitor.killConfirmTitle`)),1)]),_:1}),K.value?(h(),c(r(pe),{key:0},{default:y(()=>[x(d(r(l)(`monitor.killConfirm`,{model:K.value.model,provider:K.value.providerName})),1)]),_:1})):e(``,!0)]),_:1}),w(r(ce),null,{default:y(()=>[w(r(le),null,{default:y(()=>[x(d(r(l)(`monitor.killCancel`)),1)]),_:1}),w(r(ue),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:Ve},{default:y(()=>[x(d(r(l)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{xn as default};
|
|
1
|
+
import{$ as e,A as t,Et as n,Gt as r,H as i,J as a,Lt as o,Nt as s,Q as c,Wt as l,X as u,Xt as d,Yt as f,Z as p,et as m,gt as h,ht as g,it as _,k as v,kt as y,mt as ee,n as b,nt as x,q as S,qt as C,rt as w,vt as T,zt as E}from"./button-BW3lV6lw.js";import{n as D,t as O}from"./UnifiedRequestDialog-Uq9NY1XD.js";import{n as te,t as k}from"./useClipboard-Du9vZK8q.js";import{n as ne,r as re,t as A}from"./TooltipTrigger-ctVYouBP.js";import{n as ie,t as ae}from"./CollapsibleContent-D0WBasYY.js";import{t as oe}from"./CollapsibleTrigger-DXlDbowG.js";import{_t as j,a as se,c as ce,d as le,f as ue,gt as de,ht as fe,l as pe,o as me,p as he,s as ge,st as _e,u as ve}from"./index-CkhT3okn.js";import{t as ye}from"./badge-BrOplN8n.js";import{a as be,i as M,n as N,o as xe,r as P,t as Se}from"./TableHeader-D9Qt4Aoe.js";function F(e){return e.adaptiveLimit??e.maxConcurrency}function I(e,t){let n=t>0?e/t:0;return n>=.8?`bg-danger`:n>=.5?`bg-warning`:`bg-primary`}function L(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`},R={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%)`}},z={class:`text-[32px] font-bold text-primary font-mono leading-none`},we={class:`flex flex-col gap-0.5`},Te={class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`},B={class:`font-mono text-[11px] text-muted-foreground`},Ee={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`},De={class:`flex-1 px-4 py-2.5 flex flex-col gap-1 justify-center`},Oe={class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-0.5`},ke={key:0,class:`text-[11px] text-muted-foreground py-1`},Ae=[`title`],V={class:`flex-1 h-1 bg-foreground/[0.06] rounded-sm overflow-hidden`},je=_({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{},queuedCount:{},concurrency:{}},setup(t){let{t:n}=i();return(i,o)=>(h(),m(`div`,Ce,[p(`div`,R,[p(`span`,z,d(t.activeCount),1),p(`div`,we,[p(`span`,Te,d(r(n)(`monitor.header.activeRequests`)),1),p(`span`,B,d(r(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),t.queuedCount>0?(h(),m(`span`,Ee,d(t.queuedCount)+` `+d(r(n)(`monitor.queued`)),1)):e(``,!0)]),p(`div`,De,[p(`span`,Oe,d(r(n)(`monitor.concurrency`)),1),t.concurrency.length===0?(h(),m(`div`,ke,d(r(n)(`monitor.concurrencyPanel.noData`)),1)):e(``,!0),(h(!0),m(a,null,T(t.concurrency,t=>(h(),m(`div`,{key:t.providerId,class:`flex items-center gap-1.5`},[p(`span`,{class:`text-[11px] font-medium text-muted-foreground w-[130px] shrink-0 truncate`,title:t.providerName},d(t.providerName),9,Ae),p(`div`,V,[r(F)(t)>0?(h(),m(`div`,{key:0,class:C([`h-full rounded-sm transition-all duration-300`,r(I)(t.active,r(F)(t))]),style:f({width:`${Math.min(100,t.active/r(F)(t)*100)}%`})},null,6)):e(``,!0)]),p(`span`,{class:C([`font-mono text-[11px] text-muted-foreground w-10 text-right shrink-0`,r(L)(t.active,r(F)(t))])},[t.adaptiveEnabled?(h(),m(a,{key:0},[x(d(t.active)+`/`+d(t.adaptiveLimit??t.maxConcurrency),1)],64)):t.maxConcurrency===0?(h(),m(a,{key:1},[x(d(r(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(h(),m(a,{key:2},[x(d(t.active)+`/`+d(t.maxConcurrency),1)],64))],2)]))),128))])]))}}),Me={key:0,class:`text-[13px] text-muted-foreground py-2`},Ne={key:1},Pe={class:`flex items-center justify-between py-[3px]`},Fe={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=_({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let{t}=i(),n=e,a=u(()=>!n.runtime||n.runtime.memoryUsage.heapTotal===0?0:Math.min(J,n.runtime.memoryUsage.heapUsed/n.runtime.memoryUsage.heapTotal*J));return(n,i)=>e.runtime?(h(),m(`div`,Ne,[p(`div`,Pe,[p(`span`,Fe,d(r(t)(`monitor.runtimePanel.memoryRss`)),1),p(`span`,Ie,d(r(j)(e.runtime.memoryUsage.rss)),1)]),p(`div`,H,[p(`span`,Le,d(r(t)(`monitor.runtimePanel.eventLoopDelay`)),1),p(`span`,Re,d(e.runtime.eventLoopDelayMs.toFixed(1))+`ms`,1)]),p(`div`,U,[p(`span`,ze,d(r(t)(`monitor.runtimePanel.activeHandles`)),1),p(`span`,W,d(e.runtime.activeHandles),1)]),p(`div`,G,[p(`div`,K,[p(`span`,Be,d(r(t)(`monitor.runtimePanel.heapUsage`)),1),p(`span`,Ve,d(r(j)(e.runtime.memoryUsage.heapUsed))+` / `+d(r(j)(e.runtime.memoryUsage.heapTotal)),1)]),p(`div`,q,[p(`div`,{class:`h-full bg-primary rounded-sm transition-all duration-300`,style:f({width:`${a.value}%`})},null,4)])])])):(h(),m(`div`,Me,d(r(t)(`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=_({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let{t}=i(),n=e,o=u(()=>Object.values(n.byStatusCode).reduce((e,t)=>e+t,0)),s=u(()=>{let e=n.byStatusCode,t=o.value||1,r=c(e,200,299),i=c(e,400,499)-(e[429]||0),a=e[429]||0,s=c(e,500,599);return[{label:`2xx`,count:r,percent:(r/t*100).toFixed(1),textClass:`text-success`,dotClass:`bg-success`},{label:`4xx`,count:i,percent:(i/t*100).toFixed(1),textClass:`text-warning`,dotClass:`bg-warning`},{label:`429`,count:a,percent:(a/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 c(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(e,n)=>o.value===0?(h(),m(`div`,Ue,d(r(t)(`monitor.statusCodes.noData`)),1)):(h(),m(`div`,We,[(h(!0),m(a,null,T(s.value,e=>(h(),m(`div`,{key:e.label,class:`flex items-center gap-1.5 py-[3px] border-t border-foreground/[0.04] first:border-t-0`},[p(`span`,{class:C([`size-[5px] rounded-full shrink-0`,e.dotClass])},null,2),p(`span`,Ge,d(e.label),1),p(`span`,{class:C([`font-mono text-[11px]`,e.textClass])},d(e.count),3),p(`span`,Ke,d(e.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=_({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=i(),o=t,s=u(()=>o.stats?Object.entries(o.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(i,o)=>t.stats?s.value.length===0?(h(),m(`div`,Y,d(r(n)(`monitor.providerTable.noProviders`)),1)):(h(),c(r(xe),{key:2},{default:y(()=>[w(r(Se),null,{default:y(()=>[w(r(P),{class:`border-b-0`},{default:y(()=>[w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.provider`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.requests`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.successRate`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 text-right`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),w(r(N),{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5`},{default:y(()=>[x(d(r(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),w(r(be),null,{default:y(()=>[(h(!0),m(a,null,T(s.value,t=>(h(),c(r(P),{key:t.id,class:`border-b-0 hover:bg-muted/50`},{default:y(()=>[w(r(M),{class:`font-medium text-[13px] py-1`},{default:y(()=>[x(d(t.name),1)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[x(d(t.stats.totalRequests),1)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[p(`span`,{class:C(t.successRate>=95?`text-success`:t.successRate>=80?`text-warning`:`text-danger`)},d(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[x(d(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),w(r(M),{class:`text-right font-mono text-xs py-1`},{default:y(()=>[p(`span`,{class:C(t.retryRate>10?`text-warning`:``)},d(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),w(r(M),{class:`py-1`},{default:y(()=>[p(`div`,Ye,[(h(!0),m(a,null,T(t.stats.topErrors.slice(0,3),e=>(h(),c(r(ye),{key:e.code,variant:`destructive`,class:`text-[10px] px-1.5 py-0`},{default:y(()=>[x(d(e.code)+` (`+d(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(h(),m(`span`,Xe,`--`)):e(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(h(),m(`div`,Je,d(r(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 g(()=>{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),l(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))}l(t.activeRequests);break}case`runtime_update`:t.runtime.value=n;break}}async function rt(e,t,n,r,i){try{let[a,o,s,c,l]=await Promise.allSettled([v.getMonitorActive(),v.getMonitorRecent(),v.getMonitorStats(),v.getMonitorConcurrency(),v.getMonitorRuntime()]);a.status===`fulfilled`&&(e.value=a.value),o.status===`fulfilled`&&(t.value=o.value),s.status===`fulfilled`&&(n.value=s.value),c.status===`fulfilled`&&(r.value=c.value),l.status===`fulfilled`&&(i.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,r.value=[],i.value=null}}function it(){let e=E([]),t=o([]),r=o(null),i=o([]),a=o(null),s=o(!1),c=!1,l=u(()=>e.value.filter(e=>e.isStream).length),d=u(()=>e.value.filter(e=>!e.queued)),f=u(()=>e.value.filter(e=>e.queued===!0)),p=n=>nt(n,{recentCompleted:t,activeRequests:e,concurrency:i,stats:r,runtime:a});async function m(){if(s.value=!0,!c){c=!0;return}await et(e,()=>v.getMonitorActive())}function h(){s.value=!1}let _=()=>rt(e,t,r,i,a),{connect:y,disconnect:ee}=X(`/admin/api/monitor/stream`,{request_start:p,request_update:p,request_complete:p,concurrency_update:p,stats_update:p,runtime_update:p,stream_content_update:p},{onOpen:m,onClose:h}),b=o(null),x=o(!1),S=o(0);async function C(n){let r=++S.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){b.value=null;return}b.value=null,x.value=!0;try{if(i.status===`pending`){try{let e=await v.getMonitorRequest(n);if(r!==S.value)return;b.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==Q)throw e;if(r!==S.value)return;let t=await v.getLogDetail(n);if(r!==S.value)return;b.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await v.getLogDetail(n);if(r!==S.value)return;let t;if(!i.isStream){let n=e.upstream_response;if(n)try{let e=JSON.parse(n);t=(typeof e.body==`string`?e.body:n)??void 0}catch{t=n}}b.value={responseBody:t,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(r!==S.value)return;console.warn(`Failed to load log detail:`,e),b.value=null}finally{r===S.value&&(x.value=!1)}}let w=o(null),T=o(!1),D=o(null),O=null;function te(t){if(k(),!t)return;let n=async()=>{let n=e.value.find(e=>e.id===t);if(!n||n.status===`completed`||n.status===`failed`){k();return}try{let e=await v.getMonitorRequest(t);if(w.value!==t)return;e.streamContent&&(D.value=e.streamContent)}catch(e){e?.response?.status===Q&&k()}};n(),O=setInterval(n,$)}function k(){O&&=(clearInterval(O),null)}function ne(e){w.value=e,T.value=!0,D.value=null;let n=t.value.find(t=>t.id===e);n&&(n.status===`completed`||n.status===`failed`)&&(n.streamContent?D.value=n.streamContent:re(e)),te(e),C(e)}async function re(e){try{let t=await v.getMonitorRequest(e);if(w.value!==e)return;t.streamContent&&(D.value=t.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let A=u(()=>w.value?e.value.find(e=>e.id===w.value)??t.value.find(e=>e.id===w.value)??null:null);return n(()=>A.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(k(),C(w.value))}),g(()=>{k()}),{activeRequests:e,recentCompleted:t,stats:r,concurrency:i,runtime:a,connected:s,streamCount:l,streamingRequests:d,queuedRequests:f,selectedRequestId:w,selectedRequest:A,requestDetailOpen:T,selectRequest:ne,selectedStreamContent:D,logDetailData:b,nonStreamBodyLoading:x,connect:y,disconnect:ee,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=_({__name:`Monitor`,setup(n){let{t:l}=i(),{activeRequests:_,recentCompleted:E,stats:j,concurrency:F,runtime:I,connected:L,streamCount:Ce,streamingRequests:R,queuedRequests:z,selectedRequestId:we,selectedRequest:Te,requestDetailOpen:B,selectRequest:Ee,selectedStreamContent:De,logDetailData:Oe,loadInitialData:ke,connect:Ae}=it(),V=o(`active`),Me=u(()=>[{key:`active`,label:l(`monitor.activeRequests`),count:R.value.length},{key:`queued`,label:l(`monitor.queuedRequests`),count:z.value.length},{key:`recent`,label:l(`monitor.completed`),count:E.value.length}]),Ne={active:()=>R.value,queued:()=>z.value,recent:()=>E.value},Pe={active:l(`monitor.noActiveRequests`),queued:l(`monitor.noQueuedRequests`),recent:l(`monitor.noCompletedRequests`)},Fe=u(()=>Ne[V.value]()),Ie=u(()=>Pe[V.value]),H=o(null);function Le(e){H.value=H.value===e?null:e}let{copy:Re}=k(),U=o(null);function ze(e){Re(e),U.value=e,setTimeout(()=>{U.value===e&&(U.value=null)},ln)}let W=o(!1),G=o(null),K=u(()=>G.value?_.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 v.killMonitorRequest(G.value),_.value=_.value.filter(e=>e.id!==G.value),se.success(l(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),se.error(t(e,l(`monitor.killFailed`)))}W.value=!1}}let q=o(!0),J=u(()=>!j.value||j.value.totalRequests===0?`0.0`:(j.value.errorCount/j.value.totalRequests*dn).toFixed(1)),Ue=u(()=>{let e=Number.parseFloat(J.value);return e>=pn?`text-danger`:e>=fn?`text-warning`:`text-foreground`}),We=u(()=>!j.value||j.value.totalRequests===0?`0.0`:(j.value.retryCount/j.value.totalRequests*dn).toFixed(1)),Ge=u(()=>j.value?j.value.p50LatencyMs.toFixed(0):`--`),Ke=u(()=>j.value?j.value.p99LatencyMs.toFixed(0):`--`),Je=u(()=>{if(!j.value||!I.value||I.value.uptimeMs===0)return`--`;let e=I.value.uptimeMs/un;return(j.value.totalRequests/e).toFixed(1)}),Y=u(()=>{let e=F.value.reduce((e,t)=>e+t.active,0),t=F.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=u(()=>{let e=Y.value.pct;return e>=hn?`bg-danger`:e>=gn?`bg-warning`:`bg-primary`}),Xe=u(()=>I.value?$e(I.value.uptimeMs):`--`),Ze=u(()=>!I.value||!j.value?`--`:`${j.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=o(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 ke(),Ae(),Q(),document.addEventListener(`visibilitychange`,et)}),g(()=>{$(),document.removeEventListener(`visibilitychange`,et)}),(t,n)=>(h(),m(`div`,at,[p(`div`,ot,[p(`h2`,st,d(r(l)(`monitor.title`)),1),w(r(ye),{variant:r(L)?`default`:`destructive`},{default:y(()=>[x(d(r(L)?r(l)(`monitor.connected`):r(l)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])]),w(je,{stats:r(j),"active-count":r(_).length,"stream-count":r(Ce),"queued-count":r(z).length,concurrency:r(F)},null,8,[`stats`,`active-count`,`stream-count`,`queued-count`,`concurrency`]),p(`div`,ct,[p(`div`,lt,[(h(!0),m(a,null,T(Me.value,t=>(h(),c(r(b),{key:t.key,variant:`ghost`,class:C([`relative px-3.5 py-2 text-[13px] font-medium transition-colors flex items-center gap-2 h-auto rounded-none`,V.value===t.key?`text-primary`:`text-muted-foreground hover:text-foreground`]),onClick:e=>V.value=t.key},{default:y(()=>[x(d(t.label)+` `,1),p(`span`,{class:C([`font-mono text-[11px] font-semibold px-1.5 py-px rounded-full`,V.value===t.key?`bg-primary/15 text-primary`:`bg-foreground/5 text-muted-foreground`])},d(t.count),3),V.value===t.key?(h(),m(`span`,ut)):e(``,!0)]),_:2},1032,[`class`,`onClick`]))),128))]),w(r(D),{class:`h-[252px]`},{default:y(()=>[w(r(xe),null,{default:y(()=>[w(r(Se),null,{default:y(()=>[w(r(P),{class:`border-b-0 hover:bg-transparent`},{default:y(()=>[w(r(N),{class:`w-9 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:y(()=>[...n[4]||=[x(`Model`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3`},{default:y(()=>[...n[5]||=[x(`Provider`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-16`},{default:y(()=>[...n[6]||=[x(`Type`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:y(()=>[...n[7]||=[x(`Elapsed`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:y(()=>[...n[8]||=[x(`Speed`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 text-right w-20`},{default:y(()=>[...n[9]||=[x(`Output`,-1)]]),_:1}),w(r(N),{class:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider py-1.5 px-3 w-14`})]),_:1})]),_:1}),w(r(be),null,{default:y(()=>[Fe.value.length===0?(h(),c(r(P),{key:0,class:`border-b-0 h-[220px]`},{default:y(()=>[w(r(M),{colspan:`8`,class:`text-center text-[13px] text-muted-foreground align-middle`},{default:y(()=>[x(d(Ie.value),1)]),_:1})]),_:1})):e(``,!0),(h(!0),m(a,null,T(Fe.value,t=>(h(),m(a,{key:t.id},[w(r(P),{class:C([`cursor-pointer transition-colors border-b border-foreground/[0.04] hover:bg-muted/40`,[r(we)===t.id?`bg-primary/10`:``,V.value===`recent`?`opacity-60 hover:opacity-80`:``]]),onClick:e=>r(Ee)(t.id)},{default:y(()=>[w(r(M),{class:`px-3 py-1`},{default:y(()=>[p(`span`,{class:C([`inline-block size-2 rounded-full shrink-0`,xn(t)])},null,2)]),_:2},1024),w(r(M),{class:`px-3 py-1 text-[13px] font-medium truncate max-w-[200px]`},{default:y(()=>[x(d(t.model),1)]),_:2},1024),w(r(M),{class:`px-3 py-1 font-mono text-[11px] text-muted-foreground`},{default:y(()=>[x(d(t.providerName),1)]),_:2},1024),w(r(M),{class:`px-3 py-1`},{default:y(()=>[t.isStream?(h(),m(`span`,dt,` SSE `)):(h(),m(`span`,ft,` Sync `))]),_:2},1024),w(r(M),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:y(()=>[x(d(tt(t)),1)]),_:2},1024),w(r(M),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:y(()=>[x(d(nt(t)),1)]),_:2},1024),w(r(M),{class:`px-3 py-1 text-right font-mono text-[12px] text-muted-foreground`},{default:y(()=>[x(d(rt(t)),1)]),_:2},1024),w(r(M),{class:`px-3 py-1`},{default:y(()=>[p(`div`,{class:`flex items-center gap-0.5 justify-end`,onClick:n[0]||=S(()=>{},[`stop`])},[w(r(re),null,{default:y(()=>[w(r(A),{"as-child":``},{default:y(()=>[w(r(b),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:S(e=>ze(t.id),[`stop`])},{default:y(()=>[U.value===t.id?(h(),c(r(de),{key:0,class:`size-3 text-success`})):(h(),c(r(te),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),w(r(ne),null,{default:y(()=>[x(d(r(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),Sn(t)?(h(),c(r(re),{key:0},{default:y(()=>[w(r(A),{"as-child":``},{default:y(()=>[w(r(b),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6 text-destructive hover:text-destructive`,onClick:S(e=>Be(t.id),[`stop`])},{default:y(()=>[w(r(_e),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),w(r(ne),null,{default:y(()=>[x(d(r(l)(`monitor.kill`)),1)]),_:1})]),_:2},1024)):e(``,!0),w(r(b),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 h-6 w-6`,onClick:S(e=>Le(t.id),[`stop`])},{default:y(()=>[w(r(fe),{class:C([`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?(h(),c(r(P),{key:0,class:`border-b border-foreground/[0.04] bg-foreground/[0.02]`},{default:y(()=>[w(r(M),{colspan:`8`,class:`px-3 py-2`},{default:y(()=>[p(`div`,pt,[p(`div`,null,[n[10]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Request ID `,-1),p(`div`,mt,d(t.id),1)]),p(`div`,null,[n[11]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Input Tokens `,-1),p(`div`,ht,d(t.streamMetrics?.inputTokens?.toLocaleString()??`--`),1)]),p(`div`,null,[n[12]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Output Tokens `,-1),p(`div`,gt,d(t.streamMetrics?.outputTokens?.toLocaleString()??`--`),1)]),p(`div`,null,[n[13]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` Cache Tokens `,-1),p(`div`,_t,d(t.streamMetrics?.cacheReadTokens?.toLocaleString()??`--`),1)])])]),_:2},1024)]),_:2},1024)):e(``,!0)],64))),128))]),_:1})]),_:1})]),_:1})]),p(`div`,vt,[p(`div`,yt,[p(`div`,bt,d(r(l)(`monitor.completed`)),1),p(`div`,xt,d(r(j)?.successCount??0),1),n[14]||=p(`div`,{class:`text-[10px] font-mono text-muted-foreground`},`last 5h`,-1)]),p(`div`,St,[p(`div`,Ct,d(r(l)(`monitor.header.errorRate`)),1),p(`div`,{class:C([`text-[13px] font-mono font-semibold`,Ue.value])},d(J.value)+`% `,3),p(`div`,wt,d(r(j)?.errorCount??0)+` / `+d(r(j)?.totalRequests??0),1)]),p(`div`,Tt,[p(`div`,Et,d(r(l)(`monitor.header.p50Latency`)),1),p(`div`,Dt,d(Ge.value)+`ms `,1),p(`div`,Ot,` avg `+d(r(j)?.avgLatencyMs?.toFixed(1)??`--`)+`s `,1)]),p(`div`,kt,[p(`div`,At,d(r(l)(`monitor.header.retryRate`)),1),p(`div`,jt,d(We.value)+`% `,1),p(`div`,Mt,d(r(j)?.retryCount??0)+` / `+d(r(j)?.totalRequests??0),1)]),p(`div`,Nt,[p(`div`,Pt,d(r(l)(`monitor.runtimePanel.uptime`)),1),p(`div`,Ft,d(Xe.value),1),p(`div`,It,d(Ze.value),1)])]),p(`div`,Lt,[w(r(ie),{open:q.value,"onUpdate:open":n[1]||=e=>q.value=e},{default:y(()=>[p(`div`,Rt,[p(`span`,zt,d(r(l)(`monitor.providerStats`)),1),w(r(oe),{"as-child":``},{default:y(()=>[w(r(b),{variant:`ghost`,size:`xs`,class:`text-[11px] text-muted-foreground hover:text-foreground h-6 px-1.5`},{default:y(()=>[x(d(q.value?r(l)(`monitor.providerStatsHide`):r(l)(`monitor.providerStatsShow`)),1)]),_:1})]),_:1})]),w(r(ae),null,{default:y(()=>[p(`div`,Bt,[w(Qe,{stats:r(j)},null,8,[`stats`])])]),_:1})]),_:1},8,[`open`])]),p(`div`,Vt,[p(`div`,Ht,[p(`div`,Ut,[p(`span`,Wt,d(r(l)(`monitor.statusCodeDistribution`)),1)]),p(`div`,Gt,[w(qe,{"by-status-code":r(j)?.byStatusCode??{}},null,8,[`by-status-code`])])]),p(`div`,Kt,[p(`div`,qt,[p(`span`,Jt,d(r(l)(`monitor.runtime`)),1)]),p(`div`,Yt,[w(He,{runtime:r(I)},null,8,[`runtime`])])]),p(`div`,Xt,[p(`div`,Zt,[p(`span`,Qt,d(r(l)(`monitor.concurrency`)),1)]),p(`div`,$t,[p(`div`,en,[p(`span`,tn,d(Y.value.active),1),p(`span`,nn,`/ `+d(Y.value.total),1),p(`span`,rn,d(Y.value.pct)+`%`,1)]),p(`div`,an,[p(`div`,{class:C([`h-full rounded-full transition-all duration-300`,Ye.value]),style:f({width:`${Math.min(100,Y.value.pct)}%`})},null,6)]),p(`div`,on,[p(`div`,null,[n[15]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` P99 `,-1),p(`div`,sn,d(Ke.value)+`ms `,1)]),p(`div`,null,[n[16]||=p(`div`,{class:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider`},` QPS `,-1),p(`div`,cn,d(Je.value),1)])])])])]),w(O,{open:r(B),"onUpdate:open":n[2]||=e=>s(B)?B.value=e:null,source:`realtime`,request:r(Te),"stream-content":r(De),"log-detail-data":r(Oe)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),w(r(he),{open:W.value,"onUpdate:open":n[3]||=e=>W.value=e},{default:y(()=>[w(r(ve),null,{default:y(()=>[w(r(ge),null,{default:y(()=>[w(r(me),null,{default:y(()=>[x(d(r(l)(`monitor.killConfirmTitle`)),1)]),_:1}),K.value?(h(),c(r(pe),{key:0},{default:y(()=>[x(d(r(l)(`monitor.killConfirm`,{model:K.value.model,provider:K.value.providerName})),1)]),_:1})):e(``,!0)]),_:1}),w(r(ce),null,{default:y(()=>[w(r(le),null,{default:y(()=>[x(d(r(l)(`monitor.killCancel`)),1)]),_:1}),w(r(ue),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:Ve},{default:y(()=>[x(d(r(l)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{xn as default};
|