llm-simple-router 0.9.21 → 0.9.23

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 (41) hide show
  1. package/config/recommended-providers.json +1 -0
  2. package/dist/proxy/orchestration/orchestrator.js +10 -2
  3. package/frontend-dist/assets/{CardContent-DmBQARma.js → CardContent-Cn7OKkf4.js} +1 -1
  4. package/frontend-dist/assets/{CardTitle-DgwtSVqy.js → CardTitle-4FM9jzOA.js} +1 -1
  5. package/frontend-dist/assets/{Checkbox-DgWzyASL.js → Checkbox-peXPi_YE.js} +1 -1
  6. package/frontend-dist/assets/{CollapsibleContent-BjJrE5cf.js → CollapsibleContent-CgqAq4Jf.js} +1 -1
  7. package/frontend-dist/assets/{CollapsibleTrigger-C73cozLg.js → CollapsibleTrigger-DNaZoRW8.js} +1 -1
  8. package/frontend-dist/assets/{Dashboard-D47Lzd5i.js → Dashboard-Cm4JcnYb.js} +1 -1
  9. package/frontend-dist/assets/{Input-glS226Q6.js → Input-Br6PVSFy.js} +1 -1
  10. package/frontend-dist/assets/{Label-B2lstY9k.js → Label-GZl32pWd.js} +1 -1
  11. package/frontend-dist/assets/{Login-B5v_CIaw.js → Login-DoFRYUFk.js} +1 -1
  12. package/frontend-dist/assets/{Logs-CC6e8ty3.js → Logs-3m2BEWDo.js} +1 -1
  13. package/frontend-dist/assets/{MappingEntryEditor-auxWvl8S.js → MappingEntryEditor-Wpkde3VI.js} +1 -1
  14. package/frontend-dist/assets/ModelCard-od6KpofN.js +1 -0
  15. package/frontend-dist/assets/{ModelMappings-DtmMS2o6.js → ModelMappings-RLgKMlDj.js} +1 -1
  16. package/frontend-dist/assets/{Monitor-F6DD03LF.js → Monitor-DWQbOIYI.js} +1 -1
  17. package/frontend-dist/assets/{Providers-DZkl5ryZ.js → Providers-OKgt7MLq.js} +1 -1
  18. package/frontend-dist/assets/{ProxyEnhancement-C1uXuPZm.js → ProxyEnhancement-BG3lHGzz.js} +1 -1
  19. package/frontend-dist/assets/QuickSetup-Cy7xPzpP.js +1 -0
  20. package/frontend-dist/assets/{RetryRules-plJdXlmH.js → RetryRules-D6zhJ-YT.js} +1 -1
  21. package/frontend-dist/assets/{RouterKeys-CLh6XISQ.js → RouterKeys-V4BYi2Xr.js} +1 -1
  22. package/frontend-dist/assets/{RovingFocusItem-BnqO1JTY.js → RovingFocusItem-DcZ3wJIC.js} +1 -1
  23. package/frontend-dist/assets/{Schedules-btnuRbYc.js → Schedules-romgDz2G.js} +1 -1
  24. package/frontend-dist/assets/{Settings-CbQaUkQ5.js → Settings-C4kcd3m9.js} +1 -1
  25. package/frontend-dist/assets/{Setup-8yOUQ97d.js → Setup-Df7MMOO9.js} +1 -1
  26. package/frontend-dist/assets/{Switch-BwPbL6O4.js → Switch-CzzBLx2L.js} +1 -1
  27. package/frontend-dist/assets/{TooltipTrigger-D4gYyjGF.js → TooltipTrigger-UwQzn5Jd.js} +1 -1
  28. package/frontend-dist/assets/{TransformRulesForm-C6PBk8zI.js → TransformRulesForm-CwHjFf_8.js} +1 -1
  29. package/frontend-dist/assets/{UnifiedRequestDialog-rmWxp09D.js → UnifiedRequestDialog-BbafY6jV.js} +1 -1
  30. package/frontend-dist/assets/{VisuallyHiddenInput-BPy71v35.js → VisuallyHiddenInput-h1_JJr8A.js} +1 -1
  31. package/frontend-dist/assets/{button-DRFSckEU.js → button-BwrBFTfJ.js} +2 -2
  32. package/frontend-dist/assets/{copy-BsWNnxok.js → copy-ZvTZUKRc.js} +1 -1
  33. package/frontend-dist/assets/{dialog-DxoN_Irc.js → dialog-CVXqy9Fc.js} +1 -1
  34. package/frontend-dist/assets/{index-Dr-BkaVu.js → index-C8xJ1Vhe.js} +2 -2
  35. package/frontend-dist/assets/{trash-2-DZ6KuutY.js → trash-2-DSx-MkZy.js} +1 -1
  36. package/frontend-dist/assets/{useClipboard-B0s-K67s.js → useClipboard-CszJHvCV.js} +1 -1
  37. package/frontend-dist/assets/{useLogRetention-BS-AFvlE.js → useLogRetention-BZZYkmu1.js} +1 -1
  38. package/frontend-dist/index.html +2 -2
  39. package/package.json +1 -1
  40. package/frontend-dist/assets/ModelCard-DixuS062.js +0 -1
  41. package/frontend-dist/assets/QuickSetup-BEeZJQ3g.js +0 -1
