llm-simple-router 0.10.12 → 0.10.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/usage.js +0 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/metrics.js +3 -3
- package/dist/db/migrations/047_fix_remaining_is_complete.sql +16 -0
- package/dist/db/stats.js +0 -1
- package/dist/db/usage-windows.d.ts +2 -0
- package/dist/db/usage-windows.js +4 -1
- package/dist/metrics/sse-parser.js +6 -3
- package/dist/utils/time-range.js +6 -2
- package/frontend-dist/assets/{CardContent-D8q9vc5O.js → CardContent-DfVo-N85.js} +1 -1
- package/frontend-dist/assets/{CardTitle-yA_25649.js → CardTitle-npwJSAlz.js} +1 -1
- package/frontend-dist/assets/{Checkbox-DOkFBp83.js → Checkbox-Ddnzkh_i.js} +1 -1
- package/frontend-dist/assets/{CollapsibleContent-DzBUfYYw.js → CollapsibleContent-BTVazeoQ.js} +1 -1
- package/frontend-dist/assets/{CollapsibleTrigger-CHYSp36W.js → CollapsibleTrigger-DCQeyHrt.js} +1 -1
- package/frontend-dist/assets/{Dashboard-BvYHnpcJ.js → Dashboard-DjnImtwH.js} +1 -1
- package/frontend-dist/assets/{Input-CcyqZXkU.js → Input-Ey_q_5_r.js} +1 -1
- package/frontend-dist/assets/{Label-CzP8C4iz.js → Label-Dw5HcYsL.js} +1 -1
- package/frontend-dist/assets/{Login-CxzSo3yb.js → Login-CSrfhhm9.js} +1 -1
- package/frontend-dist/assets/{Logs-Bxqdk7eE.js → Logs-HR1DZs1M.js} +1 -1
- package/frontend-dist/assets/{MappingEntryEditor-B1DXrpQE.js → MappingEntryEditor-C9pgNL0Q.js} +1 -1
- package/frontend-dist/assets/{ModelCard-CfnNmO62.js → ModelCard-IQMwlnCm.js} +1 -1
- package/frontend-dist/assets/{ModelMappings-BER9jpBp.js → ModelMappings-kRx-GL_7.js} +1 -1
- package/frontend-dist/assets/{Monitor-DTRiQd_f.js → Monitor-y1ofDNK7.js} +1 -1
- package/frontend-dist/assets/{Providers-CFDV-w7E.js → Providers-C1bP2PoM.js} +1 -1
- package/frontend-dist/assets/{ProxyEnhancement-DsmirUED.js → ProxyEnhancement-DQx4coxn.js} +1 -1
- package/frontend-dist/assets/{QuickSetup-Ch84omRO.js → QuickSetup-DHX9-CnO.js} +1 -1
- package/frontend-dist/assets/{RetryRules-Dp5LarPp.js → RetryRules-zdJE0bFL.js} +1 -1
- package/frontend-dist/assets/{RouterKeys-BAddL89X.js → RouterKeys-CD0rI4kv.js} +1 -1
- package/frontend-dist/assets/{RovingFocusItem-CRi6yQVX.js → RovingFocusItem-CFmjbm49.js} +1 -1
- package/frontend-dist/assets/{Schedules-C_bDqD0b.js → Schedules-BUm3cC6w.js} +1 -1
- package/frontend-dist/assets/{Settings-Bcfiljtn.js → Settings-D7z5IRkY.js} +1 -1
- package/frontend-dist/assets/{Setup-BHAW_Tm2.js → Setup-i9inmgjB.js} +1 -1
- package/frontend-dist/assets/{Switch-OzhbhGwX.js → Switch-C9DeYAnK.js} +1 -1
- package/frontend-dist/assets/{TooltipTrigger-DOgXsxyY.js → TooltipTrigger-Dr6kqGSH.js} +1 -1
- package/frontend-dist/assets/{TransformRulesForm-IKRT5A3_.js → TransformRulesForm-CyXh4jHa.js} +1 -1
- package/frontend-dist/assets/{UnifiedRequestDialog-DYS5gkoE.js → UnifiedRequestDialog-6ZRBfjko.js} +1 -1
- package/frontend-dist/assets/{VisuallyHiddenInput-C3oWOQXr.js → VisuallyHiddenInput-CwE9jREu.js} +1 -1
- package/frontend-dist/assets/{button-C1QSPeLI.js → button-C7HO6Dyb.js} +2 -2
- package/frontend-dist/assets/{copy-Cv_Emnxv.js → copy-DxwFlq2A.js} +1 -1
- package/frontend-dist/assets/{dialog-BBGI9zKO.js → dialog-BWB1aLcT.js} +1 -1
- package/frontend-dist/assets/{index-247t8K8M.js → index-itL9--Q_.js} +2 -2
- package/frontend-dist/assets/{trash-2-DtOp0hat.js → trash-2-D2SrfECO.js} +1 -1
- package/frontend-dist/assets/{useClipboard-Bd3JzV3b.js → useClipboard-CttzUerj.js} +1 -1
- package/frontend-dist/assets/{useLogRetention-BrbC5bfG.js → useLogRetention-Dv0deAan.js} +1 -1
- package/frontend-dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Et as e,H as t,Ut as n,Vt as r,Z as i,et as a,ft as o,kt as s,m as c,r as l}from"./button-
|
|
1
|
+
import{Et as e,H as t,Ut as n,Vt as r,Z as i,et as a,ft as o,kt as s,m as c,r as l}from"./button-C7HO6Dyb.js";var u=a({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(a,{emit:u}){let d=a,f=c(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(a,c)=>e((o(),i(`input`,{"onUpdate:modelValue":c[0]||=e=>s(f)?f.value=e:null,"data-slot":`input`,class:n(r(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,r(f)]])}});export{u as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Tt as e,Vt as t,Y as n,et as r,ft as i,ht as a,i as o,o as s,r as c,st as l,x as u}from"./button-
|
|
1
|
+
import{Tt as e,Vt as t,Y as n,et as r,ft as i,ht as a,i as o,o as s,r as c,st as l,x as u}from"./button-C7HO6Dyb.js";var d=r({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(r){let c=r;return s(),(r,s)=>(i(),n(t(o),l(c,{onMousedown:s[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:e(()=>[a(r.$slots,`default`)]),_:3},16))}}),f=r({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){let o=r,s=u(o,`class`);return(r,u)=>(i(),n(t(d),l({"data-slot":`label`},t(s),{class:t(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`,o.class)}),{default:e(()=>[a(r.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,J as n,Kt as r,L as i,Nt as a,Q as o,Tt as s,Vt as c,W as l,X as u,Y as d,Z as f,et as p,ft as m,k as h,n as g,z as _}from"./button-
|
|
1
|
+
import{$ as e,A as t,J as n,Kt as r,L as i,Nt as a,Q as o,Tt as s,Vt as c,W as l,X as u,Y as d,Z as f,et as p,ft as m,k as h,n as g,z as _}from"./button-C7HO6Dyb.js";import{t as v}from"./Label-Dw5HcYsL.js";import{at as y,ot as b,t as x}from"./index-itL9--Q_.js";import{n as S,t as C}from"./CardContent-DfVo-N85.js";import{t as w}from"./Input-Ey_q_5_r.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=p({__name:`Login`,setup(p){let{t:k}=i(),{isDark:A,toggleTheme:j}=x(),M=_(),N=a(``),P=a(``),F=a(!1);async function I(){if(N.value){P.value=``,F.value=!0;try{await h.login(N.value),M.push(`/`)}catch(e){console.error(`login:`,e),P.value=t(e,k(`login.loginFailed`))}finally{F.value=!1}}}return(t,i)=>(m(),f(`div`,T,[e(c(g),{variant:`ghost`,size:`icon`,class:`absolute top-4 right-4 text-muted-foreground hover:text-foreground`,onClick:c(j)},{default:s(()=>[c(A)?(m(),d(c(y),{key:1,class:`w-4 h-4`})):(m(),d(c(b),{key:0,class:`w-4 h-4`}))]),_:1},8,[`onClick`]),e(c(S),{class:`w-full max-w-sm shadow-lg`},{default:s(()=>[e(c(C),{class:`pt-6`},{default:s(()=>[n(`div`,E,[i[1]||=n(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[n(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[n(`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),i[2]||=n(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`,-1),n(`p`,D,r(c(k)(`login.subtitle`)),1)]),n(`form`,{onSubmit:l(I,[`prevent`]),class:`space-y-4`},[n(`div`,null,[e(c(v),{class:`block text-sm font-medium text-foreground mb-1`},{default:s(()=>[o(r(c(k)(`login.password`)),1)]),_:1}),e(c(w),{modelValue:N.value,"onUpdate:modelValue":i[0]||=e=>N.value=e,type:`password`,placeholder:c(k)(`login.passwordPlaceholder`),disabled:F.value},null,8,[`modelValue`,`placeholder`,`disabled`])]),P.value?(m(),f(`p`,O,r(P.value),1)):u(``,!0),e(c(g),{type:`submit`,class:`w-full`,disabled:F.value},{default:s(()=>[o(r(F.value?c(k)(`login.loggingIn`):c(k)(`login.loginButton`)),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{k as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,G as n,J as r,Kt as i,L as a,Nt as o,Q as s,St as c,Tt as l,Ut as u,Vt as d,W as f,X as p,Y as m,Z as h,et as g,ft as _,k as v,kt as y,mt as b,n as x,q as S,r as C,ut as w}from"./button-C1QSPeLI.js";import{r as ee,t as te}from"./UnifiedRequestDialog-DYS5gkoE.js";import{t as T}from"./copy-Cv_Emnxv.js";import{i as E,n as D,r as O,t as ne}from"./TooltipTrigger-DOgXsxyY.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-BBGI9zKO.js";import{t as de}from"./Label-CzP8C4iz.js";import{a as fe,b as M,c as pe,d as me,dt as he,f as N,g as P,h as F,i as ge,m as I,o as _e,p as L,r as R,s as ve,u as ye,ut as z}from"./index-247t8K8M.js";import{t as B}from"./Input-CcyqZXkU.js";import{t as be}from"./useClipboard-Bd3JzV3b.js";import{t as xe}from"./useLogRetention-BrbC5bfG.js";var Se=g({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(_(),h(`div`,{"data-slot":`skeleton`,class:u(d(C)(`bg-muted rounded-md animate-pulse`,t.class))},null,2))}}),V={key:1,class:`ml-4 text-muted-foreground text-xs`},Ce={class:`inline-flex items-center gap-1`},H={class:`font-mono`},U={key:2,class:`text-muted-foreground`},W={key:1,class:`text-muted-foreground`},G={key:1,class:`text-muted-foreground`},we=g({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1},copiedId:{default:null}},emits:[`toggleExpand`,`openDetail`,`copy`],setup(t,{emit:o}){let c=o,{t:g}=a();function v(e){if(!e)return g(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return g(`logs.row.unknown`)}}return(a,o)=>(_(),m(d(A),{class:u({"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild})},{default:l(()=>[e(d(j),{class:`w-10`},{default:l(()=>[!t.isChild&&t.log.child_count?(_(),m(d(x),{key:0,variant:`ghost`,size:`xs`,onClick:o[0]||=e=>c(`toggleExpand`,t.log)},{default:l(()=>[r(`span`,{class:u([`text-xs transition-transform`,t.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):p(``,!0),t.isChild?(_(),h(`span`,V,`└`)):p(``,!0)]),_:1}),e(d(j),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:l(()=>[r(`span`,Ce,[s(i(t.log.id.slice(0,8))+` `,1),e(d(D),null,{default:l(()=>[e(d(E),{"delay-duration":300},{default:l(()=>[e(d(ne),{"as-child":``},{default:l(()=>[e(d(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:o[1]||=f(e=>c(`copy`,t.log.id),[`stop`])},{default:l(()=>[t.copiedId===t.log.id?(_(),m(d(z),{key:0,class:`size-3 text-success`})):(_(),m(d(T),{key:1,class:`size-3`}))]),_:1})]),_:1}),e(d(O),null,{default:l(()=>[s(i(d(g)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})]),_:1})])]),_:1},8,[`title`]),e(d(j),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(he)(t.log.created_at)),1)]),_:1}),e(d(j),null,{default:l(()=>[e(d(M),{variant:t.log.api_type===`openai`?`default`:`secondary`},{default:l(()=>[s(i(t.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),e(d(j),{class:`font-mono text-xs`},{default:l(()=>[s(i(t.log.model||`-`)+` `,1),!t.isChild&&t.log.original_model?(_(),m(d(M),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:l(()=>[s(i(d(g)(`logs.row.replaced`)),1)]),_:1})):p(``,!0)]),_:1}),e(d(j),{class:`text-xs`},{default:l(()=>[!t.isChild&&t.log.provider_id===d(`router`)?(_(),m(d(M),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:l(()=>[s(i(d(g)(`logs.row.proxyEnhancement`,{label:v(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(_(),h(n,{key:1},[r(`span`,H,i(t.log.backend_model||`-`),1),o[3]||=r(`span`,{class:`text-muted-foreground`},` @ `,-1),e(d(M),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:l(()=>[s(i(t.log.provider_name||t.log.provider_id||`-`),1)]),_:1})],64)):(_(),h(`span`,U,`-`))]),_:1}),e(d(j),null,{default:l(()=>[e(d(M),{variant:(t.log.status_code??0)<400?`default`:`destructive`},{default:l(()=>[s(i(t.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),e(d(j),null,{default:l(()=>[s(i(t.log.latency_ms?t.log.latency_ms+`ms`:`-`),1)]),_:1}),e(d(j),null,{default:l(()=>[s(i(t.log.is_stream?`Yes`:`No`),1)]),_:1}),e(d(j),null,{default:l(()=>[t.log.is_retry?(_(),m(d(M),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:l(()=>[s(i(d(g)(`logs.table.retry`)),1)]),_:1})):(_(),h(`span`,W,`-`))]),_:1}),e(d(j),null,{default:l(()=>[t.log.is_failover?(_(),m(d(M),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:l(()=>[s(i(d(g)(`logs.table.failover`)),1)]),_:1})):(_(),h(`span`,G,`-`))]),_:1}),e(d(j),{class:`text-destructive text-xs`},{default:l(()=>[s(i(t.log.error_message||`-`),1)]),_:1}),e(d(j),null,{default:l(()=>[e(d(x),{variant:`ghost`,size:`sm`,onClick:o[2]||=e=>c(`openDetail`,t.log.id)},{default:l(()=>[s(i(d(g)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),Te=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function Ee(){let{t:e}=a(),n=o(`5h`),r=o({start:``,end:``}),i=o(`all`),s=o(`all`),c=o(`all`),l=o(`all`),u=o(`all`),d=o([]),f=o([]),p=o([]),m=S(()=>r.value.start&&r.value.end&&r.value.start<r.value.end),h=S(()=>{let{start:t,end:n}=r.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),g=S(()=>{if(i.value===`all`)return p.value;let e=d.value.find(e=>e.id===i.value);if(!e)return p.value;let t=new Set(e.models.map(e=>e.name));return p.value.filter(e=>t.has(e))});function _(e){return e.includes(`T`)?`${e}:00.000Z`:`${e}T00:00:00.000Z`}function y(e){return e.includes(`T`)?`${e}:59.999Z`:`${e}T23:59:59.999Z`}let b={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function x(){let e={};if(m.value)e.start_time=_(r.value.start),e.end_time=y(r.value.end);else{let t=b[n.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return l.value!==`all`&&(e.api_type=l.value),i.value!==`all`&&(e.provider_id=i.value),s.value!==`all`&&(e.model=s.value),c.value!==`all`&&(e.router_key_id=c.value),u.value!==`all`&&(e.status_code=u.value),e}function C(){r.value={start:``,end:``}}async function ee(){try{d.value=await v.getProviders()}catch(n){console.error(`Failed to load providers:`,n),R.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function te(){try{f.value=await v.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),R.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function T(){try{let e=await v.getMetricsSummary({period:`30d`});p.value=[...new Set(e.rows.map(e=>e.backend_model))]}catch{p.value=[]}}return w(()=>{Promise.allSettled([ee(),te(),T()])}),{PERIODS:Te,period:n,dateRange:r,dateRangeError:h,providerFilter:i,modelFilter:s,keyFilter:c,apiTypeFilter:l,statusFilter:u,providers:d,routerKeys:f,filteredModelOptions:g,hasDateRange:m,clearDateRange:C,buildFilterParams:x}}var K=20,q=864e5;function De(){let{t:e}=a(),n=o([]),r=o(0),i=o(1),s=o({}),c=o(30),l=o(!1),u=o(new Set),d=o({}),f=o({}),p=o(!1),m=o(null),h=S(()=>Math.ceil(r.value/K));async function g(a){a&&(s.value=a);try{let e=await v.getLogs({page:i.value,limit:K,view:`grouped`,...s.value});n.value=e.data,r.value=e.total,u.value.clear(),d.value={},f.value={}}catch(n){console.error(`Failed to load logs:`,n),R.error(t(n,e(`logs.messages.loadFailed`)))}}function _(e){e>=1&&e<=h.value&&e!==i.value&&(i.value=e,g())}let y=o(null),b=o(!1);async function x(){try{let e=new Date(Date.now()-c.value*q).toISOString(),t=await v.deleteLogsBefore(e);l.value=!1,i.value=1,await g(),y.value=t.deleted,b.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),R.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function C(n){let r=n.id;if(u.value.has(r)){u.value.delete(r);return}if(u.value.add(r),!d.value[r]){f.value[r]=!0;try{d.value[r]=await v.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),R.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{f.value[r]=!1}}}async function w(n){try{m.value=await v.getLogDetail(n),p.value=!0}catch(n){console.error(`Failed to load log detail:`,n),R.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:K,logs:n,total:r,page:i,totalPages:h,cleanupDays:c,showCleanup:l,expandedRows:u,childLogs:d,childLoading:f,logDetailOpen:p,selectedLogEntry:m,cleanupResult:y,showCleanupResult:b,loadLogs:g,goToPage:_,handleCleanup:x,toggleExpand:C,openLogDetail:w}}var Oe={class:`p-6`},ke={class:`flex items-center justify-between mb-4`},Ae={class:`text-lg font-semibold text-foreground`},je={class:`flex flex-wrap items-center gap-2 mb-4`},Me={class:`flex gap-1`},Ne={class:`flex items-center gap-1`},Pe={key:1,class:`text-xs text-destructive whitespace-nowrap`},Fe={class:`bg-card rounded-lg border overflow-hidden`},Ie={class:`flex items-center justify-between mt-4`},Le={class:`text-sm text-muted-foreground`},Re={class:`flex items-center gap-1`},ze={key:0,class:`px-2 text-sm text-muted-foreground`},Be={class:`text-sm text-muted-foreground`},Ve={class:`mb-4`},He={class:`space-y-3`},Ue={class:`text-sm font-medium`},We={class:`flex items-center gap-3`},Ge={class:`text-xs text-muted-foreground`},Ke={class:`flex justify-end`},qe=13,Je=300,Ye=7,J=2,Y=1,Xe=2e3,X=g({__name:`Logs`,setup(t){let{t:u}=a(),{PERIODS:f,period:g,dateRange:v,dateRangeError:C,providerFilter:T,modelFilter:E,keyFilter:D,statusFilter:O,providers:ne,routerKeys:M,filteredModelOptions:he,clearDateRange:R,buildFilterParams:z}=Ee(),{logs:V,total:Ce,page:H,totalPages:U,cleanupDays:W,showCleanup:G,cleanupResult:Te,showCleanupResult:K,expandedRows:q,childLogs:X,childLoading:Ze,logDetailOpen:Qe,selectedLogEntry:$e,loadLogs:et,goToPage:Z,handleCleanup:tt,toggleExpand:nt,openLogDetail:rt}=De(),it=S(()=>{let e=U.value,t=H.value;if(e<=Ye)return Array.from({length:e},(e,t)=>t+1);let n=[Y],r=Math.max(Y+1,t-J),i=Math.min(e-Y,t+J);r>Y+J&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-J&&n.push(`...`),n.push(e),n}),{retentionDays:at,retentionSaving:ot,saveRetention:st,loadRetention:ct}=xe(),{copy:lt}=be(),Q=o(null);function ut(e){lt(e),Q.value=e,setTimeout(()=>{Q.value===e&&(Q.value=null)},Xe)}let $=null;return c([g,v,T,E,D,O],()=>{H.value=1,$&&clearTimeout($),$=setTimeout(()=>et(z()),Je)},{deep:!0}),w(()=>{et(z()),ct()}),(t,a)=>(_(),h(`div`,Oe,[r(`div`,ke,[r(`h2`,Ae,i(d(u)(`logs.title`)),1),e(d(x),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:a[0]||=e=>G.value=!0},{default:l(()=>[s(i(d(u)(`logs.cleanupLogs`)),1)]),_:1})]),r(`div`,je,[r(`div`,Me,[(_(!0),h(n,null,b(d(f),e=>(_(),m(d(x),{key:e.value,variant:d(g)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>g.value=e.value},{default:l(()=>[s(i(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),r(`div`,Ne,[e(d(B),{type:`datetime-local`,modelValue:d(v).start,"onUpdate:modelValue":a[1]||=e=>d(v).start=e,class:`w-44`},null,8,[`modelValue`]),a[18]||=r(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),e(d(B),{type:`datetime-local`,modelValue:d(v).end,"onUpdate:modelValue":a[2]||=e=>d(v).end=e,class:`w-44`},null,8,[`modelValue`]),d(v).start||d(v).end?(_(),m(d(x),{key:0,variant:`ghost`,size:`sm`,onClick:d(R)},{default:l(()=>[s(i(d(u)(`logs.clear`)),1)]),_:1},8,[`onClick`])):p(``,!0),d(C)?(_(),h(`span`,Pe,i(d(C)),1)):p(``,!0)]),e(d(P),{modelValue:d(T),"onUpdate:modelValue":a[3]||=e=>y(T)?T.value=e:null},{default:l(()=>[e(d(L),{class:`w-28 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allProviders`)),1)]),_:1}),(_(!0),h(n,null,b(d(ne),e=>(_(),m(d(I),{key:e.id,value:e.id},{default:l(()=>[s(i(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),e(d(P),{modelValue:d(E),"onUpdate:modelValue":a[4]||=e=>y(E)?E.value=e:null},{default:l(()=>[e(d(L),{class:`w-32 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allModels`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allModels`)),1)]),_:1}),(_(!0),h(n,null,b(d(he),e=>(_(),m(d(I),{key:e,value:e},{default:l(()=>[s(i(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),e(d(P),{modelValue:d(D),"onUpdate:modelValue":a[5]||=e=>y(D)?D.value=e:null},{default:l(()=>[e(d(L),{class:`w-32 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allKeys`)),1)]),_:1}),(_(!0),h(n,null,b(d(M),e=>(_(),m(d(I),{key:e.id,value:e.id},{default:l(()=>[s(i(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),e(d(P),{modelValue:d(O),"onUpdate:modelValue":a[6]||=e=>y(O)?O.value=e:null},{default:l(()=>[e(d(L),{class:`w-28 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allStatus`)),1)]),_:1}),e(d(I),{value:`200`},{default:l(()=>[...a[19]||=[s(`200`,-1)]]),_:1}),e(d(I),{value:`non200`},{default:l(()=>[s(i(d(u)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),r(`div`,Fe,[e(d(ae),null,{default:l(()=>[e(d(le),null,{default:l(()=>[e(d(A),{class:`bg-muted`},{default:l(()=>[e(d(k),{class:`w-10`}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.id`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.time`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.type`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.model`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.actualForward`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.statusCode`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.latency`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.streaming`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.retry`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.failover`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.error`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),e(d(ie),null,{default:l(()=>[(_(!0),h(n,null,b(d(V),t=>(_(),h(n,{key:t.id},[e(we,{log:t,expanded:d(q).has(t.id),"copied-id":Q.value,onToggleExpand:d(nt),onOpenDetail:d(rt),onCopy:ut},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),d(q).has(t.id)?(_(),h(n,{key:0},[d(Ze)[t.id]?(_(),m(d(A),{key:0},{default:l(()=>[e(d(j),{colspan:qe,class:`text-center py-2 pl-10`},{default:l(()=>[e(d(Se),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):d(X)[t.id]?.length?(_(!0),h(n,{key:1},b(d(X)[t.id],e=>(_(),m(we,{key:e.id,log:e,"is-child":!0,"copied-id":Q.value,onOpenDetail:d(rt),onCopy:ut},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):p(``,!0)],64)):p(``,!0)],64))),128)),d(V).length===0?(_(),m(d(A),{key:0},{default:l(()=>[e(d(j),{colspan:qe,class:`text-center text-muted-foreground py-8`},{default:l(()=>[s(i(d(u)(`logs.noLogs`)),1)]),_:1})]),_:1})):p(``,!0)]),_:1})]),_:1})]),r(`div`,Ie,[r(`p`,Le,i(d(u)(`logs.pagination`,{total:d(Ce),page:d(H),totalPages:d(U)})),1),r(`div`,Re,[e(d(x),{variant:`outline`,size:`sm`,onClick:a[7]||=e=>d(Z)(1),disabled:d(H)<=1},{default:l(()=>[s(i(d(u)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),e(d(x),{variant:`outline`,size:`sm`,onClick:a[8]||=e=>d(Z)(d(H)-1),disabled:d(H)<=1},{default:l(()=>[s(i(d(u)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(_(!0),h(n,null,b(it.value,e=>(_(),h(n,{key:e},[e===`...`?(_(),h(`span`,ze,`...`)):(_(),m(d(x),{key:1,variant:e===d(H)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>d(Z)(e)},{default:l(()=>[s(i(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),e(d(x),{variant:`outline`,size:`sm`,onClick:a[9]||=e=>d(Z)(d(H)+1),disabled:d(H)>=d(U)},{default:l(()=>[s(i(d(u)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),e(d(x),{variant:`outline`,size:`sm`,onClick:a[10]||=e=>d(Z)(d(U)),disabled:d(H)>=d(U)},{default:l(()=>[s(i(d(u)(`logs.lastPage`)),1)]),_:1},8,[`disabled`]),a[20]||=s(` > `,-1)])]),e(te,{open:d(Qe),"onUpdate:open":a[11]||=e=>y(Qe)?Qe.value=e:null,source:`history`,"log-entry":d($e)},null,8,[`open`,`log-entry`]),e(d(se),{open:d(G),"onUpdate:open":a[15]||=e=>y(G)?G.value=e:null},{default:l(()=>[e(d(re),null,{default:l(()=>[e(d(oe),null,{default:l(()=>[e(d(ue),null,{default:l(()=>[s(i(d(u)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),r(`p`,Be,i(d(u)(`logs.cleanup.description`)),1),r(`div`,Ve,[e(d(de),{class:`block text-sm font-medium text-foreground mb-1`},{default:l(()=>[s(i(d(u)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),e(d(B),{modelValue:d(W),"onUpdate:modelValue":a[12]||=e=>y(W)?W.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),e(d(ee)),r(`div`,He,[r(`div`,Ue,i(d(u)(`logs.cleanup.autoCleanup`)),1),r(`div`,We,[e(d(de),{class:`whitespace-nowrap`},{default:l(()=>[s(i(d(u)(`logs.cleanup.retentionDays`)),1)]),_:1}),e(d(B),{type:`number`,modelValue:d(at),"onUpdate:modelValue":a[13]||=e=>y(at)?at.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-20`},null,8,[`modelValue`]),r(`span`,Ge,i(d(u)(`logs.cleanup.noAutoCleanup`)),1)]),r(`div`,Ke,[e(d(x),{size:`sm`,onClick:d(st),disabled:d(ot)},{default:l(()=>[s(i(d(u)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])])]),e(d(ce),null,{default:l(()=>[e(d(x),{variant:`outline`,onClick:a[14]||=e=>G.value=!1},{default:l(()=>[s(i(d(u)(`common.cancel`)),1)]),_:1}),e(d(x),{variant:`destructive`,onClick:d(tt)},{default:l(()=>[s(i(d(u)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),e(d(me),{open:d(K),"onUpdate:open":a[17]||=e=>y(K)?K.value=e:null},{default:l(()=>[e(d(pe),null,{default:l(()=>[e(d(fe),null,{default:l(()=>[e(d(ge),null,{default:l(()=>[s(i(d(u)(`logs.cleanupResult.title`)),1)]),_:1}),e(d(ve),null,{default:l(()=>[s(i(d(u)(`logs.cleanupResult.description`,{count:d(Te)})),1)]),_:1})]),_:1}),e(d(_e),null,{default:l(()=>[e(d(ye),{onClick:a[16]||=e=>K.value=!1},{default:l(()=>[s(i(d(u)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{X as default};
|
|
1
|
+
import{$ as e,A as t,G as n,J as r,Kt as i,L as a,Nt as o,Q as s,St as c,Tt as l,Ut as u,Vt as d,W as f,X as p,Y as m,Z as h,et as g,ft as _,k as v,kt as y,mt as b,n as x,q as S,r as C,ut as w}from"./button-C7HO6Dyb.js";import{r as ee,t as te}from"./UnifiedRequestDialog-6ZRBfjko.js";import{t as T}from"./copy-DxwFlq2A.js";import{i as E,n as D,r as O,t as ne}from"./TooltipTrigger-Dr6kqGSH.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-BWB1aLcT.js";import{t as de}from"./Label-Dw5HcYsL.js";import{a as fe,b as M,c as pe,d as me,dt as he,f as N,g as P,h as F,i as ge,m as I,o as _e,p as L,r as R,s as ve,u as ye,ut as z}from"./index-itL9--Q_.js";import{t as B}from"./Input-Ey_q_5_r.js";import{t as be}from"./useClipboard-CttzUerj.js";import{t as xe}from"./useLogRetention-Dv0deAan.js";var Se=g({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(_(),h(`div`,{"data-slot":`skeleton`,class:u(d(C)(`bg-muted rounded-md animate-pulse`,t.class))},null,2))}}),V={key:1,class:`ml-4 text-muted-foreground text-xs`},Ce={class:`inline-flex items-center gap-1`},H={class:`font-mono`},U={key:2,class:`text-muted-foreground`},W={key:1,class:`text-muted-foreground`},G={key:1,class:`text-muted-foreground`},we=g({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1},copiedId:{default:null}},emits:[`toggleExpand`,`openDetail`,`copy`],setup(t,{emit:o}){let c=o,{t:g}=a();function v(e){if(!e)return g(`logs.row.unknown`);try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return g(`logs.row.unknown`)}}return(a,o)=>(_(),m(d(A),{class:u({"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild})},{default:l(()=>[e(d(j),{class:`w-10`},{default:l(()=>[!t.isChild&&t.log.child_count?(_(),m(d(x),{key:0,variant:`ghost`,size:`xs`,onClick:o[0]||=e=>c(`toggleExpand`,t.log)},{default:l(()=>[r(`span`,{class:u([`text-xs transition-transform`,t.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):p(``,!0),t.isChild?(_(),h(`span`,V,`└`)):p(``,!0)]),_:1}),e(d(j),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:l(()=>[r(`span`,Ce,[s(i(t.log.id.slice(0,8))+` `,1),e(d(D),null,{default:l(()=>[e(d(E),{"delay-duration":300},{default:l(()=>[e(d(ne),{"as-child":``},{default:l(()=>[e(d(x),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:o[1]||=f(e=>c(`copy`,t.log.id),[`stop`])},{default:l(()=>[t.copiedId===t.log.id?(_(),m(d(z),{key:0,class:`size-3 text-success`})):(_(),m(d(T),{key:1,class:`size-3`}))]),_:1})]),_:1}),e(d(O),null,{default:l(()=>[s(i(d(g)(`logs.row.copyFullId`)),1)]),_:1})]),_:1})]),_:1})])]),_:1},8,[`title`]),e(d(j),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(he)(t.log.created_at)),1)]),_:1}),e(d(j),null,{default:l(()=>[e(d(M),{variant:t.log.api_type===`openai`?`default`:`secondary`},{default:l(()=>[s(i(t.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),e(d(j),{class:`font-mono text-xs`},{default:l(()=>[s(i(t.log.model||`-`)+` `,1),!t.isChild&&t.log.original_model?(_(),m(d(M),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:l(()=>[s(i(d(g)(`logs.row.replaced`)),1)]),_:1})):p(``,!0)]),_:1}),e(d(j),{class:`text-xs`},{default:l(()=>[!t.isChild&&t.log.provider_id===d(`router`)?(_(),m(d(M),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:l(()=>[s(i(d(g)(`logs.row.proxyEnhancement`,{label:v(t.log.upstream_request)})),1)]),_:1})):t.log.backend_model||t.log.provider_name?(_(),h(n,{key:1},[r(`span`,H,i(t.log.backend_model||`-`),1),o[3]||=r(`span`,{class:`text-muted-foreground`},` @ `,-1),e(d(M),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:l(()=>[s(i(t.log.provider_name||t.log.provider_id||`-`),1)]),_:1})],64)):(_(),h(`span`,U,`-`))]),_:1}),e(d(j),null,{default:l(()=>[e(d(M),{variant:(t.log.status_code??0)<400?`default`:`destructive`},{default:l(()=>[s(i(t.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),e(d(j),null,{default:l(()=>[s(i(t.log.latency_ms?t.log.latency_ms+`ms`:`-`),1)]),_:1}),e(d(j),null,{default:l(()=>[s(i(t.log.is_stream?`Yes`:`No`),1)]),_:1}),e(d(j),null,{default:l(()=>[t.log.is_retry?(_(),m(d(M),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:l(()=>[s(i(d(g)(`logs.table.retry`)),1)]),_:1})):(_(),h(`span`,W,`-`))]),_:1}),e(d(j),null,{default:l(()=>[t.log.is_failover?(_(),m(d(M),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:l(()=>[s(i(d(g)(`logs.table.failover`)),1)]),_:1})):(_(),h(`span`,G,`-`))]),_:1}),e(d(j),{class:`text-destructive text-xs`},{default:l(()=>[s(i(t.log.error_message||`-`),1)]),_:1}),e(d(j),null,{default:l(()=>[e(d(x),{variant:`ghost`,size:`sm`,onClick:o[2]||=e=>c(`openDetail`,t.log.id)},{default:l(()=>[s(i(d(g)(`logs.row.detail`)),1)]),_:1})]),_:1})]),_:1},8,[`class`]))}}),Te=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function Ee(){let{t:e}=a(),n=o(`5h`),r=o({start:``,end:``}),i=o(`all`),s=o(`all`),c=o(`all`),l=o(`all`),u=o(`all`),d=o([]),f=o([]),p=o([]),m=S(()=>r.value.start&&r.value.end&&r.value.start<r.value.end),h=S(()=>{let{start:t,end:n}=r.value;return!t||!n?``:t>=n?e(`logs.validation.endTimeAfterStart`):``}),g=S(()=>{if(i.value===`all`)return p.value;let e=d.value.find(e=>e.id===i.value);if(!e)return p.value;let t=new Set(e.models.map(e=>e.name));return p.value.filter(e=>t.has(e))});function _(e){return e.includes(`T`)?`${e}:00.000Z`:`${e}T00:00:00.000Z`}function y(e){return e.includes(`T`)?`${e}:59.999Z`:`${e}T23:59:59.999Z`}let b={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function x(){let e={};if(m.value)e.start_time=_(r.value.start),e.end_time=y(r.value.end);else{let t=b[n.value];t&&(e.start_time=new Date(Date.now()-t).toISOString())}return l.value!==`all`&&(e.api_type=l.value),i.value!==`all`&&(e.provider_id=i.value),s.value!==`all`&&(e.model=s.value),c.value!==`all`&&(e.router_key_id=c.value),u.value!==`all`&&(e.status_code=u.value),e}function C(){r.value={start:``,end:``}}async function ee(){try{d.value=await v.getProviders()}catch(n){console.error(`Failed to load providers:`,n),R.error(t(n,e(`logs.messages.loadProvidersFailed`)))}}async function te(){try{f.value=await v.getRouterKeys()}catch(n){console.error(`Failed to load router keys:`,n),R.error(t(n,e(`logs.messages.loadKeysFailed`)))}}async function T(){try{let e=await v.getMetricsSummary({period:`30d`});p.value=[...new Set(e.rows.map(e=>e.backend_model))]}catch{p.value=[]}}return w(()=>{Promise.allSettled([ee(),te(),T()])}),{PERIODS:Te,period:n,dateRange:r,dateRangeError:h,providerFilter:i,modelFilter:s,keyFilter:c,apiTypeFilter:l,statusFilter:u,providers:d,routerKeys:f,filteredModelOptions:g,hasDateRange:m,clearDateRange:C,buildFilterParams:x}}var K=20,q=864e5;function De(){let{t:e}=a(),n=o([]),r=o(0),i=o(1),s=o({}),c=o(30),l=o(!1),u=o(new Set),d=o({}),f=o({}),p=o(!1),m=o(null),h=S(()=>Math.ceil(r.value/K));async function g(a){a&&(s.value=a);try{let e=await v.getLogs({page:i.value,limit:K,view:`grouped`,...s.value});n.value=e.data,r.value=e.total,u.value.clear(),d.value={},f.value={}}catch(n){console.error(`Failed to load logs:`,n),R.error(t(n,e(`logs.messages.loadFailed`)))}}function _(e){e>=1&&e<=h.value&&e!==i.value&&(i.value=e,g())}let y=o(null),b=o(!1);async function x(){try{let e=new Date(Date.now()-c.value*q).toISOString(),t=await v.deleteLogsBefore(e);l.value=!1,i.value=1,await g(),y.value=t.deleted,b.value=!0}catch(n){console.error(`Failed to cleanup logs:`,n),R.error(t(n,e(`logs.messages.cleanupFailed`)))}}async function C(n){let r=n.id;if(u.value.has(r)){u.value.delete(r);return}if(u.value.add(r),!d.value[r]){f.value[r]=!0;try{d.value[r]=await v.getLogChildren(r)}catch(n){console.error(`Failed to load child logs:`,n),R.error(t(n,e(`logs.messages.loadSubRequestsFailed`)))}finally{f.value[r]=!1}}}async function w(n){try{m.value=await v.getLogDetail(n),p.value=!0}catch(n){console.error(`Failed to load log detail:`,n),R.error(t(n,e(`logs.messages.loadDetailFailed`)))}}return{PAGE_SIZE:K,logs:n,total:r,page:i,totalPages:h,cleanupDays:c,showCleanup:l,expandedRows:u,childLogs:d,childLoading:f,logDetailOpen:p,selectedLogEntry:m,cleanupResult:y,showCleanupResult:b,loadLogs:g,goToPage:_,handleCleanup:x,toggleExpand:C,openLogDetail:w}}var Oe={class:`p-6`},ke={class:`flex items-center justify-between mb-4`},Ae={class:`text-lg font-semibold text-foreground`},je={class:`flex flex-wrap items-center gap-2 mb-4`},Me={class:`flex gap-1`},Ne={class:`flex items-center gap-1`},Pe={key:1,class:`text-xs text-destructive whitespace-nowrap`},Fe={class:`bg-card rounded-lg border overflow-hidden`},Ie={class:`flex items-center justify-between mt-4`},Le={class:`text-sm text-muted-foreground`},Re={class:`flex items-center gap-1`},ze={key:0,class:`px-2 text-sm text-muted-foreground`},Be={class:`text-sm text-muted-foreground`},Ve={class:`mb-4`},He={class:`space-y-3`},Ue={class:`text-sm font-medium`},We={class:`flex items-center gap-3`},Ge={class:`text-xs text-muted-foreground`},Ke={class:`flex justify-end`},qe=13,Je=300,Ye=7,J=2,Y=1,Xe=2e3,X=g({__name:`Logs`,setup(t){let{t:u}=a(),{PERIODS:f,period:g,dateRange:v,dateRangeError:C,providerFilter:T,modelFilter:E,keyFilter:D,statusFilter:O,providers:ne,routerKeys:M,filteredModelOptions:he,clearDateRange:R,buildFilterParams:z}=Ee(),{logs:V,total:Ce,page:H,totalPages:U,cleanupDays:W,showCleanup:G,cleanupResult:Te,showCleanupResult:K,expandedRows:q,childLogs:X,childLoading:Ze,logDetailOpen:Qe,selectedLogEntry:$e,loadLogs:et,goToPage:Z,handleCleanup:tt,toggleExpand:nt,openLogDetail:rt}=De(),it=S(()=>{let e=U.value,t=H.value;if(e<=Ye)return Array.from({length:e},(e,t)=>t+1);let n=[Y],r=Math.max(Y+1,t-J),i=Math.min(e-Y,t+J);r>Y+J&&n.push(`...`);for(let e=r;e<=i;e++)n.push(e);return i<e-J&&n.push(`...`),n.push(e),n}),{retentionDays:at,retentionSaving:ot,saveRetention:st,loadRetention:ct}=xe(),{copy:lt}=be(),Q=o(null);function ut(e){lt(e),Q.value=e,setTimeout(()=>{Q.value===e&&(Q.value=null)},Xe)}let $=null;return c([g,v,T,E,D,O],()=>{H.value=1,$&&clearTimeout($),$=setTimeout(()=>et(z()),Je)},{deep:!0}),w(()=>{et(z()),ct()}),(t,a)=>(_(),h(`div`,Oe,[r(`div`,ke,[r(`h2`,Ae,i(d(u)(`logs.title`)),1),e(d(x),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:a[0]||=e=>G.value=!0},{default:l(()=>[s(i(d(u)(`logs.cleanupLogs`)),1)]),_:1})]),r(`div`,je,[r(`div`,Me,[(_(!0),h(n,null,b(d(f),e=>(_(),m(d(x),{key:e.value,variant:d(g)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>g.value=e.value},{default:l(()=>[s(i(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),r(`div`,Ne,[e(d(B),{type:`datetime-local`,modelValue:d(v).start,"onUpdate:modelValue":a[1]||=e=>d(v).start=e,class:`w-44`},null,8,[`modelValue`]),a[18]||=r(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),e(d(B),{type:`datetime-local`,modelValue:d(v).end,"onUpdate:modelValue":a[2]||=e=>d(v).end=e,class:`w-44`},null,8,[`modelValue`]),d(v).start||d(v).end?(_(),m(d(x),{key:0,variant:`ghost`,size:`sm`,onClick:d(R)},{default:l(()=>[s(i(d(u)(`logs.clear`)),1)]),_:1},8,[`onClick`])):p(``,!0),d(C)?(_(),h(`span`,Pe,i(d(C)),1)):p(``,!0)]),e(d(P),{modelValue:d(T),"onUpdate:modelValue":a[3]||=e=>y(T)?T.value=e:null},{default:l(()=>[e(d(L),{class:`w-28 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allProviders`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allProviders`)),1)]),_:1}),(_(!0),h(n,null,b(d(ne),e=>(_(),m(d(I),{key:e.id,value:e.id},{default:l(()=>[s(i(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),e(d(P),{modelValue:d(E),"onUpdate:modelValue":a[4]||=e=>y(E)?E.value=e:null},{default:l(()=>[e(d(L),{class:`w-32 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allModels`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allModels`)),1)]),_:1}),(_(!0),h(n,null,b(d(he),e=>(_(),m(d(I),{key:e,value:e},{default:l(()=>[s(i(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),e(d(P),{modelValue:d(D),"onUpdate:modelValue":a[5]||=e=>y(D)?D.value=e:null},{default:l(()=>[e(d(L),{class:`w-32 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allKeys`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allKeys`)),1)]),_:1}),(_(!0),h(n,null,b(d(M),e=>(_(),m(d(I),{key:e.id,value:e.id},{default:l(()=>[s(i(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),e(d(P),{modelValue:d(O),"onUpdate:modelValue":a[6]||=e=>y(O)?O.value=e:null},{default:l(()=>[e(d(L),{class:`w-28 truncate`},{default:l(()=>[e(d(N),{placeholder:d(u)(`logs.allStatus`)},null,8,[`placeholder`])]),_:1}),e(d(F),null,{default:l(()=>[e(d(I),{value:`all`},{default:l(()=>[s(i(d(u)(`logs.allStatus`)),1)]),_:1}),e(d(I),{value:`200`},{default:l(()=>[...a[19]||=[s(`200`,-1)]]),_:1}),e(d(I),{value:`non200`},{default:l(()=>[s(i(d(u)(`logs.non200`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),r(`div`,Fe,[e(d(ae),null,{default:l(()=>[e(d(le),null,{default:l(()=>[e(d(A),{class:`bg-muted`},{default:l(()=>[e(d(k),{class:`w-10`}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.id`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.time`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.type`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.model`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.actualForward`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.statusCode`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.latency`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.streaming`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.retry`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.failover`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.error`)),1)]),_:1}),e(d(k),{class:`text-muted-foreground`},{default:l(()=>[s(i(d(u)(`logs.table.actions`)),1)]),_:1})]),_:1})]),_:1}),e(d(ie),null,{default:l(()=>[(_(!0),h(n,null,b(d(V),t=>(_(),h(n,{key:t.id},[e(we,{log:t,expanded:d(q).has(t.id),"copied-id":Q.value,onToggleExpand:d(nt),onOpenDetail:d(rt),onCopy:ut},null,8,[`log`,`expanded`,`copied-id`,`onToggleExpand`,`onOpenDetail`]),d(q).has(t.id)?(_(),h(n,{key:0},[d(Ze)[t.id]?(_(),m(d(A),{key:0},{default:l(()=>[e(d(j),{colspan:qe,class:`text-center py-2 pl-10`},{default:l(()=>[e(d(Se),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):d(X)[t.id]?.length?(_(!0),h(n,{key:1},b(d(X)[t.id],e=>(_(),m(we,{key:e.id,log:e,"is-child":!0,"copied-id":Q.value,onOpenDetail:d(rt),onCopy:ut},null,8,[`log`,`copied-id`,`onOpenDetail`]))),128)):p(``,!0)],64)):p(``,!0)],64))),128)),d(V).length===0?(_(),m(d(A),{key:0},{default:l(()=>[e(d(j),{colspan:qe,class:`text-center text-muted-foreground py-8`},{default:l(()=>[s(i(d(u)(`logs.noLogs`)),1)]),_:1})]),_:1})):p(``,!0)]),_:1})]),_:1})]),r(`div`,Ie,[r(`p`,Le,i(d(u)(`logs.pagination`,{total:d(Ce),page:d(H),totalPages:d(U)})),1),r(`div`,Re,[e(d(x),{variant:`outline`,size:`sm`,onClick:a[7]||=e=>d(Z)(1),disabled:d(H)<=1},{default:l(()=>[s(i(d(u)(`logs.firstPage`)),1)]),_:1},8,[`disabled`]),e(d(x),{variant:`outline`,size:`sm`,onClick:a[8]||=e=>d(Z)(d(H)-1),disabled:d(H)<=1},{default:l(()=>[s(i(d(u)(`logs.prevPage`)),1)]),_:1},8,[`disabled`]),(_(!0),h(n,null,b(it.value,e=>(_(),h(n,{key:e},[e===`...`?(_(),h(`span`,ze,`...`)):(_(),m(d(x),{key:1,variant:e===d(H)?`default`:`outline`,size:`sm`,class:`min-w-8`,onClick:t=>d(Z)(e)},{default:l(()=>[s(i(e),1)]),_:2},1032,[`variant`,`onClick`]))],64))),128)),e(d(x),{variant:`outline`,size:`sm`,onClick:a[9]||=e=>d(Z)(d(H)+1),disabled:d(H)>=d(U)},{default:l(()=>[s(i(d(u)(`logs.nextPage`)),1)]),_:1},8,[`disabled`]),e(d(x),{variant:`outline`,size:`sm`,onClick:a[10]||=e=>d(Z)(d(U)),disabled:d(H)>=d(U)},{default:l(()=>[s(i(d(u)(`logs.lastPage`)),1)]),_:1},8,[`disabled`]),a[20]||=s(` > `,-1)])]),e(te,{open:d(Qe),"onUpdate:open":a[11]||=e=>y(Qe)?Qe.value=e:null,source:`history`,"log-entry":d($e)},null,8,[`open`,`log-entry`]),e(d(se),{open:d(G),"onUpdate:open":a[15]||=e=>y(G)?G.value=e:null},{default:l(()=>[e(d(re),null,{default:l(()=>[e(d(oe),null,{default:l(()=>[e(d(ue),null,{default:l(()=>[s(i(d(u)(`logs.cleanup.title`)),1)]),_:1})]),_:1}),r(`p`,Be,i(d(u)(`logs.cleanup.description`)),1),r(`div`,Ve,[e(d(de),{class:`block text-sm font-medium text-foreground mb-1`},{default:l(()=>[s(i(d(u)(`logs.cleanup.keepRecentDays`)),1)]),_:1}),e(d(B),{modelValue:d(W),"onUpdate:modelValue":a[12]||=e=>y(W)?W.value=e:null,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),e(d(ee)),r(`div`,He,[r(`div`,Ue,i(d(u)(`logs.cleanup.autoCleanup`)),1),r(`div`,We,[e(d(de),{class:`whitespace-nowrap`},{default:l(()=>[s(i(d(u)(`logs.cleanup.retentionDays`)),1)]),_:1}),e(d(B),{type:`number`,modelValue:d(at),"onUpdate:modelValue":a[13]||=e=>y(at)?at.value=e:null,modelModifiers:{number:!0},min:0,max:90,class:`w-20`},null,8,[`modelValue`]),r(`span`,Ge,i(d(u)(`logs.cleanup.noAutoCleanup`)),1)]),r(`div`,Ke,[e(d(x),{size:`sm`,onClick:d(st),disabled:d(ot)},{default:l(()=>[s(i(d(u)(`logs.cleanup.saveSettings`)),1)]),_:1},8,[`onClick`,`disabled`])])]),e(d(ce),null,{default:l(()=>[e(d(x),{variant:`outline`,onClick:a[14]||=e=>G.value=!1},{default:l(()=>[s(i(d(u)(`common.cancel`)),1)]),_:1}),e(d(x),{variant:`destructive`,onClick:d(tt)},{default:l(()=>[s(i(d(u)(`logs.cleanup.confirmCleanup`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1})]),_:1},8,[`open`]),e(d(me),{open:d(K),"onUpdate:open":a[17]||=e=>y(K)?K.value=e:null},{default:l(()=>[e(d(pe),null,{default:l(()=>[e(d(fe),null,{default:l(()=>[e(d(ge),null,{default:l(()=>[s(i(d(u)(`logs.cleanupResult.title`)),1)]),_:1}),e(d(ve),null,{default:l(()=>[s(i(d(u)(`logs.cleanupResult.description`,{count:d(Te)})),1)]),_:1})]),_:1}),e(d(_e),null,{default:l(()=>[e(d(ye),{onClick:a[16]||=e=>K.value=!1},{default:l(()=>[s(i(d(u)(`logs.cleanupResult.ok`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{X as default};
|
package/frontend-dist/assets/{MappingEntryEditor-B1DXrpQE.js → MappingEntryEditor-C9pgNL0Q.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,G as t,J as n,Kt as r,L as i,Nt as a,P as o,Q as s,Tt as c,Ut as l,Vt as u,X as d,Y as f,Z as p,et as m,ft as h,mt as g,n as _,q as v}from"./button-C1QSPeLI.js";import{n as y}from"./Switch-OzhbhGwX.js";import{t as b}from"./trash-2-DtOp0hat.js";import{i as x,n as S,r as C,t as w}from"./TooltipTrigger-DOgXsxyY.js";import{_ as T,lt as E,v as D,y as O}from"./index-247t8K8M.js";import{t as k}from"./Input-CcyqZXkU.js";var A=o(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),j=o(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),M=o(`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`}]]),ee=o(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),N=[`onMouseenter`],P={class:`truncate max-w-40`},F={key:0,class:`ml-1 text-[10px] px-1 py-px rounded bg-emerald-500/15 text-emerald-400 shrink-0`},I=[`onMouseenter`],L=[`onClick`],R={class:`truncate`},z={key:0,class:`shrink-0 text-xs text-muted-foreground`},B={key:0,class:`px-2 py-1.5 text-sm text-muted-foreground`},V=m({__name:`CascadingSelect`,props:{groups:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(o,{emit:s}){let{t:m}=i(),_=o,y=v(()=>_.placeholder||m(`common.selectPlaceholder`)),b=s,x=a(!1),S=a(null),C=v(()=>{if(!_.modelValue)return``;let e=_.groups.find(e=>e.key===_.modelValue.groupKey);if(!e)return``;let t=e.options.find(e=>e.value===_.modelValue.value);return t?`${e.label} / ${t.label}`:``});function w(e,t){b(`update:modelValue`,{groupKey:e,value:t}),x.value=!1}function k(e){x.value=e,e||(S.value=null)}return(i,a)=>(h(),f(u(O),{open:x.value,"onUpdate:open":k},{default:c(()=>[e(u(T),{"as-child":``},{default:c(()=>[n(`div`,{class:l([`flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background cursor-pointer hover:bg-accent hover:text-accent-foreground`,[o.compact?`h-8 text-xs px-2.5 py-1`:`h-10 text-sm px-3 py-2`,{"ring-2 ring-ring ring-offset-2":x.value}]])},[n(`span`,{class:l([`truncate`,o.modelValue?`text-foreground`:`text-muted-foreground`])},r(C.value||y.value),3),e(u(E),{class:`h-4 w-4 shrink-0 opacity-50`})],2)]),_:1}),e(u(D),{align:`start`,"side-offset":4,class:`z-[200] w-auto min-w-56 overflow-visible p-1`},{default:c(()=>[(h(!0),p(t,null,g(o.groups,i=>(h(),p(`div`,{key:i.key,class:l([`relative flex cursor-pointer items-center justify-between rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground z-10":S.value===i.key}]),onMouseenter:e=>S.value=i.key},[n(`span`,P,r(i.label),1),i.badge?(h(),p(`span`,F,r(i.badge),1)):d(``,!0),e(u(j),{class:`ml-1 h-4 w-4 shrink-0 opacity-50`}),S.value===i.key&&i.options.length>0?(h(),p(`div`,{key:1,class:`absolute left-full top-0 ml-0.5 min-w-48 rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,onMouseenter:e=>S.value=i.key},[(h(!0),p(t,null,g(i.options,e=>(h(),p(`div`,{key:e.value,class:l([`flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground":o.modelValue?.groupKey===i.key&&o.modelValue?.value===e.value}]),onClick:t=>w(i.key,e.value)},[n(`span`,R,r(e.label),1),e.tag?(h(),p(`span`,z,r(e.tag),1)):d(``,!0)],10,L))),128))],40,I)):d(``,!0)],42,N))),128)),o.groups.length===0?(h(),p(`div`,B,r(u(m)(`common.noOptions`)),1)):d(``,!0)]),_:1})]),_:1},8,[`open`]))}}),H=1e6,U=1e3,W=m({__name:`CascadingModelSelect`,props:{providers:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean}},emits:[`update:modelValue`],setup(e,{emit:t}){let{t:n}=i(),r=e,a=v(()=>r.placeholder||n(`mappings.selectProviderModel`)),o=t;function s(e){return e>=H?`${e/H}M`:`${e/U}K`}let c=v(()=>r.providers.map(e=>({key:e.provider.id,label:e.provider.name,badge:e.isNew?n(`common.new`):void 0,options:e.models.map(e=>({value:e.name,label:e.name,tag:s(e.contextWindow)}))}))),l=v(()=>r.modelValue?{groupKey:r.modelValue.provider_id,value:r.modelValue.model}:void 0);function u(e){o(`update:modelValue`,{provider_id:e.groupKey,model:e.value})}return(t,n)=>(h(),f(V,{groups:c.value,"model-value":l.value,placeholder:a.value,compact:e.compact,"onUpdate:modelValue":u},null,8,[`groups`,`model-value`,`placeholder`,`compact`]))}}),G={key:0,class:`flex items-start gap-3`},K=[`title`],q={class:`flex-1 flex flex-col gap-0 min-w-0`},J={class:`font-mono truncate`},Y={class:`text-[10px] px-1 py-px rounded bg-muted/50 text-muted-foreground/50 shrink-0`},X={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`},Z={key:0,class:`flex items-center gap-1 pl-5 py-0.5`},te={class:`text-[9px] text-orange-400/50`},Q={key:0,class:`flex items-center gap-1.5 mt-1 pt-1.5 border-t border-dashed border-primary/10`},ne={class:`text-[10px] text-primary/30`},re={class:`font-mono text-xs text-primary/50`},ie={key:1,class:`space-y-1.5`},ae={key:0,class:`flex items-center gap-2`},oe={key:1,class:`flex items-center gap-2 px-2.5 py-1.5 rounded-md bg-muted/20 border border-border/50`},se={class:`font-mono text-sm font-medium text-foreground truncate`},ce={class:`flex items-center gap-2`},le={class:`flex-1`},$={key:0,class:`flex items-center gap-1 pl-8 py-0.5`},ue={class:`text-[9px] text-orange-400/50`},de={class:`pt-2 mt-1 border-t border-dashed border-primary/15 space-y-1.5`},fe={key:0,class:`flex items-center gap-2`},pe={class:`text-[10px] w-6 text-center px-1 py-0.5 rounded bg-primary/10 text-primary/70 shrink-0`},me={class:`flex-1`},he={key:1,class:`flex items-center gap-1.5`},ge=6,_e=m({__name:`MappingEntryEditor`,props:{entry:{},providerGroups:{},expanded:{type:Boolean},editable:{type:Boolean,default:!0},editableClientModel:{type:Boolean,default:!1}},emits:[`update:targets`,`update:clientModel`],setup(a,{emit:o}){let{t:m}=i(),v=a,T=o;function E(e){return v.providerGroups.find(t=>t.provider.id===e)?.provider.name??e.slice(0,ge)}function D(e,t){return v.providerGroups.find(t=>t.provider.id===e)?.models.find(e=>e.name===t)?.streamTimeoutMs}function O(){let e=v.providerGroups[0];T(`update:targets`,[...v.entry.targets,{backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``}])}function j(){let e=v.providerGroups[0];T(`update:targets`,v.entry.targets.map((t,n)=>n===0?{...t,overflow_provider_id:e?.provider.id??``,overflow_model:e?.models[0]?.name??``}:t))}function N(e){v.entry.targets.length<=1||T(`update:targets`,v.entry.targets.filter((t,n)=>n!==e))}function P(e,t){let n=[...v.entry.targets];n[e]={...n[e],provider_id:t.provider_id,backend_model:t.model},T(`update:targets`,n)}function F(e){T(`update:targets`,v.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(i,o)=>(h(),p(`div`,null,[a.expanded?(h(),p(`div`,ie,[a.editableClientModel?(h(),p(`div`,ae,[o[5]||=n(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0 w-6 text-center`},`Client`,-1),e(u(k),{"model-value":a.entry.clientModel,class:`h-7 flex-1 text-xs font-mono`,placeholder:u(m)(`providers.shared.clientModel`),"onUpdate:modelValue":o[0]||=e=>T(`update:clientModel`,String(e))},null,8,[`model-value`,`placeholder`])])):(h(),p(`div`,oe,[o[6]||=n(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0`},`Client`,-1),n(`span`,se,r(a.entry.clientModel),1)])),(h(!0),p(t,null,g(a.entry.targets,(t,i)=>(h(),p(`div`,{key:i},[n(`div`,ce,[n(`span`,{class:l([`text-xs font-medium shrink-0 w-6 text-center px-1 py-0.5 rounded`,i===0?`bg-primary/10 text-primary`:`bg-muted/30 text-muted-foreground`])},r(i===0?`①`:i===1?`②`:i===2?`③`:`${i+1}`),3),n(`div`,le,[e(W,{providers:a.providerGroups,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:u(m)(`providers.shared.selectModel`),"onUpdate:modelValue":e=>P(i,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),i>0&&a.entry.targets.length>1?(h(),f(u(_),{key:0,type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:e=>N(i)},{default:c(()=>[e(u(b),{class:`size-3`})]),_:1},8,[`onClick`])):d(``,!0)]),i<a.entry.targets.length-1?(h(),p(`div`,$,[o[7]||=n(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),n(`span`,ue,r(u(m)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),e(u(_),{type:`button`,variant:`ghost`,size:`sm`,class:`w-full text-xs text-muted-foreground/50`,onClick:O},{default:c(()=>[e(u(y),{class:`w-3 h-3 mr-1`}),s(` `+r(a.entry.targets.length===0?u(m)(`providers.shared.addMappingModel`):u(m)(`providers.shared.addFailover`)),1)]),_:1}),n(`div`,de,[a.entry.targets[0]?.overflow_model?(h(),p(`div`,fe,[n(`span`,pe,r(u(m)(`providers.shared.overflow`)),1),n(`div`,me,[e(W,{providers:a.providerGroups,"model-value":a.entry.targets[0]?.overflow_provider_id&&a.entry.targets[0]?.overflow_model?{provider_id:a.entry.targets[0].overflow_provider_id,model:a.entry.targets[0].overflow_model}:void 0,compact:``,placeholder:u(m)(`providers.shared.overflowPlaceholder`),"onUpdate:modelValue":o[1]||=e=>F(e)},null,8,[`providers`,`model-value`,`placeholder`])]),e(u(_),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:o[2]||=e=>F(void 0)},{default:c(()=>[e(u(b),{class:`size-3`})]),_:1})])):(h(),p(`div`,he,[e(u(_),{type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:j},{default:c(()=>[e(u(y),{class:`w-3 h-3 mr-1`}),s(` `+r(u(m)(`providers.shared.addOverflow`)),1)]),_:1}),e(u(S),{"delay-duration":200},{default:c(()=>[e(u(x),null,{default:c(()=>[e(u(w),{"as-child":``},{default:c(()=>[e(u(M),{class:`size-3 text-muted-foreground/30 cursor-help`})]),_:1}),e(u(C),{side:`top`,class:`max-w-[240px] text-xs`},{default:c(()=>[s(r(u(m)(`providers.shared.overflowTooltip`)),1)]),_:1})]),_:1})]),_:1})]))])])):(h(),p(`div`,G,[n(`span`,{class:`min-w-[90px] font-mono text-sm font-semibold text-foreground shrink-0 truncate`,title:a.entry.clientModel},r(a.entry.clientModel),9,K),e(u(A),{class:`size-3.5 mt-0.5 shrink-0 text-muted-foreground/30`}),n(`div`,q,[(h(!0),p(t,null,g(a.entry.targets,(t,i)=>(h(),p(`div`,{key:i},[n(`div`,{class:l([`flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm`,i===0?`bg-primary/10 border border-primary/20 text-primary`:`bg-muted/30 border border-border text-muted-foreground`])},[n(`span`,{class:l([`text-[10px] font-semibold w-3.5 text-center`,i===0?`text-primary`:`text-muted-foreground`])},r(i===0?`①`:i===1?`②`:i===2?`③`:`${i+1}`),3),n(`span`,J,r(t.backend_model),1),n(`span`,Y,r(E(t.provider_id)),1),D(t.provider_id,t.backend_model)?(h(),p(`span`,X,[e(u(ee),{class:`size-2.5`}),s(` `+r(Math.round(D(t.provider_id,t.backend_model)/1e3))+`s `,1)])):d(``,!0)],2),i<a.entry.targets.length-1?(h(),p(`div`,Z,[o[3]||=n(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),n(`span`,te,r(u(m)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),a.entry.targets[0]?.overflow_model?(h(),p(`div`,Q,[o[4]||=n(`span`,{class:`text-[10px] text-primary/40 w-3.5 text-center`},`⤵`,-1),n(`span`,ne,r(u(m)(`providers.shared.overflow`)),1),n(`span`,re,r(a.entry.targets[0].overflow_model),1)])):d(``,!0)])]))]))}});export{W as n,_e as t};
|
|
1
|
+
import{$ as e,G as t,J as n,Kt as r,L as i,Nt as a,P as o,Q as s,Tt as c,Ut as l,Vt as u,X as d,Y as f,Z as p,et as m,ft as h,mt as g,n as _,q as v}from"./button-C7HO6Dyb.js";import{n as y}from"./Switch-C9DeYAnK.js";import{t as b}from"./trash-2-D2SrfECO.js";import{i as x,n as S,r as C,t as w}from"./TooltipTrigger-Dr6kqGSH.js";import{_ as T,lt as E,v as D,y as O}from"./index-itL9--Q_.js";import{t as k}from"./Input-Ey_q_5_r.js";var A=o(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),j=o(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),M=o(`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`}]]),ee=o(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),N=[`onMouseenter`],P={class:`truncate max-w-40`},F={key:0,class:`ml-1 text-[10px] px-1 py-px rounded bg-emerald-500/15 text-emerald-400 shrink-0`},I=[`onMouseenter`],L=[`onClick`],R={class:`truncate`},z={key:0,class:`shrink-0 text-xs text-muted-foreground`},B={key:0,class:`px-2 py-1.5 text-sm text-muted-foreground`},V=m({__name:`CascadingSelect`,props:{groups:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(o,{emit:s}){let{t:m}=i(),_=o,y=v(()=>_.placeholder||m(`common.selectPlaceholder`)),b=s,x=a(!1),S=a(null),C=v(()=>{if(!_.modelValue)return``;let e=_.groups.find(e=>e.key===_.modelValue.groupKey);if(!e)return``;let t=e.options.find(e=>e.value===_.modelValue.value);return t?`${e.label} / ${t.label}`:``});function w(e,t){b(`update:modelValue`,{groupKey:e,value:t}),x.value=!1}function k(e){x.value=e,e||(S.value=null)}return(i,a)=>(h(),f(u(O),{open:x.value,"onUpdate:open":k},{default:c(()=>[e(u(T),{"as-child":``},{default:c(()=>[n(`div`,{class:l([`flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background cursor-pointer hover:bg-accent hover:text-accent-foreground`,[o.compact?`h-8 text-xs px-2.5 py-1`:`h-10 text-sm px-3 py-2`,{"ring-2 ring-ring ring-offset-2":x.value}]])},[n(`span`,{class:l([`truncate`,o.modelValue?`text-foreground`:`text-muted-foreground`])},r(C.value||y.value),3),e(u(E),{class:`h-4 w-4 shrink-0 opacity-50`})],2)]),_:1}),e(u(D),{align:`start`,"side-offset":4,class:`z-[200] w-auto min-w-56 overflow-visible p-1`},{default:c(()=>[(h(!0),p(t,null,g(o.groups,i=>(h(),p(`div`,{key:i.key,class:l([`relative flex cursor-pointer items-center justify-between rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground z-10":S.value===i.key}]),onMouseenter:e=>S.value=i.key},[n(`span`,P,r(i.label),1),i.badge?(h(),p(`span`,F,r(i.badge),1)):d(``,!0),e(u(j),{class:`ml-1 h-4 w-4 shrink-0 opacity-50`}),S.value===i.key&&i.options.length>0?(h(),p(`div`,{key:1,class:`absolute left-full top-0 ml-0.5 min-w-48 rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,onMouseenter:e=>S.value=i.key},[(h(!0),p(t,null,g(i.options,e=>(h(),p(`div`,{key:e.value,class:l([`flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground`,{"bg-accent text-accent-foreground":o.modelValue?.groupKey===i.key&&o.modelValue?.value===e.value}]),onClick:t=>w(i.key,e.value)},[n(`span`,R,r(e.label),1),e.tag?(h(),p(`span`,z,r(e.tag),1)):d(``,!0)],10,L))),128))],40,I)):d(``,!0)],42,N))),128)),o.groups.length===0?(h(),p(`div`,B,r(u(m)(`common.noOptions`)),1)):d(``,!0)]),_:1})]),_:1},8,[`open`]))}}),H=1e6,U=1e3,W=m({__name:`CascadingModelSelect`,props:{providers:{},modelValue:{},placeholder:{default:``},compact:{type:Boolean}},emits:[`update:modelValue`],setup(e,{emit:t}){let{t:n}=i(),r=e,a=v(()=>r.placeholder||n(`mappings.selectProviderModel`)),o=t;function s(e){return e>=H?`${e/H}M`:`${e/U}K`}let c=v(()=>r.providers.map(e=>({key:e.provider.id,label:e.provider.name,badge:e.isNew?n(`common.new`):void 0,options:e.models.map(e=>({value:e.name,label:e.name,tag:s(e.contextWindow)}))}))),l=v(()=>r.modelValue?{groupKey:r.modelValue.provider_id,value:r.modelValue.model}:void 0);function u(e){o(`update:modelValue`,{provider_id:e.groupKey,model:e.value})}return(t,n)=>(h(),f(V,{groups:c.value,"model-value":l.value,placeholder:a.value,compact:e.compact,"onUpdate:modelValue":u},null,8,[`groups`,`model-value`,`placeholder`,`compact`]))}}),G={key:0,class:`flex items-start gap-3`},K=[`title`],q={class:`flex-1 flex flex-col gap-0 min-w-0`},J={class:`font-mono truncate`},Y={class:`text-[10px] px-1 py-px rounded bg-muted/50 text-muted-foreground/50 shrink-0`},X={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`},Z={key:0,class:`flex items-center gap-1 pl-5 py-0.5`},te={class:`text-[9px] text-orange-400/50`},Q={key:0,class:`flex items-center gap-1.5 mt-1 pt-1.5 border-t border-dashed border-primary/10`},ne={class:`text-[10px] text-primary/30`},re={class:`font-mono text-xs text-primary/50`},ie={key:1,class:`space-y-1.5`},ae={key:0,class:`flex items-center gap-2`},oe={key:1,class:`flex items-center gap-2 px-2.5 py-1.5 rounded-md bg-muted/20 border border-border/50`},se={class:`font-mono text-sm font-medium text-foreground truncate`},ce={class:`flex items-center gap-2`},le={class:`flex-1`},$={key:0,class:`flex items-center gap-1 pl-8 py-0.5`},ue={class:`text-[9px] text-orange-400/50`},de={class:`pt-2 mt-1 border-t border-dashed border-primary/15 space-y-1.5`},fe={key:0,class:`flex items-center gap-2`},pe={class:`text-[10px] w-6 text-center px-1 py-0.5 rounded bg-primary/10 text-primary/70 shrink-0`},me={class:`flex-1`},he={key:1,class:`flex items-center gap-1.5`},ge=6,_e=m({__name:`MappingEntryEditor`,props:{entry:{},providerGroups:{},expanded:{type:Boolean},editable:{type:Boolean,default:!0},editableClientModel:{type:Boolean,default:!1}},emits:[`update:targets`,`update:clientModel`],setup(a,{emit:o}){let{t:m}=i(),v=a,T=o;function E(e){return v.providerGroups.find(t=>t.provider.id===e)?.provider.name??e.slice(0,ge)}function D(e,t){return v.providerGroups.find(t=>t.provider.id===e)?.models.find(e=>e.name===t)?.streamTimeoutMs}function O(){let e=v.providerGroups[0];T(`update:targets`,[...v.entry.targets,{backend_model:e?.models[0]?.name??``,provider_id:e?.provider.id??``}])}function j(){let e=v.providerGroups[0];T(`update:targets`,v.entry.targets.map((t,n)=>n===0?{...t,overflow_provider_id:e?.provider.id??``,overflow_model:e?.models[0]?.name??``}:t))}function N(e){v.entry.targets.length<=1||T(`update:targets`,v.entry.targets.filter((t,n)=>n!==e))}function P(e,t){let n=[...v.entry.targets];n[e]={...n[e],provider_id:t.provider_id,backend_model:t.model},T(`update:targets`,n)}function F(e){T(`update:targets`,v.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(i,o)=>(h(),p(`div`,null,[a.expanded?(h(),p(`div`,ie,[a.editableClientModel?(h(),p(`div`,ae,[o[5]||=n(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0 w-6 text-center`},`Client`,-1),e(u(k),{"model-value":a.entry.clientModel,class:`h-7 flex-1 text-xs font-mono`,placeholder:u(m)(`providers.shared.clientModel`),"onUpdate:modelValue":o[0]||=e=>T(`update:clientModel`,String(e))},null,8,[`model-value`,`placeholder`])])):(h(),p(`div`,oe,[o[6]||=n(`span`,{class:`text-[10px] text-muted-foreground/60 shrink-0`},`Client`,-1),n(`span`,se,r(a.entry.clientModel),1)])),(h(!0),p(t,null,g(a.entry.targets,(t,i)=>(h(),p(`div`,{key:i},[n(`div`,ce,[n(`span`,{class:l([`text-xs font-medium shrink-0 w-6 text-center px-1 py-0.5 rounded`,i===0?`bg-primary/10 text-primary`:`bg-muted/30 text-muted-foreground`])},r(i===0?`①`:i===1?`②`:i===2?`③`:`${i+1}`),3),n(`div`,le,[e(W,{providers:a.providerGroups,"model-value":{provider_id:t.provider_id,model:t.backend_model},compact:``,placeholder:u(m)(`providers.shared.selectModel`),"onUpdate:modelValue":e=>P(i,e)},null,8,[`providers`,`model-value`,`placeholder`,`onUpdate:modelValue`])]),i>0&&a.entry.targets.length>1?(h(),f(u(_),{key:0,type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:e=>N(i)},{default:c(()=>[e(u(b),{class:`size-3`})]),_:1},8,[`onClick`])):d(``,!0)]),i<a.entry.targets.length-1?(h(),p(`div`,$,[o[7]||=n(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),n(`span`,ue,r(u(m)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),e(u(_),{type:`button`,variant:`ghost`,size:`sm`,class:`w-full text-xs text-muted-foreground/50`,onClick:O},{default:c(()=>[e(u(y),{class:`w-3 h-3 mr-1`}),s(` `+r(a.entry.targets.length===0?u(m)(`providers.shared.addMappingModel`):u(m)(`providers.shared.addFailover`)),1)]),_:1}),n(`div`,de,[a.entry.targets[0]?.overflow_model?(h(),p(`div`,fe,[n(`span`,pe,r(u(m)(`providers.shared.overflow`)),1),n(`div`,me,[e(W,{providers:a.providerGroups,"model-value":a.entry.targets[0]?.overflow_provider_id&&a.entry.targets[0]?.overflow_model?{provider_id:a.entry.targets[0].overflow_provider_id,model:a.entry.targets[0].overflow_model}:void 0,compact:``,placeholder:u(m)(`providers.shared.overflowPlaceholder`),"onUpdate:modelValue":o[1]||=e=>F(e)},null,8,[`providers`,`model-value`,`placeholder`])]),e(u(_),{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground/40 hover:text-destructive`,onClick:o[2]||=e=>F(void 0)},{default:c(()=>[e(u(b),{class:`size-3`})]),_:1})])):(h(),p(`div`,he,[e(u(_),{type:`button`,variant:`ghost`,size:`sm`,class:`text-xs text-muted-foreground/50`,onClick:j},{default:c(()=>[e(u(y),{class:`w-3 h-3 mr-1`}),s(` `+r(u(m)(`providers.shared.addOverflow`)),1)]),_:1}),e(u(S),{"delay-duration":200},{default:c(()=>[e(u(x),null,{default:c(()=>[e(u(w),{"as-child":``},{default:c(()=>[e(u(M),{class:`size-3 text-muted-foreground/30 cursor-help`})]),_:1}),e(u(C),{side:`top`,class:`max-w-[240px] text-xs`},{default:c(()=>[s(r(u(m)(`providers.shared.overflowTooltip`)),1)]),_:1})]),_:1})]),_:1})]))])])):(h(),p(`div`,G,[n(`span`,{class:`min-w-[90px] font-mono text-sm font-semibold text-foreground shrink-0 truncate`,title:a.entry.clientModel},r(a.entry.clientModel),9,K),e(u(A),{class:`size-3.5 mt-0.5 shrink-0 text-muted-foreground/30`}),n(`div`,q,[(h(!0),p(t,null,g(a.entry.targets,(t,i)=>(h(),p(`div`,{key:i},[n(`div`,{class:l([`flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm`,i===0?`bg-primary/10 border border-primary/20 text-primary`:`bg-muted/30 border border-border text-muted-foreground`])},[n(`span`,{class:l([`text-[10px] font-semibold w-3.5 text-center`,i===0?`text-primary`:`text-muted-foreground`])},r(i===0?`①`:i===1?`②`:i===2?`③`:`${i+1}`),3),n(`span`,J,r(t.backend_model),1),n(`span`,Y,r(E(t.provider_id)),1),D(t.provider_id,t.backend_model)?(h(),p(`span`,X,[e(u(ee),{class:`size-2.5`}),s(` `+r(Math.round(D(t.provider_id,t.backend_model)/1e3))+`s `,1)])):d(``,!0)],2),i<a.entry.targets.length-1?(h(),p(`div`,Z,[o[3]||=n(`div`,{class:`w-px h-1.5 bg-orange-400/30`},null,-1),n(`span`,te,r(u(m)(`providers.shared.switchOnFail`)),1)])):d(``,!0)]))),128)),a.entry.targets[0]?.overflow_model?(h(),p(`div`,Q,[o[4]||=n(`span`,{class:`text-[10px] text-primary/40 w-3.5 text-center`},`⤵`,-1),n(`span`,ne,r(u(m)(`providers.shared.overflow`)),1),n(`span`,re,r(a.entry.targets[0].overflow_model),1)])):d(``,!0)])]))]))}});export{W as n,_e as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,G as t,J as n,Kt as r,L as i,Nt as a,Q as o,Tt as s,Ut as c,Vt as l,X as u,Y as d,Z as f,et as p,ft as m,mt as h,n as g,q as _,r as v}from"./button-
|
|
1
|
+
import{$ as e,G as t,J as n,Kt as r,L as i,Nt as a,Q as o,Tt as s,Ut as c,Vt as l,X as u,Y as d,Z as f,et as p,ft as m,mt as h,n as g,q as _,r as v}from"./button-C7HO6Dyb.js";import{t as y}from"./trash-2-D2SrfECO.js";import{n as b,t as x}from"./CollapsibleContent-BTVazeoQ.js";import{f as S,g as C,h as w,lt as T,m as E,p as D}from"./index-itL9--Q_.js";import{t as O}from"./Input-Ey_q_5_r.js";var k=[{id:`claude-code`,name:`Claude Code`,icon:`C`,iconClass:`cc`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.claudeCodeDesc`},{id:`pi`,name:`Pi`,icon:`P`,iconClass:`pi`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.piDesc`},{id:`openai-sdk`,name:`OpenAI SDK`,icon:`OA`,iconClass:`oa`,format:`openai`,defaultProvider:`DeepSeek`,defaultPlan:`OpenAI`,descriptionKey:`quickSetup.client.openaiSdkDesc`},{id:`anthropic-sdk`,name:`Anthropic SDK`,icon:`AN`,iconClass:`an`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.anthropicSdkDesc`}],A=[{key:`deepseek_anthropic`,labelKey:`quickSetup.patch.deepseekAnthropic`,items:[{id:`thinking-consistency`,nameKey:`quickSetup.patch.thinkingConsistency`,descKey:`quickSetup.patch.thinkingConsistencyDesc`},{id:`orphan-tool-results`,nameKey:`quickSetup.patch.orphanToolResult`,descKey:`quickSetup.patch.orphanToolResultDesc`}]},{key:`deepseek_openai`,labelKey:`quickSetup.patch.deepseekOpenai`,items:[{id:`thinking-consistency`,nameKey:`quickSetup.patch.thinkingConsistency`,descKey:`quickSetup.patch.thinkingConsistencyDesc`},{id:`orphan-tool-results-oa`,nameKey:`quickSetup.patch.orphanToolResultOa`,descKey:`quickSetup.patch.orphanToolResultOaDesc`}]},{key:`general`,labelKey:`quickSetup.patch.general`,items:[{id:`developer-role`,nameKey:`quickSetup.patch.developerRole`,descKey:`quickSetup.patch.developerRoleDesc`}]}],j=[{label:`8K`,value:8e3},{label:`16K`,value:16e3},{label:`32K`,value:32e3},{label:`64K`,value:64e3},{label:`128K`,value:128e3},{label:`160K`,value:16e4},{label:`200K`,value:2e5},{label:`256K`,value:256e3},{label:`1M`,value:1e6}],M=1e6,N=256e3,P=2e5,F=128e3,I=32e3,L=16e3,R=8e3;function z(e){let t=e.toLowerCase();return t.includes(`v4`)||t.includes(`v3.2`)||t.includes(`r1`)||t.includes(`reasoner`)||t.includes(`qwen3.6`)?M:t.includes(`kimi`)||t.includes(`moonshotai`)||t.includes(`hunyuan-2.0`)||t.includes(`hunyuan-a13b`)||t.includes(`hunyuan-t1`)||t.includes(`step-3.5`)||t.includes(`step-3`)||t.includes(`qwen3.5-plus`)||t.includes(`qwen3-max`)||t.includes(`doubao`)||t.includes(`ark-code`)||t.includes(`tc-code`)?N:t.includes(`glm-5`)||t.includes(`glm-4.7`)||t.includes(`minimax`)?P:t.includes(`128k`)?F:t.includes(`32k`)?I:t.includes(`16k`)?L:t.includes(`8k`)?R:F}var B={"claude-code":[`sonnet`,`opus`,`haiku`],"openai-sdk":[`gpt-5.1`,`gpt-4.1`,`o3`,`o4-mini`],"anthropic-sdk":[`claude-sonnet-4-20250514`,`claude-opus-4-20250116`,`claude-haiku-4-20250414`]},V={class:`space-y-3`},H={class:`mb-1.5 text-xs font-medium text-[var(--muted-foreground)]`},U={class:`flex flex-wrap gap-1.5`},W=[`title`,`onClick`],G=p({__name:`PatchChips`,props:{apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean},modelValue:{}},emits:[`update:modelValue`],setup(e,{emit:a}){let{t:s}=i(),u=e,d=a,p=_(()=>A.filter(e=>e.key===`deepseek_anthropic`?u.isDeepSeek&&u.apiType===`anthropic`:e.key===`deepseek_openai`?u.isDeepSeek&&u.apiType===`openai`:e.key===`general`?u.apiType===`openai`&&u.isNonOpenaiEndpoint:!0));function g(e){d(`update:modelValue`,u.modelValue.includes(e)?u.modelValue.filter(t=>t!==e):[...u.modelValue,e])}function y(e){return u.modelValue.includes(e)}return(e,i)=>(m(),f(`div`,V,[(m(!0),f(t,null,h(p.value,e=>(m(),f(`div`,{key:e.key},[n(`p`,H,r(l(s)(e.labelKey)),1),n(`div`,U,[(m(!0),f(t,null,h(e.items,e=>(m(),f(`button`,{key:e.id,type:`button`,title:l(s)(e.descKey),class:c(l(v)(`inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs font-medium transition-all cursor-pointer select-none`,y(e.id)?`border-[var(--ring)] bg-[var(--primary)]/10 text-[var(--primary)]`:`border-[var(--border)] bg-transparent text-[var(--muted-foreground)] hover:border-[var(--muted-foreground)] hover:text-[var(--foreground)]`)),onClick:t=>g(e.id)},[n(`span`,{class:c(l(v)(`size-1.5 rounded-full transition-colors`,y(e.id)?`bg-[var(--primary)]`:`bg-[var(--border)]`))},null,2),o(` `+r(l(s)(e.nameKey)),1)],10,W))),128))])]))),128))]))}}),K={class:`rounded-lg border border-border bg-card px-3 py-2.5 transition-colors`},q={class:`flex items-center gap-2`},J=[`title`],Y={class:`flex items-center gap-1 shrink-0`},X=1e6,Z=1e3,Q=p({__name:`ModelCard`,props:{model:{},apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean}},emits:[`update:model`,`remove`],setup(p,{emit:k}){let{t:A}=i(),M=p,N=k,P=a(!1),F=_(()=>j.find(e=>e.value===M.model.contextWindow)),I=_(()=>!!F.value);function L(e){let t=e;if(t===`__custom__`)return;let n=parseInt(t,10);isNaN(n)||N(`update:model`,{...M.model,contextWindow:n})}function R(e){let t=parseInt(e,10);!isNaN(t)&&t>0&&N(`update:model`,{...M.model,contextWindow:t})}function z(e){N(`update:model`,{...M.model,patches:e})}function B(e){return e>=X?`${e/X}M`:e>=Z?`${e/Z}K`:`${e}`}return(i,a)=>(m(),f(`div`,K,[n(`div`,q,[n(`span`,{class:`truncate text-xs font-medium text-foreground min-w-0 flex-1`,title:p.model.name},r(p.model.name),9,J),n(`div`,Y,[e(l(C),{"model-value":I.value?String(p.model.contextWindow):`__custom__`,"onUpdate:modelValue":L},{default:s(()=>[e(l(D),{class:`h-7 w-[72px] text-xs`},{default:s(()=>[e(l(S),null,{default:s(()=>[o(r(I.value?F.value.label:B(p.model.contextWindow)),1)]),_:1})]),_:1}),e(l(w),null,{default:s(()=>[(m(!0),f(t,null,h(l(j),e=>(m(),d(l(E),{key:e.value,value:String(e.value)},{default:s(()=>[o(r(e.label),1)]),_:2},1032,[`value`]))),128)),e(l(E),{value:`__custom__`},{default:s(()=>[o(r(l(A)(`quickSetup.model.contextCustom`)),1)]),_:1})]),_:1})]),_:1},8,[`model-value`]),I.value?u(``,!0):(m(),d(l(O),{key:0,"model-value":String(p.model.contextWindow),type:`number`,min:`1`,class:`h-7 w-20 text-xs text-right [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,"onUpdate:modelValue":a[0]||=e=>R(e)},null,8,[`model-value`]))]),n(`button`,{type:`button`,class:`inline-flex items-center gap-0.5 text-[10px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer select-none shrink-0`,onClick:a[1]||=e=>P.value=!P.value},[e(l(T),{class:c(l(v)(`size-3 transition-transform`,P.value?`rotate-0`:`-rotate-90`))},null,8,[`class`]),o(` `+r(p.model.patches.length>0?p.model.patches.length:``),1)]),e(l(g),{variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground hover:text-destructive shrink-0`,onClick:a[2]||=e=>i.$emit(`remove`)},{default:s(()=>[e(l(y),{class:`size-3`})]),_:1})]),e(l(b),{open:P.value,"onUpdate:open":a[3]||=e=>P.value=e},{default:s(()=>[e(l(x),{class:`pt-1.5`},{default:s(()=>[e(G,{"api-type":p.apiType,"is-deep-seek":p.isDeepSeek,"is-non-openai-endpoint":p.isNonOpenaiEndpoint,"model-value":p.model.patches,"onUpdate:modelValue":z},null,8,[`api-type`,`is-deep-seek`,`is-non-openai-endpoint`,`model-value`])]),_:1})]),_:1},8,[`open`])]))}});export{z as i,k as n,B as r,Q as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,G as n,J as r,Kt as i,L as a,Nt as o,Q as s,St as c,Tt as l,Ut as u,Vt as d,W as f,X as p,Y as m,Z as h,et as g,ft as _,k as v,mt as y,n as b,q as x,ut as S}from"./button-
|
|
1
|
+
import{$ as e,A as t,G as n,J as r,Kt as i,L as a,Nt as o,Q as s,St as c,Tt as l,Ut as u,Vt as d,W as f,X as p,Y as m,Z as h,et as g,ft as _,k as v,mt as y,n as b,q as x,ut as S}from"./button-C7HO6Dyb.js";import{t as C}from"./MappingEntryEditor-C9pgNL0Q.js";import{n as w,t as T}from"./Switch-C9DeYAnK.js";import{t as E}from"./trash-2-D2SrfECO.js";import{a as D,c as O,d as k,i as A,l as j,o as M,r as N,s as P}from"./index-itL9--Q_.js";import"./constants-yM0YwP2s.js";var F={class:`flex-1 min-w-0`},I={class:`flex flex-col items-end gap-1.5 shrink-0 pt-0.5`},L={class:`flex items-center gap-2`},R={key:0,class:`text-[10px] px-1.5 py-0.5 rounded border border-orange-400/30 text-orange-400/60`},z={key:0,class:`flex items-center justify-end gap-2 px-4 py-2 border-t border-border/50`},B=g({__name:`ModelMappingCard`,props:{entry:{},providerGroups:{},editableClientModel:{type:Boolean},defaultExpanded:{type:Boolean,default:!1}},emits:[`saved`,`deleted`,`cancel-add`],setup(g,{emit:y}){let{t:S}=a(),w=g,B=y,V=o(``);c(()=>w.entry.clientModel,e=>{V.value=e},{immediate:!0});let H=o(w.defaultExpanded),U=o([]),W=o(!1),G=o(!1);c(H,e=>{e&&(U.value=w.entry.targets.map(e=>({...e})))}),c(()=>w.entry.targets,e=>{H.value&&(U.value=e.map(e=>({...e})))},{deep:!0});let K=x(()=>H.value?{...w.entry,targets:U.value}:w.entry);function q(e){U.value=e}function J(e){V.value=e}async function Y(){W.value=!0;try{let e=w.editableClientModel?V.value.trim():w.entry.clientModel;if(!e)return;let t=JSON.stringify({targets:U.value});w.entry.existingId?await v.updateMappingGroup(w.entry.existingId,{client_model:e,rule:t}):await v.createMappingGroup({client_model:e,rule:t}),H.value=!1,B(`saved`),N.success(S(`common.saveSuccess`))}catch(e){console.error(`mappingCard.save:`,e),N.error(t(e,S(`mappings.messages.saveFailed`)))}finally{W.value=!1}}function X(){w.editableClientModel?B(`cancel-add`):H.value=!1}async function Z(){try{w.entry.existingId&&await v.toggleMappingGroup(w.entry.existingId),B(`saved`)}catch(e){console.error(`mappingCard.toggle:`,e),N.error(t(e,S(`mappings.messages.toggleFailed`)))}}function Q(){G.value=!1,B(`deleted`,w.entry.clientModel)}return(t,a)=>(_(),h(n,null,[r(`div`,{class:u([`rounded-lg border transition-colors`,H.value?`border-primary/30 shadow-sm shadow-primary/5`:`border-border hover:border-border/80`])},[r(`div`,{class:u([`flex items-start gap-2 px-4 py-3`,{"cursor-pointer":!H.value}]),onClick:a[2]||=e=>!H.value&&(H.value=!0)},[r(`div`,F,[e(C,{entry:K.value,"provider-groups":g.providerGroups,expanded:H.value,editable:!0,"editable-client-model":g.editableClientModel,"onUpdate:targets":q,"onUpdate:clientModel":J},null,8,[`entry`,`provider-groups`,`expanded`,`editable-client-model`])]),r(`div`,I,[r(`div`,L,[g.entry.targets.length>1?(_(),h(`span`,R,i(d(S)(`providers.shared.level`,{count:g.entry.targets.length})),1)):p(``,!0),g.editableClientModel?p(``,!0):(_(),m(d(b),{key:1,variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground/40 hover:text-destructive`,onClick:a[0]||=f(e=>G.value=!0,[`stop`])},{default:l(()=>[e(d(E),{class:`size-3`})]),_:1})),g.editableClientModel?p(``,!0):(_(),m(d(T),{key:2,"model-value":g.entry.active,"onUpdate:modelValue":Z,class:`scale-75`,onClick:a[1]||=f(()=>{},[`stop`])},null,8,[`model-value`]))])])],2),H.value?(_(),h(`div`,z,[e(d(b),{size:`sm`,variant:`outline`,onClick:X},{default:l(()=>[s(i(d(S)(`common.cancel`)),1)]),_:1}),e(d(b),{size:`sm`,disabled:W.value,onClick:Y},{default:l(()=>[s(i(W.value?d(S)(`common.saving`):d(S)(`common.save`)),1)]),_:1},8,[`disabled`])])):p(``,!0)],2),e(d(k),{open:G.value,"onUpdate:open":a[3]||=e=>{e||(G.value=!1)}},{default:l(()=>[e(d(O),null,{default:l(()=>[e(d(D),null,{default:l(()=>[e(d(A),null,{default:l(()=>[s(i(d(S)(`common.confirmDelete`)),1)]),_:1}),e(d(P),null,{default:l(()=>[s(i(d(S)(`mappings.confirmDeleteDesc`,{model:g.entry.clientModel})),1)]),_:1})]),_:1}),e(d(M),null,{default:l(()=>[e(d(j),null,{default:l(()=>[s(i(d(S)(`common.cancel`)),1)]),_:1}),e(d(b),{variant:`destructive`,onClick:Q},{default:l(()=>[s(i(d(S)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),V={class:`p-6 space-y-3`},H={class:`flex items-center justify-between`},U={class:`text-lg font-semibold text-foreground`},W={class:`flex gap-2 mt-1`},G={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},K={class:`text-[11px] px-2 py-0.5 rounded-full bg-muted/40 text-muted-foreground`},q={class:`grid grid-cols-3 gap-3`},J={key:0,class:`py-8 text-center text-xs text-muted-foreground`},Y=g({__name:`ModelMappings`,setup(c){let{t:u}=a(),f=o([]),g=o([]),C=o([]),T=o(!1),E=x(()=>C.value.filter(e=>e.active).length),D=x(()=>g.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=x(()=>({clientModel:``,targets:[{backend_model:``,provider_id:g.value[0]?.id??``}],existing:!1,tag:`cust`,active:!0}));function k(){return f.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),N.error(t(e,u(`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}));return{clientModel:e.client_model,targets:r.length>0?r:[{backend_model:``,provider_id:g.value[0]?.id??``}],existing:!0,existingId:e.id,tag:`existing`,active:!!e.is_active,originalActive:!!e.is_active}})}async function A(){let e=await Promise.allSettled([v.getMappingGroups(),v.getProviders()]);e[0].status===`fulfilled`&&(f.value=e[0].value),e[1].status===`fulfilled`&&(g.value=e[1].value),C.value=k()}function j(){T.value=!1,A()}async function M(e){let n=C.value.find(t=>t.clientModel===e);if(n?.existingId)try{await v.deleteMappingGroup(n.existingId),await A(),N.success(u(`common.saveSuccess`))}catch(n){console.error(`modelMappings.deleteAndSave:`,n),N.error(t(n,u(`mappings.messages.deleteFailed`,{model:e})))}}return S(A),(t,a)=>(_(),h(`div`,V,[r(`div`,H,[r(`div`,null,[r(`h2`,U,i(d(u)(`mappings.title`)),1),r(`div`,W,[r(`span`,G,i(d(u)(`mappings.totalMappings`,{count:C.value.length})),1),r(`span`,K,i(d(u)(`mappings.enabledCount`,{count:E.value})),1)])]),T.value?p(``,!0):(_(),m(d(b),{key:0,size:`sm`,variant:`outline`,onClick:a[0]||=e=>T.value=!0},{default:l(()=>[e(d(w),{class:`w-3.5 h-3.5 mr-1`}),s(` `+i(d(u)(`providers.shared.add`)),1)]),_:1}))]),r(`div`,q,[(_(!0),h(n,null,y(C.value,e=>(_(),m(B,{key:e.clientModel,entry:e,"provider-groups":D.value,onSaved:A,onDeleted:M},null,8,[`entry`,`provider-groups`]))),128)),T.value?(_(),m(B,{key:0,entry:O.value,"provider-groups":D.value,"editable-client-model":!0,"default-expanded":!0,onSaved:j,onCancelAdd:a[1]||=e=>T.value=!1},null,8,[`entry`,`provider-groups`])):p(``,!0)]),C.value.length===0&&!T.value?(_(),h(`p`,J,i(d(u)(`providers.shared.noMappings`)),1)):p(``,!0)]))}});export{Y as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,Bt as n,Ft as r,G as i,Gt as a,J as o,Kt as s,L as c,Nt as l,Q as u,St as d,Tt as f,Ut as p,Vt as m,W as h,X as g,Y as _,Z as v,dt as ee,et as y,ft as b,k as x,kt as S,mt as C,n as w,q as T,ut as E}from"./button-C1QSPeLI.js";import{n as D,t as O}from"./UnifiedRequestDialog-DYS5gkoE.js";import{t as k}from"./copy-Cv_Emnxv.js";import{i as A,n as j,r as M,t as N}from"./TooltipTrigger-DOgXsxyY.js";import{c as P,d as te,f as ne,l as re,s as F,u as I}from"./dialog-BBGI9zKO.js";import{a as ie,b as L,c as ae,d as oe,gt as R,i as se,it as ce,l as le,o as ue,r as de,s as fe,u as pe,ut as me}from"./index-247t8K8M.js";import{n as z,t as B}from"./CardContent-D8q9vc5O.js";import{n as V,t as H}from"./CardTitle-yA_25649.js";import{t as he}from"./useClipboard-Bd3JzV3b.js";var ge={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},U={class:`text-sm text-muted-foreground`},W={class:`text-2xl font-bold text-foreground mt-1`},_e={class:`text-xs text-muted-foreground mt-1`},ve={class:`text-sm text-muted-foreground`},G={class:`text-2xl font-bold text-foreground mt-1`},ye={class:`text-xs text-muted-foreground mt-1`},be={class:`text-sm text-muted-foreground`},xe={class:`text-2xl font-bold text-foreground mt-1`},Se={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`},Ce=y({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(t){let{t:n}=c(),r=t,i=T(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.errorCount/r.stats.totalRequests*100).toFixed(1)),a=T(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.retryCount/r.stats.totalRequests*100).toFixed(1)),l=T(()=>r.stats?r.stats.p50LatencyMs.toFixed(0):`--`);return(r,c)=>(b(),v(`div`,ge,[e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,U,s(m(n)(`monitor.header.activeRequests`)),1),o(`p`,W,s(t.activeCount),1),o(`p`,_e,s(m(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,ve,s(m(n)(`monitor.header.errorRate`)),1),o(`p`,G,s(i.value)+`%`,1),o(`p`,ye,s(t.stats?.errorCount??0)+` / `+s(t.stats?.totalRequests??0),1)]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,be,s(m(n)(`monitor.header.p50Latency`)),1),o(`p`,xe,s(l.value)+`ms`,1),o(`p`,Se,s(m(n)(`monitor.header.avgLatency`,{value:t.stats?.avgLatencyMs?.toFixed(0)??`--`})),1)]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,K,s(m(n)(`monitor.header.retryRate`)),1),o(`p`,q,s(a.value)+`%`,1),o(`p`,J,s(t.stats?.retryCount??0)+` / `+s(t.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),Y={class:`space-y-3`},X={key:0,class:`text-sm text-muted-foreground`},we={class:`flex items-center justify-between text-sm`},Te={class:`font-medium text-foreground`},Z={class:`text-muted-foreground`},Q={class:`text-xs`},Ee={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},$={key:1,class:`flex gap-3 text-xs text-muted-foreground`},De=y({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){let{t}=c();function n(e){return e.adaptiveLimit??e.maxConcurrency}function r(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(c,l)=>(b(),v(`div`,Y,[e.providers.length===0?(b(),v(`div`,X,s(m(t)(`monitor.concurrencyPanel.noData`)),1)):g(``,!0),(b(!0),v(i,null,C(e.providers,e=>(b(),v(`div`,{key:e.providerId,class:`space-y-1`},[o(`div`,we,[o(`span`,Te,s(e.providerName),1),o(`span`,Z,[e.adaptiveEnabled?(b(),v(i,{key:0},[u(s(e.active)+` / `+s(e.adaptiveLimit??e.maxConcurrency)+` `,1),o(`span`,Q,`(`+s(m(t)(`monitor.concurrencyPanel.adaptive`))+`)`,1)],64)):e.maxConcurrency===0?(b(),v(i,{key:1},[u(s(m(t)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(b(),v(i,{key:2},[u(s(e.active)+` / `+s(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(b(),v(`div`,Ee,[o(`div`,{class:p([`h-full rounded-full transition-all duration-300`,r(e.active,n(e))]),style:a({width:`${Math.min(100,e.active/n(e)*100)}%`})},null,6)])):g(``,!0),e.maxConcurrency>0?(b(),v(`div`,$,[o(`span`,null,s(m(t)(`monitor.concurrencyPanel.queued`,{count:e.queued})),1),o(`span`,null,s(m(t)(`monitor.concurrencyPanel.queueLimit`,{limit:e.adaptiveLimit??e.maxQueueSize})),1)])):g(``,!0)]))),128))]))}}),Oe={key:0,class:`text-sm text-muted-foreground`},ke={key:1,class:`grid grid-cols-2 gap-3 text-sm`},Ae={class:`text-muted-foreground`},je={class:`font-medium text-foreground`},Me={class:`text-muted-foreground`},Ne={class:`font-medium text-foreground`},Pe={class:`col-span-2`},Fe={class:`flex items-center justify-between`},Ie={class:`text-muted-foreground`},Le={class:`text-muted-foreground`},Re={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},ze={class:`text-muted-foreground`},Be={class:`font-medium text-foreground`},Ve={class:`text-muted-foreground`},He={class:`font-medium text-foreground`},Ue={class:`col-span-2`},We={class:`text-muted-foreground`},Ge={class:`font-medium text-foreground`},Ke=y({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let{t}=c(),n=e,r=T(()=>!n.runtime||n.runtime.memoryUsage.heapTotal===0?0:Math.min(100,n.runtime.memoryUsage.heapUsed/n.runtime.memoryUsage.heapTotal*100));function i(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function l(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(n,c)=>e.runtime?(b(),v(`div`,ke,[o(`div`,null,[o(`p`,Ae,s(m(t)(`monitor.runtimePanel.uptime`)),1),o(`p`,je,s(i(e.runtime.uptimeMs)),1)]),o(`div`,null,[o(`p`,Me,s(m(t)(`monitor.runtimePanel.memoryRss`)),1),o(`p`,Ne,s(l(e.runtime.memoryUsage.rss)),1)]),o(`div`,Pe,[o(`div`,Fe,[o(`p`,Ie,s(m(t)(`monitor.runtimePanel.heapUsage`)),1),o(`p`,Le,s(l(e.runtime.memoryUsage.heapUsed))+` / `+s(l(e.runtime.memoryUsage.heapTotal)),1)]),o(`div`,Re,[o(`div`,{class:`h-full bg-primary rounded-full transition-all duration-300`,style:a({width:`${r.value}%`})},null,4)])]),o(`div`,null,[o(`p`,ze,s(m(t)(`monitor.runtimePanel.activeHandles`)),1),o(`p`,Be,s(e.runtime.activeHandles),1)]),o(`div`,null,[o(`p`,Ve,s(m(t)(`monitor.runtimePanel.activeRequests`)),1),o(`p`,He,s(e.runtime.activeRequests),1)]),o(`div`,Ue,[o(`p`,We,s(m(t)(`monitor.runtimePanel.eventLoopDelay`)),1),o(`p`,Ge,s(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(b(),v(`div`,Oe,s(m(t)(`monitor.runtimePanel.noData`)),1))}}),qe={key:0,class:`text-sm text-muted-foreground`},Je={key:1,class:`space-y-2`},Ye={class:`flex items-center justify-between text-sm`},Xe={class:`text-muted-foreground`},Ze={class:`h-2 bg-muted rounded-full overflow-hidden`},Qe=y({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let{t}=c(),n=e,r=T(()=>Object.values(n.byStatusCode).reduce((e,t)=>e+t,0)),l=T(()=>{let e=n.byStatusCode,i=r.value||1,a=u(e,200,299),o=u(e,400,499)-(e[429]||0),s=e[429]||0,c=u(e,500,599);return[{label:t(`monitor.statusCodes.success`),count:a,percent:(a/i*100).toFixed(1),textClass:`text-green-600 dark:text-green-400`,barClass:`bg-green-500`},{label:t(`monitor.statusCodes.clientError`),count:o,percent:(o/i*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:t(`monitor.statusCodes.rateLimited`),count:s,percent:(s/i*100).toFixed(1),textClass:`text-orange-600 dark:text-orange-400`,barClass:`bg-orange-500`},{label:t(`monitor.statusCodes.serverError`),count:c,percent:(c/i*100).toFixed(1),textClass:`text-red-600 dark:text-red-400`,barClass:`bg-red-500`}].filter(e=>e.count>0)});function u(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(e,n)=>r.value===0?(b(),v(`div`,qe,s(m(t)(`monitor.statusCodes.noData`)),1)):(b(),v(`div`,Je,[(b(!0),v(i,null,C(l.value,e=>(b(),v(`div`,{key:e.label,class:`space-y-1`},[o(`div`,Ye,[o(`span`,{class:p(e.textClass)},s(e.label),3),o(`span`,Xe,s(e.count)+` (`+s(e.percent)+`%) `,1)]),o(`div`,Ze,[o(`div`,{class:p([`h-full rounded-full transition-all duration-300`,e.barClass]),style:a({width:`${e.percent}%`})},null,6)])]))),128))]))}}),$e={key:0,class:`text-sm text-muted-foreground py-4 text-center`},et={key:1,class:`text-sm text-muted-foreground py-4 text-center`},tt={class:`flex flex-wrap gap-1`},nt={key:0,class:`text-xs text-muted-foreground`},rt=y({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=c(),r=t,a=T(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*100:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*100:0})):[]);return(r,c)=>t.stats?a.value.length===0?(b(),v(`div`,et,s(m(n)(`monitor.providerTable.noProviders`)),1)):(b(),_(m(ne),{key:2},{default:f(()=>[e(m(F),null,{default:f(()=>[e(m(re),null,{default:f(()=>[e(m(P),null,{default:f(()=>[...c[0]||=[u(`Provider`,-1)]]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.requests`)),1)]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.successRate`)),1)]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),e(m(P),null,{default:f(()=>[u(s(m(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),e(m(te),null,{default:f(()=>[(b(!0),v(i,null,C(a.value,t=>(b(),_(m(re),{key:t.id},{default:f(()=>[e(m(I),{class:`font-medium`},{default:f(()=>[u(s(t.name),1)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[u(s(t.stats.totalRequests),1)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[o(`span`,{class:p(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`)},s(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[u(s(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[o(`span`,{class:p(t.retryRate>10?`text-yellow-600 dark:text-yellow-400`:``)},s(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),e(m(I),null,{default:f(()=>[o(`div`,tt,[(b(!0),v(i,null,C(t.stats.topErrors.slice(0,3),e=>(b(),_(m(L),{key:e.code,variant:`destructive`,class:`text-xs`},{default:f(()=>[u(s(e.code)+` (`+s(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(b(),v(`span`,nt,`--`)):g(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(b(),v(`div`,$e,s(m(n)(`monitor.providerTable.noData`)),1))}}),it=3e4;function at(e,t,n){let r=null,i=null,a=0,o=null,s=!1;function c(){document.hidden?o=setTimeout(()=>{u(),n?.onClose?.()},it):(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 ot=200;function st(){let e=r([]),t=l([]),i=l(null),a=l([]),o=l(null),s=l(!1),c=T(()=>e.value.filter(e=>e.isStream).length),u=T(()=>e.value.filter(e=>!e.queued)),f=T(()=>e.value.filter(e=>e.queued===!0));function p(r){let s;try{s=JSON.parse(r.data)}catch{return}switch(r.type){case`request_start`:{let n=s;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=s;break;case`request_complete`:{let n=s;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>ot&&(t.value.length=ot);break}case`concurrency_update`:a.value=s;break;case`stats_update`:i.value=s;break;case`stream_content_update`:{let t=s;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))}n(e);break}case`runtime_update`:o.value=s;break}}function m(){s.value=!0}function h(){s.value=!1}async function g(){try{let[n,r,s,c,l]=await Promise.allSettled([x.getMonitorActive(),x.getMonitorRecent(),x.getMonitorStats(),x.getMonitorConcurrency(),x.getMonitorRuntime()]);n.status===`fulfilled`&&(e.value=n.value),r.status===`fulfilled`&&(t.value=r.value),s.status===`fulfilled`&&(i.value=s.value),c.status===`fulfilled`&&(a.value=c.value),l.status===`fulfilled`&&(o.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),i.value=null,a.value=[],o.value=null}}let _=l(null),v=l(!1),y=l(0);async function b(n){let r=++y.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){_.value=null;return}_.value=null,v.value=!0;try{if(i.status===`pending`){try{let e=await x.getMonitorRequest(n);if(r!==y.value)return;_.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==404)throw e;if(r!==y.value)return;let t=await x.getLogDetail(n);if(r!==y.value)return;_.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await x.getLogDetail(n);if(r!==y.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}}_.value={responseBody:t,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(r!==y.value)return;console.warn(`Failed to load log detail:`,e),_.value=null}finally{r===y.value&&(v.value=!1)}}let S=l(null),C=l(!1),w=l(null),E=null;function D(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 x.getMonitorRequest(t);if(S.value!==t)return;e.streamContent&&(w.value=e.streamContent)}catch(e){e?.response?.status===404&&O()}};n(),E=setInterval(n,500)}function O(){E&&=(clearInterval(E),null)}function k(e){S.value=e,C.value=!0,w.value=null;let n=t.value.find(t=>t.id===e);n&&(n.status===`completed`||n.status===`failed`)&&(n.streamContent?w.value=n.streamContent:A(e)),D(e),b(e)}async function A(e){try{let t=await x.getMonitorRequest(e);if(S.value!==e)return;t.streamContent&&(w.value=t.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let j=T(()=>S.value?e.value.find(e=>e.id===S.value)??t.value.find(e=>e.id===S.value)??null:null);return d(()=>j.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(O(),b(S.value))}),ee(()=>{O()}),{activeRequests:e,recentCompleted:t,stats:i,concurrency:a,runtime:o,connected:s,streamCount:c,streamingRequests:u,queuedRequests:f,selectedRequestId:S,selectedRequest:j,requestDetailOpen:C,selectRequest:k,selectedStreamContent:w,logDetailData:_,nonStreamBodyLoading:v,handleSSEMessage:p,handleSSEOpen:m,handleSSEClose:h,loadInitialData:g}}function ct(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function lt(e){let{t}=R.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 ut={class:`p-6`},dt={class:`flex items-center justify-between mb-4`},ft={class:`text-lg font-semibold text-foreground`},pt={class:`flex items-center gap-2`},mt={class:`grid grid-cols-3 gap-4 mb-6`},ht={class:`flex items-center justify-between`},gt={key:0,class:`text-sm text-muted-foreground py-2`},_t=[`onClick`],vt={class:`text-sm text-foreground truncate flex-1`},yt={class:`text-xs text-muted-foreground shrink-0`},bt={key:0,class:`text-xs text-muted-foreground shrink-0`},xt={key:1,class:`text-xs text-muted-foreground shrink-0`},St={class:`flex items-center justify-between`},Ct={key:0,class:`text-sm text-muted-foreground py-2`},wt=[`onClick`],Tt={class:`text-sm text-foreground truncate flex-1`},Et={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:`grid grid-cols-1 lg:grid-cols-3 gap-4`},Nt=1e3,Pt=3e3,Ft=y({__name:`Monitor`,setup(n){let{t:r}=c(),{activeRequests:a,recentCompleted:d,stats:y,concurrency:P,runtime:te,connected:ne,streamCount:re,streamingRequests:F,queuedRequests:I,selectedRequestId:R,selectedRequest:ge,requestDetailOpen:U,selectRequest:W,selectedStreamContent:_e,logDetailData:ve,handleSSEMessage:G,handleSSEOpen:ye,handleSSEClose:be,loadInitialData:xe}=st(),{connect:Se}=at(`/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}),{copied:K,copy:q}=he(),J=l(!1),Y=l(null),X=T(()=>Y.value?a.value.find(e=>e.id===Y.value)??null:null);function we(e){Y.value=e,J.value=!0}async function Te(){if(Y.value){try{await x.killMonitorRequest(Y.value),a.value=a.value.filter(e=>e.id!==Y.value),de.success(r(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),de.error(t(e,r(`monitor.killFailed`)))}J.value=!1}}let Z=l(Date.now()),Q=null;function Ee(){$(),Q=setInterval(()=>{Z.value=Date.now()},Pt)}function $(){Q&&=(clearInterval(Q),null)}function Oe(){document.hidden?$():(Z.value=Date.now(),Ee())}function ke(e){return((Z.value-e)/Nt).toFixed(1)}function Ae(e){return e.completedAt?((e.completedAt-e.startTime)/Nt).toFixed(1)+`s`:`--`}return E(async()=>{await xe(),Se(),Ee(),document.addEventListener(`visibilitychange`,Oe)}),ee(()=>{$(),document.removeEventListener(`visibilitychange`,Oe)}),(t,n)=>(b(),v(`div`,ut,[o(`div`,dt,[o(`h2`,ft,s(m(r)(`monitor.title`)),1),o(`div`,pt,[e(m(L),{variant:m(ne)?`default`:`destructive`},{default:f(()=>[u(s(m(ne)?m(r)(`monitor.connected`):m(r)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])])]),e(Ce,{stats:m(y),"active-count":m(a).length,"stream-count":m(re)},null,8,[`stats`,`active-count`,`stream-count`]),o(`div`,mt,[e(m(z),null,{default:f(()=>[e(m(V),{class:`pb-2`},{default:f(()=>[o(`div`,ht,[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.activeRequests`)),1)]),_:1}),e(m(L),{variant:`secondary`},{default:f(()=>[u(s(m(F).length),1)]),_:1})])]),_:1}),e(m(B),null,{default:f(()=>[e(m(j),{"delay-duration":300},{default:f(()=>[e(m(D),{class:`h-64`},{default:f(()=>[m(F).length===0?(b(),v(`div`,gt,s(m(r)(`monitor.noActiveRequests`)),1)):g(``,!0),(b(!0),v(i,null,C(m(F),t=>(b(),v(`div`,{key:t.id,class:p([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":m(R)===t.id}]),onClick:e=>m(W)(t.id)},[e(m(L),{variant:m(ct)(t.status),class:`shrink-0`},{default:f(()=>[u(s(m(lt)(t.status)),1)]),_:2},1032,[`variant`]),o(`span`,vt,s(t.model),1),e(m(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[u(s(t.providerName),1)]),_:2},1024),o(`span`,yt,s(ke(t.startTime))+`s`,1),t.streamMetrics?.tokensPerSecond?(b(),v(`span`,bt,s(t.streamMetrics.tokensPerSecond.toFixed(0))+` t/s `,1)):g(``,!0),t.streamMetrics?.outputTokens?(b(),v(`span`,xt,s(t.streamMetrics.outputTokens)+` tok `,1)):g(``,!0),t.isStream?(b(),_(m(L),{key:2,variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[...n[2]||=[u(`SSE`,-1)]]),_:1})):g(``,!0),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:h(e=>m(q)(t.id),[`stop`])},{default:f(()=>[m(K)?(b(),_(m(me),{key:0,class:`size-3 text-success`})):(b(),_(m(k),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:h(e=>we(t.id),[`stop`])},{default:f(()=>[e(m(ce),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,_t))),128))]),_:1})]),_:1})]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),{class:`pb-2`},{default:f(()=>[o(`div`,St,[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.queuedRequests`)),1)]),_:1}),e(m(L),{variant:`secondary`},{default:f(()=>[u(s(m(I).length),1)]),_:1})])]),_:1}),e(m(B),null,{default:f(()=>[e(m(j),{"delay-duration":300},{default:f(()=>[e(m(D),{class:`h-64`},{default:f(()=>[m(I).length===0?(b(),v(`div`,Ct,s(m(r)(`monitor.noQueuedRequests`)),1)):g(``,!0),(b(!0),v(i,null,C(m(I),t=>(b(),v(`div`,{key:t.id,class:p([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":m(R)===t.id}]),onClick:e=>m(W)(t.id)},[e(m(L),{variant:`outline`,class:`shrink-0`},{default:f(()=>[u(s(m(r)(`monitor.queued`)),1)]),_:1}),o(`span`,Tt,s(t.model),1),e(m(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[u(s(t.providerName),1)]),_:2},1024),o(`span`,Et,s(ke(t.startTime))+`s`,1),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:h(e=>m(q)(t.id),[`stop`])},{default:f(()=>[m(K)?(b(),_(m(me),{key:0,class:`size-3 text-success`})):(b(),_(m(k),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:h(e=>we(t.id),[`stop`])},{default:f(()=>[e(m(ce),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,wt))),128))]),_:1})]),_:1})]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),{class:`pb-2`},{default:f(()=>[o(`div`,Dt,[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.completed`)),1)]),_:1}),e(m(L),{variant:`secondary`},{default:f(()=>[u(s(m(d).length),1)]),_:1})])]),_:1}),e(m(B),null,{default:f(()=>[e(m(j),{"delay-duration":300},{default:f(()=>[e(m(D),{class:`h-64`},{default:f(()=>[m(d).length===0?(b(),v(`div`,Ot,s(m(r)(`monitor.noCompletedRequests`)),1)):g(``,!0),(b(!0),v(i,null,C(m(d),t=>(b(),v(`div`,{key:t.id,class:p([`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":m(R)===t.id}]),onClick:e=>m(W)(t.id)},[e(m(L),{variant:m(ct)(t.status),class:`shrink-0`},{default:f(()=>[u(s(m(lt)(t.status)),1)]),_:2},1032,[`variant`]),o(`span`,At,s(t.model),1),e(m(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[u(s(t.providerName),1)]),_:2},1024),t.isStream?(b(),_(m(L),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[...n[3]||=[u(`SSE`,-1)]]),_:1})):g(``,!0),o(`span`,jt,s(Ae(t)),1),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:h(e=>m(q)(t.id),[`stop`])},{default:f(()=>[m(K)?(b(),_(m(me),{key:0,class:`size-3 text-success`})):(b(),_(m(k),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)],10,kt))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),e(m(z),{class:`mb-4`},{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.providerStats`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(rt,{stats:m(y)},null,8,[`stats`])]),_:1})]),_:1}),o(`div`,Mt,[e(m(z),null,{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.concurrency`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(De,{providers:m(P)},null,8,[`providers`])]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.statusCodeDistribution`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(Qe,{"by-status-code":m(y)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.runtime`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(Ke,{runtime:m(te)},null,8,[`runtime`])]),_:1})]),_:1})]),e(O,{open:m(U),"onUpdate:open":n[0]||=e=>S(U)?U.value=e:null,source:`realtime`,request:m(ge),"stream-content":m(_e),"log-detail-data":m(ve)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),e(m(oe),{open:J.value,"onUpdate:open":n[1]||=e=>J.value=e},{default:f(()=>[e(m(ae),null,{default:f(()=>[e(m(ie),null,{default:f(()=>[e(m(se),null,{default:f(()=>[u(s(m(r)(`monitor.killConfirmTitle`)),1)]),_:1}),X.value?(b(),_(m(fe),{key:0},{default:f(()=>[u(s(m(r)(`monitor.killConfirm`,{model:X.value.model,provider:X.value.providerName})),1)]),_:1})):g(``,!0)]),_:1}),e(m(ue),null,{default:f(()=>[e(m(le),null,{default:f(()=>[u(s(m(r)(`monitor.killCancel`)),1)]),_:1}),e(m(pe),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:Te},{default:f(()=>[u(s(m(r)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{Ft as default};
|
|
1
|
+
import{$ as e,A as t,Bt as n,Ft as r,G as i,Gt as a,J as o,Kt as s,L as c,Nt as l,Q as u,St as d,Tt as f,Ut as p,Vt as m,W as h,X as g,Y as _,Z as v,dt as ee,et as y,ft as b,k as x,kt as S,mt as C,n as w,q as T,ut as E}from"./button-C7HO6Dyb.js";import{n as D,t as O}from"./UnifiedRequestDialog-6ZRBfjko.js";import{t as k}from"./copy-DxwFlq2A.js";import{i as A,n as j,r as M,t as N}from"./TooltipTrigger-Dr6kqGSH.js";import{c as P,d as te,f as ne,l as re,s as F,u as I}from"./dialog-BWB1aLcT.js";import{a as ie,b as L,c as ae,d as oe,gt as R,i as se,it as ce,l as le,o as ue,r as de,s as fe,u as pe,ut as me}from"./index-itL9--Q_.js";import{n as z,t as B}from"./CardContent-DfVo-N85.js";import{n as V,t as H}from"./CardTitle-npwJSAlz.js";import{t as he}from"./useClipboard-CttzUerj.js";var ge={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},U={class:`text-sm text-muted-foreground`},W={class:`text-2xl font-bold text-foreground mt-1`},_e={class:`text-xs text-muted-foreground mt-1`},ve={class:`text-sm text-muted-foreground`},G={class:`text-2xl font-bold text-foreground mt-1`},ye={class:`text-xs text-muted-foreground mt-1`},be={class:`text-sm text-muted-foreground`},xe={class:`text-2xl font-bold text-foreground mt-1`},Se={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`},Ce=y({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(t){let{t:n}=c(),r=t,i=T(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.errorCount/r.stats.totalRequests*100).toFixed(1)),a=T(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.retryCount/r.stats.totalRequests*100).toFixed(1)),l=T(()=>r.stats?r.stats.p50LatencyMs.toFixed(0):`--`);return(r,c)=>(b(),v(`div`,ge,[e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,U,s(m(n)(`monitor.header.activeRequests`)),1),o(`p`,W,s(t.activeCount),1),o(`p`,_e,s(m(n)(`monitor.header.streamNonStream`,{stream:t.streamCount,nonStream:t.activeCount-t.streamCount})),1)]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,ve,s(m(n)(`monitor.header.errorRate`)),1),o(`p`,G,s(i.value)+`%`,1),o(`p`,ye,s(t.stats?.errorCount??0)+` / `+s(t.stats?.totalRequests??0),1)]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,be,s(m(n)(`monitor.header.p50Latency`)),1),o(`p`,xe,s(l.value)+`ms`,1),o(`p`,Se,s(m(n)(`monitor.header.avgLatency`,{value:t.stats?.avgLatencyMs?.toFixed(0)??`--`})),1)]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(B),{class:`p-4`},{default:f(()=>[o(`p`,K,s(m(n)(`monitor.header.retryRate`)),1),o(`p`,q,s(a.value)+`%`,1),o(`p`,J,s(t.stats?.retryCount??0)+` / `+s(t.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),Y={class:`space-y-3`},X={key:0,class:`text-sm text-muted-foreground`},we={class:`flex items-center justify-between text-sm`},Te={class:`font-medium text-foreground`},Z={class:`text-muted-foreground`},Q={class:`text-xs`},Ee={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},$={key:1,class:`flex gap-3 text-xs text-muted-foreground`},De=y({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){let{t}=c();function n(e){return e.adaptiveLimit??e.maxConcurrency}function r(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(c,l)=>(b(),v(`div`,Y,[e.providers.length===0?(b(),v(`div`,X,s(m(t)(`monitor.concurrencyPanel.noData`)),1)):g(``,!0),(b(!0),v(i,null,C(e.providers,e=>(b(),v(`div`,{key:e.providerId,class:`space-y-1`},[o(`div`,we,[o(`span`,Te,s(e.providerName),1),o(`span`,Z,[e.adaptiveEnabled?(b(),v(i,{key:0},[u(s(e.active)+` / `+s(e.adaptiveLimit??e.maxConcurrency)+` `,1),o(`span`,Q,`(`+s(m(t)(`monitor.concurrencyPanel.adaptive`))+`)`,1)],64)):e.maxConcurrency===0?(b(),v(i,{key:1},[u(s(m(t)(`monitor.concurrencyPanel.unlimited`)),1)],64)):(b(),v(i,{key:2},[u(s(e.active)+` / `+s(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(b(),v(`div`,Ee,[o(`div`,{class:p([`h-full rounded-full transition-all duration-300`,r(e.active,n(e))]),style:a({width:`${Math.min(100,e.active/n(e)*100)}%`})},null,6)])):g(``,!0),e.maxConcurrency>0?(b(),v(`div`,$,[o(`span`,null,s(m(t)(`monitor.concurrencyPanel.queued`,{count:e.queued})),1),o(`span`,null,s(m(t)(`monitor.concurrencyPanel.queueLimit`,{limit:e.adaptiveLimit??e.maxQueueSize})),1)])):g(``,!0)]))),128))]))}}),Oe={key:0,class:`text-sm text-muted-foreground`},ke={key:1,class:`grid grid-cols-2 gap-3 text-sm`},Ae={class:`text-muted-foreground`},je={class:`font-medium text-foreground`},Me={class:`text-muted-foreground`},Ne={class:`font-medium text-foreground`},Pe={class:`col-span-2`},Fe={class:`flex items-center justify-between`},Ie={class:`text-muted-foreground`},Le={class:`text-muted-foreground`},Re={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},ze={class:`text-muted-foreground`},Be={class:`font-medium text-foreground`},Ve={class:`text-muted-foreground`},He={class:`font-medium text-foreground`},Ue={class:`col-span-2`},We={class:`text-muted-foreground`},Ge={class:`font-medium text-foreground`},Ke=y({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let{t}=c(),n=e,r=T(()=>!n.runtime||n.runtime.memoryUsage.heapTotal===0?0:Math.min(100,n.runtime.memoryUsage.heapUsed/n.runtime.memoryUsage.heapTotal*100));function i(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function l(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(n,c)=>e.runtime?(b(),v(`div`,ke,[o(`div`,null,[o(`p`,Ae,s(m(t)(`monitor.runtimePanel.uptime`)),1),o(`p`,je,s(i(e.runtime.uptimeMs)),1)]),o(`div`,null,[o(`p`,Me,s(m(t)(`monitor.runtimePanel.memoryRss`)),1),o(`p`,Ne,s(l(e.runtime.memoryUsage.rss)),1)]),o(`div`,Pe,[o(`div`,Fe,[o(`p`,Ie,s(m(t)(`monitor.runtimePanel.heapUsage`)),1),o(`p`,Le,s(l(e.runtime.memoryUsage.heapUsed))+` / `+s(l(e.runtime.memoryUsage.heapTotal)),1)]),o(`div`,Re,[o(`div`,{class:`h-full bg-primary rounded-full transition-all duration-300`,style:a({width:`${r.value}%`})},null,4)])]),o(`div`,null,[o(`p`,ze,s(m(t)(`monitor.runtimePanel.activeHandles`)),1),o(`p`,Be,s(e.runtime.activeHandles),1)]),o(`div`,null,[o(`p`,Ve,s(m(t)(`monitor.runtimePanel.activeRequests`)),1),o(`p`,He,s(e.runtime.activeRequests),1)]),o(`div`,Ue,[o(`p`,We,s(m(t)(`monitor.runtimePanel.eventLoopDelay`)),1),o(`p`,Ge,s(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(b(),v(`div`,Oe,s(m(t)(`monitor.runtimePanel.noData`)),1))}}),qe={key:0,class:`text-sm text-muted-foreground`},Je={key:1,class:`space-y-2`},Ye={class:`flex items-center justify-between text-sm`},Xe={class:`text-muted-foreground`},Ze={class:`h-2 bg-muted rounded-full overflow-hidden`},Qe=y({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let{t}=c(),n=e,r=T(()=>Object.values(n.byStatusCode).reduce((e,t)=>e+t,0)),l=T(()=>{let e=n.byStatusCode,i=r.value||1,a=u(e,200,299),o=u(e,400,499)-(e[429]||0),s=e[429]||0,c=u(e,500,599);return[{label:t(`monitor.statusCodes.success`),count:a,percent:(a/i*100).toFixed(1),textClass:`text-green-600 dark:text-green-400`,barClass:`bg-green-500`},{label:t(`monitor.statusCodes.clientError`),count:o,percent:(o/i*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:t(`monitor.statusCodes.rateLimited`),count:s,percent:(s/i*100).toFixed(1),textClass:`text-orange-600 dark:text-orange-400`,barClass:`bg-orange-500`},{label:t(`monitor.statusCodes.serverError`),count:c,percent:(c/i*100).toFixed(1),textClass:`text-red-600 dark:text-red-400`,barClass:`bg-red-500`}].filter(e=>e.count>0)});function u(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(e,n)=>r.value===0?(b(),v(`div`,qe,s(m(t)(`monitor.statusCodes.noData`)),1)):(b(),v(`div`,Je,[(b(!0),v(i,null,C(l.value,e=>(b(),v(`div`,{key:e.label,class:`space-y-1`},[o(`div`,Ye,[o(`span`,{class:p(e.textClass)},s(e.label),3),o(`span`,Xe,s(e.count)+` (`+s(e.percent)+`%) `,1)]),o(`div`,Ze,[o(`div`,{class:p([`h-full rounded-full transition-all duration-300`,e.barClass]),style:a({width:`${e.percent}%`})},null,6)])]))),128))]))}}),$e={key:0,class:`text-sm text-muted-foreground py-4 text-center`},et={key:1,class:`text-sm text-muted-foreground py-4 text-center`},tt={class:`flex flex-wrap gap-1`},nt={key:0,class:`text-xs text-muted-foreground`},rt=y({__name:`ProviderStatsTable`,props:{stats:{}},setup(t){let{t:n}=c(),r=t,a=T(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*100:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*100:0})):[]);return(r,c)=>t.stats?a.value.length===0?(b(),v(`div`,et,s(m(n)(`monitor.providerTable.noProviders`)),1)):(b(),_(m(ne),{key:2},{default:f(()=>[e(m(F),null,{default:f(()=>[e(m(re),null,{default:f(()=>[e(m(P),null,{default:f(()=>[...c[0]||=[u(`Provider`,-1)]]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.requests`)),1)]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.successRate`)),1)]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.avgLatency`)),1)]),_:1}),e(m(P),{class:`text-right`},{default:f(()=>[u(s(m(n)(`monitor.providerTable.retryRate`)),1)]),_:1}),e(m(P),null,{default:f(()=>[u(s(m(n)(`monitor.providerTable.topErrors`)),1)]),_:1})]),_:1})]),_:1}),e(m(te),null,{default:f(()=>[(b(!0),v(i,null,C(a.value,t=>(b(),_(m(re),{key:t.id},{default:f(()=>[e(m(I),{class:`font-medium`},{default:f(()=>[u(s(t.name),1)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[u(s(t.stats.totalRequests),1)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[o(`span`,{class:p(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`)},s(t.successRate.toFixed(1))+`% `,3)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[u(s(t.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),e(m(I),{class:`text-right`},{default:f(()=>[o(`span`,{class:p(t.retryRate>10?`text-yellow-600 dark:text-yellow-400`:``)},s(t.retryRate.toFixed(1))+`% `,3)]),_:2},1024),e(m(I),null,{default:f(()=>[o(`div`,tt,[(b(!0),v(i,null,C(t.stats.topErrors.slice(0,3),e=>(b(),_(m(L),{key:e.code,variant:`destructive`,class:`text-xs`},{default:f(()=>[u(s(e.code)+` (`+s(e.count)+`) `,1)]),_:2},1024))),128)),t.stats.topErrors.length===0?(b(),v(`span`,nt,`--`)):g(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(b(),v(`div`,$e,s(m(n)(`monitor.providerTable.noData`)),1))}}),it=3e4;function at(e,t,n){let r=null,i=null,a=0,o=null,s=!1;function c(){document.hidden?o=setTimeout(()=>{u(),n?.onClose?.()},it):(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 ot=200;function st(){let e=r([]),t=l([]),i=l(null),a=l([]),o=l(null),s=l(!1),c=T(()=>e.value.filter(e=>e.isStream).length),u=T(()=>e.value.filter(e=>!e.queued)),f=T(()=>e.value.filter(e=>e.queued===!0));function p(r){let s;try{s=JSON.parse(r.data)}catch{return}switch(r.type){case`request_start`:{let n=s;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=s;break;case`request_complete`:{let n=s;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>ot&&(t.value.length=ot);break}case`concurrency_update`:a.value=s;break;case`stats_update`:i.value=s;break;case`stream_content_update`:{let t=s;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))}n(e);break}case`runtime_update`:o.value=s;break}}function m(){s.value=!0}function h(){s.value=!1}async function g(){try{let[n,r,s,c,l]=await Promise.allSettled([x.getMonitorActive(),x.getMonitorRecent(),x.getMonitorStats(),x.getMonitorConcurrency(),x.getMonitorRuntime()]);n.status===`fulfilled`&&(e.value=n.value),r.status===`fulfilled`&&(t.value=r.value),s.status===`fulfilled`&&(i.value=s.value),c.status===`fulfilled`&&(a.value=c.value),l.status===`fulfilled`&&(o.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),i.value=null,a.value=[],o.value=null}}let _=l(null),v=l(!1),y=l(0);async function b(n){let r=++y.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i){_.value=null;return}_.value=null,v.value=!0;try{if(i.status===`pending`){try{let e=await x.getMonitorRequest(n);if(r!==y.value)return;_.value={clientRequest:e.clientRequest??void 0,upstreamRequest:e.upstreamRequest??void 0}}catch(e){if(e?.response?.status!==404)throw e;if(r!==y.value)return;let t=await x.getLogDetail(n);if(r!==y.value)return;_.value=t.client_request?{clientRequest:t.client_request}:null}return}let e=await x.getLogDetail(n);if(r!==y.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}}_.value={responseBody:t,clientRequest:e.client_request??void 0,upstreamRequest:e.upstream_request??void 0}}catch(e){if(r!==y.value)return;console.warn(`Failed to load log detail:`,e),_.value=null}finally{r===y.value&&(v.value=!1)}}let S=l(null),C=l(!1),w=l(null),E=null;function D(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 x.getMonitorRequest(t);if(S.value!==t)return;e.streamContent&&(w.value=e.streamContent)}catch(e){e?.response?.status===404&&O()}};n(),E=setInterval(n,500)}function O(){E&&=(clearInterval(E),null)}function k(e){S.value=e,C.value=!0,w.value=null;let n=t.value.find(t=>t.id===e);n&&(n.status===`completed`||n.status===`failed`)&&(n.streamContent?w.value=n.streamContent:A(e)),D(e),b(e)}async function A(e){try{let t=await x.getMonitorRequest(e);if(S.value!==e)return;t.streamContent&&(w.value=t.streamContent)}catch(e){console.error(`loadCompletedStreamContent:`,e)}}let j=T(()=>S.value?e.value.find(e=>e.id===S.value)??t.value.find(e=>e.id===S.value)??null:null);return d(()=>j.value?.status,(e,t)=>{t===`pending`&&(e===`completed`||e===`failed`)&&(O(),b(S.value))}),ee(()=>{O()}),{activeRequests:e,recentCompleted:t,stats:i,concurrency:a,runtime:o,connected:s,streamCount:c,streamingRequests:u,queuedRequests:f,selectedRequestId:S,selectedRequest:j,requestDetailOpen:C,selectRequest:k,selectedStreamContent:w,logDetailData:_,nonStreamBodyLoading:v,handleSSEMessage:p,handleSSEOpen:m,handleSSEClose:h,loadInitialData:g}}function ct(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function lt(e){let{t}=R.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 ut={class:`p-6`},dt={class:`flex items-center justify-between mb-4`},ft={class:`text-lg font-semibold text-foreground`},pt={class:`flex items-center gap-2`},mt={class:`grid grid-cols-3 gap-4 mb-6`},ht={class:`flex items-center justify-between`},gt={key:0,class:`text-sm text-muted-foreground py-2`},_t=[`onClick`],vt={class:`text-sm text-foreground truncate flex-1`},yt={class:`text-xs text-muted-foreground shrink-0`},bt={key:0,class:`text-xs text-muted-foreground shrink-0`},xt={key:1,class:`text-xs text-muted-foreground shrink-0`},St={class:`flex items-center justify-between`},Ct={key:0,class:`text-sm text-muted-foreground py-2`},wt=[`onClick`],Tt={class:`text-sm text-foreground truncate flex-1`},Et={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:`grid grid-cols-1 lg:grid-cols-3 gap-4`},Nt=1e3,Pt=3e3,Ft=y({__name:`Monitor`,setup(n){let{t:r}=c(),{activeRequests:a,recentCompleted:d,stats:y,concurrency:P,runtime:te,connected:ne,streamCount:re,streamingRequests:F,queuedRequests:I,selectedRequestId:R,selectedRequest:ge,requestDetailOpen:U,selectRequest:W,selectedStreamContent:_e,logDetailData:ve,handleSSEMessage:G,handleSSEOpen:ye,handleSSEClose:be,loadInitialData:xe}=st(),{connect:Se}=at(`/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}),{copied:K,copy:q}=he(),J=l(!1),Y=l(null),X=T(()=>Y.value?a.value.find(e=>e.id===Y.value)??null:null);function we(e){Y.value=e,J.value=!0}async function Te(){if(Y.value){try{await x.killMonitorRequest(Y.value),a.value=a.value.filter(e=>e.id!==Y.value),de.success(r(`monitor.killSuccess`))}catch(e){console.error(`Monitor.killRequest:`,e),de.error(t(e,r(`monitor.killFailed`)))}J.value=!1}}let Z=l(Date.now()),Q=null;function Ee(){$(),Q=setInterval(()=>{Z.value=Date.now()},Pt)}function $(){Q&&=(clearInterval(Q),null)}function Oe(){document.hidden?$():(Z.value=Date.now(),Ee())}function ke(e){return((Z.value-e)/Nt).toFixed(1)}function Ae(e){return e.completedAt?((e.completedAt-e.startTime)/Nt).toFixed(1)+`s`:`--`}return E(async()=>{await xe(),Se(),Ee(),document.addEventListener(`visibilitychange`,Oe)}),ee(()=>{$(),document.removeEventListener(`visibilitychange`,Oe)}),(t,n)=>(b(),v(`div`,ut,[o(`div`,dt,[o(`h2`,ft,s(m(r)(`monitor.title`)),1),o(`div`,pt,[e(m(L),{variant:m(ne)?`default`:`destructive`},{default:f(()=>[u(s(m(ne)?m(r)(`monitor.connected`):m(r)(`monitor.disconnected`)),1)]),_:1},8,[`variant`])])]),e(Ce,{stats:m(y),"active-count":m(a).length,"stream-count":m(re)},null,8,[`stats`,`active-count`,`stream-count`]),o(`div`,mt,[e(m(z),null,{default:f(()=>[e(m(V),{class:`pb-2`},{default:f(()=>[o(`div`,ht,[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.activeRequests`)),1)]),_:1}),e(m(L),{variant:`secondary`},{default:f(()=>[u(s(m(F).length),1)]),_:1})])]),_:1}),e(m(B),null,{default:f(()=>[e(m(j),{"delay-duration":300},{default:f(()=>[e(m(D),{class:`h-64`},{default:f(()=>[m(F).length===0?(b(),v(`div`,gt,s(m(r)(`monitor.noActiveRequests`)),1)):g(``,!0),(b(!0),v(i,null,C(m(F),t=>(b(),v(`div`,{key:t.id,class:p([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":m(R)===t.id}]),onClick:e=>m(W)(t.id)},[e(m(L),{variant:m(ct)(t.status),class:`shrink-0`},{default:f(()=>[u(s(m(lt)(t.status)),1)]),_:2},1032,[`variant`]),o(`span`,vt,s(t.model),1),e(m(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[u(s(t.providerName),1)]),_:2},1024),o(`span`,yt,s(ke(t.startTime))+`s`,1),t.streamMetrics?.tokensPerSecond?(b(),v(`span`,bt,s(t.streamMetrics.tokensPerSecond.toFixed(0))+` t/s `,1)):g(``,!0),t.streamMetrics?.outputTokens?(b(),v(`span`,xt,s(t.streamMetrics.outputTokens)+` tok `,1)):g(``,!0),t.isStream?(b(),_(m(L),{key:2,variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[...n[2]||=[u(`SSE`,-1)]]),_:1})):g(``,!0),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:h(e=>m(q)(t.id),[`stop`])},{default:f(()=>[m(K)?(b(),_(m(me),{key:0,class:`size-3 text-success`})):(b(),_(m(k),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:h(e=>we(t.id),[`stop`])},{default:f(()=>[e(m(ce),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,_t))),128))]),_:1})]),_:1})]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),{class:`pb-2`},{default:f(()=>[o(`div`,St,[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.queuedRequests`)),1)]),_:1}),e(m(L),{variant:`secondary`},{default:f(()=>[u(s(m(I).length),1)]),_:1})])]),_:1}),e(m(B),null,{default:f(()=>[e(m(j),{"delay-duration":300},{default:f(()=>[e(m(D),{class:`h-64`},{default:f(()=>[m(I).length===0?(b(),v(`div`,Ct,s(m(r)(`monitor.noQueuedRequests`)),1)):g(``,!0),(b(!0),v(i,null,C(m(I),t=>(b(),v(`div`,{key:t.id,class:p([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":m(R)===t.id}]),onClick:e=>m(W)(t.id)},[e(m(L),{variant:`outline`,class:`shrink-0`},{default:f(()=>[u(s(m(r)(`monitor.queued`)),1)]),_:1}),o(`span`,Tt,s(t.model),1),e(m(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[u(s(t.providerName),1)]),_:2},1024),o(`span`,Et,s(ke(t.startTime))+`s`,1),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:h(e=>m(q)(t.id),[`stop`])},{default:f(()=>[m(K)?(b(),_(m(me),{key:0,class:`size-3 text-success`})):(b(),_(m(k),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-destructive hover:text-destructive`,onClick:h(e=>we(t.id),[`stop`])},{default:f(()=>[e(m(ce),{class:`size-3`})]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.kill`)),1)]),_:1})]),_:2},1024)],10,wt))),128))]),_:1})]),_:1})]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),{class:`pb-2`},{default:f(()=>[o(`div`,Dt,[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.completed`)),1)]),_:1}),e(m(L),{variant:`secondary`},{default:f(()=>[u(s(m(d).length),1)]),_:1})])]),_:1}),e(m(B),null,{default:f(()=>[e(m(j),{"delay-duration":300},{default:f(()=>[e(m(D),{class:`h-64`},{default:f(()=>[m(d).length===0?(b(),v(`div`,Ot,s(m(r)(`monitor.noCompletedRequests`)),1)):g(``,!0),(b(!0),v(i,null,C(m(d),t=>(b(),v(`div`,{key:t.id,class:p([`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":m(R)===t.id}]),onClick:e=>m(W)(t.id)},[e(m(L),{variant:m(ct)(t.status),class:`shrink-0`},{default:f(()=>[u(s(m(lt)(t.status)),1)]),_:2},1032,[`variant`]),o(`span`,At,s(t.model),1),e(m(L),{variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[u(s(t.providerName),1)]),_:2},1024),t.isStream?(b(),_(m(L),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:f(()=>[...n[3]||=[u(`SSE`,-1)]]),_:1})):g(``,!0),o(`span`,jt,s(Ae(t)),1),e(m(A),null,{default:f(()=>[e(m(N),{"as-child":``},{default:f(()=>[e(m(w),{variant:`ghost`,size:`icon-xs`,class:`shrink-0`,onClick:h(e=>m(q)(t.id),[`stop`])},{default:f(()=>[m(K)?(b(),_(m(me),{key:0,class:`size-3 text-success`})):(b(),_(m(k),{key:1,class:`size-3`}))]),_:1},8,[`onClick`])]),_:2},1024),e(m(M),null,{default:f(()=>[u(s(m(r)(`monitor.copyId`)),1)]),_:1})]),_:2},1024)],10,kt))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),e(m(z),{class:`mb-4`},{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.providerStats`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(rt,{stats:m(y)},null,8,[`stats`])]),_:1})]),_:1}),o(`div`,Mt,[e(m(z),null,{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.concurrency`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(De,{providers:m(P)},null,8,[`providers`])]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.statusCodeDistribution`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(Qe,{"by-status-code":m(y)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),e(m(z),null,{default:f(()=>[e(m(V),null,{default:f(()=>[e(m(H),{class:`text-sm font-medium text-foreground`},{default:f(()=>[u(s(m(r)(`monitor.runtime`)),1)]),_:1})]),_:1}),e(m(B),null,{default:f(()=>[e(Ke,{runtime:m(te)},null,8,[`runtime`])]),_:1})]),_:1})]),e(O,{open:m(U),"onUpdate:open":n[0]||=e=>S(U)?U.value=e:null,source:`realtime`,request:m(ge),"stream-content":m(_e),"log-detail-data":m(ve)},null,8,[`open`,`request`,`stream-content`,`log-detail-data`]),e(m(oe),{open:J.value,"onUpdate:open":n[1]||=e=>J.value=e},{default:f(()=>[e(m(ae),null,{default:f(()=>[e(m(ie),null,{default:f(()=>[e(m(se),null,{default:f(()=>[u(s(m(r)(`monitor.killConfirmTitle`)),1)]),_:1}),X.value?(b(),_(m(fe),{key:0},{default:f(()=>[u(s(m(r)(`monitor.killConfirm`,{model:X.value.model,provider:X.value.providerName})),1)]),_:1})):g(``,!0)]),_:1}),e(m(ue),null,{default:f(()=>[e(m(le),null,{default:f(()=>[u(s(m(r)(`monitor.killCancel`)),1)]),_:1}),e(m(pe),{class:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,onClick:Te},{default:f(()=>[u(s(m(r)(`monitor.kill`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{Ft as default};
|