myapikey 0.46.0 → 0.46.1
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myapikey",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Personal LLM API gateway & proxy — one address + one API key for all your models. Forwards OpenAI & Anthropic calls to your backends with failover and a circuit breaker. Pure passthrough, no format translation. Self-hosted (CLI + web UI).",
|
|
6
6
|
"keywords": [
|
|
@@ -331,7 +331,7 @@ var gu=e=>{throw TypeError(e)};var Dm=(e,t,n)=>t.has(e)||gu("Cannot "+n);var Oo=
|
|
|
331
331
|
* See the LICENSE file in the root directory of this source tree.
|
|
332
332
|
*/const Ns=Ee("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),Ws=re({__name:"DialogContent",props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,s=t,o=ae(()=>{const{class:l,...i}=n;return i}),a=At(o,s);return(l,i)=>(h(),H(r(Q1),null,{default:g(()=>[m(r(Y1),{class:"fixed inset-0 z-50 bg-black/80"}),m(r(H1),Ae(r(a),{class:r(je)("fixed left-[50%] top-[50%] z-50 flex max-h-[90vh] w-full max-w-lg translate-x-[-50%] translate-y-[-50%] flex-col gap-4 overflow-hidden border bg-background p-6 shadow-lg sm:rounded-lg",n.class)}),{default:g(()=>[ce(l.$slots,"default"),m(r(b1),{class:"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background"},{default:g(()=>[m(r(Ao),{class:"h-4 w-4"}),i[0]||(i[0]=b("span",{class:"sr-only"},"Close",-1))]),_:1})]),_:3},16,["class"])]),_:3}))}}),Ks=re({__name:"DialogTitle",props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),H(r(e0),{class:ge(r(je)("text-lg font-semibold leading-none tracking-tight",t.class))},{default:g(()=>[ce(n.$slots,"default")]),_:3},8,["class"]))}}),Gs=re({__name:"DialogDescription",props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),H(r(z1),{class:ge(r(je)("text-sm text-muted-foreground",t.class))},{default:g(()=>[ce(n.$slots,"default")]),_:3},8,["class"]))}}),Zk=["for"],_t=re({__name:"Label",props:{class:{type:[Boolean,null,String,Object,Array]},for:{}},setup(e){const t=e;return(n,s)=>(h(),V("label",{for:t.for,class:ge(r(je)("text-sm font-medium leading-none text-foreground",t.class))},[ce(n.$slots,"default")],10,Zk))}}),ya=re({__name:"Popover",props:{defaultOpen:{type:Boolean},open:{type:Boolean},modal:{type:Boolean}},emits:["update:open"],setup(e,{emit:t}){const o=At(e,t);return(a,l)=>(h(),H(r(Zx),Ct(Tt(r(o))),{default:g(()=>[ce(a.$slots,"default")]),_:3},16))}}),ba=re({__name:"PopoverTrigger",props:{asChild:{type:Boolean},as:{}},setup(e){const t=e;return(n,s)=>(h(),H(r(cw),Ct(Tt(t)),{default:g(()=>[ce(n.$slots,"default")]),_:3},16))}}),_a=re({__name:"PopoverContent",props:{forceMount:{type:Boolean},memoDependencies:{},side:{},sideOffset:{default:4},sideFlip:{type:Boolean},align:{},alignOffset:{},alignFlip:{type:Boolean},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},hideShiftedArrow:{type:Boolean},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},dir:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,s=t,o=ae(()=>{const{class:l,...i}=n;return i}),a=At(o,s);return(l,i)=>(h(),H(r(iw),null,{default:g(()=>[m(r(aw),Ae(r(a),{class:r(je)("z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",n.class)}),{default:g(()=>[ce(l.$slots,"default")]),_:3},16,["class"])]),_:3}))}}),eC={class:"relative w-full overflow-auto"},el=re({__name:"Table",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),V("div",eC,[b("table",{class:ge(r(je)("w-full caption-bottom text-sm",t.class))},[ce(n.$slots,"default")],2)]))}}),tl=re({__name:"TableHeader",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),V("thead",{class:ge(r(je)("[&_tr]:border-b",t.class))},[ce(n.$slots,"default")],2))}}),nl=re({__name:"TableBody",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),V("tbody",{class:ge(r(je)("[&_tr:last-child]:border-0",t.class))},[ce(n.$slots,"default")],2))}}),Sn=re({__name:"TableRow",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),V("tr",{class:ge(r(je)("border-b transition-colors hover:bg-muted/40 data-[state=selected]:bg-muted",t.class))},[ce(n.$slots,"default")],2))}}),ot=re({__name:"TableHead",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),V("th",{class:ge(r(je)("h-10 px-3 text-left align-middle text-xs font-medium uppercase tracking-wide text-muted-foreground [&:has([role=checkbox])]:pr-0",t.class))},[ce(n.$slots,"default")],2))}}),tt=re({__name:"TableCell",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(n,s)=>(h(),V("td",{class:ge(r(je)("p-3 align-middle [&:has([role=checkbox])]:pr-0",t.class))},[ce(n.$slots,"default")],2))}}),zr=re({__name:"Select",props:{open:{type:Boolean},defaultOpen:{type:Boolean},defaultValue:{},modelValue:{},nullableValue:{},by:{type:[String,Function]},dir:{},multiple:{type:Boolean},autocomplete:{},disabled:{type:Boolean},name:{},required:{type:Boolean}},emits:["update:modelValue","update:open"],setup(e,{emit:t}){const o=At(e,t);return(a,l)=>(h(),H(r(Ew),Ct(Tt(r(o))),{default:g(()=>[ce(a.$slots,"default")]),_:3},16))}}),Wr=re({__name:"SelectTrigger",props:{disabled:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,n=ae(()=>{const{class:s,...o}=t;return o});return(s,o)=>(h(),H(r(ok),Ae(n.value,{class:r(je)("flex h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t.class)}),{default:g(()=>[ce(s.$slots,"default"),m(r(Kw),{"as-child":""},{default:g(()=>[m(r(cn),{class:"h-4 w-4 opacity-50"})]),_:1})]),_:3},16,["class"]))}}),Kr=re({__name:"SelectValue",props:{placeholder:{},asChild:{type:Boolean},as:{}},setup(e){const t=e;return(n,s)=>(h(),H(r(ak),Ct(Tt(t)),{default:g(()=>[ce(n.$slots,"default")]),_:3},16))}}),Gr=re({__name:"SelectContent",props:{forceMount:{type:Boolean},position:{default:"popper"},bodyLock:{type:Boolean},memoDependencies:{},side:{},sideOffset:{},sideFlip:{type:Boolean},align:{},alignOffset:{},alignFlip:{type:Boolean},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},hideShiftedArrow:{type:Boolean},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},dir:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,s=t,o=ae(()=>{const{class:l,...i}=n;return i}),a=At(o,s);return(l,i)=>(h(),H(r(nk),null,{default:g(()=>[m(r(zw),Ae(r(a),{class:r(je)("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md",n.position==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:translate-x-1 data-[side=right]:-translate-x-1 data-[side=top]:-translate-y-1",n.class)}),{default:g(()=>[m(r(ik),{class:ge(r(je)("p-1",n.position==="popper"&&"w-full min-w-[var(--reka-select-trigger-width)]"))},{default:g(()=>[ce(l.$slots,"default")]),_:3},8,["class"])]),_:3},16,["class"])]),_:3}))}}),tC={class:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center"},ds=re({__name:"SelectItem",props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,n=ae(()=>{const{class:s,...o}=t;return o});return(s,o)=>(h(),H(r(Xw),Ae(n.value,{class:r(je)("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t.class)}),{default:g(()=>[b("span",tC,[m(r(Qw),null,{default:g(()=>[m(r(rn),{class:"h-4 w-4"})]),_:1})]),m(r(ek),null,{default:g(()=>[ce(s.$slots,"default")]),_:3})]),_:3},16,["class"]))}}),nC={class:"relative"},sC=["aria-label"],oC={key:0,class:"mt-1.5 flex flex-wrap gap-1"},rC=["aria-label","onClick"],aC={key:0},lC={class:"flex-1 truncate font-mono"},iC=["onMousedown"],uC={key:1,class:"h-3.5 w-3.5 shrink-0","aria-hidden":"true"},cC={class:"flex-1 truncate"},dC={key:1,class:"px-2 py-1 text-xs text-muted-foreground"},fC={key:2,class:"px-2 py-1 text-xs text-muted-foreground"},Mm=re({__name:"Combobox",props:{modelValue:{},options:{},placeholder:{},limit:{default:300},multi:{type:Boolean}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,s=t,{t:o}=ft(),a=W(null),l=W(null),i=W(!1),u=W("");function c(){var Y,ne;i.value=!i.value,i.value&&((ne=(Y=l.value)==null?void 0:Y.$el)==null||ne.focus())}function d(Y){i.value&&(Y.stopPropagation(),Y.preventDefault(),i.value=!1)}const f=ae(()=>Array.isArray(n.modelValue)?n.modelValue:[]),p=ae(()=>{const Y=(n.multi?u.value:String(n.modelValue??"")).trim().toLowerCase();return Y?n.options.filter(ne=>ne.toLowerCase().includes(Y)):n.options}),y=ae(()=>p.value.slice(0,n.limit)),S=ae(()=>p.value.length-y.value.length);function T(Y){n.multi?(u.value=String(Y),i.value=!0):(s("update:modelValue",String(Y)),i.value=!0)}function E(Y){if(n.multi){const ne=f.value.includes(Y)?f.value.filter(Q=>Q!==Y):[...f.value,Y];s("update:modelValue",ne)}else s("update:modelValue",Y),i.value=!1}function x(Y){s("update:modelValue",f.value.filter(ne=>ne!==Y))}function _(Y){const ne=Y.split(/[\s,;]+/).map(de=>de.trim()).filter(Boolean);if(!ne.length)return;const Q=[...f.value];for(const de of ne)Q.includes(de)||Q.push(de);s("update:modelValue",Q),u.value=""}function I(){n.multi&&_(u.value)}function k(Y){var Q;if(!n.multi)return;const ne=((Q=Y.clipboardData)==null?void 0:Q.getData("text"))??"";!ne.trim()||!/[\s,;]/.test(ne)||(Y.preventDefault(),_(ne))}function U(Y){var Q;const ne=Y.relatedTarget;ne&&((Q=a.value)!=null&&Q.contains(ne))||(i.value=!1)}const L=W(null),$=ae(()=>Math.min(Math.max(y.value.length*34+8,48),224));function R(){var Q;const Y=(Q=a.value)==null?void 0:Q.getBoundingClientRect();if(!Y)return;const ne=Y.bottom+6+$.value<=window.innerHeight;L.value={top:ne?Y.bottom+6:Math.max(Y.top-6-$.value,8),left:Math.max(Math.min(Y.left,window.innerWidth-Y.width-8),8),width:Y.width}}function G(){i.value&&R()}return Re(i,async Y=>{Y?(await it(),R(),window.addEventListener("scroll",G,!0),window.addEventListener("resize",G)):(window.removeEventListener("scroll",G,!0),window.removeEventListener("resize",G))}),Re($,()=>i.value&&R()),Co(()=>{window.removeEventListener("scroll",G,!0),window.removeEventListener("resize",G)}),(Y,ne)=>(h(),V("div",{ref_key:"rootRef",ref:a,onFocusin:ne[2]||(ne[2]=Q=>i.value=!0),onFocusout:U},[b("div",nC,[m(r(mt),{ref_key:"inputRef",ref:l,"model-value":e.multi?u.value:e.modelValue,placeholder:e.placeholder,autocomplete:"off",spellcheck:"false",class:"pr-8","onUpdate:modelValue":T,onKeydown:[An(d,["esc"]),An(Ie(I,["prevent"]),["enter"])],onPaste:k},null,8,["model-value","placeholder","onKeydown"]),b("button",{type:"button",tabindex:"-1",class:"absolute right-2 top-1/2 -translate-y-1/2 rounded-sm text-muted-foreground/70 transition-colors hover:text-foreground","aria-label":r(o)("combobox.toggle"),onMousedown:Ie(c,["prevent"])},[m(r(cn),{class:ge(["h-4 w-4 transition-transform",i.value?"rotate-180":""])},null,8,["class"])],40,sC)]),e.multi&&f.value.length?(h(),V("div",oC,[(h(!0),V(me,null,Pe(f.value,Q=>(h(),V("span",{key:Q,class:"inline-flex items-center gap-1 rounded-md border-transparent bg-primary text-primary-foreground shadow-sm px-2 py-0.5 font-mono text-xs"},[z(v(Q)+" ",1),b("button",{type:"button",class:"opacity-70 hover:opacity-100","aria-label":r(o)("common.dismiss"),onClick:de=>x(Q)},[m(r(Ao),{class:"h-3 w-3"})],8,rC)]))),128))])):se("",!0),(h(),H(br,{to:"body"},[i.value&&(y.value.length||e.multi&&u.value.trim())?(h(),V("ul",{key:0,class:"pointer-events-auto fixed z-[60] max-h-56 overflow-auto rounded-md border bg-popover p-1 text-sm shadow-md",style:en(L.value?{top:`${L.value.top}px`,left:`${L.value.left}px`,width:`${L.value.width}px`}:void 0),onPointerdown:ne[1]||(ne[1]=Ie(()=>{},["stop"]))},[e.multi&&u.value.trim()?(h(),V("li",aC,[b("button",{type:"button",class:"flex w-full items-center gap-2 rounded px-2 py-1.5 text-left hover:bg-accent hover:text-accent-foreground",onMousedown:ne[0]||(ne[0]=Ie(Q=>_(u.value),["prevent"]))},[m(r(Yn),{class:"h-3.5 w-3.5 shrink-0"}),b("span",lC,v(r(o)("combobox.add",{q:u.value.trim()})),1)],32)])):se("",!0),(h(!0),V(me,null,Pe(y.value,Q=>(h(),V("li",{key:Q},[b("button",{type:"button",class:ge(["flex w-full items-center gap-2 rounded px-2 py-1.5 text-left font-mono hover:bg-accent hover:text-accent-foreground",Q===e.modelValue||f.value.includes(Q)?"text-primary":""]),onMousedown:Ie(de=>E(Q),["prevent"])},[Q===e.modelValue||f.value.includes(Q)?(h(),H(r(rn),{key:0,class:"h-3.5 w-3.5 shrink-0"})):(h(),V("span",uC)),b("span",cC,v(Q),1)],42,iC)]))),128)),!y.value.length&&!(e.multi&&u.value.trim())?(h(),V("li",dC,v(r(o)("combobox.noMatch")),1)):S.value>0?(h(),V("li",fC,v(r(o)("combobox.more",{n:S.value})),1)):se("",!0)],36)):se("",!0)]))],544))}}),pC={class:"grid gap-y-1.5"},mC=["title"],hC={class:"pt-1.5 text-xs leading-relaxed text-muted-foreground"},gC=re({__name:"SamplingPanel",props:{modelValue:{},format:{}},setup(e){const t=e,{t:n}=ft(),s=[{key:"temperature",helpKey:"models.editor.samplingTipTemp",ph:"0.0 – 2.0"},{key:"top_p",helpKey:"models.editor.samplingTipTopP",ph:"0.0 – 1.0"},{key:"top_k",helpKey:"models.editor.samplingTipTopK",ph:"0 = off"},{key:"presence_penalty",helpKey:"models.editor.samplingTipPres",ph:"-2 – 2"},{key:"frequency_penalty",helpKey:"models.editor.samplingTipFreq",ph:"-2 – 2"},{key:"seed",helpKey:"models.editor.samplingTipSeed",ph:"integer"}],o=new Set(["presence_penalty","frequency_penalty","seed"]),a=t.format==="anthropic"?s.filter(i=>!o.has(i.key)):s;function l(i,u){t.modelValue[i]=String(u??"")}return(i,u)=>(h(),V(me,null,[b("div",pC,[(h(!0),V(me,null,Pe(r(a),c=>(h(),V("div",{key:c.key,class:"flex items-center gap-1.5"},[b("span",{class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-xs text-foreground/80",title:r(n)(c.helpKey)},[z(v(c.key)+" ",1),m(r(Dk),{class:"h-3 w-3 opacity-60","aria-label":`${c.key}: ${r(n)(c.helpKey)}`},null,8,["aria-label"])],8,mC),m(r(mt),{"model-value":t.modelValue[c.key],type:"number",step:"any",class:"ml-auto h-6 w-20 bg-background px-2 text-right font-mono text-xs",placeholder:c.ph,spellcheck:"false","aria-label":c.key,"onUpdate:modelValue":d=>l(c.key,d)},null,8,["model-value","placeholder","aria-label","onUpdate:modelValue"])]))),128))]),b("p",hC,v(r(n)("models.editor.samplingTipBase")),1)],64))}}),vC={class:"flex flex-wrap gap-1"},yC=["aria-pressed","onClick"],bC={class:"pt-1.5 text-xs leading-relaxed text-muted-foreground"},_C=re({__name:"ThinkingPanel",props:es({format:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=So(e,"modelValue"),n=e,{t:s}=ft(),o=["low","medium","high","xhigh"],a=["1024","4096","8192","16384"],l=n.format==="anthropic"?a:o;return(i,u)=>(h(),V(me,null,[b("div",vC,[(h(!0),V(me,null,Pe(r(l),c=>(h(),V("button",{key:c,type:"button",class:ge(["rounded border px-2 py-0.5 font-mono text-xs transition-colors",t.value===c?"border-primary bg-primary/15 font-medium text-primary":"border-border bg-background text-foreground/80 hover:text-foreground"]),"aria-pressed":t.value===c,onClick:d=>t.value=t.value===c?"":c},v(c),11,yC))),128))]),m(r(mt),{"model-value":t.value,class:"h-7 w-48 bg-background font-mono text-xs",spellcheck:"false",placeholder:n.format==="anthropic"?r(s)("models.editor.thinkingPhBudget"):r(s)("models.editor.thinkingPh"),list:n.format==="anthropic"?"thinking-budgets":"thinking-words","aria-label":r(s)("models.editor.thinkingLabel"),"onUpdate:modelValue":u[0]||(u[0]=c=>t.value=String(c??""))},null,8,["model-value","placeholder","list","aria-label"]),b("p",bC,v(r(s)("models.editor.thinkingTipBase")),1)],64))}}),xC={class:"flex shrink-0 items-center gap-2 pr-8"},wC={class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-primary/15 text-primary"},kC={class:"min-w-0"},CC={class:"min-h-0 flex-1 space-y-3 overflow-y-auto px-1 py-1.5"},SC={class:"space-y-1.5"},$C={key:0,class:"text-xs text-destructive"},TC={key:1,class:"text-xs text-muted-foreground"},AC={key:2,class:"text-xs text-muted-foreground"},EC={key:0,class:"rounded-md border border-dashed p-4 text-center text-sm text-muted-foreground"},OC={class:"space-y-2"},PC={class:"flex items-center justify-between"},MC={class:"text-xs text-muted-foreground"},IC=["aria-expanded","onClick"],RC={class:"text-xs font-semibold"},LC={class:"font-mono text-[11px] text-muted-foreground"},DC={key:1,class:"ml-auto shrink-0 text-[11px] text-muted-foreground"},NC={key:0,class:"px-1 py-0.5 pt-1.5 text-xs text-muted-foreground"},FC=["draggable","onDragstart","onDragover","onDrop"],qC=["aria-label","title","onMousedown"],BC={class:"w-3.5 shrink-0 text-right text-[11px] tabular-nums text-muted-foreground"},VC={class:"flex items-center gap-1.5"},UC={class:"w-44 shrink-0 [&_input]:h-7 [&_input]:text-xs"},HC=["title"],jC={class:"truncate font-mono"},zC={key:1,class:"opacity-40"},WC={class:"truncate font-mono"},KC={class:"space-y-1.5"},GC={class:"flex items-center justify-between"},YC={class:"text-xs font-medium text-foreground"},XC=["onClick"],JC={class:"space-y-1"},QC={class:"flex items-center justify-between"},ZC={class:"text-xs font-medium text-foreground"},eS=["onClick"],tS=["onClick"],nS={key:2,class:"inline-flex items-center gap-1 px-1 text-[11px] text-destructive"},sS={class:"flex items-center"},oS=["aria-expanded"],rS={key:0,class:"space-y-1 rounded-md border bg-muted/30 p-3 text-xs leading-relaxed text-muted-foreground"},aS={class:"space-y-1.5"},lS=["aria-expanded"],iS={key:0,class:"space-y-1.5 rounded-md border bg-muted/30 p-3"},uS={class:"text-xs text-muted-foreground"},cS={class:"flex shrink-0 justify-end gap-2"},dS=re({__name:"ModelEditor",props:es({providers:{},model:{},existingNames:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:es(["saved"],["update:open"]),setup(e,{emit:t}){const n=["openai","anthropic","responses"],s=[{key:"temperature",bounded:!0},{key:"top_p",bounded:!0},{key:"top_k",bounded:!1},{key:"presence_penalty",bounded:!0},{key:"frequency_penalty",bounded:!0},{key:"seed",bounded:!1}];function o(){return Object.fromEntries(s.map(w=>[w.key,""]))}const a=w=>s.some(C=>w.sampling[C.key].trim()!=="");function l(w){for(const C of s)w.sampling[C.key]=""}const i=W(null),u=(w,C)=>`${w}:${C}`,c=(w,C)=>i.value===u(w,C);function d(w,C,O){const A=u(w,C);O?i.value=A:i.value===A&&(i.value=null)}function f(w){const C={};for(const[O,A]of Object.entries(w))A.trim()!==""&&(C[O]=A);return on(Object.keys(C).length?C:void 0)}function p(w){const C=[];return w.thinking.trim()&&C.push(`${_("models.editor.thinkingLabel")}: ${w.thinking.trim()}`),a(w)&&C.push(`${_("models.editor.samplingLabel")}: ${f(w.sampling)}`),C.join(" · ")||_("models.editor.slotDefaults")}let y=0;function S(w){var O;const C=o();for(const A of s){const j=(O=w.sampling)==null?void 0:O[A.key];j!=null&&(C[A.key]=typeof j=="number"?JSON.stringify(j):String(j))}return{uid:++y,pid:w.id,model:w.model??"",thinking:w.thinking??"",sampling:C}}const T=e,E=So(e,"open"),x=t,{t:_}=ft(),I=W(""),k=W({openai:[],anthropic:[],responses:[]}),U=W({openai:!1,anthropic:!1,responses:!1}),L=W({openai:!1,anthropic:!1,responses:!1}),$=W(""),R=W(!1),G=W(""),Y=W({}),ne=W(!1),Q=W(!1),de=encodeURIComponent;function D(w){return T.providers.find(C=>C.id===w)}function P(w,C){const O=D(w);return O?C==="responses"?!!O.supportsResponses:O.formats.includes(C):!1}function N(w){return po(D(w))}function J(){G.value="",Y.value={},$.value="",ne.value=!1,k.value={openai:[],anthropic:[],responses:[]},U.value={openai:!1,anthropic:!1,responses:!1},L.value={openai:!1,anthropic:!1,responses:!1};const w=T.model;if(!w){Q.value=!1;return}I.value=w.name,$.value=w.paceRpm?String(w.paceRpm):"",Q.value=!!w.paceRpm;for(const C of n)k.value[C]=w[C].providers.map(S),U.value[C]=w[C].enabled}Re(E,w=>{w&&J()});function oe(w){var C;k.value[w].push(S({id:((C=T.providers[0])==null?void 0:C.id)??""})),U.value[w]=!0}function pe(w,C){const O=k.value[w].findIndex(A=>A.uid===C);O!==-1&&(k.value[w].splice(O,1),k.value[w].length||(U.value[w]=!1),delete Y.value[w])}function X(w){w.model="",w.thinking="",w.sampling=o()}const he=W(null),Z=W(null),Ye=(w,C)=>he.value===`${w}:${C}`,Ue=(w,C)=>{var O;return((O=Z.value)==null?void 0:O.fmt)===w&&Z.value.from===C};function ve(w,C){return Ue(w,C)?"bg-background/60 opacity-40":"bg-background/60"}function ye(w){const C=k.value[w],O=Z.value&&Z.value.fmt===w?Z.value.to:null,A=[],j=xe=>({key:"ph",ph:!0,slot:C[0],i:xe}),fe=(xe,be)=>({key:xe.uid,ph:!1,slot:xe,i:be});for(let xe=0;xe<C.length;xe++)O===xe&&A.push(j(xe)),A.push(fe(C[xe],xe));return O!==null&&O>=C.length&&A.push(j(C.length)),A}function ee(w){he.value=w}function we(){he.value=null}function _e(w,C,O){var A;if(he.value!==`${w}:${C}`){O.preventDefault();return}Z.value={fmt:w,from:C,to:C},(A=O.dataTransfer)==null||A.setData("text/plain",""),O.dataTransfer&&(O.dataTransfer.effectAllowed="move")}function Fe(w,C,O){if(!Z.value||Z.value.fmt!==w)return;O.preventDefault(),O.dataTransfer&&(O.dataTransfer.dropEffect="move");const A=O.currentTarget.getBoundingClientRect();Z.value.to=O.clientY>A.top+A.height/2?C+1:C}function at(w,C){!Z.value||Z.value.fmt!==w||C.target===C.currentTarget&&(C.preventDefault(),Z.value.to=k.value[w].length)}function B(w){const C=Z.value;if(Z.value=null,we(),!C||C.fmt!==w||C.to===C.from||C.to===C.from+1)return;const O=k.value[w],[A]=O.splice(C.from,1);O.splice(C.to>C.from?C.to-1:C.to,0,A)}function K(){Z.value=null,we()}const te=ae(()=>!R.value&&(!!T.model||!!I.value.trim()));function ue(){var O;G.value="",Y.value={};const w=I.value.trim();if(!w)return G.value=_("models.editor.errNameRequired"),!1;if(w.includes("/"))return G.value=_("models.editor.errNameSlash"),!1;if(!T.model&&T.existingNames.includes(w))return G.value=_("models.editor.errNameExists",{name:w}),!1;for(const A of k.value.anthropic)if(A.thinking.trim()&&!/^\d+$/.test(A.thinking.trim()))return Y.value.anthropic=_("models.editor.errThinkingBudget"),!1;const C={temperature:[0,2,!0],top_p:[0,1,!1],presence_penalty:[-2,2,!1],frequency_penalty:[-2,2,!1]};for(const A of n)for(const j of k.value[A])for(const{key:fe,bounded:xe}of s){const be=(O=j.sampling[fe])==null?void 0:O.trim();if(!be)continue;const Le=Number(be),qe=C[fe];if(!Number.isFinite(Le)||qe&&(Le<qe[0]||(qe[2]?Le>=qe[1]:Le>qe[1])))return Y.value[A]=xe?_("models.editor.errSamplingRange",{key:fe}):_("models.editor.errSampling"),!1;if(fe==="seed"&&!Number.isInteger(Le))return Y.value[A]=_("models.editor.errSampling"),!1}return!0}function ie(w){var O;const C={};for(const A of s){const j=(O=w[A.key])==null?void 0:O.trim();j&&(C[A.key]=Number(j))}return Object.keys(C).length?C:void 0}function le(w){return w.map(C=>{const O={id:C.pid};C.model.trim()&&(O.model=C.model.trim()),C.thinking.trim()&&(O.thinking=C.thinking.trim());const A=ie(C.sampling);return A&&(O.sampling=A),O})}async function M(){if(!(!te.value||!ue())){R.value=!0;try{const w={};for(const O of n)w[O]={enabled:U.value[O],slots:le(k.value[O])};w.paceRpm=Number($.value)||0;const C=await Ve("PUT",`/admin/models/${de(I.value.trim())}`,w);Be(_("models.editor.savedToast",{name:C.model.name}),"success"),E.value=!1,x("saved",C.model)}catch(w){Be(w.message,"error")}finally{R.value=!1}}}const q=ae(()=>T.providers.length>0),F=ae(()=>n.filter(w=>k.value[w].length>0||T.providers.some(C=>P(C.id,w))));return(w,C)=>(h(),H(r(zs),{open:E.value,"onUpdate:open":C[5]||(C[5]=O=>E.value=O)},{default:g(()=>[m(r(Ws),{class:"max-w-xl"},{default:g(()=>[C[8]||(C[8]=b("datalist",{id:"thinking-words"},[b("option",{value:"low"}),b("option",{value:"medium"}),b("option",{value:"high"}),b("option",{value:"xhigh"})],-1)),C[9]||(C[9]=b("datalist",{id:"thinking-budgets"},[b("option",{value:"1024"}),b("option",{value:"4096"}),b("option",{value:"8192"}),b("option",{value:"16384"})],-1)),b("div",xC,[b("span",wC,[m(r(wo),{class:"h-4 w-4"})]),b("div",kC,[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(e.model?r(_)("models.editor.editTitle"):r(_)("models.editor.createTitle")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(r(_)("models.editor.desc")),1)]),_:1})])]),b("div",CC,[b("div",SC,[m(r(_t),{for:"m-name"},{default:g(()=>[z(v(r(_)("models.editor.nameLabel")),1)]),_:1}),m(r(mt),{id:"m-name",modelValue:I.value,"onUpdate:modelValue":C[0]||(C[0]=O=>I.value=O),disabled:!!e.model,placeholder:r(_)("models.editor.namePh"),class:"font-mono",spellcheck:"false",autocomplete:"off"},null,8,["modelValue","disabled","placeholder"]),G.value?(h(),V("p",$C,v(G.value),1)):e.model?(h(),V("p",TC,v(r(_)("models.editor.nameEditHint")),1)):(h(),V("p",AC,v(r(_)("models.editor.nameHint")),1))]),q.value?(h(),V(me,{key:1},[b("div",OC,[b("div",PC,[m(r(_t),null,{default:g(()=>[z(v(r(_)("models.editor.chainTitle")),1)]),_:1}),b("span",MC,v(r(_)("models.editor.chainPriority")),1)]),(h(!0),V(me,null,Pe(F.value,O=>(h(),V("div",{key:O,class:"rounded-md border bg-muted/30 p-2"},[b("button",{type:"button",class:"flex w-full cursor-pointer items-center gap-1.5 text-left","aria-expanded":L.value[O],onClick:A=>L.value[O]=!L.value[O]},[b("span",{class:ge(["h-2 w-2 rounded-full",r(pt)[O].solid])},null,2),b("span",RC,v(r(_)(r(_n)[O].label)),1),b("span",LC,v(r(_n)[O].endpoint),1),Y.value[O]?(h(),H(r(ko),{key:0,class:"h-3 w-3 shrink-0 text-destructive",title:Y.value[O]},null,8,["title"])):se("",!0),k.value[O].length?(h(),V("span",DC,v(r(_)("models.editor.fmtSummary",{n:k.value[O].length})),1)):se("",!0),m(r(cn),{class:ge(["h-3.5 w-3.5 shrink-0 text-muted-foreground/70 transition-transform",{"rotate-180":L.value[O]}])},null,8,["class"])],8,IC),L.value[O]&&!k.value[O].length?(h(),V("div",NC,v(r(_)("models.editor.emptyChain")),1)):Zo((h(),H(Vf,{key:1,tag:"div",name:"slots",class:"space-y-1",onDragover:A=>at(O,A),onDrop:Ie(A=>B(O),["prevent"])},{default:g(()=>[(h(!0),V(me,null,Pe(ye(O),A=>(h(),V("div",{key:A.key,class:ge(["space-y-1",A.ph?"ph h-8 shrink-0 rounded border border-dashed border-primary/50 bg-primary/10":""]),draggable:!A.ph&&Ye(O,A.i),onDragstart:j=>_e(O,A.i,j),onDragover:j=>Fe(O,A.i,j),onDrop:Ie(j=>B(O),["prevent"]),onDragend:K,onMouseup:we},[A.ph?se("",!0):(h(),V("div",{key:0,class:ge(["flex items-center gap-1 rounded px-1 py-0.5",ve(O,A.i)])},[b("button",{type:"button",class:"shrink-0 cursor-grab rounded p-0.5 text-muted-foreground/60 hover:text-foreground active:cursor-grabbing","aria-label":r(_)("models.editor.dragAria"),title:r(_)("models.editor.dragAria"),onMousedown:j=>ee(`${O}:${A.i}`)},[m(r(Fk),{class:"h-3.5 w-3.5"})],40,qC),b("span",BC,v(A.i+1),1),m(r(zr),{modelValue:A.slot.pid,"onUpdate:modelValue":[j=>A.slot.pid=j,j=>X(A.slot)]},{default:g(()=>[m(r(Wr),{class:"h-7 w-28 shrink-0 px-2 text-xs"},{default:g(()=>[m(r(Kr),{placeholder:r(_)("models.editor.providerPh")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[(h(!0),V(me,null,Pe(e.providers.filter(j=>P(j.id,O)),j=>(h(),H(r(ds),{key:j.id,value:j.id,class:"text-xs"},{default:g(()=>[b("span",VC,[b("span",{class:ge(["h-1.5 w-1.5 rounded-full",r(ps)(j.id).solid])},null,2),z(" "+v(j.name),1)])]),_:2},1032,["value"]))),128))]),_:2},1024)]),_:2},1032,["modelValue","onUpdate:modelValue"]),b("div",UC,[m(Mm,{modelValue:A.slot.model,"onUpdate:modelValue":j=>A.slot.model=j,options:N(A.slot.pid),placeholder:r(_)("models.editor.upstreamPh")},null,8,["modelValue","onUpdate:modelValue","options","placeholder"])]),m(r(ya),{open:c(O,A.slot.uid),"onUpdate:open":j=>d(O,A.slot.uid,j)},{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[b("button",{type:"button",class:ge(["ml-auto inline-flex h-7 max-w-44 min-w-0 shrink-0 cursor-pointer items-center gap-1 rounded-md border px-2 text-[11px] outline-none transition-colors",A.slot.thinking.trim()||a(A.slot)?"border-primary/40 bg-primary/10 text-primary":"border-dashed text-muted-foreground/70 hover:border-foreground/30 hover:text-foreground"]),title:p(A.slot)},[A.slot.thinking.trim()||a(A.slot)?(h(),V(me,{key:0},[A.slot.thinking.trim()?(h(),V(me,{key:0},[m(r(xo),{class:"h-3 w-3 shrink-0"}),b("span",jC,v(A.slot.thinking.trim()),1)],64)):se("",!0),A.slot.thinking.trim()&&a(A.slot)?(h(),V("span",zC,"·")):se("",!0),a(A.slot)?(h(),V(me,{key:2},[m(r(vs),{class:"h-3 w-3 shrink-0"}),b("span",WC,v(f(A.slot.sampling)),1)],64)):se("",!0)],64)):(h(),V(me,{key:1},[m(r(Yk),{class:"h-3 w-3 shrink-0"}),z(" "+v(r(_)("models.editor.slotDefaults")),1)],64))],10,HC)]),_:2},1024),m(r(_a),{align:"end",class:"w-96 space-y-2.5 rounded-md border-primary/30 p-3 shadow-lg"},{default:g(()=>[b("div",KC,[b("div",GC,[b("div",YC,v(r(_)("models.editor.thinkingLabel")),1),b("button",{type:"button",class:"cursor-pointer text-xs text-muted-foreground transition-colors hover:text-foreground",onClick:j=>A.slot.thinking=""},v(r(_)("models.editor.thinkingClear")),9,XC)]),m(_C,{modelValue:A.slot.thinking,"onUpdate:modelValue":j=>A.slot.thinking=j,format:O},null,8,["modelValue","onUpdate:modelValue","format"])]),C[6]||(C[6]=b("div",{class:"border-t"},null,-1)),b("div",JC,[b("div",QC,[b("div",ZC,v(r(_)("models.editor.samplingLabel")),1),b("button",{type:"button",class:"cursor-pointer text-xs text-muted-foreground transition-colors hover:text-foreground",onClick:j=>l(A.slot)},v(r(_)("models.editor.samplingClear")),9,eS)]),m(gC,{modelValue:A.slot.sampling,"onUpdate:modelValue":j=>A.slot.sampling=j,format:O},null,8,["modelValue","onUpdate:modelValue","format"])]),C[7]||(C[7]=b("div",{class:"border-t"},null,-1)),b("button",{type:"button",class:"-mx-1 flex w-full cursor-pointer items-center gap-1.5 rounded px-1 py-1 text-xs text-destructive transition-colors hover:bg-destructive/10",onClick:j=>{i.value=null,pe(O,A.slot.uid)}},[m(r(hr),{class:"h-3.5 w-3.5"}),z(v(r(_)("models.editor.removeSlot")),1)],8,tS)]),_:2},1024)]),_:2},1032,["open","onUpdate:open"])],2))],42,FC))),128))]),_:2},1032,["onDragover","onDrop"])),[[or,L.value[O]]]),Y.value[O]&&L.value[O]?(h(),V("span",nS,[m(r(ko),{class:"h-3 w-3"}),z(v(Y.value[O]),1)])):se("",!0),Zo(m(r(ke),{variant:"outline",size:"sm",class:"h-7 w-full border-dashed text-xs",disabled:!e.providers.some(A=>P(A.id,O)),onClick:A=>oe(O)},{default:g(()=>[m(r(Yn),{class:"h-3.5 w-3.5"}),z(v(r(_)("models.editor.addSlot")),1)]),_:1},8,["disabled","onClick"]),[[or,L.value[O]]])]))),128))]),b("div",sS,[b("button",{type:"button",class:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground","aria-expanded":ne.value,onClick:C[1]||(C[1]=O=>ne.value=!ne.value)},[m(r(cu),{class:"h-3.5 w-3.5"}),z(" "+v(r(_)("models.editor.helpToggle")),1)],8,oS)]),ne.value?(h(),V("div",rS,[b("p",null,v(r(_)("models.editor.helpUpstream")),1),b("p",null,v(r(_)("models.editor.helpThinking")),1),b("p",null,v(r(_)("models.editor.helpSampling")),1)])):se("",!0),b("div",aS,[b("button",{type:"button",class:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground","aria-expanded":Q.value,onClick:C[2]||(C[2]=O=>Q.value=!Q.value)},[m(r(vs),{class:"h-3.5 w-3.5"}),z(" "+v(r(_)("models.editor.advancedToggle"))+" ",1),m(r(cn),{class:ge(["h-3.5 w-3.5 transition-transform",{"rotate-180":Q.value}])},null,8,["class"])],8,lS),Q.value?(h(),V("div",iS,[m(r(_t),{for:"m-pace"},{default:g(()=>[z(v(r(_)("models.editor.paceLabel")),1)]),_:1}),m(r(mt),{id:"m-pace",modelValue:$.value,"onUpdate:modelValue":C[3]||(C[3]=O=>$.value=O),type:"number",min:"0",inputmode:"numeric",placeholder:r(_)("models.editor.pacePh"),class:"w-32"},null,8,["modelValue","placeholder"]),b("p",uS,v(r(_)("models.editor.paceHint")),1)])):se("",!0)])],64)):(h(),V("div",EC,v(r(_)("models.editor.noProviders")),1))]),b("div",cS,[m(r(ke),{variant:"outline",disabled:R.value,onClick:C[4]||(C[4]=O=>E.value=!1)},{default:g(()=>[z(v(r(_)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:!te.value,onClick:M},{default:g(()=>[R.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):se("",!0),z(" "+v(r(_)("models.editor.save")),1)]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["open"]))}}),Im=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},fS=Im(dS,[["__scopeId","data-v-14460ede"]]);function dd(e){let t=5381,n=-2128831035;for(let s=0;s<e.length;s++){const o=e.charCodeAt(s);t=(t<<5)+t+o|0,n=(n^o)*16777619|0}return(t>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")}function gi(e){if(Array.isArray(e))return e.map(gi);if(e&&typeof e=="object"){const t=e,n={};for(const[s,o]of Object.entries(t))s!=="cache_control"&&(n[s]=gi(o));return t.type==="input_text"&&(n.type="text"),n}return e}function pS(e){if(!e||typeof e!="object")return e;const t=gi({...e});return typeof t.content=="string"&&(t.content=[{type:"text",text:t.content}]),t.type==="message"&&delete t.type,t}const fd=80;function Rm(e){const t=e.replace(/\s+/g," ").trim();return t.length>fd?`${t.slice(0,fd)}…`:t}function*Lm(e){if(typeof e=="string"){e.trim()&&(yield e);return}if(Array.isArray(e)){for(const t of e)yield*Lm(t);return}if(e&&typeof e=="object"){const t=e.text;typeof t=="string"&&t.trim()&&(yield t)}}function mS(e){let t=e;for(;;){const n=/^\s*<([a-z][a-z0-9_-]*)((\s[^>]*)?)>/.exec(t);if(!n)return t;const s=t.indexOf(`</${n[1]}>`,n[0].length);if(s===-1)return t;t=t.slice(s+n[1].length+3)}}function hS(e){const t=s=>{const o=[];for(const a of e){if(!a||typeof a!="object")continue;const l=a;s.includes(l.role)&&o.push(...Lm(l.content))}return o},n=[...t(["user"]),...t(["assistant","system"])];for(const s of n){const o=mS(s).trim();if(o)return Rm(o)}return""}function gS(e,t){const n=new RegExp(`"${t}"\\s*:\\s*\\[`).exec(e);if(!n)return[];let s=n.index+n[0].length;const o=e.length,a=[];for(;;){for(;s<o&&/\s/.test(e[s]);)s++;if(s>=o||e[s]==="]")break;const l=s;let i=0,u=!1,c=!1,d=!1;for(;s<o;){const f=e[s++];if(u)c?c=!1:f==="\\"?c=!0:f==='"'&&(u=!1);else if(f==='"')u=!0;else if(f==="{"||f==="[")i++;else if((f==="}"||f==="]")&&(i--,i<=0)){d=!0;break}}if(!d||i!==0)break;for(a.push(e.slice(l,s));s<o&&/\s/.test(e[s]);)s++;if(e[s]===","){s++;continue}break}return a}function vS(e){const t=/"user_id"\s*:\s*"((?:[^"\\]|\\.)*)"/.exec(e);if(!t)return"";try{return JSON.parse(`"${t[1]}"`)}catch{return""}}function yS(e){var l;let t=null;try{t=JSON.parse(e)}catch{t=null}let n=[],s="";if(t&&typeof t=="object"){const i=t;typeof((l=i.metadata)==null?void 0:l.user_id)=="string"&&(s=i.metadata.user_id),Array.isArray(i.messages)?n=i.messages:Array.isArray(i.input)?n=i.input:typeof i.input=="string"&&i.input&&(n=[{role:"user",content:i.input}])}else{const i=/"messages"\s*:\s*\[/.test(e)?"messages":"input";n=gS(e,i).map(u=>{try{return JSON.parse(u)}catch{return null}}).filter(u=>u!==null),s=vS(e)}const o=[];let a="";for(const i of n)a=dd(`${a}|${dd(JSON.stringify(pS(i)))}`),o.push(a);return{hashes:o,uid:s,title:Rm(hS(n))}}function bS(e){const t=e.length,n=Array.from({length:t},(i,u)=>u),s=i=>{let u=i;for(;n[u]!==u;)u=n[u];for(;n[i]!==u;){const c=n[i];n[i]=u,i=c}return u},o=(i,u)=>{const c=s(i),d=s(u);c!==d&&(n[Math.max(c,d)]=Math.min(c,d))},a=new Map,l=new Map;for(let i=0;i<t;i++){const u=e[i];if(u.uid){const c=l.get(u.uid);c!==void 0?o(i,c):l.set(u.uid,i)}for(const c of u.hashes){const d=a.get(c);d!==void 0?o(i,d):a.set(c,i)}}return e.map((i,u)=>s(u))}function _S(e){const t=e.map(yS);return{ids:bS(t),shapes:t}}const xS=re({__name:"Switch",props:es({class:{type:[Boolean,null,String,Object,Array]},id:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=e,n=So(e,"modelValue");return(s,o)=>(h(),H(r(gk),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=a=>n.value=a),id:t.id,class:ge(r(je)("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",t.class))},{default:g(()=>[m(r(yk),{class:"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"})]),_:1},8,["modelValue","id","class"]))}}),wS={key:0,class:"space-y-2"},kS={key:0,class:"flex flex-wrap gap-x-3 gap-y-0.5 rounded-md border bg-muted/30 px-2.5 py-1.5"},CS={class:"text-foreground"},SS={class:"border-b bg-muted/30 px-2.5 py-1"},$S={class:"space-y-1.5 px-2.5 py-1.5"},TS={key:0,class:"break-all font-mono text-[11px] text-muted-foreground"},AS={key:1,class:"space-y-1"},ES=["src","alt","onClick"],OS={class:"flex flex-wrap items-center gap-x-2 font-mono text-[11px] text-muted-foreground"},PS={class:"break-all"},MS=["href"],IS={key:2,class:"rounded bg-muted/50 px-2 py-1"},RS={class:"flex items-center gap-1 font-mono text-[11px] font-medium"},LS={class:"mt-0.5 whitespace-pre-wrap break-all font-mono text-[11px] text-muted-foreground"},DS=["onClick"],NS={key:3},FS={key:0,class:"mb-0.5 text-[11px] font-medium text-muted-foreground"},qS=["onClick"],BS={key:1,class:"overflow-hidden rounded-md border"},VS={class:"border-b bg-muted/30 px-2.5 py-1 text-[11px] font-medium text-muted-foreground"},US=["onClick"],HS={class:"font-mono text-[11px] font-medium"},jS={key:0,class:"min-w-0 truncate text-[11px] text-muted-foreground"},zS={key:0,class:"space-y-1 px-2.5 pb-1.5"},WS={key:0,class:"whitespace-pre-wrap break-words text-xs text-muted-foreground"},KS={key:1,class:"whitespace-pre-wrap break-all font-mono text-[11px] text-muted-foreground"},GS={key:2,class:"flex flex-wrap items-center gap-x-3 gap-y-0.5 font-mono text-[11px] text-muted-foreground"},YS={key:0},XS={key:1},JS={key:2},QS={key:3},ZS={key:1,class:"max-h-96 overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted/50 p-3 font-mono text-xs"},e2=["src","alt"],Qs=2e3,pd=160,md=re({__name:"DebugContent",props:{body:{},kind:{}},setup(e){const t=e,{t:n}=ft(),s=W(new Set),o=W(null);function a(D){const P=new Set(s.value);P.has(D)?P.delete(D):P.add(D),s.value=P}function l(D,P){return s.value.has(P)||D.length<=Qs?D:D.slice(0,Qs)}const i=D=>typeof D=="string"?D:D==null?"":String(D),u=D=>typeof D=="number"?D:void 0,c=D=>D.length>pd?`${D.slice(0,pd)}…`:D;function d(D){if(typeof D=="string")try{return JSON.stringify(JSON.parse(D),null,2)}catch{return D}try{return JSON.stringify(D,null,2)}catch{return i(D)}}function f(D){if(typeof D!="string")return D;try{return JSON.parse(D)}catch{return D}}function p(D,P=!1){return{t:"text",text:i(D),think:P||void 0}}function y(D){var J;const P=typeof D.image_url=="string"?D.image_url:((J=D.image_url)==null?void 0:J.url)??D.url;if(P)return P;const N=D.source;return(N==null?void 0:N.type)==="base64"&&typeof N.data=="string"?`data:${i(N.media_type)||"image/png"};base64,${N.data}`:(N==null?void 0:N.type)==="url"&&typeof N.url=="string"?N.url:""}function S(D){const P=y(D);if(!P||!/^data:image\//.test(P)&&!/^https?:\/\//.test(P)){const N=P?c(P):"";return{t:"note",text:N?`${n("models.debugImage")} · ${N}`:n("models.debugImage")}}return{t:"img",src:P,note:P.startsWith("data:")?`base64 ${(P.length/1024).toFixed(1)}KB`:c(P)}}function T(D){if(typeof D=="string")return[p(D)];if(!D||typeof D!="object")return D==null?[]:[p(d(D))];const P=D;switch(P.type){case"text":case"input_text":case"output_text":case"refusal":return[p(P.text??P.refusal)];case"thinking":return[p(P.thinking??P.text,!0)];case"redacted_thinking":return[{t:"note",text:n("models.debugThinking")}];case"image_url":case"input_image":case"image":return[S(P)];case"tool_use":case"function_call":return[{t:"call",name:i(P.name),args:d(P.type==="tool_use"?P.input:P.arguments)}];case"tool_result":return[...P.tool_use_id?[{t:"note",text:c(i(P.tool_use_id))}]:[],...E(P.content)];case"function_call_output":return[...P.call_id?[{t:"note",text:c(i(P.call_id))}]:[],...E(P.output)];default:return[p(d(P))]}}function E(D){return D==null?[]:Array.isArray(D)?D.flatMap(T):typeof D=="object"?T(D):[p(D)]}function x(D){return Array.isArray(D.tool_calls)?D.tool_calls.flatMap(P=>{const N=P==null?void 0:P.function;return N?[{t:"call",name:i(N.name),args:d(f(N.arguments))}]:[]}):[]}function _(D){if(typeof D=="string")return{role:"user",blocks:[p(D)]};if(!D||typeof D!="object")return null;const P=D,N=[...E(P.content),...x(P)];return N.length?{role:i(P.role)||"—",blocks:N}:null}function I(D){if(!D||typeof D!="object")return null;const P=D,N=P.function??P,J=i(N.name);if(!J)return null;const oe=i(N.description),pe=N.parameters??N.input_schema;return{name:J,desc:oe||void 0,schema:pe!=null?d(pe):void 0}}const k=new Set(["messages","tools","input","system","instructions","tool_choice"]);function U(D){const P=[];for(const[X,he]of Object.entries(D))k.has(X)||he==null||P.push({k:X,v:c(typeof he=="object"?JSON.stringify(he):String(he))});const N=[],J=D.system??D.instructions;J!=null&&N.push({role:"system",blocks:E(J)});const oe=typeof D.input=="string"?[D.input]:D.messages??D.input;if(Array.isArray(oe))for(const X of oe){const he=_(X);he&&N.push(he)}const pe=Array.isArray(D.tools)?D.tools.map(I).filter(X=>X!==null):[];return{params:P,cards:N,tools:pe}}function L(D){return/^\s*(event|data|id|retry):/m.test(D)}function $(D){const P=[];for(const N of D.split(`
|
|
333
333
|
`)){const J=N.trim();if(!J.startsWith("data:"))continue;const oe=J.slice(5).trim();if(!(!oe||oe==="[DONE]"))try{P.push(JSON.parse(oe))}catch{}}return P}function R(D){var ve,ye;let P="",N="";const J=new Map;let oe,pe,X;const he=ee=>{let we=J.get(ee);return we||(we={name:"",args:""},J.set(ee,we)),we},Z=ee=>{if(!ee||typeof ee!="object")return;const we=ee;oe=u(we.prompt_tokens)??u(we.input_tokens)??oe,pe=u(we.completion_tokens)??u(we.output_tokens)??pe};for(const ee of D){if(Array.isArray(ee.choices)){const _e=ee.choices[0],Fe=_e==null?void 0:_e.delta;if(Fe&&(typeof Fe.content=="string"&&(P+=Fe.content),typeof Fe.reasoning_content=="string"&&(N+=Fe.reasoning_content),Array.isArray(Fe.tool_calls)))for(const at of Fe.tool_calls){const B=he(typeof at.index=="number"?at.index:0),K=at.function;typeof(K==null?void 0:K.name)=="string"&&(B.name+=K.name),typeof(K==null?void 0:K.arguments)=="string"&&(B.args+=K.arguments)}typeof(_e==null?void 0:_e.finish_reason)=="string"&&_e.finish_reason&&(X=_e.finish_reason)}Z(ee.usage);const we=i(ee.type);if(we==="message_start"&&Z((ve=ee.message)==null?void 0:ve.usage),we==="content_block_delta"){const _e=ee.delta;typeof(_e==null?void 0:_e.text)=="string"&&(P+=_e.text),typeof(_e==null?void 0:_e.thinking)=="string"&&(N+=_e.thinking),typeof(_e==null?void 0:_e.partial_json)=="string"&&(he(typeof ee.index=="number"?ee.index:0).args+=_e.partial_json)}if(we==="content_block_start"){const _e=ee.content_block;(_e==null?void 0:_e.type)==="tool_use"&&(he(typeof ee.index=="number"?ee.index:0).name=i(_e.name))}if(we==="message_delta"){const _e=ee.delta;typeof(_e==null?void 0:_e.stop_reason)=="string"&&_e.stop_reason&&(X=_e.stop_reason),Z(ee.usage)}we==="response.output_text.delta"&&typeof ee.delta=="string"&&(P+=ee.delta),we==="response.completed"&&Z((ye=ee.response)==null?void 0:ye.usage)}const Ye=[];N&&Ye.push({role:"assistant",blocks:[p(N,!0)]});const Ue=[...J.values()].filter(ee=>ee.name||ee.args).map(ee=>({t:"call",name:ee.name,args:ee.args?d(ee.args):void 0}));return(P||Ue.length)&&Ye.push({role:"assistant",blocks:[...P?[p(P)]:[],...Ue]}),{cards:Ye,inp:oe,out:pe,finish:X,chunks:D.length}}function G(D){if(Array.isArray(D.choices)){const P=[];let N;for(const oe of D.choices){const pe=oe.message;if(!pe)continue;const X=[...typeof pe.reasoning_content=="string"&&pe.reasoning_content?[p(pe.reasoning_content,!0)]:[],...E(pe.content),...x(pe)];X.length&&P.push({role:i(pe.role)||"assistant",blocks:X}),typeof oe.finish_reason=="string"&&oe.finish_reason&&(N=oe.finish_reason)}const J=D.usage;return!P.length&&!J?null:{cards:P,inp:u(J==null?void 0:J.prompt_tokens),out:u(J==null?void 0:J.completion_tokens),finish:N}}if(Array.isArray(D.content)){const P=E(D.content),N=D.usage;return!P.length&&!N?null:{cards:P.length?[{role:"assistant",blocks:P}]:[],inp:u(N==null?void 0:N.input_tokens),out:u(N==null?void 0:N.output_tokens),finish:typeof D.stop_reason=="string"&&D.stop_reason?D.stop_reason:void 0}}if(Array.isArray(D.output)){const P=[];for(const J of D.output)if(J.type==="function_call")P.push({role:"assistant",blocks:[{t:"call",name:i(J.name),args:d(f(J.arguments))}]});else if(J.type==="message"){const oe=E(J.content);oe.length&&P.push({role:i(J.role)||"assistant",blocks:oe})}const N=D.usage;return!P.length&&!N?null:{cards:P,inp:u(N==null?void 0:N.input_tokens),out:u(N==null?void 0:N.output_tokens),finish:i(D.status)||void 0}}return null}const Y=ae(()=>{if(t.kind!=="request"||!t.body)return null;try{return U(JSON.parse(t.body))}catch{return null}}),ne=ae(()=>{if(t.kind!=="response"||!t.body)return null;try{const D=G(JSON.parse(t.body));if(D)return D}catch{if(L(t.body)){const D=$(t.body);if(D.length)return R(D)}}return null}),Q=ae(()=>{var D,P;return((D=Y.value)==null?void 0:D.cards)??((P=ne.value)==null?void 0:P.cards)??[]}),de=ae(()=>{if(!t.body)return"";try{return JSON.stringify(JSON.parse(t.body),null,2)}catch{return t.body}});return(D,P)=>(h(),V(me,null,[Y.value||ne.value?(h(),V("div",wS,[Y.value&&Y.value.params.length?(h(),V("div",kS,[(h(!0),V(me,null,Pe(Y.value.params,N=>(h(),V("span",{key:N.k,class:"font-mono text-[11px] text-muted-foreground"},[b("span",CS,v(N.k),1),z("="+v(N.v),1)]))),128))])):se("",!0),(h(!0),V(me,null,Pe(Q.value,(N,J)=>(h(),V("div",{key:J,class:"overflow-hidden rounded-md border"},[b("div",SS,[m(r(Oe),{variant:"secondary",class:"font-mono text-[10px]"},{default:g(()=>[z(v(N.role),1)]),_:2},1024)]),b("div",$S,[(h(!0),V(me,null,Pe(N.blocks,(oe,pe)=>(h(),V(me,{key:pe},[oe.t==="note"?(h(),V("p",TS,v(oe.text),1)):oe.t==="img"?(h(),V("div",AS,[b("img",{src:oe.src,alt:r(n)("models.debugImage"),loading:"lazy",class:"max-h-28 max-w-full cursor-zoom-in rounded border bg-muted/30 object-contain",onClick:X=>o.value=oe.src},null,8,ES),b("p",OS,[b("span",PS,v(oe.note),1),oe.src.startsWith("data:")?se("",!0):(h(),V("a",{key:0,href:oe.src,target:"_blank",rel:"noreferrer",class:"text-primary hover:underline",onClick:P[0]||(P[0]=Ie(()=>{},["stop"]))},v(r(n)("models.debugOpen")),9,MS))])])):oe.t==="call"?(h(),V("div",IS,[b("p",RS,[m(r(cd),{class:"h-3 w-3 shrink-0 text-muted-foreground"}),z(v(oe.name),1)]),oe.args?(h(),V(me,{key:0},[b("pre",LS,v(l(oe.args,`${J}-${pe}`)),1),oe.args.length>Qs?(h(),V("button",{key:0,type:"button",class:"text-[11px] text-primary hover:underline",onClick:X=>a(`${J}-${pe}`)},v(s.value.has(`${J}-${pe}`)?r(n)("models.debugLess"):r(n)("models.debugMore",{n:oe.args.length-Qs})),9,DS)):se("",!0)],64)):se("",!0)])):(h(),V("div",NS,[oe.think?(h(),V("p",FS,v(r(n)("models.debugThinking")),1)):se("",!0),b("p",{class:ge(["whitespace-pre-wrap break-words text-xs leading-relaxed",oe.think?"italic text-muted-foreground":""])},v(l(oe.text,`${J}-${pe}`)),3),oe.text.length>Qs?(h(),V("button",{key:1,type:"button",class:"mt-0.5 text-[11px] text-primary hover:underline",onClick:X=>a(`${J}-${pe}`)},v(s.value.has(`${J}-${pe}`)?r(n)("models.debugLess"):r(n)("models.debugMore",{n:oe.text.length-Qs})),9,qS)):se("",!0)]))],64))),128))])]))),128)),Y.value&&Y.value.tools.length?(h(),V("div",BS,[b("div",VS,v(r(n)("models.debugTools"))+" ("+v(Y.value.tools.length)+")",1),(h(!0),V(me,null,Pe(Y.value.tools,(N,J)=>(h(),V("div",{key:J,class:"border-b last:border-b-0"},[b("button",{type:"button",class:"flex w-full items-center gap-1.5 px-2.5 py-1 text-left hover:bg-muted/50",onClick:oe=>a(`tool-${J}`)},[m(r(Tm),{class:ge(["h-3 w-3 shrink-0 text-muted-foreground transition-transform",s.value.has(`tool-${J}`)?"rotate-90":""])},null,8,["class"]),m(r(cd),{class:"h-3 w-3 shrink-0 text-muted-foreground"}),b("span",HS,v(N.name),1),N.desc?(h(),V("span",jS,v(N.desc),1)):se("",!0)],8,US),s.value.has(`tool-${J}`)?(h(),V("div",zS,[N.desc?(h(),V("p",WS,v(N.desc),1)):se("",!0),N.schema?(h(),V("pre",KS,v(N.schema),1)):se("",!0)])):se("",!0)]))),128))])):se("",!0),ne.value&&(ne.value.inp!=null||ne.value.out!=null||ne.value.finish||ne.value.chunks)?(h(),V("div",GS,[ne.value.inp!=null?(h(),V("span",YS,v(r(n)("models.debugTokIn"))+" "+v(ne.value.inp),1)):se("",!0),ne.value.out!=null?(h(),V("span",XS,v(r(n)("models.debugTokOut"))+" "+v(ne.value.out),1)):se("",!0),ne.value.finish?(h(),V("span",JS,v(r(n)("models.debugFinish"))+": "+v(ne.value.finish),1)):se("",!0),ne.value.chunks?(h(),V("span",QS,v(r(n)("models.debugChunks",{n:ne.value.chunks})),1)):se("",!0)])):se("",!0)])):(h(),V("pre",ZS,v(de.value),1)),(h(),H(br,{to:"body"},[o.value?(h(),V("div",{key:0,class:"fixed inset-0 z-[60] flex cursor-zoom-out items-center justify-center bg-black/80 p-8",onClick:P[1]||(P[1]=N=>o.value=null)},[b("img",{src:o.value,alt:r(n)("models.debugImage"),class:"max-h-full max-w-full rounded object-contain shadow-lg"},null,8,e2)])):se("",!0)]))],64))}}),t2={class:"flex flex-wrap items-center gap-1.5"},n2={class:"font-medium"},s2={key:0,class:"font-mono text-xs text-muted-foreground"},o2={class:"ml-auto flex items-center gap-2"},r2={class:"flex items-center rounded-md border p-0.5"},a2={class:"font-mono text-xs text-muted-foreground"},l2={key:0,class:"flex items-center gap-1 overflow-x-auto pb-1"},i2=["title","onClick"],u2={key:1,class:"text-xs text-destructive"},c2={class:"space-y-1"},d2={class:"flex items-center justify-between"},f2={class:"text-xs font-medium text-muted-foreground"},p2={class:"flex items-center"},m2={key:0,class:"max-h-[60vh] overflow-y-auto"},h2={key:1,class:"max-h-96 overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted/50 p-3 font-mono text-xs"},g2={key:2,class:"space-y-1"},v2={class:"flex items-center justify-between"},y2={class:"text-xs font-medium text-muted-foreground"},b2={class:"flex items-center"},_2={key:0,class:"max-h-[60vh] overflow-y-auto"},x2={key:1,class:"max-h-96 overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted/50 p-3 font-mono text-xs"},w2={class:"flex items-center gap-2"},k2={class:"min-w-0 flex-1 text-sm"},C2={class:"flex items-center rounded-md border p-0.5"},S2={class:"text-xs text-muted-foreground"},$2={key:0,class:"space-y-1"},T2={class:"flex items-center justify-between"},A2={class:"text-xs font-medium text-muted-foreground"},E2={class:"max-h-80 divide-y overflow-y-auto rounded-md border"},O2=["onClick"],P2={class:"w-16 shrink-0 font-mono text-xs text-muted-foreground"},M2=["title"],I2=["onClick"],R2={class:"w-16 shrink-0 font-mono text-xs text-muted-foreground"},L2={class:"min-w-0 max-w-40 truncate font-medium"},D2=["title"],N2=["title"],F2=["title"],q2={class:"ml-auto shrink-0 font-mono text-xs text-muted-foreground"},B2={key:1,class:"flex flex-col items-center gap-2 px-4 py-10 text-center"},V2={class:"flex size-9 items-center justify-center rounded-lg bg-muted text-muted-foreground"},U2={class:"text-sm text-muted-foreground"},H2={key:2,class:"rounded-md border border-dashed px-3 py-6 text-center text-sm text-muted-foreground"},El=300,j2=re({__name:"ModelDebugDialog",props:{open:{type:Boolean},model:{}},emits:["update:open","changed"],setup(e,{emit:t}){const n=e,s=t,{t:o}=ft(),a=W(!1),l=W([]),i=W([]),u=W(!1),c=W(!1),d=W(null);async function f(){if(n.model){u.value=!0;try{const D=await Ve("GET",`/admin/models/${encodeURIComponent(n.model.name)}/debug`);a.value=D.enabled,l.value=D.captures,i.value=D.failures}catch(D){Be(D.message,"error")}finally{u.value=!1}}}Re(()=>n.open,D=>{D&&(d.value=null,x.value=null,f())});async function p(D){if(!(!n.model||c.value)){c.value=!0;try{const P=await Ve("PUT",`/admin/models/${encodeURIComponent(n.model.name)}/debug`,{enabled:D===!0});a.value=P.enabled,P.enabled||(l.value=[]),s("changed")}catch(P){Be(P.message,"error")}finally{c.value=!1}}}async function y(){if(!(!n.model||u.value)){u.value=!0;try{await Ve("DELETE",`/admin/models/${encodeURIComponent(n.model.name)}/debug/fails`),i.value=[]}catch(D){Be(D.message,"error")}finally{u.value=!1}}}const S=D=>D.status>=400||D.status===0,T=ae(()=>{const D=l.value.filter(P=>!S(P));return[...i.value.map(P=>({c:P,auto:!0})),...D.map(P=>({c:P,auto:!1}))].sort((P,N)=>N.c.ts-P.c.ts)}),E=W("conv"),x=W(null),_=ae(()=>{const{ids:D,shapes:P}=_S(T.value.map(oe=>oe.c.request)),N=new Map(T.value.map((oe,pe)=>[oe,P[pe]])),J=new Map;T.value.forEach((oe,pe)=>{let X=J.get(D[pe]);X||(X={key:`c${D[pe]}`,title:"",items:[],lastTs:0,fails:0},J.set(D[pe],X)),X.items.push(oe),oe.c.ts>X.lastTs&&(X.lastTs=oe.c.ts),S(oe.c)&&(X.fails+=1)});for(const oe of J.values())oe.items.sort((pe,X)=>pe.c.ts-X.c.ts),oe.title=oe.items.map(pe=>{var X;return((X=N.get(pe))==null?void 0:X.title)??""}).find(Boolean)||o("models.debugConvNoUser");return[...J.values()].sort((oe,pe)=>pe.lastTs-oe.lastTs)});function I(D){x.value=D.items,d.value=D.items[D.items.length-1].c}function k(D){x.value=null,d.value=D.c}function U(D){return new Date(D).toLocaleTimeString([],{hour12:!1})}function L(D){if(!D)return"0B";const P=new TextEncoder().encode(D).length;return P>=1024?`${(P/1024).toFixed(1)}KB`:`${P}B`}const $=W(!1),R=W("content");Re(d,()=>{$.value=!1,R.value="content"});function G(D,P){if(typeof D=="string")return D.length<=El?D:(P.cut=!0,`${D.slice(0,El)}…${o("models.debugOmitted",{n:D.length-El})}`);if(Array.isArray(D))return D.map(N=>G(N,P));if(D&&typeof D=="object"){const N={};for(const[J,oe]of Object.entries(D))N[J]=G(oe,P);return N}return D}function Y(D){if(!D)return{text:"",cut:!1};try{const P=JSON.parse(D),N={cut:!1},J=G(P,N);return{text:JSON.stringify($.value?P:J,null,2),cut:N.cut}}catch{return{text:D,cut:!1}}}const ne=ae(()=>{var D;return Y((D=d.value)==null?void 0:D.request)}),Q=ae(()=>{var D;return Y((D=d.value)==null?void 0:D.response)});async function de(D){if(!D)return;const P=await kr(D);Be(o(P?"connect.copied":"connect.copyFailed"),P?"success":"error")}return(D,P)=>(h(),H(r(zs),{open:e.open,"onUpdate:open":P[9]||(P[9]=N=>s("update:open",N))},{default:g(()=>[m(r(Ws),{class:"max-w-3xl"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>{var N;return[z(v(r(o)("models.debugTitle",{name:((N=e.model)==null?void 0:N.name)??""})),1)]}),_:1}),m(r(Gs),{class:"sr-only"},{default:g(()=>[z(v(r(o)("models.debugDesc")),1)]),_:1}),d.value?(h(),V(me,{key:0},[b("div",t2,[m(r(ke),{variant:"ghost",size:"sm",class:"h-7 px-2 text-muted-foreground",onClick:P[0]||(P[0]=N=>d.value=null)},{default:g(()=>[m(r(Ik),{class:"h-3.5 w-3.5"}),z(v(r(o)("models.debugBack")),1)]),_:1}),P[11]||(P[11]=b("span",{class:"h-4 w-px bg-border","aria-hidden":"true"},null,-1)),b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(d.value.providerId).solid])},null,2),b("span",n2,v(d.value.provider),1),d.value.upstreamModel?(h(),V("span",s2,"› "+v(d.value.upstreamModel),1)):se("",!0),m(r(Oe),{variant:"outline",class:"shrink-0"},{default:g(()=>[z(v(r(Lt)(d.value.format)),1)]),_:1}),d.value.stream?(h(),H(r(Oe),{key:1,variant:"secondary",class:"shrink-0"},{default:g(()=>[...P[10]||(P[10]=[z("SSE",-1)])]),_:1})):se("",!0),d.value.status===0?(h(),H(r(Oe),{key:2,variant:"secondary",class:"shrink-0"},{default:g(()=>[z(v(r(o)("models.debugNetwork")),1)]),_:1})):d.value.status<300?(h(),H(r(Oe),{key:3,variant:"success",class:"shrink-0"},{default:g(()=>[z(v(d.value.status),1)]),_:1})):(h(),H(r(Oe),{key:4,variant:"destructive",class:"shrink-0"},{default:g(()=>[z(v(d.value.status),1)]),_:1})),d.value.truncated?(h(),H(r(Oe),{key:5,variant:"secondary",class:"shrink-0"},{default:g(()=>[z(v(r(o)("models.debugTruncated")),1)]),_:1})):se("",!0),b("div",o2,[b("div",r2,[b("button",{type:"button",class:ge(["rounded px-1.5 py-0.5 text-[11px]",R.value==="content"?"bg-muted font-medium text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:P[1]||(P[1]=N=>R.value="content")},v(r(o)("models.debugViewContent")),3),b("button",{type:"button",class:ge(["rounded px-1.5 py-0.5 text-[11px]",R.value==="raw"?"bg-muted font-medium text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:P[2]||(P[2]=N=>R.value="raw")},v(r(o)("models.debugViewRaw")),3)]),b("span",a2,v(U(d.value.ts))+" · "+v(d.value.ms)+"ms",1)])]),x.value&&x.value.length>1?(h(),V("div",l2,[(h(!0),V(me,null,Pe(x.value,(N,J)=>(h(),V("button",{key:`a${N.c.ts}-${J}`,type:"button",class:ge(["flex shrink-0 items-center gap-1 rounded-md border px-1.5 py-0.5 font-mono text-[10px] transition-colors",N.c===d.value?"border-foreground/30 bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/50"]),title:`${N.c.provider}${N.c.upstreamModel?` › ${N.c.upstreamModel}`:""} · ${N.c.ms}ms`,onClick:oe=>d.value=N.c},[b("span",{class:ge(["h-1.5 w-1.5 rounded-full",r(ps)(N.c.providerId).solid])},null,2),z(" "+v(U(N.c.ts))+" ",1),b("span",{class:ge(N.c.status===0||N.c.status>=400?"text-destructive":"text-emerald-500")},v(N.c.status||"×"),3)],10,i2))),128))])):se("",!0),d.value.error?(h(),V("p",u2,v(d.value.error),1)):se("",!0),b("div",c2,[b("div",d2,[b("span",f2,v(r(o)("models.debugReq"))+" · "+v(L(d.value.request)),1),b("div",p2,[R.value==="raw"&&ne.value.cut?(h(),H(r(ke),{key:0,variant:"ghost",size:"sm",class:"h-6 px-2 text-[11px] text-muted-foreground",onClick:P[3]||(P[3]=N=>$.value=!$.value)},{default:g(()=>[z(v($.value?r(o)("models.debugCollapse"):r(o)("models.debugExpand")),1)]),_:1})):se("",!0),m(r(ke),{variant:"ghost",size:"icon",class:"size-6 text-muted-foreground",title:r(o)("connect.copy"),"aria-label":r(o)("connect.copy"),onClick:P[4]||(P[4]=N=>de(d.value.request))},{default:g(()=>[m(r(Cn),{class:"h-3 w-3"})]),_:1},8,["title","aria-label"])])]),R.value==="content"?(h(),V("div",m2,[m(md,{body:d.value.request,kind:"request"},null,8,["body"])])):(h(),V("pre",h2,v(ne.value.text),1))]),d.value.response!==void 0?(h(),V("div",g2,[b("div",v2,[b("span",y2,v(r(o)("models.debugResp"))+" · "+v(L(d.value.response)),1),b("div",b2,[R.value==="raw"&&Q.value.cut?(h(),H(r(ke),{key:0,variant:"ghost",size:"sm",class:"h-6 px-2 text-[11px] text-muted-foreground",onClick:P[5]||(P[5]=N=>$.value=!$.value)},{default:g(()=>[z(v($.value?r(o)("models.debugCollapse"):r(o)("models.debugExpand")),1)]),_:1})):se("",!0),m(r(ke),{variant:"ghost",size:"icon",class:"size-6 text-muted-foreground",title:r(o)("connect.copy"),"aria-label":r(o)("connect.copy"),onClick:P[6]||(P[6]=N=>de(d.value.response))},{default:g(()=>[m(r(Cn),{class:"h-3 w-3"})]),_:1},8,["title","aria-label"])])]),R.value==="content"?(h(),V("div",_2,[m(md,{body:d.value.response,kind:"response"},null,8,["body"])])):(h(),V("pre",x2,v(Q.value.text),1))])):se("",!0)],64)):(h(),V(me,{key:1},[b("div",w2,[m(r(xS),{"model-value":a.value,disabled:c.value||u.value,"aria-label":r(o)("models.debugSwitch"),"onUpdate:modelValue":p},null,8,["model-value","disabled","aria-label"]),b("span",k2,v(r(o)("models.debugSwitch")),1),b("div",C2,[b("button",{type:"button",class:ge(["rounded px-1.5 py-0.5 text-[11px]",E.value==="conv"?"bg-muted font-medium text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:P[7]||(P[7]=N=>E.value="conv")},v(r(o)("models.debugModeConv")),3),b("button",{type:"button",class:ge(["rounded px-1.5 py-0.5 text-[11px]",E.value==="flat"?"bg-muted font-medium text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:P[8]||(P[8]=N=>E.value="flat")},v(r(o)("models.debugModeFlat")),3)]),m(r(ke),{variant:"outline",size:"icon",class:"size-8 shrink-0",disabled:u.value,title:r(o)("models.debugRefresh"),"aria-label":r(o)("models.debugRefresh"),onClick:f},{default:g(()=>[u.value?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"}))]),_:1},8,["disabled","title","aria-label"])]),b("p",S2,v(r(o)("models.debugHint")),1),T.value.length?(h(),V("div",$2,[b("div",T2,[b("span",A2,v(r(o)("models.debugFailsTitle",{n:i.value.length})),1),i.value.length?(h(),H(r(ke),{key:0,variant:"ghost",size:"icon",class:"size-6 text-muted-foreground",disabled:u.value,title:r(o)("models.debugClearFails"),"aria-label":r(o)("models.debugClearFails"),onClick:y},{default:g(()=>[m(r(Ao),{class:"h-3 w-3"})]),_:1},8,["disabled","title","aria-label"])):se("",!0)]),b("div",E2,[E.value==="conv"?(h(!0),V(me,{key:0},Pe(_.value,N=>(h(),V("button",{key:N.key,type:"button",class:"flex w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left transition-colors hover:bg-muted/50",onClick:J=>I(N)},[b("span",P2,v(U(N.lastTs)),1),b("span",{class:"min-w-0 flex-1 truncate",title:N.title},v(N.title),9,M2),N.fails?(h(),H(r(Oe),{key:0,variant:"destructive",class:"shrink-0 text-[10px]"},{default:g(()=>[z(v(r(o)("models.debugConvFails",{n:N.fails})),1)]),_:2},1024)):se("",!0),m(r(Oe),{variant:"secondary",class:"shrink-0 text-[10px]"},{default:g(()=>[z(v(r(o)("models.debugConvReqs",{n:N.items.length})),1)]),_:2},1024)],8,O2))),128)):(h(!0),V(me,{key:1},Pe(T.value,(N,J)=>(h(),V("button",{key:`${N.c.ts}-${J}`,type:"button",class:"flex w-full cursor-pointer flex-wrap items-center gap-x-2 gap-y-0.5 px-3 py-1.5 text-left transition-colors hover:bg-muted/50",onClick:oe=>k(N)},[b("span",R2,v(U(N.c.ts)),1),b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(N.c.providerId).solid])},null,2),b("span",L2,v(N.c.provider),1),N.c.upstreamModel?(h(),V("span",{key:0,class:"min-w-0 max-w-40 truncate font-mono text-xs text-muted-foreground",title:N.c.upstreamModel},"› "+v(N.c.upstreamModel),9,D2)):se("",!0),N.c.status===0?(h(),H(r(Oe),{key:1,variant:"secondary",class:"shrink-0"},{default:g(()=>[z(v(r(o)("models.debugNetwork")),1)]),_:1})):N.c.status<300?(h(),H(r(Oe),{key:2,variant:"success",class:"shrink-0 font-mono"},{default:g(()=>[z(v(N.c.status),1)]),_:2},1024)):(h(),H(r(Oe),{key:3,variant:"destructive",class:"shrink-0 font-mono"},{default:g(()=>[z(v(N.c.status),1)]),_:2},1024)),N.c.thinking?(h(),V("span",{key:4,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(o)("models.editor.thinkingLabel")},[m(r(xo),{class:"h-2.5 w-2.5"}),z(v(N.c.thinking.value),1)],8,N2)):se("",!0),r(on)(N.c.sampling)?(h(),V("span",{key:5,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(o)("models.editor.samplingLabel")},[m(r(vs),{class:"h-2.5 w-2.5"}),z(v(r(on)(N.c.sampling)),1)],8,F2)):se("",!0),N.auto?(h(),H(r(Oe),{key:6,variant:"secondary",class:"shrink-0 text-[10px]"},{default:g(()=>[z(v(r(o)("models.debugAutoTag")),1)]),_:1})):se("",!0),b("span",q2,v(N.c.ms)+"ms · "+v(L(N.c.request))+"/"+v(L(N.c.response)),1)],8,I2))),128))])])):a.value?(h(),V("div",B2,[b("span",V2,[m(r(Ho),{class:"size-4"})]),b("p",U2,v(r(o)("models.debugEmpty")),1)])):(h(),V("div",H2,v(r(o)("models.debugEmptyOff")),1))],64))]),_:1})]),_:1},8,["open"]))}}),z2={class:"space-y-2"},W2={class:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground"},K2={key:0,class:"font-normal"},G2={key:1,class:"font-normal"},Y2=["title"],X2={class:"w-3 shrink-0 text-right text-[10px] tabular-nums text-muted-foreground/60"},J2={class:"min-w-0 flex-1 leading-tight"},Q2={class:"truncate text-xs font-medium"},Z2={key:0,class:"flex min-w-0 items-center gap-1.5 font-mono text-[11px] text-muted-foreground"},e$=["title"],t$=["title"],n$=["title"],s$=["title","aria-label","onClick"],o$={key:1,class:"shrink-0 font-mono text-[11px] font-semibold text-destructive"},r$=["title","aria-label","onClick"],a$=["title","aria-label","onClick"],l$={key:0,class:"rounded-md bg-destructive/10 px-2 py-1.5 font-mono text-[11px] break-all whitespace-pre-wrap text-destructive"},i$={class:"opacity-70"},hd=re({__name:"ChainDetails",props:{model:{},line:{},active:{},fails:{},slotState:{type:Function},slotTitle:{type:Function},slotClass:{type:Function},probeSlot:{type:Function},useSlot:{type:Function}},setup(e){const t=e,{t:n}=ft();function s(l){const i=(t.fails??[]).filter(u=>u.providerId===t.line.slots[l].id);return i.length?i.reduce((u,c)=>c.ts>=u.ts?c:u):void 0}const o=W(null);function a(l){o.value=o.value===l?null:l}return(l,i)=>(h(),V("div",z2,[b("div",W2,[(h(!0),V(me,null,Pe(e.line.fs,u=>(h(),V(me,{key:u},[b("span",{class:ge(["h-1.5 w-1.5 rounded-full",r(pt)[u].solid])},null,2),z(" "+v(r(n)(r(_n)[u].label)),1)],64))),128)),e.line.enabled?se("",!0):(h(),V("span",K2,"· "+v(r(n)("models.routeDisabled")),1)),e.active!==void 0?(h(),V("span",G2,"· "+v(r(n)("models.chainActiveHint")),1)):se("",!0)]),b("div",{class:ge(["space-y-1",{"opacity-60":!e.line.enabled}])},[(h(!0),V(me,null,Pe(e.line.slots,(u,c)=>{var d,f,p,y;return h(),V(me,{key:c},[b("div",{class:ge(["flex items-center gap-2 rounded-md border px-2 py-1.5 transition-colors",[e.slotClass(e.model,e.line,c),c===e.active?"ring-1 ring-primary/60":""]]),title:e.slotState(e.model,e.line,c)?e.slotTitle(e.model,e.line,c):void 0},[b("span",X2,v(c+1),1),b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(u.id).solid])},null,2),b("div",J2,[b("div",Q2,v(u.name),1),u.model||u.thinking||r(on)(u.sampling)?(h(),V("div",Z2,[u.model?(h(),V("span",{key:0,class:"min-w-0 truncate",title:u.model},"› "+v(u.model),9,e$)):se("",!0),u.thinking?(h(),V("span",{key:1,class:"inline-flex shrink-0 items-center gap-0.5",title:r(n)("models.editor.thinkingLabel")},[m(r(xo),{class:"h-2.5 w-2.5"}),z(v(u.thinking),1)],8,t$)):se("",!0),r(on)(u.sampling)?(h(),V("span",{key:2,class:"inline-flex shrink-0 items-center gap-0.5",title:r(n)("models.editor.samplingLabel")},[m(r(vs),{class:"h-2.5 w-2.5"}),z(v(r(on)(u.sampling)),1)],8,n$)):se("",!0)])):se("",!0)]),c!==0?(h(),V("button",{key:0,type:"button",class:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-muted-foreground/40 transition-colors hover:bg-accent hover:text-accent-foreground",title:r(n)("models.chainUseTip"),"aria-label":`${r(n)("models.chainUseTip")} · ${u.name}`,onClick:Ie(S=>e.useSlot(e.model,e.line,c),["stop"])},[m(r(Wk),{class:"h-3 w-3"})],8,s$)):se("",!0),e.line.enabled?(h(),V(me,{key:1},[((d=e.slotState(e.model,e.line,c))==null?void 0:d.state)==="ok"?(h(),H(r(rn),{key:0,class:"h-3.5 w-3.5 shrink-0 text-emerald-600 dark:text-emerald-400"})):((f=e.slotState(e.model,e.line,c))==null?void 0:f.state)==="fail"?(h(),V("span",o$,v(((p=e.slotState(e.model,e.line,c))==null?void 0:p.status)||"✗"),1)):se("",!0),s(c)?(h(),V("button",{key:2,type:"button",class:"inline-flex shrink-0 items-center gap-0.5 rounded px-0.5 font-mono text-[10px] font-semibold text-destructive transition-colors hover:bg-destructive/10",title:r(n)("models.chainFailHint"),"aria-label":r(n)("models.chainFailHint"),onClick:Ie(S=>a(c),["stop"])},[m(r(ko),{class:"h-3 w-3"}),z(v(s(c).status||"?"),1)],8,r$)):se("",!0),((y=e.slotState(e.model,e.line,c))==null?void 0:y.state)!=="testing"?(h(),V("button",{key:3,type:"button",class:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-muted-foreground/40 transition-colors hover:bg-accent hover:text-accent-foreground",title:r(n)("models.testSourceHint"),"aria-label":`${r(n)("models.testSource")} · ${u.name}`,onClick:Ie(S=>e.probeSlot(e.model,e.line,c),["stop"])},[m(r(Ns),{class:"h-3 w-3"})],8,a$)):(h(),H(r(gt),{key:4,class:"h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground"}))],64)):se("",!0)],10,Y2),o.value===c&&s(c)?(h(),V("div",l$,[b("span",i$,"HTTP "+v(s(c).status)+" · ",1),z(v(s(c).error||r(n)("models.probeFail")),1)])):se("",!0)],64)}),128))],2)]))}}),u$={class:"flex gap-3 pr-8"},c$={key:0,class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-destructive/15 text-destructive"},d$={class:"min-w-0 flex-1 space-y-1.5"},f$={class:"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end"},fu=re({__name:"ConfirmDialog",props:es({title:{},description:{},confirmText:{default:""},cancelText:{default:""},variant:{default:"default"},loading:{type:Boolean,default:!1}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:es(["confirm"],["update:open"]),setup(e,{emit:t}){const{t:n}=ft(),s=So(e,"open"),o=t;return(a,l)=>(h(),H(r(zs),{open:s.value,"onUpdate:open":l[2]||(l[2]=i=>s.value=i)},{default:g(()=>[m(r(Ws),{class:"max-w-sm"},{default:g(()=>[b("div",u$,[e.variant==="destructive"?(h(),V("span",c$,[m(r(ko),{class:"h-4 w-4"})])):se("",!0),b("div",d$,[m(r(Ks),{class:"text-base leading-tight"},{default:g(()=>[z(v(e.title),1)]),_:1}),e.description?(h(),H(r(Gs),{key:0},{default:g(()=>[z(v(e.description),1)]),_:1})):se("",!0)])]),b("div",f$,[m(r(ke),{variant:"outline",disabled:e.loading,onClick:l[0]||(l[0]=i=>s.value=!1)},{default:g(()=>[z(v(e.cancelText||r(n)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{variant:e.variant,disabled:e.loading,onClick:l[1]||(l[1]=i=>o("confirm"))},{default:g(()=>[e.loading?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):se("",!0),z(" "+v(e.confirmText||r(n)("common.confirm")),1)]),_:1},8,["variant","disabled"])])]),_:1})]),_:1},8,["open"]))}}),p$={class:"space-y-4"},m$={class:"flex flex-wrap items-center gap-2"},h$={class:"relative min-w-[180px] flex-1"},g$={class:"flex items-center rounded-md border p-0.5"},v$={key:0,class:"py-8 text-center text-sm text-muted-foreground"},y$={key:1,class:"py-8 text-center text-sm text-destructive"},b$={class:"flex h-11 w-11 items-center justify-center rounded-xl bg-primary/15 text-primary"},_$={class:"space-y-1"},x$={class:"font-medium"},w$={class:"max-w-sm text-sm text-muted-foreground"},k$={class:"flex h-11 w-11 items-center justify-center rounded-xl bg-primary/15 text-primary"},C$={class:"space-y-1"},S$={class:"font-medium"},$$={class:"max-w-sm text-sm text-muted-foreground"},T$={key:4,class:"py-8 text-center text-sm text-muted-foreground"},A$={key:5,class:"grid items-stretch gap-3 md:grid-cols-2"},E$={class:"flex h-full flex-col gap-3 p-4"},O$={class:"flex min-w-0 items-center gap-1.5"},P$={class:"truncate font-mono text-sm font-semibold"},M$=["title","aria-label","onClick"],I$={class:"opacity-0 transition-all focus-within:opacity-100 group-hover:opacity-100"},R$={class:"min-w-0 flex-1 space-y-1.5"},L$=["title","aria-label","onClick"],D$=["title","aria-label"],N$={class:"shrink-0 font-medium"},F$=["title"],q$=["title"],B$=["title"],V$={key:0,class:"text-xs text-muted-foreground"},U$={key:1,class:"rounded-md border border-dashed px-2.5 py-2 text-xs text-muted-foreground"},H$={key:6,class:"overflow-hidden rounded-lg border"},j$={class:"space-y-1"},z$={class:"font-mono text-sm font-medium"},W$={key:0,class:"flex flex-wrap items-center gap-1"},K$={class:"flex flex-wrap items-center gap-1.5"},G$=["title","aria-label","onClick"],Y$={key:0,class:"min-w-0 space-y-1"},X$=["title"],J$=["title","aria-label"],Q$={class:"shrink-0 font-medium"},Z$=["title"],eT=["title"],tT=["title"],nT={key:1,class:"text-xs text-muted-foreground"},sT={key:1,class:"text-xs text-muted-foreground"},oT={key:1,class:"text-xs text-muted-foreground"},rT={class:"flex items-center justify-end gap-0.5"},aT={class:"space-y-1.5"},lT={class:"text-xs text-muted-foreground"},iT={class:"flex justify-end gap-2"},gd="myapikey.view.models",uT=re({__name:"Models",emits:["goto"],setup(e,{emit:t}){const n=t,{t:s}=ft(),o=W(localStorage.getItem(gd)==="table"?"table":"cards");function a(F){o.value=F;try{localStorage.setItem(gd,F)}catch{}}const l=["openai","anthropic","responses"],i=W([]),u=W([]),c=W(!1),d=W(""),f=W(""),p=W(!1),y=W(null),S=W(!1);function T(F){y.value=F,S.value=!1,p.value=!0}function E(){y.value=null,S.value=!0,p.value=!0}function x(){N()}const _=W(!1),I=W(null),k=W(""),U=W(!1),L=W(!1),$=W(null);function R(F){$.value=F,L.value=!0}function G(F){I.value=F,k.value=F.name,_.value=!0}async function Y(){const F=I.value,w=k.value.trim();if(!(!F||!w||w===F.name)){U.value=!0;try{await Ve("POST",`/admin/models/${ne(F.name)}/rename`,{name:w}),await N(),Be(s("models.renamedToast",{from:F.name,to:w}),"success"),_.value=!1}catch(C){Be(C.message,"error")}finally{U.value=!1}}}const ne=encodeURIComponent,Q=W(null),de=W(!1),D=W(!1);async function P(){const F=Q.value;if(F){D.value=!0;try{await Ve("DELETE",`/admin/models/${ne(F.name)}`),i.value=i.value.filter(w=>w.name!==F.name),Be(s("models.removedToast",{name:F.name}),"success"),de.value=!1}catch(w){Be(w.message,"error")}finally{D.value=!1}}}async function N(){c.value=!0,d.value="";try{const[F,w]=await Promise.all([Ve("GET","/admin/models"),Ve("GET","/admin/providers")]);i.value=F.models,u.value=w.providers}catch(F){d.value=F.message}finally{c.value=!1}}rt(N);const J=ae(()=>{const F=f.value.trim().toLowerCase();return i.value.filter(w=>!F||w.name.toLowerCase().includes(F))});function oe(F){return l.filter(w=>F[w].enabled)}const pe=F=>{const w=O=>O.map(A=>`${A.id}|${A.model??""}|${A.thinking??""}|${JSON.stringify(A.sampling??{})}`).join(">"),C=[];for(const O of l){if(!F[O].providers.length)continue;const A=`${F[O].enabled}|${w(F[O].providers)}`,j=C.find(fe=>fe.key===A);j?j.fs.push(O):C.push({fs:[O],enabled:F[O].enabled,slots:F[O].providers,key:A})}return C};function X(F,w){const C=(F.lastRoute??[]).filter(O=>w.fs.includes(O.format));if(C.length){const O=C.reduce((j,fe)=>fe.ts>=j.ts?fe:j),A=w.slots.findIndex(j=>j.id===O.providerId);if(A>=0)return{s:w.slots[A],i:A,actual:!0}}return{s:w.slots[0],i:0,actual:!1}}function he(F,w){return(F.lastFail??[]).filter(C=>w.fs.includes(C.format))}function Z(F,w){return F[w].enabled?"on":F[w].providers.length?"off":"none"}function Ye(F,w){const C=Z(F,w);return C==="on"?`border-transparent ${pt[w].solid} text-white shadow-sm`:C==="off"?"border-dashed border-input text-muted-foreground hover:bg-accent hover:text-accent-foreground":"border-transparent text-muted-foreground/40"}function Ue(F,w){const C=Z(F,w);return C==="on"?`${s(_n[w].label)} · ${s("models.chipOn")}`:C==="off"?`${s(_n[w].label)} · ${s("models.chipOff")}`:`${s(_n[w].label)} · ${s("models.chipNa")}`}async function ve(F,w){if(Z(F,w)==="none")return;const C=F[w].providers.map(O=>({id:O.id,...O.model?{model:O.model}:{},...O.thinking?{thinking:O.thinking}:{},...O.sampling&&Object.keys(O.sampling).length?{sampling:O.sampling}:{}}));try{await Ve("PUT",`/admin/models/${ne(F.name)}`,{[w]:{enabled:!F[w].enabled,slots:C}}),F[w].enabled=!F[w].enabled,Be(s(F[w].enabled?"models.enabledToast":"models.disabledToast",{name:`${F.name} [${w}]`}),"success")}catch(O){Be(O.message,"error")}}async function ye(F,w,C){if(C===0||C>=w.slots.length)return;const O=[w.slots[C],...w.slots.filter((j,fe)=>fe!==C)].map(j=>({id:j.id,...j.model?{model:j.model}:{},...j.thinking?{thinking:j.thinking}:{},...j.sampling&&Object.keys(j.sampling).length?{sampling:j.sampling}:{}})),A={};for(const j of w.fs)A[j]={enabled:F[j].enabled,slots:O};try{await Ve("PUT",`/admin/models/${ne(F.name)}`,A);for(const j of w.fs){const fe=F[j].providers;fe.length===w.slots.length&&(F[j].providers=[fe[C],...fe.filter((xe,be)=>be!==C)])}Be(s("models.chainUseToast",{name:F.name,provider:w.slots[C].name}),"success")}catch(j){Be(j.message,"error")}}function ee(F,w){const C=F[w].providers;if(!C.length)return!1;const O=A=>po(u.value.find(j=>j.id===A));return!C.some(A=>O(A.id).includes(A.model??F.name))&&C.some(A=>O(A.id).length>0)}function we(F){return oe(F).some(w=>ee(F,w))}const _e=W({}),Fe=W({});async function at(F){const w=oe(F);if(w.length){for(const C of w)_e.value[`${F.name}:${C}`]=!0;await Promise.all(w.map(async C=>{const O=`${F.name}:${C}`;try{const A=await Ve("POST",`/admin/models/${ne(F.name)}/test?format=${C}`);Fe.value[O]=A.result}catch(A){Fe.value[O]={ok:!1,status:0,format:C,error:A.message}}finally{_e.value[O]=!1}}))}}function B(F){let w=!1,C=null,O=null;for(const A of oe(F)){const j=`${F.name}:${A}`;_e.value[j]&&(w=!0);const fe=Fe.value[j];fe!=null&&fe.ok&&!C?C=fe:fe&&!fe.ok&&!O&&(O=fe)}return w?{state:"testing"}:C?{state:"ok",provider:C.provider}:O?{state:"fail",status:O.status,error:O.error}:null}const K=W({}),te=W({});async function ue(F,w,C){const O=w.fs.filter(A=>!K.value[`${F.name}:${A}:${C}`]);if(O.length){for(const A of O)K.value[`${F.name}:${A}:${C}`]=!0;await Promise.all(O.map(async A=>{const j=`${F.name}:${A}:${C}`;try{const fe=await Ve("POST",`/admin/models/${ne(F.name)}/providers/test?format=${A}&index=${C}`);te.value[j]=fe.result}catch(fe){te.value[j]={ok:!1,status:0,format:A,error:fe.message}}finally{K.value[j]=!1}}))}}function ie(F,w,C){let O=!1,A=null,j=null;for(const fe of w.fs){const xe=`${F.name}:${fe}:${C}`;K.value[xe]&&(O=!0);const be=te.value[xe];be!=null&&be.ok&&!A?A=be:be&&!be.ok&&!j&&(j=be)}return O?{state:"testing"}:A?{state:"ok",provider:A.provider}:j?{state:"fail",status:j.status,error:j.error}:null}function le(F,w,C){const O=ie(F,w,C);return(O==null?void 0:O.state)==="ok"?"border-emerald-500/40 bg-emerald-500/10":(O==null?void 0:O.state)==="fail"?"border-destructive/40 bg-destructive/10":"border-transparent bg-muted/60"}function M(F,w,C){return w.fs.map(O=>{const A=te.value[`${F.name}:${O}:${C}`],j=s(_n[O].label);return A?A.ok?`${j} ✓ ${s("models.probeOk")}${A.provider?` (${A.provider})`:""}`:`${j} ✗ ${A.status||"?"}${A.error?` ${A.error}`:""}`:j}).join(`
|
|
334
|
-
`)}async function q(F){const w=await kr(F);Be(s(w?"connect.copied":"connect.copyFailed"),w?"success":"error")}return(F,w)=>(h(),V("div",p$,[b("div",m$,[b("div",h$,[m(r(du),{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{modelValue:f.value,"onUpdate:modelValue":w[0]||(w[0]=C=>f.value=C),placeholder:r(s)("models.searchPh"),class:"pl-8"},null,8,["modelValue","placeholder"])]),b("div",g$,[m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",o.value==="cards"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(s)("common.viewCards"),"aria-label":r(s)("common.viewCards"),onClick:w[1]||(w[1]=C=>a("cards"))},{default:g(()=>[m(r(Em),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"]),m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",o.value==="table"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(s)("common.viewTable"),"aria-label":r(s)("common.viewTable"),onClick:w[2]||(w[2]=C=>a("table"))},{default:g(()=>[m(r(Pm),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"])]),m(r(ke),{onClick:w[3]||(w[3]=C=>E())},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(s)("models.newModel")),1)]),_:1})]),c.value?(h(),V("p",v$,v(r(s)("common.loading")),1)):d.value?(h(),V("p",y$,v(d.value),1)):!u.value.length&&!i.value.length?(h(),H(r(Vt),{key:2},{default:g(()=>[m(r(Zt),{class:"flex flex-col items-center gap-3 py-12 text-center"},{default:g(()=>[b("span",b$,[m(r(wo),{class:"h-5 w-5"})]),b("div",_$,[b("div",x$,v(r(s)("models.emptyNoSources")),1),b("p",w$,v(r(s)("models.emptyNoSourcesHint")),1)]),m(r(ke),{onClick:w[4]||(w[4]=C=>n("goto","sources"))},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(s)("sources.add")),1)]),_:1})]),_:1})]),_:1})):!J.value.length&&!f.value?(h(),H(r(Vt),{key:3},{default:g(()=>[m(r(Zt),{class:"flex flex-col items-center gap-3 py-12 text-center"},{default:g(()=>[b("span",k$,[m(r(Am),{class:"h-5 w-5"})]),b("div",C$,[b("div",S$,v(r(s)("models.emptyNoModels")),1),b("p",$$,v(r(s)("models.emptyNoModelsHint")),1)]),m(r(ke),{onClick:w[5]||(w[5]=C=>E())},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(s)("models.newModel")),1)]),_:1})]),_:1})]),_:1})):J.value.length?o.value==="cards"?(h(),V("div",A$,[(h(!0),V(me,null,Pe(J.value,C=>(h(),H(r(Vt),{key:C.name,class:"group cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/30",onClick:O=>T(C)},{default:g(()=>{var O,A,j,fe,xe;return[b("div",E$,[b("div",O$,[b("span",P$,v(C.name),1),b("button",{type:"button",title:r(s)("connect.copy"),"aria-label":r(s)("connect.copy"),class:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-muted-foreground/50 opacity-0 transition-all hover:bg-accent hover:text-accent-foreground focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",onClick:Ie(be=>q(C.name),["stop"])},[m(r(Cn),{class:"h-3 w-3"})],8,M$),C.paceRpm?(h(),H(r(Oe),{key:0,variant:"outline",class:"shrink-0 gap-1",title:r(s)("models.paceBadgeHint",{n:C.paceRpm,s:Math.max(1,Math.round(60/C.paceRpm))})},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(v(r(s)("models.paceBadge",{n:C.paceRpm})),1)]),_:2},1032,["title"])):se("",!0),C.debugCapture?(h(),H(r(Oe),{key:1,variant:"outline",class:"shrink-0 cursor-pointer gap-1",title:r(s)("models.debugBadgeHint"),onClick:Ie(be=>R(C),["stop"])},{default:g(()=>[m(r(Ho),{class:"h-3 w-3"}),z(v(r(s)("models.debugOnBadge")),1)]),_:1},8,["title","onClick"])):se("",!0),((O=B(C))==null?void 0:O.state)==="testing"?(h(),H(r(Oe),{key:2,variant:"muted",class:"shrink-0 gap-1"},{default:g(()=>[m(r(gt),{class:"h-3 w-3 animate-spin"}),z(v(r(s)("models.probeTesting")),1)]),_:1})):((A=B(C))==null?void 0:A.state)==="ok"?(h(),H(r(Oe),{key:3,variant:"success",class:"shrink-0",title:r(s)("models.probeOkHint",{name:((j=B(C))==null?void 0:j.provider)??""})},{default:g(()=>[z(v(r(s)("models.probeOk")),1)]),_:1},8,["title"])):((fe=B(C))==null?void 0:fe.state)==="fail"?(h(),H(r(Oe),{key:4,variant:"destructive",class:"shrink-0",title:((xe=B(C))==null?void 0:xe.error)||r(s)("models.probeFailHint")},{default:g(()=>{var be;return[z(v(r(s)("models.probeFail"))+" · "+v(((be=B(C))==null?void 0:be.status)||"?"),1)]}),_:2},1032,["title"])):we(C)?(h(),H(r(Oe),{key:5,variant:"secondary",class:"shrink-0 gap-1",title:r(s)("models.delistedHint")},{default:g(()=>[m(r(ko),{class:"h-3 w-3"}),z(v(r(s)("models.delisted")),1)]),_:1},8,["title"])):se("",!0),b("div",{class:"ml-auto flex shrink-0 items-center gap-0.5",onClick:w[6]||(w[6]=Ie(()=>{},["stop"]))},[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground opacity-0 transition-all focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",title:r(s)("models.debug"),"aria-label":r(s)("models.debug"),onClick:be=>R(C)},{default:g(()=>[m(r(Ho),{class:"h-4 w-4"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground opacity-0 transition-all focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",disabled:!oe(C).length||!!B(C)&&B(C).state==="testing",title:r(s)("models.testModel"),"aria-label":r(s)("models.testModel"),onClick:be=>at(C)},{default:g(()=>{var be;return[((be=B(C))==null?void 0:be.state)==="testing"?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-4 w-4"}))]}),_:2},1032,["disabled","title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground opacity-0 transition-all focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",title:r(s)("models.edit"),"aria-label":r(s)("models.edit"),onClick:be=>T(C)},{default:g(()=>[m(r(ao),{class:"h-4 w-4"})]),_:1},8,["title","aria-label","onClick"]),b("div",I$,[m(r(fi),null,{default:g(()=>[m(r(pi),null,{default:g(()=>[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground","aria-label":r(s)("models.moreActions")},{default:g(()=>[m(r(hi),{class:"h-4 w-4"})]),_:1},8,["aria-label"])]),_:1}),m(r(mi),{align:"end"},{default:g(()=>[m(r(Uo),{onSelect:be=>G(C)},{default:g(()=>[m(r(ao)),z(" "+v(r(s)("models.renameModel")),1)]),_:1},8,["onSelect"]),m(r(ld)),m(r(Uo),{class:"text-destructive focus:bg-destructive/10 focus:text-destructive",onSelect:be=>{Q.value=C,de.value=!0}},{default:g(()=>[m(r(hr)),z(" "+v(r(s)("models.removeModel")),1)]),_:1},8,["onSelect"])]),_:2},1024)]),_:2},1024)])])]),b("div",R$,[pe(C).length?(h(!0),V(me,{key:0},Pe(pe(C),be=>(h(),V("div",{key:be.fs.join("|"),class:ge(["flex flex-wrap items-center gap-x-1.5 gap-y-1",{"opacity-60":!be.enabled}])},[(h(!0),V(me,null,Pe(be.fs,Le=>(h(),V("button",{key:Le,type:"button",title:Ue(C,Le),"aria-label":Ue(C,Le),class:ge(["inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-colors",Ye(C,Le)]),onClick:Ie(qe=>ve(C,Le),["stop"])},v(r(s)(r(_n)[Le].label)),11,L$))),128)),w[18]||(w[18]=b("span",{class:"h-4 w-px shrink-0 bg-border","aria-hidden":"true"},null,-1)),m(r(ya),null,{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[b("button",{type:"button",class:ge(["inline-flex min-w-0 max-w-full items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs transition-colors hover:bg-accent hover:text-accent-foreground",le(C,be,X(C,be).i)]),title:r(s)("models.chainListHint"),"aria-label":r(s)("models.chainListHint"),onClick:w[7]||(w[7]=Ie(()=>{},["stop"]))},[b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(X(C,be).s.id).solid])},null,2),b("span",N$,v(X(C,be).s.name),1),X(C,be).s.model?(h(),V("span",{key:0,class:"min-w-0 truncate font-mono text-muted-foreground",title:X(C,be).s.model},"› "+v(X(C,be).s.model),9,F$)):se("",!0),X(C,be).s.thinking?(h(),V("span",{key:1,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.thinkingLabel")},[m(r(xo),{class:"h-2.5 w-2.5"}),z(v(X(C,be).s.thinking),1)],8,q$)):se("",!0),r(on)(X(C,be).s.sampling)?(h(),V("span",{key:2,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.samplingLabel")},[m(r(vs),{class:"h-2.5 w-2.5"}),z(v(r(on)(X(C,be).s.sampling)),1)],8,B$)):se("",!0),m(r(cn),{class:"h-3 w-3 shrink-0 text-muted-foreground/60"})],10,D$)]),_:2},1024),m(r(_a),{align:"start",class:"w-80 p-3"},{default:g(()=>[m(hd,{model:C,line:be,active:X(C,be).actual?X(C,be).i:void 0,fails:he(C,be),"slot-state":ie,"slot-title":M,"slot-class":le,"probe-slot":ue,"use-slot":ye},null,8,["model","line","active","fails"])]),_:2},1024)]),_:2},1024),be.enabled?se("",!0):(h(),V("span",V$,"· "+v(r(s)("models.routeDisabled")),1))],2))),128)):(h(),V("div",U$,v(r(s)("models.unroutedHint")),1))])])]}),_:2},1032,["onClick"]))),128))])):(h(),V("div",H$,[m(r(el),null,{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),{class:"hover:bg-transparent"},{default:g(()=>[m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colName")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colFormats")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colChain")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colPace")),1)]),_:1}),m(r(ot),{class:"w-[128px] text-right"},{default:g(()=>[z(v(r(s)("models.colActions")),1)]),_:1})]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(J.value,C=>(h(),H(r(Sn),{key:C.name,class:"group cursor-pointer",onClick:O=>T(C)},{default:g(()=>[m(r(tt),null,{default:g(()=>{var O,A,j,fe;return[b("div",j$,[b("span",z$,v(C.name),1),C.paceRpm||C.debugCapture||B(C)||we(C)?(h(),V("div",W$,[C.paceRpm?(h(),H(r(Oe),{key:0,variant:"outline",class:"gap-1",title:r(s)("models.paceBadgeHint",{n:C.paceRpm,s:Math.max(1,Math.round(60/C.paceRpm))})},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(v(r(s)("models.paceBadge",{n:C.paceRpm})),1)]),_:2},1032,["title"])):se("",!0),C.debugCapture?(h(),H(r(Oe),{key:1,variant:"outline",class:"cursor-pointer gap-1",title:r(s)("models.debugBadgeHint"),onClick:Ie(xe=>R(C),["stop"])},{default:g(()=>[m(r(Ho),{class:"h-3 w-3"}),z(v(r(s)("models.debugOnBadge")),1)]),_:1},8,["title","onClick"])):se("",!0),((O=B(C))==null?void 0:O.state)==="ok"?(h(),H(r(Oe),{key:2,variant:"success",title:r(s)("models.probeOkHint",{name:((A=B(C))==null?void 0:A.provider)??""})},{default:g(()=>[z(v(r(s)("models.probeOk")),1)]),_:1},8,["title"])):((j=B(C))==null?void 0:j.state)==="fail"?(h(),H(r(Oe),{key:3,variant:"destructive",title:((fe=B(C))==null?void 0:fe.error)||r(s)("models.probeFailHint")},{default:g(()=>{var xe;return[z(v(r(s)("models.probeFail"))+" · "+v(((xe=B(C))==null?void 0:xe.status)||"?"),1)]}),_:2},1032,["title"])):we(C)?(h(),H(r(Oe),{key:4,variant:"secondary",class:"gap-1",title:r(s)("models.delistedHint")},{default:g(()=>[m(r(ko),{class:"h-3 w-3"}),z(v(r(s)("models.delisted")),1)]),_:1},8,["title"])):se("",!0)])):se("",!0)])]}),_:2},1024),m(r(tt),{onClick:w[8]||(w[8]=Ie(()=>{},["stop"]))},{default:g(()=>[b("div",K$,[(h(),V(me,null,Pe(l,O=>(h(),V(me,{key:O},[Z(C,O)!=="none"?(h(),V("button",{key:0,type:"button",title:Ue(C,O),"aria-label":Ue(C,O),class:ge(["inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-colors",Ye(C,O)]),onClick:A=>ve(C,O)},v(r(s)(r(_n)[O].label)),11,G$)):se("",!0)],64))),64))])]),_:2},1024),m(r(tt),null,{default:g(()=>[pe(C).length?(h(),V("div",Y$,[(h(!0),V(me,null,Pe(pe(C),O=>(h(),V("div",{key:O.fs.join("|"),class:ge(["flex min-w-0 flex-wrap items-center gap-x-1.5 gap-y-1",{"opacity-60":!O.enabled}])},[pe(C).length>1?(h(!0),V(me,{key:0},Pe(O.fs,A=>(h(),V("span",{key:A,class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(pt)[A].solid]),title:r(s)(r(_n)[A].label)},null,10,X$))),128)):se("",!0),m(r(ya),null,{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[b("button",{type:"button",class:ge(["inline-flex min-w-0 max-w-full items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs transition-colors hover:bg-accent hover:text-accent-foreground",le(C,O,X(C,O).i)]),title:r(s)("models.chainListHint"),"aria-label":r(s)("models.chainListHint"),onClick:w[9]||(w[9]=Ie(()=>{},["stop"]))},[b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(X(C,O).s.id).solid])},null,2),b("span",Q$,v(X(C,O).s.name),1),X(C,O).s.model?(h(),V("span",{key:0,class:"min-w-0 truncate font-mono text-muted-foreground",title:X(C,O).s.model},"› "+v(X(C,O).s.model),9,Z$)):se("",!0),X(C,O).s.thinking?(h(),V("span",{key:1,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.thinkingLabel")},[m(r(xo),{class:"h-2.5 w-2.5"}),z(v(X(C,O).s.thinking),1)],8,eT)):se("",!0),r(on)(X(C,O).s.sampling)?(h(),V("span",{key:2,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.samplingLabel")},[m(r(vs),{class:"h-2.5 w-2.5"}),z(v(r(on)(X(C,O).s.sampling)),1)],8,tT)):se("",!0),m(r(cn),{class:"h-3 w-3 shrink-0 text-muted-foreground/60"})],10,J$)]),_:2},1024),m(r(_a),{align:"start",class:"w-80 p-3"},{default:g(()=>[m(hd,{model:C,line:O,active:X(C,O).actual?X(C,O).i:void 0,fails:he(C,O),"slot-state":ie,"slot-title":M,"slot-class":le,"probe-slot":ue,"use-slot":ye},null,8,["model","line","active","fails"])]),_:2},1024)]),_:2},1024),O.enabled?se("",!0):(h(),V("span",nT,"· "+v(r(s)("models.routeDisabled")),1))],2))),128))])):(h(),V("span",sT,v(r(s)("models.unroutedHint")),1))]),_:2},1024),m(r(tt),{class:"whitespace-nowrap"},{default:g(()=>[C.paceRpm?(h(),H(r(Oe),{key:0,variant:"outline",class:"gap-1",title:r(s)("models.paceBadgeHint",{n:C.paceRpm,s:Math.max(1,Math.round(60/C.paceRpm))})},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(v(r(s)("models.paceBadge",{n:C.paceRpm})),1)]),_:2},1032,["title"])):(h(),V("span",oT,"—"))]),_:2},1024),m(r(tt),{onClick:w[10]||(w[10]=Ie(()=>{},["stop"]))},{default:g(()=>[b("div",rT,[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(s)("models.debug"),"aria-label":r(s)("models.debug"),onClick:O=>R(C)},{default:g(()=>[m(r(Ho),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",disabled:!oe(C).length||!!B(C)&&B(C).state==="testing",title:r(s)("models.testModel"),"aria-label":r(s)("models.testModel"),onClick:O=>at(C)},{default:g(()=>{var O;return[((O=B(C))==null?void 0:O.state)==="testing"?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-3.5 w-3.5"}))]}),_:2},1032,["disabled","title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(s)("models.edit"),"aria-label":r(s)("models.edit"),onClick:O=>T(C)},{default:g(()=>[m(r(ao),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(fi),null,{default:g(()=>[m(r(pi),null,{default:g(()=>[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground","aria-label":r(s)("models.moreActions")},{default:g(()=>[m(r(hi),{class:"h-4 w-4"})]),_:1},8,["aria-label"])]),_:1}),m(r(mi),{align:"end"},{default:g(()=>[m(r(Uo),{onSelect:O=>G(C)},{default:g(()=>[m(r(ao)),z(" "+v(r(s)("models.renameModel")),1)]),_:1},8,["onSelect"]),m(r(ld)),m(r(Uo),{class:"text-destructive focus:bg-destructive/10 focus:text-destructive",onSelect:O=>{Q.value=C,de.value=!0}},{default:g(()=>[m(r(hr)),z(" "+v(r(s)("models.removeModel")),1)]),_:1},8,["onSelect"])]),_:2},1024)]),_:2},1024)])]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})])):(h(),V("p",T$,v(r(s)("models.noMatch")),1)),m(fS,{open:p.value,"onUpdate:open":w[11]||(w[11]=C=>p.value=C),model:S.value?null:y.value,providers:u.value,"existing-names":i.value.map(C=>C.name),onSaved:x},null,8,["open","model","providers","existing-names"]),m(j2,{open:L.value,"onUpdate:open":w[12]||(w[12]=C=>L.value=C),model:$.value,onChanged:w[13]||(w[13]=C=>N())},null,8,["open","model"]),m(r(zs),{open:_.value,"onUpdate:open":w[16]||(w[16]=C=>_.value=C)},{default:g(()=>[m(r(Ws),{class:"max-w-sm"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(r(s)("models.renameModel")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(r(s)("models.renameDesc")),1)]),_:1}),b("div",aT,[m(r(_t),{for:"rename-input"},{default:g(()=>[z(v(r(s)("models.editor.nameLabel")),1)]),_:1}),m(r(mt),{id:"rename-input",modelValue:k.value,"onUpdate:modelValue":w[14]||(w[14]=C=>k.value=C),class:"font-mono",spellcheck:"false",autocomplete:"off",onKeydown:An(Y,["enter"])},null,8,["modelValue"]),b("p",lT,v(r(s)("models.renameHint")),1)]),b("div",iT,[m(r(ke),{variant:"outline",disabled:U.value,onClick:w[15]||(w[15]=C=>_.value=!1)},{default:g(()=>[z(v(r(s)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:U.value||!k.value.trim(),onClick:Y},{default:g(()=>[U.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):se("",!0),z(v(r(s)("settings.save")),1)]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["open"]),m(fu,{open:de.value,"onUpdate:open":w[17]||(w[17]=C=>de.value=C),variant:"destructive",title:r(s)("models.removeModel"),description:Q.value?r(s)("models.confirmRemove",{name:Q.value.name}):"","confirm-text":r(s)("models.removeModel"),loading:D.value,onConfirm:P},null,8,["open","title","description","confirm-text","loading"])]))}}),Ol=re({__name:"Checkbox",props:es({class:{type:[Boolean,null,String,Object,Array]},id:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=e,n=So(e,"modelValue");return(s,o)=>(h(),H(r(Cx),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=a=>n.value=a),id:t.id,class:ge(r(je)("peer h-4 w-4 shrink-0 cursor-pointer rounded-[4px] border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",t.class))},{default:g(()=>[m(r($x),{class:"flex h-full w-full items-center justify-center text-current"},{default:g(()=>[m(r(rn),{class:"h-3.5 w-3.5"})]),_:1})]),_:1},8,["modelValue","id","class"]))}}),cT=re({__name:"Separator",props:{class:{type:[Boolean,null,String,Object,Array]},orientation:{}},setup(e){const t=e;return(n,s)=>(h(),H(r(fk),{orientation:t.orientation??"horizontal",class:ge(r(je)("shrink-0 bg-border",t.orientation==="vertical"?"h-full w-px":"h-px w-full",t.class))},null,8,["orientation","class"]))}}),dT={class:"flex shrink-0 items-center gap-2 pr-8"},fT={class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-primary/15 text-primary"},pT={class:"min-w-0"},mT={class:"min-h-0 flex-1 space-y-3.5 overflow-y-auto px-1 py-1"},hT={class:"space-y-1.5"},gT={class:"space-y-1.5"},vT={class:"space-y-2 rounded-md border bg-background/50 p-3"},yT={class:"space-y-2"},bT={class:"flex items-center gap-2.5"},_T={class:"text-sm font-medium leading-none"},xT={class:"flex items-center gap-2.5 pl-7"},wT={class:"flex items-center gap-2.5"},kT={class:"text-sm font-medium leading-none"},CT={key:0,class:"space-y-1.5"},ST={class:"text-xs text-muted-foreground"},$T={key:1,class:"space-y-1.5"},TT={class:"text-xs text-muted-foreground"},AT=["aria-expanded"],ET={key:2,class:"space-y-1.5 rounded-md border bg-muted/30 p-3 text-xs leading-relaxed text-muted-foreground"},OT={class:"font-medium text-foreground"},PT={class:"font-medium text-foreground"},MT={class:"font-medium text-foreground"},IT={class:"space-y-1.5"},RT={class:"flex items-center justify-between"},LT={key:0,class:"text-xs text-muted-foreground"},DT={class:"space-y-1.5"},NT=["aria-expanded"],FT={key:0,class:"space-y-1.5 rounded-md border bg-muted/30 p-3"},qT={class:"text-xs text-muted-foreground"},BT={key:3,class:"text-sm text-destructive"},VT={class:"flex shrink-0 justify-end gap-2"},UT=re({__name:"SourceDialog",props:es({provider:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:es(["saved"],["update:open"]),setup(e,{emit:t}){const n=e,s=So(e,"open"),o=t,{t:a}=ft(),l=W(""),i=W(""),u=W(""),c=W(""),d=W(""),f=W(!0),p=W(!1),y=W(!1),S=W(!1),T=W(!1),E=W(""),x=W(!1);function _($){if($==="openai"){if(f.value&&!p.value)return;f.value=!f.value}else{if(p.value&&!f.value)return;p.value=!p.value}}const I=()=>{const $=[];return f.value&&$.push("openai"),p.value&&$.push("anthropic"),$};function k(){var R;E.value="",S.value=!1,T.value=!!((R=n.provider)!=null&&R.rpm);const $=n.provider;if(!$){l.value="",i.value="",u.value="",c.value="",d.value="",f.value=!0,p.value=!1,y.value=!1;return}l.value=$.name,i.value=$.baseUrlOpenai,u.value=$.baseUrlAnthropic,c.value="",d.value=$.rpm?String($.rpm):"",f.value=$.formats.includes("openai"),p.value=$.formats.includes("anthropic"),y.value=!!$.supportsResponses}Re(s,$=>{$&&k()});function U(){if(!I().length)E.value=a("sources.errFormat");else if(!n.provider&&(!l.value.trim()||!c.value))E.value=a("sources.errRequired");else if(n.provider&&!l.value.trim())E.value=a("sources.errNameRequired");else if(f.value&&!i.value.trim()||p.value&&!u.value.trim())E.value=a("sources.errBaseUrl");else return E.value="",!0;return!1}async function L(){if(!x.value&&U()){x.value=!0;try{const $={name:l.value.trim(),baseUrlOpenai:i.value.trim(),baseUrlAnthropic:u.value.trim(),formats:I(),supportsResponses:f.value&&y.value,rpm:Number(d.value)||0};c.value&&($.apiKey=c.value);const R=n.provider?await Ve("PUT",`/admin/providers/${n.provider.id}`,$):await Ve("POST","/admin/providers",$);Be(a(n.provider?"sources.updated":"sources.added"),"success"),s.value=!1,o("saved",R.provider)}catch($){Be($.message,"error")}finally{x.value=!1}}}return($,R)=>(h(),H(r(zs),{open:s.value,"onUpdate:open":R[11]||(R[11]=G=>s.value=G)},{default:g(()=>[m(r(Ws),{class:"max-w-lg"},{default:g(()=>{var G;return[b("div",dT,[b("span",fT,[m(r(wo),{class:"h-4 w-4"})]),b("div",pT,[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(e.provider?r(a)("sources.editTitle"):r(a)("sources.add")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(e.provider?r(a)("sources.dialogEditDesc"):r(a)("sources.dialogCreateDesc")),1)]),_:1})])]),b("div",mT,[b("div",hT,[m(r(_t),{for:"s-name"},{default:g(()=>[z(v(r(a)("sources.nameLabel")),1)]),_:1}),m(r(mt),{id:"s-name",modelValue:l.value,"onUpdate:modelValue":R[0]||(R[0]=Y=>l.value=Y),placeholder:r(a)("sources.namePh"),autocomplete:"off","aria-label":"name"},null,8,["modelValue","placeholder"])]),b("div",gT,[m(r(_t),null,{default:g(()=>[z(v(r(a)("sources.formats")),1)]),_:1}),b("div",vT,[b("div",yT,[b("div",bT,[m(r(Ol),{"model-value":f.value,disabled:f.value&&!p.value,"aria-label":"openai","onUpdate:modelValue":R[1]||(R[1]=Y=>_("openai"))},null,8,["model-value","disabled"]),b("span",_T,v(r(Vo).openai),1),R[12]||(R[12]=b("span",{class:"text-xs text-muted-foreground"},"/chat/completions",-1))]),b("div",xT,[m(r(Ol),{modelValue:y.value,"onUpdate:modelValue":R[2]||(R[2]=Y=>y.value=Y),disabled:!f.value,"aria-label":r(a)("sources.responses")},null,8,["modelValue","disabled","aria-label"]),b("span",{class:ge(["text-sm leading-none",f.value?"":"text-muted-foreground"])},v(r(a)("sources.responses")),3),R[13]||(R[13]=b("span",{class:"text-xs text-muted-foreground"},"/responses",-1))])]),m(r(cT)),b("div",wT,[m(r(Ol),{"model-value":p.value,disabled:p.value&&!f.value,"aria-label":"anthropic","onUpdate:modelValue":R[3]||(R[3]=Y=>_("anthropic"))},null,8,["model-value","disabled"]),b("span",kT,v(r(Vo).anthropic),1),R[14]||(R[14]=b("span",{class:"text-xs text-muted-foreground"},"/messages",-1))])])]),f.value?(h(),V("div",CT,[m(r(_t),{for:"s-url-openai"},{default:g(()=>[z(v(r(a)("sources.urlLabelOpenai")),1)]),_:1}),m(r(mt),{id:"s-url-openai",modelValue:i.value,"onUpdate:modelValue":R[4]||(R[4]=Y=>i.value=Y),placeholder:r(a)("sources.urlPhOpenai"),autocomplete:"off","aria-label":"openai base url"},null,8,["modelValue","placeholder"]),b("p",ST,v(r(a)("sources.urlHintOpenai")),1)])):se("",!0),p.value?(h(),V("div",$T,[m(r(_t),{for:"s-url-anthropic"},{default:g(()=>[z(v(r(a)("sources.urlLabelAnthropic")),1)]),_:1}),m(r(mt),{id:"s-url-anthropic",modelValue:u.value,"onUpdate:modelValue":R[5]||(R[5]=Y=>u.value=Y),placeholder:r(a)("sources.urlPhAnthropic"),autocomplete:"off","aria-label":"anthropic base url"},null,8,["modelValue","placeholder"]),b("p",TT,v(r(a)("sources.urlHintAnthropic")),1)])):se("",!0),b("button",{type:"button",class:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground","aria-expanded":S.value,onClick:R[6]||(R[6]=Y=>S.value=!S.value)},[m(r(cu),{class:"h-3.5 w-3.5"}),z(" "+v(r(a)("sources.baseHelpToggle"))+" ",1),m(r(cn),{class:ge(["h-3.5 w-3.5 transition-transform",{"rotate-180":S.value}])},null,8,["class"])],8,AT),S.value?(h(),V("div",ET,[b("p",null,v(r(a)("sources.baseHelpSplit")),1),b("p",null,[b("span",OT,v(r(Vo).openai),1),z(" — "+v(r(a)("sources.baseHelpOpenai")),1)]),b("p",null,[b("span",PT,v(r(Vo).anthropic),1),z(" — "+v(r(a)("sources.baseHelpAnthropic")),1)]),b("p",null,[b("span",MT,v(r(a)("sources.responses")),1),z(" — "+v(r(a)("sources.responsesNote")),1)])])):se("",!0),b("div",IT,[b("div",RT,[m(r(_t),{for:"s-key"},{default:g(()=>[z(v(r(a)("sources.keyLabel")),1)]),_:1}),(G=e.provider)!=null&&G.apiKey?(h(),V("span",LT,v(r(a)("sources.currentKeyLabel"))+": "+v(e.provider.apiKey),1)):se("",!0)]),m(r(mt),{id:"s-key",modelValue:c.value,"onUpdate:modelValue":R[7]||(R[7]=Y=>c.value=Y),type:"password",placeholder:e.provider?r(a)("sources.keyPhEdit"):r(a)("sources.keyPh"),autocomplete:"new-password","aria-label":"api key"},null,8,["modelValue","placeholder"])]),b("div",DT,[b("button",{type:"button",class:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground","aria-expanded":T.value,onClick:R[8]||(R[8]=Y=>T.value=!T.value)},[m(r(vs),{class:"h-3.5 w-3.5"}),z(" "+v(r(a)("sources.advancedToggle"))+" ",1),m(r(cn),{class:ge(["h-3.5 w-3.5 transition-transform",{"rotate-180":T.value}])},null,8,["class"])],8,NT),T.value?(h(),V("div",FT,[m(r(_t),{for:"s-rpm"},{default:g(()=>[z(v(r(a)("sources.rpmLabel")),1)]),_:1}),m(r(mt),{id:"s-rpm",modelValue:d.value,"onUpdate:modelValue":R[9]||(R[9]=Y=>d.value=Y),type:"number",min:"0",inputmode:"numeric",placeholder:r(a)("sources.rpmPh"),"aria-label":"rpm"},null,8,["modelValue","placeholder"]),b("p",qT,v(r(a)("sources.rpmHint")),1)])):se("",!0)]),E.value?(h(),V("p",BT,v(E.value),1)):se("",!0)]),b("div",VT,[m(r(ke),{variant:"outline",disabled:x.value,onClick:R[10]||(R[10]=Y=>s.value=!1)},{default:g(()=>[z(v(r(a)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:x.value,onClick:L},{default:g(()=>[x.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):se("",!0),z(" "+v(r(a)("sources.saveBtn")),1)]),_:1},8,["disabled"])])]}),_:1})]),_:1},8,["open"]))}}),HT={class:"space-y-2.5"},jT={class:"flex items-center gap-2"},zT={class:"relative min-w-0 flex-1"},WT={class:"flex items-center gap-2"},KT={class:"relative min-w-0 flex-1"},GT={key:0,class:"text-xs text-muted-foreground"},YT={key:0,class:"flex flex-col items-center gap-2 px-4 py-10 text-center"},XT={class:"flex size-9 items-center justify-center rounded-lg bg-muted text-muted-foreground"},JT={class:"text-sm text-muted-foreground"},QT={key:0,class:"px-3 py-6 text-center text-xs text-muted-foreground"},ZT=["data-mname","title","onClick"],eA={class:"min-w-0 flex-1 truncate font-mono text-sm"},tA=["disabled","aria-label","onClick"],nA=["disabled","title","aria-label","onClick"],sA=re({__name:"SourceModelsDialog",props:{open:{type:Boolean},provider:{}},emits:["update:open","saved"],setup(e,{emit:t}){const n=e,s=t,{t:o}=ft(),a=W(""),l=W(""),i=W([]),u=W(""),c=W(null),d=W(null),f=W(null),p=W(new Set);let y;function S(D){p.value=new Set(D),clearTimeout(y),y=setTimeout(()=>p.value.clear(),1600)}Co(()=>clearTimeout(y)),Re(()=>n.open,async D=>{var P,N,J;D&&(a.value="",l.value="",i.value=[...((P=n.provider)==null?void 0:P.extraModels)??[]],p.value.clear(),Y.value.clear(),ne.value={},await it(),(J=(N=c.value)==null?void 0:N.$el)==null||J.focus())}),Re(()=>n.provider,D=>{n.open&&D&&(i.value=[...D.extraModels??[]])});const T=ae(()=>{var D;return((D=n.provider)==null?void 0:D.discoveredModels)??[]}),E=ae(()=>po({discoveredModels:T.value,extraModels:i.value}).map(P=>({name:P,manual:i.value.includes(P)&&!T.value.includes(P)}))),x=ae(()=>{const D=a.value.trim().toLowerCase();return D?E.value.filter(P=>P.name.toLowerCase().includes(D)):E.value}),_=ae(()=>{const D=l.value.trim();return!!D&&E.value.some(P=>P.name===D)}),I=ae(()=>!!l.value.trim()&&!_.value);function k(D){i.value=[...D.extraModels??[]],s("saved",D)}async function U(D){const P=await Ve("PUT",`/admin/providers/${n.provider.id}/extra-models`,{models:D});return k(P.provider),P.provider}async function L(){var P,N,J,oe;if(!n.provider||u.value||!I.value)return;const D=[...new Set(l.value.split(/[\s,;]+/).map(pe=>pe.trim()).filter(Boolean))].filter(pe=>!i.value.includes(pe));if(D.length){u.value="add";try{await U([...i.value,...D]),l.value="",S(D),Be(o("sources.modelAdded",{n:D.length}),"success"),await it(),(N=(P=f.value)==null?void 0:P.querySelector(`[data-mname="${CSS.escape(D[0])}"]`))==null||N.scrollIntoView({block:"nearest"}),(oe=(J=d.value)==null?void 0:J.$el)==null||oe.focus()}catch(pe){Be(pe.message,"error")}finally{u.value=""}}}async function $(D){if(!u.value){u.value="remove";try{await U(i.value.filter(P=>P!==D)),Be(o("sources.modelRemoved",{name:D}),"success")}catch(P){Be(P.message,"error")}finally{u.value=""}}}async function R(){if(!(!n.provider||u.value)){u.value="refresh";try{const D=await Ve("POST",`/admin/providers/${n.provider.id}/discover`);k({...n.provider,discoveredModels:D.models}),Be(o("sources.refreshDone",{name:n.provider.name}),D.models.length?"success":"default")}catch(D){Be(D.message,"error")}finally{u.value=""}}}async function G(D){const P=await kr(D);Be(o(P?"connect.copied":"connect.copyFailed"),P?"success":"error")}const Y=W(new Set),ne=W({});async function Q(D){if(!(!n.provider||Y.value.has(D))){Y.value.add(D);try{const P=await Ve("POST",`/admin/providers/${n.provider.id}/test?model=${encodeURIComponent(D)}`);ne.value={...ne.value,[D]:P.results}}catch(P){Be(P.message,"error")}finally{Y.value.delete(D)}}}function de(D){a.value&&(D.stopPropagation(),D.preventDefault(),a.value="")}return(D,P)=>(h(),H(r(zs),{open:e.open,"onUpdate:open":P[2]||(P[2]=N=>s("update:open",N))},{default:g(()=>[m(r(Ws),{class:"max-w-lg"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(r(o)("sources.modelsTitle")),1)]),_:1}),m(r(Gs),{class:"sr-only"},{default:g(()=>{var N;return[z(v(r(o)("sources.modelsDesc",{name:((N=e.provider)==null?void 0:N.name)??""})),1)]}),_:1}),b("div",HT,[b("div",jT,[b("div",zT,[m(r(du),{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{ref_key:"inputRef",ref:c,modelValue:a.value,"onUpdate:modelValue":P[0]||(P[0]=N=>a.value=N),placeholder:r(o)("sources.modelsSearchPh"),autocomplete:"off",spellcheck:"false",class:"pl-8 font-mono",onKeydown:An(de,["esc"])},null,8,["modelValue","placeholder"])]),m(r(ke),{variant:"outline",size:"icon",class:"size-9 shrink-0",disabled:u.value!=="",title:r(o)("sources.refreshModels"),"aria-label":r(o)("sources.refreshModels"),onClick:R},{default:g(()=>[u.value==="refresh"?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-4 w-4"}))]),_:1},8,["disabled","title","aria-label"])]),b("div",WT,[b("div",KT,[m(r(Yn),{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{ref_key:"addRef",ref:d,modelValue:l.value,"onUpdate:modelValue":P[1]||(P[1]=N=>l.value=N),placeholder:r(o)("sources.modelsAddPh"),autocomplete:"off",spellcheck:"false",class:"pl-8 font-mono",onKeydown:An(Ie(L,["prevent"]),["enter"])},null,8,["modelValue","placeholder","onKeydown"])]),m(r(ke),{variant:"outline",class:"shrink-0",disabled:!I.value||u.value!=="",onClick:L},{default:g(()=>[u.value==="add"?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Yn),{key:1,class:"h-4 w-4"})),z(v(r(o)("sources.modelsAddBtn")),1)]),_:1},8,["disabled"])]),_.value?(h(),V("p",GT,v(r(o)("sources.modelsAddExists",{q:l.value.trim()})),1)):se("",!0),b("div",{ref_key:"listRef",ref:f,class:"max-h-80 divide-y overflow-y-auto rounded-md border"},[E.value.length?(h(),V(me,{key:1},[x.value.length?se("",!0):(h(),V("div",QT,v(r(o)("sources.modelsNoMatch")),1)),(h(!0),V(me,null,Pe(x.value,N=>(h(),V("div",{key:N.name,"data-mname":N.name,class:ge(["flex cursor-pointer items-center gap-2 px-3 py-1.5 transition-colors hover:bg-muted/50",p.value.has(N.name)?"row-flash":""]),title:`${N.name} · ${r(o)("sources.modelCopyTip")}`,onClick:J=>G(N.name)},[b("span",eA,v(N.name),1),ne.value[N.name]?(h(!0),V(me,{key:0},Pe(ne.value[N.name],J=>(h(),H(r(Oe),{key:J.format,variant:J.ok?"success":"destructive",class:"shrink-0 font-mono",title:`${r(Lt)(J.format)} · ${J.status||"?"} · ${J.ms} ms${J.error?" · "+J.error:""}`},{default:g(()=>[z(v(J.ok?"✓":"✗")+" "+v(r(Lt)(J.format))+" "+v(J.ok?`${J.ms}ms`:J.status||"–"),1)]),_:2},1032,["variant","title"]))),128)):se("",!0),N.manual?(h(),H(r(Oe),{key:1,variant:"secondary",class:"shrink-0"},{default:g(()=>[z(v(r(o)("sources.modelTagManual")),1)]),_:1})):se("",!0),N.manual?(h(),V("button",{key:2,type:"button",class:"-mr-1 flex size-6 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-destructive",disabled:u.value!=="","aria-label":r(o)("sources.modelRemove"),onClick:Ie(J=>$(N.name),["stop"])},[m(r(Ao),{class:"h-3.5 w-3.5"})],8,tA)):se("",!0),b("button",{type:"button",class:"-mr-1 flex size-6 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",disabled:Y.value.has(N.name),title:r(o)("sources.testBtn"),"aria-label":`${r(o)("sources.testBtn")} ${N.name}`,onClick:Ie(J=>Q(N.name),["stop"])},[Y.value.has(N.name)?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-3.5 w-3.5"}))],8,nA)],10,ZT))),128))],64)):(h(),V("div",YT,[b("span",XT,[m(r(jk),{class:"size-4"})]),b("p",JT,v(r(o)("sources.modelsEmpty")),1)]))],512)])]),_:1})]),_:1},8,["open"]))}}),oA=Im(sA,[["__scopeId","data-v-35cb6f16"]]),rA={class:"space-y-4"},aA={class:"flex flex-wrap items-center justify-between gap-2"},lA={class:"flex items-center gap-2"},iA={class:"text-base font-semibold"},uA={class:"text-sm text-muted-foreground"},cA={key:0,class:"flex items-center gap-2"},dA={class:"flex items-center rounded-md border p-0.5"},fA={key:0,class:"py-8 text-center text-sm text-muted-foreground"},pA={key:1,class:"py-8 text-center text-sm text-destructive"},mA={class:"flex h-11 w-11 items-center justify-center rounded-xl bg-primary/15 text-primary"},hA={class:"space-y-1"},gA={class:"font-medium"},vA={class:"max-w-sm text-sm text-muted-foreground"},yA={key:0,class:"flex flex-wrap items-center gap-3 rounded-lg border border-primary/40 bg-primary/5 px-3 py-2.5"},bA={class:"min-w-0 flex-1 text-sm"},_A={key:1,class:"grid items-stretch gap-3 md:grid-cols-2"},xA={class:"flex h-full flex-col gap-3 p-4"},wA={class:"flex min-w-0 flex-wrap items-center gap-1.5"},kA={class:"truncate text-sm font-semibold"},CA=["title","aria-label","onClick"],SA={class:"min-w-0 flex-1 space-y-1"},$A={key:0,class:"truncate font-mono text-xs text-muted-foreground"},TA={class:"opacity-60"},AA={key:1,class:"truncate font-mono text-xs text-muted-foreground"},EA={class:"opacity-60"},OA={class:"flex items-center gap-1 border-t pt-3"},PA={key:2,class:"overflow-hidden rounded-lg border"},MA={class:"flex flex-wrap gap-1"},IA={class:"max-w-[300px] space-y-0.5 font-mono text-xs text-muted-foreground"},RA=["title"],LA={class:"opacity-60"},DA=["title"],NA={class:"opacity-60"},FA=["title"],qA={key:1},BA=["title","aria-label","onClick"],VA={class:"flex items-center justify-end gap-0.5"},UA={class:"space-y-3"},HA={class:"text-xs text-muted-foreground"},jA={key:0,class:"space-y-1.5"},zA={class:"flex flex-wrap gap-1.5"},WA=["onClick"],KA={key:1,class:"space-y-1.5 rounded-md border bg-muted/30 p-2.5"},GA={class:"shrink-0 tabular-nums text-muted-foreground"},YA=["title"],XA={class:"flex justify-end gap-2"},vd="myapikey.view.sources",JA=re({__name:"Sources",emits:["goto"],setup(e,{emit:t}){const{t:n}=ft(),s=t,o=W([]),a=W(!0),l=W(!1),i=W(""),u=W(localStorage.getItem(vd)==="table"?"table":"cards");function c(ve){u.value=ve;try{localStorage.setItem(vd,ve)}catch{}}const d=W(!1),f=W(null);function p(){f.value=null,d.value=!0}function y(ve){f.value=ve,d.value=!0}function S(ve){const ye=o.value.some(ee=>ee.id===ve.id);o.value=ye?o.value.map(ee=>ee.id===ve.id?ve:ee):[...o.value,ve]}const T=W({});async function E(ve){T.value[ve.id]=!0;try{const ye=await Ve("POST",`/admin/providers/${ve.id}/discover`);o.value=o.value.map(ee=>ee.id===ve.id?{...ee,discoveredModels:ye.models}:ee),Be(n("sources.refreshDone",{name:ve.name}),ye.models.length?"success":"default")}catch(ye){Be(ye.message,"error")}finally{T.value[ve.id]=!1}}const x=W(null),_=W(!1),I=W(!1),k=W(!1),U=W(null),L=W(""),$=W({}),R=W(!1),G=W(null),Y=ae(()=>U.value?po(U.value):[]);function ne(ve){return[...ve.formats,...ve.supportsResponses?["responses"]:[]]}function Q(ve){U.value=ve,L.value=po(ve)[0]??"",$.value=Object.fromEntries(ne(ve).map(ye=>[ye,!0])),G.value=null,k.value=!0}async function de(){const ve=U.value,ye=L.value.trim();if(!ve||!ye||R.value)return;const ee=ne(ve),we=ee.filter(_e=>$.value[_e]);if(we.length){R.value=!0,G.value=null;try{const _e=we.length<ee.length?we.map(at=>`&format=${at}`).join(""):"",Fe=await Ve("POST",`/admin/providers/${ve.id}/test?model=${encodeURIComponent(ye)}${_e}`);G.value=Fe.results}catch(_e){Be(_e.message,"error")}finally{R.value=!1}}}function D(ve,ye){return ve&&ye in pt?`border-transparent ${pt[ye].solid} text-white shadow-sm`:ve?"border-transparent bg-primary text-primary-foreground shadow-sm":"border-input text-muted-foreground hover:bg-accent hover:text-accent-foreground"}async function P(){const ve=x.value;if(!(!ve||I.value)){I.value=!0;try{await Ve("DELETE",`/admin/providers/${ve.id}`),o.value=o.value.filter(ye=>ye.id!==ve.id),Be(n("sources.removed",{name:ve.name}),"success"),_.value=!1}catch(ye){Be(ye.message,"error")}finally{I.value=!1}}}function N(ve){return po(ve).length}function J(ve){return N(ve)>0?"found":ve.discoveredAt?"empty":"never"}function oe(ve){const ye=J(ve);return ye==="found"?n("sources.discoveredCount",{n:N(ve)}):n(ye==="empty"?"sources.noModelsFound":"sources.notScanned")}function pe(ve){const ye=J(ve);return n(ye==="empty"?"sources.noModelsHint":ye==="never"?"sources.notScannedHint":"sources.modelsOpenHint")}const X=W(!1),he=W(null);function Z(ve){he.value=ve,X.value=!0}function Ye(ve){return ve in pt?pt[ve].badge:""}async function Ue(){l.value=!0,i.value="";try{const[ve,ye]=await Promise.all([Ve("GET","/admin/providers"),Ve("GET","/admin/models").catch(()=>null)]);o.value=ve.providers,a.value=!!(ye!=null&&ye.models.length)}catch(ve){i.value=ve.message}finally{l.value=!1}}return rt(Ue),(ve,ye)=>(h(),V("div",rA,[b("div",aA,[b("div",lA,[m(r(wo),{class:"h-4 w-4 text-primary"}),b("span",iA,v(r(n)("sources.pageTitle")),1),b("span",uA,v(r(n)("sources.pageDesc")),1)]),o.value.length?(h(),V("div",cA,[b("div",dA,[m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",u.value==="cards"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(n)("common.viewCards"),"aria-label":r(n)("common.viewCards"),onClick:ye[0]||(ye[0]=ee=>c("cards"))},{default:g(()=>[m(r(Em),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"]),m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",u.value==="table"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(n)("common.viewTable"),"aria-label":r(n)("common.viewTable"),onClick:ye[1]||(ye[1]=ee=>c("table"))},{default:g(()=>[m(r(Pm),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"])]),m(r(ke),{size:"sm",onClick:p},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(n)("sources.add")),1)]),_:1})])):se("",!0)]),l.value?(h(),V("p",fA,v(r(n)("common.loading")),1)):i.value?(h(),V("p",pA,v(i.value),1)):o.value.length?(h(),V(me,{key:3},[a.value?se("",!0):(h(),V("div",yA,[b("p",bA,v(r(n)("sources.nextHint")),1),m(r(ke),{size:"sm",onClick:ye[2]||(ye[2]=ee=>s("goto","models"))},{default:g(()=>[z(v(r(n)("sources.nextCta")),1)]),_:1})])),u.value==="cards"?(h(),V("div",_A,[(h(!0),V(me,null,Pe(o.value,ee=>(h(),H(r(Vt),{key:ee.id,class:"group cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/30",onClick:we=>y(ee)},{default:g(()=>[b("div",xA,[b("div",wA,[b("span",kA,v(ee.name),1),(h(!0),V(me,null,Pe(ee.formats,we=>(h(),H(r(Oe),{key:we,variant:"outline",class:ge(["shrink-0",Ye(we)])},{default:g(()=>[z(v(r(Lt)(we)),1)]),_:2},1032,["class"]))),128)),ee.supportsResponses?(h(),H(r(Oe),{key:0,variant:"outline",class:ge(["shrink-0",r(pt).responses.badge])},{default:g(()=>[z(v(r(Lt)("responses")),1)]),_:1},8,["class"])):se("",!0),ee.rpm?(h(),H(r(Oe),{key:1,variant:"outline",class:"shrink-0",title:r(n)("sources.rpmBadgeHint")},{default:g(()=>[z(v(r(n)("sources.rpmBadge",{n:ee.rpm})),1)]),_:2},1032,["title"])):se("",!0),b("button",{type:"button",class:"shrink-0 rounded-full outline-none focus-visible:ring-2 focus-visible:ring-ring",title:pe(ee),"aria-label":r(n)("sources.modelsTitle"),onClick:Ie(we=>Z(ee),["stop"])},[m(r(Oe),{variant:"muted",class:"cursor-pointer gap-1 pr-1.5 transition-colors hover:bg-accent hover:text-accent-foreground"},{default:g(()=>[z(v(oe(ee))+" ",1),m(r(cn),{class:"size-3 opacity-60"})]),_:2},1024)],8,CA)]),b("div",SA,[ee.formats.includes("openai")?(h(),V("div",$A,[b("span",TA,v(r(Lt)("openai"))+" ·",1),z(" "+v(ee.baseUrlOpenai),1)])):se("",!0),ee.formats.includes("anthropic")?(h(),V("div",AA,[b("span",EA,v(r(Lt)("anthropic"))+" ·",1),z(" "+v(ee.baseUrlAnthropic),1)])):se("",!0)]),b("div",OA,[m(r(ke),{variant:"ghost",size:"sm",class:"h-7 gap-1.5 px-2 text-xs",onClick:Ie(we=>Q(ee),["stop"])},{default:g(()=>[m(r(Ns),{class:"h-3.5 w-3.5"}),z(v(r(n)("sources.testBtn")),1)]),_:1},8,["onClick"]),m(r(ke),{variant:"ghost",size:"sm",class:"h-7 gap-1.5 px-2 text-xs",disabled:T.value[ee.id],onClick:Ie(we=>E(ee),["stop"])},{default:g(()=>[T.value[ee.id]?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"})),z(v(r(n)("sources.refreshModels")),1)]),_:2},1032,["disabled","onClick"]),m(r(ke),{variant:"ghost",size:"sm",class:"h-7 gap-1.5 px-2 text-xs",onClick:Ie(we=>y(ee),["stop"])},{default:g(()=>[m(r(ao),{class:"h-3.5 w-3.5"}),z(v(r(n)("sources.editLabel")),1)]),_:1},8,["onClick"]),b("div",{class:"ml-auto",onClick:ye[3]||(ye[3]=Ie(()=>{},["stop"]))},[m(r(fi),null,{default:g(()=>[m(r(pi),null,{default:g(()=>[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground","aria-label":r(n)("sources.moreActions")},{default:g(()=>[m(r(hi),{class:"h-4 w-4"})]),_:1},8,["aria-label"])]),_:1}),m(r(mi),{align:"end"},{default:g(()=>[m(r(Uo),{class:"text-destructive focus:bg-destructive/10 focus:text-destructive",onSelect:we=>{x.value=ee,_.value=!0}},{default:g(()=>[m(r(hr)),z(" "+v(r(n)("sources.deleteLabel")),1)]),_:1},8,["onSelect"])]),_:2},1024)]),_:2},1024)])])])]),_:2},1032,["onClick"]))),128))])):(h(),V("div",PA,[m(r(el),null,{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),{class:"hover:bg-transparent"},{default:g(()=>[m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colName")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colFormats")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colBaseUrl")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colRpm")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colDiscovered")),1)]),_:1}),m(r(ot),{class:"w-[168px] text-right"},{default:g(()=>[z(v(r(n)("sources.colActions")),1)]),_:1})]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(o.value,ee=>(h(),H(r(Sn),{key:ee.id,class:"cursor-pointer",onClick:we=>y(ee)},{default:g(()=>[m(r(tt),{class:"max-w-[160px] truncate font-medium",title:ee.name},{default:g(()=>[z(v(ee.name),1)]),_:2},1032,["title"]),m(r(tt),null,{default:g(()=>[b("div",MA,[(h(!0),V(me,null,Pe(ee.formats,we=>(h(),H(r(Oe),{key:we,variant:"outline",class:ge(Ye(we))},{default:g(()=>[z(v(r(Lt)(we)),1)]),_:2},1032,["class"]))),128)),ee.supportsResponses?(h(),H(r(Oe),{key:0,variant:"outline",class:ge(r(pt).responses.badge)},{default:g(()=>[z(v(r(Lt)("responses")),1)]),_:1},8,["class"])):se("",!0)])]),_:2},1024),m(r(tt),null,{default:g(()=>[b("div",IA,[ee.formats.includes("openai")?(h(),V("div",{key:0,class:"truncate",title:ee.baseUrlOpenai},[b("span",LA,v(r(Lt)("openai"))+" · ",1),z(v(ee.baseUrlOpenai),1)],8,RA)):se("",!0),ee.formats.includes("anthropic")?(h(),V("div",{key:1,class:"truncate",title:ee.baseUrlAnthropic},[b("span",NA,v(r(Lt)("anthropic"))+" · ",1),z(v(ee.baseUrlAnthropic),1)],8,DA)):se("",!0)])]),_:2},1024),m(r(tt),{class:"whitespace-nowrap text-xs text-muted-foreground"},{default:g(()=>[ee.rpm?(h(),V("span",{key:0,title:r(n)("sources.rpmBadgeHint"),class:"font-mono"},v(r(n)("sources.rpmBadge",{n:ee.rpm})),9,FA)):(h(),V("span",qA,"—"))]),_:2},1024),m(r(tt),null,{default:g(()=>[b("button",{type:"button",class:"rounded-full outline-none focus-visible:ring-2 focus-visible:ring-ring",title:pe(ee),"aria-label":r(n)("sources.modelsTitle"),onClick:Ie(we=>Z(ee),["stop"])},[m(r(Oe),{variant:"muted",class:"cursor-pointer gap-1 pr-1.5 transition-colors hover:bg-accent hover:text-accent-foreground"},{default:g(()=>[z(v(oe(ee))+" ",1),m(r(cn),{class:"size-3 opacity-60"})]),_:2},1024)],8,BA)]),_:2},1024),m(r(tt),{onClick:ye[4]||(ye[4]=Ie(()=>{},["stop"]))},{default:g(()=>[b("div",VA,[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(n)("sources.testBtn"),"aria-label":r(n)("sources.testBtn"),onClick:we=>Q(ee)},{default:g(()=>[m(r(Ns),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",disabled:T.value[ee.id],title:r(n)("sources.refreshModels"),"aria-label":r(n)("sources.refreshModels"),onClick:we=>E(ee)},{default:g(()=>[T.value[ee.id]?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"}))]),_:2},1032,["disabled","title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(n)("sources.editLabel"),"aria-label":r(n)("sources.editLabel"),onClick:we=>y(ee)},{default:g(()=>[m(r(ao),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-destructive hover:text-destructive",title:r(n)("sources.deleteLabel"),"aria-label":r(n)("sources.deleteLabel"),onClick:we=>{x.value=ee,_.value=!0}},{default:g(()=>[m(r(hr),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"])])]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})]))],64)):(h(),H(r(Vt),{key:2},{default:g(()=>[m(r(Zt),{class:"flex flex-col items-center gap-3 py-12 text-center"},{default:g(()=>[b("span",mA,[m(r(wo),{class:"h-5 w-5"})]),b("div",hA,[b("div",gA,v(r(n)("sources.emptyTitle")),1),b("p",vA,v(r(n)("sources.emptyHint")),1)]),m(r(ke),{onClick:p},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(n)("sources.add")),1)]),_:1})]),_:1})]),_:1})),m(UT,{open:d.value,"onUpdate:open":ye[5]||(ye[5]=ee=>d.value=ee),provider:f.value,onSaved:S},null,8,["open","provider"]),m(oA,{open:X.value,"onUpdate:open":ye[6]||(ye[6]=ee=>X.value=ee),provider:he.value,onSaved:S},null,8,["open","provider"]),m(r(zs),{open:k.value,"onUpdate:open":ye[9]||(ye[9]=ee=>k.value=ee)},{default:g(()=>[m(r(Ws),{class:"max-w-md"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(r(n)("sources.testTitle")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(r(n)("sources.testDesc")),1)]),_:1}),b("div",UA,[b("div",{class:"space-y-1.5",onKeydown:An(de,["enter"])},[m(r(_t),null,{default:g(()=>[z(v(r(n)("sources.testModelLabel")),1)]),_:1}),m(Mm,{modelValue:L.value,"onUpdate:modelValue":ye[7]||(ye[7]=ee=>L.value=ee),options:Y.value,placeholder:r(n)("sources.testModelPh")},null,8,["modelValue","options","placeholder"]),b("p",HA,v(r(n)("sources.testModelHint")),1)],32),U.value?(h(),V("div",jA,[m(r(_t),null,{default:g(()=>[z(v(r(n)("sources.formats")),1)]),_:1}),b("div",zA,[(h(!0),V(me,null,Pe(ne(U.value),ee=>(h(),V("button",{key:ee,type:"button",class:ge(["inline-flex items-center rounded-md border px-2 py-0.5 font-mono text-xs font-medium transition-colors",D(!!$.value[ee],ee)]),onClick:we=>$.value[ee]=!$.value[ee]},v(r(Lt)(ee)),11,WA))),128))])])):se("",!0),G.value?(h(),V("div",KA,[(h(!0),V(me,null,Pe(G.value,ee=>(h(),V("div",{key:ee.format,class:"flex min-w-0 items-center gap-2 text-xs"},[m(r(Oe),{variant:"outline",class:ge(Ye(ee.format))},{default:g(()=>[z(v(r(Lt)(ee.format)),1)]),_:2},1032,["class"]),ee.ok?(h(),H(r(Oe),{key:0,variant:"success",class:"shrink-0"},{default:g(()=>[z(v(r(n)("models.probeOk")),1)]),_:1})):(h(),H(r(Oe),{key:1,variant:"destructive",class:"shrink-0"},{default:g(()=>[z(v(r(n)("models.probeFail"))+" · "+v(ee.status||"?"),1)]),_:2},1024)),b("span",GA,v(ee.ms)+" ms",1),ee.error?(h(),V("span",{key:2,class:"min-w-0 truncate text-destructive",title:ee.error},v(ee.error),9,YA)):se("",!0)]))),128))])):se("",!0)]),b("div",XA,[m(r(ke),{variant:"outline",disabled:R.value,onClick:ye[8]||(ye[8]=ee=>k.value=!1)},{default:g(()=>[z(v(r(n)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:R.value||!L.value.trim(),onClick:de},{default:g(()=>[R.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-4 w-4"})),z(v(r(n)("sources.testRun")),1)]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["open"]),m(fu,{open:_.value,"onUpdate:open":ye[10]||(ye[10]=ee=>_.value=ee),variant:"destructive",title:r(n)("sources.remove"),description:x.value?r(n)("sources.confirmRemove",{name:x.value.name}):"","confirm-text":r(n)("sources.remove"),loading:I.value,onConfirm:P},null,8,["open","title","description","confirm-text","loading"])]))}}),QA={class:"flex items-center justify-between gap-2"},ZA={class:"flex gap-1"},eE={class:"sr-only"},tE={class:"flex flex-wrap items-center gap-2"},nE={class:"relative flex-1 sm:max-w-sm"},sE={key:0,class:"inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-medium text-primary-foreground"},oE={class:"space-y-2.5"},rE={class:"flex items-center justify-between"},aE={class:"text-xs font-medium"},lE={class:"space-y-2"},iE={class:"grid grid-cols-[3.5rem_1fr] items-center gap-2"},uE={class:"text-xs text-muted-foreground"},cE={class:"grid grid-cols-[3.5rem_1fr] items-center gap-2"},dE={class:"text-xs text-muted-foreground"},fE={class:"grid grid-cols-[3.5rem_1fr] items-center gap-2"},pE={class:"text-xs text-muted-foreground"},mE={key:0,class:"flex flex-wrap items-center gap-1.5"},hE={class:"text-muted-foreground"},gE={class:"font-medium"},vE=["aria-label","onClick"],yE={class:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground"},bE={key:1,class:"space-y-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3"},_E={class:"flex items-center gap-1.5 text-xs font-medium text-amber-700 dark:text-amber-400"},xE={class:"space-y-1.5"},wE={class:"font-medium"},kE={class:"break-all text-muted-foreground"},CE={key:2,class:"space-y-2 rounded-lg border border-orange-500/30 bg-orange-500/5 p-3"},SE={class:"flex items-center gap-1.5 text-xs font-medium text-orange-700 dark:text-orange-400"},$E={class:"space-y-1.5"},TE={class:"font-medium"},AE={class:"text-muted-foreground"},EE={key:3,class:"py-6 text-center text-sm text-muted-foreground"},OE={key:4,class:"py-6 text-center text-sm text-muted-foreground"},PE={key:5,class:"overflow-x-auto"},ME={class:"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs"},IE={class:"font-mono text-muted-foreground"},RE={class:"font-medium"},LE={class:"text-muted-foreground"},DE={class:"text-muted-foreground"},NE={class:"break-all text-muted-foreground"},FE={key:0,class:"text-muted-foreground/60"},qE={class:"inline-flex items-center gap-1.5"},BE={class:"grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5 px-2 py-2 text-xs sm:grid-cols-[auto_1fr_auto_1fr]"},VE={class:"text-muted-foreground"},UE={class:"font-mono"},HE={class:"text-muted-foreground"},jE={class:"font-mono"},zE={class:"text-muted-foreground"},WE={class:"text-muted-foreground"},KE={class:"break-all font-mono"},GE={class:"text-muted-foreground"},YE={class:"flex items-center gap-1.5 font-mono"},XE={class:"text-muted-foreground"},JE={class:"break-all font-mono"},QE={class:"text-muted-foreground"},ZE={class:"font-mono"},eO={class:"text-foreground/80"},tO={class:"text-foreground/80"},nO={class:"text-amber-600 dark:text-amber-400"},sO={class:"text-muted-foreground"},oO={class:"break-all font-mono"},yd="myapikey.logs.filters",rO=re({__name:"Logs",setup(e){const{t}=ft(),n=W([]),s=W(!0),o=W(!1),a=W([]),l=W([]),i=W("all"),u=W("all"),c=W("all"),d=W(""),f=W(new Set),p=W(!1);try{const X=JSON.parse(localStorage.getItem(yd)||"null");X&&(typeof X.model=="string"&&(i.value=X.model),typeof X.provider=="string"&&(u.value=X.provider),(X.status==="success"||X.status==="error")&&(c.value=X.status),typeof X.query=="string"&&(d.value=X.query))}catch{}Re([i,u,c,d],()=>{try{localStorage.setItem(yd,JSON.stringify({model:i.value,provider:u.value,status:c.value,query:d.value}))}catch{}});let y;async function S(){o.value=!0;try{const[X,he]=await Promise.all([Ve("GET","/admin/logs").catch(()=>null),Ve("GET","/admin/circuit").catch(()=>null)]);X&&(n.value=X.logs),he&&(a.value=he.providers.filter(Z=>Z.state==="cooling"),l.value=he.providers.filter(Z=>Z.rpm>0&&Z.rpmUsed>=Z.rpm&&Z.state!=="cooling"))}finally{o.value=!1}}async function T(X){await Ve("POST",`/admin/circuit/${X}/reset`).catch(()=>{}),await S()}function E(){x(),y=window.setInterval(S,4e3)}function x(){y&&(clearInterval(y),y=void 0)}function _(){s.value=!s.value,s.value?(S(),E()):x()}function I(X){return X>=200&&X<300?"success":X>=400?"destructive":"muted"}function k(X){var he;return((he=pt[X])==null?void 0:he.badge)??""}function U(X){return X<1e3?`${X}ms`:`${(X/1e3).toFixed(1)}s`}function L(X){return X?X<1e3?String(X):X<1e6?(X/1e3).toFixed(X<1e4?1:0).replace(/\.0$/,"")+"k":(X/1e6).toFixed(1)+"M":"0"}function $(X){if(X<=0)return"0";const he=Math.round(X*1e3)/10;return Number.isInteger(he)?String(he):he.toFixed(1)}function R(X){return new Date(X).toLocaleTimeString()}function G(X){return new Date(X).toLocaleString()}function Y(X){return`${X.ts}-${X.model}-${X.provider}-${X.status}-${X.kind??"call"}`}function ne(X){return f.value.has(Y(X))}function Q(X){const he=new Set(f.value),Z=Y(X);he.has(Z)?he.delete(Z):he.add(Z),f.value=he}const de=ae(()=>[...new Set(n.value.map(X=>X.model))].sort()),D=ae(()=>[...new Set(n.value.map(X=>X.provider))].sort()),P=ae(()=>{const X=d.value.trim().toLowerCase();return n.value.filter(he=>{var Z;return!(i.value!=="all"&&he.model!==i.value||u.value!=="all"&&he.provider!==u.value||c.value==="success"&&!(he.status>=200&&he.status<300)||c.value==="error"&&he.status<400||X&&!(he.model.toLowerCase().includes(X)||(Z=he.upstreamModel)!=null&&Z.toLowerCase().includes(X)||he.provider.toLowerCase().includes(X)))})}),N=ae(()=>{const X=P.value.filter(Ue=>Ue.kind!=="cooldown"),he=X.length,Z=X.filter(Ue=>Ue.status>=400).length,Ye=he?Math.round(X.reduce((Ue,ve)=>Ue+ve.ms,0)/he):0;return{total:he,fail:Z,avgMs:Ye,errorRateStr:$(he?Z/he:0)}}),J=ae(()=>(i.value!=="all"?1:0)+(u.value!=="all"?1:0)+(c.value!=="all"?1:0)),oe=ae(()=>{const X=[];return i.value!=="all"&&X.push({key:"model",label:t("logs.filter.model"),value:i.value,clear:()=>i.value="all"}),u.value!=="all"&&X.push({key:"provider",label:t("logs.filter.provider"),value:u.value,clear:()=>u.value="all"}),c.value!=="all"&&X.push({key:"status",label:t("logs.filter.status"),value:c.value==="success"?t("logs.filter.success"):t("logs.filter.error"),clear:()=>c.value="all"}),X});function pe(){i.value="all",u.value="all",c.value="all"}return rt(()=>{S(),E()}),dn(x),(X,he)=>(h(),H(r(Vt),null,{default:g(()=>[m(r(zn),null,{default:g(()=>[b("div",QA,[m(r(Wn),{class:"flex items-center gap-2 text-base"},{default:g(()=>[m(r(Sm),{class:"h-4 w-4 text-primary"}),z(" "+v(r(t)("logs.title"))+" ",1),s.value?(h(),H(r(Oe),{key:0,variant:"success",class:"gap-1.5"},{default:g(()=>[he[5]||(he[5]=b("span",{class:"relative flex h-1.5 w-1.5"},[b("span",{class:"absolute inline-flex h-full w-full animate-ping rounded-full bg-current opacity-75"}),b("span",{class:"relative inline-flex h-1.5 w-1.5 rounded-full bg-current"})],-1)),z(" "+v(r(t)("logs.live")),1)]),_:1})):se("",!0)]),_:1}),b("div",ZA,[m(r(ke),{variant:"outline",size:"sm",disabled:o.value,onClick:S},{default:g(()=>[o.value?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"})),b("span",eE,v(r(t)("logs.refresh")),1)]),_:1},8,["disabled"]),m(r(ke),{variant:"outline",size:"sm","aria-pressed":s.value,onClick:_},{default:g(()=>[s.value?(h(),H(r(zk),{key:0,class:"h-3.5 w-3.5"})):(h(),H(r(Kk),{key:1,class:"h-3.5 w-3.5"})),z(" "+v(s.value?r(t)("logs.pause"):r(t)("logs.resume")),1)]),_:1},8,["aria-pressed"])])]),m(r(Ds),null,{default:g(()=>[z(v(r(t)("logs.desc")),1)]),_:1})]),_:1}),m(r(Zt),{class:"space-y-3"},{default:g(()=>[b("div",tE,[b("div",nE,[m(r(du),{class:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{modelValue:d.value,"onUpdate:modelValue":he[0]||(he[0]=Z=>d.value=Z),placeholder:r(t)("logs.searchPh"),class:"h-8 pl-8"},null,8,["modelValue","placeholder"])]),m(r(ya),{open:p.value,"onUpdate:open":he[4]||(he[4]=Z=>p.value=Z)},{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[m(r(ke),{variant:"outline",size:"sm",class:"h-8 gap-1.5"},{default:g(()=>[m(r(Nk),{class:"h-3.5 w-3.5"}),z(" "+v(r(t)("logs.filter.title"))+" ",1),J.value?(h(),V("span",sE,v(J.value),1)):se("",!0)]),_:1})]),_:1}),m(r(_a),{align:"start",class:"w-72 p-3"},{default:g(()=>[b("div",oE,[b("div",rE,[b("span",aE,v(r(t)("logs.filter.title")),1),J.value?(h(),V("button",{key:0,type:"button",class:"text-xs text-primary hover:underline",onClick:pe},v(r(t)("logs.filter.clear")),1)):se("",!0)]),b("div",lE,[b("div",iE,[b("span",uE,v(r(t)("logs.filter.model")),1),m(r(zr),{modelValue:i.value,"onUpdate:modelValue":he[1]||(he[1]=Z=>i.value=Z)},{default:g(()=>[m(r(Wr),{class:"h-8 w-full"},{default:g(()=>[m(r(Kr),{placeholder:r(t)("logs.filter.model")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[m(r(ds),{value:"all"},{default:g(()=>[z(v(r(t)("logs.filter.all")),1)]),_:1}),(h(!0),V(me,null,Pe(de.value,Z=>(h(),H(r(ds),{key:Z,value:Z},{default:g(()=>[z(v(Z),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue"])]),b("div",cE,[b("span",dE,v(r(t)("logs.filter.provider")),1),m(r(zr),{modelValue:u.value,"onUpdate:modelValue":he[2]||(he[2]=Z=>u.value=Z)},{default:g(()=>[m(r(Wr),{class:"h-8 w-full"},{default:g(()=>[m(r(Kr),{placeholder:r(t)("logs.filter.provider")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[m(r(ds),{value:"all"},{default:g(()=>[z(v(r(t)("logs.filter.all")),1)]),_:1}),(h(!0),V(me,null,Pe(D.value,Z=>(h(),H(r(ds),{key:Z,value:Z},{default:g(()=>[z(v(Z),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue"])]),b("div",fE,[b("span",pE,v(r(t)("logs.filter.status")),1),m(r(zr),{modelValue:c.value,"onUpdate:modelValue":he[3]||(he[3]=Z=>c.value=Z)},{default:g(()=>[m(r(Wr),{class:"h-8 w-full"},{default:g(()=>[m(r(Kr),{placeholder:r(t)("logs.filter.status")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[m(r(ds),{value:"all"},{default:g(()=>[z(v(r(t)("logs.filter.all")),1)]),_:1}),m(r(ds),{value:"success"},{default:g(()=>[z(v(r(t)("logs.filter.success")),1)]),_:1}),m(r(ds),{value:"error"},{default:g(()=>[z(v(r(t)("logs.filter.error")),1)]),_:1})]),_:1})]),_:1},8,["modelValue"])])])])]),_:1})]),_:1},8,["open"])]),oe.value.length?(h(),V("div",mE,[(h(!0),V(me,null,Pe(oe.value,Z=>(h(),V("span",{key:Z.key,class:"inline-flex items-center gap-1 rounded-full border border-input bg-muted/40 py-0.5 pl-2.5 pr-1 text-xs"},[b("span",hE,v(Z.label)+":",1),b("span",gE,v(Z.value),1),b("button",{type:"button",class:"rounded-full p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground","aria-label":r(t)("logs.filter.remove",{label:Z.label}),onClick:Z.clear},[m(r(Ao),{class:"h-3 w-3"})],8,vE)]))),128)),b("button",{type:"button",class:"text-xs text-muted-foreground hover:text-foreground",onClick:pe},v(r(t)("logs.filter.clear")),1)])):se("",!0),b("div",yE,[b("span",null,v(r(t)("logs.summary.window",{n:N.value.total})),1),b("span",{class:ge({"text-destructive":N.value.fail>0})},v(r(t)("logs.summary.errorRate",{pct:N.value.errorRateStr})),3),b("span",null,v(r(t)("logs.summary.avgLatency",{ms:U(N.value.avgMs)})),1)]),a.value.length?(h(),V("div",bE,[b("div",_E,[m(r(Al),{class:"h-4 w-4"}),z(" "+v(r(t)("logs.circuit.stripTitle")),1)]),b("ul",xE,[(h(!0),V(me,null,Pe(a.value,Z=>(h(),V("li",{key:Z.id,class:"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs"},[b("span",wE,v(Z.name),1),m(r(Oe),{variant:"warning",class:"gap-1 whitespace-nowrap"},{default:g(()=>[m(r(Al),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.circuit.remaining",{s:Z.secondsLeft})),1)]),_:2},1024),b("span",kE,v(Z.lastReason||r(t)("logs.circuit.reasonUnknown")),1),m(r(ke),{variant:"outline",size:"sm",class:"ml-auto h-6 gap-1",onClick:Ye=>T(Z.id)},{default:g(()=>[m(r(Vs),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.circuit.reset")),1)]),_:1},8,["onClick"])]))),128))])])):se("",!0),l.value.length?(h(),V("div",CE,[b("div",SE,[m(r(Yo),{class:"h-4 w-4"}),z(" "+v(r(t)("logs.pacing.stripTitle")),1)]),b("ul",$E,[(h(!0),V(me,null,Pe(l.value,Z=>(h(),V("li",{key:Z.id,class:"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs"},[b("span",TE,v(Z.name),1),m(r(Oe),{variant:"outline",class:"gap-1 whitespace-nowrap"},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.pacing.at",{used:Z.rpmUsed,cap:Z.rpm})),1)]),_:2},1024),b("span",AE,v(r(t)("logs.pacing.reason")),1)]))),128))])])):se("",!0),n.value.length?P.value.length?(h(),V("div",PE,[m(r(el),null,{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),null,{default:g(()=>[m(r(ot),{class:"w-8"}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.time")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.model")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.provider")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.format")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("logs.col.latency")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("logs.col.status")),1)]),_:1})]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(P.value,Z=>(h(),V(me,{key:Y(Z)},[Z.kind==="cooldown"?(h(),H(r(Sn),{key:0,class:"bg-amber-500/5 hover:bg-amber-500/10"},{default:g(()=>[m(r(tt),{colspan:"7",class:"py-2"},{default:g(()=>[b("div",ME,[b("span",IE,v(R(Z.ts)),1),m(r(Oe),{variant:"warning",class:"gap-1 whitespace-nowrap"},{default:g(()=>[m(r(Al),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.circuit.badge")),1)]),_:1}),b("span",RE,v(Z.provider),1),b("span",LE,v(r(t)("logs.circuit.failures",{n:Z.fails})),1),b("span",DE,v(r(t)("logs.circuit.cooldown",{s:Math.round((Z.cooldownMs??0)/1e3)})),1),b("span",NE,v(Z.error||r(t)("logs.circuit.reasonUnknown")),1)])]),_:2},1024)]),_:2},1024)):(h(),V(me,{key:1},[m(r(Sn),{class:"cursor-pointer hover:bg-muted/50",onClick:Ye=>Q(Z)},{default:g(()=>[m(r(tt),{class:"w-8 text-muted-foreground"},{default:g(()=>[(h(),H(_r(ne(Z)?r(cn):r(Tm)),{class:"h-3.5 w-3.5"}))]),_:2},1024),m(r(tt),{class:"font-mono text-xs text-muted-foreground",title:G(Z.ts)},{default:g(()=>[z(v(R(Z.ts)),1)]),_:2},1032,["title"]),m(r(tt),{class:"font-mono text-xs"},{default:g(()=>[z(v(Z.model),1),Z.upstreamModel?(h(),V("span",FE," → "+v(Z.upstreamModel),1)):se("",!0)]),_:2},1024),m(r(tt),{class:"text-sm"},{default:g(()=>[z(v(Z.provider),1)]),_:2},1024),m(r(tt),null,{default:g(()=>[b("span",qE,[m(r(Oe),{variant:"outline",class:ge(k(Z.format))},{default:g(()=>[z(v(r(Lt)(Z.format)),1)]),_:2},1032,["class"]),Z.stream?(h(),H(r(Oe),{key:0,variant:"muted",class:"text-[10px]"},{default:g(()=>[z(v(r(t)("logs.stream")),1)]),_:1})):se("",!0),Z.thinking?(h(),H(r(Oe),{key:1,variant:"muted",class:"gap-1 font-mono text-[10px]",title:r(t)("logs.detail.thinking")+" · "+(Z.thinking.from==="default"?r(t)("logs.thinkingDefault"):r(t)("logs.thinkingClient"))},{default:g(()=>[m(r(xo),{class:"h-3 w-3"}),z(v(Z.thinking.value),1)]),_:2},1032,["title"])):se("",!0),Z.sampling?(h(),H(r(Oe),{key:2,variant:"muted",class:"gap-1 font-mono text-[10px]",title:r(t)("logs.detail.sampling")},{default:g(()=>[m(r(vs),{class:"h-3 w-3"}),z(v(r(on)(Z.sampling)),1)]),_:2},1032,["title"])):se("",!0)])]),_:2},1024),m(r(tt),{class:"text-right font-mono text-xs text-muted-foreground"},{default:g(()=>[z(v(U(Z.ms)),1)]),_:2},1024),m(r(tt),{class:"text-right"},{default:g(()=>[m(r(Oe),{variant:I(Z.status),class:"font-mono"},{default:g(()=>[z(v(Z.status),1)]),_:2},1032,["variant"])]),_:2},1024)]),_:2},1032,["onClick"]),ne(Z)?(h(),H(r(Sn),{key:0,class:"hover:bg-transparent"},{default:g(()=>[m(r(tt),{colspan:"7",class:"bg-muted/30"},{default:g(()=>[b("dl",BE,[b("dt",VE,v(r(t)("logs.detail.time")),1),b("dd",UE,v(G(Z.ts)),1),b("dt",HE,v(r(t)("logs.detail.latency")),1),b("dd",jE,v(U(Z.ms)),1),b("dt",zE,v(r(t)("logs.detail.stream")),1),b("dd",null,v(Z.stream?r(t)("logs.detail.streamYes"):r(t)("logs.detail.streamNo")),1),Z.upstreamModel?(h(),V(me,{key:0},[b("dt",WE,v(r(t)("logs.detail.upstreamModel")),1),b("dd",KE,v(Z.upstreamModel),1)],64)):se("",!0),Z.thinking?(h(),V(me,{key:1},[b("dt",GE,v(r(t)("logs.detail.thinking")),1),b("dd",YE,[z(v(Z.thinking.value)+" ",1),m(r(Oe),{variant:"muted",class:"text-[10px]"},{default:g(()=>[z(v(Z.thinking.from==="default"?r(t)("logs.thinkingDefault"):r(t)("logs.thinkingClient")),1)]),_:2},1024)])],64)):se("",!0),Z.sampling?(h(),V(me,{key:2},[b("dt",XE,v(r(t)("logs.detail.sampling")),1),b("dd",JE,v(r(Fb)(Z.sampling)),1)],64)):se("",!0),Z.usage?(h(),V(me,{key:3},[b("dt",QE,v(r(t)("logs.detail.tokens")),1),b("dd",ZE,[b("span",eO,"↑ "+v(L(Z.usage.input)),1),he[7]||(he[7]=b("span",{class:"text-muted-foreground/50"}," · ",-1)),b("span",tO,"↓ "+v(L(Z.usage.output)),1),Z.usage.estimated?(h(),H(r(Oe),{key:0,variant:"muted",class:"ml-1.5 text-[10px]"},{default:g(()=>[z("≈ "+v(r(t)("logs.detail.estimated")),1)]),_:1})):se("",!0),(Z.usage.cacheRead||0)+(Z.usage.cacheCreation||0)?(h(),V(me,{key:1},[he[6]||(he[6]=b("span",{class:"text-muted-foreground/50"}," · ",-1)),b("span",nO,"⚡ "+v(r(t)("logs.detail.cache"))+" "+v(L((Z.usage.cacheRead||0)+(Z.usage.cacheCreation||0))),1)],64)):se("",!0)])],64)):se("",!0),b("dt",sO,v(r(t)("logs.detail.error")),1),b("dd",oO,v(Z.error||r(t)("logs.detail.errorNone")),1)])]),_:2},1024)]),_:2},1024)):se("",!0)],64))],64))),128))]),_:1})]),_:1})])):(h(),V("p",OE,v(r(t)("logs.noMatch")),1)):(h(),V("p",EE,v(r(t)("logs.empty")),1))]),_:1})]),_:1}))}}),aO={key:0,class:"py-4 text-center text-xs text-muted-foreground"},lO={class:"flex items-center gap-1.5"},iO={class:"truncate font-mono text-xs"},uO={class:"flex items-center gap-2"},cO={class:"h-1.5 w-full max-w-[120px] overflow-hidden rounded-full bg-muted"},dO={class:"font-mono text-xs tabular-nums"},fO={key:0},pO={class:"text-foreground/80"},mO={class:"text-foreground/80"},hO={key:1,class:"text-muted-foreground/40"},gO={key:0,class:"inline-flex flex-col items-end leading-tight"},vO={class:"text-amber-600 dark:text-amber-400"},yO={class:"text-[10px] text-muted-foreground/60"},bO={key:1,class:"text-muted-foreground/40"},Br=re({__name:"StatsBreakdown",props:{title:{},buckets:{},max:{},kind:{}},setup(e){const{t}=ft();function n(d){return d<1e3?`${d}ms`:`${(d/1e3).toFixed(1)}s`}function s(d){return d?d<1e3?String(d):d<1e6?(d/1e3).toFixed(d<1e4?1:0).replace(/\.0$/,"")+"k":(d/1e6).toFixed(1)+"M":"0"}function o(d){if(!d)return"0%";const f=Math.round(d*1e3)/10;return(f%1===0?f.toFixed(0):f.toFixed(1))+"%"}const a=e,l=()=>a.buckets.some(d=>d.inputTokens||d.outputTokens),i=()=>a.buckets.some(d=>d.cacheRead||d.cacheCreation);function u(d,f){return f?Math.round(d/f*100):0}function c(d){var f;return(f=pt[d])==null?void 0:f.solid}return(d,f)=>(h(),H(r(Vt),null,{default:g(()=>[m(r(zn),{class:"pb-2"},{default:g(()=>[m(r(Wn),{class:"text-sm"},{default:g(()=>[z(v(e.title),1)]),_:1})]),_:1}),m(r(Zt),null,{default:g(()=>[e.buckets.length?(h(),H(r(el),{key:1},{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),null,{default:g(()=>[m(r(ot),null,{default:g(()=>[z(v(r(t)("stats.col.name")),1)]),_:1}),m(r(ot),{class:"w-1/3"},{default:g(()=>[z(v(r(t)("stats.col.calls")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.success")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.error")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.avgLatency")),1)]),_:1}),l()?(h(),H(r(ot),{key:0,class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.tokens")),1)]),_:1})):se("",!0),i()?(h(),H(r(ot),{key:1,class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.cacheHit")),1)]),_:1})):se("",!0)]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(e.buckets,p=>(h(),H(r(Sn),{key:p.key},{default:g(()=>[m(r(tt),{class:"py-1.5"},{default:g(()=>[b("div",lO,[e.kind==="format"&&c(p.key)?(h(),V("span",{key:0,class:ge(["h-2 w-2 shrink-0 rounded-full",c(p.key)])},null,2)):e.kind==="provider"&&p.id?(h(),V("span",{key:1,class:ge(["h-2 w-2 shrink-0 rounded-full",r(ps)(p.id).solid])},null,2)):se("",!0),b("span",iO,v(e.kind==="format"?r(Lt)(p.key):p.key),1)])]),_:2},1024),m(r(tt),{class:"py-1.5"},{default:g(()=>[b("div",uO,[b("div",cO,[b("div",{class:"h-full rounded-full bg-primary/50",style:en({width:u(p.calls,e.max)+"%"})},null,4)]),b("span",dO,v(p.calls),1)])]),_:2},1024),m(r(tt),{class:"py-1.5 text-right font-mono text-xs text-emerald-600 dark:text-emerald-400"},{default:g(()=>[z(v(p.success),1)]),_:2},1024),m(r(tt),{class:ge(["py-1.5 text-right font-mono text-xs",p.error?"text-destructive":"text-muted-foreground"])},{default:g(()=>[z(v(p.error),1)]),_:2},1032,["class"]),m(r(tt),{class:"py-1.5 text-right font-mono text-xs text-muted-foreground"},{default:g(()=>[z(v(n(p.avgMs)),1)]),_:2},1024),l()?(h(),H(r(tt),{key:0,class:"py-1.5 text-right font-mono text-xs tabular-nums"},{default:g(()=>[p.inputTokens||p.outputTokens?(h(),V("span",fO,[b("span",pO,v(s(p.inputTokens)),1),f[0]||(f[0]=b("span",{class:"text-muted-foreground/50"}," / ",-1)),b("span",mO,v(s(p.outputTokens)),1)])):(h(),V("span",hO,"—"))]),_:2},1024)):se("",!0),i()?(h(),H(r(tt),{key:1,class:"py-1.5 text-right font-mono text-xs tabular-nums"},{default:g(()=>[p.cacheRead||p.cacheCreation?(h(),V("span",gO,[b("span",vO,v(o(p.cacheHitRate)),1),b("span",yO,"↑"+v(s(p.cacheRead)),1)])):(h(),V("span",bO,"—"))]),_:2},1024)):se("",!0)]),_:2},1024))),128))]),_:1})]),_:1})):(h(),V("p",aO,v(r(t)("stats.empty")),1))]),_:1})]),_:1}))}}),_O={class:"flex flex-wrap items-center justify-between gap-2"},xO={class:"flex items-center gap-2"},wO={class:"inline-flex rounded-md border bg-muted/30 p-0.5"},kO=["onClick"],CO={class:"sr-only"},SO={key:0,class:"flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground"},$O={key:1,class:"py-10 text-center text-sm text-muted-foreground"},TO={class:"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6"},AO={class:"rounded-lg border bg-muted/20 p-3"},EO={class:"text-xs text-muted-foreground"},OO={class:"mt-1 font-mono text-xl tabular-nums"},PO={class:"rounded-lg border bg-muted/20 p-3"},MO={class:"text-xs text-muted-foreground"},IO={class:"mt-1 font-mono text-xl tabular-nums text-emerald-600 dark:text-emerald-400"},RO={class:"rounded-lg border bg-muted/20 p-3"},LO={class:"text-xs text-muted-foreground"},DO={class:"mt-1 font-mono text-xl tabular-nums text-destructive"},NO={class:"rounded-lg border bg-muted/20 p-3"},FO={class:"text-xs text-muted-foreground"},qO={class:"mt-1 font-mono text-xl tabular-nums"},BO={class:"rounded-lg border bg-muted/20 p-3"},VO={class:"text-xs text-muted-foreground"},UO={class:"mt-1 font-mono text-xl tabular-nums"},HO={class:"rounded-lg border bg-muted/20 p-3"},jO={class:"text-xs text-muted-foreground"},zO={class:"mt-1 font-mono text-xl tabular-nums"},WO={key:0,class:"grid grid-cols-3 gap-2"},KO={class:"rounded-lg border bg-muted/20 p-3"},GO={class:"text-xs text-muted-foreground"},YO={class:"mt-1 font-mono text-lg tabular-nums"},XO={class:"rounded-lg border bg-muted/20 p-3"},JO={class:"text-xs text-muted-foreground"},QO={class:"mt-1 font-mono text-lg tabular-nums"},ZO={class:"rounded-lg border bg-muted/20 p-3"},eP={class:"text-xs text-muted-foreground"},tP={class:"mt-1 font-mono text-lg tabular-nums"},nP={class:"mb-2 flex items-center justify-between gap-2"},sP={class:"text-sm font-medium"},oP={key:0,class:"text-[11px] text-muted-foreground"},rP={class:"font-mono tabular-nums text-foreground"},aP={class:"rounded-lg border p-3"},lP={class:"relative pt-9"},iP={class:"flex h-40 gap-px"},uP={class:"pointer-events-none absolute bottom-full left-1/2 z-20 mb-1 hidden -translate-x-1/2 whitespace-nowrap rounded-md border bg-background px-2 py-1 text-center text-xs shadow-md group-hover:block"},cP={class:"font-medium"},dP={class:"font-mono tabular-nums"},fP={class:"text-[10px]"},pP={class:"text-emerald-600 dark:text-emerald-400"},mP={class:"text-destructive"},hP={class:"mt-1.5 flex justify-between text-[10px] text-muted-foreground"},gP={class:"grid gap-4 lg:grid-cols-2"},vP={class:"lg:col-span-2"},yP={key:1,class:"space-y-3"},bP={class:"text-sm font-medium"},_P={class:"grid gap-4 lg:grid-cols-2"},bd=160,xP=re({__name:"Stats",setup(e){const{t}=ft(),n=[{v:"24h",key:"h24"},{v:"7d",key:"d7"},{v:"30d",key:"d30"},{v:"90d",key:"d90"},{v:"all",key:"all"}],s=W(localStorage.getItem("myapikey.stats.range")||"7d");n.some(I=>I.v===s.value)||(s.value="7d"),Re(s,I=>{try{localStorage.setItem("myapikey.stats.range",I)}catch{}});const o=W(null),a=W(!1);async function l(){a.value=!0;try{o.value=await Ve("GET",`/admin/stats?range=${s.value}`)}catch{o.value=null}finally{a.value=!1}}Re(s,l),rt(l);function i(I){return I<1e3?`${I}ms`:`${(I/1e3).toFixed(1)}s`}function u(I){if(!I)return"0%";const k=Math.round(I*1e3)/10;return(k%1===0?k.toFixed(0):k.toFixed(1))+"%"}function c(I){const[k,U,L]=I.split("-").map(Number);return new Date(k,U-1,L).toLocaleDateString(void 0,{month:"short",day:"numeric"})}const d=ae(()=>{var I;return((I=o.value)==null?void 0:I.byDay.reduce((k,U)=>Math.max(k,U.calls),0))??0});function f(I){const k=d.value||1,U=I.calls/k*bd,L=I.error/k*bd;return{success:Math.max(0,Math.round(U-L)),error:Math.round(L)}}function p(I){return I.reduce((k,U)=>Math.max(k,U.calls),0)||1}const y=ae(()=>!!o.value&&o.value.totals.calls>0),S=ae(()=>{var I,k;return(((I=o.value)==null?void 0:I.totals.cacheRead)??0)+(((k=o.value)==null?void 0:k.totals.cacheCreation)??0)}),T=ae(()=>!!o.value&&!!(o.value.totals.inputTokens||o.value.totals.outputTokens||S.value)),E=ae(()=>{var U;const I=(((U=o.value)==null?void 0:U.byProviderModel)??[]).filter(L=>L.cacheRead||L.cacheCreation),k=new Map;for(const L of I){const $=L.providerId||L.provider;let R=k.get($);R||(R={providerId:L.providerId,provider:L.provider,models:[],cacheRead:0},k.set($,R)),R.models.push({key:L.model,calls:L.calls,success:L.success,error:0,avgMs:0,inputTokens:L.inputTokens,outputTokens:L.outputTokens,cacheRead:L.cacheRead,cacheCreation:L.cacheCreation,cacheHitRate:L.cacheHitRate}),R.cacheRead+=L.cacheRead}return[...k.values()].sort((L,$)=>$.cacheRead-L.cacheRead)}),x=ae(()=>E.value.length>0);function _(I){return I?I<1e3?String(I):I<1e6?(I/1e3).toFixed(I<1e4?1:0).replace(/\.0$/,"")+"k":(I/1e6).toFixed(1)+"M":"0"}return(I,k)=>(h(),H(r(Vt),null,{default:g(()=>[m(r(zn),null,{default:g(()=>[b("div",_O,[m(r(Wn),{class:"flex items-center gap-2 text-base"},{default:g(()=>[m(r($m),{class:"h-4 w-4 text-primary"}),z(" "+v(r(t)("stats.title")),1)]),_:1}),b("div",xO,[b("div",wO,[(h(),V(me,null,Pe(n,U=>b("button",{key:U.v,type:"button",class:ge(["rounded-sm px-2.5 py-1 text-xs transition-colors",s.value===U.v?"bg-background font-medium shadow-sm":"text-muted-foreground hover:text-foreground"]),onClick:L=>s.value=U.v},v(r(t)(`stats.ranges.${U.key}`)),11,kO)),64))]),m(r(ke),{variant:"outline",size:"sm",disabled:a.value,onClick:l},{default:g(()=>[a.value?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"})),b("span",CO,v(r(t)("stats.refresh")),1)]),_:1},8,["disabled"])])]),m(r(Ds),null,{default:g(()=>[z(v(r(t)("stats.desc")),1)]),_:1})]),_:1}),m(r(Zt),{class:"space-y-5"},{default:g(()=>[a.value&&!o.value?(h(),V("div",SO,[m(r(gt),{class:"h-4 w-4 animate-spin"}),z(" "+v(r(t)("stats.loading")),1)])):y.value?o.value?(h(),V(me,{key:2},[b("div",TO,[b("div",AO,[b("div",EO,v(r(t)("stats.totals.calls")),1),b("div",OO,v(o.value.totals.calls),1)]),b("div",PO,[b("div",MO,v(r(t)("stats.totals.success")),1),b("div",IO,v(o.value.totals.success),1)]),b("div",RO,[b("div",LO,v(r(t)("stats.totals.error")),1),b("div",DO,v(o.value.totals.error),1)]),b("div",NO,[b("div",FO,v(r(t)("stats.totals.errorRate")),1),b("div",qO,v(u(o.value.totals.errorRate)),1)]),b("div",BO,[b("div",VO,v(r(t)("stats.totals.avgLatency")),1),b("div",UO,v(i(o.value.totals.avgMs)),1)]),b("div",HO,[b("div",jO,v(r(t)("stats.totals.p95")),1),b("div",zO,v(i(o.value.totals.p95Ms)),1)])]),T.value?(h(),V("div",WO,[b("div",KO,[b("div",GO,"↑ "+v(r(t)("stats.totals.inputTokens")),1),b("div",YO,v(_(o.value.totals.inputTokens)),1)]),b("div",XO,[b("div",JO,"↓ "+v(r(t)("stats.totals.outputTokens")),1),b("div",QO,v(_(o.value.totals.outputTokens)),1)]),b("div",ZO,[b("div",eP,"⚡ "+v(r(t)("stats.totals.cache")),1),b("div",tP,v(_(S.value)),1)])])):se("",!0),b("div",null,[b("div",nP,[b("div",sP,v(r(t)("stats.byDay")),1),d.value?(h(),V("div",oP,[z(v(r(t)("stats.peak"))+" ",1),b("span",rP,v(d.value),1)])):se("",!0)]),b("div",aP,[b("div",lP,[b("div",iP,[(h(!0),V(me,null,Pe(o.value.byDay,U=>(h(),V("div",{key:U.day,class:"group relative flex min-w-0 flex-1 cursor-default flex-col justify-end"},[b("div",{style:en({height:f(U).success+"px"}),class:"w-full rounded-t-sm bg-emerald-500/70 transition-colors group-hover:bg-emerald-500"},null,4),b("div",{style:en({height:f(U).error+"px"}),class:ge(["w-full transition-colors group-hover:bg-destructive",f(U).error?"bg-destructive/70":""])},null,6),b("div",uP,[b("div",cP,v(c(U.day)),1),b("div",dP,v(U.calls)+" "+v(r(t)("stats.callsAxis")),1),b("div",fP,[b("span",pP,v(U.success),1),k[0]||(k[0]=b("span",{class:"text-muted-foreground"}," / ",-1)),b("span",mP,v(U.error),1)])])]))),128))])]),b("div",hP,[b("span",null,v(o.value.byDay.length?c(o.value.byDay[0].day):""),1),b("span",null,v(o.value.byDay.length?c(o.value.byDay[o.value.byDay.length-1].day):""),1)])])]),b("div",gP,[b("div",vP,[m(Br,{title:r(t)("stats.byModel"),buckets:o.value.byModel,max:p(o.value.byModel),kind:"model"},null,8,["title","buckets","max"])]),m(Br,{title:r(t)("stats.byProvider"),buckets:o.value.byProvider,max:p(o.value.byProvider),kind:"provider"},null,8,["title","buckets","max"]),m(Br,{title:r(t)("stats.byFormat"),buckets:o.value.byFormat,max:p(o.value.byFormat),kind:"format"},null,8,["title","buckets","max"])]),x.value?(h(),V("div",yP,[b("div",bP,v(r(t)("stats.cacheBySource")),1),b("div",_P,[(h(!0),V(me,null,Pe(E.value,U=>(h(),H(Br,{key:U.providerId||U.provider,title:U.provider,buckets:U.models,max:p(U.models),kind:"model"},null,8,["title","buckets","max"]))),128))])])):se("",!0)],64)):se("",!0):(h(),V("div",$O,v(r(t)("stats.empty")),1))]),_:1})]),_:1}))}}),wP={class:"space-y-4"},kP={class:"space-y-2"},CP={class:"min-w-0"},SP={class:"mt-0.5 truncate font-mono text-sm"},$P={class:"min-w-0"},TP={class:"mt-0.5 truncate font-mono text-sm"},AP={class:"text-xs text-muted-foreground"},EP={class:"flex items-center justify-between gap-3 rounded-lg border border-primary/40 bg-primary/5 p-3"},OP={class:"min-w-0"},PP={class:"text-xs font-medium text-primary"},MP={class:"truncate font-mono text-sm"},IP={class:"flex items-center gap-1"},RP={class:"overflow-x-auto rounded-md border bg-muted/40 p-3 font-mono text-xs leading-relaxed"},LP=re({__name:"Connect",setup(e){const{t}=ft(),n={openai:"openai",anthropic:"anthropic",responses:"responses",curl:null,"curl-anthropic":"anthropic"};function s(E){const x=n[E];return x?pt[x]:null}const o=W(null),a=W(null),l=W(""),i=W(!1),u=W([]),c=ae(()=>{const E=window.location.hostname;if((E==="localhost"||E==="127.0.0.1")&&a.value){const x=window.location.port;return`${window.location.protocol}//${a.value}${x?":"+x:""}`}return window.location.origin}),d=ae(()=>`${c.value}/openai/v1`),f=ae(()=>`${c.value}/anthropic`);async function p(){o.value=(await Ve("GET","/admin/api-key")).apiKey,a.value=(await Ve("GET","/admin/connection")).lanIp,u.value=(await Ve("GET","/admin/models").catch(()=>({models:[]}))).models}function y(E){var x;return((x=u.value.find(_=>_[E].enabled))==null?void 0:x.name)||"<model>"}async function S(E,x){await kr(x)?(l.value=E,setTimeout(()=>{l.value===E&&(l.value="")},1500)):Be(t("connect.copyFailed"),"error")}const T=ae(()=>[{key:"openai",title:t("connect.openaiTitle"),text:`export OPENAI_BASE_URL=${d.value}
|
|
334
|
+
`)}async function q(F){const w=await kr(F);Be(s(w?"connect.copied":"connect.copyFailed"),w?"success":"error")}return(F,w)=>(h(),V("div",p$,[b("div",m$,[b("div",h$,[m(r(du),{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{modelValue:f.value,"onUpdate:modelValue":w[0]||(w[0]=C=>f.value=C),placeholder:r(s)("models.searchPh"),class:"pl-8"},null,8,["modelValue","placeholder"])]),b("div",g$,[m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",o.value==="cards"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(s)("common.viewCards"),"aria-label":r(s)("common.viewCards"),onClick:w[1]||(w[1]=C=>a("cards"))},{default:g(()=>[m(r(Em),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"]),m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",o.value==="table"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(s)("common.viewTable"),"aria-label":r(s)("common.viewTable"),onClick:w[2]||(w[2]=C=>a("table"))},{default:g(()=>[m(r(Pm),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"])]),m(r(ke),{onClick:w[3]||(w[3]=C=>E())},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(s)("models.newModel")),1)]),_:1})]),c.value?(h(),V("p",v$,v(r(s)("common.loading")),1)):d.value?(h(),V("p",y$,v(d.value),1)):!u.value.length&&!i.value.length?(h(),H(r(Vt),{key:2},{default:g(()=>[m(r(Zt),{class:"flex flex-col items-center gap-3 py-12 text-center"},{default:g(()=>[b("span",b$,[m(r(wo),{class:"h-5 w-5"})]),b("div",_$,[b("div",x$,v(r(s)("models.emptyNoSources")),1),b("p",w$,v(r(s)("models.emptyNoSourcesHint")),1)]),m(r(ke),{onClick:w[4]||(w[4]=C=>n("goto","sources"))},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(s)("sources.add")),1)]),_:1})]),_:1})]),_:1})):!J.value.length&&!f.value?(h(),H(r(Vt),{key:3},{default:g(()=>[m(r(Zt),{class:"flex flex-col items-center gap-3 py-12 text-center"},{default:g(()=>[b("span",k$,[m(r(Am),{class:"h-5 w-5"})]),b("div",C$,[b("div",S$,v(r(s)("models.emptyNoModels")),1),b("p",$$,v(r(s)("models.emptyNoModelsHint")),1)]),m(r(ke),{onClick:w[5]||(w[5]=C=>E())},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(s)("models.newModel")),1)]),_:1})]),_:1})]),_:1})):J.value.length?o.value==="cards"?(h(),V("div",A$,[(h(!0),V(me,null,Pe(J.value,C=>(h(),H(r(Vt),{key:C.name,class:"group gap-0 py-0 transition-colors hover:bg-muted/30"},{default:g(()=>{var O,A,j,fe,xe;return[b("div",E$,[b("div",O$,[b("span",P$,v(C.name),1),b("button",{type:"button",title:r(s)("connect.copy"),"aria-label":r(s)("connect.copy"),class:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-muted-foreground/50 opacity-0 transition-all hover:bg-accent hover:text-accent-foreground focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",onClick:Ie(be=>q(C.name),["stop"])},[m(r(Cn),{class:"h-3 w-3"})],8,M$),C.paceRpm?(h(),H(r(Oe),{key:0,variant:"outline",class:"shrink-0 gap-1",title:r(s)("models.paceBadgeHint",{n:C.paceRpm,s:Math.max(1,Math.round(60/C.paceRpm))})},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(v(r(s)("models.paceBadge",{n:C.paceRpm})),1)]),_:2},1032,["title"])):se("",!0),C.debugCapture?(h(),H(r(Oe),{key:1,variant:"outline",class:"shrink-0 cursor-pointer gap-1",title:r(s)("models.debugBadgeHint"),onClick:Ie(be=>R(C),["stop"])},{default:g(()=>[m(r(Ho),{class:"h-3 w-3"}),z(v(r(s)("models.debugOnBadge")),1)]),_:1},8,["title","onClick"])):se("",!0),((O=B(C))==null?void 0:O.state)==="testing"?(h(),H(r(Oe),{key:2,variant:"muted",class:"shrink-0 gap-1"},{default:g(()=>[m(r(gt),{class:"h-3 w-3 animate-spin"}),z(v(r(s)("models.probeTesting")),1)]),_:1})):((A=B(C))==null?void 0:A.state)==="ok"?(h(),H(r(Oe),{key:3,variant:"success",class:"shrink-0",title:r(s)("models.probeOkHint",{name:((j=B(C))==null?void 0:j.provider)??""})},{default:g(()=>[z(v(r(s)("models.probeOk")),1)]),_:1},8,["title"])):((fe=B(C))==null?void 0:fe.state)==="fail"?(h(),H(r(Oe),{key:4,variant:"destructive",class:"shrink-0",title:((xe=B(C))==null?void 0:xe.error)||r(s)("models.probeFailHint")},{default:g(()=>{var be;return[z(v(r(s)("models.probeFail"))+" · "+v(((be=B(C))==null?void 0:be.status)||"?"),1)]}),_:2},1032,["title"])):we(C)?(h(),H(r(Oe),{key:5,variant:"secondary",class:"shrink-0 gap-1",title:r(s)("models.delistedHint")},{default:g(()=>[m(r(ko),{class:"h-3 w-3"}),z(v(r(s)("models.delisted")),1)]),_:1},8,["title"])):se("",!0),b("div",{class:"ml-auto flex shrink-0 items-center gap-0.5",onClick:w[6]||(w[6]=Ie(()=>{},["stop"]))},[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground opacity-0 transition-all focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",title:r(s)("models.debug"),"aria-label":r(s)("models.debug"),onClick:be=>R(C)},{default:g(()=>[m(r(Ho),{class:"h-4 w-4"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground opacity-0 transition-all focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",disabled:!oe(C).length||!!B(C)&&B(C).state==="testing",title:r(s)("models.testModel"),"aria-label":r(s)("models.testModel"),onClick:be=>at(C)},{default:g(()=>{var be;return[((be=B(C))==null?void 0:be.state)==="testing"?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-4 w-4"}))]}),_:2},1032,["disabled","title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground opacity-0 transition-all focus-visible:opacity-100 focus-visible:outline-none group-hover:opacity-100",title:r(s)("models.edit"),"aria-label":r(s)("models.edit"),onClick:be=>T(C)},{default:g(()=>[m(r(ao),{class:"h-4 w-4"})]),_:1},8,["title","aria-label","onClick"]),b("div",I$,[m(r(fi),null,{default:g(()=>[m(r(pi),null,{default:g(()=>[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground","aria-label":r(s)("models.moreActions")},{default:g(()=>[m(r(hi),{class:"h-4 w-4"})]),_:1},8,["aria-label"])]),_:1}),m(r(mi),{align:"end"},{default:g(()=>[m(r(Uo),{onSelect:be=>G(C)},{default:g(()=>[m(r(ao)),z(" "+v(r(s)("models.renameModel")),1)]),_:1},8,["onSelect"]),m(r(ld)),m(r(Uo),{class:"text-destructive focus:bg-destructive/10 focus:text-destructive",onSelect:be=>{Q.value=C,de.value=!0}},{default:g(()=>[m(r(hr)),z(" "+v(r(s)("models.removeModel")),1)]),_:1},8,["onSelect"])]),_:2},1024)]),_:2},1024)])])]),b("div",R$,[pe(C).length?(h(!0),V(me,{key:0},Pe(pe(C),be=>(h(),V("div",{key:be.fs.join("|"),class:ge(["flex flex-wrap items-center gap-x-1.5 gap-y-1",{"opacity-60":!be.enabled}])},[(h(!0),V(me,null,Pe(be.fs,Le=>(h(),V("button",{key:Le,type:"button",title:Ue(C,Le),"aria-label":Ue(C,Le),class:ge(["inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-colors",Ye(C,Le)]),onClick:Ie(qe=>ve(C,Le),["stop"])},v(r(s)(r(_n)[Le].label)),11,L$))),128)),w[18]||(w[18]=b("span",{class:"h-4 w-px shrink-0 bg-border","aria-hidden":"true"},null,-1)),m(r(ya),null,{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[b("button",{type:"button",class:ge(["inline-flex min-w-0 max-w-full items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs transition-colors hover:bg-accent hover:text-accent-foreground",le(C,be,X(C,be).i)]),title:r(s)("models.chainListHint"),"aria-label":r(s)("models.chainListHint"),onClick:w[7]||(w[7]=Ie(()=>{},["stop"]))},[b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(X(C,be).s.id).solid])},null,2),b("span",N$,v(X(C,be).s.name),1),X(C,be).s.model?(h(),V("span",{key:0,class:"min-w-0 truncate font-mono text-muted-foreground",title:X(C,be).s.model},"› "+v(X(C,be).s.model),9,F$)):se("",!0),X(C,be).s.thinking?(h(),V("span",{key:1,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.thinkingLabel")},[m(r(xo),{class:"h-2.5 w-2.5"}),z(v(X(C,be).s.thinking),1)],8,q$)):se("",!0),r(on)(X(C,be).s.sampling)?(h(),V("span",{key:2,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.samplingLabel")},[m(r(vs),{class:"h-2.5 w-2.5"}),z(v(r(on)(X(C,be).s.sampling)),1)],8,B$)):se("",!0),m(r(cn),{class:"h-3 w-3 shrink-0 text-muted-foreground/60"})],10,D$)]),_:2},1024),m(r(_a),{align:"start",class:"w-80 p-3"},{default:g(()=>[m(hd,{model:C,line:be,active:X(C,be).actual?X(C,be).i:void 0,fails:he(C,be),"slot-state":ie,"slot-title":M,"slot-class":le,"probe-slot":ue,"use-slot":ye},null,8,["model","line","active","fails"])]),_:2},1024)]),_:2},1024),be.enabled?se("",!0):(h(),V("span",V$,"· "+v(r(s)("models.routeDisabled")),1))],2))),128)):(h(),V("div",U$,v(r(s)("models.unroutedHint")),1))])])]}),_:2},1024))),128))])):(h(),V("div",H$,[m(r(el),null,{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),{class:"hover:bg-transparent"},{default:g(()=>[m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colName")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colFormats")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colChain")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(s)("models.colPace")),1)]),_:1}),m(r(ot),{class:"w-[128px] text-right"},{default:g(()=>[z(v(r(s)("models.colActions")),1)]),_:1})]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(J.value,C=>(h(),H(r(Sn),{key:C.name,class:"group"},{default:g(()=>[m(r(tt),null,{default:g(()=>{var O,A,j,fe;return[b("div",j$,[b("span",z$,v(C.name),1),C.paceRpm||C.debugCapture||B(C)||we(C)?(h(),V("div",W$,[C.paceRpm?(h(),H(r(Oe),{key:0,variant:"outline",class:"gap-1",title:r(s)("models.paceBadgeHint",{n:C.paceRpm,s:Math.max(1,Math.round(60/C.paceRpm))})},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(v(r(s)("models.paceBadge",{n:C.paceRpm})),1)]),_:2},1032,["title"])):se("",!0),C.debugCapture?(h(),H(r(Oe),{key:1,variant:"outline",class:"cursor-pointer gap-1",title:r(s)("models.debugBadgeHint"),onClick:Ie(xe=>R(C),["stop"])},{default:g(()=>[m(r(Ho),{class:"h-3 w-3"}),z(v(r(s)("models.debugOnBadge")),1)]),_:1},8,["title","onClick"])):se("",!0),((O=B(C))==null?void 0:O.state)==="ok"?(h(),H(r(Oe),{key:2,variant:"success",title:r(s)("models.probeOkHint",{name:((A=B(C))==null?void 0:A.provider)??""})},{default:g(()=>[z(v(r(s)("models.probeOk")),1)]),_:1},8,["title"])):((j=B(C))==null?void 0:j.state)==="fail"?(h(),H(r(Oe),{key:3,variant:"destructive",title:((fe=B(C))==null?void 0:fe.error)||r(s)("models.probeFailHint")},{default:g(()=>{var xe;return[z(v(r(s)("models.probeFail"))+" · "+v(((xe=B(C))==null?void 0:xe.status)||"?"),1)]}),_:2},1032,["title"])):we(C)?(h(),H(r(Oe),{key:4,variant:"secondary",class:"gap-1",title:r(s)("models.delistedHint")},{default:g(()=>[m(r(ko),{class:"h-3 w-3"}),z(v(r(s)("models.delisted")),1)]),_:1},8,["title"])):se("",!0)])):se("",!0)])]}),_:2},1024),m(r(tt),{onClick:w[8]||(w[8]=Ie(()=>{},["stop"]))},{default:g(()=>[b("div",K$,[(h(),V(me,null,Pe(l,O=>(h(),V(me,{key:O},[Z(C,O)!=="none"?(h(),V("button",{key:0,type:"button",title:Ue(C,O),"aria-label":Ue(C,O),class:ge(["inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-colors",Ye(C,O)]),onClick:A=>ve(C,O)},v(r(s)(r(_n)[O].label)),11,G$)):se("",!0)],64))),64))])]),_:2},1024),m(r(tt),null,{default:g(()=>[pe(C).length?(h(),V("div",Y$,[(h(!0),V(me,null,Pe(pe(C),O=>(h(),V("div",{key:O.fs.join("|"),class:ge(["flex min-w-0 flex-wrap items-center gap-x-1.5 gap-y-1",{"opacity-60":!O.enabled}])},[pe(C).length>1?(h(!0),V(me,{key:0},Pe(O.fs,A=>(h(),V("span",{key:A,class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(pt)[A].solid]),title:r(s)(r(_n)[A].label)},null,10,X$))),128)):se("",!0),m(r(ya),null,{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[b("button",{type:"button",class:ge(["inline-flex min-w-0 max-w-full items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs transition-colors hover:bg-accent hover:text-accent-foreground",le(C,O,X(C,O).i)]),title:r(s)("models.chainListHint"),"aria-label":r(s)("models.chainListHint"),onClick:w[9]||(w[9]=Ie(()=>{},["stop"]))},[b("span",{class:ge(["h-1.5 w-1.5 shrink-0 rounded-full",r(ps)(X(C,O).s.id).solid])},null,2),b("span",Q$,v(X(C,O).s.name),1),X(C,O).s.model?(h(),V("span",{key:0,class:"min-w-0 truncate font-mono text-muted-foreground",title:X(C,O).s.model},"› "+v(X(C,O).s.model),9,Z$)):se("",!0),X(C,O).s.thinking?(h(),V("span",{key:1,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.thinkingLabel")},[m(r(xo),{class:"h-2.5 w-2.5"}),z(v(X(C,O).s.thinking),1)],8,eT)):se("",!0),r(on)(X(C,O).s.sampling)?(h(),V("span",{key:2,class:"inline-flex shrink-0 items-center gap-0.5 font-mono text-[10px] text-muted-foreground",title:r(s)("models.editor.samplingLabel")},[m(r(vs),{class:"h-2.5 w-2.5"}),z(v(r(on)(X(C,O).s.sampling)),1)],8,tT)):se("",!0),m(r(cn),{class:"h-3 w-3 shrink-0 text-muted-foreground/60"})],10,J$)]),_:2},1024),m(r(_a),{align:"start",class:"w-80 p-3"},{default:g(()=>[m(hd,{model:C,line:O,active:X(C,O).actual?X(C,O).i:void 0,fails:he(C,O),"slot-state":ie,"slot-title":M,"slot-class":le,"probe-slot":ue,"use-slot":ye},null,8,["model","line","active","fails"])]),_:2},1024)]),_:2},1024),O.enabled?se("",!0):(h(),V("span",nT,"· "+v(r(s)("models.routeDisabled")),1))],2))),128))])):(h(),V("span",sT,v(r(s)("models.unroutedHint")),1))]),_:2},1024),m(r(tt),{class:"whitespace-nowrap"},{default:g(()=>[C.paceRpm?(h(),H(r(Oe),{key:0,variant:"outline",class:"gap-1",title:r(s)("models.paceBadgeHint",{n:C.paceRpm,s:Math.max(1,Math.round(60/C.paceRpm))})},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(v(r(s)("models.paceBadge",{n:C.paceRpm})),1)]),_:2},1032,["title"])):(h(),V("span",oT,"—"))]),_:2},1024),m(r(tt),{onClick:w[10]||(w[10]=Ie(()=>{},["stop"]))},{default:g(()=>[b("div",rT,[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(s)("models.debug"),"aria-label":r(s)("models.debug"),onClick:O=>R(C)},{default:g(()=>[m(r(Ho),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",disabled:!oe(C).length||!!B(C)&&B(C).state==="testing",title:r(s)("models.testModel"),"aria-label":r(s)("models.testModel"),onClick:O=>at(C)},{default:g(()=>{var O;return[((O=B(C))==null?void 0:O.state)==="testing"?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-3.5 w-3.5"}))]}),_:2},1032,["disabled","title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(s)("models.edit"),"aria-label":r(s)("models.edit"),onClick:O=>T(C)},{default:g(()=>[m(r(ao),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(fi),null,{default:g(()=>[m(r(pi),null,{default:g(()=>[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground","aria-label":r(s)("models.moreActions")},{default:g(()=>[m(r(hi),{class:"h-4 w-4"})]),_:1},8,["aria-label"])]),_:1}),m(r(mi),{align:"end"},{default:g(()=>[m(r(Uo),{onSelect:O=>G(C)},{default:g(()=>[m(r(ao)),z(" "+v(r(s)("models.renameModel")),1)]),_:1},8,["onSelect"]),m(r(ld)),m(r(Uo),{class:"text-destructive focus:bg-destructive/10 focus:text-destructive",onSelect:O=>{Q.value=C,de.value=!0}},{default:g(()=>[m(r(hr)),z(" "+v(r(s)("models.removeModel")),1)]),_:1},8,["onSelect"])]),_:2},1024)]),_:2},1024)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})])):(h(),V("p",T$,v(r(s)("models.noMatch")),1)),m(fS,{open:p.value,"onUpdate:open":w[11]||(w[11]=C=>p.value=C),model:S.value?null:y.value,providers:u.value,"existing-names":i.value.map(C=>C.name),onSaved:x},null,8,["open","model","providers","existing-names"]),m(j2,{open:L.value,"onUpdate:open":w[12]||(w[12]=C=>L.value=C),model:$.value,onChanged:w[13]||(w[13]=C=>N())},null,8,["open","model"]),m(r(zs),{open:_.value,"onUpdate:open":w[16]||(w[16]=C=>_.value=C)},{default:g(()=>[m(r(Ws),{class:"max-w-sm"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(r(s)("models.renameModel")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(r(s)("models.renameDesc")),1)]),_:1}),b("div",aT,[m(r(_t),{for:"rename-input"},{default:g(()=>[z(v(r(s)("models.editor.nameLabel")),1)]),_:1}),m(r(mt),{id:"rename-input",modelValue:k.value,"onUpdate:modelValue":w[14]||(w[14]=C=>k.value=C),class:"font-mono",spellcheck:"false",autocomplete:"off",onKeydown:An(Y,["enter"])},null,8,["modelValue"]),b("p",lT,v(r(s)("models.renameHint")),1)]),b("div",iT,[m(r(ke),{variant:"outline",disabled:U.value,onClick:w[15]||(w[15]=C=>_.value=!1)},{default:g(()=>[z(v(r(s)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:U.value||!k.value.trim(),onClick:Y},{default:g(()=>[U.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):se("",!0),z(v(r(s)("settings.save")),1)]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["open"]),m(fu,{open:de.value,"onUpdate:open":w[17]||(w[17]=C=>de.value=C),variant:"destructive",title:r(s)("models.removeModel"),description:Q.value?r(s)("models.confirmRemove",{name:Q.value.name}):"","confirm-text":r(s)("models.removeModel"),loading:D.value,onConfirm:P},null,8,["open","title","description","confirm-text","loading"])]))}}),Ol=re({__name:"Checkbox",props:es({class:{type:[Boolean,null,String,Object,Array]},id:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=e,n=So(e,"modelValue");return(s,o)=>(h(),H(r(Cx),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=a=>n.value=a),id:t.id,class:ge(r(je)("peer h-4 w-4 shrink-0 cursor-pointer rounded-[4px] border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",t.class))},{default:g(()=>[m(r($x),{class:"flex h-full w-full items-center justify-center text-current"},{default:g(()=>[m(r(rn),{class:"h-3.5 w-3.5"})]),_:1})]),_:1},8,["modelValue","id","class"]))}}),cT=re({__name:"Separator",props:{class:{type:[Boolean,null,String,Object,Array]},orientation:{}},setup(e){const t=e;return(n,s)=>(h(),H(r(fk),{orientation:t.orientation??"horizontal",class:ge(r(je)("shrink-0 bg-border",t.orientation==="vertical"?"h-full w-px":"h-px w-full",t.class))},null,8,["orientation","class"]))}}),dT={class:"flex shrink-0 items-center gap-2 pr-8"},fT={class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-primary/15 text-primary"},pT={class:"min-w-0"},mT={class:"min-h-0 flex-1 space-y-3.5 overflow-y-auto px-1 py-1"},hT={class:"space-y-1.5"},gT={class:"space-y-1.5"},vT={class:"space-y-2 rounded-md border bg-background/50 p-3"},yT={class:"space-y-2"},bT={class:"flex items-center gap-2.5"},_T={class:"text-sm font-medium leading-none"},xT={class:"flex items-center gap-2.5 pl-7"},wT={class:"flex items-center gap-2.5"},kT={class:"text-sm font-medium leading-none"},CT={key:0,class:"space-y-1.5"},ST={class:"text-xs text-muted-foreground"},$T={key:1,class:"space-y-1.5"},TT={class:"text-xs text-muted-foreground"},AT=["aria-expanded"],ET={key:2,class:"space-y-1.5 rounded-md border bg-muted/30 p-3 text-xs leading-relaxed text-muted-foreground"},OT={class:"font-medium text-foreground"},PT={class:"font-medium text-foreground"},MT={class:"font-medium text-foreground"},IT={class:"space-y-1.5"},RT={class:"flex items-center justify-between"},LT={key:0,class:"text-xs text-muted-foreground"},DT={class:"space-y-1.5"},NT=["aria-expanded"],FT={key:0,class:"space-y-1.5 rounded-md border bg-muted/30 p-3"},qT={class:"text-xs text-muted-foreground"},BT={key:3,class:"text-sm text-destructive"},VT={class:"flex shrink-0 justify-end gap-2"},UT=re({__name:"SourceDialog",props:es({provider:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:es(["saved"],["update:open"]),setup(e,{emit:t}){const n=e,s=So(e,"open"),o=t,{t:a}=ft(),l=W(""),i=W(""),u=W(""),c=W(""),d=W(""),f=W(!0),p=W(!1),y=W(!1),S=W(!1),T=W(!1),E=W(""),x=W(!1);function _($){if($==="openai"){if(f.value&&!p.value)return;f.value=!f.value}else{if(p.value&&!f.value)return;p.value=!p.value}}const I=()=>{const $=[];return f.value&&$.push("openai"),p.value&&$.push("anthropic"),$};function k(){var R;E.value="",S.value=!1,T.value=!!((R=n.provider)!=null&&R.rpm);const $=n.provider;if(!$){l.value="",i.value="",u.value="",c.value="",d.value="",f.value=!0,p.value=!1,y.value=!1;return}l.value=$.name,i.value=$.baseUrlOpenai,u.value=$.baseUrlAnthropic,c.value="",d.value=$.rpm?String($.rpm):"",f.value=$.formats.includes("openai"),p.value=$.formats.includes("anthropic"),y.value=!!$.supportsResponses}Re(s,$=>{$&&k()});function U(){if(!I().length)E.value=a("sources.errFormat");else if(!n.provider&&(!l.value.trim()||!c.value))E.value=a("sources.errRequired");else if(n.provider&&!l.value.trim())E.value=a("sources.errNameRequired");else if(f.value&&!i.value.trim()||p.value&&!u.value.trim())E.value=a("sources.errBaseUrl");else return E.value="",!0;return!1}async function L(){if(!x.value&&U()){x.value=!0;try{const $={name:l.value.trim(),baseUrlOpenai:i.value.trim(),baseUrlAnthropic:u.value.trim(),formats:I(),supportsResponses:f.value&&y.value,rpm:Number(d.value)||0};c.value&&($.apiKey=c.value);const R=n.provider?await Ve("PUT",`/admin/providers/${n.provider.id}`,$):await Ve("POST","/admin/providers",$);Be(a(n.provider?"sources.updated":"sources.added"),"success"),s.value=!1,o("saved",R.provider)}catch($){Be($.message,"error")}finally{x.value=!1}}}return($,R)=>(h(),H(r(zs),{open:s.value,"onUpdate:open":R[11]||(R[11]=G=>s.value=G)},{default:g(()=>[m(r(Ws),{class:"max-w-lg"},{default:g(()=>{var G;return[b("div",dT,[b("span",fT,[m(r(wo),{class:"h-4 w-4"})]),b("div",pT,[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(e.provider?r(a)("sources.editTitle"):r(a)("sources.add")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(e.provider?r(a)("sources.dialogEditDesc"):r(a)("sources.dialogCreateDesc")),1)]),_:1})])]),b("div",mT,[b("div",hT,[m(r(_t),{for:"s-name"},{default:g(()=>[z(v(r(a)("sources.nameLabel")),1)]),_:1}),m(r(mt),{id:"s-name",modelValue:l.value,"onUpdate:modelValue":R[0]||(R[0]=Y=>l.value=Y),placeholder:r(a)("sources.namePh"),autocomplete:"off","aria-label":"name"},null,8,["modelValue","placeholder"])]),b("div",gT,[m(r(_t),null,{default:g(()=>[z(v(r(a)("sources.formats")),1)]),_:1}),b("div",vT,[b("div",yT,[b("div",bT,[m(r(Ol),{"model-value":f.value,disabled:f.value&&!p.value,"aria-label":"openai","onUpdate:modelValue":R[1]||(R[1]=Y=>_("openai"))},null,8,["model-value","disabled"]),b("span",_T,v(r(Vo).openai),1),R[12]||(R[12]=b("span",{class:"text-xs text-muted-foreground"},"/chat/completions",-1))]),b("div",xT,[m(r(Ol),{modelValue:y.value,"onUpdate:modelValue":R[2]||(R[2]=Y=>y.value=Y),disabled:!f.value,"aria-label":r(a)("sources.responses")},null,8,["modelValue","disabled","aria-label"]),b("span",{class:ge(["text-sm leading-none",f.value?"":"text-muted-foreground"])},v(r(a)("sources.responses")),3),R[13]||(R[13]=b("span",{class:"text-xs text-muted-foreground"},"/responses",-1))])]),m(r(cT)),b("div",wT,[m(r(Ol),{"model-value":p.value,disabled:p.value&&!f.value,"aria-label":"anthropic","onUpdate:modelValue":R[3]||(R[3]=Y=>_("anthropic"))},null,8,["model-value","disabled"]),b("span",kT,v(r(Vo).anthropic),1),R[14]||(R[14]=b("span",{class:"text-xs text-muted-foreground"},"/messages",-1))])])]),f.value?(h(),V("div",CT,[m(r(_t),{for:"s-url-openai"},{default:g(()=>[z(v(r(a)("sources.urlLabelOpenai")),1)]),_:1}),m(r(mt),{id:"s-url-openai",modelValue:i.value,"onUpdate:modelValue":R[4]||(R[4]=Y=>i.value=Y),placeholder:r(a)("sources.urlPhOpenai"),autocomplete:"off","aria-label":"openai base url"},null,8,["modelValue","placeholder"]),b("p",ST,v(r(a)("sources.urlHintOpenai")),1)])):se("",!0),p.value?(h(),V("div",$T,[m(r(_t),{for:"s-url-anthropic"},{default:g(()=>[z(v(r(a)("sources.urlLabelAnthropic")),1)]),_:1}),m(r(mt),{id:"s-url-anthropic",modelValue:u.value,"onUpdate:modelValue":R[5]||(R[5]=Y=>u.value=Y),placeholder:r(a)("sources.urlPhAnthropic"),autocomplete:"off","aria-label":"anthropic base url"},null,8,["modelValue","placeholder"]),b("p",TT,v(r(a)("sources.urlHintAnthropic")),1)])):se("",!0),b("button",{type:"button",class:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground","aria-expanded":S.value,onClick:R[6]||(R[6]=Y=>S.value=!S.value)},[m(r(cu),{class:"h-3.5 w-3.5"}),z(" "+v(r(a)("sources.baseHelpToggle"))+" ",1),m(r(cn),{class:ge(["h-3.5 w-3.5 transition-transform",{"rotate-180":S.value}])},null,8,["class"])],8,AT),S.value?(h(),V("div",ET,[b("p",null,v(r(a)("sources.baseHelpSplit")),1),b("p",null,[b("span",OT,v(r(Vo).openai),1),z(" — "+v(r(a)("sources.baseHelpOpenai")),1)]),b("p",null,[b("span",PT,v(r(Vo).anthropic),1),z(" — "+v(r(a)("sources.baseHelpAnthropic")),1)]),b("p",null,[b("span",MT,v(r(a)("sources.responses")),1),z(" — "+v(r(a)("sources.responsesNote")),1)])])):se("",!0),b("div",IT,[b("div",RT,[m(r(_t),{for:"s-key"},{default:g(()=>[z(v(r(a)("sources.keyLabel")),1)]),_:1}),(G=e.provider)!=null&&G.apiKey?(h(),V("span",LT,v(r(a)("sources.currentKeyLabel"))+": "+v(e.provider.apiKey),1)):se("",!0)]),m(r(mt),{id:"s-key",modelValue:c.value,"onUpdate:modelValue":R[7]||(R[7]=Y=>c.value=Y),type:"password",placeholder:e.provider?r(a)("sources.keyPhEdit"):r(a)("sources.keyPh"),autocomplete:"new-password","aria-label":"api key"},null,8,["modelValue","placeholder"])]),b("div",DT,[b("button",{type:"button",class:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground","aria-expanded":T.value,onClick:R[8]||(R[8]=Y=>T.value=!T.value)},[m(r(vs),{class:"h-3.5 w-3.5"}),z(" "+v(r(a)("sources.advancedToggle"))+" ",1),m(r(cn),{class:ge(["h-3.5 w-3.5 transition-transform",{"rotate-180":T.value}])},null,8,["class"])],8,NT),T.value?(h(),V("div",FT,[m(r(_t),{for:"s-rpm"},{default:g(()=>[z(v(r(a)("sources.rpmLabel")),1)]),_:1}),m(r(mt),{id:"s-rpm",modelValue:d.value,"onUpdate:modelValue":R[9]||(R[9]=Y=>d.value=Y),type:"number",min:"0",inputmode:"numeric",placeholder:r(a)("sources.rpmPh"),"aria-label":"rpm"},null,8,["modelValue","placeholder"]),b("p",qT,v(r(a)("sources.rpmHint")),1)])):se("",!0)]),E.value?(h(),V("p",BT,v(E.value),1)):se("",!0)]),b("div",VT,[m(r(ke),{variant:"outline",disabled:x.value,onClick:R[10]||(R[10]=Y=>s.value=!1)},{default:g(()=>[z(v(r(a)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:x.value,onClick:L},{default:g(()=>[x.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):se("",!0),z(" "+v(r(a)("sources.saveBtn")),1)]),_:1},8,["disabled"])])]}),_:1})]),_:1},8,["open"]))}}),HT={class:"space-y-2.5"},jT={class:"flex items-center gap-2"},zT={class:"relative min-w-0 flex-1"},WT={class:"flex items-center gap-2"},KT={class:"relative min-w-0 flex-1"},GT={key:0,class:"text-xs text-muted-foreground"},YT={key:0,class:"flex flex-col items-center gap-2 px-4 py-10 text-center"},XT={class:"flex size-9 items-center justify-center rounded-lg bg-muted text-muted-foreground"},JT={class:"text-sm text-muted-foreground"},QT={key:0,class:"px-3 py-6 text-center text-xs text-muted-foreground"},ZT=["data-mname","title","onClick"],eA={class:"min-w-0 flex-1 truncate font-mono text-sm"},tA=["disabled","aria-label","onClick"],nA=["disabled","title","aria-label","onClick"],sA=re({__name:"SourceModelsDialog",props:{open:{type:Boolean},provider:{}},emits:["update:open","saved"],setup(e,{emit:t}){const n=e,s=t,{t:o}=ft(),a=W(""),l=W(""),i=W([]),u=W(""),c=W(null),d=W(null),f=W(null),p=W(new Set);let y;function S(D){p.value=new Set(D),clearTimeout(y),y=setTimeout(()=>p.value.clear(),1600)}Co(()=>clearTimeout(y)),Re(()=>n.open,async D=>{var P,N,J;D&&(a.value="",l.value="",i.value=[...((P=n.provider)==null?void 0:P.extraModels)??[]],p.value.clear(),Y.value.clear(),ne.value={},await it(),(J=(N=c.value)==null?void 0:N.$el)==null||J.focus())}),Re(()=>n.provider,D=>{n.open&&D&&(i.value=[...D.extraModels??[]])});const T=ae(()=>{var D;return((D=n.provider)==null?void 0:D.discoveredModels)??[]}),E=ae(()=>po({discoveredModels:T.value,extraModels:i.value}).map(P=>({name:P,manual:i.value.includes(P)&&!T.value.includes(P)}))),x=ae(()=>{const D=a.value.trim().toLowerCase();return D?E.value.filter(P=>P.name.toLowerCase().includes(D)):E.value}),_=ae(()=>{const D=l.value.trim();return!!D&&E.value.some(P=>P.name===D)}),I=ae(()=>!!l.value.trim()&&!_.value);function k(D){i.value=[...D.extraModels??[]],s("saved",D)}async function U(D){const P=await Ve("PUT",`/admin/providers/${n.provider.id}/extra-models`,{models:D});return k(P.provider),P.provider}async function L(){var P,N,J,oe;if(!n.provider||u.value||!I.value)return;const D=[...new Set(l.value.split(/[\s,;]+/).map(pe=>pe.trim()).filter(Boolean))].filter(pe=>!i.value.includes(pe));if(D.length){u.value="add";try{await U([...i.value,...D]),l.value="",S(D),Be(o("sources.modelAdded",{n:D.length}),"success"),await it(),(N=(P=f.value)==null?void 0:P.querySelector(`[data-mname="${CSS.escape(D[0])}"]`))==null||N.scrollIntoView({block:"nearest"}),(oe=(J=d.value)==null?void 0:J.$el)==null||oe.focus()}catch(pe){Be(pe.message,"error")}finally{u.value=""}}}async function $(D){if(!u.value){u.value="remove";try{await U(i.value.filter(P=>P!==D)),Be(o("sources.modelRemoved",{name:D}),"success")}catch(P){Be(P.message,"error")}finally{u.value=""}}}async function R(){if(!(!n.provider||u.value)){u.value="refresh";try{const D=await Ve("POST",`/admin/providers/${n.provider.id}/discover`);k({...n.provider,discoveredModels:D.models}),Be(o("sources.refreshDone",{name:n.provider.name}),D.models.length?"success":"default")}catch(D){Be(D.message,"error")}finally{u.value=""}}}async function G(D){const P=await kr(D);Be(o(P?"connect.copied":"connect.copyFailed"),P?"success":"error")}const Y=W(new Set),ne=W({});async function Q(D){if(!(!n.provider||Y.value.has(D))){Y.value.add(D);try{const P=await Ve("POST",`/admin/providers/${n.provider.id}/test?model=${encodeURIComponent(D)}`);ne.value={...ne.value,[D]:P.results}}catch(P){Be(P.message,"error")}finally{Y.value.delete(D)}}}function de(D){a.value&&(D.stopPropagation(),D.preventDefault(),a.value="")}return(D,P)=>(h(),H(r(zs),{open:e.open,"onUpdate:open":P[2]||(P[2]=N=>s("update:open",N))},{default:g(()=>[m(r(Ws),{class:"max-w-lg"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(r(o)("sources.modelsTitle")),1)]),_:1}),m(r(Gs),{class:"sr-only"},{default:g(()=>{var N;return[z(v(r(o)("sources.modelsDesc",{name:((N=e.provider)==null?void 0:N.name)??""})),1)]}),_:1}),b("div",HT,[b("div",jT,[b("div",zT,[m(r(du),{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{ref_key:"inputRef",ref:c,modelValue:a.value,"onUpdate:modelValue":P[0]||(P[0]=N=>a.value=N),placeholder:r(o)("sources.modelsSearchPh"),autocomplete:"off",spellcheck:"false",class:"pl-8 font-mono",onKeydown:An(de,["esc"])},null,8,["modelValue","placeholder"])]),m(r(ke),{variant:"outline",size:"icon",class:"size-9 shrink-0",disabled:u.value!=="",title:r(o)("sources.refreshModels"),"aria-label":r(o)("sources.refreshModels"),onClick:R},{default:g(()=>[u.value==="refresh"?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-4 w-4"}))]),_:1},8,["disabled","title","aria-label"])]),b("div",WT,[b("div",KT,[m(r(Yn),{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{ref_key:"addRef",ref:d,modelValue:l.value,"onUpdate:modelValue":P[1]||(P[1]=N=>l.value=N),placeholder:r(o)("sources.modelsAddPh"),autocomplete:"off",spellcheck:"false",class:"pl-8 font-mono",onKeydown:An(Ie(L,["prevent"]),["enter"])},null,8,["modelValue","placeholder","onKeydown"])]),m(r(ke),{variant:"outline",class:"shrink-0",disabled:!I.value||u.value!=="",onClick:L},{default:g(()=>[u.value==="add"?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Yn),{key:1,class:"h-4 w-4"})),z(v(r(o)("sources.modelsAddBtn")),1)]),_:1},8,["disabled"])]),_.value?(h(),V("p",GT,v(r(o)("sources.modelsAddExists",{q:l.value.trim()})),1)):se("",!0),b("div",{ref_key:"listRef",ref:f,class:"max-h-80 divide-y overflow-y-auto rounded-md border"},[E.value.length?(h(),V(me,{key:1},[x.value.length?se("",!0):(h(),V("div",QT,v(r(o)("sources.modelsNoMatch")),1)),(h(!0),V(me,null,Pe(x.value,N=>(h(),V("div",{key:N.name,"data-mname":N.name,class:ge(["flex cursor-pointer items-center gap-2 px-3 py-1.5 transition-colors hover:bg-muted/50",p.value.has(N.name)?"row-flash":""]),title:`${N.name} · ${r(o)("sources.modelCopyTip")}`,onClick:J=>G(N.name)},[b("span",eA,v(N.name),1),ne.value[N.name]?(h(!0),V(me,{key:0},Pe(ne.value[N.name],J=>(h(),H(r(Oe),{key:J.format,variant:J.ok?"success":"destructive",class:"shrink-0 font-mono",title:`${r(Lt)(J.format)} · ${J.status||"?"} · ${J.ms} ms${J.error?" · "+J.error:""}`},{default:g(()=>[z(v(J.ok?"✓":"✗")+" "+v(r(Lt)(J.format))+" "+v(J.ok?`${J.ms}ms`:J.status||"–"),1)]),_:2},1032,["variant","title"]))),128)):se("",!0),N.manual?(h(),H(r(Oe),{key:1,variant:"secondary",class:"shrink-0"},{default:g(()=>[z(v(r(o)("sources.modelTagManual")),1)]),_:1})):se("",!0),N.manual?(h(),V("button",{key:2,type:"button",class:"-mr-1 flex size-6 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-destructive",disabled:u.value!=="","aria-label":r(o)("sources.modelRemove"),onClick:Ie(J=>$(N.name),["stop"])},[m(r(Ao),{class:"h-3.5 w-3.5"})],8,tA)):se("",!0),b("button",{type:"button",class:"-mr-1 flex size-6 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",disabled:Y.value.has(N.name),title:r(o)("sources.testBtn"),"aria-label":`${r(o)("sources.testBtn")} ${N.name}`,onClick:Ie(J=>Q(N.name),["stop"])},[Y.value.has(N.name)?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-3.5 w-3.5"}))],8,nA)],10,ZT))),128))],64)):(h(),V("div",YT,[b("span",XT,[m(r(jk),{class:"size-4"})]),b("p",JT,v(r(o)("sources.modelsEmpty")),1)]))],512)])]),_:1})]),_:1},8,["open"]))}}),oA=Im(sA,[["__scopeId","data-v-35cb6f16"]]),rA={class:"space-y-4"},aA={class:"flex flex-wrap items-center justify-between gap-2"},lA={class:"flex items-center gap-2"},iA={class:"text-base font-semibold"},uA={class:"text-sm text-muted-foreground"},cA={key:0,class:"flex items-center gap-2"},dA={class:"flex items-center rounded-md border p-0.5"},fA={key:0,class:"py-8 text-center text-sm text-muted-foreground"},pA={key:1,class:"py-8 text-center text-sm text-destructive"},mA={class:"flex h-11 w-11 items-center justify-center rounded-xl bg-primary/15 text-primary"},hA={class:"space-y-1"},gA={class:"font-medium"},vA={class:"max-w-sm text-sm text-muted-foreground"},yA={key:0,class:"flex flex-wrap items-center gap-3 rounded-lg border border-primary/40 bg-primary/5 px-3 py-2.5"},bA={class:"min-w-0 flex-1 text-sm"},_A={key:1,class:"grid items-stretch gap-3 md:grid-cols-2"},xA={class:"flex h-full flex-col gap-3 p-4"},wA={class:"flex min-w-0 flex-wrap items-center gap-1.5"},kA={class:"truncate text-sm font-semibold"},CA=["title","aria-label","onClick"],SA={class:"min-w-0 flex-1 space-y-1"},$A={key:0,class:"truncate font-mono text-xs text-muted-foreground"},TA={class:"opacity-60"},AA={key:1,class:"truncate font-mono text-xs text-muted-foreground"},EA={class:"opacity-60"},OA={class:"flex items-center gap-1 border-t pt-3"},PA={key:2,class:"overflow-hidden rounded-lg border"},MA={class:"flex flex-wrap gap-1"},IA={class:"max-w-[300px] space-y-0.5 font-mono text-xs text-muted-foreground"},RA=["title"],LA={class:"opacity-60"},DA=["title"],NA={class:"opacity-60"},FA=["title"],qA={key:1},BA=["title","aria-label","onClick"],VA={class:"flex items-center justify-end gap-0.5"},UA={class:"space-y-3"},HA={class:"text-xs text-muted-foreground"},jA={key:0,class:"space-y-1.5"},zA={class:"flex flex-wrap gap-1.5"},WA=["onClick"],KA={key:1,class:"space-y-1.5 rounded-md border bg-muted/30 p-2.5"},GA={class:"shrink-0 tabular-nums text-muted-foreground"},YA=["title"],XA={class:"flex justify-end gap-2"},vd="myapikey.view.sources",JA=re({__name:"Sources",emits:["goto"],setup(e,{emit:t}){const{t:n}=ft(),s=t,o=W([]),a=W(!0),l=W(!1),i=W(""),u=W(localStorage.getItem(vd)==="table"?"table":"cards");function c(ve){u.value=ve;try{localStorage.setItem(vd,ve)}catch{}}const d=W(!1),f=W(null);function p(){f.value=null,d.value=!0}function y(ve){f.value=ve,d.value=!0}function S(ve){const ye=o.value.some(ee=>ee.id===ve.id);o.value=ye?o.value.map(ee=>ee.id===ve.id?ve:ee):[...o.value,ve]}const T=W({});async function E(ve){T.value[ve.id]=!0;try{const ye=await Ve("POST",`/admin/providers/${ve.id}/discover`);o.value=o.value.map(ee=>ee.id===ve.id?{...ee,discoveredModels:ye.models}:ee),Be(n("sources.refreshDone",{name:ve.name}),ye.models.length?"success":"default")}catch(ye){Be(ye.message,"error")}finally{T.value[ve.id]=!1}}const x=W(null),_=W(!1),I=W(!1),k=W(!1),U=W(null),L=W(""),$=W({}),R=W(!1),G=W(null),Y=ae(()=>U.value?po(U.value):[]);function ne(ve){return[...ve.formats,...ve.supportsResponses?["responses"]:[]]}function Q(ve){U.value=ve,L.value=po(ve)[0]??"",$.value=Object.fromEntries(ne(ve).map(ye=>[ye,!0])),G.value=null,k.value=!0}async function de(){const ve=U.value,ye=L.value.trim();if(!ve||!ye||R.value)return;const ee=ne(ve),we=ee.filter(_e=>$.value[_e]);if(we.length){R.value=!0,G.value=null;try{const _e=we.length<ee.length?we.map(at=>`&format=${at}`).join(""):"",Fe=await Ve("POST",`/admin/providers/${ve.id}/test?model=${encodeURIComponent(ye)}${_e}`);G.value=Fe.results}catch(_e){Be(_e.message,"error")}finally{R.value=!1}}}function D(ve,ye){return ve&&ye in pt?`border-transparent ${pt[ye].solid} text-white shadow-sm`:ve?"border-transparent bg-primary text-primary-foreground shadow-sm":"border-input text-muted-foreground hover:bg-accent hover:text-accent-foreground"}async function P(){const ve=x.value;if(!(!ve||I.value)){I.value=!0;try{await Ve("DELETE",`/admin/providers/${ve.id}`),o.value=o.value.filter(ye=>ye.id!==ve.id),Be(n("sources.removed",{name:ve.name}),"success"),_.value=!1}catch(ye){Be(ye.message,"error")}finally{I.value=!1}}}function N(ve){return po(ve).length}function J(ve){return N(ve)>0?"found":ve.discoveredAt?"empty":"never"}function oe(ve){const ye=J(ve);return ye==="found"?n("sources.discoveredCount",{n:N(ve)}):n(ye==="empty"?"sources.noModelsFound":"sources.notScanned")}function pe(ve){const ye=J(ve);return n(ye==="empty"?"sources.noModelsHint":ye==="never"?"sources.notScannedHint":"sources.modelsOpenHint")}const X=W(!1),he=W(null);function Z(ve){he.value=ve,X.value=!0}function Ye(ve){return ve in pt?pt[ve].badge:""}async function Ue(){l.value=!0,i.value="";try{const[ve,ye]=await Promise.all([Ve("GET","/admin/providers"),Ve("GET","/admin/models").catch(()=>null)]);o.value=ve.providers,a.value=!!(ye!=null&&ye.models.length)}catch(ve){i.value=ve.message}finally{l.value=!1}}return rt(Ue),(ve,ye)=>(h(),V("div",rA,[b("div",aA,[b("div",lA,[m(r(wo),{class:"h-4 w-4 text-primary"}),b("span",iA,v(r(n)("sources.pageTitle")),1),b("span",uA,v(r(n)("sources.pageDesc")),1)]),o.value.length?(h(),V("div",cA,[b("div",dA,[m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",u.value==="cards"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(n)("common.viewCards"),"aria-label":r(n)("common.viewCards"),onClick:ye[0]||(ye[0]=ee=>c("cards"))},{default:g(()=>[m(r(Em),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"]),m(r(ke),{variant:"ghost",size:"icon",class:ge(["h-6 w-6",u.value==="table"?"bg-accent text-accent-foreground":"text-muted-foreground"]),title:r(n)("common.viewTable"),"aria-label":r(n)("common.viewTable"),onClick:ye[1]||(ye[1]=ee=>c("table"))},{default:g(()=>[m(r(Pm),{class:"h-3.5 w-3.5"})]),_:1},8,["class","title","aria-label"])]),m(r(ke),{size:"sm",onClick:p},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(n)("sources.add")),1)]),_:1})])):se("",!0)]),l.value?(h(),V("p",fA,v(r(n)("common.loading")),1)):i.value?(h(),V("p",pA,v(i.value),1)):o.value.length?(h(),V(me,{key:3},[a.value?se("",!0):(h(),V("div",yA,[b("p",bA,v(r(n)("sources.nextHint")),1),m(r(ke),{size:"sm",onClick:ye[2]||(ye[2]=ee=>s("goto","models"))},{default:g(()=>[z(v(r(n)("sources.nextCta")),1)]),_:1})])),u.value==="cards"?(h(),V("div",_A,[(h(!0),V(me,null,Pe(o.value,ee=>(h(),H(r(Vt),{key:ee.id,class:"group cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/30",onClick:we=>y(ee)},{default:g(()=>[b("div",xA,[b("div",wA,[b("span",kA,v(ee.name),1),(h(!0),V(me,null,Pe(ee.formats,we=>(h(),H(r(Oe),{key:we,variant:"outline",class:ge(["shrink-0",Ye(we)])},{default:g(()=>[z(v(r(Lt)(we)),1)]),_:2},1032,["class"]))),128)),ee.supportsResponses?(h(),H(r(Oe),{key:0,variant:"outline",class:ge(["shrink-0",r(pt).responses.badge])},{default:g(()=>[z(v(r(Lt)("responses")),1)]),_:1},8,["class"])):se("",!0),ee.rpm?(h(),H(r(Oe),{key:1,variant:"outline",class:"shrink-0",title:r(n)("sources.rpmBadgeHint")},{default:g(()=>[z(v(r(n)("sources.rpmBadge",{n:ee.rpm})),1)]),_:2},1032,["title"])):se("",!0),b("button",{type:"button",class:"shrink-0 rounded-full outline-none focus-visible:ring-2 focus-visible:ring-ring",title:pe(ee),"aria-label":r(n)("sources.modelsTitle"),onClick:Ie(we=>Z(ee),["stop"])},[m(r(Oe),{variant:"muted",class:"cursor-pointer gap-1 pr-1.5 transition-colors hover:bg-accent hover:text-accent-foreground"},{default:g(()=>[z(v(oe(ee))+" ",1),m(r(cn),{class:"size-3 opacity-60"})]),_:2},1024)],8,CA)]),b("div",SA,[ee.formats.includes("openai")?(h(),V("div",$A,[b("span",TA,v(r(Lt)("openai"))+" ·",1),z(" "+v(ee.baseUrlOpenai),1)])):se("",!0),ee.formats.includes("anthropic")?(h(),V("div",AA,[b("span",EA,v(r(Lt)("anthropic"))+" ·",1),z(" "+v(ee.baseUrlAnthropic),1)])):se("",!0)]),b("div",OA,[m(r(ke),{variant:"ghost",size:"sm",class:"h-7 gap-1.5 px-2 text-xs",onClick:Ie(we=>Q(ee),["stop"])},{default:g(()=>[m(r(Ns),{class:"h-3.5 w-3.5"}),z(v(r(n)("sources.testBtn")),1)]),_:1},8,["onClick"]),m(r(ke),{variant:"ghost",size:"sm",class:"h-7 gap-1.5 px-2 text-xs",disabled:T.value[ee.id],onClick:Ie(we=>E(ee),["stop"])},{default:g(()=>[T.value[ee.id]?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"})),z(v(r(n)("sources.refreshModels")),1)]),_:2},1032,["disabled","onClick"]),m(r(ke),{variant:"ghost",size:"sm",class:"h-7 gap-1.5 px-2 text-xs",onClick:Ie(we=>y(ee),["stop"])},{default:g(()=>[m(r(ao),{class:"h-3.5 w-3.5"}),z(v(r(n)("sources.editLabel")),1)]),_:1},8,["onClick"]),b("div",{class:"ml-auto",onClick:ye[3]||(ye[3]=Ie(()=>{},["stop"]))},[m(r(fi),null,{default:g(()=>[m(r(pi),null,{default:g(()=>[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground","aria-label":r(n)("sources.moreActions")},{default:g(()=>[m(r(hi),{class:"h-4 w-4"})]),_:1},8,["aria-label"])]),_:1}),m(r(mi),{align:"end"},{default:g(()=>[m(r(Uo),{class:"text-destructive focus:bg-destructive/10 focus:text-destructive",onSelect:we=>{x.value=ee,_.value=!0}},{default:g(()=>[m(r(hr)),z(" "+v(r(n)("sources.deleteLabel")),1)]),_:1},8,["onSelect"])]),_:2},1024)]),_:2},1024)])])])]),_:2},1032,["onClick"]))),128))])):(h(),V("div",PA,[m(r(el),null,{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),{class:"hover:bg-transparent"},{default:g(()=>[m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colName")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colFormats")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colBaseUrl")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colRpm")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(n)("sources.colDiscovered")),1)]),_:1}),m(r(ot),{class:"w-[168px] text-right"},{default:g(()=>[z(v(r(n)("sources.colActions")),1)]),_:1})]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(o.value,ee=>(h(),H(r(Sn),{key:ee.id,class:"cursor-pointer",onClick:we=>y(ee)},{default:g(()=>[m(r(tt),{class:"max-w-[160px] truncate font-medium",title:ee.name},{default:g(()=>[z(v(ee.name),1)]),_:2},1032,["title"]),m(r(tt),null,{default:g(()=>[b("div",MA,[(h(!0),V(me,null,Pe(ee.formats,we=>(h(),H(r(Oe),{key:we,variant:"outline",class:ge(Ye(we))},{default:g(()=>[z(v(r(Lt)(we)),1)]),_:2},1032,["class"]))),128)),ee.supportsResponses?(h(),H(r(Oe),{key:0,variant:"outline",class:ge(r(pt).responses.badge)},{default:g(()=>[z(v(r(Lt)("responses")),1)]),_:1},8,["class"])):se("",!0)])]),_:2},1024),m(r(tt),null,{default:g(()=>[b("div",IA,[ee.formats.includes("openai")?(h(),V("div",{key:0,class:"truncate",title:ee.baseUrlOpenai},[b("span",LA,v(r(Lt)("openai"))+" · ",1),z(v(ee.baseUrlOpenai),1)],8,RA)):se("",!0),ee.formats.includes("anthropic")?(h(),V("div",{key:1,class:"truncate",title:ee.baseUrlAnthropic},[b("span",NA,v(r(Lt)("anthropic"))+" · ",1),z(v(ee.baseUrlAnthropic),1)],8,DA)):se("",!0)])]),_:2},1024),m(r(tt),{class:"whitespace-nowrap text-xs text-muted-foreground"},{default:g(()=>[ee.rpm?(h(),V("span",{key:0,title:r(n)("sources.rpmBadgeHint"),class:"font-mono"},v(r(n)("sources.rpmBadge",{n:ee.rpm})),9,FA)):(h(),V("span",qA,"—"))]),_:2},1024),m(r(tt),null,{default:g(()=>[b("button",{type:"button",class:"rounded-full outline-none focus-visible:ring-2 focus-visible:ring-ring",title:pe(ee),"aria-label":r(n)("sources.modelsTitle"),onClick:Ie(we=>Z(ee),["stop"])},[m(r(Oe),{variant:"muted",class:"cursor-pointer gap-1 pr-1.5 transition-colors hover:bg-accent hover:text-accent-foreground"},{default:g(()=>[z(v(oe(ee))+" ",1),m(r(cn),{class:"size-3 opacity-60"})]),_:2},1024)],8,BA)]),_:2},1024),m(r(tt),{onClick:ye[4]||(ye[4]=Ie(()=>{},["stop"]))},{default:g(()=>[b("div",VA,[m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(n)("sources.testBtn"),"aria-label":r(n)("sources.testBtn"),onClick:we=>Q(ee)},{default:g(()=>[m(r(Ns),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",disabled:T.value[ee.id],title:r(n)("sources.refreshModels"),"aria-label":r(n)("sources.refreshModels"),onClick:we=>E(ee)},{default:g(()=>[T.value[ee.id]?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"}))]),_:2},1032,["disabled","title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-muted-foreground",title:r(n)("sources.editLabel"),"aria-label":r(n)("sources.editLabel"),onClick:we=>y(ee)},{default:g(()=>[m(r(ao),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"]),m(r(ke),{variant:"ghost",size:"icon",class:"h-7 w-7 text-destructive hover:text-destructive",title:r(n)("sources.deleteLabel"),"aria-label":r(n)("sources.deleteLabel"),onClick:we=>{x.value=ee,_.value=!0}},{default:g(()=>[m(r(hr),{class:"h-3.5 w-3.5"})]),_:1},8,["title","aria-label","onClick"])])]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})]))],64)):(h(),H(r(Vt),{key:2},{default:g(()=>[m(r(Zt),{class:"flex flex-col items-center gap-3 py-12 text-center"},{default:g(()=>[b("span",mA,[m(r(wo),{class:"h-5 w-5"})]),b("div",hA,[b("div",gA,v(r(n)("sources.emptyTitle")),1),b("p",vA,v(r(n)("sources.emptyHint")),1)]),m(r(ke),{onClick:p},{default:g(()=>[m(r(Yn),{class:"h-4 w-4"}),z(v(r(n)("sources.add")),1)]),_:1})]),_:1})]),_:1})),m(UT,{open:d.value,"onUpdate:open":ye[5]||(ye[5]=ee=>d.value=ee),provider:f.value,onSaved:S},null,8,["open","provider"]),m(oA,{open:X.value,"onUpdate:open":ye[6]||(ye[6]=ee=>X.value=ee),provider:he.value,onSaved:S},null,8,["open","provider"]),m(r(zs),{open:k.value,"onUpdate:open":ye[9]||(ye[9]=ee=>k.value=ee)},{default:g(()=>[m(r(Ws),{class:"max-w-md"},{default:g(()=>[m(r(Ks),{class:"text-base"},{default:g(()=>[z(v(r(n)("sources.testTitle")),1)]),_:1}),m(r(Gs),null,{default:g(()=>[z(v(r(n)("sources.testDesc")),1)]),_:1}),b("div",UA,[b("div",{class:"space-y-1.5",onKeydown:An(de,["enter"])},[m(r(_t),null,{default:g(()=>[z(v(r(n)("sources.testModelLabel")),1)]),_:1}),m(Mm,{modelValue:L.value,"onUpdate:modelValue":ye[7]||(ye[7]=ee=>L.value=ee),options:Y.value,placeholder:r(n)("sources.testModelPh")},null,8,["modelValue","options","placeholder"]),b("p",HA,v(r(n)("sources.testModelHint")),1)],32),U.value?(h(),V("div",jA,[m(r(_t),null,{default:g(()=>[z(v(r(n)("sources.formats")),1)]),_:1}),b("div",zA,[(h(!0),V(me,null,Pe(ne(U.value),ee=>(h(),V("button",{key:ee,type:"button",class:ge(["inline-flex items-center rounded-md border px-2 py-0.5 font-mono text-xs font-medium transition-colors",D(!!$.value[ee],ee)]),onClick:we=>$.value[ee]=!$.value[ee]},v(r(Lt)(ee)),11,WA))),128))])])):se("",!0),G.value?(h(),V("div",KA,[(h(!0),V(me,null,Pe(G.value,ee=>(h(),V("div",{key:ee.format,class:"flex min-w-0 items-center gap-2 text-xs"},[m(r(Oe),{variant:"outline",class:ge(Ye(ee.format))},{default:g(()=>[z(v(r(Lt)(ee.format)),1)]),_:2},1032,["class"]),ee.ok?(h(),H(r(Oe),{key:0,variant:"success",class:"shrink-0"},{default:g(()=>[z(v(r(n)("models.probeOk")),1)]),_:1})):(h(),H(r(Oe),{key:1,variant:"destructive",class:"shrink-0"},{default:g(()=>[z(v(r(n)("models.probeFail"))+" · "+v(ee.status||"?"),1)]),_:2},1024)),b("span",GA,v(ee.ms)+" ms",1),ee.error?(h(),V("span",{key:2,class:"min-w-0 truncate text-destructive",title:ee.error},v(ee.error),9,YA)):se("",!0)]))),128))])):se("",!0)]),b("div",XA,[m(r(ke),{variant:"outline",disabled:R.value,onClick:ye[8]||(ye[8]=ee=>k.value=!1)},{default:g(()=>[z(v(r(n)("common.cancel")),1)]),_:1},8,["disabled"]),m(r(ke),{disabled:R.value||!L.value.trim(),onClick:de},{default:g(()=>[R.value?(h(),H(r(gt),{key:0,class:"h-4 w-4 animate-spin"})):(h(),H(r(Ns),{key:1,class:"h-4 w-4"})),z(v(r(n)("sources.testRun")),1)]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["open"]),m(fu,{open:_.value,"onUpdate:open":ye[10]||(ye[10]=ee=>_.value=ee),variant:"destructive",title:r(n)("sources.remove"),description:x.value?r(n)("sources.confirmRemove",{name:x.value.name}):"","confirm-text":r(n)("sources.remove"),loading:I.value,onConfirm:P},null,8,["open","title","description","confirm-text","loading"])]))}}),QA={class:"flex items-center justify-between gap-2"},ZA={class:"flex gap-1"},eE={class:"sr-only"},tE={class:"flex flex-wrap items-center gap-2"},nE={class:"relative flex-1 sm:max-w-sm"},sE={key:0,class:"inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-medium text-primary-foreground"},oE={class:"space-y-2.5"},rE={class:"flex items-center justify-between"},aE={class:"text-xs font-medium"},lE={class:"space-y-2"},iE={class:"grid grid-cols-[3.5rem_1fr] items-center gap-2"},uE={class:"text-xs text-muted-foreground"},cE={class:"grid grid-cols-[3.5rem_1fr] items-center gap-2"},dE={class:"text-xs text-muted-foreground"},fE={class:"grid grid-cols-[3.5rem_1fr] items-center gap-2"},pE={class:"text-xs text-muted-foreground"},mE={key:0,class:"flex flex-wrap items-center gap-1.5"},hE={class:"text-muted-foreground"},gE={class:"font-medium"},vE=["aria-label","onClick"],yE={class:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground"},bE={key:1,class:"space-y-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3"},_E={class:"flex items-center gap-1.5 text-xs font-medium text-amber-700 dark:text-amber-400"},xE={class:"space-y-1.5"},wE={class:"font-medium"},kE={class:"break-all text-muted-foreground"},CE={key:2,class:"space-y-2 rounded-lg border border-orange-500/30 bg-orange-500/5 p-3"},SE={class:"flex items-center gap-1.5 text-xs font-medium text-orange-700 dark:text-orange-400"},$E={class:"space-y-1.5"},TE={class:"font-medium"},AE={class:"text-muted-foreground"},EE={key:3,class:"py-6 text-center text-sm text-muted-foreground"},OE={key:4,class:"py-6 text-center text-sm text-muted-foreground"},PE={key:5,class:"overflow-x-auto"},ME={class:"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs"},IE={class:"font-mono text-muted-foreground"},RE={class:"font-medium"},LE={class:"text-muted-foreground"},DE={class:"text-muted-foreground"},NE={class:"break-all text-muted-foreground"},FE={key:0,class:"text-muted-foreground/60"},qE={class:"inline-flex items-center gap-1.5"},BE={class:"grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5 px-2 py-2 text-xs sm:grid-cols-[auto_1fr_auto_1fr]"},VE={class:"text-muted-foreground"},UE={class:"font-mono"},HE={class:"text-muted-foreground"},jE={class:"font-mono"},zE={class:"text-muted-foreground"},WE={class:"text-muted-foreground"},KE={class:"break-all font-mono"},GE={class:"text-muted-foreground"},YE={class:"flex items-center gap-1.5 font-mono"},XE={class:"text-muted-foreground"},JE={class:"break-all font-mono"},QE={class:"text-muted-foreground"},ZE={class:"font-mono"},eO={class:"text-foreground/80"},tO={class:"text-foreground/80"},nO={class:"text-amber-600 dark:text-amber-400"},sO={class:"text-muted-foreground"},oO={class:"break-all font-mono"},yd="myapikey.logs.filters",rO=re({__name:"Logs",setup(e){const{t}=ft(),n=W([]),s=W(!0),o=W(!1),a=W([]),l=W([]),i=W("all"),u=W("all"),c=W("all"),d=W(""),f=W(new Set),p=W(!1);try{const X=JSON.parse(localStorage.getItem(yd)||"null");X&&(typeof X.model=="string"&&(i.value=X.model),typeof X.provider=="string"&&(u.value=X.provider),(X.status==="success"||X.status==="error")&&(c.value=X.status),typeof X.query=="string"&&(d.value=X.query))}catch{}Re([i,u,c,d],()=>{try{localStorage.setItem(yd,JSON.stringify({model:i.value,provider:u.value,status:c.value,query:d.value}))}catch{}});let y;async function S(){o.value=!0;try{const[X,he]=await Promise.all([Ve("GET","/admin/logs").catch(()=>null),Ve("GET","/admin/circuit").catch(()=>null)]);X&&(n.value=X.logs),he&&(a.value=he.providers.filter(Z=>Z.state==="cooling"),l.value=he.providers.filter(Z=>Z.rpm>0&&Z.rpmUsed>=Z.rpm&&Z.state!=="cooling"))}finally{o.value=!1}}async function T(X){await Ve("POST",`/admin/circuit/${X}/reset`).catch(()=>{}),await S()}function E(){x(),y=window.setInterval(S,4e3)}function x(){y&&(clearInterval(y),y=void 0)}function _(){s.value=!s.value,s.value?(S(),E()):x()}function I(X){return X>=200&&X<300?"success":X>=400?"destructive":"muted"}function k(X){var he;return((he=pt[X])==null?void 0:he.badge)??""}function U(X){return X<1e3?`${X}ms`:`${(X/1e3).toFixed(1)}s`}function L(X){return X?X<1e3?String(X):X<1e6?(X/1e3).toFixed(X<1e4?1:0).replace(/\.0$/,"")+"k":(X/1e6).toFixed(1)+"M":"0"}function $(X){if(X<=0)return"0";const he=Math.round(X*1e3)/10;return Number.isInteger(he)?String(he):he.toFixed(1)}function R(X){return new Date(X).toLocaleTimeString()}function G(X){return new Date(X).toLocaleString()}function Y(X){return`${X.ts}-${X.model}-${X.provider}-${X.status}-${X.kind??"call"}`}function ne(X){return f.value.has(Y(X))}function Q(X){const he=new Set(f.value),Z=Y(X);he.has(Z)?he.delete(Z):he.add(Z),f.value=he}const de=ae(()=>[...new Set(n.value.map(X=>X.model))].sort()),D=ae(()=>[...new Set(n.value.map(X=>X.provider))].sort()),P=ae(()=>{const X=d.value.trim().toLowerCase();return n.value.filter(he=>{var Z;return!(i.value!=="all"&&he.model!==i.value||u.value!=="all"&&he.provider!==u.value||c.value==="success"&&!(he.status>=200&&he.status<300)||c.value==="error"&&he.status<400||X&&!(he.model.toLowerCase().includes(X)||(Z=he.upstreamModel)!=null&&Z.toLowerCase().includes(X)||he.provider.toLowerCase().includes(X)))})}),N=ae(()=>{const X=P.value.filter(Ue=>Ue.kind!=="cooldown"),he=X.length,Z=X.filter(Ue=>Ue.status>=400).length,Ye=he?Math.round(X.reduce((Ue,ve)=>Ue+ve.ms,0)/he):0;return{total:he,fail:Z,avgMs:Ye,errorRateStr:$(he?Z/he:0)}}),J=ae(()=>(i.value!=="all"?1:0)+(u.value!=="all"?1:0)+(c.value!=="all"?1:0)),oe=ae(()=>{const X=[];return i.value!=="all"&&X.push({key:"model",label:t("logs.filter.model"),value:i.value,clear:()=>i.value="all"}),u.value!=="all"&&X.push({key:"provider",label:t("logs.filter.provider"),value:u.value,clear:()=>u.value="all"}),c.value!=="all"&&X.push({key:"status",label:t("logs.filter.status"),value:c.value==="success"?t("logs.filter.success"):t("logs.filter.error"),clear:()=>c.value="all"}),X});function pe(){i.value="all",u.value="all",c.value="all"}return rt(()=>{S(),E()}),dn(x),(X,he)=>(h(),H(r(Vt),null,{default:g(()=>[m(r(zn),null,{default:g(()=>[b("div",QA,[m(r(Wn),{class:"flex items-center gap-2 text-base"},{default:g(()=>[m(r(Sm),{class:"h-4 w-4 text-primary"}),z(" "+v(r(t)("logs.title"))+" ",1),s.value?(h(),H(r(Oe),{key:0,variant:"success",class:"gap-1.5"},{default:g(()=>[he[5]||(he[5]=b("span",{class:"relative flex h-1.5 w-1.5"},[b("span",{class:"absolute inline-flex h-full w-full animate-ping rounded-full bg-current opacity-75"}),b("span",{class:"relative inline-flex h-1.5 w-1.5 rounded-full bg-current"})],-1)),z(" "+v(r(t)("logs.live")),1)]),_:1})):se("",!0)]),_:1}),b("div",ZA,[m(r(ke),{variant:"outline",size:"sm",disabled:o.value,onClick:S},{default:g(()=>[o.value?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"})),b("span",eE,v(r(t)("logs.refresh")),1)]),_:1},8,["disabled"]),m(r(ke),{variant:"outline",size:"sm","aria-pressed":s.value,onClick:_},{default:g(()=>[s.value?(h(),H(r(zk),{key:0,class:"h-3.5 w-3.5"})):(h(),H(r(Kk),{key:1,class:"h-3.5 w-3.5"})),z(" "+v(s.value?r(t)("logs.pause"):r(t)("logs.resume")),1)]),_:1},8,["aria-pressed"])])]),m(r(Ds),null,{default:g(()=>[z(v(r(t)("logs.desc")),1)]),_:1})]),_:1}),m(r(Zt),{class:"space-y-3"},{default:g(()=>[b("div",tE,[b("div",nE,[m(r(du),{class:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground"}),m(r(mt),{modelValue:d.value,"onUpdate:modelValue":he[0]||(he[0]=Z=>d.value=Z),placeholder:r(t)("logs.searchPh"),class:"h-8 pl-8"},null,8,["modelValue","placeholder"])]),m(r(ya),{open:p.value,"onUpdate:open":he[4]||(he[4]=Z=>p.value=Z)},{default:g(()=>[m(r(ba),{"as-child":""},{default:g(()=>[m(r(ke),{variant:"outline",size:"sm",class:"h-8 gap-1.5"},{default:g(()=>[m(r(Nk),{class:"h-3.5 w-3.5"}),z(" "+v(r(t)("logs.filter.title"))+" ",1),J.value?(h(),V("span",sE,v(J.value),1)):se("",!0)]),_:1})]),_:1}),m(r(_a),{align:"start",class:"w-72 p-3"},{default:g(()=>[b("div",oE,[b("div",rE,[b("span",aE,v(r(t)("logs.filter.title")),1),J.value?(h(),V("button",{key:0,type:"button",class:"text-xs text-primary hover:underline",onClick:pe},v(r(t)("logs.filter.clear")),1)):se("",!0)]),b("div",lE,[b("div",iE,[b("span",uE,v(r(t)("logs.filter.model")),1),m(r(zr),{modelValue:i.value,"onUpdate:modelValue":he[1]||(he[1]=Z=>i.value=Z)},{default:g(()=>[m(r(Wr),{class:"h-8 w-full"},{default:g(()=>[m(r(Kr),{placeholder:r(t)("logs.filter.model")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[m(r(ds),{value:"all"},{default:g(()=>[z(v(r(t)("logs.filter.all")),1)]),_:1}),(h(!0),V(me,null,Pe(de.value,Z=>(h(),H(r(ds),{key:Z,value:Z},{default:g(()=>[z(v(Z),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue"])]),b("div",cE,[b("span",dE,v(r(t)("logs.filter.provider")),1),m(r(zr),{modelValue:u.value,"onUpdate:modelValue":he[2]||(he[2]=Z=>u.value=Z)},{default:g(()=>[m(r(Wr),{class:"h-8 w-full"},{default:g(()=>[m(r(Kr),{placeholder:r(t)("logs.filter.provider")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[m(r(ds),{value:"all"},{default:g(()=>[z(v(r(t)("logs.filter.all")),1)]),_:1}),(h(!0),V(me,null,Pe(D.value,Z=>(h(),H(r(ds),{key:Z,value:Z},{default:g(()=>[z(v(Z),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue"])]),b("div",fE,[b("span",pE,v(r(t)("logs.filter.status")),1),m(r(zr),{modelValue:c.value,"onUpdate:modelValue":he[3]||(he[3]=Z=>c.value=Z)},{default:g(()=>[m(r(Wr),{class:"h-8 w-full"},{default:g(()=>[m(r(Kr),{placeholder:r(t)("logs.filter.status")},null,8,["placeholder"])]),_:1}),m(r(Gr),null,{default:g(()=>[m(r(ds),{value:"all"},{default:g(()=>[z(v(r(t)("logs.filter.all")),1)]),_:1}),m(r(ds),{value:"success"},{default:g(()=>[z(v(r(t)("logs.filter.success")),1)]),_:1}),m(r(ds),{value:"error"},{default:g(()=>[z(v(r(t)("logs.filter.error")),1)]),_:1})]),_:1})]),_:1},8,["modelValue"])])])])]),_:1})]),_:1},8,["open"])]),oe.value.length?(h(),V("div",mE,[(h(!0),V(me,null,Pe(oe.value,Z=>(h(),V("span",{key:Z.key,class:"inline-flex items-center gap-1 rounded-full border border-input bg-muted/40 py-0.5 pl-2.5 pr-1 text-xs"},[b("span",hE,v(Z.label)+":",1),b("span",gE,v(Z.value),1),b("button",{type:"button",class:"rounded-full p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground","aria-label":r(t)("logs.filter.remove",{label:Z.label}),onClick:Z.clear},[m(r(Ao),{class:"h-3 w-3"})],8,vE)]))),128)),b("button",{type:"button",class:"text-xs text-muted-foreground hover:text-foreground",onClick:pe},v(r(t)("logs.filter.clear")),1)])):se("",!0),b("div",yE,[b("span",null,v(r(t)("logs.summary.window",{n:N.value.total})),1),b("span",{class:ge({"text-destructive":N.value.fail>0})},v(r(t)("logs.summary.errorRate",{pct:N.value.errorRateStr})),3),b("span",null,v(r(t)("logs.summary.avgLatency",{ms:U(N.value.avgMs)})),1)]),a.value.length?(h(),V("div",bE,[b("div",_E,[m(r(Al),{class:"h-4 w-4"}),z(" "+v(r(t)("logs.circuit.stripTitle")),1)]),b("ul",xE,[(h(!0),V(me,null,Pe(a.value,Z=>(h(),V("li",{key:Z.id,class:"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs"},[b("span",wE,v(Z.name),1),m(r(Oe),{variant:"warning",class:"gap-1 whitespace-nowrap"},{default:g(()=>[m(r(Al),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.circuit.remaining",{s:Z.secondsLeft})),1)]),_:2},1024),b("span",kE,v(Z.lastReason||r(t)("logs.circuit.reasonUnknown")),1),m(r(ke),{variant:"outline",size:"sm",class:"ml-auto h-6 gap-1",onClick:Ye=>T(Z.id)},{default:g(()=>[m(r(Vs),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.circuit.reset")),1)]),_:1},8,["onClick"])]))),128))])])):se("",!0),l.value.length?(h(),V("div",CE,[b("div",SE,[m(r(Yo),{class:"h-4 w-4"}),z(" "+v(r(t)("logs.pacing.stripTitle")),1)]),b("ul",$E,[(h(!0),V(me,null,Pe(l.value,Z=>(h(),V("li",{key:Z.id,class:"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs"},[b("span",TE,v(Z.name),1),m(r(Oe),{variant:"outline",class:"gap-1 whitespace-nowrap"},{default:g(()=>[m(r(Yo),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.pacing.at",{used:Z.rpmUsed,cap:Z.rpm})),1)]),_:2},1024),b("span",AE,v(r(t)("logs.pacing.reason")),1)]))),128))])])):se("",!0),n.value.length?P.value.length?(h(),V("div",PE,[m(r(el),null,{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),null,{default:g(()=>[m(r(ot),{class:"w-8"}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.time")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.model")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.provider")),1)]),_:1}),m(r(ot),null,{default:g(()=>[z(v(r(t)("logs.col.format")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("logs.col.latency")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("logs.col.status")),1)]),_:1})]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(P.value,Z=>(h(),V(me,{key:Y(Z)},[Z.kind==="cooldown"?(h(),H(r(Sn),{key:0,class:"bg-amber-500/5 hover:bg-amber-500/10"},{default:g(()=>[m(r(tt),{colspan:"7",class:"py-2"},{default:g(()=>[b("div",ME,[b("span",IE,v(R(Z.ts)),1),m(r(Oe),{variant:"warning",class:"gap-1 whitespace-nowrap"},{default:g(()=>[m(r(Al),{class:"h-3 w-3"}),z(" "+v(r(t)("logs.circuit.badge")),1)]),_:1}),b("span",RE,v(Z.provider),1),b("span",LE,v(r(t)("logs.circuit.failures",{n:Z.fails})),1),b("span",DE,v(r(t)("logs.circuit.cooldown",{s:Math.round((Z.cooldownMs??0)/1e3)})),1),b("span",NE,v(Z.error||r(t)("logs.circuit.reasonUnknown")),1)])]),_:2},1024)]),_:2},1024)):(h(),V(me,{key:1},[m(r(Sn),{class:"cursor-pointer hover:bg-muted/50",onClick:Ye=>Q(Z)},{default:g(()=>[m(r(tt),{class:"w-8 text-muted-foreground"},{default:g(()=>[(h(),H(_r(ne(Z)?r(cn):r(Tm)),{class:"h-3.5 w-3.5"}))]),_:2},1024),m(r(tt),{class:"font-mono text-xs text-muted-foreground",title:G(Z.ts)},{default:g(()=>[z(v(R(Z.ts)),1)]),_:2},1032,["title"]),m(r(tt),{class:"font-mono text-xs"},{default:g(()=>[z(v(Z.model),1),Z.upstreamModel?(h(),V("span",FE," → "+v(Z.upstreamModel),1)):se("",!0)]),_:2},1024),m(r(tt),{class:"text-sm"},{default:g(()=>[z(v(Z.provider),1)]),_:2},1024),m(r(tt),null,{default:g(()=>[b("span",qE,[m(r(Oe),{variant:"outline",class:ge(k(Z.format))},{default:g(()=>[z(v(r(Lt)(Z.format)),1)]),_:2},1032,["class"]),Z.stream?(h(),H(r(Oe),{key:0,variant:"muted",class:"text-[10px]"},{default:g(()=>[z(v(r(t)("logs.stream")),1)]),_:1})):se("",!0),Z.thinking?(h(),H(r(Oe),{key:1,variant:"muted",class:"gap-1 font-mono text-[10px]",title:r(t)("logs.detail.thinking")+" · "+(Z.thinking.from==="default"?r(t)("logs.thinkingDefault"):r(t)("logs.thinkingClient"))},{default:g(()=>[m(r(xo),{class:"h-3 w-3"}),z(v(Z.thinking.value),1)]),_:2},1032,["title"])):se("",!0),Z.sampling?(h(),H(r(Oe),{key:2,variant:"muted",class:"gap-1 font-mono text-[10px]",title:r(t)("logs.detail.sampling")},{default:g(()=>[m(r(vs),{class:"h-3 w-3"}),z(v(r(on)(Z.sampling)),1)]),_:2},1032,["title"])):se("",!0)])]),_:2},1024),m(r(tt),{class:"text-right font-mono text-xs text-muted-foreground"},{default:g(()=>[z(v(U(Z.ms)),1)]),_:2},1024),m(r(tt),{class:"text-right"},{default:g(()=>[m(r(Oe),{variant:I(Z.status),class:"font-mono"},{default:g(()=>[z(v(Z.status),1)]),_:2},1032,["variant"])]),_:2},1024)]),_:2},1032,["onClick"]),ne(Z)?(h(),H(r(Sn),{key:0,class:"hover:bg-transparent"},{default:g(()=>[m(r(tt),{colspan:"7",class:"bg-muted/30"},{default:g(()=>[b("dl",BE,[b("dt",VE,v(r(t)("logs.detail.time")),1),b("dd",UE,v(G(Z.ts)),1),b("dt",HE,v(r(t)("logs.detail.latency")),1),b("dd",jE,v(U(Z.ms)),1),b("dt",zE,v(r(t)("logs.detail.stream")),1),b("dd",null,v(Z.stream?r(t)("logs.detail.streamYes"):r(t)("logs.detail.streamNo")),1),Z.upstreamModel?(h(),V(me,{key:0},[b("dt",WE,v(r(t)("logs.detail.upstreamModel")),1),b("dd",KE,v(Z.upstreamModel),1)],64)):se("",!0),Z.thinking?(h(),V(me,{key:1},[b("dt",GE,v(r(t)("logs.detail.thinking")),1),b("dd",YE,[z(v(Z.thinking.value)+" ",1),m(r(Oe),{variant:"muted",class:"text-[10px]"},{default:g(()=>[z(v(Z.thinking.from==="default"?r(t)("logs.thinkingDefault"):r(t)("logs.thinkingClient")),1)]),_:2},1024)])],64)):se("",!0),Z.sampling?(h(),V(me,{key:2},[b("dt",XE,v(r(t)("logs.detail.sampling")),1),b("dd",JE,v(r(Fb)(Z.sampling)),1)],64)):se("",!0),Z.usage?(h(),V(me,{key:3},[b("dt",QE,v(r(t)("logs.detail.tokens")),1),b("dd",ZE,[b("span",eO,"↑ "+v(L(Z.usage.input)),1),he[7]||(he[7]=b("span",{class:"text-muted-foreground/50"}," · ",-1)),b("span",tO,"↓ "+v(L(Z.usage.output)),1),Z.usage.estimated?(h(),H(r(Oe),{key:0,variant:"muted",class:"ml-1.5 text-[10px]"},{default:g(()=>[z("≈ "+v(r(t)("logs.detail.estimated")),1)]),_:1})):se("",!0),(Z.usage.cacheRead||0)+(Z.usage.cacheCreation||0)?(h(),V(me,{key:1},[he[6]||(he[6]=b("span",{class:"text-muted-foreground/50"}," · ",-1)),b("span",nO,"⚡ "+v(r(t)("logs.detail.cache"))+" "+v(L((Z.usage.cacheRead||0)+(Z.usage.cacheCreation||0))),1)],64)):se("",!0)])],64)):se("",!0),b("dt",sO,v(r(t)("logs.detail.error")),1),b("dd",oO,v(Z.error||r(t)("logs.detail.errorNone")),1)])]),_:2},1024)]),_:2},1024)):se("",!0)],64))],64))),128))]),_:1})]),_:1})])):(h(),V("p",OE,v(r(t)("logs.noMatch")),1)):(h(),V("p",EE,v(r(t)("logs.empty")),1))]),_:1})]),_:1}))}}),aO={key:0,class:"py-4 text-center text-xs text-muted-foreground"},lO={class:"flex items-center gap-1.5"},iO={class:"truncate font-mono text-xs"},uO={class:"flex items-center gap-2"},cO={class:"h-1.5 w-full max-w-[120px] overflow-hidden rounded-full bg-muted"},dO={class:"font-mono text-xs tabular-nums"},fO={key:0},pO={class:"text-foreground/80"},mO={class:"text-foreground/80"},hO={key:1,class:"text-muted-foreground/40"},gO={key:0,class:"inline-flex flex-col items-end leading-tight"},vO={class:"text-amber-600 dark:text-amber-400"},yO={class:"text-[10px] text-muted-foreground/60"},bO={key:1,class:"text-muted-foreground/40"},Br=re({__name:"StatsBreakdown",props:{title:{},buckets:{},max:{},kind:{}},setup(e){const{t}=ft();function n(d){return d<1e3?`${d}ms`:`${(d/1e3).toFixed(1)}s`}function s(d){return d?d<1e3?String(d):d<1e6?(d/1e3).toFixed(d<1e4?1:0).replace(/\.0$/,"")+"k":(d/1e6).toFixed(1)+"M":"0"}function o(d){if(!d)return"0%";const f=Math.round(d*1e3)/10;return(f%1===0?f.toFixed(0):f.toFixed(1))+"%"}const a=e,l=()=>a.buckets.some(d=>d.inputTokens||d.outputTokens),i=()=>a.buckets.some(d=>d.cacheRead||d.cacheCreation);function u(d,f){return f?Math.round(d/f*100):0}function c(d){var f;return(f=pt[d])==null?void 0:f.solid}return(d,f)=>(h(),H(r(Vt),null,{default:g(()=>[m(r(zn),{class:"pb-2"},{default:g(()=>[m(r(Wn),{class:"text-sm"},{default:g(()=>[z(v(e.title),1)]),_:1})]),_:1}),m(r(Zt),null,{default:g(()=>[e.buckets.length?(h(),H(r(el),{key:1},{default:g(()=>[m(r(tl),null,{default:g(()=>[m(r(Sn),null,{default:g(()=>[m(r(ot),null,{default:g(()=>[z(v(r(t)("stats.col.name")),1)]),_:1}),m(r(ot),{class:"w-1/3"},{default:g(()=>[z(v(r(t)("stats.col.calls")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.success")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.error")),1)]),_:1}),m(r(ot),{class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.avgLatency")),1)]),_:1}),l()?(h(),H(r(ot),{key:0,class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.tokens")),1)]),_:1})):se("",!0),i()?(h(),H(r(ot),{key:1,class:"text-right"},{default:g(()=>[z(v(r(t)("stats.col.cacheHit")),1)]),_:1})):se("",!0)]),_:1})]),_:1}),m(r(nl),null,{default:g(()=>[(h(!0),V(me,null,Pe(e.buckets,p=>(h(),H(r(Sn),{key:p.key},{default:g(()=>[m(r(tt),{class:"py-1.5"},{default:g(()=>[b("div",lO,[e.kind==="format"&&c(p.key)?(h(),V("span",{key:0,class:ge(["h-2 w-2 shrink-0 rounded-full",c(p.key)])},null,2)):e.kind==="provider"&&p.id?(h(),V("span",{key:1,class:ge(["h-2 w-2 shrink-0 rounded-full",r(ps)(p.id).solid])},null,2)):se("",!0),b("span",iO,v(e.kind==="format"?r(Lt)(p.key):p.key),1)])]),_:2},1024),m(r(tt),{class:"py-1.5"},{default:g(()=>[b("div",uO,[b("div",cO,[b("div",{class:"h-full rounded-full bg-primary/50",style:en({width:u(p.calls,e.max)+"%"})},null,4)]),b("span",dO,v(p.calls),1)])]),_:2},1024),m(r(tt),{class:"py-1.5 text-right font-mono text-xs text-emerald-600 dark:text-emerald-400"},{default:g(()=>[z(v(p.success),1)]),_:2},1024),m(r(tt),{class:ge(["py-1.5 text-right font-mono text-xs",p.error?"text-destructive":"text-muted-foreground"])},{default:g(()=>[z(v(p.error),1)]),_:2},1032,["class"]),m(r(tt),{class:"py-1.5 text-right font-mono text-xs text-muted-foreground"},{default:g(()=>[z(v(n(p.avgMs)),1)]),_:2},1024),l()?(h(),H(r(tt),{key:0,class:"py-1.5 text-right font-mono text-xs tabular-nums"},{default:g(()=>[p.inputTokens||p.outputTokens?(h(),V("span",fO,[b("span",pO,v(s(p.inputTokens)),1),f[0]||(f[0]=b("span",{class:"text-muted-foreground/50"}," / ",-1)),b("span",mO,v(s(p.outputTokens)),1)])):(h(),V("span",hO,"—"))]),_:2},1024)):se("",!0),i()?(h(),H(r(tt),{key:1,class:"py-1.5 text-right font-mono text-xs tabular-nums"},{default:g(()=>[p.cacheRead||p.cacheCreation?(h(),V("span",gO,[b("span",vO,v(o(p.cacheHitRate)),1),b("span",yO,"↑"+v(s(p.cacheRead)),1)])):(h(),V("span",bO,"—"))]),_:2},1024)):se("",!0)]),_:2},1024))),128))]),_:1})]),_:1})):(h(),V("p",aO,v(r(t)("stats.empty")),1))]),_:1})]),_:1}))}}),_O={class:"flex flex-wrap items-center justify-between gap-2"},xO={class:"flex items-center gap-2"},wO={class:"inline-flex rounded-md border bg-muted/30 p-0.5"},kO=["onClick"],CO={class:"sr-only"},SO={key:0,class:"flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground"},$O={key:1,class:"py-10 text-center text-sm text-muted-foreground"},TO={class:"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6"},AO={class:"rounded-lg border bg-muted/20 p-3"},EO={class:"text-xs text-muted-foreground"},OO={class:"mt-1 font-mono text-xl tabular-nums"},PO={class:"rounded-lg border bg-muted/20 p-3"},MO={class:"text-xs text-muted-foreground"},IO={class:"mt-1 font-mono text-xl tabular-nums text-emerald-600 dark:text-emerald-400"},RO={class:"rounded-lg border bg-muted/20 p-3"},LO={class:"text-xs text-muted-foreground"},DO={class:"mt-1 font-mono text-xl tabular-nums text-destructive"},NO={class:"rounded-lg border bg-muted/20 p-3"},FO={class:"text-xs text-muted-foreground"},qO={class:"mt-1 font-mono text-xl tabular-nums"},BO={class:"rounded-lg border bg-muted/20 p-3"},VO={class:"text-xs text-muted-foreground"},UO={class:"mt-1 font-mono text-xl tabular-nums"},HO={class:"rounded-lg border bg-muted/20 p-3"},jO={class:"text-xs text-muted-foreground"},zO={class:"mt-1 font-mono text-xl tabular-nums"},WO={key:0,class:"grid grid-cols-3 gap-2"},KO={class:"rounded-lg border bg-muted/20 p-3"},GO={class:"text-xs text-muted-foreground"},YO={class:"mt-1 font-mono text-lg tabular-nums"},XO={class:"rounded-lg border bg-muted/20 p-3"},JO={class:"text-xs text-muted-foreground"},QO={class:"mt-1 font-mono text-lg tabular-nums"},ZO={class:"rounded-lg border bg-muted/20 p-3"},eP={class:"text-xs text-muted-foreground"},tP={class:"mt-1 font-mono text-lg tabular-nums"},nP={class:"mb-2 flex items-center justify-between gap-2"},sP={class:"text-sm font-medium"},oP={key:0,class:"text-[11px] text-muted-foreground"},rP={class:"font-mono tabular-nums text-foreground"},aP={class:"rounded-lg border p-3"},lP={class:"relative pt-9"},iP={class:"flex h-40 gap-px"},uP={class:"pointer-events-none absolute bottom-full left-1/2 z-20 mb-1 hidden -translate-x-1/2 whitespace-nowrap rounded-md border bg-background px-2 py-1 text-center text-xs shadow-md group-hover:block"},cP={class:"font-medium"},dP={class:"font-mono tabular-nums"},fP={class:"text-[10px]"},pP={class:"text-emerald-600 dark:text-emerald-400"},mP={class:"text-destructive"},hP={class:"mt-1.5 flex justify-between text-[10px] text-muted-foreground"},gP={class:"grid gap-4 lg:grid-cols-2"},vP={class:"lg:col-span-2"},yP={key:1,class:"space-y-3"},bP={class:"text-sm font-medium"},_P={class:"grid gap-4 lg:grid-cols-2"},bd=160,xP=re({__name:"Stats",setup(e){const{t}=ft(),n=[{v:"24h",key:"h24"},{v:"7d",key:"d7"},{v:"30d",key:"d30"},{v:"90d",key:"d90"},{v:"all",key:"all"}],s=W(localStorage.getItem("myapikey.stats.range")||"7d");n.some(I=>I.v===s.value)||(s.value="7d"),Re(s,I=>{try{localStorage.setItem("myapikey.stats.range",I)}catch{}});const o=W(null),a=W(!1);async function l(){a.value=!0;try{o.value=await Ve("GET",`/admin/stats?range=${s.value}`)}catch{o.value=null}finally{a.value=!1}}Re(s,l),rt(l);function i(I){return I<1e3?`${I}ms`:`${(I/1e3).toFixed(1)}s`}function u(I){if(!I)return"0%";const k=Math.round(I*1e3)/10;return(k%1===0?k.toFixed(0):k.toFixed(1))+"%"}function c(I){const[k,U,L]=I.split("-").map(Number);return new Date(k,U-1,L).toLocaleDateString(void 0,{month:"short",day:"numeric"})}const d=ae(()=>{var I;return((I=o.value)==null?void 0:I.byDay.reduce((k,U)=>Math.max(k,U.calls),0))??0});function f(I){const k=d.value||1,U=I.calls/k*bd,L=I.error/k*bd;return{success:Math.max(0,Math.round(U-L)),error:Math.round(L)}}function p(I){return I.reduce((k,U)=>Math.max(k,U.calls),0)||1}const y=ae(()=>!!o.value&&o.value.totals.calls>0),S=ae(()=>{var I,k;return(((I=o.value)==null?void 0:I.totals.cacheRead)??0)+(((k=o.value)==null?void 0:k.totals.cacheCreation)??0)}),T=ae(()=>!!o.value&&!!(o.value.totals.inputTokens||o.value.totals.outputTokens||S.value)),E=ae(()=>{var U;const I=(((U=o.value)==null?void 0:U.byProviderModel)??[]).filter(L=>L.cacheRead||L.cacheCreation),k=new Map;for(const L of I){const $=L.providerId||L.provider;let R=k.get($);R||(R={providerId:L.providerId,provider:L.provider,models:[],cacheRead:0},k.set($,R)),R.models.push({key:L.model,calls:L.calls,success:L.success,error:0,avgMs:0,inputTokens:L.inputTokens,outputTokens:L.outputTokens,cacheRead:L.cacheRead,cacheCreation:L.cacheCreation,cacheHitRate:L.cacheHitRate}),R.cacheRead+=L.cacheRead}return[...k.values()].sort((L,$)=>$.cacheRead-L.cacheRead)}),x=ae(()=>E.value.length>0);function _(I){return I?I<1e3?String(I):I<1e6?(I/1e3).toFixed(I<1e4?1:0).replace(/\.0$/,"")+"k":(I/1e6).toFixed(1)+"M":"0"}return(I,k)=>(h(),H(r(Vt),null,{default:g(()=>[m(r(zn),null,{default:g(()=>[b("div",_O,[m(r(Wn),{class:"flex items-center gap-2 text-base"},{default:g(()=>[m(r($m),{class:"h-4 w-4 text-primary"}),z(" "+v(r(t)("stats.title")),1)]),_:1}),b("div",xO,[b("div",wO,[(h(),V(me,null,Pe(n,U=>b("button",{key:U.v,type:"button",class:ge(["rounded-sm px-2.5 py-1 text-xs transition-colors",s.value===U.v?"bg-background font-medium shadow-sm":"text-muted-foreground hover:text-foreground"]),onClick:L=>s.value=U.v},v(r(t)(`stats.ranges.${U.key}`)),11,kO)),64))]),m(r(ke),{variant:"outline",size:"sm",disabled:a.value,onClick:l},{default:g(()=>[a.value?(h(),H(r(gt),{key:0,class:"h-3.5 w-3.5 animate-spin"})):(h(),H(r(Vs),{key:1,class:"h-3.5 w-3.5"})),b("span",CO,v(r(t)("stats.refresh")),1)]),_:1},8,["disabled"])])]),m(r(Ds),null,{default:g(()=>[z(v(r(t)("stats.desc")),1)]),_:1})]),_:1}),m(r(Zt),{class:"space-y-5"},{default:g(()=>[a.value&&!o.value?(h(),V("div",SO,[m(r(gt),{class:"h-4 w-4 animate-spin"}),z(" "+v(r(t)("stats.loading")),1)])):y.value?o.value?(h(),V(me,{key:2},[b("div",TO,[b("div",AO,[b("div",EO,v(r(t)("stats.totals.calls")),1),b("div",OO,v(o.value.totals.calls),1)]),b("div",PO,[b("div",MO,v(r(t)("stats.totals.success")),1),b("div",IO,v(o.value.totals.success),1)]),b("div",RO,[b("div",LO,v(r(t)("stats.totals.error")),1),b("div",DO,v(o.value.totals.error),1)]),b("div",NO,[b("div",FO,v(r(t)("stats.totals.errorRate")),1),b("div",qO,v(u(o.value.totals.errorRate)),1)]),b("div",BO,[b("div",VO,v(r(t)("stats.totals.avgLatency")),1),b("div",UO,v(i(o.value.totals.avgMs)),1)]),b("div",HO,[b("div",jO,v(r(t)("stats.totals.p95")),1),b("div",zO,v(i(o.value.totals.p95Ms)),1)])]),T.value?(h(),V("div",WO,[b("div",KO,[b("div",GO,"↑ "+v(r(t)("stats.totals.inputTokens")),1),b("div",YO,v(_(o.value.totals.inputTokens)),1)]),b("div",XO,[b("div",JO,"↓ "+v(r(t)("stats.totals.outputTokens")),1),b("div",QO,v(_(o.value.totals.outputTokens)),1)]),b("div",ZO,[b("div",eP,"⚡ "+v(r(t)("stats.totals.cache")),1),b("div",tP,v(_(S.value)),1)])])):se("",!0),b("div",null,[b("div",nP,[b("div",sP,v(r(t)("stats.byDay")),1),d.value?(h(),V("div",oP,[z(v(r(t)("stats.peak"))+" ",1),b("span",rP,v(d.value),1)])):se("",!0)]),b("div",aP,[b("div",lP,[b("div",iP,[(h(!0),V(me,null,Pe(o.value.byDay,U=>(h(),V("div",{key:U.day,class:"group relative flex min-w-0 flex-1 cursor-default flex-col justify-end"},[b("div",{style:en({height:f(U).success+"px"}),class:"w-full rounded-t-sm bg-emerald-500/70 transition-colors group-hover:bg-emerald-500"},null,4),b("div",{style:en({height:f(U).error+"px"}),class:ge(["w-full transition-colors group-hover:bg-destructive",f(U).error?"bg-destructive/70":""])},null,6),b("div",uP,[b("div",cP,v(c(U.day)),1),b("div",dP,v(U.calls)+" "+v(r(t)("stats.callsAxis")),1),b("div",fP,[b("span",pP,v(U.success),1),k[0]||(k[0]=b("span",{class:"text-muted-foreground"}," / ",-1)),b("span",mP,v(U.error),1)])])]))),128))])]),b("div",hP,[b("span",null,v(o.value.byDay.length?c(o.value.byDay[0].day):""),1),b("span",null,v(o.value.byDay.length?c(o.value.byDay[o.value.byDay.length-1].day):""),1)])])]),b("div",gP,[b("div",vP,[m(Br,{title:r(t)("stats.byModel"),buckets:o.value.byModel,max:p(o.value.byModel),kind:"model"},null,8,["title","buckets","max"])]),m(Br,{title:r(t)("stats.byProvider"),buckets:o.value.byProvider,max:p(o.value.byProvider),kind:"provider"},null,8,["title","buckets","max"]),m(Br,{title:r(t)("stats.byFormat"),buckets:o.value.byFormat,max:p(o.value.byFormat),kind:"format"},null,8,["title","buckets","max"])]),x.value?(h(),V("div",yP,[b("div",bP,v(r(t)("stats.cacheBySource")),1),b("div",_P,[(h(!0),V(me,null,Pe(E.value,U=>(h(),H(Br,{key:U.providerId||U.provider,title:U.provider,buckets:U.models,max:p(U.models),kind:"model"},null,8,["title","buckets","max"]))),128))])])):se("",!0)],64)):se("",!0):(h(),V("div",$O,v(r(t)("stats.empty")),1))]),_:1})]),_:1}))}}),wP={class:"space-y-4"},kP={class:"space-y-2"},CP={class:"min-w-0"},SP={class:"mt-0.5 truncate font-mono text-sm"},$P={class:"min-w-0"},TP={class:"mt-0.5 truncate font-mono text-sm"},AP={class:"text-xs text-muted-foreground"},EP={class:"flex items-center justify-between gap-3 rounded-lg border border-primary/40 bg-primary/5 p-3"},OP={class:"min-w-0"},PP={class:"text-xs font-medium text-primary"},MP={class:"truncate font-mono text-sm"},IP={class:"flex items-center gap-1"},RP={class:"overflow-x-auto rounded-md border bg-muted/40 p-3 font-mono text-xs leading-relaxed"},LP=re({__name:"Connect",setup(e){const{t}=ft(),n={openai:"openai",anthropic:"anthropic",responses:"responses",curl:null,"curl-anthropic":"anthropic"};function s(E){const x=n[E];return x?pt[x]:null}const o=W(null),a=W(null),l=W(""),i=W(!1),u=W([]),c=ae(()=>{const E=window.location.hostname;if((E==="localhost"||E==="127.0.0.1")&&a.value){const x=window.location.port;return`${window.location.protocol}//${a.value}${x?":"+x:""}`}return window.location.origin}),d=ae(()=>`${c.value}/openai/v1`),f=ae(()=>`${c.value}/anthropic`);async function p(){o.value=(await Ve("GET","/admin/api-key")).apiKey,a.value=(await Ve("GET","/admin/connection")).lanIp,u.value=(await Ve("GET","/admin/models").catch(()=>({models:[]}))).models}function y(E){var x;return((x=u.value.find(_=>_[E].enabled))==null?void 0:x.name)||"<model>"}async function S(E,x){await kr(x)?(l.value=E,setTimeout(()=>{l.value===E&&(l.value="")},1500)):Be(t("connect.copyFailed"),"error")}const T=ae(()=>[{key:"openai",title:t("connect.openaiTitle"),text:`export OPENAI_BASE_URL=${d.value}
|
|
335
335
|
export OPENAI_API_KEY=${o.value??""}`},{key:"anthropic",title:t("connect.anthropicTitle"),text:`export ANTHROPIC_BASE_URL=${f.value}
|
|
336
336
|
export ANTHROPIC_API_KEY=${o.value??""}`},{key:"curl",title:t("connect.curlTitle"),text:`curl ${d.value}/chat/completions \\
|
|
337
337
|
-H "Authorization: Bearer ${o.value??""}" \\
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
document.documentElement.classList.add("dark");
|
|
16
16
|
}
|
|
17
17
|
</script>
|
|
18
|
-
<script type="module" crossorigin src="/assets/index-
|
|
18
|
+
<script type="module" crossorigin src="/assets/index-C7p__OSN.js"></script>
|
|
19
19
|
<link rel="stylesheet" crossorigin href="/assets/index-Ciqu1UcO.css">
|
|
20
20
|
</head>
|
|
21
21
|
<body>
|