llm-simple-router 0.11.4 → 0.11.13

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.
Files changed (40) hide show
  1. package/dist/admin/retry-rules.js +79 -5
  2. package/frontend-dist/assets/{CardContent-B88j9H0z.js → CardContent-POdM9knm.js} +1 -1
  3. package/frontend-dist/assets/{CardTitle-B8a97nPD.js → CardTitle-mi00cvHk.js} +1 -1
  4. package/frontend-dist/assets/{CascadingModelSelect-C0yNZoXy.js → CascadingModelSelect-CubFNL5Z.js} +1 -1
  5. package/frontend-dist/assets/{Checkbox-BqTMZz2v.js → Checkbox-BcnVK5BE.js} +1 -1
  6. package/frontend-dist/assets/{CollapsibleContent-96COn5t_.js → CollapsibleContent-CMuY_0ps.js} +1 -1
  7. package/frontend-dist/assets/{CollapsibleTrigger-BhoqUmdk.js → CollapsibleTrigger-KRXgNeSC.js} +1 -1
  8. package/frontend-dist/assets/{Dashboard-DS1huRbF.js → Dashboard-Bh4nXWLM.js} +1 -1
  9. package/frontend-dist/assets/{Input-Bu0i-HPR.js → Input-CQAFlthI.js} +1 -1
  10. package/frontend-dist/assets/{Label-67a8eQwX.js → Label-_o2ZnCRD.js} +1 -1
  11. package/frontend-dist/assets/{Login-DuJrav5s.js → Login-BPqzTIaZ.js} +1 -1
  12. package/frontend-dist/assets/{Logs-Di2rtHWg.js → Logs-ZJszhjOb.js} +1 -1
  13. package/frontend-dist/assets/{MappingEntryEditor-C_wjxov1.js → MappingEntryEditor--Icmf_he.js} +1 -1
  14. package/frontend-dist/assets/{ModelMappings-CJKFlKoo.js → ModelMappings-Bj32YLQZ.js} +1 -1
  15. package/frontend-dist/assets/{Monitor-C_KYa39G.js → Monitor-SBlmRPTQ.js} +1 -1
  16. package/frontend-dist/assets/{Providers-OSQlM_k9.js → Providers-Biuxv2W9.js} +1 -1
  17. package/frontend-dist/assets/{ProxyEnhancement-Cj7_GBQe.js → ProxyEnhancement-BTUqx-hj.js} +1 -1
  18. package/frontend-dist/assets/{QuickSetup-_dHnO9A_.js → QuickSetup-B8-u2sZa.js} +1 -1
  19. package/frontend-dist/assets/{RetryRules-D1wNRCPz.js → RetryRules-C8mGFYBh.js} +1 -1
  20. package/frontend-dist/assets/{RouterKeys-CZ2Vw6vB.js → RouterKeys-DgzXJsL8.js} +1 -1
  21. package/frontend-dist/assets/{RovingFocusItem-tLhdCrJ2.js → RovingFocusItem-Dg-GYaYf.js} +1 -1
  22. package/frontend-dist/assets/{Schedules-BBBE5rzH.js → Schedules-CQQX55LC.js} +1 -1
  23. package/frontend-dist/assets/{Settings-CNEWKmas.js → Settings-B7-f_Pei.js} +1 -1
  24. package/frontend-dist/assets/{Setup-BJy7Hluo.js → Setup-aJfZU8RD.js} +1 -1
  25. package/frontend-dist/assets/{Switch-B2K6kTfF.js → Switch-CqF_csS2.js} +1 -1
  26. package/frontend-dist/assets/{TooltipTrigger-qc84ev_b.js → TooltipTrigger-CpHXgQxI.js} +1 -1
  27. package/frontend-dist/assets/{TransformRulesForm-DdSMMv3Z.js → TransformRulesForm-C0elmJO6.js} +1 -1
  28. package/frontend-dist/assets/{UnifiedRequestDialog-BtsWE0wO.js → UnifiedRequestDialog-DWUXdfWY.js} +1 -1
  29. package/frontend-dist/assets/{VisuallyHiddenInput-C6J7cjvG.js → VisuallyHiddenInput-HnGHuxTe.js} +1 -1
  30. package/frontend-dist/assets/{button-CSFUPP0s.js → button-BaNRw0cF.js} +2 -2
  31. package/frontend-dist/assets/{copy-C9YdGmGg.js → copy-Dbl7J0Cg.js} +1 -1
  32. package/frontend-dist/assets/{dialog-Dvd1Jkzx.js → dialog-D_OkVkI9.js} +1 -1
  33. package/frontend-dist/assets/{index-BXsU7o6J.js → index-COoySiAr.js} +2 -2
  34. package/frontend-dist/assets/{model-patches-C_Vq5bRS.js → model-patches-D5Tyous2.js} +1 -1
  35. package/frontend-dist/assets/{sparkles-C6fYCgIz.js → sparkles-D3u86oss.js} +1 -1
  36. package/frontend-dist/assets/{trash-2-2cawWyKR.js → trash-2-DvEWr8UB.js} +1 -1
  37. package/frontend-dist/assets/{useClipboard-Bk__77zn.js → useClipboard-D_jpOvnE.js} +1 -1
  38. package/frontend-dist/assets/{useLogRetention-BhmlsZRl.js → useLogRetention-DnSxnecs.js} +1 -1
  39. package/frontend-dist/index.html +2 -2
  40. package/package.json +2 -2
