llm-simple-router 0.11.21 → 0.11.22

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