1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-ui-mF4M59HB.js","assets/vendor-vue-Dzwqm9Y9.js"])))=>i.map(i=>d[i]); 2import{j as ae,g as It,E as ga,k as va,af as _a,a as At,ag as Qe,z as ya,a5 as Vt,ah as fa,_ as Lt}from"./index-BB-1BiLf.js";import{d as qe,a4 as ba,r as l,c as z,w as ge,o as Ot,a as nt,z as v,A as Oe,B as a,E as $,Q as Ue,G as i,u as c,W as st,F as se,V as ve,k as x,I as ha,C as d,H as We,D as Ne,K as Re,S as ka,q as De,R as lt,X as xa}from"./vendor-vue-Dzwqm9Y9.js";import{F as wa}from"./vendor-misc-B-nM3tYW.js";import{g as Sa}from"./usePersistedPageSize-x0WpaIWh.js";import{r as Ae,_ as Ca,a as $a,b as Ta,d as Da}from"./GroupDistributionChart.vue_vue_type_script_setup_true_lang-BZRKu_PO.js";import{_ as Ua}from"./AppLayout.vue_vue_type_script_setup_true_lang-DU-NXSvm.js";import{P as Nt}from"./Pagination-BuZWDbKf.js";import{S as ee}from"./Select-unWSiPwC.js";import{D as Ra,_ as qa}from"./TokenUsageTrend.vue_vue_type_script_setup_true_lang-CKoYF9_D.js";import{C as Ea}from"./errorBadges-It0ru3B2.js";import{u as Pe}from"./vendor-i18n-BuoWFzps.js";import{L as Va}from"./LoadingSpinner-DZOe8TOe.js";import{_ as Ft}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-G7SCzKKv.js";import{_ as La}from"./UserBalanceHistoryModal.vue_vue_type_script_setup_true_lang-B51I64Su.js";import{_ as Fa,a as Ma}from"./OpsErrorLogTable.vue_vue_type_script_setup_true_lang-Brz3-qCT.js";import{a as Ia}from"./ModelDistributionChart.vue_vue_type_script_setup_true_lang-eQtnwKY2.js";import{_ as Aa}from"./EndpointDistributionChart.vue_vue_type_script_setup_true_lang-BunRdw9d.js";import"./DataTable-BszWCXiN.js";import"./EmptyState.vue_vue_type_script_setup_true_lang-DJjIeSM_.js";import"./vendor-chart-BNlN3Otn.js";import"./AppHeader.vue_vue_type_style_index_0_scoped_80f3916c_lang-CWJeTQGo.js";import"./useClipboard-00CrFCqB.js";import"./featureFlags-DuhANbyz.js";import"./LocaleSwitcher-DwqRgoPh.js";/* empty css */const Oa={class:"flex flex-wrap items-end justify-between gap-4"},Na={class:"flex flex-1 flex-wrap items-end gap-4"},Pa={class:"input-label"},za=["placeholder"],Ka={key:1,class:"absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-lg border bg-white shadow-lg dark:bg-dark-800"},Ba=["onClick"],Ha={key:0,class:"ml-1 text-xs text-gray-400"},ja={class:"ml-2 text-xs text-gray-400"},Ga={class:"input-label"},Ja=["placeholder"],Ya={key:1,class:"absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-lg border bg-white shadow-lg dark:bg-dark-800"},Qa=["onClick"],Wa={class:"truncate"},Xa={class:"ml-2 text-xs text-gray-400"},Za={class:"w-full sm:w-auto sm:min-w-[220px]"},es={class:"input-label"},ts={class:"input-label"},as=["placeholder"],ss={key:1,class:"absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-lg border bg-white shadow-lg dark:bg-dark-800"},ls=["onClick"],os={class:"truncate"},ns={class:"ml-2 text-xs text-gray-400"},rs={key:0,class:"w-full sm:w-auto sm:min-w-[180px]"},us={class:"input-label"},is={key:1,class:"w-full sm:w-auto sm:min-w-[180px]"},ds={class:"input-label"},cs={key:2,class:"w-full sm:w-auto sm:min-w-[200px]"},ms={class:"input-label"}
2,ps={key:3,class:"w-full sm:w-auto sm:min-w-[200px]"},gs={class:"input-label"},vs={key:4,class:"w-full sm:w-auto sm:min-w-[220px]"},_s={class:"input-label"},ys={key:5,class:"w-full sm:w-auto sm:min-w-[180px]"},fs={class:"input-label"},bs={key:6,class:"w-full sm:w-auto sm:min-w-[180px]"},hs={class:"input-label"},ks={key:7,class:"w-full sm:w-auto sm:min-w-[180px]"},xs={class:"input-label"},ws={class:"w-full sm:w-auto sm:min-w-[200px]"},Ss={class:"input-label"},Cs={key:0,class:"flex w-full flex-wrap items-center justify-end gap-3 sm:w-auto"},$s=["disabled"],Pt=qe({__name:"UsageFilters",props:{modelValue:{},exporting:{type:Boolean},startDate:{},endDate:{},showActions:{type:Boolean,default:!0},modelOptions:{},mode:{default:"usage"},flat:{type:Boolean,default:!1}},emits:["update:modelValue","change","refresh","reset","export","cleanup"],setup(w,{expose:te,emit:t}){const R=w,y=t,{t:u}=Pe(),r=ba(R,"modelValue"),U=l(null),F=l(null),K=l(null),q=l(""),D=l([]),L=l(!1);let B=null,N=0;const E=l(""),h=l([]),M=l(!1);let b=null;const T=l(""),Y=l([]),le=l(!1);let ue=null;
2const oe=z(()=>[{value:null,label:u("admin.usage.allModels")},...(R.modelOptions??[]).map(_=>({value:_,label:_}))]),ne=l([{value:null,label:u("admin.usage.allGroups")}]),_e=l([{value:null,label:u("admin.usage.allTypes")},{value:"ws_v2",label:u("usage.ws")},{value:"live",label:u("usage.live")},{value:"stream",label:u("usage.stream")},{value:"sync",label:u("usage.sync")},{value:"cyber",label:u("usage.cyber")}]),ye=l([{value:null,label:u("usage.allCompactionTypes")},{value:!0,label:u("usage.compactionOnly")}]),H=l([{value:null,label:u("admin.usage.allBillingTypes")},{value:0,label:u("admin.usage.billingTypeBalance")},{value:1,label:u("admin.usage.billingTypeSubscription")}]),Q=z(()=>[{value:null,label:u("admin.usage.allTypes")},{value:"upstream",label:u("admin.ops.errorLog.typeUpstream")},{value:"account_auth",label:u("admin.ops.errorLog.typeAccountAuth")},{value:"request",label:u("admin.ops.errorLog.typeRequest")},{value:"auth",label:u("admin.ops.errorLog.typeAuth")},{value:"routing",label:u("admin.ops.errorLog.typeRouting")},{value:"internal",label:u("admin.ops.errorLog.typeInternal")}]),fe=["auth","rate_limit","quota","invalid_request","service_unavailable","upstream","internal","cyber"],j=z(()=>[{value:null,label:u("usage.errors.allCategories")},...fe.map(_=>({value:_,label:u("usage.errors.categories."+_)}))]),ie=z(()=>[{value:null,label:u("usage.errors.allStatuses")},...Ea.map(_=>({value:_,label:String(_)}))]),G=l([{value:null,label:u("admin.usage.allBillingModes")},{value:"token",label:u("admin.usage.billingModeToken")},{value:"per_request",label:u("admin.usage.billingModePerRequest")},{value:"image",label:u("admin.usage.billingModeImage")},{value:"video",label:u("admin.usage.billingModeVideo")}]),be=l([{value:null,label:u("admin.usage.allUpstreamModelAudit")},{value:!0,label:u("admin.usage.upstreamModelMismatchOnly")},{value:!1,label:u("admin.usage.upstreamModelMatchedOnly")}]),V=()=>y("change"),X=()=>{B&&(clearTimeout(B),B=null),N+=1},de=()=>{X();const _=q.value.trim();if(!_){D.value=[];return}const p=N;B=setTimeout(async()=>{B=null;try{const g=await ae.usage.searchUsers(_);p===N&&(D.value=g.sort((ce,Fe)=>Number(ce.deleted)-Number(Fe.deleted)))}catch{p===N&&(D.value=[])}},300)},ke=()=>{b&&clearTimeout(b),b=setTimeout(async()=>{try{h.value=await ae.usage.searchApiKeys(r.value.user_id,E.value||"")}catch{h.value=[]}},300)},xe=async _=>{X(),q.value=_.email,L.value=!1,r.value.user_id=_.id,C();try{h.value=await ae.usage.searchApiKeys(_.id,"")}catch{h.value=[]}V()},m=()=>{X(),q.value="",D.value=[],L.value=!1,r.value.user_id=void 0,C(),V()},S=_=>{E.value=_.name||String(_.id),M.value=!1,r.value.api_key_id=_.id,V()},C=()=>{E.value="",h.value=[],M.value=!1,r.value.api_key_id=void 0},Ee=()=>{C(),V()},Ve=()=>{ue&&clearTimeout(ue),ue=setTimeout(async()=>{if(!T.value){Y.value=[];return}try{const _=await ae.accounts.list(1,20,{search:T.value});Y.value=_.items.map(p=>({id:p.id,name:p.name}))}catch{Y.value=[]}},300)},ze=_=>{T.value=_.name,le.value=!1,r.value.account_id=_.id,V()},I=()=>{T.value="",Y.value=[],le.value=!1,r.value.account_id=void 0,V()},A=()=>{M.value=!0,h.value.length===0&&ke()},n=_=>{var Me,re,we;const p=_.target;if(!p)return;const g=((Me=U.value)==null?void 0:Me.contains(p))??!1,ce=((re=F.value)==null?void 0:re.contains(p))??!1,Fe=((we=K.value)==null?void 0:we.contains(p))??!1;g||(L.value=!1),ce||(M.value=!1),Fe||(le.value=!1)};return ge(()=>R.startDate,_=>{r.value.start_date=_},{immediate:!0}),ge(()=>R.endDate,_=>{r.value.end_date=_},{immediate:!0}),ge(()=>r.value.user_id,_=>{_||(X(),q.value="",D.value=[])}),ge(()=>r.value.api_key_id,_=>{_||(E.value="",h.value=[])}),ge(()=>r.value.account_id,_=>{_||(T.value="",Y.value=[])}),Ot(async()=>{document.addEventListener("click",n);try{const _=await ae.groups.list(1,1e3);ne.value.push(..._.items.map(p=>({value:p.id,label:p.name})))}catch{}}),nt(()=>{X(),document.removeEventListener("click",n)}),te({getUserSearchRevision:()=>N,setUserKeyword:_=>{X(),q.value=_,D.value=[],L.value=!1}}),(_,p)=>(d(),v("div",{class:Oe(w.flat?"p-4 sm:p-6":"card p-6")},[a("div",Oa,[a("div",Na,[a("div",{ref_key:"userSearchRef",ref:U,class:"usage-filter-dropdown relative w-full sm:w-auto
2sm:min-w-[240px]"},[a("label",Pa,i(c(u)("admin.usage.userFilter")),1),Ue(a("input",{"onUpdate:modelValue":p[0]||(p[0]=g=>q.value=g),type:"text",class:"input pr-8",placeholder:c(u)("admin.usage.searchUserPlaceholder"),onInput:de,onFocus:p[1]||(p[1]=g=>L.value=!0)},null,40,za),[[st,q.value]]),r.value.user_id?(d(),v("button",{key:0,type:"button",onClick:m,class:"absolute right-2 top-9 text-gray-400","aria-label":"Clear user filter"}," â ")):$("",!0),L.value&&(D.value.length>0||q.value)?(d(),v("div",Ka,[(d(!0),v(se,null,ve(D.value,g=>(d(),v("button",{key:g.id,type:"button",onClick:ce=>xe(g),class:"w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-dark-700"},[a("span",null,[We(i(g.email),1),g.deleted?(d(),v("span",Ha,"ï¼"+i(c(u)("admin.usage.userDeletedBadge"))+"ï¼",1)):$("",!0)]),a("span",ja,"#"+i(g.id),1)],8,Ba))),128))])):$("",!0)],512),a("div",{ref_key:"apiKeySearchRef",ref:F,class:"usage-filter-dropdown relative w-full sm:w-auto sm:min-w-[240px]"},[a("label",Ga,i(c(u)("usage.apiKeyFilter")),1),Ue(a("input",{"onUpdate:modelValue":p[2]||(p[2]=g=>E.value=g),type:"text",class:"input pr-8",placeholder:c(u)("admin.usage.searchApiKeyPlaceholder"),onInput:ke,onFocus:A},null,40,Ja),[[st,E.value]]),r.value.api_key_id?(d(),v("button",{key:0,type:"button",onClick:Ee,class:"absolute right-2 top-9 text-gray-400","aria-label":"Clear API key filter"}," â ")):$("",!0),M.value&&h.value.length>0?(d(),v("div",Ya,[(d(!0),v(se,null,ve(h.value,g=>(d(),v("button",{key:g.id,type:"button",onClick:ce=>S(g),class:"w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-dark-700"},[a("span",Wa,i(g.name||`#${g.id}`),1),a("span",Xa,"#"+i(g.id),1)],8,Qa))),128))])):$("",!0)],512),a("div",Za,[a("label",es,i(c(u)("usage.model")),1),x(ee,{modelValue:r.value.model,"onUpdate:modelValue":p[3]||(p[3]=g=>r.value.model=g),options:oe.value,searchable:"",onChange:V},null,8,["modelValue","options"])]),a("div",{ref_key:"accountSearchRef",ref:K,class:"usage-filter-dropdown relative w-full sm:w-auto sm:min-w-[220px]"},[a("label",ts,i(c(u)("admin.usage.account")),1),Ue(a("input",{"onUpdate:modelValue":p[4]||(p[4]=g=>T.value=g),type:"text",class:"input pr-8",placeholder:c(u)("admin.usage.searchAccountPlaceholder"),onInput:Ve,onFocus:p[5]||(p[5]=g=>le.value=!0)},null,40,as),[[st,T.value]]),r.value.account_id?(d(),v("button",{key:0,type:"button",onClick:I,class:"absolute right-2 top-9 text-gray-400","aria-label":"Clear account filter"}," â ")):$("",!0),le.value&&(Y.value.length>0||T.value)?(d(),v("div",ss,[(d(!0),v(se,null,ve(Y.value,g=>(d(),v("button",{key:g.id,type:"button",onClick:ce=>ze(g),class:"w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-dark-700"},[a("span",os,i(g.name),1),a("span",ns,"#"+i(g.id),1)],8,ls))),128))])):$("",!0)],512),w.mode!=="errors"?(d(),v("div",rs,[a("label",us,i(c(u)("usage.type")),1),x(ee,{modelValue:r.value.request_type,"onUpdate:modelValue":p[6]||(p[6]=g=>r.value.request_type=g),options:_e.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode!=="errors"?(d(),v("div",is,[a("label",ds,i(c(u)("usage.compactionFilter")),1),x(ee,{modelValue:r.value.native_compaction_v2,"onUpdate:modelValue":p[7]||(p[7]=g=>r.value.native_compaction_v2=g),options:ye.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode!=="errors"?(d(),v("div",cs,[a("label",ms,i(c(u)("admin.usage.billingType")),1),x(ee,{modelValue:r.value.billing_type,"onUpdate:modelValue":p[8]||(p[8]=g=>r.value.billing_type=g),options:H.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode==="usage"?(d(),v("div",ps,[a("label",gs,i(c(u)("admin.usage.billingMode")),1),x(ee,{modelValue:r.value.billing_mode,"onUpdate:modelValue":p[9]||(p[9]=g=>r.value.billing_mode=g),options:G.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode==="usage"?(d(),v("div",vs,[a("label",_s,i(c(u)("admin.usage.upstreamModelAudit")),1),x(ee,{modelValue:r.value.upstream_model_mismatch,"onUpdate:modelValue":p[10]||(p[10]=g=>r.value.upstream_model_mismatch=g),options:be.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode==="errors"?(d(),v("div",ys,[a("label",fs,i(c(u)("admin.ops.errorLog.type")),1),x(ee,{modelValue:r.value.error_phase,"onUpdate:modelValue":p[11]||(p[11]=g=>r.value.error_phase=g),options:Q.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode==="errors"?(d(),v("div",bs,[a("label",hs,i(c(u)("usage.errors.category")),1),x(ee,{modelValue:r.value.error_category,"onUpdate:modelValue":p[12]||(p[12]=g=>r.value.error_category=g),options:j.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),w.mode==="errors"?(d(),v("div",ks,[a("label",xs,i(c(u)("admin.ops.errorLog.status")),1),x(ee,{modelValue:r.value.status_code,"onUpdate:modelValue":p[13]||(p[13]=g=>r.value.status_code=g),options:ie.value,onChange:V},null,8,["modelValue","options"])])):$("",!0),a("div",ws,[a("label",Ss,i(c(u)("admin.usage.group")),1),x(ee,{modelValue:r.value.group_id,"onUpdate:modelValue":p[14]||(p[14]=g=>r.value.group_id=g),options:ne.value,searchable:"",onChange:V},null,8,["modelValue","options"])])]),w.showActions?(d(),v("div",Cs,[a("button",{type:"button",onClick:p[15]||(p[15]=g=>_.$emit("refresh")),class:"btn btn-secondary"},i(c(u)("common.refresh")),1),a("button",{type:"button",onClick:p[16]||(p[16]=g=>_.$emit("reset")),class:"btn btn-secondary"},i(c(u)("common.reset")),1),ha(_.$slots,"after-reset"),w.mode==="usage"?(d(),v(se,{key:0},[a("button",{type:"button",onClick:p[17]||(p[17]=g=>_.$emit("cleanup")),class:"btn btn-danger"}
2,i(c(u)("admin.usage.cleanup.button")),1),a("button",{type:"button",onClick:p[18]||(p[18]=g=>_.$emit("export")),disabled:w.exporting,class:"btn btn-primary"},i(c(u)("usage.exportExcel")),9,$s)],64)):$("",!0)])):$("",!0)])],2))}}),Ts={class:"space-y-4"},Ds={class:"text-sm text-gray-600 dark:text-gray-400"},Us={class:"flex items-center justify-between text-sm text-gray-700 dark:text-gray-300"},Rs={class:"font-medium text-gray-900 dark:text-white"},qs={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-dark-700"},Es=["aria-valuenow","aria-label"],Vs={key:0,class:"text-xs text-gray-500 dark:text-gray-400","aria-live":"polite","aria-atomic":"true"},Ls=qe({__name:"ExportProgressDialog",props:{show:{type:Boolean},progress:{},current:{},total:{},estimatedTime:{}},emits:["cancel"],setup(w,{emit:te}){const t=w,R=te,{t:y}=Pe(),u=z(()=>{const U=Number.isFinite(t.progress)?t.progress:0;return Math.min(100,Math.max(0,Math.round(U)))}),r=()=>{R("cancel")};return(U,F)=>(d(),Ne(It,{show:w.show,title:c(y)("usage.exporting"),width:"narrow",onClose:r},{footer:Re(()=>[a("button",{onClick:r,type:"button",class:"rounded-md border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 dark:border-dark-600 dark:bg-dark-700 dark:text-gray-200 dark:hover:bg-dark-600 dark:focus:ring-offset-dark-800"},i(c(y)("usage.cancelExport")),1)]),default:Re(()=>[a("div",Ts,[a("div",Ds,i(c(y)("usage.exportingProgress")),1),a("div",Us,[a("span",null,i(c(y)("usage.exportedCount",{current:w.current,total:w.total})),1),a("span",Rs,i(u.value)+"%",1)]),a("div",qs,[a("div",{role:"progressbar","aria-valuenow":u.value,"aria-valuemin":"0","aria-valuemax":"100","aria-label":`${c(y)("usage.exportingProgress")}: ${u.value}%`,class:"h-2 rounded-full bg-primary-600 transition-all",style:ka({width:`${u.value}%`})},null,12,Es)]),w.estimatedTime?(d(),v("div",Vs,i(c(y)("usage.estimatedTime",{time:w.estimatedTime})),1)):$("",!0)])]),_:1},8,["show","title"]))}}),Fs=qe({__name:"UsageExportProgress",props:{show:{type:Boolean},progress:{},current:{},total:{},estimatedTime:{}},emits:["cancel"],setup(w){return(te,t)=>(d(),Ne(Ls,{show:w.show,progress:w.progress,current:w.current,total:w.total,"estimated-time":w.estimatedTime,onCancel:t[0]||(t[0]=R=>te.$emit("cancel"))},null,8,["show","progress","current","total","estimated-time"]))}}),Ms={class:"flex flex-wrap items-center justify-between gap-3 border-b border-gray-100 px-4 py-3 dark:border-dark-700/50 sm:px-6"},Is={class:"text-xs text-gray-400 dark:text-gray-500"},As={class:"flex items-center gap-3"},Os={key:0,class:"text-xs text-gray-400 dark:text-gray-500"},Ns={class:"w-28"},Ps={class:"overflow-x-auto"},zs={class:"w-full min-w-max divide-y divide-gray-200 dark:divide-dark-700"},Ks={class:"bg-gray-50 dark:bg-dark-800"},Bs={class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-dark-400"},Hs=["onClick"],js={key:0,"aria-hidden":"true"},Gs={class:"divide-y divide-gray-200 bg-white dark:divide-dark-700 dark:bg-dark-900"},Js={key:0},Ys=["colspan"],Qs={key:1},Ws=["colspan"],Xs=["title","onClick"],Zs={class:"px-4 py-3 sm:px-6"},el={key:1,class:"inline-block w-6 text-center text-sm tabular-nums text-gray-400"},tl=["title"],al={class:"ml-1 font-normal text-gray-400 dark:text-gray-500"},sl={class:"whitespace-nowrap px-4 py-3 text-right text-sm tabular-nums text-gray-500 dark:text-gray-400"},ll={class:"whitespace-nowrap px-4 py-3 text-right text-sm tabular-nums text-gray-500 dark:text-gray-400"},ol={class:"whitespace-nowrap px-4 py-3 text-right text-sm tabular-nums text-gray-500 dark:text-gray-400"},nl={class:"whitespace-nowrap px-4 py-3 text-right text-sm tabular-nums text-gray-500 dark:text-gray-400"},rl={class:"whitespace-nowrap px-4 py-3 text-right text-sm font-medium tabular-nums text-gray-900 dark:text-gray-100"},ul={class:"whitespace-nowrap px-4 py-3 text-right text-sm font-medium tabular-nums text-green-600 dark:text-green-400"},il=qe({__name:"UserTokenRanking",props:{startDate:{},endDate:{},filters:{},model:{}},emits:["select-user"],setup(w,{expose:te}){const t=w,{t:R}=Pe(),y=[{key:"requests",label:"admin.usage.tokenRanking.columns.requests"},{key:"input_tokens",label:"admin.usage.tokenRanking.columns.inputTokens"},{key:"output_tokens",label:"admin.usage.tokenRanking.columns.outputTokens"},{key:"cache_tokens",label:"admin.usage.tokenRanking.columns.cacheTokens"},{key:"total_tokens",label:"admin.usage.tokenRanking.columns.totalTokens"},{key:"actual_cost",label:"admin.usage.tokenRanking.columns.cost"}],u=[{value:20,label:"Top 20"},{value:50,label:"Top 50"},{value:100,label:"Top 100"},{value:200,label:"Top 200"}],r=["bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-400","bg-gray-200 text-gray-600 dark:bg-gray-500/20 dark:text-gray-300","bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-400"],U=l([]),F=l(!1),K=l("total_tokens"),q=l(50);let D=0;const L=h=>va(h),B=h=>_a(h,4),N=h=>{K.value!==h&&(K.value=h,E())},E=async()=>{const h=++D;F.value=!0;try{const M={...t.filters,start_date:t.startDate,end_date:t.endD
2ate,sort_by:K.value,limit:q.value};t.model&&(M.model=t.model);const b=await ga(M);if(h!==D)return;U.value=b.users||[]}catch{if(h!==D)return;U.value=[]}finally{h===D&&(F.value=!1)}};return ge(()=>[t.startDate,t.endDate,t.model,JSON.stringify(t.filters)],()=>E(),{immediate:!0}),te({reload:E}),(h,M)=>(d(),v("div",null,[a("div",Ms,[a("p",Is,i(c(R)("admin.usage.tokenRanking.subtitle")),1),a("div",As,[!F.value&&U.value.length>0?(d(),v("span",Os,i(c(R)("admin.usage.tokenRanking.userCount",{count:U.value.length})),1)):$("",!0),a("div",Ns,[x(ee,{modelValue:q.value,"onUpdate:modelValue":M[0]||(M[0]=b=>q.value=b),options:u,onChange:E},null,8,["modelValue"])])])]),a("div",Ps,[a("table",zs,[a("thead",Ks,[a("tr",null,[M[1]||(M[1]=a("th",{class:"w-16 px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-dark-400 sm:px-6"},"#",-1)),a("th",Bs,i(c(R)("admin.usage.tokenRanking.columns.user")),1),(d(),v(se,null,ve(y,b=>a("th",{key:b.key,class:Oe(["cursor-pointer select-none whitespace-nowrap px-4 py-3 text-right text-xs font-medium uppercase tracking-wider transition-colors hover:bg-gray-100 dark:hover:bg-dark-700",K.value===b.key?"text-primary-600 dark:text-primary-400":"text-gray-500 dark:text-dark-400"]),onClick:T=>N(b.key)},[We(i(c(R)(b.label))+" ",1),K.value===b.key?(d(),v("span",js,"â")):$("",!0)],10,Hs)),64))])]),a("tbody",Gs,[F.value?(d(),v("tr",Js,[a("td",{colspan:y.length+2,class:"py-12 text-center"},[x(Va)],8,Ys)])):U.value.length===0?(d(),v("tr",Qs,[a("td",{colspan:y.length+2,class:"py-12 text-center text-sm text-gray-400"},i(c(R)("admin.dashboard.noDataAvailable")),9,Ws)])):(d(!0),v(se,{key:2},ve(U.value,(b,T)=>(d(),v("tr",{key:b.user_id,class:"cursor-pointer transition-colors hover:bg-gray-50 dark:hover:bg-dark-700/40",title:c(R)("admin.usage.tokenRanking.rowHint"),onClick:Y=>h.$emit("select-user",b.user_id,b.email)},[a("td",Zs,[T<3?(d(),v("span",{key:0,class:Oe(["inline-flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold",r[T]])},i(T+1),3)):(d(),v("span",el,i(T+1),1))]),a("td",{class:"max-w-[260px] truncate px-4 py-3 text-sm font-medium text-gray-700 dark:text-gray-200",title:b.email},[We(i(b.email||`User #${b.user_id}`)+" ",1),a("span",al,"#"+i(b.user_id),1)],8,tl),a("td",sl,i(b.requests.toLocaleString()),1),a("td",ll,i(L(b.input_tokens)),1),a("td",ol,i(L(b.output_tokens)),1),a("td",nl,i(L(b.cache_tokens)),1),a("td",rl,i(L(b.total_tokens)),1),a("td",ul,"$"+i(B(b.actual_cost)),1)],8,Xs))),128))])])])]))}}),dl={class:"space-y-4"},cl={class:"rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200"},ml={class:"rounded-xl border border-gray-200 p-4 dark:border-dark-700"},pl={class:"flex items-center justify-between"},gl={class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},vl={class:"mt-3 space-y-2"},_l={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},yl={key:1,class:"text-sm text-gray-500 dark:text-gray-400"},fl={key:2,class:"space-y-2"},bl={class:"flex flex-wrap items-center justify-between gap-2"},hl={class:"flex items-center gap-2"},kl={class:"text-xs text-gray-400"},xl=["onClick"],wl={class:"text-xs text-gray-400"},Sl={class:"flex flex-wrap items-center gap-4 text-xs text-gray-500 dark:text-gray-400"},Cl={key:0,class:"text-xs text-rose-500"},$l={class:"flex justify-end gap-3"},Tl=["disabled"],Dl=qe({__name:"UsageCleanupDialog",props:{show:{type:Boolean},filters:{},startDate:{},endDate:{}},emits:["close"],setup(w,{emit:te}){const t=w,R=te,{t:y}=Pe(),u=At(),r=l({}),U=l(""),F=l(""),K=l([]),q=l(!1),D=l(1),L=l(5),B=l(0),N=l(!1),E=l(!1),h=l(!1),M=l(!1),b=l(null);let T=null;const Y=()=>{},le=()=>{r.value={...t.filters},U.value=t.startDate,F.value=t.endDate,r.value.start_date=U.value,r.value.end_date=F.value,D.value=1,B.value=0},ue=()=>{oe(),T=window.setInterval(()=>{j()},1e4)},oe=()=>{T!==null&&(window.clearInterval(T),T=null)},ne=()=>{oe(),E.value=!1,h.value=!1,M.value=!1,b.value=null,N.value=!1,R("close")},_e=m=>({pending:y("admin.usage.cleanup.status.pending"),running:y("admin.usage.cleanup.status.running"),succeeded:y("admin.usage.cleanup.status.succeeded"),failed:y("admin.usage.cleanup.status.failed"),canceled:y("admin.usage.cleanup.status.canceled")})[m]||m,ye=m=>({pending:"bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-200",running:"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-200",succeeded:"bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-200",failed:"bg-rose-100 text-rose-700 dark:bg-rose-500/20 dark:text-rose-200",canceled:"bg-gray-200 text-gray-600 dark:bg-dark-600 dark:text-gray-300"})[m]||"bg-gray-100 text-gray-600",H=m=>{if(!m)return"--";const S=new Date(m);
2return Number.isNaN(S.getTime())?m:S.toLocaleString()},Q=m=>{const S=H(m.filters.start_time),C=H(m.filters.end_time);return`${S} ~ ${C}`},fe=()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return"UTC"}},j=async()=>{if(t.show){q.value=!0;try{const m=await Qe.listCleanupTasks({page:D.value,page_size:L.value});K.value=m.items||[],B.value=m.total||0,m.page&&(D.value=m.page),m.page_size&&(L.value=m.page_size)}catch(m){console.error("Failed to load cleanup tasks:",m),u.showError(y("admin.usage.cleanup.loadFailed"))}finally{q.value=!1}}},ie=m=>{D.value=m,j()},G=m=>{!Number.isFinite(m)||m<=0||(L.value=m,D.value=1,j())},be=()=>{E.value=!0},V=m=>m.status==="pending"||m.status==="running",X=m=>{b.value=m,h.value=!0},de=()=>{if(!U.value||!F.value)return u.showError(y("admin.usage.cleanup.missingRange")),null;const m={start_date:U.value,end_date:F.value,timezone:fe()};if(r.value.user_id&&r.value.user_id>0&&(m.user_id=r.value.user_id),r.value.api_key_id&&r.value.api_key_id>0&&(m.api_key_id=r.value.api_key_id),r.value.account_id&&r.value.account_id>0&&(m.account_id=r.value.account_id),r.value.group_id&&r.value.group_id>0&&(m.group_id=r.value.group_id),r.value.model&&(m.model=r.value.model),r.value.request_type){m.request_type=r.value.request_type;const S=Ae(r.value.request_type);S!=null&&(m.stream=S)}else r.value.stream!==null&&r.value.stream!==void 0&&(m.stream=r.value.stream);return r.value.billing_type!==null&&r.value.billing_type!==void 0&&(m.billing_type=r.value.billing_type),m},ke=async()=>{const m=de();if(!m){E.value=!1;return}N.value=!0,E.value=!1;try{await Qe.createCleanupTask(m),u.showSuccess(y("admin.usage.cleanup.submitSuccess")),j()}catch(S){console.error("Failed to create cleanup task:",S),u.showError(y("admin.usage.cleanup.submitFailed"))}finally{N.value=!1}},xe=async()=>{const m=b.value;if(!m){h.value=!1;return}M.value=!0,h.value=!1;try{await Qe.cancelCleanupTask(m.id),u.showSuccess(y("admin.usage.cleanup.cancelSuccess")),j()}catch(S){console.error("Failed to cancel cleanup task:",S),u.showError(y("admin.usage.cleanup.cancelFailed"))}finally{M.value=!1,b.value=null}};return ge(()=>t.show,m=>{m?(le(),j(),ue()):oe()}),nt(()=>{oe()}),(m,S)=>(d(),v(se,null,[x(It,{show:w.show,title:c(y)("admin.usage.cleanup.title"),width:"wide",onClose:ne},{footer:Re(()=>[a("div",$l,[a("button",{type:"button",class:"btn btn-secondary",onClick:ne},i(c(y)("common.cancel")),1),a("button",{type:"button",class:"btn btn-danger",disabled:N.value,onClick:be},i(N.value?c(y)("admin.usage.cleanup.submitting"):c(y)("admin.usage.cleanup.submit")),9,Tl)])]),default:Re(()=>[a("div",dl,[x(Pt,{modelValue:r.value,"onUpdate:modelValue":S[0]||(S[0]=C=>r.value=C),startDate:U.value,"onUpdate:startDate":S[1]||(S[1]=C=>U.value=C),endDate:F.value,"onUpdate:endDate":S[2]||(S[2]=C=>F.value=C),exporting:!1,"show-actions":!1,onChange:Y},null,8,["modelValue","startDate","endDate"]),a("div",cl,i(c(y)("admin.usage.cleanup.warning")),1),a("div",ml,[a("div",pl,[a("h4",gl,i(c(y)("admin.usage.cleanup.recentTasks")),1),a("button",{type:"button",class:"btn btn-ghost btn-sm",onClick:j},i(c(y)("common.refresh")),1)]),a("div",vl,[q.value?(d(),v("div",_l,i(c(y)("admin.usage.cleanup.loadingTasks")),1)):K.value.length===0?(d(),v("div",yl,i(c(y)("admin.usage.cleanup.noTasks")),1)):(d(),v("div",fl,[(d(!0),v(se,null,ve(K.value,C=>(d(),v("div",{key:C.id,class:"flex flex-col gap-2 rounded-lg border border-gray-100 px-3 py-2 text-sm text-gray-600 dark:border-dark-700 dark:text-gray-300"},[a("div",bl,[a("div",hl,[a("span",{class:Oe([ye(C.status),"rounded-full px-2 py-0.5 text-xs font-semibold"])},i(_e(C.status)),3),a("span",kl,"#"+i(C.id),1),V(C)?(d(),v("button",{key:0,type:"button",class:"btn btn-ghost btn-xs text-rose-600 hover:text-rose-700 dark:text-rose-300",onClick:Ee=>X(C)},i(c(y)("admin.usage.cleanup.cancel")),9,xl)):$("",!0)]),a("div",wl,i(H(C.created_at)),1)]),a("div",Sl,[a("span",null,i(c(y)("admin.usage.cleanup.range"))+": "+i(Q(C)),1),a("span",null,i(c(y)("admin.usage.cleanup.deletedRows"))+": "+i(C.deleted_rows.toLocaleString()),1)]),C.error_message?(d(),v("div",Cl,i(C.error_message),1)):$("",!0)]))),128))]))]),B.value>L.value?(d(),Ne(Nt,{key:0,class:"mt-4",total:B.value,page:D.value,"page-size":L.value,"page-size-options":[5],"show-page-size-selector":!1,"show-jump":!0,"onUpdate:page":ie,"onUpdate:pageSize":G},null,8,["total","page","page-size"])):$("",!0)])])]),_:1},8,["show","title"]),x(Ft,{show:E.value,title:c(y)("admin.usage.cleanup.confirmTitle"),message:c(y)("admin.usage.cleanup.confirmMessage"),"confirm-text":c(y)("admin.usage.cleanup.confirmSubmit"),danger:"",onConfirm:ke,onCancel:S[3]||(S[3]=C=>E.value=!1)},null,8,["show","title","message","confirm-text"]),x(Ft,{show:h.value,title:c(y)("admin.usage.cleanup.cancelConfirmTitle"),message:c(y)("admin.usage.cleanup.cancelConfirmMessage"),"confirm-text":c(y)("admin.usage.cleanup.cancelConfirm"),danger:"",onConfirm:xe,onCancel:S[4]||(S[4]=C=>h.value=!1)},null,8,["show","title","message","confirm-text"])],64))}}),Ul={class:"space-y-6"},Rl={class:"space-y-4"},ql={class:"card p-4"},El={class:"flex flex-wrap items-center gap-4"},Vl={class:"flex items-center gap-2"},Ll={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Fl={class:"ml-auto flex items-center gap-2"},Ml={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Il={class:"w-28"},Al={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Ol={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Nl={class:"card"},Pl={class:"flex flex-wrap items-center border-b border-gray-200 px-2 dark:border-dark-700 sm:px-4"},zl=["onClick"],Kl=["title"],Bl={class:"hidden md:inline"},Hl={key:0,class:"absolute right-0 top-full z-50 mt-1 max-h-80 w-48 overflow-y-auto rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-dark-600 dark:bg-dark-800"},jl=["data-testid","onClick"],Gl={class:"overflow-hidden rounded-b-2xl"},Jl={class:"overflow-hidden rounded-b-2xl"},Yl={key:0,class:"overflow-hidden rounded-b-2xl"},ot="usage-hidden-columns",Je="usage-hidden-columns-version",Ql="request-id-hidden-by-default",Ye="upstream-request-id-hidden-by-default",Mt="usage-error-hidden-columns",wo=qe({__name:"UsageView",setup(w,{expose:te}){const{t}=Pe(),R=At(),y=xa(),u=l(null),r=l([]),U=l(!1),F=l(!1),K=l([]),q=l([]),D=l([]),L=l([]),B=l([]),N=l(!1),E=l(!1),h=l("hour"),M=l("tokens"),b=l("requested"),T=De({requested:!1,upstream:!1,mapping:!1}),Y=l("tokens"),le=l("tokens"),ue=l("inbound"),oe=l([]),ne=l([]),_e=l([]),ye=l(!1);let H=null,Q=null,fe=0,j=0,ie=0;const G=De({show:!1,progress:0,current:0,total:0,estimatedTime:""}),be=l(!1),V=l(!1),X=l(null),de=z(()=>{const e={};return n.value.user_id&&(e.user_id=n.value.user_id),n.value.api_key_id&&(e.api_key_id=n.value.api_key_id),n.value.account_id&&(e.account_id=n.value.account_id),n.value.group_id&&(e.group_id=n.value.group_id),n.value.request_type!=null&&(e.request_type=n.value.request_type),n.value.native_compaction_v2!=null&&(e.native_compaction_v2=n.value.native_compaction_v2),n.value.billing_type!=null&&(e.billing_type=n.value.billing_type),e}),ke=z(()=>Array.from(new Set(q.value.map(e=>
2e.model).filter(Boolean))).sort()),xe=async e=>{try{const s=await ae.users.getById(e,!0);X.value=s,V.value=!0}catch{R.showError(t("admin.usage.failedToLoadUser"))}},m=(e,s)=>{var o,k;n.value={...n.value,user_id:e},(k=(o=Se.value)==null?void 0:o.setUserKeyword)==null||k.call(o,s||""),W.value="usage",He()},S=z(()=>[{value:"day",label:t("admin.dashboard.day")},{value:"hour",label:t("admin.dashboard.hour")}]),C=e=>{const s=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),k=String(e.getDate()).padStart(2,"0");return`${s}-${o}-${k}`},Ee=()=>{const e=new Date,s=new Date(e.getTime()-24*60*60*1e3);return{start:C(s),end:C(e)}},Ve=(e,s)=>{const o=new Date(`${e}T00:00:00`).getTime(),k=new Date(`${s}T00:00:00`).getTime();return Math.ceil((k-o)/(1e3*60*60*24))<=1?"hour":"day"},ze=Ee(),I=l(ze.start),A=l(ze.end),n=l({user_id:void 0,model:void 0,group_id:void 0,request_type:void 0,native_compaction_v2:null,billing_type:null,start_date:I.value,end_date:A.value}),J=De({page:1,page_size:Sa(),total:0}),Le=De({sort_by:"created_at",sort_order:"desc"}),_=e=>Array.isArray(e)?e.find(s=>typeof s=="string"&&s.length>0):typeof e=="string"&&e.length>0?e:void 0,p=e=>{const s=_(e);if(!s)return;const o=Number(s);return Number.isFinite(o)?o:void 0},g=()=>{const e=_(y.query.start_date),s=_(y.query.end_date),o=p(y.query.user_id);e&&(I.value=e),s&&(A.value=s),n.value={...n.value,user_id:o,start_date:I.value,end_date:A.value},h.value=Ve(I.value,A.value)},ce=async()=>{var k,O,pe,he,P,Te;const e=n.value.user_id;if(!e)return;const s=(O=(k=Se.value)==null?void 0:k.getUserSearchRevision)==null?void 0:O.call(k),o=()=>{var f,Ie;return n.value.user_id===e&&((Ie=(f=Se.value)==null?void 0:f.getUserSearchRevision)==null?void 0:Ie.call(f))===s};try{const f=await ae.users.getById(e,!0);if(!o())return;(he=(pe=Se.value)==null?void 0:pe.setUserKeyword)==null||he.call(pe,f.email||String(e))}catch{if(!o())return;(Te=(P=Se.value)==null?void 0:P.setUserKeyword)==null||Te.call(P,String(e))}},Fe=e=>{I.value=e.startDate,A.value=e.endDate,n.value={...n.value,start_date:e.startDate,end_date:e.endDate},h.value=Ve(e.startDate,e.endDate),He()},Me=(e,s,o)=>{const k=n.value.request_type,O=k?Ae(k):n.value.stream;return{page:e,page_size:s,exact_total:o,...n.value,stream:O===null?void 0:O,sort_by:Le.sort_by,sort_order:Le.sort_order}},re=async()=>{H==null||H.abort();const e=new AbortController;H=e,U.value=!0;try{const s=await ae.usage.list(Me(J.page,J.page_size,!1),{signal:e.signal});e.signal.aborted||(r.value=s.items,J.total=s.total)}catch(s){(s==null?void 0:s.name)!=="AbortError"&&console.error("Failed to load usage logs:",s)}finally{H===e&&(U.value=!1)}},we=async(e=!1)=>{const s=++j;ye.value=!0;try{const o=n.value.request_type,k=o?Ae(o):n.value.stream,O=await ae.usage.getStats({...n.value,stream:k===null?void 0:k,...e?{nocache:1}:{}});if(s!==j)return;u.value=O,oe.value=O.endpoints||[],ne.value=O.upstream_endpoints||[],_e.value=O.endpoint_paths||[]}catch(o){if(s!==j)return;console.error("Failed to load usage stats:",o),oe.value=[],ne.value=[],_e.value=[]}finally{s===j&&(ye.value=!1)}},rt=()=>{T.requested=!1,T.upstream=!1,T.mapping=!1},Ke=async(e,s=!1)=>
2{if(!s&&T[e])return;const o=++ie;E.value=!0;try{const k=n.value.request_type,O=k?Ae(k):n.value.stream,pe={start_date:n.value.start_date||I.value,end_date:n.value.end_date||A.value,user_id:n.value.user_id,model:n.value.model,api_key_id:n.value.api_key_id,account_id:n.value.account_id,group_id:n.value.group_id,request_type:k,stream:O===null?void 0:O,native_compaction_v2:n.value.native_compaction_v2,billing_type:n.value.billing_type,upstream_model_mismatch:n.value.upstream_model_mismatch},he=await ae.dashboard.getModelStats({...pe,model_source:e});if(o!==ie)return;const P=he.models||[];e==="requested"?q.value=P:e==="upstream"?D.value=P:L.value=P,T[e]=!0}catch(k){if(o!==ie)return;console.error("Failed to load model stats:",k),e==="requested"?q.value=[]:e==="upstream"?D.value=[]:L.value=[],T[e]=!1}finally{o===ie&&(E.value=!1)}},Be=async()=>{const e=++fe;N.value=!0;try{const s=n.value.request_type,o=s?Ae(s):n.value.stream,k=await ae.dashboard.getSnapshotV2({start_date:n.value.start_date||I.value,end_date:n.value.end_date||A.value,granularity:h.value,user_id:n.value.user_id,model:n.value.model,api_key_id:n.value.api_key_id,account_id:n.value.account_id,group_id:n.value.group_id,request_type:s,stream:o===null?void 0:o,native_compaction_v2:n.value.native_compaction_v2,billing_type:n.value.billing_type,upstream_model_mismatch:n.value.upstream_model_mismatch,include_stats:!1,include_trend:!0,include_model_stats:!1,include_group_stats:!0,include_users_trend:!1});if(e!==fe)return;K.value=k.trend||[],B.value=k.groups||[]}catch(s){console.error("Failed to load chart data:",s)}finally{e===fe&&(N.value=!1)}},He=()=>{J.page=1,rt(),re(),we(),Ke(b.value,!0),Be(),Ce.value=1,W.value==="errors"?$e():je.value=[]},ut=()=>{var e;rt(),re(),we(!0),Ke(b.value,!0),Be(),W.value==="errors"&&$e(),Xe.value&&((e=_t.value)==null||e.reload())},zt=()=>{const e=Ee();I.value=e.start,A.value=e.end,n.value={start_date:I.value,end_date:A.value,request_type:void 0,native_compaction_v2:null,billing_type:null,billing_mode:void 0},h.value=Ve(I.value,A.value),He()},Kt=e=>{J.page=e,re()},Bt=e=>{J.page_size=e,J.page=1,re()},Ht=(e,s)=>{Le.sort_by=e,Le.sort_order=s,J.page=1,re()},it=()=>{R.showError(t("usage.ipGeo.batchFailed"))},jt=()=>Q==null?void 0:Q.abort(),Gt=()=>{be.value=!0},Jt=e=>{const s=Da(e);return t(s==="cyber"?"usage.cyber":s==="live"?"usage.live":s==="ws_v2"?"usage.ws":s==="stream"?"usage.stream":s==="sync"?"usage.sync":"usage.unknown")},Yt=async()=>{if(F.value)return;F.value=!0,G.show=!0;const e=new AbortController;Q=e;try{let s=1,o=J.total,k=0;const O=await ya(()=>import("./vendor-ui-mF4M59HB.js").then(P=>P.x),__vite__mapDeps([0,1])),pe=[t("usage.time"),t("admin.usage.user"),t("usage.apiKeyFilter"),t("admin.usage.account"),t("usage.requestedModel"),t("usage.sentUpstreamModel"),t("usage.upstreamResponseModel"),t("usage.upstreamModelMismatch"),t("usage.requestedReasoningEffort"),t("usage.reasoningEffort"),t("admin.usage.group"),t("usage.inboundEndpoint"),t("usage.upstreamEndpoint"),t("usage.type"),t("admin.usage.inputTokens"),t("admin.usage.outputTokens"),t("admin.usage.cacheReadTokens"),t("admin.usage.cacheCreationTokens"),t("admin.usage.inputCost"),t("admin.usage.outputCost"),t("admin.usage.cacheReadCost"),t("admin.usage.cacheCreationCost"),t("usage.rate"),t("usage.accountMultiplier"),t("usage.original"),t("usage.userBilled"),t("usage.accountBilled"),t("usage.firstToken"),t("usage.duration"),t("admin.usage.requestId"),t("admin.usage.upstreamRequestId"),t("usage.userAgent"),t("admin.usage.ipAddress")],he=O.utils.aoa_to_sheet([pe]);for(;;){const P=await Qe.list(Me(s,100,!0),{signal:e.signal});if(e.signal.aborted)break;s===1&&(o=P.total,G.total=o);const Te=(P.items||[]).map(f=>{var Ie,wt,St,Ct,$t,Tt,Dt,Ut,Rt,qt,Et;return[f.created_at,((Ie=f.user)==null?void 0:Ie.email)||"",((wt=f.api_key)==null?void 0:wt.name)||"",((St=f.account)==null?void 0:St.name)||"",f.model,f.upstream_model||f.model,f.upstream_response_model||"",f.upstream_model_mismatch==null?"":t(f.upstream_model_mismatch?"common.yes":"common.no"),Vt(f.reasoning_effort),Vt(f.upstream_reasoning_effort||f.reasoning_effort),((Ct=f.group)==null?void 0:Ct.name)||"",f.inbound_endpoint||"",f.upstream_endpoint||"",Jt(f),f.input_tokens,f.output_tokens,f.cache_read_tokens,f.cache_creation_tokens,(($t=f.input_cost)==null?void 0:$t.toFixed(6))||"0.000000",((Tt=f.output_cost)==null?void 0:Tt.toFixed(6))||"0.000000",((Dt=f.cache_read_cost)==null?void 0:Dt.toFixed(6))||"0.000000",((Ut=f.cache_creation_cost)==null?void 0:Ut.toFixed(6))||"0.000000",((Rt=f.rate_multiplier)==null?void 0:Rt.toPrecision(4))||"1.00",(f.account_rate_multiplier??1).toPrecision(4),((qt=f.total_cost)==null?void 0:qt.toFixed(6))||"0.000000",((Et=f.actual_cost)==null?void 0:Et.toFixed(6))||"0.000000",((f.account_stats_cost??f.total_cost)*(f.account_rate_multiplier??1)).toFixed(6),f.first_token_ms??"",f.duration_ms,f.request_id||"",f.upstream_request_id||"",f.user_agent||"",f.ip_address||""]});if(Te.length&&O.utils.sheet_add_aoa(he,Te,{origin:-1}),k+=Te.length,G.current=k,G.progress=o>0?Math.min(100,Math.round(k/o*100)):0,k>=o||P.items.length<100)break;s++}if(!e.signal.aborted){const P=O.utils.book_new();O.utils.book_append_sheet(P,he,"Usage"),wa.saveAs(new Blob([O.write(P,{bookType:"xlsx",type:"array"})],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),`usage_${n.value.start_date}_to_${n.value.end_date}.xlsx`),R.showSuccess(t("usage.exportSuccess"))}}catch(s){console.error("Failed to export:",s),R.showError("Export Failed")}finally{Q===e&&(Q=null,F.value=!1,G.show=!1)}},dt=["user","created_at"],ct=["reasoning_effort","request_id","upstream_request_id","user_agent"],mt=z(()=>[{key:"user",label:t("admin.usage.user"),sortable:!1},{key:"api_key",label:t("usage.apiKeyFilter"),sortable:!1},{key:"account",label:t("admin.usage.account"),sortable:!1},{key:"model",label:t("usage.model"),sortable:!0},{key:"reasoning_effort",label:t("usage.reasoningEffort"),sortable:!1},{key:"endpoint",label:t("usage.endpoint"),sortable:!1},{key:"group",label:t("admin.usage.group"),sortable:!1},{key:"stream",label:t("usage.type"),sortable:!1},{key:"billing_mode",label:t("admin.usage.billingMode"),sortable:!1},{key:"tokens",label:t("usage.tokens"),sortable:!1},{key:"cost",label:t("usage.cost"),sortable:!1},{key:"latency",label:t("usage.latency"),sortable:!1},{key:"created_at",label:t("usage.time"),sortable:!0},{key:"request_id",label:t("admin.usage.requestId"),sortable:!1},{key:"upstream_request_id",label:t("admin.usage.upstreamRequestId"),sortable:!1},{key:"user_agent",label:t("usage.userAgent"),sortable:!1},{key:"ip_address",label:t("admin.usage.ipAddress"),sortable:!1}]),Z=De(new Set),Qt=z(()=>mt.value.filter(e=>
2!dt.includes(e.key))),Wt=z(()=>mt.value.filter(e=>dt.includes(e.key)||!Z.has(e.key))),Xt=e=>!Z.has(e),Zt=e=>{Z.has(e)?Z.delete(e):Z.add(e);try{localStorage.setItem(ot,JSON.stringify([...Z])),localStorage.setItem(Je,Ye)}catch(s){console.error("Failed to save columns:",s)}},pt=["user","status","created_at","actions"],gt=["user_agent"],vt=z(()=>[{key:"user",label:t("admin.ops.errorLog.user")},{key:"api_key",label:t("admin.ops.errorLog.apiKey")},{key:"account",label:t("admin.ops.errorLog.account")},{key:"platform",label:t("admin.ops.errorLog.platform")},{key:"model",label:t("admin.ops.errorLog.model")},{key:"endpoint",label:t("admin.ops.errorLog.endpoint")},{key:"group",label:t("admin.ops.errorLog.group")},{key:"type",label:t("admin.ops.errorLog.type")},{key:"category",label:t("usage.errors.category")},{key:"status",label:t("admin.ops.errorLog.status")},{key:"message",label:t("admin.ops.errorLog.message")},{key:"created_at",label:t("admin.ops.errorLog.time")},{key:"user_agent",label:t("usage.userAgent")},{key:"client_ip",label:t("admin.ops.errorLog.ip")},{key:"actions",label:t("admin.ops.errorLog.action")}]),me=De(new Set),ea=z(()=>vt.value.filter(e=>!pt.includes(e.key))),ta=z(()=>vt.value.filter(e=>pt.includes(e.key)||!me.has(e.key)).map(e=>e.key)),aa=e=>{me.has(e)?me.delete(e):me.add(e);try{localStorage.setItem(Mt,JSON.stringify([...me]))}catch(s){console.error("Failed to save error columns:",s)}},sa=()=>{try{const e=localStorage.getItem(Mt);(e?JSON.parse(e):gt).forEach(o=>me.add(o))}catch{gt.forEach(e=>me.add(e))}},la=z(()=>W.value==="errors"?ea.value:Qt.value),oa=e=>W.value==="errors"?!me.has(e):Xt(e),na=e=>W.value==="errors"?aa(e):Zt(e),ra=()=>{try{const e=localStorage.getItem(ot);if(e){JSON.parse(e).forEach(o=>{Z.add(o)});const s=localStorage.getItem(Je);s!==Ye&&(s!==Ql&&Z.add("request_id"),Z.add("upstream_request_id"),localStorage.setItem(ot,JSON.stringify([...Z])),localStorage.setItem(Je,Ye))}else ct.forEach(s=>{Z.add(s)}),localStorage.setItem(Je,Ye)}catch{ct.forEach(e=>{Z.add(e)})}},W=l("usage"),ua=z(()=>[{key:"usage",label:t("usage.tabs.usage"),icon:"document"},{key:"errors",label:t("usage.tabs.errors"),icon:"exclamationTriangle"},{key:"ranking",label:t("usage.tabs.ranking"),icon:"chart"}]),Se=l(null),Xe=l(!1),_t=l(null),ia=e=>{W.value=e,e==="errors"&&je.value.length===0&&$e(),e==="ranking"&&(Xe.value=!0)},je=l([]),Ze=l(!1),Ce=l(1),et=l(20),yt=l(0),ft=l("created_at"),bt=l("desc"),tt=l(!1),ht=l(null),kt=(e,s=!1)=>e?new Date(e+(s?"T23:59:59.999":"T00:00:00")).toISOString():void 0,$e=async()=>{Ze.value=!0;try{const e=await fa({page:Ce.value,page_size:et.value,view:"all",start_time:kt(n.value.start_date),end_time:kt(n.value.end_date,!0),user_id:n.value.user_id??void 0,api_key_id:n.value.api_key_id??void 0,account_id:n.value.account_id??void 0,group_id:n.value.group_id??void 0,model:n.value.model||void 0,phase:n.value.error_phase||void 0,category:n.value.error_category||void 0,status_codes:n.value.status_code!=null?String(n.value.status_code):void 0,sort_by:ft.value,sort_order:bt.value});je.value=e.items,yt.value=e.total}catch(e){console.error("Failed to load admin errors:",e),R.showError(t("usage.errors.failedToLoad"))}finally{Ze.value=!1}},da=(e,s)=>{ft.value=e,bt.value=s,Ce.value=1,$e()},ca=e=>{Ce.value=e,$e()},ma=e=>{et.value=e,Ce.value=1,$e()},pa=e=>{ht.value=e,tt.value=!0},Ge=l(!1),at=l(null),xt=e=>{at.value&&!at.value.contains(e.target)&&(Ge.value=!1)};return Ot(()=>{g(),ce(),re(),we(),Ke(b.value,!0),window.setTimeout(()=>{Be()},120),ra(),sa(),document.addEventListener("click",xt)}),nt(()=>{H==null||H.abort(),Q==null||Q.abort(),document.removeEventListener("click",xt)}),ge(b,e=>{Ke(e)}),te({requestedModelStats:q,refreshData:ut}),(e,s)=>(d(),v(se,null,[x(Ua,null,{default:Re(()=>[a("div",Ul,[x(Ca,{stats:u.value},null,8,["stats"]),a("div",Rl,[a("div",ql,[a("div",El,[a("div",Vl,[a("span",Ll,i(c(t)("admin.dashboard.timeRange"))+":",1),x(Ra,{"start-date":I.value,"onUpdate:startDate":s[0]||(s[0]=o=>I.value=o),"end-date":A.value,"onUpdate:endDate":s[1]||(s[1]=o=>A.value=o),onChange:Fe}
2,null,8,["start-date","end-date"])]),a("div",Fl,[a("span",Ml,i(c(t)("admin.dashboard.granularity"))+":",1),a("div",Il,[x(ee,{modelValue:h.value,"onUpdate:modelValue":s[2]||(s[2]=o=>h.value=o),options:S.value,onChange:Be},null,8,["modelValue","options"])])])])]),a("div",Al,[x(Ia,{source:b.value,"onUpdate:source":s[3]||(s[3]=o=>b.value=o),metric:M.value,"onUpdate:metric":s[4]||(s[4]=o=>M.value=o),"model-stats":q.value,"upstream-model-stats":D.value,"mapping-model-stats":L.value,loading:E.value,"show-source-toggle":!0,"show-metric-toggle":!0,"start-date":I.value,"end-date":A.value,filters:de.value},null,8,["source","metric","model-stats","upstream-model-stats","mapping-model-stats","loading","start-date","end-date","filters"]),x($a,{metric:Y.value,"onUpdate:metric":s[5]||(s[5]=o=>Y.value=o),"group-stats":B.value,loading:N.value,"show-metric-toggle":!0,"start-date":I.value,"end-date":A.value,filters:de.value},null,8,["metric","group-stats","loading","start-date","end-date","filters"])]),a("div",Ol,[x(Aa,{source:ue.value,"onUpdate:source":s[6]||(s[6]=o=>ue.value=o),metric:le.value,"onUpdate:metric":s[7]||(s[7]=o=>le.value=o),"endpoint-stats":oe.value,"upstream-endpoint-stats":ne.value,"endpoint-path-stats":_e.value,loading:ye.value,"show-source-toggle":!0,"show-metric-toggle":!0,title:c(t)("usage.endpointDistribution"),"start-date":I.value,"end-date":A.value,filters:de.value},null,8,["source","metric","endpoint-stats","upstream-endpoint-stats","endpoint-path-stats","loading","title","start-date","end-date","filters"]),x(qa,{"trend-data":K.value,loading:N.value},null,8,["trend-data","loading"])])]),a("div",Nl,[a("div",Pl,[(d(!0),v(se,null,ve(ua.value,o=>(d(),v("button",{key:o.key,type:"button","data-testid":"usage-detail-tab",class:Oe(["-mb-px inline-flex items-center gap-1.5 border-b-2 px-3 py-3 text-sm font-medium transition-colors sm:px-4",W.value===o.key?"border-primary-500 text-primary-600 dark:text-primary-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-dark-500 dark:hover:text-gray-200"]),onClick:k=>ia(o.key)},[x(Lt,{name:o.icon,size:"sm"},null,8,["name"]),We(" "+i(o.label),1)],10,zl))),128))]),x(Pt,{modelValue:n.value,"onUpdate:modelValue":s[9]||(s[9]=o=>n.value=o),ref_key:"usageFiltersRef",ref:Se,flat:"",mode:W.value,class:"border-b border-gray-100 dark:border-dark-700/50","start-date":I.value,"end-date":A.value,exporting:F.value,"model-options":ke.value,onChange:He,onRefresh:ut,onReset:zt,onCleanup:Gt,onExport:Yt},{"after-reset":Re(()=>[W.value!=="ranking"?(d(),v("div",{key:0,class:"relative",ref_key:"columnDropdownRef",ref:at},[a("button",{"data-testid":"usage-column-settings",onClick:s[8]||(s[8]=o=>Ge.value=!Ge.value),class:"btn btn-secondary px-2 md:px-3",title:c(t)("admin.users.columnSettings")},[s[13]||(s[13]=a("svg",{class:"h-4 w-4 md:mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5"},[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 4.5v15m6-15v15m-10.875 0h15.75c.621 0 1.125-.504 1.125-1.125V5.625c0-.621-.504-1.125-1.125-1.125H4.125C3.504 4.5 3 5.004 3 5.625v12.75c0 .621.504 1.125 1.125 1.125z"})],-1)),a("span",Bl,i(c(t)("admin.users.columnSettings")),1)],8,Kl),Ge.value?(d(),v("div",Hl,[(d(!0),v(se,null,ve(la.value,o=>(d(),v("button",{key:o.key,"data-testid":`usage-column-toggle-${o.key}`,onClick:k=>na(o.key),class:"flex w-full items-center justify-between px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[a("span",null,i(o.label),1),oa(o.key)?(d(),Ne(Lt,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):$("",!0)],8,jl))),128))])):$("",!0)],512)):$("",!0)]),_:1},8,["modelValue","mode","start-date","end-date","exporting","model-options"]),Ue(a("div",Gl,[x(Ta,{flat:"",data:r.value,loading:U.value,columns:Wt.value,"server-side-sort":!0,"default-sort-key":"created_at","default-sort-order":"desc",onSort:Ht,onUserClick:xe,onIpGeoBatchFailed:it},null,8,["data","loading","columns"]),J.total>0?(d(),Ne(Nt,{key:0,page:J.page,total:J.total,"page-size":J.page_size,"onUpdate:page":Kt,"onUpdate:pageSize":Bt},null,8,["page","total","page-size"])):$("",!0)],512),[[lt,W.value==="usage"]]),Ue(a("div",Jl,[x(Fa,{flat:"",rows:je.value,total:yt.value,loading:Ze.value,page:Ce.value,"page-size":et.value,"visible-column-keys":ta.value,"user-clickable":"",onUserClick:xe,onOpenErrorDetail:pa,onSort:da,"onUpdate:page":ca,"onUpdate:pageSize":ma,onIpGeoBatchFailed:it},null,8,["rows","total","loading","page","page-size","visible-column-keys"])],512),[[lt,W.value==="errors"]]),Xe.value?Ue((d(),v("div",Yl,[x(il,{ref_key:"rankingRef",ref:_t,"start-
2date":I.value,"end-date":A.value,filters:de.value,model:n.value.model,onSelectUser:m},null,8,["start-date","end-date","filters","model"])],512)),[[lt,W.value==="ranking"]]):$("",!0)]),x(Ma,{show:tt.value,"onUpdate:show":s[10]||(s[10]=o=>tt.value=o),"error-id":ht.value,"error-type":"request"},null,8,["show","error-id"])])]),_:1}),x(Fs,{show:G.show,progress:G.progress,current:G.current,total:G.total,"estimated-time":G.estimatedTime,onCancel:jt},null,8,["show","progress","current","total","estimated-time"]),x(Dl,{show:be.value,filters:n.value,"start-date":I.value,"end-date":A.value,onClose:s[11]||(s[11]=o=>be.value=!1)},null,8,["show","filters","start-date","end-date"]),x(La,{show:V.value,user:X.value,"hide-actions":!0,onClose:s[12]||(s[12]=o=>{V.value=!1,X.value=null})},null,8,["show","user"])],64))}});export{wo as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.