@@ -1 +1 @@
1
- import{$ as e,Ot as t,Tt as n,V as r,Vt as i,X as a,dt as o,m as s,r as c,zt as l}from"./button-DRFSckEU.js";var u=e({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(e,{emit:u}){let d=e,f=s(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(e,s)=>n((o(),a(`input`,{"onUpdate:modelValue":s[0]||=e=>t(f)?f.value=e:null,"data-slot":`input`,class:i(l(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,l(f)]])}});export{u as t};
1
+ import{$ as e,Ot as t,Tt as n,V as r,Vt as i,X as a,dt as o,m as s,r as c,zt as l}from"./button-BwrBFTfJ.js";var u=e({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(e,{emit:u}){let d=e,f=s(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(e,s)=>n((o(),a(`input`,{"onUpdate:modelValue":s[0]||=e=>t(f)?f.value=e:null,"data-slot":`input`,class:i(l(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,l(f)]])}});export{u as t};
@@ -1 +1 @@
1
- import{$ as e,J as t,dt as n,i as r,mt as i,o as a,ot as o,r as s,wt as c,x as l,zt as u}from"./button-DRFSckEU.js";var d=e({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(e){let s=e;return a(),(e,a)=>(n(),t(u(r),o(s,{onMousedown:a[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:c(()=>[i(e.$slots,`default`)]),_:3},16))}}),f=e({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e,a=l(r,`class`);return(e,l)=>(n(),t(u(d),o({"data-slot":`label`},u(a),{class:u(s)(`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`,r.class)}),{default:c(()=>[i(e.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
1
+ import{$ as e,J as t,dt as n,i as r,mt as i,o as a,ot as o,r as s,wt as c,x as l,zt as u}from"./button-BwrBFTfJ.js";var d=e({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(e){let s=e;return a(),(e,a)=>(n(),t(u(r),o(s,{onMousedown:a[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:c(()=>[i(e.$slots,`default`)]),_:3},16))}}),f=e({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e,a=l(r,`class`);return(e,l)=>(n(),t(u(d),o({"data-slot":`label`},u(a),{class:u(s)(`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`,r.class)}),{default:c(()=>[i(e.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
@@ -1 +1 @@
1
- import{$ as e,A as t,I as n,J as r,Mt as i,Q as a,R as o,U as s,Wt as c,X as l,Y as u,Z as d,dt as f,k as p,n as m,q as h,wt as g,zt as _}from"./button-DRFSckEU.js";import{t as v}from"./Label-B2lstY9k.js";import{Q as y,Z as b,t as x}from"./index-Dr-BkaVu.js";import{n as S,t as C}from"./CardContent-DmBQARma.js";import{t as w}from"./Input-glS226Q6.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=e({__name:`Login`,setup(e){let{t:k}=n(),{isDark:A,toggleTheme:j}=x(),M=o(),N=i(``),P=i(``),F=i(!1);async function I(){if(N.value){P.value=``,F.value=!0;try{await p.login(N.value),M.push(`/`)}catch(e){P.value=t(e,k(`login.loginFailed`))}finally{F.value=!1}}}return(e,t)=>(f(),l(`div`,T,[a(_(m),{variant:`ghost`,size:`icon`,class:`absolute top-4 right-4 text-muted-foreground hover:text-foreground`,onClick:_(j)},{default:g(()=>[_(A)?(f(),r(_(b),{key:1,class:`w-4 h-4`})):(f(),r(_(y),{key:0,class:`w-4 h-4`}))]),_:1},8,[`onClick`]),a(_(S),{class:`w-full max-w-sm shadow-lg`},{default:g(()=>[a(_(C),{class:`pt-6`},{default:g(()=>[h(`div`,E,[t[1]||=h(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[h(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[h(`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),t[2]||=h(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`,-1),h(`p`,D,c(_(k)(`login.subtitle`)),1)]),h(`form`,{onSubmit:s(I,[`prevent`]),class:`space-y-4`},[h(`div`,null,[a(_(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[d(c(_(k)(`login.password`)),1)]),_:1}),a(_(w),{modelValue:N.value,"onUpdate:modelValue":t[0]||=e=>N.value=e,type:`password`,placeholder:_(k)(`login.passwordPlaceholder`),disabled:F.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),P.value?(f(),l(`p`,O,c(P.value),1)):u(``,!0),a(_(m),{type:`submit`,class:`w-full`,disabled:F.value},{default:g(()=>[d(c(F.value?_(k)(`login.loggingIn`):_(k)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{k as default};
1
+ import{$ as e,A as t,I as n,J as r,Mt as i,Q as a,R as o,U as s,Wt as c,X as l,Y as u,Z as d,dt as f,k as p,n as m,q as h,wt as g,zt as _}from"./button-BwrBFTfJ.js";import{t as v}from"./Label-GZl32pWd.js";import{Q as y,Z as b,t as x}from"./index-C8xJ1Vhe.js";import{n as S,t as C}from"./CardContent-Cn7OKkf4.js";import{t as w}from"./Input-Br6PVSFy.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=e({__name:`Login`,setup(e){let{t:k}=n(),{isDark:A,toggleTheme:j}=x(),M=o(),N=i(``),P=i(``),F=i(!1);async function I(){if(N.value){P.value=``,F.value=!0;try{await p.login(N.value),M.push(`/`)}catch(e){P.value=t(e,k(`login.loginFailed`))}finally{F.value=!1}}}return(e,t)=>(f(),l(`div`,T,[a(_(m),{variant:`ghost`,size:`icon`,class:`absolute top-4 right-4 text-muted-foreground hover:text-foreground`,onClick:_(j)},{default:g(()=>[_(A)?(f(),r(_(b),{key:1,class:`w-4 h-4`})):(f(),r(_(y),{key:0,class:`w-4 h-4`}))]),_:1},8,[`onClick`]),a(_(S),{class:`w-full max-w-sm shadow-lg`},{default:g(()=>[a(_(C),{class:`pt-6`},{default:g(()=>[h(`div`,E,[t[1]||=h(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[h(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[h(`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),t[2]||=h(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`,-1),h(`p`,D,c(_(k)(`login.subtitle`)),1)]),h(`form`,{onSubmit:s(I,[`prevent`]),class:`space-y-4`},[h(`div`,null,[a(_(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[d(c(_(k)(`login.password`)),1)]),_:1}),a(_(w),{modelValue:N.value,"onUpdate:modelValue":t[0]||=e=>N.value=e,type:`password`,placeholder:_(k)(`login.passwordPlaceholder`),disabled:F.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),P.value?(f(),l(`p`,O,c(P.value),1)):u(``,!0),a(_(m),{type:`submit`,class:`w-full`,disabled:F.value},{default:g(()=>[d(c(F.value?_(k)(`login.loggingIn`):_(k)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{k as default};
@@ -1 +1 @@
1
- import{$ as e,A as t,I as n,J as r,K as i,Mt as a,Ot as o,Q as s,U as c,Vt as l,W as u,Wt as d,X as f,Y as p,Z as m,dt as h,k as g,lt as _,n as v,pt as y,q as b,r as x,wt as S,xt as C,zt as w}from"./button-DRFSckEU.js";import{r as T,t as ee}from"./UnifiedRequestDialog-rmWxp09D.js";import{t as E}from"./copy-BsWNnxok.js";import{i as D,n as O,r as te,t as ne}from"./TooltipTrigger-D4gYyjGF.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-DxoN_Irc.js";import{t as de}from"./Label-B2lstY9k.js";import{a as fe,b as M,c as pe,d as me,f as N,g as P,h as F,i as he,m as I,nt as ge,o as _e,p as L,r as R,rt as z,s as ve,u as ye}from"./index-Dr-BkaVu.js";import{t as B}from"./Input-glS226Q6.js";import{t as be}from"./useClipboard-B0s-K67s.js";import{t as xe}from"./useLogRetention-BS-AFvlE.js";var Se=e({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(h(),f(`div`,{"data-slot":`skeleton`,class:l(w(x)(`bg-muted rounded-md animate-pulse`,t.class))},null,2))}}),V={key:1,class:`ml-4 text-muted-foreground text-xs`},H={class:`inline-flex items-center gap-1`},U={class:`font-mono`},W={key:2,class:`text-muted-foreground`},Ce={key:1,class:`text-muted-foreground`},G={key:1,class:`text-muted-foreground`},we=e({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:[`toggleExpand`,`openDetail`],setup(e,{emit:t}){let i=t,{t:a}=n(),{copied:o,copy:g}=be();function _(e){if(!e)return a(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return a(`logs.row.unknown`)}}return(t,n)=>(h(),r(w(A),{class:l({"bg-destructive/10":!e.isChild&&(e.log.status_code??0)>=400,"bg-muted/20":e.isChild})},{default:S(()=>[s(w(j),{class:`w-10`},{default:S(()=>[!e.isChild&&e.log.child_count?(h(),r(w(v),{key:0,variant:`ghost`,size:`xs`,onClick:n[0]||=t=>i(`toggleExpand`,e.log)},{default:S(()=>[b(`span`,{class:l([`text-xs transition-transform`,e.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):p(``,!0),e.isChild?(h(),f(`span`,V,`└`)):p(``,!0)]),_:1}),s(w(j),{class:`font-mono text-xs text-muted-foreground`,title:e.log.id},{default:S(()=>[b(`span`,H,[m(d(e.log.id.slice(0,8))+` `,1),s(w(O),null,{default:S(()=>[s(w(D),{"delay-duration":300},{default:S(()=>[s(w(ne),{"as-child":``},{default:S(()=>[s(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:n[1]||=c(t=>w(g)(e.log.id),[`stop`])},{default:S(()=>[w(o)?(h(),r(w(ge),{key:0,class:`size-3 text-success`})):(h(),r(w(E),{key:1,class:`size-3`}))]),_:1})]),_:1}),s(w(te),null,{default:S(()=>[m(d(w(a)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})]),_:1})])]),_:1},8,[`title`]),s(w(j),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(z)(e.log.created_at)),1)]),_:1}),s(w(j),null,{default:S(()=>[s(w(M),{variant:e.log.api_type===`openai`?`default`:`secondary`},{default:S(()=>[m(d(e.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),s(w(j),{class:`font-mono text-xs`},{default:S(()=>[m(d(e.log.model||`-`)+` `,1),!e.isChild&&e.log.original_model?(h(),r(w(M),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:S(()=>[m(d(w(a)(`logs.row.replaced`)),1)]),_:1})):p(``,!0)]),_:1}),s(w(j),{class:`text-xs`},{default:S(()=>[!e.isChild&&e.log.provider_id===w(`router`)?(h(),r(w(M),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:S(()=>[m(d(w(a)(`logs.row.proxyEnhancement`,{label:_(e.log.upstream_request)})),1)]),_:1})):e.log.backend_model||e.log.provider_name?(h(),f(u,{key:1},[b(`span`,U,d(e.log.backend_model||`-`),1),n[3]||=b(`span`,{class:`text-muted-foreground`},` @ `,-1),s(w(M),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:S(()=>[m(d(e.log.provider_name||e.log.provider_id||`-`),1)]),_:1})],64)):(h(),f(`span`,W,`-`))]),_:1}),s(w(j),null,{default:S(()=>[s(w(M),{variant:(e.log.status_code??0)<400?`default`:`destructive`},{default:S(()=>[m(d(e.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),s(w(j),null,{default:S(()=>[m(d(e.log.latency_ms?e.log.latency_ms+`ms`:`-`),1)]),_:1}),s(w(j),null,{default:S(()=>[m(d(e.log.is_stream?`Yes`:`No`),1)]),_:1}),s(w(j),null,{default:S(()=>[e.log.is_retry?(h(),r(w(M),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:S(()=>[m(d(w(a)(`logs.table.retry`)),1)]),_:1})):(h(),f(`span`,Ce,`-`))]),_:1}),s(w(j),null,{default:S(()=>[e.log.is_failover?(h(),r(w(M),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:S(()=>[m(d(w(a)(`logs.table.failover`)),1)]),_:1})):(h(),f(`span`,G,`-`))]),_:1}),s(w(j),{class:`text-destructive text-xs`},{default:S(()=>[m(d(e.log.error_message||`-`),1)]),_:1}),s(w(j),null,{default:S(()=>[s(w(v),{variant:`ghost`,size:`sm`,onClick:n[2]||=t=>i(`openDetail`,e.log.id)},{default:S(()=>[m(d(w(a)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),K=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function Te(){let{t:e}=n(),r=a(`5h`),o=a({start:``,end:``}),s=a(`all`),c=a(`all`),l=a(`all`),u=a(`all`),d=a(`all`),f=a([]),p=a([]),m=a([]),h=i(()=>o.value.start&&o.value.end&&o.value.start<o.value.end),v=i(()=>{let{start:t,end:n}=o.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),y=i(()=>{if(s.value===`all`)return m.value;let e=f.value.find(e=>e.id===s.value);if(!e)return m.value;let t=new Set(e.models.map(e=>e.name));return m.value.filter(e=>t.has(e))});function b(e){return e.includes(`T`)?`${e}:00.000Z`:`${e}T00:00:00.000Z`}function x(e){return e.includes(`T`)?`${e}:59.999Z`:`${e}T23:59:59.999Z`}let S={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function C(){let e={};if(h.value)e.start_time=b(o.value.start),e.end_time=x(o.value.end);else{let t=S[r.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return u.value!==`all`&&(e.api_type=u.value),s.value!==`all`&&(e.provider_id=s.value),c.value!==`all`&&(e.model=c.value),l.value!==`all`&&(e.router_key_id=l.value),d.value!==`all`&&(e.status_code=d.value),e}function w(){o.value={start:``,end:``}}async function T(){try{f.value=await g.getProviders()}catch(n){console.error(`Failed to load providers:`,n),R.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function ee(){try{p.value=await g.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),R.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function E(){try{let e=await g.getMetricsSummary({period:`30d`});m.value=[...new Set(e.map(e=>e.backend_model))]}catch{m.value=[]}}return _(()=>{Promise.allSettled([T(),ee(),E()])}),{PERIODS:K,period:r,dateRange:o,dateRangeError:v,providerFilter:s,modelFilter:c,keyFilter:l,apiTypeFilter:u,statusFilter:d,providers:f,routerKeys:p,filteredModelOptions:y,hasDateRange:h,clearDateRange:w,buildFilterParams:C}}var q=20,Ee=864e5;function De(){let{t:e}=n(),r=a([]),o=a(0),s=a(1),c=a({}),l=a(30),u=a(!1),d=a(new Set),f=a({}),p=a({}),m=a(!1),h=a(null),_=i(()=>Math.ceil(o.value/q));async function v(n){n&&(c.value=n);try{let e=await g.getLogs({page:s.value,limit:q,view:`grouped`,...c.value});r.value=e.data,o.value=e.total,d.value.clear(),f.value={},p.value={}}catch(n){console.error(`Failed to load logs:`,n),R.error(t(n,e(`logs.messages.loadFailed`)))}}function y(e){e>=1&&e<=_.value&&e!==s.value&&(s.value=e,v())}let b=a(null),x=a(!1);async function S(){try{let e=new Date(Date.now()-l.value*Ee).toISOString(),t=await g.deleteLogsBefore(e);u.value=!1,s.value=1,await v(),b.value=t.deleted,x.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),R.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function C(n){let r=n.id;if(d.value.has(r)){d.value.delete(r);return}if(d.value.add(r),!f.value[r]){p.value[r]=!0;try{f.value[r]=await g.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),R.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{p.value[r]=!1}}}async function w(n){try{h.value=await g.getLogDetail(n),m.value=!0}catch(n){console.error(`Failed to load log detail:`,n),R.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:q,logs:r,total:o,page:s,totalPages:_,cleanupDays:l,showCleanup:u,expandedRows:d,childLogs:f,childLoading:p,logDetailOpen:m,selectedLogEntry:h,cleanupResult:b,showCleanupResult:x,loadLogs:v,goToPage:y,handleCleanup:S,toggleExpand:C,openLogDetail:w}}var Oe={class:`p-6`},ke={class:`flex items-center justify-between mb-4`},Ae={class:`text-lg font-semibold text-foreground`},je={class:`flex flex-wrap items-center gap-2 mb-4`},Me={class:`flex gap-1`},Ne={class:`flex items-center gap-1`},Pe={key:1,class:`text-xs text-destructive whitespace-nowrap`},Fe={class:`bg-card rounded-lg border overflow-hidden`},Ie={class:`flex items-center justify-between mt-4`},Le={class:`text-sm text-muted-foreground`},Re={class:`flex items-center gap-1`},ze={key:0,class:`px-2 text-sm text-muted-foreground`},Be={class:`text-sm text-muted-foreground`},Ve={class:`mb-4`},He={class:`space-y-3`},Ue={class:`text-sm font-medium`},We={class:`flex items-center gap-3`},Ge={class:`text-xs text-muted-foreground`},Ke={class:`flex justify-end`},qe=13,Je=300,Ye=7,J=2,Y=1,X=e({__name:`Logs`,setup(e){let{t}=n(),{PERIODS:a,period:c,dateRange:l,dateRangeError:g,providerFilter:x,modelFilter:E,keyFilter:D,statusFilter:O,providers:te,routerKeys:ne,filteredModelOptions:M,clearDateRange:ge,buildFilterParams:R}=Te(),{logs:z,total:be,page:V,totalPages:H,cleanupDays:U,showCleanup:W,cleanupResult:Ce,showCleanupResult:G,expandedRows:K,childLogs:q,childLoading:Ee,logDetailOpen:X,selectedLogEntry:Xe,loadLogs:Ze,goToPage:Z,handleCleanup:Qe,toggleExpand:$e,openLogDetail:et}=De(),tt=i(()=>{let e=H.value,t=V.value;if(e<=Ye)return Array.from({length:e},(e,t)=>t+1);let n=[Y],r=Math.max(Y+1,t-J),i=Math.min(e-Y,t+J);r>Y+J&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-J&&n.push(`...`),n.push(e),n}),{retentionDays:Q,retentionSaving:nt,saveRetention:rt,loadRetention:it}=xe(),$=null;return C([c,l,x,E,D,O],()=>{V.value=1,$&&clearTimeout($),$=setTimeout(()=>Ze(R()),Je)},{deep:!0}),_(()=>{Ze(R()),it()}),(e,n)=>(h(),f(`div`,Oe,[b(`div`,ke,[b(`h2`,Ae,d(w(t)(`logs.title`)),1),s(w(v),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:n[0]||=e=>W.value=!0},{default:S(()=>[m(d(w(t)(`logs.cleanupLogs`)),1)]),_:1})]),b(`div`,je,[b(`div`,Me,[(h(!0),f(u,null,y(w(a),e=>(h(),r(w(v),{key:e.value,variant:w(c)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>c.value=e.value},{default:S(()=>[m(d(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),b(`div`,Ne,[s(w(B),{type:`datetime-local`,modelValue:w(l).start,"onUpdate:modelValue":n[1]||=e=>w(l).start=e,class:`w-44`},null,8,[`modelValue`]),n[18]||=b(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),s(w(B),{type:`datetime-local`,modelValue:w(l).end,"onUpdate:modelValue":n[2]||=e=>w(l).end=e,class:`w-44`},null,8,[`modelValue`]),w(l).start||w(l).end?(h(),r(w(v),{key:0,variant:`ghost`,size:`sm`,onClick:w(ge)},{default:S(()=>[m(d(w(t)(`logs.clear`)),1)]),_:1},8,[`onClick`])):p(``,!0),w(g)?(h(),f(`span`,Pe,d(w(g)),1)):p(``,!0)]),s(w(P),{modelValue:w(x),"onUpdate:modelValue":n[3]||=e=>o(x)?x.value=e:null},{default:S(()=>[s(w(L),{class:`w-28 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allProviders`)),1)]),_:1}),(h(!0),f(u,null,y(w(te),e=>(h(),r(w(I),{key:e.id,value:e.id},{default:S(()=>[m(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),s(w(P),{modelValue:w(E),"onUpdate:modelValue":n[4]||=e=>o(E)?E.value=e:null},{default:S(()=>[s(w(L),{class:`w-32 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allModels`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allModels`)),1)]),_:1}),(h(!0),f(u,null,y(w(M),e=>(h(),r(w(I),{key:e,value:e},{default:S(()=>[m(d(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),s(w(P),{modelValue:w(D),"onUpdate:modelValue":n[5]||=e=>o(D)?D.value=e:null},{default:S(()=>[s(w(L),{class:`w-32 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allKeys`)),1)]),_:1}),(h(!0),f(u,null,y(w(ne),e=>(h(),r(w(I),{key:e.id,value:e.id},{default:S(()=>[m(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),s(w(P),{modelValue:w(O),"onUpdate:modelValue":n[6]||=e=>o(O)?O.value=e:null},{default:S(()=>[s(w(L),{class:`w-28 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allStatus`)),1)]),_:1}),s(w(I),{value:`200`},{default:S(()=>[...n[19]||=[m(`200`,-1)]]),_:1}),s(w(I),{value:`non200`},{default:S(()=>[m(d(w(t)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),b(`div`,Fe,[s(w(ae),null,{default:S(()=>[s(w(le),null,{default:S(()=>[s(w(A),{class:`bg-muted`},{default:S(()=>[s(w(k),{class:`w-10`}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.id`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.time`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.type`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.model`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.actualForward`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.statusCode`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.latency`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.streaming`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.retry`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.failover`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.error`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),s(w(ie),null,{default:S(()=>[(h(!0),f(u,null,y(w(z),e=>(h(),f(u,{key:e.id},[s(we,{log:e,expanded:w(K).has(e.id),onToggleExpand:w($e),onOpenDetail:w(et)},null,8,[`log`,`expanded`,`onToggleExpand`,`onOpenDetail`]),w(K).has(e.id)?(h(),f(u,{key:0},[w(Ee)[e.id]?(h(),r(w(A),{key:0},{default:S(()=>[s(w(j),{colspan:qe,class:`text-center py-2 pl-10`},{default:S(()=>[s(w(Se),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):w(q)[e.id]?.length?(h(!0),f(u,{key:1},y(w(q)[e.id],e=>(h(),r(we,{key:e.id,log:e,"is-child":!0,onOpenDetail:w(et)},null,8,[`log`,`onOpenDetail`]))),128)):p(``,!0)],64)):p(``,!0)],64))),128)),w(z).length===0?(h(),r(w(A),{key:0},{default:S(()=>[s(w(j),{colspan:qe,class:`text-center text-muted-foreground py-8`},{default:S(()=>[m(d(w(t)(`logs.noLogs`)),1)]),_:1})]),_:1})):p(``,!0)]),_:1})]),_:1})]),b(`div`,Ie,[b(`p`,Le,d(w(t)(`logs.pagination`,{total:w(be),page:w(V),totalPages:w(H)})),1),b(`div`,Re,[s(w(v),{variant:`outline`,size:`sm`,onClick:n[7]||=e=>w(Z)(1),disabled:w(V)<=1},{default:S(()=>[m(d(w(t)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),s(w(v),{variant:`outline`,size:`sm`,onClick:n[8]||=e=>w(Z)(w(V)-1),disabled:w(V)<=1},{default:S(()=>[m(d(w(t)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(h(!0),f(u,null,y(tt.value,e=>(h(),f(u,{key:e},[e===`...`?(h(),f(`span`,ze,`...`)):(h(),r(w(v),{key:1,variant:e===w(V)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>w(Z)(e)},{default:S(()=>[m(d(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),s(w(v),{variant:`outline`,size:`sm`,onClick:n[9]||=e=>w(Z)(w(V)+1),disabled:w(V)>=w(H)},{default:S(()=>[m(d(w(t)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),s(w(v),{variant:`outline`,size:`sm`,onClick:n[10]||=e=>w(Z)(w(H)),disabled:w(V)>=w(H)},{default:S(()=>[m(d(w(t)(`logs.lastPage`)),1)]),_:1},8,[`disabled`]),n[20]||=m(` > `,-1)])]),s(ee,{open:w(X),"onUpdate:open":n[11]||=e=>o(X)?X.value=e:null,source:`history`,"log-entry":w(Xe)},null,8,[`open`,`log-entry`]),s(w(se),{open:w(W),"onUpdate:open":n[15]||=e=>o(W)?W.value=e:null},{default:S(()=>[s(w(re),null,{default:S(()=>[s(w(oe),null,{default:S(()=>[s(w(ue),null,{default:S(()=>[m(d(w(t)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),b(`p`,Be,d(w(t)(`logs.cleanup.description`)),1),b(`div`,Ve,[s(w(de),{class:`block text-sm font-medium text-foreground mb-1`},{default:S(()=>[m(d(w(t)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),s(w(B),{modelValue:w(U),"onUpdate:modelValue":n[12]||=e=>o(U)?U.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),s(w(T)),b(`div`,He,[b(`div`,Ue,d(w(t)(`logs.cleanup.autoCleanup`)),1),b(`div`,We,[s(w(de),{class:`whitespace-nowrap`},{default:S(()=>[m(d(w(t)(`logs.cleanup.retentionDays`)),1)]),_:1}),s(w(B),{type:`number`,modelValue:w(Q),"onUpdate:modelValue":n[13]||=e=>o(Q)?Q.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-20`},null,8,[`modelValue`]),b(`span`,Ge,d(w(t)(`logs.cleanup.noAutoCleanup`)),1)]),b(`div`,Ke,[s(w(v),{size:`sm`,onClick:w(rt),disabled:w(nt)},{default:S(()=>[m(d(w(t)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])])]),s(w(ce),null,{default:S(()=>[s(w(v),{variant:`outline`,onClick:n[14]||=e=>W.value=!1},{default:S(()=>[m(d(w(t)(`common.cancel`)),1)]),_:1}),s(w(v),{variant:`destructive`,onClick:w(Qe)},{default:S(()=>[m(d(w(t)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),s(w(me),{open:w(G),"onUpdate:open":n[17]||=e=>o(G)?G.value=e:null},{default:S(()=>[s(w(pe),null,{default:S(()=>[s(w(fe),null,{default:S(()=>[s(w(he),null,{default:S(()=>[m(d(w(t)(`logs.cleanupResult.title`)),1)]),_:1}),s(w(ve),null,{default:S(()=>[m(d(w(t)(`logs.cleanupResult.description`,{count:w(Ce)})),1)]),_:1})]),_:1}),s(w(_e),null,{default:S(()=>[s(w(ye),{onClick:n[16]||=e=>G.value=!1},{default:S(()=>[m(d(w(t)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{X as default};
1
+ import{$ as e,A as t,I as n,J as r,K as i,Mt as a,Ot as o,Q as s,U as c,Vt as l,W as u,Wt as d,X as f,Y as p,Z as m,dt as h,k as g,lt as _,n as v,pt as y,q as b,r as x,wt as S,xt as C,zt as w}from"./button-BwrBFTfJ.js";import{r as T,t as ee}from"./UnifiedRequestDialog-BbafY6jV.js";import{t as E}from"./copy-ZvTZUKRc.js";import{i as D,n as O,r as te,t as ne}from"./TooltipTrigger-UwQzn5Jd.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-CVXqy9Fc.js";import{t as de}from"./Label-GZl32pWd.js";import{a as fe,b as M,c as pe,d as me,f as N,g as P,h as F,i as he,m as I,nt as ge,o as _e,p as L,r as R,rt as z,s as ve,u as ye}from"./index-C8xJ1Vhe.js";import{t as B}from"./Input-Br6PVSFy.js";import{t as be}from"./useClipboard-CszJHvCV.js";import{t as xe}from"./useLogRetention-BZZYkmu1.js";var Se=e({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(h(),f(`div`,{"data-slot":`skeleton`,class:l(w(x)(`bg-muted rounded-md animate-pulse`,t.class))},null,2))}}),V={key:1,class:`ml-4 text-muted-foreground text-xs`},H={class:`inline-flex items-center gap-1`},U={class:`font-mono`},W={key:2,class:`text-muted-foreground`},Ce={key:1,class:`text-muted-foreground`},G={key:1,class:`text-muted-foreground`},we=e({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:[`toggleExpand`,`openDetail`],setup(e,{emit:t}){let i=t,{t:a}=n(),{copied:o,copy:g}=be();function _(e){if(!e)return a(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return a(`logs.row.unknown`)}}return(t,n)=>(h(),r(w(A),{class:l({"bg-destructive/10":!e.isChild&&(e.log.status_code??0)>=400,"bg-muted/20":e.isChild})},{default:S(()=>[s(w(j),{class:`w-10`},{default:S(()=>[!e.isChild&&e.log.child_count?(h(),r(w(v),{key:0,variant:`ghost`,size:`xs`,onClick:n[0]||=t=>i(`toggleExpand`,e.log)},{default:S(()=>[b(`span`,{class:l([`text-xs transition-transform`,e.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):p(``,!0),e.isChild?(h(),f(`span`,V,`└`)):p(``,!0)]),_:1}),s(w(j),{class:`font-mono text-xs text-muted-foreground`,title:e.log.id},{default:S(()=>[b(`span`,H,[m(d(e.log.id.slice(0,8))+` `,1),s(w(O),null,{default:S(()=>[s(w(D),{"delay-duration":300},{default:S(()=>[s(w(ne),{"as-child":``},{default:S(()=>[s(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:n[1]||=c(t=>w(g)(e.log.id),[`stop`])},{default:S(()=>[w(o)?(h(),r(w(ge),{key:0,class:`size-3 text-success`})):(h(),r(w(E),{key:1,class:`size-3`}))]),_:1})]),_:1}),s(w(te),null,{default:S(()=>[m(d(w(a)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})]),_:1})])]),_:1},8,[`title`]),s(w(j),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(z)(e.log.created_at)),1)]),_:1}),s(w(j),null,{default:S(()=>[s(w(M),{variant:e.log.api_type===`openai`?`default`:`secondary`},{default:S(()=>[m(d(e.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),s(w(j),{class:`font-mono text-xs`},{default:S(()=>[m(d(e.log.model||`-`)+` `,1),!e.isChild&&e.log.original_model?(h(),r(w(M),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:S(()=>[m(d(w(a)(`logs.row.replaced`)),1)]),_:1})):p(``,!0)]),_:1}),s(w(j),{class:`text-xs`},{default:S(()=>[!e.isChild&&e.log.provider_id===w(`router`)?(h(),r(w(M),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:S(()=>[m(d(w(a)(`logs.row.proxyEnhancement`,{label:_(e.log.upstream_request)})),1)]),_:1})):e.log.backend_model||e.log.provider_name?(h(),f(u,{key:1},[b(`span`,U,d(e.log.backend_model||`-`),1),n[3]||=b(`span`,{class:`text-muted-foreground`},` @ `,-1),s(w(M),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:S(()=>[m(d(e.log.provider_name||e.log.provider_id||`-`),1)]),_:1})],64)):(h(),f(`span`,W,`-`))]),_:1}),s(w(j),null,{default:S(()=>[s(w(M),{variant:(e.log.status_code??0)<400?`default`:`destructive`},{default:S(()=>[m(d(e.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),s(w(j),null,{default:S(()=>[m(d(e.log.latency_ms?e.log.latency_ms+`ms`:`-`),1)]),_:1}),s(w(j),null,{default:S(()=>[m(d(e.log.is_stream?`Yes`:`No`),1)]),_:1}),s(w(j),null,{default:S(()=>[e.log.is_retry?(h(),r(w(M),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:S(()=>[m(d(w(a)(`logs.table.retry`)),1)]),_:1})):(h(),f(`span`,Ce,`-`))]),_:1}),s(w(j),null,{default:S(()=>[e.log.is_failover?(h(),r(w(M),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:S(()=>[m(d(w(a)(`logs.table.failover`)),1)]),_:1})):(h(),f(`span`,G,`-`))]),_:1}),s(w(j),{class:`text-destructive text-xs`},{default:S(()=>[m(d(e.log.error_message||`-`),1)]),_:1}),s(w(j),null,{default:S(()=>[s(w(v),{variant:`ghost`,size:`sm`,onClick:n[2]||=t=>i(`openDetail`,e.log.id)},{default:S(()=>[m(d(w(a)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),K=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function Te(){let{t:e}=n(),r=a(`5h`),o=a({start:``,end:``}),s=a(`all`),c=a(`all`),l=a(`all`),u=a(`all`),d=a(`all`),f=a([]),p=a([]),m=a([]),h=i(()=>o.value.start&&o.value.end&&o.value.start<o.value.end),v=i(()=>{let{start:t,end:n}=o.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),y=i(()=>{if(s.value===`all`)return m.value;let e=f.value.find(e=>e.id===s.value);if(!e)return m.value;let t=new Set(e.models.map(e=>e.name));return m.value.filter(e=>t.has(e))});function b(e){return e.includes(`T`)?`${e}:00.000Z`:`${e}T00:00:00.000Z`}function x(e){return e.includes(`T`)?`${e}:59.999Z`:`${e}T23:59:59.999Z`}let S={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function C(){let e={};if(h.value)e.start_time=b(o.value.start),e.end_time=x(o.value.end);else{let t=S[r.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return u.value!==`all`&&(e.api_type=u.value),s.value!==`all`&&(e.provider_id=s.value),c.value!==`all`&&(e.model=c.value),l.value!==`all`&&(e.router_key_id=l.value),d.value!==`all`&&(e.status_code=d.value),e}function w(){o.value={start:``,end:``}}async function T(){try{f.value=await g.getProviders()}catch(n){console.error(`Failed to load providers:`,n),R.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function ee(){try{p.value=await g.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),R.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function E(){try{let e=await g.getMetricsSummary({period:`30d`});m.value=[...new Set(e.map(e=>e.backend_model))]}catch{m.value=[]}}return _(()=>{Promise.allSettled([T(),ee(),E()])}),{PERIODS:K,period:r,dateRange:o,dateRangeError:v,providerFilter:s,modelFilter:c,keyFilter:l,apiTypeFilter:u,statusFilter:d,providers:f,routerKeys:p,filteredModelOptions:y,hasDateRange:h,clearDateRange:w,buildFilterParams:C}}var q=20,Ee=864e5;function De(){let{t:e}=n(),r=a([]),o=a(0),s=a(1),c=a({}),l=a(30),u=a(!1),d=a(new Set),f=a({}),p=a({}),m=a(!1),h=a(null),_=i(()=>Math.ceil(o.value/q));async function v(n){n&&(c.value=n);try{let e=await g.getLogs({page:s.value,limit:q,view:`grouped`,...c.value});r.value=e.data,o.value=e.total,d.value.clear(),f.value={},p.value={}}catch(n){console.error(`Failed to load logs:`,n),R.error(t(n,e(`logs.messages.loadFailed`)))}}function y(e){e>=1&&e<=_.value&&e!==s.value&&(s.value=e,v())}let b=a(null),x=a(!1);async function S(){try{let e=new Date(Date.now()-l.value*Ee).toISOString(),t=await g.deleteLogsBefore(e);u.value=!1,s.value=1,await v(),b.value=t.deleted,x.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),R.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function C(n){let r=n.id;if(d.value.has(r)){d.value.delete(r);return}if(d.value.add(r),!f.value[r]){p.value[r]=!0;try{f.value[r]=await g.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),R.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{p.value[r]=!1}}}async function w(n){try{h.value=await g.getLogDetail(n),m.value=!0}catch(n){console.error(`Failed to load log detail:`,n),R.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:q,logs:r,total:o,page:s,totalPages:_,cleanupDays:l,showCleanup:u,expandedRows:d,childLogs:f,childLoading:p,logDetailOpen:m,selectedLogEntry:h,cleanupResult:b,showCleanupResult:x,loadLogs:v,goToPage:y,handleCleanup:S,toggleExpand:C,openLogDetail:w}}var Oe={class:`p-6`},ke={class:`flex items-center justify-between mb-4`},Ae={class:`text-lg font-semibold text-foreground`},je={class:`flex flex-wrap items-center gap-2 mb-4`},Me={class:`flex gap-1`},Ne={class:`flex items-center gap-1`},Pe={key:1,class:`text-xs text-destructive whitespace-nowrap`},Fe={class:`bg-card rounded-lg border overflow-hidden`},Ie={class:`flex items-center justify-between mt-4`},Le={class:`text-sm text-muted-foreground`},Re={class:`flex items-center gap-1`},ze={key:0,class:`px-2 text-sm text-muted-foreground`},Be={class:`text-sm text-muted-foreground`},Ve={class:`mb-4`},He={class:`space-y-3`},Ue={class:`text-sm font-medium`},We={class:`flex items-center gap-3`},Ge={class:`text-xs text-muted-foreground`},Ke={class:`flex justify-end`},qe=13,Je=300,Ye=7,J=2,Y=1,X=e({__name:`Logs`,setup(e){let{t}=n(),{PERIODS:a,period:c,dateRange:l,dateRangeError:g,providerFilter:x,modelFilter:E,keyFilter:D,statusFilter:O,providers:te,routerKeys:ne,filteredModelOptions:M,clearDateRange:ge,buildFilterParams:R}=Te(),{logs:z,total:be,page:V,totalPages:H,cleanupDays:U,showCleanup:W,cleanupResult:Ce,showCleanupResult:G,expandedRows:K,childLogs:q,childLoading:Ee,logDetailOpen:X,selectedLogEntry:Xe,loadLogs:Ze,goToPage:Z,handleCleanup:Qe,toggleExpand:$e,openLogDetail:et}=De(),tt=i(()=>{let e=H.value,t=V.value;if(e<=Ye)return Array.from({length:e},(e,t)=>t+1);let n=[Y],r=Math.max(Y+1,t-J),i=Math.min(e-Y,t+J);r>Y+J&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-J&&n.push(`...`),n.push(e),n}),{retentionDays:Q,retentionSaving:nt,saveRetention:rt,loadRetention:it}=xe(),$=null;return C([c,l,x,E,D,O],()=>{V.value=1,$&&clearTimeout($),$=setTimeout(()=>Ze(R()),Je)},{deep:!0}),_(()=>{Ze(R()),it()}),(e,n)=>(h(),f(`div`,Oe,[b(`div`,ke,[b(`h2`,Ae,d(w(t)(`logs.title`)),1),s(w(v),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:n[0]||=e=>W.value=!0},{default:S(()=>[m(d(w(t)(`logs.cleanupLogs`)),1)]),_:1})]),b(`div`,je,[b(`div`,Me,[(h(!0),f(u,null,y(w(a),e=>(h(),r(w(v),{key:e.value,variant:w(c)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>c.value=e.value},{default:S(()=>[m(d(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),b(`div`,Ne,[s(w(B),{type:`datetime-local`,modelValue:w(l).start,"onUpdate:modelValue":n[1]||=e=>w(l).start=e,class:`w-44`},null,8,[`modelValue`]),n[18]||=b(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),s(w(B),{type:`datetime-local`,modelValue:w(l).end,"onUpdate:modelValue":n[2]||=e=>w(l).end=e,class:`w-44`},null,8,[`modelValue`]),w(l).start||w(l).end?(h(),r(w(v),{key:0,variant:`ghost`,size:`sm`,onClick:w(ge)},{default:S(()=>[m(d(w(t)(`logs.clear`)),1)]),_:1},8,[`onClick`])):p(``,!0),w(g)?(h(),f(`span`,Pe,d(w(g)),1)):p(``,!0)]),s(w(P),{modelValue:w(x),"onUpdate:modelValue":n[3]||=e=>o(x)?x.value=e:null},{default:S(()=>[s(w(L),{class:`w-28 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allProviders`)),1)]),_:1}),(h(!0),f(u,null,y(w(te),e=>(h(),r(w(I),{key:e.id,value:e.id},{default:S(()=>[m(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),s(w(P),{modelValue:w(E),"onUpdate:modelValue":n[4]||=e=>o(E)?E.value=e:null},{default:S(()=>[s(w(L),{class:`w-32 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allModels`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allModels`)),1)]),_:1}),(h(!0),f(u,null,y(w(M),e=>(h(),r(w(I),{key:e,value:e},{default:S(()=>[m(d(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),s(w(P),{modelValue:w(D),"onUpdate:modelValue":n[5]||=e=>o(D)?D.value=e:null},{default:S(()=>[s(w(L),{class:`w-32 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allKeys`)),1)]),_:1}),(h(!0),f(u,null,y(w(ne),e=>(h(),r(w(I),{key:e.id,value:e.id},{default:S(()=>[m(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),s(w(P),{modelValue:w(O),"onUpdate:modelValue":n[6]||=e=>o(O)?O.value=e:null},{default:S(()=>[s(w(L),{class:`w-28 truncate`},{default:S(()=>[s(w(N),{placeholder:w(t)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),s(w(F),null,{default:S(()=>[s(w(I),{value:`all`},{default:S(()=>[m(d(w(t)(`logs.allStatus`)),1)]),_:1}),s(w(I),{value:`200`},{default:S(()=>[...n[19]||=[m(`200`,-1)]]),_:1}),s(w(I),{value:`non200`},{default:S(()=>[m(d(w(t)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),b(`div`,Fe,[s(w(ae),null,{default:S(()=>[s(w(le),null,{default:S(()=>[s(w(A),{class:`bg-muted`},{default:S(()=>[s(w(k),{class:`w-10`}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.id`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.time`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.type`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.model`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.actualForward`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.statusCode`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.latency`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.streaming`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.retry`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.failover`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.error`)),1)]),_:1}),s(w(k),{class:`text-muted-foreground`},{default:S(()=>[m(d(w(t)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),s(w(ie),null,{default:S(()=>[(h(!0),f(u,null,y(w(z),e=>(h(),f(u,{key:e.id},[s(we,{log:e,expanded:w(K).has(e.id),onToggleExpand:w($e),onOpenDetail:w(et)},null,8,[`log`,`expanded`,`onToggleExpand`,`onOpenDetail`]),w(K).has(e.id)?(h(),f(u,{key:0},[w(Ee)[e.id]?(h(),r(w(A),{key:0},{default:S(()=>[s(w(j),{colspan:qe,class:`text-center py-2 pl-10`},{default:S(()=>[s(w(Se),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):w(q)[e.id]?.length?(h(!0),f(u,{key:1},y(w(q)[e.id],e=>(h(),r(we,{key:e.id,log:e,"is-child":!0,onOpenDetail:w(et)},null,8,[`log`,`onOpenDetail`]))),128)):p(``,!0)],64)):p(``,!0)],64))),128)),w(z).length===0?(h(),r(w(A),{key:0},{default:S(()=>[s(w(j),{colspan:qe,class:`text-center text-muted-foreground py-8`},{default:S(()=>[m(d(w(t)(`logs.noLogs`)),1)]),_:1})]),_:1})):p(``,!0)]),_:1})]),_:1})]),b(`div`,Ie,[b(`p`,Le,d(w(t)(`logs.pagination`,{total:w(be),page:w(V),totalPages:w(H)})),1),b(`div`,Re,[s(w(v),{variant:`outline`,size:`sm`,onClick:n[7]||=e=>w(Z)(1),disabled:w(V)<=1},{default:S(()=>[m(d(w(t)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),s(w(v),{variant:`outline`,size:`sm`,onClick:n[8]||=e=>w(Z)(w(V)-1),disabled:w(V)<=1},{default:S(()=>[m(d(w(t)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(h(!0),f(u,null,y(tt.value,e=>(h(),f(u,{key:e},[e===`...`?(h(),f(`span`,ze,`...`)):(h(),r(w(v),{key:1,variant:e===w(V)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>w(Z)(e)},{default:S(()=>[m(d(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),s(w(v),{variant:`outline`,size:`sm`,onClick:n[9]||=e=>w(Z)(w(V)+1),disabled:w(V)>=w(H)},{default:S(()=>[m(d(w(t)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),s(w(v),{variant:`outline`,size:`sm`,onClick:n[10]||=e=>w(Z)(w(H)),disabled:w(V)>=w(H)},{default:S(()=>[m(d(w(t)(`logs.lastPage`)),1)]),_:1},8,[`disabled`]),n[20]||=m(` > `,-1)])]),s(ee,{open:w(X),"onUpdate:open":n[11]||=e=>o(X)?X.value=e:null,source:`history`,"log-entry":w(Xe)},null,8,[`open`,`log-entry`]),s(w(se),{open:w(W),"onUpdate:open":n[15]||=e=>o(W)?W.value=e:null},{default:S(()=>[s(w(re),null,{default:S(()=>[s(w(oe),null,{default:S(()=>[s(w(ue),null,{default:S(()=>[m(d(w(t)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),b(`p`,Be,d(w(t)(`logs.cleanup.description`)),1),b(`div`,Ve,[s(w(de),{class:`block text-sm font-medium text-foreground mb-1`},{default:S(()=>[m(d(w(t)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),s(w(B),{modelValue:w(U),"onUpdate:modelValue":n[12]||=e=>o(U)?U.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),s(w(T)),b(`div`,He,[b(`div`,Ue,d(w(t)(`logs.cleanup.autoCleanup`)),1),b(`div`,We,[s(w(de),{class:`whitespace-nowrap`},{default:S(()=>[m(d(w(t)(`logs.cleanup.retentionDays`)),1)]),_:1}),s(w(B),{type:`number`,modelValue:w(Q),"onUpdate:modelValue":n[13]||=e=>o(Q)?Q.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-20`},null,8,[`modelValue`]),b(`span`,Ge,d(w(t)(`logs.cleanup.noAutoCleanup`)),1)]),b(`div`,Ke,[s(w(v),{size:`sm`,onClick:w(rt),disabled:w(nt)},{default:S(()=>[m(d(w(t)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])])]),s(w(ce),null,{default:S(()=>[s(w(v),{variant:`outline`,onClick:n[14]||=e=>W.value=!1},{default:S(()=>[m(d(w(t)(`common.cancel`)),1)]),_:1}),s(w(v),{variant:`destructive`,onClick:w(Qe)},{default:S(()=>[m(d(w(t)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),s(w(me),{open:w(G),"onUpdate:open":n[17]||=e=>o(G)?G.value=e:null},{default:S(()=>[s(w(pe),null,{default:S(()=>[s(w(fe),null,{default:S(()=>[s(w(he),null,{default:S(()=>[m(d(w(t)(`logs.cleanupResult.title`)),1)]),_:1}),s(w(ve),null,{default:S(()=>[m(d(w(t)(`logs.cleanupResult.description`,{count:w(Ce)})),1)]),_:1})]),_:1}),s(w(_e),null,{default:S(()=>[s(w(ye),{onClick:n[16]||=e=>G.value=!1},{default:S(()=>[m(d(w(t)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{X as default};
@@ -1 +1 @@
1
- import{$ as e,I as t,J as n,K as r,Mt as i,N as a,Q as o,Vt as s,W as c,Wt as l,X as u,Y as d,Z as f,dt as p,n as m,pt as h,q as g,wt as _,zt as v}from"./button-DRFSckEU.js";import{t as y}from"./trash-2-DZ6KuutY.js";import{i as b,n as x,r as S,t as C}from"./TooltipTrigger-D4gYyjGF.js";import{_ as w,tt as T,v as E,y as D}from"./index-Dr-BkaVu.js";import{t as O}from"./Input-glS226Q6.js";var k=a(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),A=a(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),ee=a(`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`}]]),j=a(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),M=a(`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`}]]),N=[`onMouseenter`],P={class:`truncate max-w-40`},F={key:0,class:`ml-1 text-[10px] px-1 py-px rounded bg-emerald-500/15 text-emerald-400 shrink-0`},I=[`onMouseenter`],L=[`onClick`],R={class:`truncate`},z={key:0,class:`shrink-0 text-xs text-muted-foreground`},B={key:0,class:`px-2 py-1.5 text-sm text-muted-foreground`},V=e({__name:`CascadingSelect`,props:{groups:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:a}){let{t:f}=t(),m=e,y=r(()=>m.placeholder||f(`common.selectPlaceholder`)),b=a,x=i(!1),S=i(null),C=r(()=>{if(!m.modelValue)return``;let e=m.groups.find(e=>e.key===m.modelValue.groupKey);if(!e)return``;let t=e.options.find(e=>e.value===m.modelValue.value);return t?`${e.label} / ${t.label}`:``});function O(e,t){b(`update:modelValue`,{groupKey:e,value:t}),x.value=!1}function k(e){x.value=e,e||(S.value=null)}return(t,r)=>(p(),n(v(D),{open:x.value,"onUpdate:open":k},{default:_(()=>[o(v(w),{"as-child":``},{default:_(()=>[g(`div`,{class:s([`flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background cursor-pointer hover:bg-accent hover:text-accent-foreground`,[e.compact?`h-8 text-xs px-2.5 py-1`:`h-10 text-sm px-3 py-2`,{"ring-2 ring-ring ring-offset-2":x.value}]])},[g(`span`,{class:s([`truncate`,e.modelValue?`text-foreground`:`text-muted-foreground`])},l(C.value||y.value),3),o(v(T),{class:`h-4 w-4 shrink-0 opacity-50`})],2)]),_:1}),o(v(E),{align:`start`,"side-offset":4,class:`z-[200] w-auto min-w-56 overflow-visible p-1`},{default:_(()=>[(p(!0),u(c,null,h(e.groups,t=>(p(),u(`div`,{key:t.key,class:s([`relative flex cursor-pointer items-center justify-between rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground z-10":S.value===t.key}]),onMouseenter:e=>S.value=t.key},[g(`span`,P,l(t.label),1),t.badge?(p(),u(`span`,F,l(t.badge),1)):d(``,!0),o(v(A),{class:`ml-1 h-4 w-4 shrink-0 opacity-50`}),S.value===t.key&&t.options.length>0?(p(),u(`div`,{key:1,class:`absolute left-full top-0 ml-0.5 min-w-48 rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,onMouseenter:e=>S.value=t.key},[(p(!0),u(c,null,h(t.options,n=>(p(),u(`div`,{key:n.value,class:s([`flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground":e.modelValue?.groupKey===t.key&&e.modelValue?.value===n.value}]),onClick:e=>O(t.key,n.value)},[g(`span`,R,l(n.label),1),n.tag?(p(),u(`span`,z,l(n.tag),1)):d(``,!0)],10,L))),128))],40,I)):d(``,!0)],42,N))),128)),e.groups.length===0?(p(),u(`div`,B,l(v(f)(`common.noOptions`)),1)):d(``,!0)]),_:1})]),_:1},8,[`open`]))}}),H=e({__name:`CascadingModelSelect`,props:{providers:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean}},emits:[`update:modelValue`],setup(e,{emit:i}){let{t:a}=t(),o=e,s=r(()=>o.placeholder||a(`mappings.selectProviderModel`)),c=i;function l(e){return e>=1e6?`${e/1e6}M`:`${e/1e3}K`}let u=r(()=>o.providers.map(e=>({key:e.provider.id,label:e.provider.name,badge:e.isNew?a(`common.new`):void 0,options:e.models.map(e=>({value:e.name,label:e.name,tag:l(e.contextWindow)}))}))),d=r(()=>o.modelValue?{groupKey:o.modelValue.provider_id,value:o.modelValue.model}:void 0);function f(e){c(`update:modelValue`,{provider_id:e.groupKey,model:e.value})}return(t,r)=>(p(),n(V,{groups:u.value,"model-value":d.value,placeholder:s.value,compact:e.compact,"onUpdate:modelValue":f},null,8,[`groups`,`model-value`,`placeholder`,`compact`]))}}),U={key:0,class:`flex items-start gap-3`},W=[`title`],G={class:`flex-1 flex flex-col gap-0 min-w-0`},K={class:`font-mono truncate`},q={class:`text-[10px] px-1 py-px rounded bg-muted/50 text-muted-foreground/50 shrink-0`},J={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`},Y={key:0,class:`flex items-center gap-1 pl-5 py-0.5`},X={class:`text-[9px] text-orange-400/50`},Z={key:0,class:`flex items-center gap-1.5 mt-1 pt-1.5 border-t border-dashed border-primary/10`},Q={class:`text-[10px] text-primary/30`},te={class:`font-mono text-xs text-primary/50`},ne={key:1,class:`space-y-1.5`},re={key:0,class:`flex items-center gap-2`},ie={key:1,class:`flex items-center gap-2 px-2.5 py-1.5 rounded-md bg-muted/20 border border-border/50`},ae={class:`font-mono text-sm font-medium text-foreground truncate`},oe={class:`flex items-center gap-2`},se={class:`flex-1`},ce={key:0,class:`flex items-center gap-1 pl-8 py-0.5`},le={class:`text-[9px] text-orange-400/50`},$={class:`pt-2 mt-1 border-t border-dashed border-primary/15 space-y-1.5`},ue={key:0,class:`flex items-center gap-2`},de={class:`text-[10px] w-6 text-center px-1 py-0.5 rounded bg-primary/10 text-primary/70 shrink-0`},fe={class:`flex-1`},pe={key:1,class:`flex items-center gap-1.5`},me=e({__name:`MappingEntryEditor`,props:{entry:{},providerGroups:{},expanded:{type:Boolean},editable:{type:Boolean,default:!0},editableClientModel:{type:Boolean,default:!1}},emits:[`update:targets`,`update:clientModel`],setup(e,{emit:r}){let{t:i}=t(),a=e,w=r;function T(e){return a.providerGroups.find(t=>t.provider.id===e)?.provider.name??e.slice(0,6)}function E(e,t){return a.providerGroups.find(t=>t.provider.id===e)?.models.find(e=>e.name===t)?.streamTimeoutMs}function D(){let e=a.providerGroups[0];w(`update:targets`,[...a.entry.targets,{backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``}])}function A(){let e=a.providerGroups[0];w(`update:targets`,a.entry.targets.map((t,n)=>n===0?{...t,overflow_provider_id:e?.provider.id??``,overflow_model:e?.models[0]?.name??``}:t))}function N(e){a.entry.targets.length<=1||w(`update:targets`,a.entry.targets.filter((t,n)=>n!==e))}function P(e,t){let n=[...a.entry.targets];n[e]={...n[e],provider_id:t.provider_id,backend_model:t.model},w(`update:targets`,n)}function F(e){w(`update:targets`,a.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(t,r)=>(p(),u(`div`,null,[e.expanded?(p(),u(`div`,ne,[e.editableClientModel?(p(),u(`div`,re,[r[5]||=g(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0 w-6 text-center`},`Client`,-1),o(v(O),{"model-value":e.entry.clientModel,class:`h-7 flex-1 text-xs font-mono`,placeholder:v(i)(`providers.shared.clientModel`),"onUpdate:modelValue":r[0]||=e=>w(`update:clientModel`,String(e))},null,8,[`model-value`,`placeholder`])])):(p(),u(`div`,ie,[r[6]||=g(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0`},`Client`,-1),g(`span`,ae,l(e.entry.clientModel),1)])),(p(!0),u(c,null,h(e.entry.targets,(t,a)=>(p(),u(`div`,{key:a},[g(`div`,oe,[g(`span`,{class:s([`text-xs font-medium shrink-0 w-6 text-center px-1 py-0.5 rounded`,a===0?`bg-primary/10 text-primary`:`bg-muted/30 text-muted-foreground`])},l(a===0?`①`:a===1?`②`:a===2?`③`:`${a+1}`),3),g(`div`,se,[o(H,{providers:e.providerGroups,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:v(i)(`providers.shared.selectModel`),"onUpdate:modelValue":e=>P(a,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),a>0&&e.entry.targets.length>1?(p(),n(v(m),{key:0,type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:e=>N(a)},{default:_(()=>[o(v(y),{class:`size-3`})]),_:1},8,[`onClick`])):d(``,!0)]),a<e.entry.targets.length-1?(p(),u(`div`,ce,[r[7]||=g(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),g(`span`,le,l(v(i)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),o(v(m),{type:`button`,variant:`ghost`,size:`sm`,class:`w-full text-xs text-muted-foreground/50`,onClick:D},{default:_(()=>[o(v(j),{class:`w-3 h-3 mr-1`}),f(` `+l(e.entry.targets.length===0?v(i)(`providers.shared.addMappingModel`):v(i)(`providers.shared.addFailover`)),1)]),_:1}),g(`div`,$,[e.entry.targets[0]?.overflow_model?(p(),u(`div`,ue,[g(`span`,de,l(v(i)(`providers.shared.overflow`)),1),g(`div`,fe,[o(H,{providers:e.providerGroups,"model-value":e.entry.targets[0]?.overflow_provider_id&&e.entry.targets[0]?.overflow_model?{provider_id:e.entry.targets[0].overflow_provider_id,model:e.entry.targets[0].overflow_model}:void 0,compact:``,placeholder:v(i)(`providers.shared.overflowPlaceholder`),"onUpdate:modelValue":r[1]||=e=>F(e)},null,8,[`providers`,`model-value`,`placeholder`])]),o(v(m),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:r[2]||=e=>F(void 0)},{default:_(()=>[o(v(y),{class:`size-3`})]),_:1})])):(p(),u(`div`,pe,[o(v(m),{type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:A},{default:_(()=>[o(v(j),{class:`w-3 h-3 mr-1`}),f(` `+l(v(i)(`providers.shared.addOverflow`)),1)]),_:1}),o(v(x),{"delay-duration":200},{default:_(()=>[o(v(b),null,{default:_(()=>[o(v(C),{"as-child":``},{default:_(()=>[o(v(ee),{class:`size-3 text-muted-foreground/30 cursor-help`})]),_:1}),o(v(S),{side:`top`,class:`max-w-[240px] text-xs`},{default:_(()=>[f(l(v(i)(`providers.shared.overflowTooltip`)),1)]),_:1})]),_:1})]),_:1})]))])])):(p(),u(`div`,U,[g(`span`,{class:`min-w-[90px] font-mono text-sm font-semibold text-foreground shrink-0 truncate`,title:e.entry.clientModel},l(e.entry.clientModel),9,W),o(v(k),{class:`size-3.5 mt-0.5 shrink-0 text-muted-foreground/30`}),g(`div`,G,[(p(!0),u(c,null,h(e.entry.targets,(t,n)=>(p(),u(`div`,{key:n},[g(`div`,{class:s([`flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm`,n===0?`bg-primary/10 border border-primary/20 text-primary`:`bg-muted/30 border border-border text-muted-foreground`])},[g(`span`,{class:s([`text-[10px] font-semibold w-3.5 text-center`,n===0?`text-primary`:`text-muted-foreground`])},l(n===0?`①`:n===1?`②`:n===2?`③`:`${n+1}`),3),g(`span`,K,l(t.backend_model),1),g(`span`,q,l(T(t.provider_id)),1),E(t.provider_id,t.backend_model)?(p(),u(`span`,J,[o(v(M),{class:`size-2.5`}),f(` `+l(Math.round(E(t.provider_id,t.backend_model)/1e3))+`s `,1)])):d(``,!0)],2),n<e.entry.targets.length-1?(p(),u(`div`,Y,[r[3]||=g(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),g(`span`,X,l(v(i)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),e.entry.targets[0]?.overflow_model?(p(),u(`div`,Z,[r[4]||=g(`span`,{class:`text-[10px] text-primary/40 w-3.5 text-center`},`⤵`,-1),g(`span`,Q,l(v(i)(`providers.shared.overflow`)),1),g(`span`,te,l(e.entry.targets[0].overflow_model),1)])):d(``,!0)])]))]))}});export{j as n,k as r,me as t};
1
+ import{$ as e,I as t,J as n,K as r,Mt as i,N as a,Q as o,Vt as s,W as c,Wt as l,X as u,Y as d,Z as f,dt as p,n as m,pt as h,q as g,wt as _,zt as v}from"./button-BwrBFTfJ.js";import{t as y}from"./trash-2-DSx-MkZy.js";import{i as b,n as x,r as S,t as C}from"./TooltipTrigger-UwQzn5Jd.js";import{_ as w,tt as T,v as E,y as D}from"./index-C8xJ1Vhe.js";import{t as O}from"./Input-Br6PVSFy.js";var k=a(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),A=a(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),ee=a(`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`}]]),j=a(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),M=a(`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`}]]),N=[`onMouseenter`],P={class:`truncate max-w-40`},F={key:0,class:`ml-1 text-[10px] px-1 py-px rounded bg-emerald-500/15 text-emerald-400 shrink-0`},I=[`onMouseenter`],L=[`onClick`],R={class:`truncate`},z={key:0,class:`shrink-0 text-xs text-muted-foreground`},B={key:0,class:`px-2 py-1.5 text-sm text-muted-foreground`},V=e({__name:`CascadingSelect`,props:{groups:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:a}){let{t:f}=t(),m=e,y=r(()=>m.placeholder||f(`common.selectPlaceholder`)),b=a,x=i(!1),S=i(null),C=r(()=>{if(!m.modelValue)return``;let e=m.groups.find(e=>e.key===m.modelValue.groupKey);if(!e)return``;let t=e.options.find(e=>e.value===m.modelValue.value);return t?`${e.label} / ${t.label}`:``});function O(e,t){b(`update:modelValue`,{groupKey:e,value:t}),x.value=!1}function k(e){x.value=e,e||(S.value=null)}return(t,r)=>(p(),n(v(D),{open:x.value,"onUpdate:open":k},{default:_(()=>[o(v(w),{"as-child":``},{default:_(()=>[g(`div`,{class:s([`flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background cursor-pointer hover:bg-accent hover:text-accent-foreground`,[e.compact?`h-8 text-xs px-2.5 py-1`:`h-10 text-sm px-3 py-2`,{"ring-2 ring-ring ring-offset-2":x.value}]])},[g(`span`,{class:s([`truncate`,e.modelValue?`text-foreground`:`text-muted-foreground`])},l(C.value||y.value),3),o(v(T),{class:`h-4 w-4 shrink-0 opacity-50`})],2)]),_:1}),o(v(E),{align:`start`,"side-offset":4,class:`z-[200] w-auto min-w-56 overflow-visible p-1`},{default:_(()=>[(p(!0),u(c,null,h(e.groups,t=>(p(),u(`div`,{key:t.key,class:s([`relative flex cursor-pointer items-center justify-between rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground z-10":S.value===t.key}]),onMouseenter:e=>S.value=t.key},[g(`span`,P,l(t.label),1),t.badge?(p(),u(`span`,F,l(t.badge),1)):d(``,!0),o(v(A),{class:`ml-1 h-4 w-4 shrink-0 opacity-50`}),S.value===t.key&&t.options.length>0?(p(),u(`div`,{key:1,class:`absolute left-full top-0 ml-0.5 min-w-48 rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,onMouseenter:e=>S.value=t.key},[(p(!0),u(c,null,h(t.options,n=>(p(),u(`div`,{key:n.value,class:s([`flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground":e.modelValue?.groupKey===t.key&&e.modelValue?.value===n.value}]),onClick:e=>O(t.key,n.value)},[g(`span`,R,l(n.label),1),n.tag?(p(),u(`span`,z,l(n.tag),1)):d(``,!0)],10,L))),128))],40,I)):d(``,!0)],42,N))),128)),e.groups.length===0?(p(),u(`div`,B,l(v(f)(`common.noOptions`)),1)):d(``,!0)]),_:1})]),_:1},8,[`open`]))}}),H=e({__name:`CascadingModelSelect`,props:{providers:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean}},emits:[`update:modelValue`],setup(e,{emit:i}){let{t:a}=t(),o=e,s=r(()=>o.placeholder||a(`mappings.selectProviderModel`)),c=i;function l(e){return e>=1e6?`${e/1e6}M`:`${e/1e3}K`}let u=r(()=>o.providers.map(e=>({key:e.provider.id,label:e.provider.name,badge:e.isNew?a(`common.new`):void 0,options:e.models.map(e=>({value:e.name,label:e.name,tag:l(e.contextWindow)}))}))),d=r(()=>o.modelValue?{groupKey:o.modelValue.provider_id,value:o.modelValue.model}:void 0);function f(e){c(`update:modelValue`,{provider_id:e.groupKey,model:e.value})}return(t,r)=>(p(),n(V,{groups:u.value,"model-value":d.value,placeholder:s.value,compact:e.compact,"onUpdate:modelValue":f},null,8,[`groups`,`model-value`,`placeholder`,`compact`]))}}),U={key:0,class:`flex items-start gap-3`},W=[`title`],G={class:`flex-1 flex flex-col gap-0 min-w-0`},K={class:`font-mono truncate`},q={class:`text-[10px] px-1 py-px rounded bg-muted/50 text-muted-foreground/50 shrink-0`},J={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`},Y={key:0,class:`flex items-center gap-1 pl-5 py-0.5`},X={class:`text-[9px] text-orange-400/50`},Z={key:0,class:`flex items-center gap-1.5 mt-1 pt-1.5 border-t border-dashed border-primary/10`},Q={class:`text-[10px] text-primary/30`},te={class:`font-mono text-xs text-primary/50`},ne={key:1,class:`space-y-1.5`},re={key:0,class:`flex items-center gap-2`},ie={key:1,class:`flex items-center gap-2 px-2.5 py-1.5 rounded-md bg-muted/20 border border-border/50`},ae={class:`font-mono text-sm font-medium text-foreground truncate`},oe={class:`flex items-center gap-2`},se={class:`flex-1`},ce={key:0,class:`flex items-center gap-1 pl-8 py-0.5`},le={class:`text-[9px] text-orange-400/50`},$={class:`pt-2 mt-1 border-t border-dashed border-primary/15 space-y-1.5`},ue={key:0,class:`flex items-center gap-2`},de={class:`text-[10px] w-6 text-center px-1 py-0.5 rounded bg-primary/10 text-primary/70 shrink-0`},fe={class:`flex-1`},pe={key:1,class:`flex items-center gap-1.5`},me=e({__name:`MappingEntryEditor`,props:{entry:{},providerGroups:{},expanded:{type:Boolean},editable:{type:Boolean,default:!0},editableClientModel:{type:Boolean,default:!1}},emits:[`update:targets`,`update:clientModel`],setup(e,{emit:r}){let{t:i}=t(),a=e,w=r;function T(e){return a.providerGroups.find(t=>t.provider.id===e)?.provider.name??e.slice(0,6)}function E(e,t){return a.providerGroups.find(t=>t.provider.id===e)?.models.find(e=>e.name===t)?.streamTimeoutMs}function D(){let e=a.providerGroups[0];w(`update:targets`,[...a.entry.targets,{backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``}])}function A(){let e=a.providerGroups[0];w(`update:targets`,a.entry.targets.map((t,n)=>n===0?{...t,overflow_provider_id:e?.provider.id??``,overflow_model:e?.models[0]?.name??``}:t))}function N(e){a.entry.targets.length<=1||w(`update:targets`,a.entry.targets.filter((t,n)=>n!==e))}function P(e,t){let n=[...a.entry.targets];n[e]={...n[e],provider_id:t.provider_id,backend_model:t.model},w(`update:targets`,n)}function F(e){w(`update:targets`,a.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(t,r)=>(p(),u(`div`,null,[e.expanded?(p(),u(`div`,ne,[e.editableClientModel?(p(),u(`div`,re,[r[5]||=g(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0 w-6 text-center`},`Client`,-1),o(v(O),{"model-value":e.entry.clientModel,class:`h-7 flex-1 text-xs font-mono`,placeholder:v(i)(`providers.shared.clientModel`),"onUpdate:modelValue":r[0]||=e=>w(`update:clientModel`,String(e))},null,8,[`model-value`,`placeholder`])])):(p(),u(`div`,ie,[r[6]||=g(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0`},`Client`,-1),g(`span`,ae,l(e.entry.clientModel),1)])),(p(!0),u(c,null,h(e.entry.targets,(t,a)=>(p(),u(`div`,{key:a},[g(`div`,oe,[g(`span`,{class:s([`text-xs font-medium shrink-0 w-6 text-center px-1 py-0.5 rounded`,a===0?`bg-primary/10 text-primary`:`bg-muted/30 text-muted-foreground`])},l(a===0?`①`:a===1?`②`:a===2?`③`:`${a+1}`),3),g(`div`,se,[o(H,{providers:e.providerGroups,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:v(i)(`providers.shared.selectModel`),"onUpdate:modelValue":e=>P(a,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),a>0&&e.entry.targets.length>1?(p(),n(v(m),{key:0,type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:e=>N(a)},{default:_(()=>[o(v(y),{class:`size-3`})]),_:1},8,[`onClick`])):d(``,!0)]),a<e.entry.targets.length-1?(p(),u(`div`,ce,[r[7]||=g(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),g(`span`,le,l(v(i)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),o(v(m),{type:`button`,variant:`ghost`,size:`sm`,class:`w-full text-xs text-muted-foreground/50`,onClick:D},{default:_(()=>[o(v(j),{class:`w-3 h-3 mr-1`}),f(` `+l(e.entry.targets.length===0?v(i)(`providers.shared.addMappingModel`):v(i)(`providers.shared.addFailover`)),1)]),_:1}),g(`div`,$,[e.entry.targets[0]?.overflow_model?(p(),u(`div`,ue,[g(`span`,de,l(v(i)(`providers.shared.overflow`)),1),g(`div`,fe,[o(H,{providers:e.providerGroups,"model-value":e.entry.targets[0]?.overflow_provider_id&&e.entry.targets[0]?.overflow_model?{provider_id:e.entry.targets[0].overflow_provider_id,model:e.entry.targets[0].overflow_model}:void 0,compact:``,placeholder:v(i)(`providers.shared.overflowPlaceholder`),"onUpdate:modelValue":r[1]||=e=>F(e)},null,8,[`providers`,`model-value`,`placeholder`])]),o(v(m),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:r[2]||=e=>F(void 0)},{default:_(()=>[o(v(y),{class:`size-3`})]),_:1})])):(p(),u(`div`,pe,[o(v(m),{type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:A},{default:_(()=>[o(v(j),{class:`w-3 h-3 mr-1`}),f(` `+l(v(i)(`providers.shared.addOverflow`)),1)]),_:1}),o(v(x),{"delay-duration":200},{default:_(()=>[o(v(b),null,{default:_(()=>[o(v(C),{"as-child":``},{default:_(()=>[o(v(ee),{class:`size-3 text-muted-foreground/30 cursor-help`})]),_:1}),o(v(S),{side:`top`,class:`max-w-[240px] text-xs`},{default:_(()=>[f(l(v(i)(`providers.shared.overflowTooltip`)),1)]),_:1})]),_:1})]),_:1})]))])])):(p(),u(`div`,U,[g(`span`,{class:`min-w-[90px] font-mono text-sm font-semibold text-foreground shrink-0 truncate`,title:e.entry.clientModel},l(e.entry.clientModel),9,W),o(v(k),{class:`size-3.5 mt-0.5 shrink-0 text-muted-foreground/30`}),g(`div`,G,[(p(!0),u(c,null,h(e.entry.targets,(t,n)=>(p(),u(`div`,{key:n},[g(`div`,{class:s([`flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm`,n===0?`bg-primary/10 border border-primary/20 text-primary`:`bg-muted/30 border border-border text-muted-foreground`])},[g(`span`,{class:s([`text-[10px] font-semibold w-3.5 text-center`,n===0?`text-primary`:`text-muted-foreground`])},l(n===0?`①`:n===1?`②`:n===2?`③`:`${n+1}`),3),g(`span`,K,l(t.backend_model),1),g(`span`,q,l(T(t.provider_id)),1),E(t.provider_id,t.backend_model)?(p(),u(`span`,J,[o(v(M),{class:`size-2.5`}),f(` `+l(Math.round(E(t.provider_id,t.backend_model)/1e3))+`s `,1)])):d(``,!0)],2),n<e.entry.targets.length-1?(p(),u(`div`,Y,[r[3]||=g(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),g(`span`,X,l(v(i)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),e.entry.targets[0]?.overflow_model?(p(),u(`div`,Z,[r[4]||=g(`span`,{class:`text-[10px] text-primary/40 w-3.5 text-center`},`⤵`,-1),g(`span`,Q,l(v(i)(`providers.shared.overflow`)),1),g(`span`,te,l(e.entry.targets[0].overflow_model),1)])):d(``,!0)])]))]))}});export{H as n,j as r,me as t};
@@ -0,0 +1 @@
1
+ import{$ as e,I as t,J as n,K as r,Mt as i,Q as a,Vt as o,W as s,Wt as c,X as l,Y as u,Z as d,dt as f,n as p,pt as m,q as h,r as g,wt as _,zt as v}from"./button-BwrBFTfJ.js";import{t as y}from"./trash-2-DSx-MkZy.js";import{n as b,t as x}from"./CollapsibleContent-CgqAq4Jf.js";import{f as S,g as C,h as w,m as T,p as E,tt as D}from"./index-C8xJ1Vhe.js";import{t as O}from"./Input-Br6PVSFy.js";var k=[{id:`claude-code`,name:`Claude Code`,icon:`C`,iconClass:`cc`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.claudeCodeDesc`},{id:`pi`,name:`Pi`,icon:`P`,iconClass:`pi`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.piDesc`},{id:`openai-sdk`,name:`OpenAI SDK`,icon:`OA`,iconClass:`oa`,format:`openai`,defaultProvider:`DeepSeek`,defaultPlan:`OpenAI`,descriptionKey:`quickSetup.client.openaiSdkDesc`},{id:`anthropic-sdk`,name:`Anthropic SDK`,icon:`AN`,iconClass:`an`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.anthropicSdkDesc`}],A=[{key:`deepseek_anthropic`,labelKey:`quickSetup.patch.deepseekAnthropic`,items:[{id:`thinking-param`,nameKey:`quickSetup.patch.thinkingParam`,descKey:`quickSetup.patch.thinkingParamDesc`},{id:`cache-control`,nameKey:`quickSetup.patch.cacheControl`,descKey:`quickSetup.patch.cacheControlDesc`},{id:`thinking-blocks`,nameKey:`quickSetup.patch.thinkingBlocks`,descKey:`quickSetup.patch.thinkingBlocksDesc`},{id:`orphan-tool-results`,nameKey:`quickSetup.patch.orphanToolResult`,descKey:`quickSetup.patch.orphanToolResultDesc`}]},{key:`deepseek_openai`,labelKey:`quickSetup.patch.deepseekOpenai`,items:[{id:`non-ds-tools`,nameKey:`quickSetup.patch.nonDsTools`,descKey:`quickSetup.patch.nonDsToolsDesc`},{id:`orphan-tool-results-oa`,nameKey:`quickSetup.patch.orphanToolResultOa`,descKey:`quickSetup.patch.orphanToolResultOaDesc`}]},{key:`general`,labelKey:`quickSetup.patch.general`,items:[{id:`developer-role`,nameKey:`quickSetup.patch.developerRole`,descKey:`quickSetup.patch.developerRoleDesc`}]}],j=[{label:`8K`,value:8e3},{label:`16K`,value:16e3},{label:`32K`,value:32e3},{label:`64K`,value:64e3},{label:`128K`,value:128e3},{label:`160K`,value:16e4},{label:`200K`,value:2e5},{label:`256K`,value:256e3},{label:`1M`,value:1e6}],M=1e6,N=256e3,P=2e5,F=128e3,I=32e3,L=16e3,R=8e3;function z(e){let t=e.toLowerCase();return t.includes(`v4`)||t.includes(`v3.2`)||t.includes(`r1`)||t.includes(`reasoner`)||t.includes(`qwen3.6`)?M:t.includes(`kimi`)||t.includes(`moonshotai`)||t.includes(`hunyuan-2.0`)||t.includes(`hunyuan-a13b`)||t.includes(`hunyuan-t1`)||t.includes(`step-3.5`)||t.includes(`step-3`)||t.includes(`qwen3.5-plus`)||t.includes(`qwen3-max`)||t.includes(`doubao`)||t.includes(`ark-code`)||t.includes(`tc-code`)?N:t.includes(`glm-5`)||t.includes(`glm-4.7`)||t.includes(`minimax`)?P:t.includes(`128k`)?F:t.includes(`32k`)?I:t.includes(`16k`)?L:t.includes(`8k`)?R:F}var B={"claude-code":[`sonnet`,`opus`,`haiku`],"openai-sdk":[`gpt-5.1`,`gpt-4.1`,`o3`,`o4-mini`],"anthropic-sdk":[`claude-sonnet-4-20250514`,`claude-opus-4-20250116`,`claude-haiku-4-20250414`]},V={class:`space-y-3`},H={class:`mb-1.5 text-xs font-medium text-[var(--muted-foreground)]`},U={class:`flex flex-wrap gap-1.5`},W=[`title`,`onClick`],G=e({__name:`PatchChips`,props:{apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean},modelValue:{}},emits:[`update:modelValue`],setup(e,{emit:n}){let{t:i}=t(),a=e,u=n,p=r(()=>A.filter(e=>e.key===`deepseek_anthropic`?a.isDeepSeek&&a.apiType===`anthropic`:e.key===`deepseek_openai`?a.isDeepSeek&&a.apiType===`openai`:e.key===`general`?a.apiType===`openai`&&a.isNonOpenaiEndpoint:!0));function _(e){u(`update:modelValue`,a.modelValue.includes(e)?a.modelValue.filter(t=>t!==e):[...a.modelValue,e])}function y(e){return a.modelValue.includes(e)}return(e,t)=>(f(),l(`div`,V,[(f(!0),l(s,null,m(p.value,e=>(f(),l(`div`,{key:e.key},[h(`p`,H,c(v(i)(e.labelKey)),1),h(`div`,U,[(f(!0),l(s,null,m(e.items,e=>(f(),l(`button`,{key:e.id,type:`button`,title:v(i)(e.descKey),class:o(v(g)(`inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs font-medium transition-all cursor-pointer select-none`,y(e.id)?`border-[var(--ring)] bg-[var(--primary)]/10 text-[var(--primary)]`:`border-[var(--border)] bg-transparent text-[var(--muted-foreground)] hover:border-[var(--muted-foreground)] hover:text-[var(--foreground)]`)),onClick:t=>_(e.id)},[h(`span`,{class:o(v(g)(`size-1.5 rounded-full transition-colors`,y(e.id)?`bg-[var(--primary)]`:`bg-[var(--border)]`))},null,2),d(` `+c(v(i)(e.nameKey)),1)],10,W))),128))])]))),128))]))}}),K={class:`rounded-lg border border-border bg-card px-3 py-2.5 transition-colors`},q={class:`flex items-center gap-2`},J=[`title`],Y={class:`flex items-center gap-1 shrink-0`},X=e({__name:`ModelCard`,props:{model:{},apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean}},emits:[`update:model`,`remove`],setup(e,{emit:k}){let{t:A}=t(),M=e,N=k,P=i(!1),F=r(()=>j.find(e=>e.value===M.model.contextWindow)),I=r(()=>!!F.value);function L(e){let t=e;if(t===`__custom__`)return;let n=parseInt(t,10);isNaN(n)||N(`update:model`,{...M.model,contextWindow:n})}function R(e){let t=parseInt(e,10);!isNaN(t)&&t>0&&N(`update:model`,{...M.model,contextWindow:t})}function z(e){N(`update:model`,{...M.model,patches:e})}function B(e){return e>=1e6?`${e/1e6}M`:e>=1e3?`${e/1e3}K`:String(e)}return(t,r)=>(f(),l(`div`,K,[h(`div`,q,[h(`span`,{class:`truncate text-xs font-medium text-foreground min-w-0 flex-1`,title:e.model.name},c(e.model.name),9,J),h(`div`,Y,[a(v(C),{"model-value":I.value?String(e.model.contextWindow):`__custom__`,"onUpdate:modelValue":L},{default:_(()=>[a(v(E),{class:`h-7 w-[72px] text-xs`},{default:_(()=>[a(v(S),null,{default:_(()=>[d(c(I.value?F.value.label:B(e.model.contextWindow)),1)]),_:1})]),_:1}),a(v(w),null,{default:_(()=>[(f(!0),l(s,null,m(v(j),e=>(f(),n(v(T),{key:e.value,value:String(e.value)},{default:_(()=>[d(c(e.label),1)]),_:2},1032,[`value`]))),128)),a(v(T),{value:`__custom__`},{default:_(()=>[d(c(v(A)(`quickSetup.model.contextCustom`)),1)]),_:1})]),_:1})]),_:1},8,[`model-value`]),I.value?u(``,!0):(f(),n(v(O),{key:0,"model-value":String(e.model.contextWindow),type:`number`,min:`1`,class:`h-7 w-20 text-xs text-right [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,"onUpdate:modelValue":r[0]||=e=>R(e)},null,8,[`model-value`]))]),h(`button`,{type:`button`,class:`inline-flex items-center gap-0.5 text-[10px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer select-none shrink-0`,onClick:r[1]||=e=>P.value=!P.value},[a(v(D),{class:o(v(g)(`size-3 transition-transform`,P.value?`rotate-0`:`-rotate-90`))},null,8,[`class`]),d(` `+c(e.model.patches.length>0?e.model.patches.length:``),1)]),a(v(p),{variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground hover:text-destructive shrink-0`,onClick:r[2]||=e=>t.$emit(`remove`)},{default:_(()=>[a(v(y),{class:`size-3`})]),_:1})]),a(v(b),{open:P.value,"onUpdate:open":r[3]||=e=>P.value=e},{default:_(()=>[a(v(x),{class:`pt-1.5`},{default:_(()=>[a(G,{"api-type":e.apiType,"is-deep-seek":e.isDeepSeek,"is-non-openai-endpoint":e.isNonOpenaiEndpoint,"model-value":e.model.patches,"onUpdate:modelValue":z},null,8,[`api-type`,`is-deep-seek`,`is-non-openai-endpoint`,`model-value`])]),_:1})]),_:1},8,[`open`])]))}});export{z as i,k as n,B as r,X as t};
@@ -1 +1 @@
1
- import{$ as e,A as t,I as n,J as r,K as i,Mt as a,Q as o,U as s,Vt as c,W as l,Wt as u,X as d,Y as f,Z as p,dt as m,k as h,lt as g,n as _,pt as v,q as y,wt as b,xt as x,zt as S}from"./button-DRFSckEU.js";import{n as C,t as w}from"./MappingEntryEditor-auxWvl8S.js";import{t as T}from"./trash-2-DZ6KuutY.js";import{t as E}from"./Switch-BwPbL6O4.js";import{a as D,c as O,d as k,i as A,l as j,o as M,r as N,s as P}from"./index-Dr-BkaVu.js";import"./constants-yM0YwP2s.js";var F={class:`flex-1 min-w-0`},I={class:`flex flex-col items-end gap-1.5 shrink-0 pt-0.5`},L={class:`flex items-center gap-2`},R={key:0,class:`text-[10px] px-1.5 py-0.5 rounded border border-orange-400/30 text-orange-400/60`},z={key:0,class:`flex items-center justify-end gap-2 px-4 py-2 border-t border-border/50`},B=e({__name:`ModelMappingCard`,props:{entry:{},providerGroups:{},editableClientModel:{type:Boolean},defaultExpanded:{type:Boolean,default:!1}},emits:[`saved`,`deleted`,`cancel-add`],setup(e,{emit:g}){let{t:v}=n(),C=e,B=g,V=a(``);x(()=>C.entry.clientModel,e=>{V.value=e},{immediate:!0});let H=a(C.defaultExpanded),U=a([]),W=a(!1),G=a(!1);x(H,e=>{e&&(U.value=C.entry.targets.map(e=>({...e})))}),x(()=>C.entry.targets,e=>{H.value&&(U.value=e.map(e=>({...e})))},{deep:!0});let K=i(()=>H.value?{...C.entry,targets:U.value}:C.entry);function q(e){U.value=e}function J(e){V.value=e}async function Y(){W.value=!0;try{let e=C.editableClientModel?V.value.trim():C.entry.clientModel;if(!e)return;let t=JSON.stringify({targets:U.value});C.entry.existingId?await h.updateMappingGroup(C.entry.existingId,{client_model:e,rule:t}):await h.createMappingGroup({client_model:e,rule:t}),H.value=!1,B(`saved`),N.success(v(`common.saveSuccess`))}catch(e){N.error(t(e,v(`mappings.messages.saveFailed`)))}finally{W.value=!1}}function X(){C.editableClientModel?B(`cancel-add`):H.value=!1}async function Z(){try{C.entry.existingId&&await h.toggleMappingGroup(C.entry.existingId),B(`saved`)}catch(e){N.error(t(e,v(`mappings.messages.toggleFailed`)))}}function Q(){G.value=!1,B(`deleted`,C.entry.clientModel)}return(t,n)=>(m(),d(l,null,[y(`div`,{class:c([`rounded-lg border transition-colors`,H.value?`border-primary/30 shadow-sm shadow-primary/5`:`border-border hover:border-border/80`])},[y(`div`,{class:c([`flex items-start gap-2 px-4 py-3`,{"cursor-pointer":!H.value}]),onClick:n[2]||=e=>!H.value&&(H.value=!0)},[y(`div`,F,[o(w,{entry:K.value,"provider-groups":e.providerGroups,expanded:H.value,editable:!0,"editable-client-model":e.editableClientModel,"onUpdate:targets":q,"onUpdate:clientModel":J},null,8,[`entry`,`provider-groups`,`expanded`,`editable-client-model`])]),y(`div`,I,[y(`div`,L,[e.entry.targets.length>1?(m(),d(`span`,R,u(S(v)(`providers.shared.level`,{count:e.entry.targets.length})),1)):f(``,!0),e.editableClientModel?f(``,!0):(m(),r(S(_),{key:1,variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground/40 hover:text-destructive`,onClick:n[0]||=s(e=>G.value=!0,[`stop`])},{default:b(()=>[o(S(T),{class:`size-3`})]),_:1})),e.editableClientModel?f(``,!0):(m(),r(S(E),{key:2,"model-value":e.entry.active,"onUpdate:modelValue":Z,class:`scale-75`,onClick:n[1]||=s(()=>{},[`stop`])},null,8,[`model-value`]))])])],2),H.value?(m(),d(`div`,z,[o(S(_),{size:`sm`,variant:`outline`,onClick:X},{default:b(()=>[p(u(S(v)(`common.cancel`)),1)]),_:1}),o(S(_),{size:`sm`,disabled:W.value,onClick:Y},{default:b(()=>[p(u(W.value?S(v)(`common.saving`):S(v)(`common.save`)),1)]),_:1},8,[`disabled`])])):f(``,!0)],2),o(S(k),{open:G.value,"onUpdate:open":n[3]||=e=>{e||(G.value=!1)}},{default:b(()=>[o(S(O),null,{default:b(()=>[o(S(D),null,{default:b(()=>[o(S(A),null,{default:b(()=>[p(u(S(v)(`common.confirmDelete`)),1)]),_:1}),o(S(P),null,{default:b(()=>[p(u(S(v)(`mappings.confirmDeleteDesc`,{model:e.entry.clientModel})),1)]),_:1})]),_:1}),o(S(M),null,{default:b(()=>[o(S(j),null,{default:b(()=>[p(u(S(v)(`common.cancel`)),1)]),_:1}),o(S(_),{variant:`destructive`,onClick:Q},{default:b(()=>[p(u(S(v)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),V={class:`p-6 space-y-3`},H={class:`flex items-center justify-between`},U={class:`text-lg font-semibold text-foreground`},W={class:`flex gap-2 mt-1`},G={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},K={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},q={class:`grid grid-cols-3 gap-3`},J={key:0,class:`py-8 text-center text-xs text-muted-foreground`},Y=e({__name:`ModelMappings`,setup(e){let{t:s}=n(),c=a([]),x=a([]),w=a([]),T=a(!1),E=i(()=>w.value.filter(e=>e.active).length),D=i(()=>x.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=i(()=>({clientModel:``,targets:[{backend_model:``,provider_id:x.value[0]?.id??``}],existing:!1,tag:`cust`,active:!0}));function k(){return c.value.map(e=>{let t={};try{let n=JSON.parse(e.rule);t=n.default&&!n.targets?{targets:[n.default]}:n}catch(e){console.warn(`Failed to parse rule:`,e)}let n=(t.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}));return{clientModel:e.client_model,targets:n.length>0?n:[{backend_model:``,provider_id:x.value[0]?.id??``}],existing:!0,existingId:e.id,tag:`existing`,active:!!e.is_active,originalActive:!!e.is_active}})}async function A(){let e=await Promise.allSettled([h.getMappingGroups(),h.getProviders()]);e[0].status===`fulfilled`&&(c.value=e[0].value),e[1].status===`fulfilled`&&(x.value=e[1].value),w.value=k()}function j(){T.value=!1,A()}async function M(e){let n=w.value.find(t=>t.clientModel===e);if(n?.existingId)try{await h.deleteMappingGroup(n.existingId),await A(),N.success(s(`common.saveSuccess`))}catch(n){N.error(t(n,s(`mappings.messages.deleteFailed`,{model:e})))}}return g(A),(e,t)=>(m(),d(`div`,V,[y(`div`,H,[y(`div`,null,[y(`h2`,U,u(S(s)(`mappings.title`)),1),y(`div`,W,[y(`span`,G,u(S(s)(`mappings.totalMappings`,{count:w.value.length})),1),y(`span`,K,u(S(s)(`mappings.enabledCount`,{count:E.value})),1)])]),T.value?f(``,!0):(m(),r(S(_),{key:0,size:`sm`,variant:`outline`,onClick:t[0]||=e=>T.value=!0},{default:b(()=>[o(S(C),{class:`w-3.5 h-3.5 mr-1`}),p(` `+u(S(s)(`providers.shared.add`)),1)]),_:1}))]),y(`div`,q,[(m(!0),d(l,null,v(w.value,e=>(m(),r(B,{key:e.clientModel,entry:e,"provider-groups":D.value,onSaved:A,onDeleted:M},null,8,[`entry`,`provider-groups`]))),128)),T.value?(m(),r(B,{key:0,entry:O.value,"provider-groups":D.value,"editable-client-model":!0,"default-expanded":!0,onSaved:j,onCancelAdd:t[1]||=e=>T.value=!1},null,8,[`entry`,`provider-groups`])):f(``,!0)]),w.value.length===0&&!T.value?(m(),d(`p`,J,u(S(s)(`providers.shared.noMappings`)),1)):f(``,!0)]))}});export{Y as default};
1
+ import{$ as e,A as t,I as n,J as r,K as i,Mt as a,Q as o,U as s,Vt as c,W as l,Wt as u,X as d,Y as f,Z as p,dt as m,k as h,lt as g,n as _,pt as v,q as y,wt as b,xt as x,zt as S}from"./button-BwrBFTfJ.js";import{r as C,t as w}from"./MappingEntryEditor-Wpkde3VI.js";import{t as T}from"./trash-2-DSx-MkZy.js";import{t as E}from"./Switch-CzzBLx2L.js";import{a as D,c as O,d as k,i as A,l as j,o as M,r as N,s as P}from"./index-C8xJ1Vhe.js";import"./constants-yM0YwP2s.js";var F={class:`flex-1 min-w-0`},I={class:`flex flex-col items-end gap-1.5 shrink-0 pt-0.5`},L={class:`flex items-center gap-2`},R={key:0,class:`text-[10px] px-1.5 py-0.5 rounded border border-orange-400/30 text-orange-400/60`},z={key:0,class:`flex items-center justify-end gap-2 px-4 py-2 border-t border-border/50`},B=e({__name:`ModelMappingCard`,props:{entry:{},providerGroups:{},editableClientModel:{type:Boolean},defaultExpanded:{type:Boolean,default:!1}},emits:[`saved`,`deleted`,`cancel-add`],setup(e,{emit:g}){let{t:v}=n(),C=e,B=g,V=a(``);x(()=>C.entry.clientModel,e=>{V.value=e},{immediate:!0});let H=a(C.defaultExpanded),U=a([]),W=a(!1),G=a(!1);x(H,e=>{e&&(U.value=C.entry.targets.map(e=>({...e})))}),x(()=>C.entry.targets,e=>{H.value&&(U.value=e.map(e=>({...e})))},{deep:!0});let K=i(()=>H.value?{...C.entry,targets:U.value}:C.entry);function q(e){U.value=e}function J(e){V.value=e}async function Y(){W.value=!0;try{let e=C.editableClientModel?V.value.trim():C.entry.clientModel;if(!e)return;let t=JSON.stringify({targets:U.value});C.entry.existingId?await h.updateMappingGroup(C.entry.existingId,{client_model:e,rule:t}):await h.createMappingGroup({client_model:e,rule:t}),H.value=!1,B(`saved`),N.success(v(`common.saveSuccess`))}catch(e){N.error(t(e,v(`mappings.messages.saveFailed`)))}finally{W.value=!1}}function X(){C.editableClientModel?B(`cancel-add`):H.value=!1}async function Z(){try{C.entry.existingId&&await h.toggleMappingGroup(C.entry.existingId),B(`saved`)}catch(e){N.error(t(e,v(`mappings.messages.toggleFailed`)))}}function Q(){G.value=!1,B(`deleted`,C.entry.clientModel)}return(t,n)=>(m(),d(l,null,[y(`div`,{class:c([`rounded-lg border transition-colors`,H.value?`border-primary/30 shadow-sm shadow-primary/5`:`border-border hover:border-border/80`])},[y(`div`,{class:c([`flex items-start gap-2 px-4 py-3`,{"cursor-pointer":!H.value}]),onClick:n[2]||=e=>!H.value&&(H.value=!0)},[y(`div`,F,[o(w,{entry:K.value,"provider-groups":e.providerGroups,expanded:H.value,editable:!0,"editable-client-model":e.editableClientModel,"onUpdate:targets":q,"onUpdate:clientModel":J},null,8,[`entry`,`provider-groups`,`expanded`,`editable-client-model`])]),y(`div`,I,[y(`div`,L,[e.entry.targets.length>1?(m(),d(`span`,R,u(S(v)(`providers.shared.level`,{count:e.entry.targets.length})),1)):f(``,!0),e.editableClientModel?f(``,!0):(m(),r(S(_),{key:1,variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground/40 hover:text-destructive`,onClick:n[0]||=s(e=>G.value=!0,[`stop`])},{default:b(()=>[o(S(T),{class:`size-3`})]),_:1})),e.editableClientModel?f(``,!0):(m(),r(S(E),{key:2,"model-value":e.entry.active,"onUpdate:modelValue":Z,class:`scale-75`,onClick:n[1]||=s(()=>{},[`stop`])},null,8,[`model-value`]))])])],2),H.value?(m(),d(`div`,z,[o(S(_),{size:`sm`,variant:`outline`,onClick:X},{default:b(()=>[p(u(S(v)(`common.cancel`)),1)]),_:1}),o(S(_),{size:`sm`,disabled:W.value,onClick:Y},{default:b(()=>[p(u(W.value?S(v)(`common.saving`):S(v)(`common.save`)),1)]),_:1},8,[`disabled`])])):f(``,!0)],2),o(S(k),{open:G.value,"onUpdate:open":n[3]||=e=>{e||(G.value=!1)}},{default:b(()=>[o(S(O),null,{default:b(()=>[o(S(D),null,{default:b(()=>[o(S(A),null,{default:b(()=>[p(u(S(v)(`common.confirmDelete`)),1)]),_:1}),o(S(P),null,{default:b(()=>[p(u(S(v)(`mappings.confirmDeleteDesc`,{model:e.entry.clientModel})),1)]),_:1})]),_:1}),o(S(M),null,{default:b(()=>[o(S(j),null,{default:b(()=>[p(u(S(v)(`common.cancel`)),1)]),_:1}),o(S(_),{variant:`destructive`,onClick:Q},{default:b(()=>[p(u(S(v)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),V={class:`p-6 space-y-3`},H={class:`flex items-center justify-between`},U={class:`text-lg font-semibold text-foreground`},W={class:`flex gap-2 mt-1`},G={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},K={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},q={class:`grid grid-cols-3 gap-3`},J={key:0,class:`py-8 text-center text-xs text-muted-foreground`},Y=e({__name:`ModelMappings`,setup(e){let{t:s}=n(),c=a([]),x=a([]),w=a([]),T=a(!1),E=i(()=>w.value.filter(e=>e.active).length),D=i(()=>x.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=i(()=>({clientModel:``,targets:[{backend_model:``,provider_id:x.value[0]?.id??``}],existing:!1,tag:`cust`,active:!0}));function k(){return c.value.map(e=>{let t={};try{let n=JSON.parse(e.rule);t=n.default&&!n.targets?{targets:[n.default]}:n}catch(e){console.warn(`Failed to parse rule:`,e)}let n=(t.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}));return{clientModel:e.client_model,targets:n.length>0?n:[{backend_model:``,provider_id:x.value[0]?.id??``}],existing:!0,existingId:e.id,tag:`existing`,active:!!e.is_active,originalActive:!!e.is_active}})}async function A(){let e=await Promise.allSettled([h.getMappingGroups(),h.getProviders()]);e[0].status===`fulfilled`&&(c.value=e[0].value),e[1].status===`fulfilled`&&(x.value=e[1].value),w.value=k()}function j(){T.value=!1,A()}async function M(e){let n=w.value.find(t=>t.clientModel===e);if(n?.existingId)try{await h.deleteMappingGroup(n.existingId),await A(),N.success(s(`common.saveSuccess`))}catch(n){N.error(t(n,s(`mappings.messages.deleteFailed`,{model:e})))}}return g(A),(e,t)=>(m(),d(`div`,V,[y(`div`,H,[y(`div`,null,[y(`h2`,U,u(S(s)(`mappings.title`)),1),y(`div`,W,[y(`span`,G,u(S(s)(`mappings.totalMappings`,{count:w.value.length})),1),y(`span`,K,u(S(s)(`mappings.enabledCount`,{count:E.value})),1)])]),T.value?f(``,!0):(m(),r(S(_),{key:0,size:`sm`,variant:`outline`,onClick:t[0]||=e=>T.value=!0},{default:b(()=>[o(S(C),{class:`w-3.5 h-3.5 mr-1`}),p(` `+u(S(s)(`providers.shared.add`)),1)]),_:1}))]),y(`div`,q,[(m(!0),d(l,null,v(w.value,e=>(m(),r(B,{key:e.clientModel,entry:e,"provider-groups":D.value,onSaved:A,onDeleted:M},null,8,[`entry`,`provider-groups`]))),128)),T.value?(m(),r(B,{key:0,entry:O.value,"provider-groups":D.value,"editable-client-model":!0,"default-expanded":!0,onSaved:j,onCancelAdd:t[1]||=e=>T.value=!1},null,8,[`entry`,`provider-groups`])):f(``,!0)]),w.value.length===0&&!T.value?(m(),d(`p`,J,u(S(s)(`providers.shared.noMappings`)),1)):f(``,!0)]))}});export{Y as default};
@@ -1 +1 @@
1
- import{$ as e,I as t,J as n,K as r,Mt as i,Ot as a,Q as o,U as s,Ut as c,Vt as l,W as u,Wt as d,X as f,Y as p,Z as m,dt as h,k as g,lt as _,n as v,pt as y,q as b,ut as x,wt as S,xt as C,zt as w}from"./button-DRFSckEU.js";import{n as T,t as ee}from"./UnifiedRequestDialog-rmWxp09D.js";import{t as E}from"./copy-BsWNnxok.js";import{i as D,n as O,r as k,t as A}from"./TooltipTrigger-D4gYyjGF.js";import{c as j,d as te,f as M,l as N,s as P,u as F}from"./dialog-DxoN_Irc.js";import{b as I,ct as L,nt as R}from"./index-Dr-BkaVu.js";import{n as z,t as B}from"./CardContent-DmBQARma.js";import{n as V,t as H}from"./CardTitle-DgwtSVqy.js";import{t as ne}from"./useClipboard-B0s-K67s.js";var U={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},W={class:`text-sm text-muted-foreground`},G={class:`text-2xl font-bold text-foreground mt-1`},K={class:`text-xs text-muted-foreground mt-1`},q={class:`text-sm text-muted-foreground`},re={class:`text-2xl font-bold text-foreground mt-1`},ie={class:`text-xs text-muted-foreground mt-1`},ae={class:`text-sm text-muted-foreground`},oe={class:`text-2xl font-bold text-foreground mt-1`},J={class:`text-xs text-muted-foreground mt-1`},Y={class:`text-sm text-muted-foreground`},X={class:`text-2xl font-bold text-foreground mt-1`},Z={class:`text-xs text-muted-foreground mt-1`},se=e({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(e){let{t:n}=t(),i=e,a=r(()=>!i.stats||i.stats.totalRequests===0?`0.0`:(i.stats.errorCount/i.stats.totalRequests*100).toFixed(1)),s=r(()=>!i.stats||i.stats.totalRequests===0?`0.0`:(i.stats.retryCount/i.stats.totalRequests*100).toFixed(1)),c=r(()=>i.stats?i.stats.p50LatencyMs.toFixed(0):`--`);return(t,r)=>(h(),f(`div`,U,[o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,W,d(w(n)(`monitor.header.activeRequests`)),1),b(`p`,G,d(e.activeCount),1),b(`p`,K,d(w(n)(`monitor.header.streamNonStream`,{stream:e.streamCount,nonStream:e.activeCount-e.streamCount})),1)]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,q,d(w(n)(`monitor.header.errorRate`)),1),b(`p`,re,d(a.value)+`%`,1),b(`p`,ie,d(e.stats?.errorCount??0)+` / `+d(e.stats?.totalRequests??0),1)]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,ae,d(w(n)(`monitor.header.p50Latency`)),1),b(`p`,oe,d(c.value)+`ms`,1),b(`p`,J,d(w(n)(`monitor.header.avgLatency`,{value:e.stats?.avgLatencyMs?.toFixed(0)??`--`})),1)]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,Y,d(w(n)(`monitor.header.retryRate`)),1),b(`p`,X,d(s.value)+`%`,1),b(`p`,Z,d(e.stats?.retryCount??0)+` / `+d(e.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),Q={class:`space-y-3`},ce={key:0,class:`text-sm text-muted-foreground`},le={class:`flex items-center justify-between text-sm`},ue={class:`font-medium text-foreground`},de={class:`text-muted-foreground`},fe={class:`text-xs`},pe={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},me={key:1,class:`flex gap-3 text-xs text-muted-foreground`},he=e({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){let{t:n}=t();function r(e){return e.adaptiveLimit??e.maxConcurrency}function i(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(t,a)=>(h(),f(`div`,Q,[e.providers.length===0?(h(),f(`div`,ce,d(w(n)(`monitor.concurrencyPanel.noData`)),1)):p(``,!0),(h(!0),f(u,null,y(e.providers,e=>(h(),f(`div`,{key:e.providerId,class:`space-y-1`},[b(`div`,le,[b(`span`,ue,d(e.providerName),1),b(`span`,de,[e.adaptiveEnabled?(h(),f(u,{key:0},[m(d(e.active)+` / `+d(e.adaptiveLimit??e.maxConcurrency)+` `,1),b(`span`,fe,`(`+d(w(n)(`monitor.concurrencyPanel.adaptive`))+`)`,1)],64)):e.maxConcurrency===0?(h(),f(u,{key:1},[m(d(w(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(h(),f(u,{key:2},[m(d(e.active)+` / `+d(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(h(),f(`div`,pe,[b(`div`,{class:l([`h-full rounded-full transition-all duration-300`,i(e.active,r(e))]),style:c({width:`${Math.min(100,e.active/r(e)*100)}%`})},null,6)])):p(``,!0),e.maxConcurrency>0?(h(),f(`div`,me,[b(`span`,null,d(w(n)(`monitor.concurrencyPanel.queued`,{count:e.queued})),1),b(`span`,null,d(w(n)(`monitor.concurrencyPanel.queueLimit`,{limit:e.adaptiveLimit??e.maxQueueSize})),1)])):p(``,!0)]))),128))]))}}),ge={key:0,class:`text-sm text-muted-foreground`},_e={key:1,class:`grid grid-cols-2 gap-3 text-sm`},ve={class:`text-muted-foreground`},ye={class:`font-medium text-foreground`},be={class:`text-muted-foreground`},xe={class:`font-medium text-foreground`},Se={class:`col-span-2`},Ce={class:`flex items-center justify-between`},we={class:`text-muted-foreground`},Te={class:`text-muted-foreground`},Ee={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},De={class:`text-muted-foreground`},Oe={class:`font-medium text-foreground`},ke={class:`text-muted-foreground`},Ae={class:`font-medium text-foreground`},je={class:`col-span-2`},Me={class:`text-muted-foreground`},Ne={class:`font-medium text-foreground`},Pe=e({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let{t:n}=t(),i=e,a=r(()=>!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`}function s(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(t,r)=>e.runtime?(h(),f(`div`,_e,[b(`div`,null,[b(`p`,ve,d(w(n)(`monitor.runtimePanel.uptime`)),1),b(`p`,ye,d(o(e.runtime.uptimeMs)),1)]),b(`div`,null,[b(`p`,be,d(w(n)(`monitor.runtimePanel.memoryRss`)),1),b(`p`,xe,d(s(e.runtime.memoryUsage.rss)),1)]),b(`div`,Se,[b(`div`,Ce,[b(`p`,we,d(w(n)(`monitor.runtimePanel.heapUsage`)),1),b(`p`,Te,d(s(e.runtime.memoryUsage.heapUsed))+` / `+d(s(e.runtime.memoryUsage.heapTotal)),1)]),b(`div`,Ee,[b(`div`,{class:`h-full bg-primary rounded-full transition-all duration-300`,style:c({width:`${a.value}%`})},null,4)])]),b(`div`,null,[b(`p`,De,d(w(n)(`monitor.runtimePanel.activeHandles`)),1),b(`p`,Oe,d(e.runtime.activeHandles),1)]),b(`div`,null,[b(`p`,ke,d(w(n)(`monitor.runtimePanel.activeRequests`)),1),b(`p`,Ae,d(e.runtime.activeRequests),1)]),b(`div`,je,[b(`p`,Me,d(w(n)(`monitor.runtimePanel.eventLoopDelay`)),1),b(`p`,Ne,d(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(h(),f(`div`,ge,d(w(n)(`monitor.runtimePanel.noData`)),1))}}),Fe={key:0,class:`text-sm text-muted-foreground`},Ie={key:1,class:`space-y-2`},Le={class:`flex items-center justify-between text-sm`},Re={class:`text-muted-foreground`},ze={class:`h-2 bg-muted rounded-full overflow-hidden`},Be=e({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let{t:n}=t(),i=e,a=r(()=>Object.values(i.byStatusCode).reduce((e,t)=>e+t,0)),o=r(()=>{let e=i.byStatusCode,t=a.value||1,r=s(e,200,299),o=s(e,400,499)-(e[429]||0),c=e[429]||0,l=s(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:o,percent:(o/t*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:n(`monitor.statusCodes.rateLimited`),count:c,percent:(c/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 s(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(e,t)=>a.value===0?(h(),f(`div`,Fe,d(w(n)(`monitor.statusCodes.noData`)),1)):(h(),f(`div`,Ie,[(h(!0),f(u,null,y(o.value,e=>(h(),f(`div`,{key:e.label,class:`space-y-1`},[b(`div`,Le,[b(`span`,{class:l(e.textClass)},d(e.label),3),b(`span`,Re,d(e.count)+` (`+d(e.percent)+`%) `,1)]),b(`div`,ze,[b(`div`,{class:l([`h-full rounded-full transition-all duration-300`,e.barClass]),style:c({width:`${e.percent}%`})},null,6)])]))),128))]))}}),Ve={key:0,class:`text-sm text-muted-foreground py-4 text-center`},He={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Ue={class:`flex flex-wrap gap-1`},We={key:0,class:`text-xs text-muted-foreground`},Ge=e({__name:`ProviderStatsTable`,props:{stats:{}},setup(e){let{t:i}=t(),a=e,s=r(()=>a.stats?Object.entries(a.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(t,r)=>e.stats?s.value.length===0?(h(),f(`div`,He,d(w(i)(`monitor.providerTable.noProviders`)),1)):(h(),n(w(M),{key:2},{default:S(()=>[o(w(P),null,{default:S(()=>[o(w(N),null,{default:S(()=>[o(w(j),null,{default:S(()=>[...r[0]||=[m(`Provider`,-1)]]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.requests`)),1)]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.successRate`)),1)]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.avgLatency`)),1)]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.retryRate`)),1)]),_:1}),o(w(j),null,{default:S(()=>[m(d(w(i)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),o(w(te),null,{default:S(()=>[(h(!0),f(u,null,y(s.value,e=>(h(),n(w(N),{key:e.id},{default:S(()=>[o(w(F),{class:`font-medium`},{default:S(()=>[m(d(e.name),1)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[m(d(e.stats.totalRequests),1)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[b(`span`,{class:l(e.successRate>=95?`text-green-600 dark:text-green-400`:e.successRate>=80?`text-yellow-600 dark:text-yellow-400`:`text-red-500 dark:text-red-400`)},d(e.successRate.toFixed(1))+`% `,3)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[m(d(e.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[b(`span`,{class:l(e.retryRate>10?`text-yellow-600 dark:text-yellow-400`:``)},d(e.retryRate.toFixed(1))+`% `,3)]),_:2},1024),o(w(F),null,{default:S(()=>[b(`div`,Ue,[(h(!0),f(u,null,y(e.stats.topErrors.slice(0,3),e=>(h(),n(w(I),{key:e.code,variant:`destructive`,class:`text-xs`},{default:S(()=>[m(d(e.code)+` (`+d(e.count)+`) `,1)]),_:2},1024))),128)),e.stats.topErrors.length===0?(h(),f(`span`,We,`--`)):p(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(h(),f(`div`,Ve,d(w(i)(`monitor.providerTable.noData`)),1))}});function Ke(e,t,n){let r=null,i=null;function a(){if(!r){r=new EventSource(e),r.onopen=()=>{n?.onOpen?.()};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{o(),n?.onClose?.(),i=setTimeout(a,3e3)}}}function o(){i&&=(clearTimeout(i),null),r&&=(r.close(),null)}return x(()=>{o(),n?.onClose?.()}),{connect:a,disconnect:o}}var qe=200;function Je(){let e=i([]),t=i([]),n=i(null),a=i([]),o=i(null),s=i(!1),c=r(()=>e.value.filter(e=>e.isStream).length),l=r(()=>e.value.filter(e=>!e.queued)),u=r(()=>e.value.filter(e=>e.queued===!0));function d(r){let i;try{i=JSON.parse(r.data)}catch{return}switch(r.type){case`request_start`:{let n=i;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=i;break;case`request_complete`:{let n=i;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>qe&&(t.value.length=qe);break}case`concurrency_update`:a.value=i;break;case`stats_update`:n.value=i;break;case`stream_content_update`:{let t=i;for(let n of t){let t=e.value.find(e=>e.id===n.id);t&&(n.streamContent&&(t.streamContent=n.streamContent),n.streamMetrics&&(t.streamMetrics=n.streamMetrics))}break}case`runtime_update`:o.value=i;break}}function f(){s.value=!0}function p(){s.value=!1}async function m(){try{let[r,i,s,c,l]=await Promise.allSettled([g.getMonitorActive(),g.getMonitorRecent(),g.getMonitorStats(),g.getMonitorConcurrency(),g.getMonitorRuntime()]);r.status===`fulfilled`&&(e.value=r.value),i.status===`fulfilled`&&(t.value=i.value),s.status===`fulfilled`&&(n.value=s.value),c.status===`fulfilled`&&(a.value=c.value),l.status===`fulfilled`&&(o.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,a.value=[],o.value=null}}let h=i(null),_=i(!1),v=i(0);async function y(n){let r=++v.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){h.value=null;return}h.value=null,_.value=!0;try{if(i.status===`pending`){try{let e=await g.getMonitorRequest(n);if(r!==v.value)return;h.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==404)throw e;if(r!==v.value)return;let t=await g.getLogDetail(n);if(r!==v.value)return;h.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await g.getLogDetail(n);if(r!==v.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}}h.value={responseBody:t,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(r!==v.value)return;console.warn(`Failed to load log detail:`,e),h.value=null}finally{r===v.value&&(_.value=!1)}}let b=i(null),x=i(!1);function S(e){b.value=e,x.value=!0,y(e)}let w=r(()=>b.value?e.value.find(e=>e.id===b.value)??t.value.find(e=>e.id===b.value)??null:null);return C(()=>w.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&y(b.value)}),{activeRequests:e,recentCompleted:t,stats:n,concurrency:a,runtime:o,connected:s,streamCount:c,streamingRequests:l,queuedRequests:u,selectedRequestId:b,selectedRequest:w,requestDetailOpen:x,selectRequest:S,logDetailData:h,nonStreamBodyLoading:_,handleSSEMessage:d,handleSSEOpen:f,handleSSEClose:p,loadInitialData:m}}function Ye(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function Xe(e){let{t}=L.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 Ze={class:`p-6`},Qe={class:`flex items-center justify-between mb-4`},$e={class:`text-lg font-semibold text-foreground`},et={class:`flex items-center gap-2`},tt={class:`grid grid-cols-3 gap-4 mb-6`},nt={class:`flex items-center justify-between`},rt={key:0,class:`text-sm text-muted-foreground py-2`},it=[`onClick`],at={class:`text-sm text-foreground truncate flex-1`},ot={class:`text-xs text-muted-foreground shrink-0`},st={class:`flex items-center justify-between`},ct={key:0,class:`text-sm text-muted-foreground py-2`},lt=[`onClick`],ut={class:`text-sm text-foreground truncate flex-1`},dt={class:`text-xs text-muted-foreground shrink-0`},ft={class:`flex items-center justify-between`},pt={key:0,class:`text-sm text-muted-foreground py-2`},mt=[`onClick`],ht={class:`text-sm text-foreground truncate flex-1`},gt={class:`text-xs text-muted-foreground shrink-0`},_t={class:`grid grid-cols-1 lg:grid-cols-3 gap-4`},$=1e3,vt=e({__name:`Monitor`,setup(e){let{t:r}=t(),{activeRequests:c,recentCompleted:g,stats:C,concurrency:j,runtime:te,connected:M,streamCount:N,streamingRequests:P,queuedRequests:F,selectedRequestId:L,selectedRequest:U,requestDetailOpen:W,selectRequest:G,logDetailData:K,handleSSEMessage:q,handleSSEOpen:re,handleSSEClose:ie,loadInitialData:ae}=Je(),{connect:oe}=Ke(`/admin/api/monitor/stream`,{request_start:q,request_update:q,request_complete:q,concurrency_update:q,stats_update:q,runtime_update:q,stream_content_update:q},{onOpen:re,onClose:ie}),{copied:J,copy:Y}=ne(),X=i(Date.now()),Z=null;function Q(e){return((X.value-e)/$).toFixed(1)}function ce(e){return e.completedAt?((e.completedAt-e.startTime)/$).toFixed(1)+`s`:`--`}return _(async()=>{await ae(),oe(),Z=setInterval(()=>{X.value=Date.now()},$)}),x(()=>{Z&&=(clearInterval(Z),null)}),(e,t)=>(h(),f(`div`,Ze,[b(`div`,Qe,[b(`h2`,$e,d(w(r)(`monitor.title`)),1),b(`div`,et,[o(w(I),{variant:w(M)?`default`:`destructive`},{default:S(()=>[m(d(w(M)?w(r)(`monitor.connected`):w(r)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])])]),o(se,{stats:w(C),"active-count":w(c).length,"stream-count":w(N)},null,8,[`stats`,`active-count`,`stream-count`]),b(`div`,tt,[o(w(z),null,{default:S(()=>[o(w(V),{class:`pb-2`},{default:S(()=>[b(`div`,nt,[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.activeRequests`)),1)]),_:1}),o(w(I),{variant:`secondary`},{default:S(()=>[m(d(w(P).length),1)]),_:1})])]),_:1}),o(w(B),null,{default:S(()=>[o(w(T),{class:`h-64`},{default:S(()=>[w(P).length===0?(h(),f(`div`,rt,d(w(r)(`monitor.noActiveRequests`)),1)):p(``,!0),(h(!0),f(u,null,y(w(P),e=>(h(),f(`div`,{key:e.id,class:l([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":w(L)===e.id}]),onClick:t=>w(G)(e.id)},[o(w(I),{variant:w(Ye)(e.status),class:`shrink-0`},{default:S(()=>[m(d(w(Xe)(e.status)),1)]),_:2},1032,[`variant`]),b(`span`,at,d(e.model),1),o(w(I),{variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[m(d(e.providerName),1)]),_:2},1024),b(`span`,ot,d(Q(e.startTime))+`s`,1),e.isStream?(h(),n(w(I),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[...t[1]||=[m(`SSE`,-1)]]),_:1})):p(``,!0),o(w(O),{"delay-duration":300},{default:S(()=>[o(w(D),null,{default:S(()=>[o(w(A),{"as-child":``},{default:S(()=>[o(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:s(t=>w(Y)(e.id),[`stop`])},{default:S(()=>[w(J)?(h(),n(w(R),{key:0,class:`size-3 text-success`})):(h(),n(w(E),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),o(w(k),null,{default:S(()=>[m(d(w(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)]),_:2},1024)],10,it))),128))]),_:1})]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),{class:`pb-2`},{default:S(()=>[b(`div`,st,[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.queuedRequests`)),1)]),_:1}),o(w(I),{variant:`secondary`},{default:S(()=>[m(d(w(F).length),1)]),_:1})])]),_:1}),o(w(B),null,{default:S(()=>[o(w(T),{class:`h-64`},{default:S(()=>[w(F).length===0?(h(),f(`div`,ct,d(w(r)(`monitor.noQueuedRequests`)),1)):p(``,!0),(h(!0),f(u,null,y(w(F),e=>(h(),f(`div`,{key:e.id,class:l([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":w(L)===e.id}]),onClick:t=>w(G)(e.id)},[o(w(I),{variant:`outline`,class:`shrink-0`},{default:S(()=>[m(d(w(r)(`monitor.queued`)),1)]),_:1}),b(`span`,ut,d(e.model),1),o(w(I),{variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[m(d(e.providerName),1)]),_:2},1024),b(`span`,dt,d(Q(e.startTime))+`s`,1),o(w(O),{"delay-duration":300},{default:S(()=>[o(w(D),null,{default:S(()=>[o(w(A),{"as-child":``},{default:S(()=>[o(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:s(t=>w(Y)(e.id),[`stop`])},{default:S(()=>[w(J)?(h(),n(w(R),{key:0,class:`size-3 text-success`})):(h(),n(w(E),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),o(w(k),null,{default:S(()=>[m(d(w(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)]),_:2},1024)],10,lt))),128))]),_:1})]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),{class:`pb-2`},{default:S(()=>[b(`div`,ft,[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.completed`)),1)]),_:1}),o(w(I),{variant:`secondary`},{default:S(()=>[m(d(w(g).length),1)]),_:1})])]),_:1}),o(w(B),null,{default:S(()=>[o(w(T),{class:`h-64`},{default:S(()=>[w(g).length===0?(h(),f(`div`,pt,d(w(r)(`monitor.noCompletedRequests`)),1)):p(``,!0),(h(!0),f(u,null,y(w(g),e=>(h(),f(`div`,{key:e.id,class:l([`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":w(L)===e.id}]),onClick:t=>w(G)(e.id)},[o(w(I),{variant:w(Ye)(e.status),class:`shrink-0`},{default:S(()=>[m(d(w(Xe)(e.status)),1)]),_:2},1032,[`variant`]),b(`span`,ht,d(e.model),1),o(w(I),{variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[m(d(e.providerName),1)]),_:2},1024),e.isStream?(h(),n(w(I),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[...t[2]||=[m(`SSE`,-1)]]),_:1})):p(``,!0),b(`span`,gt,d(ce(e)),1),o(w(O),{"delay-duration":300},{default:S(()=>[o(w(D),null,{default:S(()=>[o(w(A),{"as-child":``},{default:S(()=>[o(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:s(t=>w(Y)(e.id),[`stop`])},{default:S(()=>[w(J)?(h(),n(w(R),{key:0,class:`size-3 text-success`})):(h(),n(w(E),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),o(w(k),null,{default:S(()=>[m(d(w(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)]),_:2},1024)],10,mt))),128))]),_:1})]),_:1})]),_:1})]),o(w(z),{class:`mb-4`},{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.providerStats`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(Ge,{stats:w(C)},null,8,[`stats`])]),_:1})]),_:1}),b(`div`,_t,[o(w(z),null,{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.concurrency`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(he,{providers:w(j)},null,8,[`providers`])]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.statusCodeDistribution`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(Be,{"by-status-code":w(C)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.runtime`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(Pe,{runtime:w(te)},null,8,[`runtime`])]),_:1})]),_:1})]),o(ee,{open:w(W),"onUpdate:open":t[0]||=e=>a(W)?W.value=e:null,source:`realtime`,request:w(U),"stream-content":w(U)?.streamContent,"log-detail-data":w(K)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`])]))}});export{vt as default};
1
+ import{$ as e,I as t,J as n,K as r,Mt as i,Ot as a,Q as o,U as s,Ut as c,Vt as l,W as u,Wt as d,X as f,Y as p,Z as m,dt as h,k as g,lt as _,n as v,pt as y,q as b,ut as x,wt as S,xt as C,zt as w}from"./button-BwrBFTfJ.js";import{n as T,t as ee}from"./UnifiedRequestDialog-BbafY6jV.js";import{t as E}from"./copy-ZvTZUKRc.js";import{i as D,n as O,r as k,t as A}from"./TooltipTrigger-UwQzn5Jd.js";import{c as j,d as te,f as M,l as N,s as P,u as F}from"./dialog-CVXqy9Fc.js";import{b as I,ct as L,nt as R}from"./index-C8xJ1Vhe.js";import{n as z,t as B}from"./CardContent-Cn7OKkf4.js";import{n as V,t as H}from"./CardTitle-4FM9jzOA.js";import{t as ne}from"./useClipboard-CszJHvCV.js";var U={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},W={class:`text-sm text-muted-foreground`},G={class:`text-2xl font-bold text-foreground mt-1`},K={class:`text-xs text-muted-foreground mt-1`},q={class:`text-sm text-muted-foreground`},re={class:`text-2xl font-bold text-foreground mt-1`},ie={class:`text-xs text-muted-foreground mt-1`},ae={class:`text-sm text-muted-foreground`},oe={class:`text-2xl font-bold text-foreground mt-1`},J={class:`text-xs text-muted-foreground mt-1`},Y={class:`text-sm text-muted-foreground`},X={class:`text-2xl font-bold text-foreground mt-1`},Z={class:`text-xs text-muted-foreground mt-1`},se=e({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(e){let{t:n}=t(),i=e,a=r(()=>!i.stats||i.stats.totalRequests===0?`0.0`:(i.stats.errorCount/i.stats.totalRequests*100).toFixed(1)),s=r(()=>!i.stats||i.stats.totalRequests===0?`0.0`:(i.stats.retryCount/i.stats.totalRequests*100).toFixed(1)),c=r(()=>i.stats?i.stats.p50LatencyMs.toFixed(0):`--`);return(t,r)=>(h(),f(`div`,U,[o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,W,d(w(n)(`monitor.header.activeRequests`)),1),b(`p`,G,d(e.activeCount),1),b(`p`,K,d(w(n)(`monitor.header.streamNonStream`,{stream:e.streamCount,nonStream:e.activeCount-e.streamCount})),1)]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,q,d(w(n)(`monitor.header.errorRate`)),1),b(`p`,re,d(a.value)+`%`,1),b(`p`,ie,d(e.stats?.errorCount??0)+` / `+d(e.stats?.totalRequests??0),1)]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,ae,d(w(n)(`monitor.header.p50Latency`)),1),b(`p`,oe,d(c.value)+`ms`,1),b(`p`,J,d(w(n)(`monitor.header.avgLatency`,{value:e.stats?.avgLatencyMs?.toFixed(0)??`--`})),1)]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(B),{class:`p-4`},{default:S(()=>[b(`p`,Y,d(w(n)(`monitor.header.retryRate`)),1),b(`p`,X,d(s.value)+`%`,1),b(`p`,Z,d(e.stats?.retryCount??0)+` / `+d(e.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),Q={class:`space-y-3`},ce={key:0,class:`text-sm text-muted-foreground`},le={class:`flex items-center justify-between text-sm`},ue={class:`font-medium text-foreground`},de={class:`text-muted-foreground`},fe={class:`text-xs`},pe={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},me={key:1,class:`flex gap-3 text-xs text-muted-foreground`},he=e({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){let{t:n}=t();function r(e){return e.adaptiveLimit??e.maxConcurrency}function i(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(t,a)=>(h(),f(`div`,Q,[e.providers.length===0?(h(),f(`div`,ce,d(w(n)(`monitor.concurrencyPanel.noData`)),1)):p(``,!0),(h(!0),f(u,null,y(e.providers,e=>(h(),f(`div`,{key:e.providerId,class:`space-y-1`},[b(`div`,le,[b(`span`,ue,d(e.providerName),1),b(`span`,de,[e.adaptiveEnabled?(h(),f(u,{key:0},[m(d(e.active)+` / `+d(e.adaptiveLimit??e.maxConcurrency)+` `,1),b(`span`,fe,`(`+d(w(n)(`monitor.concurrencyPanel.adaptive`))+`)`,1)],64)):e.maxConcurrency===0?(h(),f(u,{key:1},[m(d(w(n)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(h(),f(u,{key:2},[m(d(e.active)+` / `+d(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(h(),f(`div`,pe,[b(`div`,{class:l([`h-full rounded-full transition-all duration-300`,i(e.active,r(e))]),style:c({width:`${Math.min(100,e.active/r(e)*100)}%`})},null,6)])):p(``,!0),e.maxConcurrency>0?(h(),f(`div`,me,[b(`span`,null,d(w(n)(`monitor.concurrencyPanel.queued`,{count:e.queued})),1),b(`span`,null,d(w(n)(`monitor.concurrencyPanel.queueLimit`,{limit:e.adaptiveLimit??e.maxQueueSize})),1)])):p(``,!0)]))),128))]))}}),ge={key:0,class:`text-sm text-muted-foreground`},_e={key:1,class:`grid grid-cols-2 gap-3 text-sm`},ve={class:`text-muted-foreground`},ye={class:`font-medium text-foreground`},be={class:`text-muted-foreground`},xe={class:`font-medium text-foreground`},Se={class:`col-span-2`},Ce={class:`flex items-center justify-between`},we={class:`text-muted-foreground`},Te={class:`text-muted-foreground`},Ee={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},De={class:`text-muted-foreground`},Oe={class:`font-medium text-foreground`},ke={class:`text-muted-foreground`},Ae={class:`font-medium text-foreground`},je={class:`col-span-2`},Me={class:`text-muted-foreground`},Ne={class:`font-medium text-foreground`},Pe=e({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let{t:n}=t(),i=e,a=r(()=>!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`}function s(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(t,r)=>e.runtime?(h(),f(`div`,_e,[b(`div`,null,[b(`p`,ve,d(w(n)(`monitor.runtimePanel.uptime`)),1),b(`p`,ye,d(o(e.runtime.uptimeMs)),1)]),b(`div`,null,[b(`p`,be,d(w(n)(`monitor.runtimePanel.memoryRss`)),1),b(`p`,xe,d(s(e.runtime.memoryUsage.rss)),1)]),b(`div`,Se,[b(`div`,Ce,[b(`p`,we,d(w(n)(`monitor.runtimePanel.heapUsage`)),1),b(`p`,Te,d(s(e.runtime.memoryUsage.heapUsed))+` / `+d(s(e.runtime.memoryUsage.heapTotal)),1)]),b(`div`,Ee,[b(`div`,{class:`h-full bg-primary rounded-full transition-all duration-300`,style:c({width:`${a.value}%`})},null,4)])]),b(`div`,null,[b(`p`,De,d(w(n)(`monitor.runtimePanel.activeHandles`)),1),b(`p`,Oe,d(e.runtime.activeHandles),1)]),b(`div`,null,[b(`p`,ke,d(w(n)(`monitor.runtimePanel.activeRequests`)),1),b(`p`,Ae,d(e.runtime.activeRequests),1)]),b(`div`,je,[b(`p`,Me,d(w(n)(`monitor.runtimePanel.eventLoopDelay`)),1),b(`p`,Ne,d(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(h(),f(`div`,ge,d(w(n)(`monitor.runtimePanel.noData`)),1))}}),Fe={key:0,class:`text-sm text-muted-foreground`},Ie={key:1,class:`space-y-2`},Le={class:`flex items-center justify-between text-sm`},Re={class:`text-muted-foreground`},ze={class:`h-2 bg-muted rounded-full overflow-hidden`},Be=e({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let{t:n}=t(),i=e,a=r(()=>Object.values(i.byStatusCode).reduce((e,t)=>e+t,0)),o=r(()=>{let e=i.byStatusCode,t=a.value||1,r=s(e,200,299),o=s(e,400,499)-(e[429]||0),c=e[429]||0,l=s(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:o,percent:(o/t*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:n(`monitor.statusCodes.rateLimited`),count:c,percent:(c/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 s(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(e,t)=>a.value===0?(h(),f(`div`,Fe,d(w(n)(`monitor.statusCodes.noData`)),1)):(h(),f(`div`,Ie,[(h(!0),f(u,null,y(o.value,e=>(h(),f(`div`,{key:e.label,class:`space-y-1`},[b(`div`,Le,[b(`span`,{class:l(e.textClass)},d(e.label),3),b(`span`,Re,d(e.count)+` (`+d(e.percent)+`%) `,1)]),b(`div`,ze,[b(`div`,{class:l([`h-full rounded-full transition-all duration-300`,e.barClass]),style:c({width:`${e.percent}%`})},null,6)])]))),128))]))}}),Ve={key:0,class:`text-sm text-muted-foreground py-4 text-center`},He={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Ue={class:`flex flex-wrap gap-1`},We={key:0,class:`text-xs text-muted-foreground`},Ge=e({__name:`ProviderStatsTable`,props:{stats:{}},setup(e){let{t:i}=t(),a=e,s=r(()=>a.stats?Object.entries(a.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(t,r)=>e.stats?s.value.length===0?(h(),f(`div`,He,d(w(i)(`monitor.providerTable.noProviders`)),1)):(h(),n(w(M),{key:2},{default:S(()=>[o(w(P),null,{default:S(()=>[o(w(N),null,{default:S(()=>[o(w(j),null,{default:S(()=>[...r[0]||=[m(`Provider`,-1)]]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.requests`)),1)]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.successRate`)),1)]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.avgLatency`)),1)]),_:1}),o(w(j),{class:`text-right`},{default:S(()=>[m(d(w(i)(`monitor.providerTable.retryRate`)),1)]),_:1}),o(w(j),null,{default:S(()=>[m(d(w(i)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),o(w(te),null,{default:S(()=>[(h(!0),f(u,null,y(s.value,e=>(h(),n(w(N),{key:e.id},{default:S(()=>[o(w(F),{class:`font-medium`},{default:S(()=>[m(d(e.name),1)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[m(d(e.stats.totalRequests),1)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[b(`span`,{class:l(e.successRate>=95?`text-green-600 dark:text-green-400`:e.successRate>=80?`text-yellow-600 dark:text-yellow-400`:`text-red-500 dark:text-red-400`)},d(e.successRate.toFixed(1))+`% `,3)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[m(d(e.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),o(w(F),{class:`text-right`},{default:S(()=>[b(`span`,{class:l(e.retryRate>10?`text-yellow-600 dark:text-yellow-400`:``)},d(e.retryRate.toFixed(1))+`% `,3)]),_:2},1024),o(w(F),null,{default:S(()=>[b(`div`,Ue,[(h(!0),f(u,null,y(e.stats.topErrors.slice(0,3),e=>(h(),n(w(I),{key:e.code,variant:`destructive`,class:`text-xs`},{default:S(()=>[m(d(e.code)+` (`+d(e.count)+`) `,1)]),_:2},1024))),128)),e.stats.topErrors.length===0?(h(),f(`span`,We,`--`)):p(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(h(),f(`div`,Ve,d(w(i)(`monitor.providerTable.noData`)),1))}});function Ke(e,t,n){let r=null,i=null;function a(){if(!r){r=new EventSource(e),r.onopen=()=>{n?.onOpen?.()};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{o(),n?.onClose?.(),i=setTimeout(a,3e3)}}}function o(){i&&=(clearTimeout(i),null),r&&=(r.close(),null)}return x(()=>{o(),n?.onClose?.()}),{connect:a,disconnect:o}}var qe=200;function Je(){let e=i([]),t=i([]),n=i(null),a=i([]),o=i(null),s=i(!1),c=r(()=>e.value.filter(e=>e.isStream).length),l=r(()=>e.value.filter(e=>!e.queued)),u=r(()=>e.value.filter(e=>e.queued===!0));function d(r){let i;try{i=JSON.parse(r.data)}catch{return}switch(r.type){case`request_start`:{let n=i;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=i;break;case`request_complete`:{let n=i;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>qe&&(t.value.length=qe);break}case`concurrency_update`:a.value=i;break;case`stats_update`:n.value=i;break;case`stream_content_update`:{let t=i;for(let n of t){let t=e.value.find(e=>e.id===n.id);t&&(n.streamContent&&(t.streamContent=n.streamContent),n.streamMetrics&&(t.streamMetrics=n.streamMetrics))}break}case`runtime_update`:o.value=i;break}}function f(){s.value=!0}function p(){s.value=!1}async function m(){try{let[r,i,s,c,l]=await Promise.allSettled([g.getMonitorActive(),g.getMonitorRecent(),g.getMonitorStats(),g.getMonitorConcurrency(),g.getMonitorRuntime()]);r.status===`fulfilled`&&(e.value=r.value),i.status===`fulfilled`&&(t.value=i.value),s.status===`fulfilled`&&(n.value=s.value),c.status===`fulfilled`&&(a.value=c.value),l.status===`fulfilled`&&(o.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,a.value=[],o.value=null}}let h=i(null),_=i(!1),v=i(0);async function y(n){let r=++v.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){h.value=null;return}h.value=null,_.value=!0;try{if(i.status===`pending`){try{let e=await g.getMonitorRequest(n);if(r!==v.value)return;h.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==404)throw e;if(r!==v.value)return;let t=await g.getLogDetail(n);if(r!==v.value)return;h.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await g.getLogDetail(n);if(r!==v.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}}h.value={responseBody:t,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(r!==v.value)return;console.warn(`Failed to load log detail:`,e),h.value=null}finally{r===v.value&&(_.value=!1)}}let b=i(null),x=i(!1);function S(e){b.value=e,x.value=!0,y(e)}let w=r(()=>b.value?e.value.find(e=>e.id===b.value)??t.value.find(e=>e.id===b.value)??null:null);return C(()=>w.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&y(b.value)}),{activeRequests:e,recentCompleted:t,stats:n,concurrency:a,runtime:o,connected:s,streamCount:c,streamingRequests:l,queuedRequests:u,selectedRequestId:b,selectedRequest:w,requestDetailOpen:x,selectRequest:S,logDetailData:h,nonStreamBodyLoading:_,handleSSEMessage:d,handleSSEOpen:f,handleSSEClose:p,loadInitialData:m}}function Ye(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function Xe(e){let{t}=L.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 Ze={class:`p-6`},Qe={class:`flex items-center justify-between mb-4`},$e={class:`text-lg font-semibold text-foreground`},et={class:`flex items-center gap-2`},tt={class:`grid grid-cols-3 gap-4 mb-6`},nt={class:`flex items-center justify-between`},rt={key:0,class:`text-sm text-muted-foreground py-2`},it=[`onClick`],at={class:`text-sm text-foreground truncate flex-1`},ot={class:`text-xs text-muted-foreground shrink-0`},st={class:`flex items-center justify-between`},ct={key:0,class:`text-sm text-muted-foreground py-2`},lt=[`onClick`],ut={class:`text-sm text-foreground truncate flex-1`},dt={class:`text-xs text-muted-foreground shrink-0`},ft={class:`flex items-center justify-between`},pt={key:0,class:`text-sm text-muted-foreground py-2`},mt=[`onClick`],ht={class:`text-sm text-foreground truncate flex-1`},gt={class:`text-xs text-muted-foreground shrink-0`},_t={class:`grid grid-cols-1 lg:grid-cols-3 gap-4`},$=1e3,vt=e({__name:`Monitor`,setup(e){let{t:r}=t(),{activeRequests:c,recentCompleted:g,stats:C,concurrency:j,runtime:te,connected:M,streamCount:N,streamingRequests:P,queuedRequests:F,selectedRequestId:L,selectedRequest:U,requestDetailOpen:W,selectRequest:G,logDetailData:K,handleSSEMessage:q,handleSSEOpen:re,handleSSEClose:ie,loadInitialData:ae}=Je(),{connect:oe}=Ke(`/admin/api/monitor/stream`,{request_start:q,request_update:q,request_complete:q,concurrency_update:q,stats_update:q,runtime_update:q,stream_content_update:q},{onOpen:re,onClose:ie}),{copied:J,copy:Y}=ne(),X=i(Date.now()),Z=null;function Q(e){return((X.value-e)/$).toFixed(1)}function ce(e){return e.completedAt?((e.completedAt-e.startTime)/$).toFixed(1)+`s`:`--`}return _(async()=>{await ae(),oe(),Z=setInterval(()=>{X.value=Date.now()},$)}),x(()=>{Z&&=(clearInterval(Z),null)}),(e,t)=>(h(),f(`div`,Ze,[b(`div`,Qe,[b(`h2`,$e,d(w(r)(`monitor.title`)),1),b(`div`,et,[o(w(I),{variant:w(M)?`default`:`destructive`},{default:S(()=>[m(d(w(M)?w(r)(`monitor.connected`):w(r)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])])]),o(se,{stats:w(C),"active-count":w(c).length,"stream-count":w(N)},null,8,[`stats`,`active-count`,`stream-count`]),b(`div`,tt,[o(w(z),null,{default:S(()=>[o(w(V),{class:`pb-2`},{default:S(()=>[b(`div`,nt,[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.activeRequests`)),1)]),_:1}),o(w(I),{variant:`secondary`},{default:S(()=>[m(d(w(P).length),1)]),_:1})])]),_:1}),o(w(B),null,{default:S(()=>[o(w(T),{class:`h-64`},{default:S(()=>[w(P).length===0?(h(),f(`div`,rt,d(w(r)(`monitor.noActiveRequests`)),1)):p(``,!0),(h(!0),f(u,null,y(w(P),e=>(h(),f(`div`,{key:e.id,class:l([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":w(L)===e.id}]),onClick:t=>w(G)(e.id)},[o(w(I),{variant:w(Ye)(e.status),class:`shrink-0`},{default:S(()=>[m(d(w(Xe)(e.status)),1)]),_:2},1032,[`variant`]),b(`span`,at,d(e.model),1),o(w(I),{variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[m(d(e.providerName),1)]),_:2},1024),b(`span`,ot,d(Q(e.startTime))+`s`,1),e.isStream?(h(),n(w(I),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[...t[1]||=[m(`SSE`,-1)]]),_:1})):p(``,!0),o(w(O),{"delay-duration":300},{default:S(()=>[o(w(D),null,{default:S(()=>[o(w(A),{"as-child":``},{default:S(()=>[o(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:s(t=>w(Y)(e.id),[`stop`])},{default:S(()=>[w(J)?(h(),n(w(R),{key:0,class:`size-3 text-success`})):(h(),n(w(E),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),o(w(k),null,{default:S(()=>[m(d(w(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)]),_:2},1024)],10,it))),128))]),_:1})]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),{class:`pb-2`},{default:S(()=>[b(`div`,st,[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.queuedRequests`)),1)]),_:1}),o(w(I),{variant:`secondary`},{default:S(()=>[m(d(w(F).length),1)]),_:1})])]),_:1}),o(w(B),null,{default:S(()=>[o(w(T),{class:`h-64`},{default:S(()=>[w(F).length===0?(h(),f(`div`,ct,d(w(r)(`monitor.noQueuedRequests`)),1)):p(``,!0),(h(!0),f(u,null,y(w(F),e=>(h(),f(`div`,{key:e.id,class:l([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":w(L)===e.id}]),onClick:t=>w(G)(e.id)},[o(w(I),{variant:`outline`,class:`shrink-0`},{default:S(()=>[m(d(w(r)(`monitor.queued`)),1)]),_:1}),b(`span`,ut,d(e.model),1),o(w(I),{variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[m(d(e.providerName),1)]),_:2},1024),b(`span`,dt,d(Q(e.startTime))+`s`,1),o(w(O),{"delay-duration":300},{default:S(()=>[o(w(D),null,{default:S(()=>[o(w(A),{"as-child":``},{default:S(()=>[o(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:s(t=>w(Y)(e.id),[`stop`])},{default:S(()=>[w(J)?(h(),n(w(R),{key:0,class:`size-3 text-success`})):(h(),n(w(E),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),o(w(k),null,{default:S(()=>[m(d(w(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)]),_:2},1024)],10,lt))),128))]),_:1})]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),{class:`pb-2`},{default:S(()=>[b(`div`,ft,[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.completed`)),1)]),_:1}),o(w(I),{variant:`secondary`},{default:S(()=>[m(d(w(g).length),1)]),_:1})])]),_:1}),o(w(B),null,{default:S(()=>[o(w(T),{class:`h-64`},{default:S(()=>[w(g).length===0?(h(),f(`div`,pt,d(w(r)(`monitor.noCompletedRequests`)),1)):p(``,!0),(h(!0),f(u,null,y(w(g),e=>(h(),f(`div`,{key:e.id,class:l([`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":w(L)===e.id}]),onClick:t=>w(G)(e.id)},[o(w(I),{variant:w(Ye)(e.status),class:`shrink-0`},{default:S(()=>[m(d(w(Xe)(e.status)),1)]),_:2},1032,[`variant`]),b(`span`,ht,d(e.model),1),o(w(I),{variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[m(d(e.providerName),1)]),_:2},1024),e.isStream?(h(),n(w(I),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:S(()=>[...t[2]||=[m(`SSE`,-1)]]),_:1})):p(``,!0),b(`span`,gt,d(ce(e)),1),o(w(O),{"delay-duration":300},{default:S(()=>[o(w(D),null,{default:S(()=>[o(w(A),{"as-child":``},{default:S(()=>[o(w(v),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:s(t=>w(Y)(e.id),[`stop`])},{default:S(()=>[w(J)?(h(),n(w(R),{key:0,class:`size-3 text-success`})):(h(),n(w(E),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),o(w(k),null,{default:S(()=>[m(d(w(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)]),_:2},1024)],10,mt))),128))]),_:1})]),_:1})]),_:1})]),o(w(z),{class:`mb-4`},{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.providerStats`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(Ge,{stats:w(C)},null,8,[`stats`])]),_:1})]),_:1}),b(`div`,_t,[o(w(z),null,{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.concurrency`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(he,{providers:w(j)},null,8,[`providers`])]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.statusCodeDistribution`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(Be,{"by-status-code":w(C)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),o(w(z),null,{default:S(()=>[o(w(V),null,{default:S(()=>[o(w(H),{class:`text-sm font-medium text-foreground`},{default:S(()=>[m(d(w(r)(`monitor.runtime`)),1)]),_:1})]),_:1}),o(w(B),null,{default:S(()=>[o(Pe,{runtime:w(te)},null,8,[`runtime`])]),_:1})]),_:1})]),o(ee,{open:w(W),"onUpdate:open":t[0]||=e=>a(W)?W.value=e:null,source:`realtime`,request:w(U),"stream-content":w(U)?.streamContent,"log-detail-data":w(K)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`])]))}});export{vt as default};