PageSourceSearch

https://mintminer.com/assets/UsageView-BPTBYNTT.js

js mintminer.com collected 2026-10-06 08:10:04 UTC 29,672 bytes, 2 lines download raw bytes

1import{g as Bt,h as je,a as Pt,_ as Pe,a5 as At}from"./index-BB-1BiLf.js";import{k as Ae}from"./AppHeader.vue_vue_type_style_index_0_scoped_80f3916c_lang-CWJeTQGo.js";import{g as Nt,u as G}from"./usage-CJjJuAF_.js";import{u as Kt}from"./groups-lkMFXaQ3.js";import{_ as Gt}from"./AppLayout.vue_vue_type_script_setup_true_lang-DU-NXSvm.js";import{P as He}from"./Pagination-BuZWDbKf.js";import{S as T}from"./Select-unWSiPwC.js";import{D as jt,_ as Ht}from"./TokenUsageTrend.vue_vue_type_script_setup_true_lang-CKoYF9_D.js";import{r as Wt,_ as Yt,a as Jt,b as Qt,g as Xt,c as Zt,d as ea}from"./GroupDistributionChart.vue_vue_type_script_setup_true_lang-BZRKu_PO.js";import{a as ta}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{d as ve,r as i,w as We,D as j,u as n,K as w,z as d,E as U,B as a,G as o,A as J,C as u,c as v,k as c,U as sa,q as oe,o as la,a as oa,F as Ne,V as ra}from"./vendor-vue-Dzwqm9Y9.js";import{D as na}from"./DataTable-BszWCXiN.js";import{_ as ia}from"./EmptyState.vue_vue_type_script_setup_true_lang-DJjIeSM_.js";import{u as _e}from"./vendor-i18n-BuoWFzps.js";import{_ as ua,a as da,s as ca,n as ga,r as ma,b as pa,m as va,C as _a}from"./errorBadges-It0ru3B2.js";import{g as ya}from"./usePersistedPageSize-x0WpaIWh.js";import"./vendor-misc-B-nM3tYW.js";import"./useClipboard-00CrFCqB.js";import"./featureFlags-DuhANbyz.js";import"./LocaleSwitcher-DwqRgoPh.js";/* empty css                                                                       */import"./vendor-chart-BNlN3Otn.js";import"./LoadingSpinner-DZOe8TOe.js";const ba={key:0,class:"flex justify-center py-10"},fa={key:1,class:"py-8 text-center text-sm text-red-500"},ka={key:2,class:"space-y-4 text-sm"},ha={class:"grid grid-cols-2 gap-x-6 gap-y-3"},xa={class:"font-medium text-gray-500 dark:text-dark-400"},wa={class:"mt-0.5 text-gray-900 dark:text-dark-100"},Sa={class:"font-medium text-gray-500 dark:text-dark-400"},Ca={class:"mt-0.5 text-gray-900 dark:text-dark-100"},$a={class:"font-medium text-gray-500 dark:text-dark-400"},Ea={class:"mt-0.5 text-gray-900 dark:text-dark-100"},Da={class:"font-medium text-gray-500 dark:text-dark-400"},Va={class:"mt-0.5"},Ta={class:"font-medium text-gray-500 dark:text-dark-400"},Ua={class:"mt-0.5 text-gray-900 dark:text-dark-100"},Ma={class:"font-medium text-gray-500 dark:text-dark-400"},Ra={class:"mt-0.5 text-gray-900 dark:text-dark-100"},qa={key:0},Fa={class:"font-medium text-gray-500 dark:text-dark-400"},za={class:"mt-0.5 text-gray-900 dark:text-dark-100"},La={key:0},Oa={class:"font-medium text-gray-500 dark:text-dark-400"},Ia={class:"mt-0.5 text-gray-900 dark:text-dark-100 break-all"},Ba={key:1},Pa={class:"font-medium text-gray-500 dark:text-dark-400"},Aa={class:"mt-1 overflow-auto max-h-[40vh] whitespace-pre-wrap break-all rounded-lg bg-gray-50 dark:bg-dark-900 border border-gray-200 dark:border-dark-700 p-3 text-xs text-gray-800 dark:text-dark-200"},Na=ve({__name:"UserErrorDetailModal",props:{show:{type:Boolean},errorId:{}},emits:["update:show"],setup(E,{emit:s}){const k=E,P=s,{t:b}=_e(),g=i(!1),M=i(!1),m=i(null);We(()=>[k.show,k.errorId],([h,f])=>{h&&f!=null?q(f):h||(m.value=null,M.value=!1)});async function q(h){g.value=!0,M.value=!1,m.value=null;try{m.value=await Nt(h)}catch(f){console.error("[UserErrorDetailModal] Failed to load error detail:",f),M.value=!0}finally{g.value=!1}}function F(h){return h>=500?"badge-danger":h===429?"badge-warning":"badge-gray"}return(h,f)=>(u(),j(Bt,{show:E.show,title:n(b)("usage.errors.detail.title"),width:"wide",onClose:f[0]||(f[0]=A=>P("update:show",!1))},{default:w(()=>[g.value?(u(),d("div",ba,[...f[1]||(f[1]=[a("svg",{class:"h-7 w-7 animate-spin text-primary-500",fill:"none",viewBox:"0 0 24 24"},[a("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),a("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1)])])):M.value?(u(),d("div",fa,o(n(b)("usage.errors.detail.loadFailed")),1)):m.value?(u(),d("div",ka,[a("div",ha,[a("div",null,[a("span",xa,o(n(b)("usage.errors.time")),1),a("p",wa,o(n(je)(m.value.created_at)),1)]),a("div",null,[a("span",Sa,o(n(b)("usage.errors.model")),1),a("p",Ca,o(m.value.model||"-"),1)]),a("div",null,[a("span",$a,o(n(b)("usage.errors.endpoint")),1),a("p",Ea,o(m.value.inbound_endpoint||"-"),1)]),a("div",null,[a("span",Da,o(n(b)("usage.errors.status")),1),a("p",Va,[a("span",{class:J(["badge",F(m.value.status_code)])},o(m.value.status_code||"-"),3)])]),a("div",null,[a("span",Ta,o(n(b)("usage.errors.category")),1),a("p",Ua,o(n(b)("usage.errors.categories."+m.value.category)),1)]),a("div",null,[a("span",Ma,o(n(b)("usage.errors.platform")),1),a("p",Ra,o(m.value.platform||"-"),1)]),m.value.upstream_status_code!=null?(u(),d("div",qa,[a("span",Fa,o(n(b)("usage.errors.detail.upstreamStatus")),1),a("p",za,o(m.value.upstream_status_code),1)])):U("",!0)]),m.value.message?(u(),d("div",La,[a("span",Oa,o(n(b)("usage.errors.message")),1),a("p",Ia,o(m.value.message),1)])):U("",!0),m.value.error_body?(u(),d("div",Ba,[a("span",Pa,o(n(b)("usage.errors.detail.responseBody")),1),a("pre",Aa,o(m.value.error_body),1)])):U("",!0)])):U("",!0)]),_:1},8,["show","title"]))}}),Ka={class:"flex min-h-0 flex-1 flex-col"},Ga={class:"card flex min-h-0 flex-1 flex-col overflow-hidden"},ja={key:0,class:"text-sm font-medium text-gray-900 dark:text-white"},Ha={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},Wa={class:"text-sm"},Ya={class:"text-gray-900 dark:text-white"},Ja={key:0,class:"ml-1 inline-flex items-center rounded px-1 py-px text-[10px] font-medium leading-tight bg-rose-100 text-rose-600 ring-1 ring-inset ring-rose-200 dark:bg-rose-500/20 dark:text-rose-400 dark:ring-rose-500/30"},Qa={class:"max-w-[320px] text-xs"},Xa={class:"break-all text-gray-700 dark:text-gray-300"},Za={class:"font-medium text-gray-500 dark:text-gray-400"},es={class:"ml-1"},ts={class:"text-sm text-gray-900 dark:text-white"},as=["title"],ss={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},ls={key:0,class:"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-200"},os={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},rs={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},ns={class:"text-sm text-gray-900 dark:text-white"},is={key:0},us={class:"text-sm font-mono text-gray-600 dark:text-gray-400"},ds={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},cs={class:"text-sm text-gray-600 dark:text-gray-400"},gs=["title"],ms={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},ps={class:"flex-shrink-0"},vs=ve({__name:"UserErrorRequestsTable",props:{rows:{},total:{},loading:{type:Boolean},page:{},pageSize:{},visibleColumnKeys:{}},emits:["update:page","update:pageSize","ipGeoBatchFailed","sort"],setup(E,{emit:s}){const k=E,P=s;function b(x,_){P("sort",va(x),_)}const{t:g}=_e(),M=v(()=>[{key:"key_name",label:g("usage.errors.keyName")},{key:"model",label:g("usage.errors.model"),sortable:!0},{key:"endpoint",label:g("usage.errors.endpoint")},{key:"client_ip",label:"IP"},{key:"group",label:g("admin.usage.group")},{key:"type",label:g("usage.type")},{key:"platform",label:g("usage.errors.platform")},{key:"category",label:g("usage.errors.category")},{key:"status",label:g("usage.errors.status"),sortable:!0},{key:"message",label:g("usage.errors.message")},{key:"created_at",label:g("usage.errors.time"),sortable:!0},{key:"user_agent",label:g("usage.userAgent")}]),m=v(()=>k.visibleColumnKeys?M.value.filter(x=>k.visibleColumnKeys.includes(x.key)):M.value);function q(x){const _=ga(x.request_type,x.stream);return _?{label:g(pa(_)),className:ma(_)}:null}const F=i(!1),h=i(null);function f(x){h.value=x,F.value=!0}const A=ca;return(x,_)=>(u(),d("div",Ka,[a("div",Ga,[c(ua,{ips:E.rows.map(r=>r.client_ip),onFailed:_[0]||(_[0]=r=>P("ipGeoBatchFailed"))},null,8,["ips"]),c(na,{columns:m.value,data:E.rows,loading:E.loading,"clickable-rows":"","server-side-sort":"","default-sort-key":"created_at","default-sort-order":"desc",onSort:b,onRowClick:_[2]||(_[2]=r=>f(r.id))},{"cell-model":w(({row:r})=>[r.model?(u(),d("span",ja,o(r.model),1)):(u(),d("span",Ha,"-"))]),"cell-key_name":w(({row:r})=>[a("div",Wa,[a("span",Ya,o(r.key_name||"-"),1),r.key_deleted?(u(),d("span",Ja,o(n(g)("usage.errors.keyDeleted")),1)):U("",!0)])]),"cell-endpoint":w(({row:r})=>{var L;return[a("div",Qa,[a("div",Xa,[a("span",Za,o(n(g)("usage.inbound"))+":",1),a("span",es,o(((L=r.inbou
1nd_endpoint)==null?void 0:L.trim())||"-"),1)])])]}),"cell-status":w(({row:r})=>[a("span",{class:J(["inline-flex items-center rounded px-2 py-0.5 text-xs font-medium",n(A)(r.status_code)])},o(r.status_code||"-"),3)]),"cell-category":w(({row:r})=>[a("span",ts,o(n(g)("usage.errors.categories."+r.category)),1)]),"cell-message":w(({row:r})=>[r.message?(u(),d("span",{key:0,class:"block max-w-[280px] truncate text-sm text-gray-600 dark:text-gray-400",title:r.message},o(r.message),9,as)):(u(),d("span",ss,"-"))]),"cell-group":w(({row:r})=>[r.group_name?(u(),d("span",ls,o(r.group_name),1)):(u(),d("span",os,"-"))]),"cell-type":w(({row:r})=>[q(r)?(u(),d("span",{key:0,class:J(["inline-flex items-center rounded px-2 py-0.5 text-xs font-medium",q(r).className])},o(q(r).label),3)):(u(),d("span",rs,"-"))]),"cell-platform":w(({row:r})=>[a("span",ns,o(r.platform||"-"),1)]),"cell-client_ip":w(({row:r})=>[a("div",{onClick:_[1]||(_[1]=sa(()=>{},["stop"]))},[r.client_ip?(u(),d("div",is,[a("span",us,o(r.client_ip),1),c(da,{ip:r.client_ip},null,8,["ip"])])):(u(),d("span",ds,"-"))])]),"cell-created_at":w(({row:r})=>[a("span",cs,o(n(je)(r.created_at)),1)]),"cell-user_agent":w(({row:r})=>[r.user_agent?(u(),d("span",{key:0,class:"block max-w-[320px] truncate text-sm text-gray-600 dark:text-gray-400",title:r.user_agent},o(r.user_agent),9,gs)):(u(),d("span",ms,"-"))]),empty:w(()=>[c(ia,{message:n(g)("usage.errors.empty")},null,8,["message"])]),_:1},8,["columns","data","loading"])]),a("div",ps,[E.total>0?(u(),j(He,{key:0,page:E.page,"page-size":E.pageSize,total:E.total,"onUpdate:page":_[3]||(_[3]=r=>x.$emit("update:page",r)),"onUpdate:pageSize":_[4]||(_[4]=r=>x.$emit("update:pageSize",r))},null,8,["page","page-size","total"])):U("",!0)]),c(Na,{show:F.value,"onUpdate:show":_[5]||(_[5]=r=>F.value=r),"error-id":h.value},null,8,["show","error-id"])]))}}),_s={class:"space-y-6"},ys={class:"space-y-4"},bs={class:"card p-4"},fs={class:"flex flex-wrap items-center gap-4"},ks={class:"flex items-center gap-2"},hs={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},xs={class:"ml-auto flex items-center gap-2"},ws={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Ss={class:"w-28"},Cs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},$s={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Es={class:"card p-6"},Ds={class:"flex flex-wrap items-end justify-between gap-4"},Vs={key:0,class:"flex flex-1 flex-wrap items-end gap-4"},Ts={class:"w-full sm:w-auto sm:min-w-[220px]"},Us={class:"input-label"},Ms={class:"w-full sm:w-auto sm:min-w-[220px]"},Rs={class:"input-label"},qs={class:"w-full sm:w-auto sm:min-w-[200px]"},Fs={class:"input-label"},zs={class:"w-full sm:w-auto sm:min-w-[180px]"},Ls={class:"input-label"},Os={key:1,class:"flex flex-1 flex-wrap items-end gap-4"},Is={class:"w-full sm:w-auto sm:min-w-[220px]"},Bs={class:"input-label"},Ps={class:"w-full sm:w-auto sm:min-w-[220px]"},As={class:"input-label"},Ns={class:"w-full sm:w-auto sm:min-w-[200px]"},Ks={class:"input-label"},Gs={class:"w-full sm:w-auto sm:min-w-[180px]"},js={class:"input-label"},Hs={class:"w-full sm:w-auto sm:min-w-[180px]"},Ws={class:"input-label"},Ys={class:"w-full sm:w-auto sm:min-w-[200px]"},Js={class:"input-label"},Qs={class:"w-full sm:w-auto sm:min-w-[200px]"},Xs={class:"input-label"},Zs={class:"flex w-full flex-wrap items-center justify-end gap-3 sm:w-auto"},el=["disabled"],tl=["title"],al={class:"hidden md:inline"},sl={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"},ll=["data-testid","onClick"],ol=["disabled"],rl={key:0,class:"flex gap-2 border-b border-gray-200 dark:border-dark-700"},Ke="user-usage-hidden-columns",Ge="user-usage-error-hidden-columns",Ul=ve({__name:"UsageView",setup(E){const{t:s}=_e(),k=Pt(),P=i(null),b=i([]),g=i([]),M=i([]),m=i([]),q=i([]),F=i([]),h=i([]),f=i(!1),A=i(!1),x=i(!1),_=i(!1),r=i(!1),L=i([]),Q=i(!1),N=i(1),re=i(20),ye=i("created_at"),be=i("desc"),ne=i(0),$=i({model:"",category:"",api_key_id:null,status_code:null}),Ye=v(()=>[{value:null,label:s("usage.errors.allKeys")},...de.value.map(e=>({value:e.id,label:e.name}))]),Je=v(()=>{const e=new Set,t=[];for(const l of L.value)l.model&&!e.has(l.model)&&(e.add(l.model),t.push({value:l.model,label:l.model}));return t}
1),Qe=["auth","rate_limit","quota","invalid_request","service_unavailable","upstream","internal","cyber"],Xe=v(()=>[{value:"",label:s("usage.errors.allCategories")},...Qe.map(e=>({value:e,label:s("usage.errors.categories."+e)}))]),Ze=v(()=>[{value:null,label:s("usage.errors.allStatuses")},..._a.map(e=>({value:e,label:String(e)}))]),H=()=>{N.value=1,K()};let O=null,X=0,Z=0,ee=0;const fe=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,ke=()=>{const e=new Date,t=new Date(e.getTime()-24*60*60*1e3);return{start:fe(t),end:fe(e)}},ie=(e,t)=>{const l=new Date(`${e}T00:00:00`).getTime(),R=new Date(`${t}T00:00:00`).getTime();return Math.ceil((R-l)/(1e3*60*60*24))<=1?"hour":"day"},he=ke(),D=i(he.start),V=i(he.end),W=i(ie(D.value,V.value)),xe=i("tokens"),we=i("tokens"),Se=i("tokens"),ue=i("inbound"),S=i("usage"),Ce=v(()=>{var e;return((e=k.cachedPublicSettings)==null?void 0:e.allow_user_view_error_requests)??!1}),y=i({start_date:D.value,end_date:V.value,request_type:void 0,native_compaction_v2:null,billing_type:null,billing_mode:null}),C=oe({page:1,page_size:ya(),total:0}),te=oe({sort_by:"created_at",sort_order:"desc"}),et=v(()=>[{value:"day",label:s("admin.dashboard.day")},{value:"hour",label:s("admin.dashboard.hour")}]),tt=v(()=>[{value:null,label:s("admin.usage.allTypes")},{value:"ws_v2",label:s("usage.ws")},{value:"live",label:s("usage.live")},{value:"stream",label:s("usage.stream")},{value:"sync",label:s("usage.sync")}]),at=v(()=>[{value:null,label:s("usage.allCompactionTypes")},{value:!0,label:s("usage.compactionOnly")}]),st=v(()=>[{value:null,label:s("admin.usage.allBillingTypes")},{value:0,label:s("admin.usage.billingTypeBalance")},{value:1,label:s("admin.usage.billingTypeSubscription")}]),lt=v(()=>[{value:null,label:s("admin.usage.allBillingModes")},{value:"token",label:s("admin.usage.billingModeToken")},{value:"per_request",label:s("admin.usage.billingModePerRequest")},{value:"image",label:s("admin.usage.billingModeImage")},{value:"video",label:s("admin.usage.billingModeVideo")}]),de=i([]),$e=i([]),ce=i([]),ot=v(()=>[{value:null,label:s("usage.allApiKeys")},...de.value.map(e=>({value:e.id,label:e.name}))]),rt=v(()=>[{value:null,label:s("admin.usage.allGroups")},...$e.value.map(e=>({value:e.id,label:e.name}))]),nt=v(()=>[{value:null,label:s("admin.usage.allModels")},...ce.value.map(e=>({value:e,label:e}))]),ae=v(()=>{const e=y.value.request_type,t=e?Wt(e):y.value.stream;return{...y.value,start_date:D.value,end_date:V.value,stream:t===null?void 0:t}}),Ee=(e,t)=>({page:e,page_size:t,...ae.value,sort_by:te.sort_by,sort_order:te.sort_order}),Y=async()=>{O==null||O.abort();const e=new AbortController;O=e,f.value=!0;try{const t=await G.query(Ee(C.page,C.page_size),{signal:e.signal});e.signal.aborted||(b.value=t.items,C.total=t.total)}catch(t){(t==null?void 0:t.name)!=="AbortError"&&(t==null?void 0:t.code)!=="ERR_CANCELED"&&k.showError(s("usage.failedToLoad"))}finally{O===e&&(f.value=!1)}},De=async()=>{const e=++Z;_.value=!0;try{const t=await G.getStats(ae.value);if(e!==Z)return;P.value=t,q.value=t.endpoints||[],F.value=[],h.value=[]}catch(t){if(e!==Z)return;console.error("Failed to load usage stats:",t),q.value=[],F.value=[],h.value=[]}finally{e===Z&&(_.value=!1)}},Ve=async()=>{const e=++ee;x.value=!0;try{const t=await G.getDashboardModels({...ae.value,model_source:"requested"});if(e!==ee)return;M.value=t.models||[],it(t.models||[])}catch(t){if(e!==ee)return;console.error("Failed to load model stats:",t),M.value=[]}finally{e===ee&&(x.value=!1)}},ge=async()=>{const e=++X;A.value=!0;try{const t=await G.getDashboardSnapshotV2({...ae.value,granularity:W.value,include_trend:!0,include_model_stats:!1,include_group_stats:!0});if(e!==X)return;g.value=t.trend||[],m.value=t.groups||[]}catch(t){if(e!==X)return;console.error("Failed to load chart data:",t),g.value=[],m.value=[]}finally{e===X&&(A.value=!1)}},it=e=>{const t=y.value.model,l=new Set(ce.value);e.forEach(R=>{R.model&&l.add(R.model)}),t&&l.add(t),ce.value=Array.from(l).sort()},z=()=>{C.page=1,Y(),De(),Ve(),ge(),Mt()},Te=()=>{Y(),De(),Ve(),ge(),S.value==="errors"&&K()},ut=()=>{const e=ke();D.value=e.start,V.value=e.end,y.value={start_date:e.start,end_date:e.end,request_type:void 0,native_compaction_v2:null,billing_type:null,billing_mode:null},W.value=ie(e.start,e.end),z(),S.value==="errors"&&($.value={model:"",category:"",api_key_id:null,
1status_code:null},H())},dt=e=>{D.value=e.startDate,V.value=e.endDate,y.value.start_date=e.startDate,y.value.end_date=e.endDate,W.value=ie(e.startDate,e.endDate),z()},ct=e=>{C.page=e,Y()},gt=e=>{C.page_size=e,C.page=1,Y()},mt=(e,t)=>{te.sort_by=e,te.sort_order=t,C.page=1,Y()},Ue=()=>{k.showError(s("usage.ipGeo.batchFailed"))},pt=e=>{const t=ea(e);return t==="cyber"?"Cyber":t==="live"?"Live":t==="ws_v2"?"WS":t==="stream"?"Stream":t==="sync"?"Sync":"Unknown"},vt=e=>Zt(e),Me=e=>{if(e==null)return"";const t=String(e),l=t.replace(/"/g,'""');return/^[=+\-@\t\r]/.test(t)?`"'${l}"`:/[,"\n\r]/.test(t)?`"${l}"`:t},_t=async()=>{if(C.total===0){k.showWarning(s("usage.noDataToExport"));return}r.value=!0,k.showInfo(s("usage.preparingExport"));try{const e=[],l=Math.ceil(C.total/100);for(let p=1;p<=l;p++){const le=await G.query(Ee(p,100));e.push(...le.items)}if(e.length===0){k.showWarning(s("usage.noDataToExport"));return}const R=["Time","API Key Name","Model","Reasoning Effort","Inbound Endpoint","IP Address","Type","Billing Mode","Input Tokens","Output Tokens","Cache Read Tokens","Cache Creation Tokens","Rate Multiplier","Billed Cost","Original Cost","First Token (ms)","Duration (ms)"],Lt=e.map(p=>{var le;return[p.created_at,((le=p.api_key)==null?void 0:le.name)||"",p.model,At(p.reasoning_effort),p.inbound_endpoint||"",p.ip_address||"",pt(p),Xt(vt(p),s),p.input_tokens,p.output_tokens,p.cache_read_tokens,p.cache_creation_tokens,p.rate_multiplier,p.actual_cost.toFixed(8),p.total_cost.toFixed(8),p.first_token_ms??"",p.duration_ms??""].map(Me)}),Ot=[R.map(Me).join(","),...Lt.map(p=>p.join(","))].join(`
2`),It=new Blob(["\uFEFF"+Ot],{type:"text/csv;charset=utf-8;"}),Be=window.URL.createObjectURL(It),pe=document.createElement("a");pe.href=Be,pe.download=`usage_${D.value}_to_${V.value}.csv`,pe.click(),window.URL.revokeObjectURL(Be),k.showSuccess(s("usage.exportSuccess"))}catch(e){console.error("CSV Export failed:",e),k.showError(s("usage.exportFailed"))}finally{r.value=!1}},Re=["created_at"],qe=["user_agent"],Fe=v(()=>[{key:"api_key",label:s("usage.apiKeyFilter"),sortable:!1},{key:"model",label:s("usage.model"),sortable:!0},{key:"reasoning_effort",label:s("usage.reasoningEffort"),sortable:!1},{key:"endpoint",label:s("usage.endpoint"),sortable:!1},{key:"ip_address",label:"IP",sortable:!1},{key:"group",label:s("admin.usage.group"),sortable:!1},{key:"stream",label:s("usage.type"),sortable:!1},{key:"billing_mode",label:s("admin.usage.billingMode"),sortable:!1},{key:"tokens",label:s("usage.tokens"),sortable:!1},{key:"cost",label:s("usage.cost"),sortable:!1},{key:"latency",label:s("usage.latency"),sortable:!1},{key:"created_at",label:s("usage.time"),sortable:!0},{key:"user_agent",label:s("usage.userAgent"),sortable:!1}]),I=oe(new Set),yt=v(()=>Fe.value.filter(e=>!Re.includes(e.key))),bt=v(()=>Fe.value.filter(e=>Re.includes(e.key)||!I.has(e.key))),ft=e=>!I.has(e),kt=e=>{I.has(e)?I.delete(e):I.add(e),localStorage.setItem(Ke,JSON.stringify([...I]))},ht=()=>{try{const e=localStorage.getItem(Ke);(e?JSON.parse(e):qe).forEach(l=>I.add(l))}catch{qe.forEach(e=>I.add(e))}},ze=["status","created_at"],Le=["user_agent"],Oe=v(()=>[{key:"key_name",label:s("usage.errors.keyName")},{key:"model",label:s("usage.errors.model")},{key:"endpoint",label:s("usage.errors.endpoint")},{key:"client_ip",label:"IP"},{key:"group",label:s("admin.usage.group")},{key:"type",label:s("usage.type")},{key:"platform",label:s("usage.errors.platform")},{key:"category",label:s("usage.errors.category")},{key:"status",label:s("usage.errors.status")},{key:"message",label:s("usage.errors.message")},{key:"created_at",label:s("usage.errors.time")},{key:"user_agent",label:s("usage.userAgent")}]),B=oe(new Set),xt=v(()=>Oe.value.filter(e=>!ze.includes(e.key))),wt=v(()=>Oe.value.filter(e=>ze.includes(e.key)||!B.has(e.key)).map(e=>e.key)),St=e=>!B.has(e),Ct=e=>{B.has(e)?B.delete(e):B.add(e),localStorage.setItem(Ge,JSON.stringify([...B]))},$t=()=>{try{const e=localStorage.getItem(Ge);(e?JSON.parse(e):Le).forEach(l=>B.add(l))}catch{Le.forEach(e=>B.add(e))}},Et=v(()=>S.value==="errors"?xt.value:yt.value),Dt=e=>S.value==="errors"?St(e):ft(e),Vt=e=>{S.value==="errors"?Ct(e):kt(e)},se=i(!1),me=i(null),Ie=e=>{me.value&&!me.value.contains(e.target)&&(se.value=!1)},Tt=async()=>{const e=await Ae.list(1,100),t=[...e.items];for(let l=2;l<=e.pages&&t.length>0;l++){const R=await Ae.list(l,100);if(R.items.length===0)break;t.push(...R.items)}return t},Ut=async()=>{try{const[e,t]=await Promise.all([Tt(),Kt.getAvailable()]);de.value=e,$e.value=t}catch(e){console.error("Failed to load usage filter options:",e)}},Mt=()=>{N.value=1,S.value==="errors"?K():(L.value=[],ne.value=0)},K=async()=>{Q.value=!0;try{const e=await G.listMyErrorRequests({page:N.value,page_size:re.value,start_date:D.value,end_date:V.value,model:($.value.model??"").trim()||void 0,category:$.value.category||void 0,api_key_id:$.value.a
2pi_key_id??void 0,status_code:$.value.status_code??void 0,sort_by:ye.value,sort_order:be.value});L.value=e.items,ne.value=e.total}catch(e){console.error("[UsageView] loadErrors failed:",e),k.showError(s("usage.errors.failedToLoad"))}finally{Q.value=!1}},Rt=(e,t)=>{ye.value=e,be.value=t,N.value=1,K()},qt=e=>{N.value=e,K()},Ft=e=>{re.value=e,N.value=1,K()},zt=()=>{S.value="errors",L.value.length===0&&K()};return la(()=>{ht(),$t(),document.addEventListener("click",Ie),Ut(),Te()}),oa(()=>{O==null||O.abort(),document.removeEventListener("click",Ie)}),We(ue,()=>{}),(e,t)=>(u(),j(Gt,null,{default:w(()=>[a("div",_s,[c(Yt,{stats:P.value,"show-account-cost":!1,"strike-standard-cost":!0},null,8,["stats"]),a("div",ys,[a("div",bs,[a("div",fs,[a("div",ks,[a("span",hs,o(n(s)("admin.dashboard.timeRange"))+":",1),c(jt,{"start-date":D.value,"onUpdate:startDate":t[0]||(t[0]=l=>D.value=l),"end-date":V.value,"onUpdate:endDate":t[1]||(t[1]=l=>V.value=l),onChange:dt},null,8,["start-date","end-date"])]),a("div",xs,[a("span",ws,o(n(s)("admin.dashboard.granularity"))+":",1),a("div",Ss,[c(T,{modelValue:W.value,"onUpdate:modelValue":t[2]||(t[2]=l=>W.value=l),options:et.value,onChange:ge},null,8,["modelValue","options"])])])])]),a("div",Cs,[c(ta,{metric:xe.value,"onUpdate:metric":t[3]||(t[3]=l=>xe.value=l),"model-stats":M.value,loading:x.value,"show-source-toggle":!1,"show-metric-toggle":!0,"enable-breakdown":!1,"show-account-cost":!1,"start-date":D.value,"end-date":V.value},null,8,["metric","model-stats","loading","start-date","end-date"]),c(Jt,{metric:we.value,"onUpdate:metric":t[4]||(t[4]=l=>we.value=l),"group-stats":m.value,loading:A.value,"show-metric-toggle":!0,"enable-breakdown":!1,"show-account-cost":!1,"start-date":D.value,"end-date":V.value},null,8,["metric","group-stats","loading","start-date","end-date"])]),a("div",$s,[c(aa,{source:ue.value,"onUpdate:source":t[5]||(t[5]=l=>ue.value=l),metric:Se.value,"onUpdate:metric":t[6]||(t[6]=l=>Se.value=l),"endpoint-stats":q.value,"upstream-endpoint-stats":F.value,"endpoint-path-stats":h.value,loading:_.value,"show-source-toggle":!1,"show-metric-toggle":!0,"enable-breakdown":!1,title:n(s)("usage.endpointDistribution"),"start-date":D.value,"end-date":V.value},null,8,["source","metric","endpoint-stats","upstream-endpoint-stats","endpoint-path-stats","loading","title","start-date","end-date"]),c(Ht,{"trend-data":g.value,loading:A.value},null,8,["trend-data","loading"])])]),a("div",Es,[a("div",Ds,[S.value==="errors"?(u(),d("div",Vs,[a("div",Ts,[a("label",Us,o(n(s)("usage.errors.keyName")),1),c(T,{modelValue:$.value.api_key_id,"onUpdate:modelValue":t[7]||(t[7]=l=>$.value.api_key_id=l),options:Ye.value,onChange:H},null,8,["modelValue","options"])]),a("div",Ms,[a("label",Rs,o(n(s)("usage.errors.model")),1),c(T,{modelValue:$.value.model,"onUpdate:modelValue":t[8]||(t[8]=l=>$.value.model=l),options:Je.value,searchable:"",creatable:"",clearable:"",placeholder:n(s)("usage.errors.modelPlaceholder"),onChange:H},null,8,["modelValue","options","placeholder"])]),a("div",qs,[a("label",Fs,o(n(s)("usage.errors.category")),1),c(T,{modelValue:$.value.category,"onUpdate:modelValue":t[9]||(t[9]=l=>$.value.category=l),options:Xe.value,onChange:H},null,8,["modelValue","options"])]),a("div",zs,[a("label",Ls,o(n(s)("usage.errors.status")),1),c(T,{modelValue:$.value.status_code,"onUpdate:modelValue":t[10]||(t[10]=l=>$.value.status_code=l),options:Ze.value,onChange:H},null,8,["modelValue","options"])])])):(u(),d("div",Os,[a("div",Is,[a("label",Bs,o(n(s)("usage.apiKeyFilter")),1),c(T,{modelValue:y.value.api_key_id,"onUpdate:modelValue":t[11]||(t[11]=l=>y.value.api_key_id=l),options:ot.value,onChange:z},null,8,["modelValue","options"])]),a("div",Ps,[a("label",As,o(n(s)("usage.model")),1),c(T,{modelValue:y.value.model,"onUpdate:modelValue":t[12]||(t[12]=l=>y.value.model=l),options:nt.value,searchable:"",onChange:z},null,8,["modelValue","options"])]),a("div",Ns,[a("label",Ks,o(n(s)("admin.usage.group")),1),c(T,{modelValue:y.value.group_id,"onUpdate:modelValue":t[13]||(t[13]=l=>y.value.group_id=l),options:rt.value,searchable:"",onChange:z},null,8,["modelValue","options"])]),a("div",Gs,[a("label",js,o(n(s)("usage.type")),1),c(T,{modelValue:y.value.request_type,"onUpdate:modelValue":t[14]||(t[14]=l=>y.value.request_type=l),options:tt.value,onChange:z},null,8,["modelValue","options"])]),a("div",Hs,[a("label",Ws,o(n(s)("usage.compactionFilter")),1),c(T,{modelValue:y.value.native_compaction_v2,"onUpdate:modelValue":t[15]||(t[15]=l=>y.value.native_compaction_v2=l),options:at.value,onChange:z},null,8,["modelValue","options"])]),a("div",Ys,[a("label",Js,o(n(s)("admin.usage.billingType")),1),c(T,{modelValue:y.value.billing_type,"onUpdate:modelValue":t[16]||(t[16]=l=>y.value.billing_type=l),options:st.value,onChange:z},null,8,["modelValue","options"])]),a("div",Qs,[a("label",Xs,o(n(s)("admin.usage.billingMode")),1),c(T,{modelValue:y.value.billing_mode,"onUpdate:modelValue":t[17]||(t[17]=l=>y.value.billing_mode=l),options:lt.value,onChange:z},null,8,["modelValue","options"])])])),a("div",Zs,[a("button",{type:"button",onClick:Te,disabled:S.value==="errors"?Q.value:f.value,class:"btn btn-secondary"},o(n(s)("common.refresh")),9,el),a("button",{type:"button",onClick:ut,class:"btn btn-secondary"},o(n(s)("common.reset")),1),a("div",{class:"relative",ref_key:"columnDropdownRef",ref:me},[a("button",{type:"button","data-testid":"usage-column-settings",onClick:t[18]||(t[18]=l=>se.value=!se.value),class:"btn btn-secondary px-2 md:px-3",title:n(s)("admin.users.columnSettings")},[c(Pe,{name:"grid",size:"sm"}),a("span",al,o(n(s)("admin.users.columnSettings")),1)],8,tl),se.value?(u(),d("div",sl,[(u(!0),d(Ne,null,ra(Et.value,l=>(u(),d("button",{key:l.key,type:"button","data-testid":`usage-column-toggle-${l.key}`,onClick:R=>Vt(l.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,o(l.label),1),Dt(l.key)?(u(),j(Pe,{key:0,name:"check",size:"sm",class:"text-primary-500"})):U("",!0)],8,ll))),128))])):U("",!0)],512),S.value!=="errors"?(u(),d("button",{key:0,t
2ype:"button",onClick:_t,disabled:r.value,class:"btn btn-primary"},o(r.value?n(s)("usage.exporting"):n(s)("usage.exportCsv")),9,ol)):U("",!0)])])]),Ce.value?(u(),d("div",rl,[a("button",{class:J(["tab",{"tab-active":S.value==="usage"}]),onClick:t[19]||(t[19]=l=>S.value="usage")},o(n(s)("usage.tabs.usage")),3),a("button",{class:J(["tab",{"tab-active":S.value==="errors"}]),onClick:zt},o(n(s)("usage.tabs.errors")),3)])):U("",!0),S.value==="usage"?(u(),d(Ne,{key:1},[c(Qt,{data:b.value,loading:f.value,columns:bt.value,"server-side-sort":!0,"show-account-billing":!1,"show-upstream-endpoint":!1,"default-sort-key":"created_at","default-sort-order":"desc",onSort:mt,onIpGeoBatchFailed:Ue},null,8,["data","loading","columns"]),C.total>0?(u(),j(He,{key:0,page:C.page,total:C.total,"page-size":C.page_size,"onUpdate:page":ct,"onUpdate:pageSize":gt},null,8,["page","total","page-size"])):U("",!0)],64)):Ce.value?(u(),j(vs,{key:2,rows:L.value,total:ne.value,loading:Q.value,page:N.value,"page-size":re.value,"visible-column-keys":wt.value,onSort:Rt,"onUpdate:page":qt,"onUpdate:pageSize":Ft,onIpGeoBatchFailed:Ue},null,8,["rows","total","loading","page","page-size","visible-column-keys"])):U("",!0)])]),_:1}))}});export{Ul 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.