@@ -1 +1 @@
1
- import{$ as e,Kt as t,Mt as n,W as r,Wt as i,ht as a,kt as o,m as s,r as c,rt as l}from"./button-CSFUPP0s.js";var u=l({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(l,{emit:u}){let d=l,f=s(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(s,l)=>o((a(),e(`input`,{"onUpdate:modelValue":l[0]||=e=>n(f)?f.value=e:null,"data-slot":`input`,class:t(i(c)(`dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,d.class))},null,2)),[[r,i(f)]])}});export{u as t};
1
+ import{$ as e,Kt as t,Mt as n,W as r,Wt as i,ht as a,kt as o,m as s,r as c,rt as l}from"./button-BaNRw0cF.js";var u=l({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(l,{emit:u}){let d=l,f=s(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(s,l)=>o((a(),e(`input`,{"onUpdate:modelValue":l[0]||=e=>n(f)?f.value=e:null,"data-slot":`input`,class:t(i(c)(`dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,d.class))},null,2)),[[r,i(f)]])}});export{u as t};
@@ -1 +1 @@
1
- import{Ot as e,Wt as t,Z as n,ht as r,i,o as a,r as o,rt as s,ut as c,vt as l,x as u}from"./button-CSFUPP0s.js";var d=s({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(o){let s=o;return a(),(a,o)=>(r(),n(t(i),c(s,{onMousedown:o[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:e(()=>[l(a.$slots,`default`)]),_:3},16))}}),f=s({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(i){let a=i,s=u(a,`class`);return(i,u)=>(r(),n(t(d),c({"data-slot":`label`},t(s),{class:t(o)(`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:e(()=>[l(i.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
1
+ import{Ot as e,Wt as t,Z as n,ht as r,i,o as a,r as o,rt as s,ut as c,vt as l,x as u}from"./button-BaNRw0cF.js";var d=s({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(o){let s=o;return a(),(a,o)=>(r(),n(t(i),c(s,{onMousedown:o[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:e(()=>[l(a.$slots,`default`)]),_:3},16))}}),f=s({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(i){let a=i,s=u(a,`class`);return(i,u)=>(r(),n(t(d),c({"data-slot":`label`},t(s),{class:t(o)(`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:e(()=>[l(i.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
@@ -1 +1 @@
1
- import{$ as e,A as t,It as n,K as r,Ot as i,Q as a,R as o,V as s,Wt as c,X as l,Yt as u,Z as d,ht as f,k as p,n as m,nt as h,rt as g,tt as _}from"./button-CSFUPP0s.js";import{t as v}from"./Label-67a8eQwX.js";import{ct as y,n as b,st as x}from"./index-BXsU7o6J.js";import{n as S,t as C}from"./CardContent-B88j9H0z.js";import{t as w}from"./Input-Bu0i-HPR.js";var T={class:`min-h-screen flex items-center justify-center bg-background relative`},E={class:`text-center mb-6`},D={class:`text-sm text-muted-foreground mt-1`},O={key:0,class:`text-destructive text-sm`},k=g({__name:`Login`,setup(g){let{t:k}=s(),{isDark:A,toggleTheme:j}=b(),M=o(),N=n(``),P=n(``),F=n(!1);async function I(){if(N.value){P.value=``,F.value=!0;try{await p.login(N.value),M.push(`/`)}catch(e){console.error(`login:`,e),P.value=t(e,k(`login.loginFailed`))}finally{F.value=!1}}}return(t,n)=>(f(),e(`div`,T,[h(c(m),{variant:`ghost`,size:`icon`,class:`absolute top-4 right-4 text-muted-foreground hover:text-foreground`,onClick:c(j)},{default:i(()=>[c(A)?(f(),d(c(x),{key:1,class:`w-4 h-4`})):(f(),d(c(y),{key:0,class:`w-4 h-4`}))]),_:1},8,[`onClick`]),h(c(S),{class:`w-full max-w-sm shadow-lg`},{default:i(()=>[h(c(C),{class:`pt-6`},{default:i(()=>[l(`div`,E,[n[1]||=l(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[l(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z`})])],-1),n[2]||=l(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`,-1),l(`p`,D,u(c(k)(`login.subtitle`)),1)]),l(`form`,{onSubmit:r(I,[`prevent`]),class:`space-y-4`},[l(`div`,null,[h(c(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:i(()=>[_(u(c(k)(`login.password`)),1)]),_:1}),h(c(w),{modelValue:N.value,"onUpdate:modelValue":n[0]||=e=>N.value=e,type:`password`,placeholder:c(k)(`login.passwordPlaceholder`),disabled:F.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),P.value?(f(),e(`p`,O,u(P.value),1)):a(``,!0),h(c(m),{type:`submit`,class:`w-full`,disabled:F.value},{default:i(()=>[_(u(F.value?c(k)(`login.loggingIn`):c(k)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{k as default};
1
+ import{$ as e,A as t,It as n,K as r,Ot as i,Q as a,R as o,V as s,Wt as c,X as l,Yt as u,Z as d,ht as f,k as p,n as m,nt as h,rt as g,tt as _}from"./button-BaNRw0cF.js";import{t as v}from"./Label-_o2ZnCRD.js";import{ct as y,n as b,st as x}from"./index-COoySiAr.js";import{n as S,t as C}from"./CardContent-POdM9knm.js";import{t as w}from"./Input-CQAFlthI.js";var T={class:`min-h-screen flex items-center justify-center bg-background relative`},E={class:`text-center mb-6`},D={class:`text-sm text-muted-foreground mt-1`},O={key:0,class:`text-destructive text-sm`},k=g({__name:`Login`,setup(g){let{t:k}=s(),{isDark:A,toggleTheme:j}=b(),M=o(),N=n(``),P=n(``),F=n(!1);async function I(){if(N.value){P.value=``,F.value=!0;try{await p.login(N.value),M.push(`/`)}catch(e){console.error(`login:`,e),P.value=t(e,k(`login.loginFailed`))}finally{F.value=!1}}}return(t,n)=>(f(),e(`div`,T,[h(c(m),{variant:`ghost`,size:`icon`,class:`absolute top-4 right-4 text-muted-foreground hover:text-foreground`,onClick:c(j)},{default:i(()=>[c(A)?(f(),d(c(x),{key:1,class:`w-4 h-4`})):(f(),d(c(y),{key:0,class:`w-4 h-4`}))]),_:1},8,[`onClick`]),h(c(S),{class:`w-full max-w-sm shadow-lg`},{default:i(()=>[h(c(C),{class:`pt-6`},{default:i(()=>[l(`div`,E,[n[1]||=l(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[l(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z`})])],-1),n[2]||=l(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`,-1),l(`p`,D,u(c(k)(`login.subtitle`)),1)]),l(`form`,{onSubmit:r(I,[`prevent`]),class:`space-y-4`},[l(`div`,null,[h(c(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:i(()=>[_(u(c(k)(`login.password`)),1)]),_:1}),h(c(w),{modelValue:N.value,"onUpdate:modelValue":n[0]||=e=>N.value=e,type:`password`,placeholder:c(k)(`login.passwordPlaceholder`),disabled:F.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),P.value?(f(),e(`p`,O,u(P.value),1)):a(``,!0),h(c(m),{type:`submit`,class:`w-full`,disabled:F.value},{default:i(()=>[_(u(F.value?c(k)(`login.loggingIn`):c(k)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{k as default};
@@ -1 +1 @@
1
- import{$ as e,A as t,It as n,K as r,Kt as i,Mt as a,Ot as o,Q as s,Tt as c,V as l,Wt as u,X as d,Y as f,Yt as p,Z as m,_t as h,ht as g,k as _,n as v,nt as y,pt as b,q as x,r as S,rt as C,tt as w}from"./button-CSFUPP0s.js";import{r as ee,t as te}from"./UnifiedRequestDialog-BtsWE0wO.js";import{t as T}from"./copy-C9YdGmGg.js";import{i as E,n as ne,r as D,t as O}from"./TooltipTrigger-qc84ev_b.js";import{a as re,c as k,d as ie,f as ae,l as A,n as oe,o as se,r as ce,s as le,t as ue,u as j}from"./dialog-Dvd1Jkzx.js";import{t as de}from"./Label-67a8eQwX.js";import{St as fe,_ as M,a as pe,c as me,d as he,f as ge,g as N,gt as _e,h as P,i as F,l as ve,m as I,o as ye,p as L,pt as be,s as xe,x as R,xt as z}from"./index-BXsU7o6J.js";import{t as B}from"./Input-Bu0i-HPR.js";import{t as Se}from"./useClipboard-Bk__77zn.js";import{t as Ce}from"./useLogRetention-BhmlsZRl.js";var we=C({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t;return(t,r)=>(g(),e(`div`,{"data-slot":`skeleton`,class:i(u(S)(`bg-muted rounded-md animate-pulse`,n.class))},null,2))}}),Te={key:1,class:`ml-4 text-muted-foreground text-xs`},V={class:`inline-flex items-center gap-1`},H={class:`font-mono`},U={key:2,class:`text-muted-foreground`},W={key:1,class:`text-muted-foreground`},Ee={key:1,class:`text-muted-foreground`},G={class:`block truncate`},K={key:1,class:`text-muted-foreground`},De=C({__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 a=n,{t:c}=l();function f(e){if(!e)return c(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return c(`logs.row.unknown`)}}return(n,l)=>(g(),m(u(A),{class:i({"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild})},{default:o(()=>[y(u(j),{class:`w-10`},{default:o(()=>[!t.isChild&&t.log.child_count?(g(),m(u(v),{key:0,variant:`ghost`,size:`xs`,onClick:l[0]||=e=>a(`toggleExpand`,t.log)},{default:o(()=>[d(`span`,{class:i([`text-xs transition-transform`,t.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):s(``,!0),t.isChild?(g(),e(`span`,Te,`└`)):s(``,!0)]),_:1}),y(u(j),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:o(()=>[d(`span`,V,[w(p(t.log.id.slice(0,8))+` `,1),y(u(E),{"delay-duration":300},{default:o(()=>[y(u(O),{"as-child":``},{default:o(()=>[y(u(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:l[1]||=r(e=>a(`copy`,t.log.id),[`stop`])},{default:o(()=>[t.copiedId===t.log.id?(g(),m(u(be),{key:0,class:`size-3 text-success`})):(g(),m(u(T),{key:1,class:`size-3`}))]),_:1})]),_:1}),y(u(D),null,{default:o(()=>[w(p(u(c)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})])]),_:1},8,[`title`]),y(u(j),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(_e)(t.log.created_at)),1)]),_:1}),y(u(j),null,{default:o(()=>[y(u(R),{variant:t.log.api_type===`openai`?`default`:`secondary`},{default:o(()=>[w(p(t.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),y(u(j),{class:`font-mono text-xs`},{default:o(()=>[w(p(t.log.model||`-`)+` `,1),!t.isChild&&t.log.original_model?(g(),m(u(R),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:o(()=>[w(p(u(c)(`logs.row.replaced`)),1)]),_:1})):s(``,!0)]),_:1}),y(u(j),{class:`text-xs`},{default:o(()=>[!t.isChild&&t.log.provider_id===u(`router`)?(g(),m(u(R),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:o(()=>[w(p(u(c)(`logs.row.proxyEnhancement`,{label:f(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(g(),e(x,{key:1},[d(`span`,H,p(t.log.backend_model||`-`),1),l[3]||=d(`span`,{class:`text-muted-foreground`},` @ `,-1),y(u(R),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:o(()=>[w(p(t.log.provider_name||t.log.provider_id||`-`),1)]),_:1})],64)):(g(),e(`span`,U,`-`))]),_:1}),y(u(j),null,{default:o(()=>[y(u(R),{variant:(t.log.status_code??0)<400?`default`:`destructive`},{default:o(()=>[w(p(t.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),y(u(j),null,{default:o(()=>[w(p(t.log.latency_ms?t.log.latency_ms+`ms`:`-`),1)]),_:1}),y(u(j),null,{default:o(()=>[w(p(t.log.is_stream?`Yes`:`No`),1)]),_:1}),y(u(j),null,{default:o(()=>[t.log.is_retry?(g(),m(u(R),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:o(()=>[w(p(u(c)(`logs.table.retry`)),1)]),_:1})):(g(),e(`span`,W,`-`))]),_:1}),y(u(j),null,{default:o(()=>[t.log.is_failover?(g(),m(u(R),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:o(()=>[w(p(u(c)(`logs.table.failover`)),1)]),_:1})):(g(),e(`span`,Ee,`-`))]),_:1}),y(u(j),{class:`text-destructive text-xs max-w-[200px]`},{default:o(()=>[t.log.error_message?(g(),m(u(E),{key:0,"delay-duration":300},{default:o(()=>[y(u(O),{"as-child":``},{default:o(()=>[d(`span`,G,p(t.log.error_message),1)]),_:1}),y(u(D),{class:`max-w-sm whitespace-pre-wrap`},{default:o(()=>[w(p(t.log.error_message),1)]),_:1})]),_:1})):(g(),e(`span`,K,`-`))]),_:1}),y(u(j),null,{default:o(()=>[y(u(v),{variant:`ghost`,size:`sm`,onClick:l[2]||=e=>a(`openDetail`,t.log.id)},{default:o(()=>[w(p(u(c)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),Oe=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function ke(){let{t:e}=l(),r=n(`5h`),i=n({start:``,end:``}),a=n(`all`),o=n(`all`),s=n(`all`),c=n(`all`),u=n(`all`),d=n([]),p=n([]),m=n([]),h=f(()=>i.value.start&&i.value.end&&i.value.start<i.value.end),g=f(()=>{let{start:t,end:n}=i.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),v=f(()=>{if(a.value===`all`)return m.value;let e=d.value.find(e=>e.id===a.value);if(!e)return m.value;let t=new Set(e.models.map(e=>e.name));return m.value.filter(e=>t.has(e))}),y={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function x(){let e={};if(h.value)e.start_time=fe(i.value.start),e.end_time=z(i.value.end);else{let t=y[r.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return c.value!==`all`&&(e.api_type=c.value),a.value!==`all`&&(e.provider_id=a.value),o.value!==`all`&&(e.model=o.value),s.value!==`all`&&(e.router_key_id=s.value),u.value!==`all`&&(e.status_code=u.value),e}function S(){i.value={start:``,end:``}}async function C(){try{d.value=await _.getProviders()}catch(n){console.error(`Failed to load providers:`,n),F.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function w(){try{p.value=await _.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),F.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function ee(){try{let e=await _.getMetricsSummary({period:`30d`});m.value=[...new Set(e.rows.map(e=>e.backend_model))]}catch{m.value=[]}}return b(()=>{Promise.allSettled([C(),w(),ee()])}),{PERIODS:Oe,period:r,dateRange:i,dateRangeError:g,providerFilter:a,modelFilter:o,keyFilter:s,apiTypeFilter:c,statusFilter:u,providers:d,routerKeys:p,filteredModelOptions:v,hasDateRange:h,clearDateRange:S,buildFilterParams:x}}var q=20,J=864e5;function Ae(){let{t:e}=l(),r=n([]),i=n(0),a=n(1),o=n({}),s=n(30),c=n(!1),u=n(new Set),d=n({}),p=n({}),m=n(!1),h=n(null),g=f(()=>Math.ceil(i.value/q));async function v(n){n&&(o.value=n);try{let e=await _.getLogs({page:a.value,limit:q,view:`grouped`,...o.value});r.value=e.data,i.value=e.total,u.value.clear(),d.value={},p.value={}}catch(n){console.error(`Failed to load logs:`,n),F.error(t(n,e(`logs.messages.loadFailed`)))}}function y(e){e>=1&&e<=g.value&&e!==a.value&&(a.value=e,v())}let b=n(null),x=n(!1);async function S(){try{let e=new Date(Date.now()-s.value*J).toISOString(),t=await _.deleteLogsBefore(e);c.value=!1,a.value=1,await v(),b.value=t.deleted,x.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),F.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function C(n){let r=n.id;if(u.value.has(r)){u.value.delete(r);return}if(u.value.add(r),!d.value[r]){p.value[r]=!0;try{d.value[r]=await _.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),F.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{p.value[r]=!1}}}async function w(n){try{h.value=await _.getLogDetail(n),m.value=!0}catch(n){console.error(`Failed to load log detail:`,n),F.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:q,logs:r,total:i,page:a,totalPages:g,cleanupDays:s,showCleanup:c,expandedRows:u,childLogs:d,childLoading:p,logDetailOpen:m,selectedLogEntry:h,cleanupResult:b,showCleanupResult:x,loadLogs:v,goToPage:y,handleCleanup:S,toggleExpand:C,openLogDetail:w}}var je={class:`p-6`},Me={class:`flex items-center justify-between mb-4`},Ne={class:`text-lg font-semibold text-foreground`},Pe={class:`flex flex-wrap items-center gap-2 mb-4`},Fe={class:`flex gap-1`},Ie={class:`flex items-center gap-1`},Le={key:1,class:`text-xs text-destructive whitespace-nowrap`},Re={class:`bg-card rounded-lg border overflow-hidden`},ze={class:`flex items-center justify-between mt-4`},Be={class:`text-sm text-muted-foreground`},Ve={class:`flex items-center gap-1`},He={key:0,class:`px-2 text-sm text-muted-foreground`},Ue={class:`text-sm text-muted-foreground`},We={class:`mb-4`},Ge={class:`space-y-3`},Ke={class:`text-sm font-medium`},qe={class:`flex items-center gap-3`},Je={class:`text-xs text-muted-foreground`},Ye={class:`flex justify-end`},Xe=13,Ze=300,Qe=7,Y=2,X=1,$e=2e3,et=C({__name:`Logs`,setup(t){let{t:r}=l(),{PERIODS:i,period:_,dateRange:S,dateRangeError:C,providerFilter:T,modelFilter:E,keyFilter:D,statusFilter:O,providers:fe,routerKeys:_e,filteredModelOptions:F,clearDateRange:be,buildFilterParams:R}=ke(),{logs:z,total:Te,page:V,totalPages:H,cleanupDays:U,showCleanup:W,cleanupResult:Ee,showCleanupResult:G,expandedRows:K,childLogs:Oe,childLoading:q,logDetailOpen:J,selectedLogEntry:et,loadLogs:tt,goToPage:Z,handleCleanup:nt,toggleExpand:rt,openLogDetail:it}=Ae(),at=f(()=>{let e=H.value,t=V.value;if(e<=Qe)return Array.from({length:e},(e,t)=>t+1);let n=[X],r=Math.max(X+1,t-Y),i=Math.min(e-X,t+Y);r>X+Y&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-Y&&n.push(`...`),n.push(e),n}),{retentionDays:ot,retentionSaving:st,saveRetention:ct,loadRetention:lt}=Ce(),{copy:ut}=Se(),Q=n(null);function dt(e){ut(e),Q.value=e,setTimeout(()=>{Q.value===e&&(Q.value=null)},$e)}let $=null;return c([_,S,T,E,D,O],()=>{V.value=1,$&&clearTimeout($),$=setTimeout(()=>tt(R()),Ze)},{deep:!0}),b(()=>{tt(R()),lt()}),(t,n)=>(g(),e(`div`,je,[d(`div`,Me,[d(`h2`,Ne,p(u(r)(`logs.title`)),1),y(u(v),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:n[0]||=e=>W.value=!0},{default:o(()=>[w(p(u(r)(`logs.cleanupLogs`)),1)]),_:1})]),d(`div`,Pe,[d(`div`,Fe,[(g(!0),e(x,null,h(u(i),e=>(g(),m(u(v),{key:e.value,variant:u(_)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>_.value=e.value},{default:o(()=>[w(p(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),d(`div`,Ie,[y(u(B),{type:`datetime-local`,modelValue:u(S).start,"onUpdate:modelValue":n[1]||=e=>u(S).start=e,class:`w-44`},null,8,[`modelValue`]),n[18]||=d(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),y(u(B),{type:`datetime-local`,modelValue:u(S).end,"onUpdate:modelValue":n[2]||=e=>u(S).end=e,class:`w-44`},null,8,[`modelValue`]),u(S).start||u(S).end?(g(),m(u(v),{key:0,variant:`ghost`,size:`sm`,onClick:u(be)},{default:o(()=>[w(p(u(r)(`logs.clear`)),1)]),_:1},8,[`onClick`])):s(``,!0),u(C)?(g(),e(`span`,Le,p(u(C)),1)):s(``,!0)]),y(u(M),{modelValue:u(T),"onUpdate:modelValue":n[3]||=e=>a(T)?T.value=e:null},{default:o(()=>[y(u(I),{class:`w-28 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allProviders`)),1)]),_:1}),(g(!0),e(x,null,h(u(fe),e=>(g(),m(u(P),{key:e.id,value:e.id},{default:o(()=>[w(p(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),y(u(M),{modelValue:u(E),"onUpdate:modelValue":n[4]||=e=>a(E)?E.value=e:null},{default:o(()=>[y(u(I),{class:`w-32 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allModels`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allModels`)),1)]),_:1}),(g(!0),e(x,null,h(u(F),e=>(g(),m(u(P),{key:e,value:e},{default:o(()=>[w(p(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),y(u(M),{modelValue:u(D),"onUpdate:modelValue":n[5]||=e=>a(D)?D.value=e:null},{default:o(()=>[y(u(I),{class:`w-32 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allKeys`)),1)]),_:1}),(g(!0),e(x,null,h(u(_e),e=>(g(),m(u(P),{key:e.id,value:e.id},{default:o(()=>[w(p(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),y(u(M),{modelValue:u(O),"onUpdate:modelValue":n[6]||=e=>a(O)?O.value=e:null},{default:o(()=>[y(u(I),{class:`w-28 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allStatus`)),1)]),_:1}),y(u(P),{value:`200`},{default:o(()=>[...n[19]||=[w(`200`,-1)]]),_:1}),y(u(P),{value:`non200`},{default:o(()=>[w(p(u(r)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),d(`div`,Re,[y(u(ne),{"delay-duration":300},{default:o(()=>[y(u(ae),null,{default:o(()=>[y(u(le),null,{default:o(()=>[y(u(A),{class:`bg-muted`},{default:o(()=>[y(u(k),{class:`w-10`}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.id`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.time`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.type`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.model`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.actualForward`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.statusCode`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.latency`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.streaming`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.retry`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.failover`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.error`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),y(u(ie),null,{default:o(()=>[(g(!0),e(x,null,h(u(z),t=>(g(),e(x,{key:t.id},[y(De,{log:t,expanded:u(K).has(t.id),"copied-id":Q.value,onToggleExpand:u(rt),onOpenDetail:u(it),onCopy:dt},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),u(K).has(t.id)?(g(),e(x,{key:0},[u(q)[t.id]?(g(),m(u(A),{key:0},{default:o(()=>[y(u(j),{colspan:Xe,class:`text-center py-2 pl-10`},{default:o(()=>[y(u(we),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):u(Oe)[t.id]?.length?(g(!0),e(x,{key:1},h(u(Oe)[t.id],e=>(g(),m(De,{key:e.id,log:e,"is-child":!0,"copied-id":Q.value,onOpenDetail:u(it),onCopy:dt},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):s(``,!0)],64)):s(``,!0)],64))),128)),u(z).length===0?(g(),m(u(A),{key:0},{default:o(()=>[y(u(j),{colspan:Xe,class:`text-center text-muted-foreground py-8`},{default:o(()=>[w(p(u(r)(`logs.noLogs`)),1)]),_:1})]),_:1})):s(``,!0)]),_:1})]),_:1})]),_:1})]),d(`div`,ze,[d(`p`,Be,p(u(r)(`logs.pagination`,{total:u(Te),page:u(V),totalPages:u(H)})),1),d(`div`,Ve,[y(u(v),{variant:`outline`,size:`sm`,onClick:n[7]||=e=>u(Z)(1),disabled:u(V)<=1},{default:o(()=>[w(p(u(r)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),y(u(v),{variant:`outline`,size:`sm`,onClick:n[8]||=e=>u(Z)(u(V)-1),disabled:u(V)<=1},{default:o(()=>[w(p(u(r)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(g(!0),e(x,null,h(at.value,t=>(g(),e(x,{key:t},[t===`...`?(g(),e(`span`,He,`...`)):(g(),m(u(v),{key:1,variant:t===u(V)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:e=>u(Z)(t)},{default:o(()=>[w(p(t),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),y(u(v),{variant:`outline`,size:`sm`,onClick:n[9]||=e=>u(Z)(u(V)+1),disabled:u(V)>=u(H)},{default:o(()=>[w(p(u(r)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),y(u(v),{variant:`outline`,size:`sm`,onClick:n[10]||=e=>u(Z)(u(H)),disabled:u(V)>=u(H)},{default:o(()=>[w(p(u(r)(`logs.lastPage`)),1)]),_:1},8,[`disabled`]),n[20]||=w(` > `,-1)])]),y(te,{open:u(J),"onUpdate:open":n[11]||=e=>a(J)?J.value=e:null,source:`history`,"log-entry":u(et)},null,8,[`open`,`log-entry`]),y(u(se),{open:u(W),"onUpdate:open":n[15]||=e=>a(W)?W.value=e:null},{default:o(()=>[y(u(re),null,{default:o(()=>[y(u(oe),null,{default:o(()=>[y(u(ue),null,{default:o(()=>[w(p(u(r)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),d(`p`,Ue,p(u(r)(`logs.cleanup.description`)),1),d(`div`,We,[y(u(de),{class:`block text-sm font-medium text-foreground mb-1`},{default:o(()=>[w(p(u(r)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),y(u(B),{modelValue:u(U),"onUpdate:modelValue":n[12]||=e=>a(U)?U.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),y(u(ee)),d(`div`,Ge,[d(`div`,Ke,p(u(r)(`logs.cleanup.autoCleanup`)),1),d(`div`,qe,[y(u(de),{class:`whitespace-nowrap`},{default:o(()=>[w(p(u(r)(`logs.cleanup.retentionDays`)),1)]),_:1}),y(u(B),{type:`number`,modelValue:u(ot),"onUpdate:modelValue":n[13]||=e=>a(ot)?ot.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-20`},null,8,[`modelValue`]),d(`span`,Je,p(u(r)(`logs.cleanup.noAutoCleanup`)),1)]),d(`div`,Ye,[y(u(v),{size:`sm`,onClick:u(ct),disabled:u(st)},{default:o(()=>[w(p(u(r)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])])]),y(u(ce),null,{default:o(()=>[y(u(v),{variant:`outline`,onClick:n[14]||=e=>W.value=!1},{default:o(()=>[w(p(u(r)(`common.cancel`)),1)]),_:1}),y(u(v),{variant:`destructive`,onClick:u(nt)},{default:o(()=>[w(p(u(r)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),y(u(ge),{open:u(G),"onUpdate:open":n[17]||=e=>a(G)?G.value=e:null},{default:o(()=>[y(u(ve),null,{default:o(()=>[y(u(ye),null,{default:o(()=>[y(u(pe),null,{default:o(()=>[w(p(u(r)(`logs.cleanupResult.title`)),1)]),_:1}),y(u(me),null,{default:o(()=>[w(p(u(r)(`logs.cleanupResult.description`,{count:u(Ee)})),1)]),_:1})]),_:1}),y(u(xe),null,{default:o(()=>[y(u(he),{onClick:n[16]||=e=>G.value=!1},{default:o(()=>[w(p(u(r)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{et as default};
1
+ import{$ as e,A as t,It as n,K as r,Kt as i,Mt as a,Ot as o,Q as s,Tt as c,V as l,Wt as u,X as d,Y as f,Yt as p,Z as m,_t as h,ht as g,k as _,n as v,nt as y,pt as b,q as x,r as S,rt as C,tt as w}from"./button-BaNRw0cF.js";import{r as ee,t as te}from"./UnifiedRequestDialog-DWUXdfWY.js";import{t as T}from"./copy-Dbl7J0Cg.js";import{i as E,n as ne,r as D,t as O}from"./TooltipTrigger-CpHXgQxI.js";import{a as re,c as k,d as ie,f as ae,l as A,n as oe,o as se,r as ce,s as le,t as ue,u as j}from"./dialog-D_OkVkI9.js";import{t as de}from"./Label-_o2ZnCRD.js";import{St as fe,_ as M,a as pe,c as me,d as he,f as ge,g as N,gt as _e,h as P,i as F,l as ve,m as I,o as ye,p as L,pt as be,s as xe,x as R,xt as z}from"./index-COoySiAr.js";import{t as B}from"./Input-CQAFlthI.js";import{t as Se}from"./useClipboard-D_jpOvnE.js";import{t as Ce}from"./useLogRetention-DnSxnecs.js";var we=C({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t;return(t,r)=>(g(),e(`div`,{"data-slot":`skeleton`,class:i(u(S)(`bg-muted rounded-md animate-pulse`,n.class))},null,2))}}),Te={key:1,class:`ml-4 text-muted-foreground text-xs`},V={class:`inline-flex items-center gap-1`},H={class:`font-mono`},U={key:2,class:`text-muted-foreground`},W={key:1,class:`text-muted-foreground`},Ee={key:1,class:`text-muted-foreground`},G={class:`block truncate`},K={key:1,class:`text-muted-foreground`},De=C({__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 a=n,{t:c}=l();function f(e){if(!e)return c(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return c(`logs.row.unknown`)}}return(n,l)=>(g(),m(u(A),{class:i({"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild})},{default:o(()=>[y(u(j),{class:`w-10`},{default:o(()=>[!t.isChild&&t.log.child_count?(g(),m(u(v),{key:0,variant:`ghost`,size:`xs`,onClick:l[0]||=e=>a(`toggleExpand`,t.log)},{default:o(()=>[d(`span`,{class:i([`text-xs transition-transform`,t.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):s(``,!0),t.isChild?(g(),e(`span`,Te,`└`)):s(``,!0)]),_:1}),y(u(j),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:o(()=>[d(`span`,V,[w(p(t.log.id.slice(0,8))+` `,1),y(u(E),{"delay-duration":300},{default:o(()=>[y(u(O),{"as-child":``},{default:o(()=>[y(u(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:l[1]||=r(e=>a(`copy`,t.log.id),[`stop`])},{default:o(()=>[t.copiedId===t.log.id?(g(),m(u(be),{key:0,class:`size-3 text-success`})):(g(),m(u(T),{key:1,class:`size-3`}))]),_:1})]),_:1}),y(u(D),null,{default:o(()=>[w(p(u(c)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})])]),_:1},8,[`title`]),y(u(j),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(_e)(t.log.created_at)),1)]),_:1}),y(u(j),null,{default:o(()=>[y(u(R),{variant:t.log.api_type===`openai`?`default`:`secondary`},{default:o(()=>[w(p(t.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),y(u(j),{class:`font-mono text-xs`},{default:o(()=>[w(p(t.log.model||`-`)+` `,1),!t.isChild&&t.log.original_model?(g(),m(u(R),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:o(()=>[w(p(u(c)(`logs.row.replaced`)),1)]),_:1})):s(``,!0)]),_:1}),y(u(j),{class:`text-xs`},{default:o(()=>[!t.isChild&&t.log.provider_id===u(`router`)?(g(),m(u(R),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:o(()=>[w(p(u(c)(`logs.row.proxyEnhancement`,{label:f(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(g(),e(x,{key:1},[d(`span`,H,p(t.log.backend_model||`-`),1),l[3]||=d(`span`,{class:`text-muted-foreground`},` @ `,-1),y(u(R),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:o(()=>[w(p(t.log.provider_name||t.log.provider_id||`-`),1)]),_:1})],64)):(g(),e(`span`,U,`-`))]),_:1}),y(u(j),null,{default:o(()=>[y(u(R),{variant:(t.log.status_code??0)<400?`default`:`destructive`},{default:o(()=>[w(p(t.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),y(u(j),null,{default:o(()=>[w(p(t.log.latency_ms?t.log.latency_ms+`ms`:`-`),1)]),_:1}),y(u(j),null,{default:o(()=>[w(p(t.log.is_stream?`Yes`:`No`),1)]),_:1}),y(u(j),null,{default:o(()=>[t.log.is_retry?(g(),m(u(R),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:o(()=>[w(p(u(c)(`logs.table.retry`)),1)]),_:1})):(g(),e(`span`,W,`-`))]),_:1}),y(u(j),null,{default:o(()=>[t.log.is_failover?(g(),m(u(R),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:o(()=>[w(p(u(c)(`logs.table.failover`)),1)]),_:1})):(g(),e(`span`,Ee,`-`))]),_:1}),y(u(j),{class:`text-destructive text-xs max-w-[200px]`},{default:o(()=>[t.log.error_message?(g(),m(u(E),{key:0,"delay-duration":300},{default:o(()=>[y(u(O),{"as-child":``},{default:o(()=>[d(`span`,G,p(t.log.error_message),1)]),_:1}),y(u(D),{class:`max-w-sm whitespace-pre-wrap`},{default:o(()=>[w(p(t.log.error_message),1)]),_:1})]),_:1})):(g(),e(`span`,K,`-`))]),_:1}),y(u(j),null,{default:o(()=>[y(u(v),{variant:`ghost`,size:`sm`,onClick:l[2]||=e=>a(`openDetail`,t.log.id)},{default:o(()=>[w(p(u(c)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),Oe=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function ke(){let{t:e}=l(),r=n(`5h`),i=n({start:``,end:``}),a=n(`all`),o=n(`all`),s=n(`all`),c=n(`all`),u=n(`all`),d=n([]),p=n([]),m=n([]),h=f(()=>i.value.start&&i.value.end&&i.value.start<i.value.end),g=f(()=>{let{start:t,end:n}=i.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),v=f(()=>{if(a.value===`all`)return m.value;let e=d.value.find(e=>e.id===a.value);if(!e)return m.value;let t=new Set(e.models.map(e=>e.name));return m.value.filter(e=>t.has(e))}),y={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function x(){let e={};if(h.value)e.start_time=fe(i.value.start),e.end_time=z(i.value.end);else{let t=y[r.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return c.value!==`all`&&(e.api_type=c.value),a.value!==`all`&&(e.provider_id=a.value),o.value!==`all`&&(e.model=o.value),s.value!==`all`&&(e.router_key_id=s.value),u.value!==`all`&&(e.status_code=u.value),e}function S(){i.value={start:``,end:``}}async function C(){try{d.value=await _.getProviders()}catch(n){console.error(`Failed to load providers:`,n),F.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function w(){try{p.value=await _.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),F.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function ee(){try{let e=await _.getMetricsSummary({period:`30d`});m.value=[...new Set(e.rows.map(e=>e.backend_model))]}catch{m.value=[]}}return b(()=>{Promise.allSettled([C(),w(),ee()])}),{PERIODS:Oe,period:r,dateRange:i,dateRangeError:g,providerFilter:a,modelFilter:o,keyFilter:s,apiTypeFilter:c,statusFilter:u,providers:d,routerKeys:p,filteredModelOptions:v,hasDateRange:h,clearDateRange:S,buildFilterParams:x}}var q=20,J=864e5;function Ae(){let{t:e}=l(),r=n([]),i=n(0),a=n(1),o=n({}),s=n(30),c=n(!1),u=n(new Set),d=n({}),p=n({}),m=n(!1),h=n(null),g=f(()=>Math.ceil(i.value/q));async function v(n){n&&(o.value=n);try{let e=await _.getLogs({page:a.value,limit:q,view:`grouped`,...o.value});r.value=e.data,i.value=e.total,u.value.clear(),d.value={},p.value={}}catch(n){console.error(`Failed to load logs:`,n),F.error(t(n,e(`logs.messages.loadFailed`)))}}function y(e){e>=1&&e<=g.value&&e!==a.value&&(a.value=e,v())}let b=n(null),x=n(!1);async function S(){try{let e=new Date(Date.now()-s.value*J).toISOString(),t=await _.deleteLogsBefore(e);c.value=!1,a.value=1,await v(),b.value=t.deleted,x.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),F.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function C(n){let r=n.id;if(u.value.has(r)){u.value.delete(r);return}if(u.value.add(r),!d.value[r]){p.value[r]=!0;try{d.value[r]=await _.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),F.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{p.value[r]=!1}}}async function w(n){try{h.value=await _.getLogDetail(n),m.value=!0}catch(n){console.error(`Failed to load log detail:`,n),F.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:q,logs:r,total:i,page:a,totalPages:g,cleanupDays:s,showCleanup:c,expandedRows:u,childLogs:d,childLoading:p,logDetailOpen:m,selectedLogEntry:h,cleanupResult:b,showCleanupResult:x,loadLogs:v,goToPage:y,handleCleanup:S,toggleExpand:C,openLogDetail:w}}var je={class:`p-6`},Me={class:`flex items-center justify-between mb-4`},Ne={class:`text-lg font-semibold text-foreground`},Pe={class:`flex flex-wrap items-center gap-2 mb-4`},Fe={class:`flex gap-1`},Ie={class:`flex items-center gap-1`},Le={key:1,class:`text-xs text-destructive whitespace-nowrap`},Re={class:`bg-card rounded-lg border overflow-hidden`},ze={class:`flex items-center justify-between mt-4`},Be={class:`text-sm text-muted-foreground`},Ve={class:`flex items-center gap-1`},He={key:0,class:`px-2 text-sm text-muted-foreground`},Ue={class:`text-sm text-muted-foreground`},We={class:`mb-4`},Ge={class:`space-y-3`},Ke={class:`text-sm font-medium`},qe={class:`flex items-center gap-3`},Je={class:`text-xs text-muted-foreground`},Ye={class:`flex justify-end`},Xe=13,Ze=300,Qe=7,Y=2,X=1,$e=2e3,et=C({__name:`Logs`,setup(t){let{t:r}=l(),{PERIODS:i,period:_,dateRange:S,dateRangeError:C,providerFilter:T,modelFilter:E,keyFilter:D,statusFilter:O,providers:fe,routerKeys:_e,filteredModelOptions:F,clearDateRange:be,buildFilterParams:R}=ke(),{logs:z,total:Te,page:V,totalPages:H,cleanupDays:U,showCleanup:W,cleanupResult:Ee,showCleanupResult:G,expandedRows:K,childLogs:Oe,childLoading:q,logDetailOpen:J,selectedLogEntry:et,loadLogs:tt,goToPage:Z,handleCleanup:nt,toggleExpand:rt,openLogDetail:it}=Ae(),at=f(()=>{let e=H.value,t=V.value;if(e<=Qe)return Array.from({length:e},(e,t)=>t+1);let n=[X],r=Math.max(X+1,t-Y),i=Math.min(e-X,t+Y);r>X+Y&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-Y&&n.push(`...`),n.push(e),n}),{retentionDays:ot,retentionSaving:st,saveRetention:ct,loadRetention:lt}=Ce(),{copy:ut}=Se(),Q=n(null);function dt(e){ut(e),Q.value=e,setTimeout(()=>{Q.value===e&&(Q.value=null)},$e)}let $=null;return c([_,S,T,E,D,O],()=>{V.value=1,$&&clearTimeout($),$=setTimeout(()=>tt(R()),Ze)},{deep:!0}),b(()=>{tt(R()),lt()}),(t,n)=>(g(),e(`div`,je,[d(`div`,Me,[d(`h2`,Ne,p(u(r)(`logs.title`)),1),y(u(v),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:n[0]||=e=>W.value=!0},{default:o(()=>[w(p(u(r)(`logs.cleanupLogs`)),1)]),_:1})]),d(`div`,Pe,[d(`div`,Fe,[(g(!0),e(x,null,h(u(i),e=>(g(),m(u(v),{key:e.value,variant:u(_)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>_.value=e.value},{default:o(()=>[w(p(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),d(`div`,Ie,[y(u(B),{type:`datetime-local`,modelValue:u(S).start,"onUpdate:modelValue":n[1]||=e=>u(S).start=e,class:`w-44`},null,8,[`modelValue`]),n[18]||=d(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),y(u(B),{type:`datetime-local`,modelValue:u(S).end,"onUpdate:modelValue":n[2]||=e=>u(S).end=e,class:`w-44`},null,8,[`modelValue`]),u(S).start||u(S).end?(g(),m(u(v),{key:0,variant:`ghost`,size:`sm`,onClick:u(be)},{default:o(()=>[w(p(u(r)(`logs.clear`)),1)]),_:1},8,[`onClick`])):s(``,!0),u(C)?(g(),e(`span`,Le,p(u(C)),1)):s(``,!0)]),y(u(M),{modelValue:u(T),"onUpdate:modelValue":n[3]||=e=>a(T)?T.value=e:null},{default:o(()=>[y(u(I),{class:`w-28 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allProviders`)),1)]),_:1}),(g(!0),e(x,null,h(u(fe),e=>(g(),m(u(P),{key:e.id,value:e.id},{default:o(()=>[w(p(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),y(u(M),{modelValue:u(E),"onUpdate:modelValue":n[4]||=e=>a(E)?E.value=e:null},{default:o(()=>[y(u(I),{class:`w-32 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allModels`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allModels`)),1)]),_:1}),(g(!0),e(x,null,h(u(F),e=>(g(),m(u(P),{key:e,value:e},{default:o(()=>[w(p(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),y(u(M),{modelValue:u(D),"onUpdate:modelValue":n[5]||=e=>a(D)?D.value=e:null},{default:o(()=>[y(u(I),{class:`w-32 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allKeys`)),1)]),_:1}),(g(!0),e(x,null,h(u(_e),e=>(g(),m(u(P),{key:e.id,value:e.id},{default:o(()=>[w(p(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),y(u(M),{modelValue:u(O),"onUpdate:modelValue":n[6]||=e=>a(O)?O.value=e:null},{default:o(()=>[y(u(I),{class:`w-28 truncate`},{default:o(()=>[y(u(L),{placeholder:u(r)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),y(u(N),null,{default:o(()=>[y(u(P),{value:`all`},{default:o(()=>[w(p(u(r)(`logs.allStatus`)),1)]),_:1}),y(u(P),{value:`200`},{default:o(()=>[...n[19]||=[w(`200`,-1)]]),_:1}),y(u(P),{value:`non200`},{default:o(()=>[w(p(u(r)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),d(`div`,Re,[y(u(ne),{"delay-duration":300},{default:o(()=>[y(u(ae),null,{default:o(()=>[y(u(le),null,{default:o(()=>[y(u(A),{class:`bg-muted`},{default:o(()=>[y(u(k),{class:`w-10`}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.id`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.time`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.type`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.model`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.actualForward`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.statusCode`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.latency`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.streaming`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.retry`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.failover`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.error`)),1)]),_:1}),y(u(k),{class:`text-muted-foreground`},{default:o(()=>[w(p(u(r)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),y(u(ie),null,{default:o(()=>[(g(!0),e(x,null,h(u(z),t=>(g(),e(x,{key:t.id},[y(De,{log:t,expanded:u(K).has(t.id),"copied-id":Q.value,onToggleExpand:u(rt),onOpenDetail:u(it),onCopy:dt},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),u(K).has(t.id)?(g(),e(x,{key:0},[u(q)[t.id]?(g(),m(u(A),{key:0},{default:o(()=>[y(u(j),{colspan:Xe,class:`text-center py-2 pl-10`},{default:o(()=>[y(u(we),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):u(Oe)[t.id]?.length?(g(!0),e(x,{key:1},h(u(Oe)[t.id],e=>(g(),m(De,{key:e.id,log:e,"is-child":!0,"copied-id":Q.value,onOpenDetail:u(it),onCopy:dt},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):s(``,!0)],64)):s(``,!0)],64))),128)),u(z).length===0?(g(),m(u(A),{key:0},{default:o(()=>[y(u(j),{colspan:Xe,class:`text-center text-muted-foreground py-8`},{default:o(()=>[w(p(u(r)(`logs.noLogs`)),1)]),_:1})]),_:1})):s(``,!0)]),_:1})]),_:1})]),_:1})]),d(`div`,ze,[d(`p`,Be,p(u(r)(`logs.pagination`,{total:u(Te),page:u(V),totalPages:u(H)})),1),d(`div`,Ve,[y(u(v),{variant:`outline`,size:`sm`,onClick:n[7]||=e=>u(Z)(1),disabled:u(V)<=1},{default:o(()=>[w(p(u(r)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),y(u(v),{variant:`outline`,size:`sm`,onClick:n[8]||=e=>u(Z)(u(V)-1),disabled:u(V)<=1},{default:o(()=>[w(p(u(r)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(g(!0),e(x,null,h(at.value,t=>(g(),e(x,{key:t},[t===`...`?(g(),e(`span`,He,`...`)):(g(),m(u(v),{key:1,variant:t===u(V)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:e=>u(Z)(t)},{default:o(()=>[w(p(t),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),y(u(v),{variant:`outline`,size:`sm`,onClick:n[9]||=e=>u(Z)(u(V)+1),disabled:u(V)>=u(H)},{default:o(()=>[w(p(u(r)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),y(u(v),{variant:`outline`,size:`sm`,onClick:n[10]||=e=>u(Z)(u(H)),disabled:u(V)>=u(H)},{default:o(()=>[w(p(u(r)(`logs.lastPage`)),1)]),_:1},8,[`disabled`]),n[20]||=w(` > `,-1)])]),y(te,{open:u(J),"onUpdate:open":n[11]||=e=>a(J)?J.value=e:null,source:`history`,"log-entry":u(et)},null,8,[`open`,`log-entry`]),y(u(se),{open:u(W),"onUpdate:open":n[15]||=e=>a(W)?W.value=e:null},{default:o(()=>[y(u(re),null,{default:o(()=>[y(u(oe),null,{default:o(()=>[y(u(ue),null,{default:o(()=>[w(p(u(r)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),d(`p`,Ue,p(u(r)(`logs.cleanup.description`)),1),d(`div`,We,[y(u(de),{class:`block text-sm font-medium text-foreground mb-1`},{default:o(()=>[w(p(u(r)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),y(u(B),{modelValue:u(U),"onUpdate:modelValue":n[12]||=e=>a(U)?U.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),y(u(ee)),d(`div`,Ge,[d(`div`,Ke,p(u(r)(`logs.cleanup.autoCleanup`)),1),d(`div`,qe,[y(u(de),{class:`whitespace-nowrap`},{default:o(()=>[w(p(u(r)(`logs.cleanup.retentionDays`)),1)]),_:1}),y(u(B),{type:`number`,modelValue:u(ot),"onUpdate:modelValue":n[13]||=e=>a(ot)?ot.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-20`},null,8,[`modelValue`]),d(`span`,Je,p(u(r)(`logs.cleanup.noAutoCleanup`)),1)]),d(`div`,Ye,[y(u(v),{size:`sm`,onClick:u(ct),disabled:u(st)},{default:o(()=>[w(p(u(r)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])])]),y(u(ce),null,{default:o(()=>[y(u(v),{variant:`outline`,onClick:n[14]||=e=>W.value=!1},{default:o(()=>[w(p(u(r)(`common.cancel`)),1)]),_:1}),y(u(v),{variant:`destructive`,onClick:u(nt)},{default:o(()=>[w(p(u(r)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),y(u(ge),{open:u(G),"onUpdate:open":n[17]||=e=>a(G)?G.value=e:null},{default:o(()=>[y(u(ve),null,{default:o(()=>[y(u(ye),null,{default:o(()=>[y(u(pe),null,{default:o(()=>[w(p(u(r)(`logs.cleanupResult.title`)),1)]),_:1}),y(u(me),null,{default:o(()=>[w(p(u(r)(`logs.cleanupResult.description`,{count:u(Ee)})),1)]),_:1})]),_:1}),y(u(xe),null,{default:o(()=>[y(u(he),{onClick:n[16]||=e=>G.value=!1},{default:o(()=>[w(p(u(r)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{et as default};
@@ -1 +1 @@
1
- import{$ as e,I as t,Kt as n,Ot as r,Q as i,V as a,Wt as o,X as s,Yt as c,Z as l,_t as u,ht as d,n as f,nt as p,q as m,rt as h,tt as g}from"./button-CSFUPP0s.js";import{n as _,t as v}from"./CascadingModelSelect-C0yNZoXy.js";import{t as y}from"./trash-2-2cawWyKR.js";import{i as b,n as x,r as ee,t as te}from"./TooltipTrigger-qc84ev_b.js";import{t as ne}from"./Input-Bu0i-HPR.js";var S=t(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),C=t(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),w=t(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),T={key:0,class:`flex items-start gap-3`},E=[`title`],D={class:`flex-1 flex flex-col gap-0 min-w-0`},O={class:`font-mono truncate`},k={class:`text-[10px] px-1 py-px rounded bg-muted/50 text-muted-foreground/50 shrink-0`},A={key:0,class:`text-[10px] px-1 py-px rounded bg-blue-500/10 text-blue-500/60 flex items-center gap-0.5 shrink-0`},j={key:0,class:`flex items-center gap-1 pl-5 py-0.5`},M={class:`text-[9px] text-orange-400/50`},N={key:0,class:`flex items-center gap-1.5 mt-1 pt-1.5 border-t border-dashed border-primary/10`},P={class:`text-[10px] text-primary/30`},F={class:`font-mono text-xs text-primary/50`},I={key:1,class:`space-y-1.5`},L={key:0,class:`flex items-center gap-2`},re={key:1,class:`flex items-center gap-2 px-2.5 py-1.5 rounded-md bg-muted/20 border border-border/50`},R={class:`font-mono text-sm font-medium text-foreground truncate`},z={class:`flex items-center gap-2`},B={class:`flex-1`},V={key:0,class:`flex items-center gap-1 pl-8 py-0.5`},H={class:`text-[9px] text-orange-400/50`},U={class:`pt-2 mt-1 border-t border-dashed border-primary/15 space-y-1.5`},W={key:0,class:`flex items-center gap-2`},G={class:`text-[10px] w-6 text-center px-1 py-0.5 rounded bg-primary/10 text-primary/70 shrink-0`},K={class:`flex-1`},q={key:1,class:`flex items-center gap-1.5`},J=6,Y=h({__name:`MappingEntryEditor`,props:{entry:{},providerGroups:{},expanded:{type:Boolean},editable:{type:Boolean,default:!0},editableClientModel:{type:Boolean,default:!1}},emits:[`update:targets`,`update:clientModel`],setup(t,{emit:h}){let{t:Y}=a(),X=t,Z=h;function ie(e){return X.providerGroups.find(t=>t.provider.id===e)?.provider.name??e.slice(0,J)}function Q(e,t){return X.providerGroups.find(t=>t.provider.id===e)?.models.find(e=>e.name===t)?.streamTimeoutMs}function ae(){let e=X.providerGroups[0];Z(`update:targets`,[...X.entry.targets,{backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``}])}function oe(){let e=X.providerGroups[0];Z(`update:targets`,X.entry.targets.map((t,n)=>n===0?{...t,overflow_provider_id:e?.provider.id??``,overflow_model:e?.models[0]?.name??``}:t))}function se(e){X.entry.targets.length<=1||Z(`update:targets`,X.entry.targets.filter((t,n)=>n!==e))}function ce(e,t){let n=[...X.entry.targets];n[e]={...n[e],provider_id:t.provider_id,backend_model:t.model},Z(`update:targets`,n)}function $(e){Z(`update:targets`,X.entry.targets.map((t,n)=>{if(n===0){if(e)return{...t,overflow_provider_id:e.provider_id,overflow_model:e.model};{let{overflow_provider_id:e,overflow_model:n,...r}=t;return r}}return t}))}return(a,h)=>(d(),e(`div`,null,[t.expanded?(d(),e(`div`,I,[t.editableClientModel?(d(),e(`div`,L,[h[5]||=s(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0 w-6 text-center`},`Client`,-1),p(o(ne),{"model-value":t.entry.clientModel,class:`h-7 flex-1 text-xs font-mono`,placeholder:o(Y)(`providers.shared.clientModel`),"onUpdate:modelValue":h[0]||=e=>Z(`update:clientModel`,String(e))},null,8,[`model-value`,`placeholder`])])):(d(),e(`div`,re,[h[6]||=s(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0`},`Client`,-1),s(`span`,R,c(t.entry.clientModel),1)])),(d(!0),e(m,null,u(t.entry.targets,(a,u)=>(d(),e(`div`,{key:u},[s(`div`,z,[s(`span`,{class:n([`text-xs font-medium shrink-0 w-6 text-center px-1 py-0.5 rounded`,u===0?`bg-primary/10 text-primary`:`bg-muted/30 text-muted-foreground`])},c(u===0?`①`:u===1?`②`:u===2?`③`:`${u+1}`),3),s(`div`,B,[p(v,{providers:t.providerGroups,"model-value":{provider_id:a.provider_id,model:a.backend_model},compact:``,placeholder:o(Y)(`providers.shared.selectModel`),"onUpdate:modelValue":e=>ce(u,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),u>0&&t.entry.targets.length>1?(d(),l(o(f),{key:0,type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:e=>se(u)},{default:r(()=>[p(o(y),{class:`size-3`})]),_:1},8,[`onClick`])):i(``,!0)]),u<t.entry.targets.length-1?(d(),e(`div`,V,[h[7]||=s(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),s(`span`,H,c(o(Y)(`providers.shared.switchOnFail`)),1)])):i(``,!0)]))),128)),p(o(f),{type:`button`,variant:`ghost`,size:`sm`,class:`w-full text-xs text-muted-foreground/50`,onClick:ae},{default:r(()=>[p(o(_),{class:`w-3 h-3 mr-1`}),g(` `+c(t.entry.targets.length===0?o(Y)(`providers.shared.addMappingModel`):o(Y)(`providers.shared.addFailover`)),1)]),_:1}),s(`div`,U,[t.entry.targets[0]?.overflow_model?(d(),e(`div`,W,[s(`span`,G,c(o(Y)(`providers.shared.overflow`)),1),s(`div`,K,[p(v,{providers:t.providerGroups,"model-value":t.entry.targets[0]?.overflow_provider_id&&t.entry.targets[0]?.overflow_model?{provider_id:t.entry.targets[0].overflow_provider_id,model:t.entry.targets[0].overflow_model}:void 0,compact:``,placeholder:o(Y)(`providers.shared.overflowPlaceholder`),"onUpdate:modelValue":h[1]||=e=>$(e)},null,8,[`providers`,`model-value`,`placeholder`])]),p(o(f),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:h[2]||=e=>$(void 0)},{default:r(()=>[p(o(y),{class:`size-3`})]),_:1})])):(d(),e(`div`,q,[p(o(f),{type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:oe},{default:r(()=>[p(o(_),{class:`w-3 h-3 mr-1`}),g(` `+c(o(Y)(`providers.shared.addOverflow`)),1)]),_:1}),p(o(x),{"delay-duration":200},{default:r(()=>[p(o(b),null,{default:r(()=>[p(o(te),{"as-child":``},{default:r(()=>[p(o(C),{class:`size-3 text-muted-foreground/30 cursor-help`})]),_:1}),p(o(ee),{side:`top`,class:`max-w-[240px] text-xs`},{default:r(()=>[g(c(o(Y)(`providers.shared.overflowTooltip`)),1)]),_:1})]),_:1})]),_:1})]))])])):(d(),e(`div`,T,[s(`span`,{class:`min-w-[90px] font-mono text-sm font-semibold text-foreground shrink-0 truncate`,title:t.entry.clientModel},c(t.entry.clientModel),9,E),p(o(S),{class:`size-3.5 mt-0.5 shrink-0 text-muted-foreground/30`}),s(`div`,D,[(d(!0),e(m,null,u(t.entry.targets,(r,a)=>(d(),e(`div`,{key:a},[s(`div`,{class:n([`flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm`,a===0?`bg-primary/10 border border-primary/20 text-primary`:`bg-muted/30 border border-border text-muted-foreground`])},[s(`span`,{class:n([`text-[10px] font-semibold w-3.5 text-center`,a===0?`text-primary`:`text-muted-foreground`])},c(a===0?`①`:a===1?`②`:a===2?`③`:`${a+1}`),3),s(`span`,O,c(r.backend_model),1),s(`span`,k,c(ie(r.provider_id)),1),Q(r.provider_id,r.backend_model)?(d(),e(`span`,A,[p(o(w),{class:`size-2.5`}),g(` `+c(Math.round(Q(r.provider_id,r.backend_model)/1e3))+`s `,1)])):i(``,!0)],2),a<t.entry.targets.length-1?(d(),e(`div`,j,[h[3]||=s(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),s(`span`,M,c(o(Y)(`providers.shared.switchOnFail`)),1)])):i(``,!0)]))),128)),t.entry.targets[0]?.overflow_model?(d(),e(`div`,N,[h[4]||=s(`span`,{class:`text-[10px] text-primary/40 w-3.5 text-center`},`⤵`,-1),s(`span`,P,c(o(Y)(`providers.shared.overflow`)),1),s(`span`,F,c(t.entry.targets[0].overflow_model),1)])):i(``,!0)])]))]))}});export{Y as t};
1
+ import{$ as e,I as t,Kt as n,Ot as r,Q as i,V as a,Wt as o,X as s,Yt as c,Z as l,_t as u,ht as d,n as f,nt as p,q as m,rt as h,tt as g}from"./button-BaNRw0cF.js";import{n as _,t as v}from"./CascadingModelSelect-CubFNL5Z.js";import{t as y}from"./trash-2-DvEWr8UB.js";import{i as b,n as x,r as ee,t as te}from"./TooltipTrigger-CpHXgQxI.js";import{t as ne}from"./Input-CQAFlthI.js";var S=t(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),C=t(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),w=t(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),T={key:0,class:`flex items-start gap-3`},E=[`title`],D={class:`flex-1 flex flex-col gap-0 min-w-0`},O={class:`font-mono truncate`},k={class:`text-[10px] px-1 py-px rounded bg-muted/50 text-muted-foreground/50 shrink-0`},A={key:0,class:`text-[10px] px-1 py-px rounded bg-blue-500/10 text-blue-500/60 flex items-center gap-0.5 shrink-0`},j={key:0,class:`flex items-center gap-1 pl-5 py-0.5`},M={class:`text-[9px] text-orange-400/50`},N={key:0,class:`flex items-center gap-1.5 mt-1 pt-1.5 border-t border-dashed border-primary/10`},P={class:`text-[10px] text-primary/30`},F={class:`font-mono text-xs text-primary/50`},I={key:1,class:`space-y-1.5`},L={key:0,class:`flex items-center gap-2`},re={key:1,class:`flex items-center gap-2 px-2.5 py-1.5 rounded-md bg-muted/20 border border-border/50`},R={class:`font-mono text-sm font-medium text-foreground truncate`},z={class:`flex items-center gap-2`},B={class:`flex-1`},V={key:0,class:`flex items-center gap-1 pl-8 py-0.5`},H={class:`text-[9px] text-orange-400/50`},U={class:`pt-2 mt-1 border-t border-dashed border-primary/15 space-y-1.5`},W={key:0,class:`flex items-center gap-2`},G={class:`text-[10px] w-6 text-center px-1 py-0.5 rounded bg-primary/10 text-primary/70 shrink-0`},K={class:`flex-1`},q={key:1,class:`flex items-center gap-1.5`},J=6,Y=h({__name:`MappingEntryEditor`,props:{entry:{},providerGroups:{},expanded:{type:Boolean},editable:{type:Boolean,default:!0},editableClientModel:{type:Boolean,default:!1}},emits:[`update:targets`,`update:clientModel`],setup(t,{emit:h}){let{t:Y}=a(),X=t,Z=h;function ie(e){return X.providerGroups.find(t=>t.provider.id===e)?.provider.name??e.slice(0,J)}function Q(e,t){return X.providerGroups.find(t=>t.provider.id===e)?.models.find(e=>e.name===t)?.streamTimeoutMs}function ae(){let e=X.providerGroups[0];Z(`update:targets`,[...X.entry.targets,{backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``}])}function oe(){let e=X.providerGroups[0];Z(`update:targets`,X.entry.targets.map((t,n)=>n===0?{...t,overflow_provider_id:e?.provider.id??``,overflow_model:e?.models[0]?.name??``}:t))}function se(e){X.entry.targets.length<=1||Z(`update:targets`,X.entry.targets.filter((t,n)=>n!==e))}function ce(e,t){let n=[...X.entry.targets];n[e]={...n[e],provider_id:t.provider_id,backend_model:t.model},Z(`update:targets`,n)}function $(e){Z(`update:targets`,X.entry.targets.map((t,n)=>{if(n===0){if(e)return{...t,overflow_provider_id:e.provider_id,overflow_model:e.model};{let{overflow_provider_id:e,overflow_model:n,...r}=t;return r}}return t}))}return(a,h)=>(d(),e(`div`,null,[t.expanded?(d(),e(`div`,I,[t.editableClientModel?(d(),e(`div`,L,[h[5]||=s(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0 w-6 text-center`},`Client`,-1),p(o(ne),{"model-value":t.entry.clientModel,class:`h-7 flex-1 text-xs font-mono`,placeholder:o(Y)(`providers.shared.clientModel`),"onUpdate:modelValue":h[0]||=e=>Z(`update:clientModel`,String(e))},null,8,[`model-value`,`placeholder`])])):(d(),e(`div`,re,[h[6]||=s(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0`},`Client`,-1),s(`span`,R,c(t.entry.clientModel),1)])),(d(!0),e(m,null,u(t.entry.targets,(a,u)=>(d(),e(`div`,{key:u},[s(`div`,z,[s(`span`,{class:n([`text-xs font-medium shrink-0 w-6 text-center px-1 py-0.5 rounded`,u===0?`bg-primary/10 text-primary`:`bg-muted/30 text-muted-foreground`])},c(u===0?`①`:u===1?`②`:u===2?`③`:`${u+1}`),3),s(`div`,B,[p(v,{providers:t.providerGroups,"model-value":{provider_id:a.provider_id,model:a.backend_model},compact:``,placeholder:o(Y)(`providers.shared.selectModel`),"onUpdate:modelValue":e=>ce(u,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),u>0&&t.entry.targets.length>1?(d(),l(o(f),{key:0,type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:e=>se(u)},{default:r(()=>[p(o(y),{class:`size-3`})]),_:1},8,[`onClick`])):i(``,!0)]),u<t.entry.targets.length-1?(d(),e(`div`,V,[h[7]||=s(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),s(`span`,H,c(o(Y)(`providers.shared.switchOnFail`)),1)])):i(``,!0)]))),128)),p(o(f),{type:`button`,variant:`ghost`,size:`sm`,class:`w-full text-xs text-muted-foreground/50`,onClick:ae},{default:r(()=>[p(o(_),{class:`w-3 h-3 mr-1`}),g(` `+c(t.entry.targets.length===0?o(Y)(`providers.shared.addMappingModel`):o(Y)(`providers.shared.addFailover`)),1)]),_:1}),s(`div`,U,[t.entry.targets[0]?.overflow_model?(d(),e(`div`,W,[s(`span`,G,c(o(Y)(`providers.shared.overflow`)),1),s(`div`,K,[p(v,{providers:t.providerGroups,"model-value":t.entry.targets[0]?.overflow_provider_id&&t.entry.targets[0]?.overflow_model?{provider_id:t.entry.targets[0].overflow_provider_id,model:t.entry.targets[0].overflow_model}:void 0,compact:``,placeholder:o(Y)(`providers.shared.overflowPlaceholder`),"onUpdate:modelValue":h[1]||=e=>$(e)},null,8,[`providers`,`model-value`,`placeholder`])]),p(o(f),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:h[2]||=e=>$(void 0)},{default:r(()=>[p(o(y),{class:`size-3`})]),_:1})])):(d(),e(`div`,q,[p(o(f),{type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:oe},{default:r(()=>[p(o(_),{class:`w-3 h-3 mr-1`}),g(` `+c(o(Y)(`providers.shared.addOverflow`)),1)]),_:1}),p(o(x),{"delay-duration":200},{default:r(()=>[p(o(b),null,{default:r(()=>[p(o(te),{"as-child":``},{default:r(()=>[p(o(C),{class:`size-3 text-muted-foreground/30 cursor-help`})]),_:1}),p(o(ee),{side:`top`,class:`max-w-[240px] text-xs`},{default:r(()=>[g(c(o(Y)(`providers.shared.overflowTooltip`)),1)]),_:1})]),_:1})]),_:1})]))])])):(d(),e(`div`,T,[s(`span`,{class:`min-w-[90px] font-mono text-sm font-semibold text-foreground shrink-0 truncate`,title:t.entry.clientModel},c(t.entry.clientModel),9,E),p(o(S),{class:`size-3.5 mt-0.5 shrink-0 text-muted-foreground/30`}),s(`div`,D,[(d(!0),e(m,null,u(t.entry.targets,(r,a)=>(d(),e(`div`,{key:a},[s(`div`,{class:n([`flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm`,a===0?`bg-primary/10 border border-primary/20 text-primary`:`bg-muted/30 border border-border text-muted-foreground`])},[s(`span`,{class:n([`text-[10px] font-semibold w-3.5 text-center`,a===0?`text-primary`:`text-muted-foreground`])},c(a===0?`①`:a===1?`②`:a===2?`③`:`${a+1}`),3),s(`span`,O,c(r.backend_model),1),s(`span`,k,c(ie(r.provider_id)),1),Q(r.provider_id,r.backend_model)?(d(),e(`span`,A,[p(o(w),{class:`size-2.5`}),g(` `+c(Math.round(Q(r.provider_id,r.backend_model)/1e3))+`s `,1)])):i(``,!0)],2),a<t.entry.targets.length-1?(d(),e(`div`,j,[h[3]||=s(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),s(`span`,M,c(o(Y)(`providers.shared.switchOnFail`)),1)])):i(``,!0)]))),128)),t.entry.targets[0]?.overflow_model?(d(),e(`div`,N,[h[4]||=s(`span`,{class:`text-[10px] text-primary/40 w-3.5 text-center`},`⤵`,-1),s(`span`,P,c(o(Y)(`providers.shared.overflow`)),1),s(`span`,F,c(t.entry.targets[0].overflow_model),1)])):i(``,!0)])]))]))}});export{Y as t};
@@ -1 +1 @@
1
- import{$ as e,A as t,I as n,It as r,K as i,Kt as a,Ot as o,Q as s,Tt as c,V as l,Wt as u,X as d,Y as f,Yt as p,Z as m,_t as h,ht as g,k as _,n as v,nt as y,pt as b,q as x,rt as S,tt as C}from"./button-CSFUPP0s.js";import{t as w}from"./MappingEntryEditor-C_wjxov1.js";import{n as T,t as E}from"./CascadingModelSelect-C0yNZoXy.js";import{t as D}from"./trash-2-2cawWyKR.js";import{t as O}from"./Switch-B2K6kTfF.js";import{a as k,c as A,f as j,i as M,l as N,o as ee,ot as te,s as ne,u as re,x as ie}from"./index-BXsU7o6J.js";var P=n(`layers`,[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]]),ae={class:`flex-1 min-w-0`},oe={class:`flex flex-col items-end gap-1.5 shrink-0 pt-0.5`},se={class:`flex items-center gap-2`},ce={key:0,class:`text-[10px] px-1.5 py-0.5 rounded border border-orange-400/30 text-orange-400/60`},le={key:1,class:`text-[10px] px-1.5 py-0.5 rounded border border-primary/20 text-primary/60 flex items-center gap-0.5`},ue={key:0,class:`px-4 pt-2 pb-1 border-t border-border/30`},F={class:`flex items-center gap-2 mb-1.5`},I={class:`text-xs text-muted-foreground`},L={key:0,class:`flex items-center gap-2`},R={key:1,class:`mt-2 p-2 rounded-md border border-warning/30 bg-warning/5`},z={class:`flex gap-2`},B={class:`space-y-1`},V={class:`text-[11px] text-warning`},H={class:`text-[11px] text-warning/60`},de={class:`text-[11px] text-warning/50`},fe={key:1,class:`flex items-center justify-end gap-2 px-4 py-2 border-t border-border/50`},U=S({__name:`ModelMappingCard`,props:{entry:{},providerGroups:{},editableClientModel:{type:Boolean},defaultExpanded:{type:Boolean,default:!1}},emits:[`saved`,`deleted`,`cancel-add`],setup(n,{emit:h}){let{t:b}=l(),S=n,U=h,W=r(``);c(()=>S.entry.clientModel,e=>{W.value=e},{immediate:!0});let G=r(S.defaultExpanded),K=r([]),q=r(void 0),J=r(!1),Y=r(!1);c(G,e=>{e&&(K.value=S.entry.targets.map(e=>({...e})),q.value=S.entry.multimodalFallback?{...S.entry.multimodalFallback}:void 0)}),c(()=>S.entry.targets,e=>{G.value&&(K.value=e.map(e=>({...e})))},{deep:!0}),c(()=>S.entry.multimodalFallback,e=>{G.value&&(q.value=e?{...e}:void 0)});let X=f(()=>G.value?{...S.entry,targets:K.value,multimodalFallback:q.value}:S.entry);function Z(e){K.value=e}function Q(e){W.value=e}function pe(e){q.value=e}async function me(){J.value=!0;try{let e=S.editableClientModel?W.value.trim():S.entry.clientModel;if(!e)return;let t=JSON.stringify({targets:K.value,...q.value?.backend_model?{multimodal_fallback:q.value}:{}});S.entry.existingId?await _.updateMappingGroup(S.entry.existingId,{client_model:e,rule:t}):await _.createMappingGroup({client_model:e,rule:t}),G.value=!1,U(`saved`),M.success(b(`common.saveSuccess`))}catch(e){console.error(`mappingCard.save:`,e),M.error(t(e,b(`mappings.messages.saveFailed`)))}finally{J.value=!1}}function he(){S.editableClientModel?U(`cancel-add`):G.value=!1}async function ge(){try{S.entry.existingId&&await _.toggleMappingGroup(S.entry.existingId),U(`saved`)}catch(e){console.error(`mappingCard.toggle:`,e),M.error(t(e,b(`mappings.messages.toggleFailed`)))}}function $(){Y.value=!1,U(`deleted`,S.entry.clientModel)}let _e=f(()=>S.providerGroups);function ve(){q.value={provider_id:S.providerGroups[0]?.provider.id??``,backend_model:``}}function ye(e){q.value={provider_id:e.provider_id,backend_model:e.model}}return(t,r)=>(g(),e(x,null,[d(`div`,{class:a([`rounded-lg border transition-colors`,G.value?`border-primary/30 shadow-sm shadow-primary/5`:`border-border hover:border-border/80`])},[d(`div`,{class:a([`flex items-start gap-2 px-4 py-3`,{"cursor-pointer":!G.value}]),onClick:r[2]||=e=>!G.value&&(G.value=!0)},[d(`div`,ae,[y(w,{entry:X.value,"provider-groups":n.providerGroups,expanded:G.value,editable:!0,"editable-client-model":n.editableClientModel,"onUpdate:targets":Z,"onUpdate:clientModel":Q},null,8,[`entry`,`provider-groups`,`expanded`,`editable-client-model`])]),d(`div`,oe,[d(`div`,se,[n.entry.targets.length>1?(g(),e(`span`,ce,p(u(b)(`providers.shared.level`,{count:n.entry.targets.length})),1)):s(``,!0),n.entry.multimodalFallback?(g(),e(`span`,le,[y(u(P),{class:`w-2.5 h-2.5`})])):s(``,!0),n.editableClientModel?s(``,!0):(g(),m(u(v),{key:2,variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground/40 hover:text-destructive`,onClick:r[0]||=i(e=>Y.value=!0,[`stop`])},{default:o(()=>[y(u(D),{class:`size-3`})]),_:1})),n.editableClientModel?s(``,!0):(g(),m(u(O),{key:3,"model-value":n.entry.active,"onUpdate:modelValue":ge,class:`scale-75`,onClick:r[1]||=i(()=>{},[`stop`])},null,8,[`model-value`]))])])],2),G.value?(g(),e(`div`,ue,[d(`div`,F,[y(u(P),{class:`w-3.5 h-3.5 text-muted-foreground/50`}),d(`span`,I,p(u(b)(`mappings.multimodalFallback.title`)),1),q.value?(g(),m(u(ie),{key:0,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-primary/60 border-primary/20`},{default:o(()=>[C(p(u(b)(`mappings.multimodalFallback.configured`)),1)]),_:1})):s(``,!0)]),q.value?(g(),e(`div`,L,[y(E,{providers:_e.value,"model-value":q.value?{provider_id:q.value.provider_id,model:q.value.backend_model}:void 0,placeholder:u(b)(`mappings.multimodalFallback.selectProviderModel`),compact:``,"onUpdate:modelValue":r[3]||=e=>ye(e)},null,8,[`providers`,`model-value`,`placeholder`]),y(u(v),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:r[4]||=e=>pe(void 0)},{default:o(()=>[y(u(D),{class:`size-3`})]),_:1})])):s(``,!0),q.value?(g(),e(`div`,R,[d(`div`,z,[y(u(te),{class:`w-3.5 h-3.5 shrink-0 mt-0.5 text-warning`}),d(`div`,B,[d(`p`,V,p(u(b)(`mappings.multimodalFallback.sessionLockWarning`)),1),d(`p`,H,p(u(b)(`mappings.multimodalFallback.sessionLockReason`)),1),d(`p`,de,p(u(b)(`mappings.multimodalFallback.costSuggestion`)),1)])])])):(g(),m(u(v),{key:2,type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:ve},{default:o(()=>[y(u(T),{class:`w-3 h-3 mr-1`}),C(` `+p(u(b)(`mappings.multimodalFallback.add`)),1)]),_:1}))])):s(``,!0),G.value?(g(),e(`div`,fe,[y(u(v),{size:`sm`,variant:`outline`,onClick:he},{default:o(()=>[C(p(u(b)(`common.cancel`)),1)]),_:1}),y(u(v),{size:`sm`,disabled:J.value,onClick:me},{default:o(()=>[C(p(J.value?u(b)(`common.saving`):u(b)(`common.save`)),1)]),_:1},8,[`disabled`])])):s(``,!0)],2),y(u(j),{open:Y.value,"onUpdate:open":r[5]||=e=>{e||(Y.value=!1)}},{default:o(()=>[y(u(N),null,{default:o(()=>[y(u(ee),null,{default:o(()=>[y(u(k),null,{default:o(()=>[C(p(u(b)(`common.confirmDelete`)),1)]),_:1}),y(u(A),null,{default:o(()=>[C(p(u(b)(`mappings.confirmDeleteDesc`,{model:n.entry.clientModel})),1)]),_:1})]),_:1}),y(u(ne),null,{default:o(()=>[y(u(re),null,{default:o(()=>[C(p(u(b)(`common.cancel`)),1)]),_:1}),y(u(v),{variant:`destructive`,onClick:$},{default:o(()=>[C(p(u(b)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),W={class:`p-6 space-y-3`},G={class:`flex items-center justify-between`},K={class:`text-lg font-semibold text-foreground`},q={class:`flex gap-2 mt-1`},J={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},Y={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},X={class:`grid grid-cols-3 gap-3`},Z={key:0,class:`py-8 text-center text-xs text-muted-foreground`},Q=S({__name:`ModelMappings`,setup(n){let{t:i}=l(),a=r([]),c=r([]),S=r([]),w=r(!1),E=f(()=>S.value.filter(e=>e.active).length),D=f(()=>c.value.map(e=>({provider:{id:e.id,name:e.name},models:(e.models??[]).map(e=>({name:e.name,contextWindow:e.context_window??2e5,streamTimeoutMs:e.stream_timeout_ms??null}))}))),O=f(()=>({clientModel:``,targets:[{backend_model:``,provider_id:c.value[0]?.id??``}],existing:!1,tag:`cust`,active:!0}));function k(){return a.value.map(e=>{let n={};try{let t=JSON.parse(e.rule);n=t.default&&!t.targets?{targets:[t.default]}:t}catch(e){console.warn(`Failed to parse rule:`,e),M.error(t(e,i(`mappings.messages.parseRuleFailed`)))}let r=(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=n.multimodal_fallback?{provider_id:n.multimodal_fallback.provider_id,backend_model:n.multimodal_fallback.backend_model}:void 0;return{clientModel:e.client_model,targets:r.length>0?r:[{backend_model:``,provider_id:c.value[0]?.id??``}],existing:!0,existingId:e.id,tag:`existing`,active:!!e.is_active,originalActive:!!e.is_active,multimodalFallback:a}})}async function A(){let e=await Promise.allSettled([_.getMappingGroups(),_.getProviders()]);e[0].status===`fulfilled`&&(a.value=e[0].value),e[1].status===`fulfilled`&&(c.value=e[1].value),S.value=k()}function j(){w.value=!1,A()}async function N(e){let n=S.value.find(t=>t.clientModel===e);if(n?.existingId)try{await _.deleteMappingGroup(n.existingId),await A(),M.success(i(`common.saveSuccess`))}catch(n){console.error(`modelMappings.deleteAndSave:`,n),M.error(t(n,i(`mappings.messages.deleteFailed`,{model:e})))}}return b(A),(t,n)=>(g(),e(`div`,W,[d(`div`,G,[d(`div`,null,[d(`h2`,K,p(u(i)(`mappings.title`)),1),d(`div`,q,[d(`span`,J,p(u(i)(`mappings.totalMappings`,{count:S.value.length})),1),d(`span`,Y,p(u(i)(`mappings.enabledCount`,{count:E.value})),1)])]),w.value?s(``,!0):(g(),m(u(v),{key:0,size:`sm`,variant:`outline`,onClick:n[0]||=e=>w.value=!0},{default:o(()=>[y(u(T),{class:`w-3.5 h-3.5 mr-1`}),C(` `+p(u(i)(`providers.shared.add`)),1)]),_:1}))]),d(`div`,X,[(g(!0),e(x,null,h(S.value,e=>(g(),m(U,{key:e.clientModel,entry:e,"provider-groups":D.value,onSaved:A,onDeleted:N},null,8,[`entry`,`provider-groups`]))),128)),w.value?(g(),m(U,{key:0,entry:O.value,"provider-groups":D.value,"editable-client-model":!0,"default-expanded":!0,onSaved:j,onCancelAdd:n[1]||=e=>w.value=!1},null,8,[`entry`,`provider-groups`])):s(``,!0)]),S.value.length===0&&!w.value?(g(),e(`p`,Z,p(u(i)(`providers.shared.noMappings`)),1)):s(``,!0)]))}});export{Q as default};
1
+ import{$ as e,A as t,I as n,It as r,K as i,Kt as a,Ot as o,Q as s,Tt as c,V as l,Wt as u,X as d,Y as f,Yt as p,Z as m,_t as h,ht as g,k as _,n as v,nt as y,pt as b,q as x,rt as S,tt as C}from"./button-BaNRw0cF.js";import{t as w}from"./MappingEntryEditor--Icmf_he.js";import{n as T,t as E}from"./CascadingModelSelect-CubFNL5Z.js";import{t as D}from"./trash-2-DvEWr8UB.js";import{t as O}from"./Switch-CqF_csS2.js";import{a as k,c as A,f as j,i as M,l as N,o as ee,ot as te,s as ne,u as re,x as ie}from"./index-COoySiAr.js";var P=n(`layers`,[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]]),ae={class:`flex-1 min-w-0`},oe={class:`flex flex-col items-end gap-1.5 shrink-0 pt-0.5`},se={class:`flex items-center gap-2`},ce={key:0,class:`text-[10px] px-1.5 py-0.5 rounded border border-orange-400/30 text-orange-400/60`},le={key:1,class:`text-[10px] px-1.5 py-0.5 rounded border border-primary/20 text-primary/60 flex items-center gap-0.5`},ue={key:0,class:`px-4 pt-2 pb-1 border-t border-border/30`},F={class:`flex items-center gap-2 mb-1.5`},I={class:`text-xs text-muted-foreground`},L={key:0,class:`flex items-center gap-2`},R={key:1,class:`mt-2 p-2 rounded-md border border-warning/30 bg-warning/5`},z={class:`flex gap-2`},B={class:`space-y-1`},V={class:`text-[11px] text-warning`},H={class:`text-[11px] text-warning/60`},de={class:`text-[11px] text-warning/50`},fe={key:1,class:`flex items-center justify-end gap-2 px-4 py-2 border-t border-border/50`},U=S({__name:`ModelMappingCard`,props:{entry:{},providerGroups:{},editableClientModel:{type:Boolean},defaultExpanded:{type:Boolean,default:!1}},emits:[`saved`,`deleted`,`cancel-add`],setup(n,{emit:h}){let{t:b}=l(),S=n,U=h,W=r(``);c(()=>S.entry.clientModel,e=>{W.value=e},{immediate:!0});let G=r(S.defaultExpanded),K=r([]),q=r(void 0),J=r(!1),Y=r(!1);c(G,e=>{e&&(K.value=S.entry.targets.map(e=>({...e})),q.value=S.entry.multimodalFallback?{...S.entry.multimodalFallback}:void 0)}),c(()=>S.entry.targets,e=>{G.value&&(K.value=e.map(e=>({...e})))},{deep:!0}),c(()=>S.entry.multimodalFallback,e=>{G.value&&(q.value=e?{...e}:void 0)});let X=f(()=>G.value?{...S.entry,targets:K.value,multimodalFallback:q.value}:S.entry);function Z(e){K.value=e}function Q(e){W.value=e}function pe(e){q.value=e}async function me(){J.value=!0;try{let e=S.editableClientModel?W.value.trim():S.entry.clientModel;if(!e)return;let t=JSON.stringify({targets:K.value,...q.value?.backend_model?{multimodal_fallback:q.value}:{}});S.entry.existingId?await _.updateMappingGroup(S.entry.existingId,{client_model:e,rule:t}):await _.createMappingGroup({client_model:e,rule:t}),G.value=!1,U(`saved`),M.success(b(`common.saveSuccess`))}catch(e){console.error(`mappingCard.save:`,e),M.error(t(e,b(`mappings.messages.saveFailed`)))}finally{J.value=!1}}function he(){S.editableClientModel?U(`cancel-add`):G.value=!1}async function ge(){try{S.entry.existingId&&await _.toggleMappingGroup(S.entry.existingId),U(`saved`)}catch(e){console.error(`mappingCard.toggle:`,e),M.error(t(e,b(`mappings.messages.toggleFailed`)))}}function $(){Y.value=!1,U(`deleted`,S.entry.clientModel)}let _e=f(()=>S.providerGroups);function ve(){q.value={provider_id:S.providerGroups[0]?.provider.id??``,backend_model:``}}function ye(e){q.value={provider_id:e.provider_id,backend_model:e.model}}return(t,r)=>(g(),e(x,null,[d(`div`,{class:a([`rounded-lg border transition-colors`,G.value?`border-primary/30 shadow-sm shadow-primary/5`:`border-border hover:border-border/80`])},[d(`div`,{class:a([`flex items-start gap-2 px-4 py-3`,{"cursor-pointer":!G.value}]),onClick:r[2]||=e=>!G.value&&(G.value=!0)},[d(`div`,ae,[y(w,{entry:X.value,"provider-groups":n.providerGroups,expanded:G.value,editable:!0,"editable-client-model":n.editableClientModel,"onUpdate:targets":Z,"onUpdate:clientModel":Q},null,8,[`entry`,`provider-groups`,`expanded`,`editable-client-model`])]),d(`div`,oe,[d(`div`,se,[n.entry.targets.length>1?(g(),e(`span`,ce,p(u(b)(`providers.shared.level`,{count:n.entry.targets.length})),1)):s(``,!0),n.entry.multimodalFallback?(g(),e(`span`,le,[y(u(P),{class:`w-2.5 h-2.5`})])):s(``,!0),n.editableClientModel?s(``,!0):(g(),m(u(v),{key:2,variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground/40 hover:text-destructive`,onClick:r[0]||=i(e=>Y.value=!0,[`stop`])},{default:o(()=>[y(u(D),{class:`size-3`})]),_:1})),n.editableClientModel?s(``,!0):(g(),m(u(O),{key:3,"model-value":n.entry.active,"onUpdate:modelValue":ge,class:`scale-75`,onClick:r[1]||=i(()=>{},[`stop`])},null,8,[`model-value`]))])])],2),G.value?(g(),e(`div`,ue,[d(`div`,F,[y(u(P),{class:`w-3.5 h-3.5 text-muted-foreground/50`}),d(`span`,I,p(u(b)(`mappings.multimodalFallback.title`)),1),q.value?(g(),m(u(ie),{key:0,variant:`outline`,class:`text-[10px] px-1.5 py-0 text-primary/60 border-primary/20`},{default:o(()=>[C(p(u(b)(`mappings.multimodalFallback.configured`)),1)]),_:1})):s(``,!0)]),q.value?(g(),e(`div`,L,[y(E,{providers:_e.value,"model-value":q.value?{provider_id:q.value.provider_id,model:q.value.backend_model}:void 0,placeholder:u(b)(`mappings.multimodalFallback.selectProviderModel`),compact:``,"onUpdate:modelValue":r[3]||=e=>ye(e)},null,8,[`providers`,`model-value`,`placeholder`]),y(u(v),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:r[4]||=e=>pe(void 0)},{default:o(()=>[y(u(D),{class:`size-3`})]),_:1})])):s(``,!0),q.value?(g(),e(`div`,R,[d(`div`,z,[y(u(te),{class:`w-3.5 h-3.5 shrink-0 mt-0.5 text-warning`}),d(`div`,B,[d(`p`,V,p(u(b)(`mappings.multimodalFallback.sessionLockWarning`)),1),d(`p`,H,p(u(b)(`mappings.multimodalFallback.sessionLockReason`)),1),d(`p`,de,p(u(b)(`mappings.multimodalFallback.costSuggestion`)),1)])])])):(g(),m(u(v),{key:2,type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:ve},{default:o(()=>[y(u(T),{class:`w-3 h-3 mr-1`}),C(` `+p(u(b)(`mappings.multimodalFallback.add`)),1)]),_:1}))])):s(``,!0),G.value?(g(),e(`div`,fe,[y(u(v),{size:`sm`,variant:`outline`,onClick:he},{default:o(()=>[C(p(u(b)(`common.cancel`)),1)]),_:1}),y(u(v),{size:`sm`,disabled:J.value,onClick:me},{default:o(()=>[C(p(J.value?u(b)(`common.saving`):u(b)(`common.save`)),1)]),_:1},8,[`disabled`])])):s(``,!0)],2),y(u(j),{open:Y.value,"onUpdate:open":r[5]||=e=>{e||(Y.value=!1)}},{default:o(()=>[y(u(N),null,{default:o(()=>[y(u(ee),null,{default:o(()=>[y(u(k),null,{default:o(()=>[C(p(u(b)(`common.confirmDelete`)),1)]),_:1}),y(u(A),null,{default:o(()=>[C(p(u(b)(`mappings.confirmDeleteDesc`,{model:n.entry.clientModel})),1)]),_:1})]),_:1}),y(u(ne),null,{default:o(()=>[y(u(re),null,{default:o(()=>[C(p(u(b)(`common.cancel`)),1)]),_:1}),y(u(v),{variant:`destructive`,onClick:$},{default:o(()=>[C(p(u(b)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),W={class:`p-6 space-y-3`},G={class:`flex items-center justify-between`},K={class:`text-lg font-semibold text-foreground`},q={class:`flex gap-2 mt-1`},J={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},Y={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},X={class:`grid grid-cols-3 gap-3`},Z={key:0,class:`py-8 text-center text-xs text-muted-foreground`},Q=S({__name:`ModelMappings`,setup(n){let{t:i}=l(),a=r([]),c=r([]),S=r([]),w=r(!1),E=f(()=>S.value.filter(e=>e.active).length),D=f(()=>c.value.map(e=>({provider:{id:e.id,name:e.name},models:(e.models??[]).map(e=>({name:e.name,contextWindow:e.context_window??2e5,streamTimeoutMs:e.stream_timeout_ms??null}))}))),O=f(()=>({clientModel:``,targets:[{backend_model:``,provider_id:c.value[0]?.id??``}],existing:!1,tag:`cust`,active:!0}));function k(){return a.value.map(e=>{let n={};try{let t=JSON.parse(e.rule);n=t.default&&!t.targets?{targets:[t.default]}:t}catch(e){console.warn(`Failed to parse rule:`,e),M.error(t(e,i(`mappings.messages.parseRuleFailed`)))}let r=(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=n.multimodal_fallback?{provider_id:n.multimodal_fallback.provider_id,backend_model:n.multimodal_fallback.backend_model}:void 0;return{clientModel:e.client_model,targets:r.length>0?r:[{backend_model:``,provider_id:c.value[0]?.id??``}],existing:!0,existingId:e.id,tag:`existing`,active:!!e.is_active,originalActive:!!e.is_active,multimodalFallback:a}})}async function A(){let e=await Promise.allSettled([_.getMappingGroups(),_.getProviders()]);e[0].status===`fulfilled`&&(a.value=e[0].value),e[1].status===`fulfilled`&&(c.value=e[1].value),S.value=k()}function j(){w.value=!1,A()}async function N(e){let n=S.value.find(t=>t.clientModel===e);if(n?.existingId)try{await _.deleteMappingGroup(n.existingId),await A(),M.success(i(`common.saveSuccess`))}catch(n){console.error(`modelMappings.deleteAndSave:`,n),M.error(t(n,i(`mappings.messages.deleteFailed`,{model:e})))}}return b(A),(t,n)=>(g(),e(`div`,W,[d(`div`,G,[d(`div`,null,[d(`h2`,K,p(u(i)(`mappings.title`)),1),d(`div`,q,[d(`span`,J,p(u(i)(`mappings.totalMappings`,{count:S.value.length})),1),d(`span`,Y,p(u(i)(`mappings.enabledCount`,{count:E.value})),1)])]),w.value?s(``,!0):(g(),m(u(v),{key:0,size:`sm`,variant:`outline`,onClick:n[0]||=e=>w.value=!0},{default:o(()=>[y(u(T),{class:`w-3.5 h-3.5 mr-1`}),C(` `+p(u(i)(`providers.shared.add`)),1)]),_:1}))]),d(`div`,X,[(g(!0),e(x,null,h(S.value,e=>(g(),m(U,{key:e.clientModel,entry:e,"provider-groups":D.value,onSaved:A,onDeleted:N},null,8,[`entry`,`provider-groups`]))),128)),w.value?(g(),m(U,{key:0,entry:O.value,"provider-groups":D.value,"editable-client-model":!0,"default-expanded":!0,onSaved:j,onCancelAdd:n[1]||=e=>w.value=!1},null,8,[`entry`,`provider-groups`])):s(``,!0)]),S.value.length===0&&!w.value?(g(),e(`p`,Z,p(u(i)(`providers.shared.noMappings`)),1)):s(``,!0)]))}});export{Q as default};
@@ -1 +1 @@
1
- import{$ as e,A as t,It as n,Jt as r,K as i,Kt as a,Mt as o,Ot as s,Q as c,Rt as l,Tt as u,Ut as d,V as f,Wt as p,X as m,Y as h,Yt as g,Z as _,_t as v,ht as y,k as b,mt as ee,n as x,nt as S,pt as te,q as C,rt as w,tt as T}from"./button-CSFUPP0s.js";import{n as E,t as ne}from"./UnifiedRequestDialog-BtsWE0wO.js";import{t as D}from"./copy-C9YdGmGg.js";import{i as O,n as k,r as A,t as j}from"./TooltipTrigger-qc84ev_b.js";import{c as M,d as re,f as ie,l as ae,s as N,u as P}from"./dialog-Dvd1Jkzx.js";import{Ct as F,a as oe,at as se,c as ce,d as le,f as ue,i as de,l as fe,mt as I,o as pe,pt as me,s as he,u as ge,x as L}from"./index-BXsU7o6J.js";import{n as R,t as z}from"./CardContent-B88j9H0z.js";import{n as B,t as V}from"./CardTitle-B8a97nPD.js";import{t as _e}from"./useClipboard-Bk__77zn.js";var H={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},U={class:`text-sm text-muted-foreground`},ve={class:`text-2xl font-bold text-foreground mt-1`},ye={class:`text-xs text-muted-foreground mt-1`},W={class:`text-sm text-muted-foreground`},be={class:`text-2xl font-bold text-foreground mt-1`},xe={class:`text-xs text-muted-foreground mt-1`},Se={class:`text-sm text-muted-foreground`},Ce={class:`text-2xl font-bold text-foreground mt-1`},we={class:`text-xs text-muted-foreground mt-1`},G={class:`text-sm text-muted-foreground`},K={class:`text-2xl font-bold text-foreground mt-1`},q={class:`text-xs text-muted-foreground mt-1`},Te=w({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(t){let{t:n}=f(),r=t,i=h(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.errorCount/r.stats.totalRequests*100).toFixed(1)),a=h(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.retryCount/r.stats.totalRequests*100).toFixed(1)),o=h(()=>r.stats?r.stats.p50LatencyMs.toFixed(0):`--`);return(r,c)=>(y(),e(`div`,H,[S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,U,g(p(n)(`monitor.header.activeRequests`)),1),m(`p`,ve,g(t.activeCount),1),m(`p`,ye,g(p(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,W,g(p(n)(`monitor.header.errorRate`)),1),m(`p`,be,g(i.value)+`%`,1),m(`p`,xe,g(t.stats?.errorCount??0)+` / `+g(t.stats?.totalRequests??0),1)]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,Se,g(p(n)(`monitor.header.p50Latency`)),1),m(`p`,Ce,g(o.value)+`ms`,1),m(`p`,we,g(p(n)(`monitor.header.avgLatency`,{value:t.stats?.avgLatencyMs?.toFixed(0)??`--`})),1)]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,G,g(p(n)(`monitor.header.retryRate`)),1),m(`p`,K,g(a.value)+`%`,1),m(`p`,q,g(t.stats?.retryCount??0)+` / `+g(t.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),J={class:`space-y-3`},Y={key:0,class:`text-sm text-muted-foreground`},Ee={class:`flex items-center justify-between text-sm`},De={class:`font-medium text-foreground`},X={class:`text-muted-foreground`},Z={class:`text-xs`},Q={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},$={key:1,class:`flex gap-3 text-xs text-muted-foreground`},Oe=w({__name:`ConcurrencyPanel`,props:{providers:{}},setup(t){let{t:n}=f();function i(e){return e.adaptiveLimit??e.maxConcurrency}function o(e,t){let n=e/t;return n>=1?`bg-red-500`:n>=.8?`bg-orange-500`:n>=.5?`bg-yellow-500`:`bg-green-500`}return(s,l)=>(y(),e(`div`,J,[t.providers.length===0?(y(),e(`div`,Y,g(p(n)(`monitor.concurrencyPanel.noData`)),1)):c(``,!0),(y(!0),e(C,null,v(t.providers,t=>(y(),e(`div`,{key:t.providerId,class:`space-y-1`},[m(`div`,Ee,[m(`span`,De,g(t.providerName),1),m(`span`,X,[t.adaptiveEnabled?(y(),e(C,{key:0},[T(g(t.active)+` / `+g(t.adaptiveLimit??t.maxConcurrency)+` `,1),m(`span`,Z,`(`+g(p(n)(`monitor.concurrencyPanel.adaptive`))+`)`,1)],64)):t.maxConcurrency===0?(y(),e(C,{key:1},[T(g(p(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(y(),e(C,{key:2},[T(g(t.active)+` / `+g(t.maxConcurrency),1)],64))])]),t.maxConcurrency>0?(y(),e(`div`,Q,[m(`div`,{class:a([`h-full rounded-full transition-all duration-300`,o(t.active,i(t))]),style:r({width:`${Math.min(100,t.active/i(t)*100)}%`})},null,6)])):c(``,!0),t.maxConcurrency>0?(y(),e(`div`,$,[m(`span`,null,g(p(n)(`monitor.concurrencyPanel.queued`,{count:t.queued})),1),m(`span`,null,g(p(n)(`monitor.concurrencyPanel.queueLimit`,{limit:t.adaptiveLimit??t.maxQueueSize})),1)])):c(``,!0)]))),128))]))}}),ke={key:0,class:`text-sm text-muted-foreground`},Ae={key:1,class:`grid grid-cols-2 gap-3 text-sm`},je={class:`text-muted-foreground`},Me={class:`font-medium text-foreground`},Ne={class:`text-muted-foreground`},Pe={class:`font-medium text-foreground`},Fe={class:`col-span-2`},Ie={class:`flex items-center justify-between`},Le={class:`text-muted-foreground`},Re={class:`text-muted-foreground`},ze={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},Be={class:`text-muted-foreground`},Ve={class:`font-medium text-foreground`},He={class:`text-muted-foreground`},Ue={class:`font-medium text-foreground`},We={class:`col-span-2`},Ge={class:`text-muted-foreground`},Ke={class:`font-medium text-foreground`},qe=w({__name:`RuntimePanel`,props:{runtime:{}},setup(t){let{t:n}=f(),i=t,a=h(()=>!i.runtime||i.runtime.memoryUsage.heapTotal===0?0:Math.min(100,i.runtime.memoryUsage.heapUsed/i.runtime.memoryUsage.heapTotal*100));function o(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}return(i,s)=>t.runtime?(y(),e(`div`,Ae,[m(`div`,null,[m(`p`,je,g(p(n)(`monitor.runtimePanel.uptime`)),1),m(`p`,Me,g(o(t.runtime.uptimeMs)),1)]),m(`div`,null,[m(`p`,Ne,g(p(n)(`monitor.runtimePanel.memoryRss`)),1),m(`p`,Pe,g(p(I)(t.runtime.memoryUsage.rss)),1)]),m(`div`,Fe,[m(`div`,Ie,[m(`p`,Le,g(p(n)(`monitor.runtimePanel.heapUsage`)),1),m(`p`,Re,g(p(I)(t.runtime.memoryUsage.heapUsed))+` / `+g(p(I)(t.runtime.memoryUsage.heapTotal)),1)]),m(`div`,ze,[m(`div`,{class:`h-full bg-primary rounded-full transition-all duration-300`,style:r({width:`${a.value}%`})},null,4)])]),m(`div`,null,[m(`p`,Be,g(p(n)(`monitor.runtimePanel.activeHandles`)),1),m(`p`,Ve,g(t.runtime.activeHandles),1)]),m(`div`,null,[m(`p`,He,g(p(n)(`monitor.runtimePanel.activeRequests`)),1),m(`p`,Ue,g(t.runtime.activeRequests),1)]),m(`div`,We,[m(`p`,Ge,g(p(n)(`monitor.runtimePanel.eventLoopDelay`)),1),m(`p`,Ke,g(t.runtime.eventLoopDelayMs.toFixed(2))+`ms `,1)])])):(y(),e(`div`,ke,g(p(n)(`monitor.runtimePanel.noData`)),1))}}),Je={key:0,class:`text-sm text-muted-foreground`},Ye={key:1,class:`space-y-2`},Xe={class:`flex items-center justify-between text-sm`},Ze={class:`text-muted-foreground`},Qe={class:`h-2 bg-muted rounded-full overflow-hidden`},$e=w({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(t){let{t:n}=f(),i=t,o=h(()=>Object.values(i.byStatusCode).reduce((e,t)=>e+t,0)),s=h(()=>{let e=i.byStatusCode,t=o.value||1,r=c(e,200,299),a=c(e,400,499)-(e[429]||0),s=e[429]||0,l=c(e,500,599);return[{label:n(`monitor.statusCodes.success`),count:r,percent:(r/t*100).toFixed(1),textClass:`text-green-600 dark:text-green-400`,barClass:`bg-green-500`},{label:n(`monitor.statusCodes.clientError`),count:a,percent:(a/t*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:n(`monitor.statusCodes.rateLimited`),count:s,percent:(s/t*100).toFixed(1),textClass:`text-orange-600 dark:text-orange-400`,barClass:`bg-orange-500`},{label:n(`monitor.statusCodes.serverError`),count:l,percent:(l/t*100).toFixed(1),textClass:`text-red-600 dark:text-red-400`,barClass:`bg-red-500`}].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(t,i)=>o.value===0?(y(),e(`div`,Je,g(p(n)(`monitor.statusCodes.noData`)),1)):(y(),e(`div`,Ye,[(y(!0),e(C,null,v(s.value,t=>(y(),e(`div`,{key:t.label,class:`space-y-1`},[m(`div`,Xe,[m(`span`,{class:a(t.textClass)},g(t.label),3),m(`span`,Ze,g(t.count)+` (`+g(t.percent)+`%) `,1)]),m(`div`,Qe,[m(`div`,{class:a([`h-full rounded-full transition-all duration-300`,t.barClass]),style:r({width:`${t.percent}%`})},null,6)])]))),128))]))}}),et={key:0,class:`text-sm text-muted-foreground py-4 text-center`},tt={key:1,class:`text-sm text-muted-foreground py-4 text-center`},nt={class:`flex flex-wrap gap-1`},rt={key:0,class:`text-xs text-muted-foreground`},it=w({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=f(),r=t,i=h(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*100:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*100:0})):[]);return(r,o)=>t.stats?i.value.length===0?(y(),e(`div`,tt,g(p(n)(`monitor.providerTable.noProviders`)),1)):(y(),_(p(ie),{key:2},{default:s(()=>[S(p(N),null,{default:s(()=>[S(p(ae),null,{default:s(()=>[S(p(M),null,{default:s(()=>[...o[0]||=[T(`Provider`,-1)]]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.requests`)),1)]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.successRate`)),1)]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),S(p(M),null,{default:s(()=>[T(g(p(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),S(p(re),null,{default:s(()=>[(y(!0),e(C,null,v(i.value,t=>(y(),_(p(ae),{key:t.id},{default:s(()=>[S(p(P),{class:`font-medium`},{default:s(()=>[T(g(t.name),1)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[T(g(t.stats.totalRequests),1)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[m(`span`,{class:a(t.successRate>=95?`text-green-600 dark:text-green-400`:t.successRate>=80?`text-yellow-600 dark:text-yellow-400`:`text-red-500 dark:text-red-400`)},g(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[T(g(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[m(`span`,{class:a(t.retryRate>10?`text-yellow-600 dark:text-yellow-400`:``)},g(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),S(p(P),null,{default:s(()=>[m(`div`,nt,[(y(!0),e(C,null,v(t.stats.topErrors.slice(0,3),e=>(y(),_(p(L),{key:e.code,variant:`destructive`,class:`text-xs`},{default:s(()=>[T(g(e.code)+` (`+g(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(y(),e(`span`,rt,`--`)):c(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(y(),e(`div`,et,g(p(n)(`monitor.providerTable.noData`)),1))}}),at=3e4;function ot(e,t,n){let r=null,i=null,a=0,o=null,s=!1;function c(){document.hidden?o=setTimeout(()=>{u(),n?.onClose?.()},at):(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 ee(()=>{u(),s&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,c),s=!1),n?.onClose?.()}),{connect:l,disconnect:u}}var st=200,ct=404,lt=500;async function ut(e,t){try{let n=dt(e.value,await t());n!==e.value&&(e.value=n)}catch(t){console.error(`useMonitorData.syncActiveOnSSEReconnect failed:`,t),e.value=[...e.value]}}function dt(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 ft(){let e=l([]),t=n([]),r=n(null),i=n([]),a=n(null),o=n(!1),s=!1,c=h(()=>e.value.filter(e=>e.isStream).length),f=h(()=>e.value.filter(e=>!e.queued)),p=h(()=>e.value.filter(e=>e.queued===!0));function m(n){let o;try{o=JSON.parse(n.data)}catch{return}switch(n.type){case`request_start`:{let n=o;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=o;break;case`request_complete`:{let n=o;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>st&&(t.value.length=st);break}case`concurrency_update`:i.value=o;break;case`stats_update`:r.value=o;break;case`stream_content_update`:{let t=o;for(let n of t){let t=e.value.find(e=>e.id===n.id);t&&(t.streamTotalChars=n.totalChars,n.streamMetrics&&(t.streamMetrics=n.streamMetrics))}d(e);break}case`runtime_update`:a.value=o;break}}async function g(){if(o.value=!0,!s){s=!0;return}await ut(e,()=>b.getMonitorActive())}function _(){o.value=!1}async function v(){try{let[n,o,s,c,l]=await Promise.allSettled([b.getMonitorActive(),b.getMonitorRecent(),b.getMonitorStats(),b.getMonitorConcurrency(),b.getMonitorRuntime()]);n.status===`fulfilled`&&(e.value=n.value),o.status===`fulfilled`&&(t.value=o.value),s.status===`fulfilled`&&(r.value=s.value),c.status===`fulfilled`&&(i.value=c.value),l.status===`fulfilled`&&(a.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),r.value=null,i.value=[],a.value=null}}let y=n(null),x=n(!1),S=n(0);async function te(n){let r=++S.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){y.value=null;return}y.value=null,x.value=!0;try{if(i.status===`pending`){try{let e=await b.getMonitorRequest(n);if(r!==S.value)return;y.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==ct)throw e;if(r!==S.value)return;let t=await b.getLogDetail(n);if(r!==S.value)return;y.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await b.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}}y.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),y.value=null}finally{r===S.value&&(x.value=!1)}}let C=n(null),w=n(!1),T=n(null),E=null;function ne(t){if(D(),!t)return;let n=async()=>{let n=e.value.find(e=>e.id===t);if(!n||n.status===`completed`||n.status===`failed`){D();return}try{let e=await b.getMonitorRequest(t);if(C.value!==t)return;e.streamContent&&(T.value=e.streamContent)}catch(e){e?.response?.status===ct&&D()}};n(),E=setInterval(n,lt)}function D(){E&&=(clearInterval(E),null)}function O(e){C.value=e,w.value=!0,T.value=null;let n=t.value.find(t=>t.id===e);n&&(n.status===`completed`||n.status===`failed`)&&(n.streamContent?T.value=n.streamContent:k(e)),ne(e),te(e)}async function k(e){try{let t=await b.getMonitorRequest(e);if(C.value!==e)return;t.streamContent&&(T.value=t.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let A=h(()=>C.value?e.value.find(e=>e.id===C.value)??t.value.find(e=>e.id===C.value)??null:null);return u(()=>A.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(D(),te(C.value))}),ee(()=>{D()}),{activeRequests:e,recentCompleted:t,stats:r,concurrency:i,runtime:a,connected:o,streamCount:c,streamingRequests:f,queuedRequests:p,selectedRequestId:C,selectedRequest:A,requestDetailOpen:w,selectRequest:O,selectedStreamContent:T,logDetailData:y,nonStreamBodyLoading:x,handleSSEMessage:m,handleSSEOpen:g,handleSSEClose:_,loadInitialData:v}}function pt(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function mt(e){let{t}=F.global;switch(e){case`pending`:return t(`common.statusPending`);case`failed`:return t(`common.statusFailed`);case`completed`:return t(`common.statusCompleted`);default:return e}}var ht={class:`p-6`},gt={class:`flex items-center justify-between mb-4`},_t={class:`text-lg font-semibold text-foreground`},vt={class:`flex items-center gap-2`},yt={class:`grid grid-cols-3 gap-4 mb-6`},bt={class:`flex items-center justify-between`},xt={key:0,class:`text-sm text-muted-foreground py-2`},St=[`onClick`],Ct={class:`text-sm text-foreground truncate flex-1`},wt={class:`text-xs text-muted-foreground shrink-0`},Tt={key:0,class:`text-xs text-muted-foreground shrink-0`},Et={key:1,class:`text-xs text-muted-foreground shrink-0`},Dt={class:`flex items-center justify-between`},Ot={key:0,class:`text-sm text-muted-foreground py-2`},kt=[`onClick`],At={class:`text-sm text-foreground truncate flex-1`},jt={class:`text-xs text-muted-foreground shrink-0`},Mt={class:`flex items-center justify-between`},Nt={key:0,class:`text-sm text-muted-foreground py-2`},Pt=[`onClick`],Ft={class:`text-sm text-foreground truncate flex-1`},It={class:`text-xs text-muted-foreground shrink-0`},Lt={class:`grid grid-cols-1 lg:grid-cols-3 gap-4`},Rt=2e3,zt=1e3,Bt=3e3,Vt=w({__name:`Monitor`,setup(r){let{t:l}=f(),{activeRequests:u,recentCompleted:d,stats:w,concurrency:M,runtime:re,connected:ie,streamCount:ae,streamingRequests:N,queuedRequests:P,selectedRequestId:F,selectedRequest:I,requestDetailOpen:H,selectRequest:U,selectedStreamContent:ve,logDetailData:ye,handleSSEMessage:W,handleSSEOpen:be,handleSSEClose:xe,loadInitialData:Se}=ft(),{connect:Ce}=ot(`/admin/api/monitor/stream`,{request_start:W,request_update:W,request_complete:W,concurrency_update:W,stats_update:W,runtime_update:W,stream_content_update:W},{onOpen:be,onClose:xe}),{copy:we}=_e(),G=n(null);function K(e){we(e),G.value=e,setTimeout(()=>{G.value===e&&(G.value=null)},Rt)}let q=n(!1),J=n(null),Y=h(()=>J.value?u.value.find(e=>e.id===J.value)??null:null);function Ee(e){J.value=e,q.value=!0}async function De(){if(J.value){try{await b.killMonitorRequest(J.value),u.value=u.value.filter(e=>e.id!==J.value),de.success(l(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),de.error(t(e,l(`monitor.killFailed`)))}q.value=!1}}let X=n(Date.now()),Z=null;function Q(){$(),Z=setInterval(()=>{X.value=Date.now()},Bt)}function $(){Z&&=(clearInterval(Z),null)}function ke(){document.hidden?$():(X.value=Date.now(),Q())}function Ae(e){return((X.value-e)/zt).toFixed(1)}function je(e){return e.completedAt?((e.completedAt-e.startTime)/zt).toFixed(1)+`s`:`--`}return te(async()=>{await Se(),Ce(),Q(),document.addEventListener(`visibilitychange`,ke)}),ee(()=>{$(),document.removeEventListener(`visibilitychange`,ke)}),(t,n)=>(y(),e(`div`,ht,[m(`div`,gt,[m(`h2`,_t,g(p(l)(`monitor.title`)),1),m(`div`,vt,[S(p(L),{variant:p(ie)?`default`:`destructive`},{default:s(()=>[T(g(p(ie)?p(l)(`monitor.connected`):p(l)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])])]),S(Te,{stats:p(w),"active-count":p(u).length,"stream-count":p(ae)},null,8,[`stats`,`active-count`,`stream-count`]),m(`div`,yt,[S(p(R),null,{default:s(()=>[S(p(B),{class:`pb-2`},{default:s(()=>[m(`div`,bt,[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.activeRequests`)),1)]),_:1}),S(p(L),{variant:`secondary`},{default:s(()=>[T(g(p(N).length),1)]),_:1})])]),_:1}),S(p(z),null,{default:s(()=>[S(p(k),{"delay-duration":300},{default:s(()=>[S(p(E),{class:`h-64`},{default:s(()=>[p(N).length===0?(y(),e(`div`,xt,g(p(l)(`monitor.noActiveRequests`)),1)):c(``,!0),(y(!0),e(C,null,v(p(N),t=>(y(),e(`div`,{key:t.id,class:a([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":p(F)===t.id}]),onClick:e=>p(U)(t.id)},[S(p(L),{variant:p(pt)(t.status),class:`shrink-0`},{default:s(()=>[T(g(p(mt)(t.status)),1)]),_:2},1032,[`variant`]),m(`span`,Ct,g(t.model),1),S(p(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[T(g(t.providerName),1)]),_:2},1024),m(`span`,wt,g(Ae(t.startTime))+`s`,1),t.streamMetrics?.tokensPerSecond?(y(),e(`span`,Tt,g(t.streamMetrics.tokensPerSecond.toFixed(0))+` t/s `,1)):c(``,!0),t.streamMetrics?.outputTokens?(y(),e(`span`,Et,g(t.streamMetrics.outputTokens)+` tok `,1)):c(``,!0),t.isStream?(y(),_(p(L),{key:2,variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[...n[2]||=[T(`SSE`,-1)]]),_:1})):c(``,!0),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:i(e=>K(t.id),[`stop`])},{default:s(()=>[G.value===t.id?(y(),_(p(me),{key:0,class:`size-3 text-success`})):(y(),_(p(D),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:i(e=>Ee(t.id),[`stop`])},{default:s(()=>[S(p(se),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,St))),128))]),_:1})]),_:1})]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),{class:`pb-2`},{default:s(()=>[m(`div`,Dt,[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.queuedRequests`)),1)]),_:1}),S(p(L),{variant:`secondary`},{default:s(()=>[T(g(p(P).length),1)]),_:1})])]),_:1}),S(p(z),null,{default:s(()=>[S(p(k),{"delay-duration":300},{default:s(()=>[S(p(E),{class:`h-64`},{default:s(()=>[p(P).length===0?(y(),e(`div`,Ot,g(p(l)(`monitor.noQueuedRequests`)),1)):c(``,!0),(y(!0),e(C,null,v(p(P),t=>(y(),e(`div`,{key:t.id,class:a([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":p(F)===t.id}]),onClick:e=>p(U)(t.id)},[S(p(L),{variant:`outline`,class:`shrink-0`},{default:s(()=>[T(g(p(l)(`monitor.queued`)),1)]),_:1}),m(`span`,At,g(t.model),1),S(p(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[T(g(t.providerName),1)]),_:2},1024),m(`span`,jt,g(Ae(t.startTime))+`s`,1),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:i(e=>K(t.id),[`stop`])},{default:s(()=>[G.value===t.id?(y(),_(p(me),{key:0,class:`size-3 text-success`})):(y(),_(p(D),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:i(e=>Ee(t.id),[`stop`])},{default:s(()=>[S(p(se),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,kt))),128))]),_:1})]),_:1})]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),{class:`pb-2`},{default:s(()=>[m(`div`,Mt,[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.completed`)),1)]),_:1}),S(p(L),{variant:`secondary`},{default:s(()=>[T(g(p(d).length),1)]),_:1})])]),_:1}),S(p(z),null,{default:s(()=>[S(p(k),{"delay-duration":300},{default:s(()=>[S(p(E),{class:`h-64`},{default:s(()=>[p(d).length===0?(y(),e(`div`,Nt,g(p(l)(`monitor.noCompletedRequests`)),1)):c(``,!0),(y(!0),e(C,null,v(p(d),t=>(y(),e(`div`,{key:t.id,class:a([`flex items-center gap-2 py-1.5 px-2 rounded cursor-pointer opacity-60 hover:opacity-80 hover:bg-muted/50 transition-colors`,{"bg-muted":p(F)===t.id}]),onClick:e=>p(U)(t.id)},[S(p(L),{variant:p(pt)(t.status),class:`shrink-0`},{default:s(()=>[T(g(p(mt)(t.status)),1)]),_:2},1032,[`variant`]),m(`span`,Ft,g(t.model),1),S(p(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[T(g(t.providerName),1)]),_:2},1024),t.isStream?(y(),_(p(L),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[...n[3]||=[T(`SSE`,-1)]]),_:1})):c(``,!0),m(`span`,It,g(je(t)),1),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:i(e=>K(t.id),[`stop`])},{default:s(()=>[G.value===t.id?(y(),_(p(me),{key:0,class:`size-3 text-success`})):(y(),_(p(D),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)],10,Pt))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),S(p(R),{class:`mb-4`},{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.providerStats`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S(it,{stats:p(w)},null,8,[`stats`])]),_:1})]),_:1}),m(`div`,Lt,[S(p(R),null,{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.concurrency`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S(Oe,{providers:p(M)},null,8,[`providers`])]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.statusCodeDistribution`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S($e,{"by-status-code":p(w)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.runtime`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S(qe,{runtime:p(re)},null,8,[`runtime`])]),_:1})]),_:1})]),S(ne,{open:p(H),"onUpdate:open":n[0]||=e=>o(H)?H.value=e:null,source:`realtime`,request:p(I),"stream-content":p(ve),"log-detail-data":p(ye)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),S(p(ue),{open:q.value,"onUpdate:open":n[1]||=e=>q.value=e},{default:s(()=>[S(p(fe),null,{default:s(()=>[S(p(pe),null,{default:s(()=>[S(p(oe),null,{default:s(()=>[T(g(p(l)(`monitor.killConfirmTitle`)),1)]),_:1}),Y.value?(y(),_(p(ce),{key:0},{default:s(()=>[T(g(p(l)(`monitor.killConfirm`,{model:Y.value.model,provider:Y.value.providerName})),1)]),_:1})):c(``,!0)]),_:1}),S(p(he),null,{default:s(()=>[S(p(ge),null,{default:s(()=>[T(g(p(l)(`monitor.killCancel`)),1)]),_:1}),S(p(le),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:De},{default:s(()=>[T(g(p(l)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{Vt as default};
1
+ import{$ as e,A as t,It as n,Jt as r,K as i,Kt as a,Mt as o,Ot as s,Q as c,Rt as l,Tt as u,Ut as d,V as f,Wt as p,X as m,Y as h,Yt as g,Z as _,_t as v,ht as y,k as b,mt as ee,n as x,nt as S,pt as te,q as C,rt as w,tt as T}from"./button-BaNRw0cF.js";import{n as E,t as ne}from"./UnifiedRequestDialog-DWUXdfWY.js";import{t as D}from"./copy-Dbl7J0Cg.js";import{i as O,n as k,r as A,t as j}from"./TooltipTrigger-CpHXgQxI.js";import{c as M,d as re,f as ie,l as ae,s as N,u as P}from"./dialog-D_OkVkI9.js";import{Ct as F,a as oe,at as se,c as ce,d as le,f as ue,i as de,l as fe,mt as I,o as pe,pt as me,s as he,u as ge,x as L}from"./index-COoySiAr.js";import{n as R,t as z}from"./CardContent-POdM9knm.js";import{n as B,t as V}from"./CardTitle-mi00cvHk.js";import{t as _e}from"./useClipboard-D_jpOvnE.js";var H={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},U={class:`text-sm text-muted-foreground`},ve={class:`text-2xl font-bold text-foreground mt-1`},ye={class:`text-xs text-muted-foreground mt-1`},W={class:`text-sm text-muted-foreground`},be={class:`text-2xl font-bold text-foreground mt-1`},xe={class:`text-xs text-muted-foreground mt-1`},Se={class:`text-sm text-muted-foreground`},Ce={class:`text-2xl font-bold text-foreground mt-1`},we={class:`text-xs text-muted-foreground mt-1`},G={class:`text-sm text-muted-foreground`},K={class:`text-2xl font-bold text-foreground mt-1`},q={class:`text-xs text-muted-foreground mt-1`},Te=w({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(t){let{t:n}=f(),r=t,i=h(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.errorCount/r.stats.totalRequests*100).toFixed(1)),a=h(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.retryCount/r.stats.totalRequests*100).toFixed(1)),o=h(()=>r.stats?r.stats.p50LatencyMs.toFixed(0):`--`);return(r,c)=>(y(),e(`div`,H,[S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,U,g(p(n)(`monitor.header.activeRequests`)),1),m(`p`,ve,g(t.activeCount),1),m(`p`,ye,g(p(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,W,g(p(n)(`monitor.header.errorRate`)),1),m(`p`,be,g(i.value)+`%`,1),m(`p`,xe,g(t.stats?.errorCount??0)+` / `+g(t.stats?.totalRequests??0),1)]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,Se,g(p(n)(`monitor.header.p50Latency`)),1),m(`p`,Ce,g(o.value)+`ms`,1),m(`p`,we,g(p(n)(`monitor.header.avgLatency`,{value:t.stats?.avgLatencyMs?.toFixed(0)??`--`})),1)]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(z),{class:`p-4`},{default:s(()=>[m(`p`,G,g(p(n)(`monitor.header.retryRate`)),1),m(`p`,K,g(a.value)+`%`,1),m(`p`,q,g(t.stats?.retryCount??0)+` / `+g(t.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),J={class:`space-y-3`},Y={key:0,class:`text-sm text-muted-foreground`},Ee={class:`flex items-center justify-between text-sm`},De={class:`font-medium text-foreground`},X={class:`text-muted-foreground`},Z={class:`text-xs`},Q={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},$={key:1,class:`flex gap-3 text-xs text-muted-foreground`},Oe=w({__name:`ConcurrencyPanel`,props:{providers:{}},setup(t){let{t:n}=f();function i(e){return e.adaptiveLimit??e.maxConcurrency}function o(e,t){let n=e/t;return n>=1?`bg-red-500`:n>=.8?`bg-orange-500`:n>=.5?`bg-yellow-500`:`bg-green-500`}return(s,l)=>(y(),e(`div`,J,[t.providers.length===0?(y(),e(`div`,Y,g(p(n)(`monitor.concurrencyPanel.noData`)),1)):c(``,!0),(y(!0),e(C,null,v(t.providers,t=>(y(),e(`div`,{key:t.providerId,class:`space-y-1`},[m(`div`,Ee,[m(`span`,De,g(t.providerName),1),m(`span`,X,[t.adaptiveEnabled?(y(),e(C,{key:0},[T(g(t.active)+` / `+g(t.adaptiveLimit??t.maxConcurrency)+` `,1),m(`span`,Z,`(`+g(p(n)(`monitor.concurrencyPanel.adaptive`))+`)`,1)],64)):t.maxConcurrency===0?(y(),e(C,{key:1},[T(g(p(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(y(),e(C,{key:2},[T(g(t.active)+` / `+g(t.maxConcurrency),1)],64))])]),t.maxConcurrency>0?(y(),e(`div`,Q,[m(`div`,{class:a([`h-full rounded-full transition-all duration-300`,o(t.active,i(t))]),style:r({width:`${Math.min(100,t.active/i(t)*100)}%`})},null,6)])):c(``,!0),t.maxConcurrency>0?(y(),e(`div`,$,[m(`span`,null,g(p(n)(`monitor.concurrencyPanel.queued`,{count:t.queued})),1),m(`span`,null,g(p(n)(`monitor.concurrencyPanel.queueLimit`,{limit:t.adaptiveLimit??t.maxQueueSize})),1)])):c(``,!0)]))),128))]))}}),ke={key:0,class:`text-sm text-muted-foreground`},Ae={key:1,class:`grid grid-cols-2 gap-3 text-sm`},je={class:`text-muted-foreground`},Me={class:`font-medium text-foreground`},Ne={class:`text-muted-foreground`},Pe={class:`font-medium text-foreground`},Fe={class:`col-span-2`},Ie={class:`flex items-center justify-between`},Le={class:`text-muted-foreground`},Re={class:`text-muted-foreground`},ze={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},Be={class:`text-muted-foreground`},Ve={class:`font-medium text-foreground`},He={class:`text-muted-foreground`},Ue={class:`font-medium text-foreground`},We={class:`col-span-2`},Ge={class:`text-muted-foreground`},Ke={class:`font-medium text-foreground`},qe=w({__name:`RuntimePanel`,props:{runtime:{}},setup(t){let{t:n}=f(),i=t,a=h(()=>!i.runtime||i.runtime.memoryUsage.heapTotal===0?0:Math.min(100,i.runtime.memoryUsage.heapUsed/i.runtime.memoryUsage.heapTotal*100));function o(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}return(i,s)=>t.runtime?(y(),e(`div`,Ae,[m(`div`,null,[m(`p`,je,g(p(n)(`monitor.runtimePanel.uptime`)),1),m(`p`,Me,g(o(t.runtime.uptimeMs)),1)]),m(`div`,null,[m(`p`,Ne,g(p(n)(`monitor.runtimePanel.memoryRss`)),1),m(`p`,Pe,g(p(I)(t.runtime.memoryUsage.rss)),1)]),m(`div`,Fe,[m(`div`,Ie,[m(`p`,Le,g(p(n)(`monitor.runtimePanel.heapUsage`)),1),m(`p`,Re,g(p(I)(t.runtime.memoryUsage.heapUsed))+` / `+g(p(I)(t.runtime.memoryUsage.heapTotal)),1)]),m(`div`,ze,[m(`div`,{class:`h-full bg-primary rounded-full transition-all duration-300`,style:r({width:`${a.value}%`})},null,4)])]),m(`div`,null,[m(`p`,Be,g(p(n)(`monitor.runtimePanel.activeHandles`)),1),m(`p`,Ve,g(t.runtime.activeHandles),1)]),m(`div`,null,[m(`p`,He,g(p(n)(`monitor.runtimePanel.activeRequests`)),1),m(`p`,Ue,g(t.runtime.activeRequests),1)]),m(`div`,We,[m(`p`,Ge,g(p(n)(`monitor.runtimePanel.eventLoopDelay`)),1),m(`p`,Ke,g(t.runtime.eventLoopDelayMs.toFixed(2))+`ms `,1)])])):(y(),e(`div`,ke,g(p(n)(`monitor.runtimePanel.noData`)),1))}}),Je={key:0,class:`text-sm text-muted-foreground`},Ye={key:1,class:`space-y-2`},Xe={class:`flex items-center justify-between text-sm`},Ze={class:`text-muted-foreground`},Qe={class:`h-2 bg-muted rounded-full overflow-hidden`},$e=w({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(t){let{t:n}=f(),i=t,o=h(()=>Object.values(i.byStatusCode).reduce((e,t)=>e+t,0)),s=h(()=>{let e=i.byStatusCode,t=o.value||1,r=c(e,200,299),a=c(e,400,499)-(e[429]||0),s=e[429]||0,l=c(e,500,599);return[{label:n(`monitor.statusCodes.success`),count:r,percent:(r/t*100).toFixed(1),textClass:`text-green-600 dark:text-green-400`,barClass:`bg-green-500`},{label:n(`monitor.statusCodes.clientError`),count:a,percent:(a/t*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:n(`monitor.statusCodes.rateLimited`),count:s,percent:(s/t*100).toFixed(1),textClass:`text-orange-600 dark:text-orange-400`,barClass:`bg-orange-500`},{label:n(`monitor.statusCodes.serverError`),count:l,percent:(l/t*100).toFixed(1),textClass:`text-red-600 dark:text-red-400`,barClass:`bg-red-500`}].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(t,i)=>o.value===0?(y(),e(`div`,Je,g(p(n)(`monitor.statusCodes.noData`)),1)):(y(),e(`div`,Ye,[(y(!0),e(C,null,v(s.value,t=>(y(),e(`div`,{key:t.label,class:`space-y-1`},[m(`div`,Xe,[m(`span`,{class:a(t.textClass)},g(t.label),3),m(`span`,Ze,g(t.count)+` (`+g(t.percent)+`%) `,1)]),m(`div`,Qe,[m(`div`,{class:a([`h-full rounded-full transition-all duration-300`,t.barClass]),style:r({width:`${t.percent}%`})},null,6)])]))),128))]))}}),et={key:0,class:`text-sm text-muted-foreground py-4 text-center`},tt={key:1,class:`text-sm text-muted-foreground py-4 text-center`},nt={class:`flex flex-wrap gap-1`},rt={key:0,class:`text-xs text-muted-foreground`},it=w({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=f(),r=t,i=h(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*100:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*100:0})):[]);return(r,o)=>t.stats?i.value.length===0?(y(),e(`div`,tt,g(p(n)(`monitor.providerTable.noProviders`)),1)):(y(),_(p(ie),{key:2},{default:s(()=>[S(p(N),null,{default:s(()=>[S(p(ae),null,{default:s(()=>[S(p(M),null,{default:s(()=>[...o[0]||=[T(`Provider`,-1)]]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.requests`)),1)]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.successRate`)),1)]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),S(p(M),{class:`text-right`},{default:s(()=>[T(g(p(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),S(p(M),null,{default:s(()=>[T(g(p(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),S(p(re),null,{default:s(()=>[(y(!0),e(C,null,v(i.value,t=>(y(),_(p(ae),{key:t.id},{default:s(()=>[S(p(P),{class:`font-medium`},{default:s(()=>[T(g(t.name),1)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[T(g(t.stats.totalRequests),1)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[m(`span`,{class:a(t.successRate>=95?`text-green-600 dark:text-green-400`:t.successRate>=80?`text-yellow-600 dark:text-yellow-400`:`text-red-500 dark:text-red-400`)},g(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[T(g(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),S(p(P),{class:`text-right`},{default:s(()=>[m(`span`,{class:a(t.retryRate>10?`text-yellow-600 dark:text-yellow-400`:``)},g(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),S(p(P),null,{default:s(()=>[m(`div`,nt,[(y(!0),e(C,null,v(t.stats.topErrors.slice(0,3),e=>(y(),_(p(L),{key:e.code,variant:`destructive`,class:`text-xs`},{default:s(()=>[T(g(e.code)+` (`+g(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(y(),e(`span`,rt,`--`)):c(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(y(),e(`div`,et,g(p(n)(`monitor.providerTable.noData`)),1))}}),at=3e4;function ot(e,t,n){let r=null,i=null,a=0,o=null,s=!1;function c(){document.hidden?o=setTimeout(()=>{u(),n?.onClose?.()},at):(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 ee(()=>{u(),s&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,c),s=!1),n?.onClose?.()}),{connect:l,disconnect:u}}var st=200,ct=404,lt=500;async function ut(e,t){try{let n=dt(e.value,await t());n!==e.value&&(e.value=n)}catch(t){console.error(`useMonitorData.syncActiveOnSSEReconnect failed:`,t),e.value=[...e.value]}}function dt(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 ft(){let e=l([]),t=n([]),r=n(null),i=n([]),a=n(null),o=n(!1),s=!1,c=h(()=>e.value.filter(e=>e.isStream).length),f=h(()=>e.value.filter(e=>!e.queued)),p=h(()=>e.value.filter(e=>e.queued===!0));function m(n){let o;try{o=JSON.parse(n.data)}catch{return}switch(n.type){case`request_start`:{let n=o;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=o;break;case`request_complete`:{let n=o;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>st&&(t.value.length=st);break}case`concurrency_update`:i.value=o;break;case`stats_update`:r.value=o;break;case`stream_content_update`:{let t=o;for(let n of t){let t=e.value.find(e=>e.id===n.id);t&&(t.streamTotalChars=n.totalChars,n.streamMetrics&&(t.streamMetrics=n.streamMetrics))}d(e);break}case`runtime_update`:a.value=o;break}}async function g(){if(o.value=!0,!s){s=!0;return}await ut(e,()=>b.getMonitorActive())}function _(){o.value=!1}async function v(){try{let[n,o,s,c,l]=await Promise.allSettled([b.getMonitorActive(),b.getMonitorRecent(),b.getMonitorStats(),b.getMonitorConcurrency(),b.getMonitorRuntime()]);n.status===`fulfilled`&&(e.value=n.value),o.status===`fulfilled`&&(t.value=o.value),s.status===`fulfilled`&&(r.value=s.value),c.status===`fulfilled`&&(i.value=c.value),l.status===`fulfilled`&&(a.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),r.value=null,i.value=[],a.value=null}}let y=n(null),x=n(!1),S=n(0);async function te(n){let r=++S.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){y.value=null;return}y.value=null,x.value=!0;try{if(i.status===`pending`){try{let e=await b.getMonitorRequest(n);if(r!==S.value)return;y.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==ct)throw e;if(r!==S.value)return;let t=await b.getLogDetail(n);if(r!==S.value)return;y.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await b.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}}y.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),y.value=null}finally{r===S.value&&(x.value=!1)}}let C=n(null),w=n(!1),T=n(null),E=null;function ne(t){if(D(),!t)return;let n=async()=>{let n=e.value.find(e=>e.id===t);if(!n||n.status===`completed`||n.status===`failed`){D();return}try{let e=await b.getMonitorRequest(t);if(C.value!==t)return;e.streamContent&&(T.value=e.streamContent)}catch(e){e?.response?.status===ct&&D()}};n(),E=setInterval(n,lt)}function D(){E&&=(clearInterval(E),null)}function O(e){C.value=e,w.value=!0,T.value=null;let n=t.value.find(t=>t.id===e);n&&(n.status===`completed`||n.status===`failed`)&&(n.streamContent?T.value=n.streamContent:k(e)),ne(e),te(e)}async function k(e){try{let t=await b.getMonitorRequest(e);if(C.value!==e)return;t.streamContent&&(T.value=t.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let A=h(()=>C.value?e.value.find(e=>e.id===C.value)??t.value.find(e=>e.id===C.value)??null:null);return u(()=>A.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(D(),te(C.value))}),ee(()=>{D()}),{activeRequests:e,recentCompleted:t,stats:r,concurrency:i,runtime:a,connected:o,streamCount:c,streamingRequests:f,queuedRequests:p,selectedRequestId:C,selectedRequest:A,requestDetailOpen:w,selectRequest:O,selectedStreamContent:T,logDetailData:y,nonStreamBodyLoading:x,handleSSEMessage:m,handleSSEOpen:g,handleSSEClose:_,loadInitialData:v}}function pt(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function mt(e){let{t}=F.global;switch(e){case`pending`:return t(`common.statusPending`);case`failed`:return t(`common.statusFailed`);case`completed`:return t(`common.statusCompleted`);default:return e}}var ht={class:`p-6`},gt={class:`flex items-center justify-between mb-4`},_t={class:`text-lg font-semibold text-foreground`},vt={class:`flex items-center gap-2`},yt={class:`grid grid-cols-3 gap-4 mb-6`},bt={class:`flex items-center justify-between`},xt={key:0,class:`text-sm text-muted-foreground py-2`},St=[`onClick`],Ct={class:`text-sm text-foreground truncate flex-1`},wt={class:`text-xs text-muted-foreground shrink-0`},Tt={key:0,class:`text-xs text-muted-foreground shrink-0`},Et={key:1,class:`text-xs text-muted-foreground shrink-0`},Dt={class:`flex items-center justify-between`},Ot={key:0,class:`text-sm text-muted-foreground py-2`},kt=[`onClick`],At={class:`text-sm text-foreground truncate flex-1`},jt={class:`text-xs text-muted-foreground shrink-0`},Mt={class:`flex items-center justify-between`},Nt={key:0,class:`text-sm text-muted-foreground py-2`},Pt=[`onClick`],Ft={class:`text-sm text-foreground truncate flex-1`},It={class:`text-xs text-muted-foreground shrink-0`},Lt={class:`grid grid-cols-1 lg:grid-cols-3 gap-4`},Rt=2e3,zt=1e3,Bt=3e3,Vt=w({__name:`Monitor`,setup(r){let{t:l}=f(),{activeRequests:u,recentCompleted:d,stats:w,concurrency:M,runtime:re,connected:ie,streamCount:ae,streamingRequests:N,queuedRequests:P,selectedRequestId:F,selectedRequest:I,requestDetailOpen:H,selectRequest:U,selectedStreamContent:ve,logDetailData:ye,handleSSEMessage:W,handleSSEOpen:be,handleSSEClose:xe,loadInitialData:Se}=ft(),{connect:Ce}=ot(`/admin/api/monitor/stream`,{request_start:W,request_update:W,request_complete:W,concurrency_update:W,stats_update:W,runtime_update:W,stream_content_update:W},{onOpen:be,onClose:xe}),{copy:we}=_e(),G=n(null);function K(e){we(e),G.value=e,setTimeout(()=>{G.value===e&&(G.value=null)},Rt)}let q=n(!1),J=n(null),Y=h(()=>J.value?u.value.find(e=>e.id===J.value)??null:null);function Ee(e){J.value=e,q.value=!0}async function De(){if(J.value){try{await b.killMonitorRequest(J.value),u.value=u.value.filter(e=>e.id!==J.value),de.success(l(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),de.error(t(e,l(`monitor.killFailed`)))}q.value=!1}}let X=n(Date.now()),Z=null;function Q(){$(),Z=setInterval(()=>{X.value=Date.now()},Bt)}function $(){Z&&=(clearInterval(Z),null)}function ke(){document.hidden?$():(X.value=Date.now(),Q())}function Ae(e){return((X.value-e)/zt).toFixed(1)}function je(e){return e.completedAt?((e.completedAt-e.startTime)/zt).toFixed(1)+`s`:`--`}return te(async()=>{await Se(),Ce(),Q(),document.addEventListener(`visibilitychange`,ke)}),ee(()=>{$(),document.removeEventListener(`visibilitychange`,ke)}),(t,n)=>(y(),e(`div`,ht,[m(`div`,gt,[m(`h2`,_t,g(p(l)(`monitor.title`)),1),m(`div`,vt,[S(p(L),{variant:p(ie)?`default`:`destructive`},{default:s(()=>[T(g(p(ie)?p(l)(`monitor.connected`):p(l)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])])]),S(Te,{stats:p(w),"active-count":p(u).length,"stream-count":p(ae)},null,8,[`stats`,`active-count`,`stream-count`]),m(`div`,yt,[S(p(R),null,{default:s(()=>[S(p(B),{class:`pb-2`},{default:s(()=>[m(`div`,bt,[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.activeRequests`)),1)]),_:1}),S(p(L),{variant:`secondary`},{default:s(()=>[T(g(p(N).length),1)]),_:1})])]),_:1}),S(p(z),null,{default:s(()=>[S(p(k),{"delay-duration":300},{default:s(()=>[S(p(E),{class:`h-64`},{default:s(()=>[p(N).length===0?(y(),e(`div`,xt,g(p(l)(`monitor.noActiveRequests`)),1)):c(``,!0),(y(!0),e(C,null,v(p(N),t=>(y(),e(`div`,{key:t.id,class:a([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":p(F)===t.id}]),onClick:e=>p(U)(t.id)},[S(p(L),{variant:p(pt)(t.status),class:`shrink-0`},{default:s(()=>[T(g(p(mt)(t.status)),1)]),_:2},1032,[`variant`]),m(`span`,Ct,g(t.model),1),S(p(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[T(g(t.providerName),1)]),_:2},1024),m(`span`,wt,g(Ae(t.startTime))+`s`,1),t.streamMetrics?.tokensPerSecond?(y(),e(`span`,Tt,g(t.streamMetrics.tokensPerSecond.toFixed(0))+` t/s `,1)):c(``,!0),t.streamMetrics?.outputTokens?(y(),e(`span`,Et,g(t.streamMetrics.outputTokens)+` tok `,1)):c(``,!0),t.isStream?(y(),_(p(L),{key:2,variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[...n[2]||=[T(`SSE`,-1)]]),_:1})):c(``,!0),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:i(e=>K(t.id),[`stop`])},{default:s(()=>[G.value===t.id?(y(),_(p(me),{key:0,class:`size-3 text-success`})):(y(),_(p(D),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:i(e=>Ee(t.id),[`stop`])},{default:s(()=>[S(p(se),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,St))),128))]),_:1})]),_:1})]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),{class:`pb-2`},{default:s(()=>[m(`div`,Dt,[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.queuedRequests`)),1)]),_:1}),S(p(L),{variant:`secondary`},{default:s(()=>[T(g(p(P).length),1)]),_:1})])]),_:1}),S(p(z),null,{default:s(()=>[S(p(k),{"delay-duration":300},{default:s(()=>[S(p(E),{class:`h-64`},{default:s(()=>[p(P).length===0?(y(),e(`div`,Ot,g(p(l)(`monitor.noQueuedRequests`)),1)):c(``,!0),(y(!0),e(C,null,v(p(P),t=>(y(),e(`div`,{key:t.id,class:a([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":p(F)===t.id}]),onClick:e=>p(U)(t.id)},[S(p(L),{variant:`outline`,class:`shrink-0`},{default:s(()=>[T(g(p(l)(`monitor.queued`)),1)]),_:1}),m(`span`,At,g(t.model),1),S(p(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[T(g(t.providerName),1)]),_:2},1024),m(`span`,jt,g(Ae(t.startTime))+`s`,1),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:i(e=>K(t.id),[`stop`])},{default:s(()=>[G.value===t.id?(y(),_(p(me),{key:0,class:`size-3 text-success`})):(y(),_(p(D),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:i(e=>Ee(t.id),[`stop`])},{default:s(()=>[S(p(se),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,kt))),128))]),_:1})]),_:1})]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),{class:`pb-2`},{default:s(()=>[m(`div`,Mt,[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.completed`)),1)]),_:1}),S(p(L),{variant:`secondary`},{default:s(()=>[T(g(p(d).length),1)]),_:1})])]),_:1}),S(p(z),null,{default:s(()=>[S(p(k),{"delay-duration":300},{default:s(()=>[S(p(E),{class:`h-64`},{default:s(()=>[p(d).length===0?(y(),e(`div`,Nt,g(p(l)(`monitor.noCompletedRequests`)),1)):c(``,!0),(y(!0),e(C,null,v(p(d),t=>(y(),e(`div`,{key:t.id,class:a([`flex items-center gap-2 py-1.5 px-2 rounded cursor-pointer opacity-60 hover:opacity-80 hover:bg-muted/50 transition-colors`,{"bg-muted":p(F)===t.id}]),onClick:e=>p(U)(t.id)},[S(p(L),{variant:p(pt)(t.status),class:`shrink-0`},{default:s(()=>[T(g(p(mt)(t.status)),1)]),_:2},1032,[`variant`]),m(`span`,Ft,g(t.model),1),S(p(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[T(g(t.providerName),1)]),_:2},1024),t.isStream?(y(),_(p(L),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:s(()=>[...n[3]||=[T(`SSE`,-1)]]),_:1})):c(``,!0),m(`span`,It,g(je(t)),1),S(p(O),null,{default:s(()=>[S(p(j),{"as-child":``},{default:s(()=>[S(p(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:i(e=>K(t.id),[`stop`])},{default:s(()=>[G.value===t.id?(y(),_(p(me),{key:0,class:`size-3 text-success`})):(y(),_(p(D),{key:1,class:`size-3`}))]),_:2},1032,[`onClick`])]),_:2},1024),S(p(A),null,{default:s(()=>[T(g(p(l)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)],10,Pt))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),S(p(R),{class:`mb-4`},{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.providerStats`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S(it,{stats:p(w)},null,8,[`stats`])]),_:1})]),_:1}),m(`div`,Lt,[S(p(R),null,{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.concurrency`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S(Oe,{providers:p(M)},null,8,[`providers`])]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.statusCodeDistribution`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S($e,{"by-status-code":p(w)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),S(p(R),null,{default:s(()=>[S(p(B),null,{default:s(()=>[S(p(V),{class:`text-sm font-medium text-foreground`},{default:s(()=>[T(g(p(l)(`monitor.runtime`)),1)]),_:1})]),_:1}),S(p(z),null,{default:s(()=>[S(qe,{runtime:p(re)},null,8,[`runtime`])]),_:1})]),_:1})]),S(ne,{open:p(H),"onUpdate:open":n[0]||=e=>o(H)?H.value=e:null,source:`realtime`,request:p(I),"stream-content":p(ve),"log-detail-data":p(ye)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),S(p(ue),{open:q.value,"onUpdate:open":n[1]||=e=>q.value=e},{default:s(()=>[S(p(fe),null,{default:s(()=>[S(p(pe),null,{default:s(()=>[S(p(oe),null,{default:s(()=>[T(g(p(l)(`monitor.killConfirmTitle`)),1)]),_:1}),Y.value?(y(),_(p(ce),{key:0},{default:s(()=>[T(g(p(l)(`monitor.killConfirm`,{model:Y.value.model,provider:Y.value.providerName})),1)]),_:1})):c(``,!0)]),_:1}),S(p(he),null,{default:s(()=>[S(p(ge),null,{default:s(()=>[T(g(p(l)(`monitor.killCancel`)),1)]),_:1}),S(p(le),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:De},{default:s(()=>[T(g(p(l)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{Vt as default};