import{n as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,E as n,Ht as r,On as i,_ as a,b as o,g as s,it as c,k as l,mt as u,o as d,pn as f,qt as p,tr as m,tt as h,v as g,vn as _,xn as v,y}from"./runtime-core.esm-bundler-DkysjgTd.js";import{t as b}from"./runtime-dom.esm-bundler-CirRHyjC.js";import{t as x}from"./objectSpread2-BmonrgTA.js";import{n as S}from"./objectWithoutProperties-BjoYlK0I.js";import{a as C}from"./store-B2VrBUyT.js";import{r as w}from"./en_US-Cv9hrLhb.js";import{$ as T,G as E,Tt as D,U as O,W as k,X as A,Y as ee,a as te,g as j,l as M,m as N,q as P,t as F,u as ne,vt as I}from"./useConfigInject-z_xeO0pP.js";import{t as re}from"./initDefaultProps-D8Mki4gM.js";import{t as L}from"./table-Do98iBZ3.js";import{m as ie,p as ae}from"./console-2d_MKq1R.js";import{n as oe,r as se}from"./collapseMotion-BfalGvoQ.js";import{t as R}from"./alert-CkUknOsQ.js";import{t as z}from"./button-B2y2NpJm.js";import{t as B}from"./card-D3WO92mr.js";import{n as V,r as H,t as ce}from"./row-BAbkSA0m.js";import{t as U}from"./tag-BFecLZmQ.js";import{t as le}from"./progress-Br8rQILc.js";function W(e,t){return{[`${e}, ${e}:hover, ${e}:focus`]:{color:t.colorTextDisabled,cursor:`not-allowed`}}}function G(e){return{backgroundColor:e.bgColorSelected,boxShadow:e.boxShadow}}var ue=w({overflow:`hidden`},j),de=e=>{let{componentCls:t}=e;return{[t]:w(w(w(w(w({},N(e)),{display:`inline-block`,padding:e.segmentedContainerPadding,color:e.labelColor,backgroundColor:e.bgColor,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`,[`${t}-group`]:{position:`relative`,display:`flex`,alignItems:`stretch`,justifyItems:`flex-start`,width:`100%`},[`&${t}-rtl`]:{direction:`rtl`},[`&${t}-block`]:{display:`flex`},[`&${t}-block ${t}-item`]:{flex:1,minWidth:0},[`${t}-item`]:{position:`relative`,textAlign:`center`,cursor:`pointer`,transition:`color ${e.motionDurationMid} ${e.motionEaseInOut}`,borderRadius:e.borderRadiusSM,"&-selected":w(w({},G(e)),{color:e.labelColorHover}),"&::after":{content:`""`,position:`absolute`,width:`100%`,height:`100%`,top:0,insetInlineStart:0,borderRadius:`inherit`,transition:`background-color ${e.motionDurationMid}`,pointerEvents:`none`},[`&:hover:not(${t}-item-selected):not(${t}-item-disabled)`]:{color:e.labelColorHover,"&::after":{backgroundColor:e.bgColorHover}},"&-label":w({minHeight:e.controlHeight-e.segmentedContainerPadding*2,lineHeight:`${e.controlHeight-e.segmentedContainerPadding*2}px`,padding:`0 ${e.segmentedPaddingHorizontal}px`},ue),"&-icon + *":{marginInlineStart:e.marginSM/2},"&-input":{position:`absolute`,insetBlockStart:0,insetInlineStart:0,width:0,height:0,opacity:0,pointerEvents:`none`}},[`${t}-thumb`]:w(w({},G(e)),{position:`absolute`,insetBlockStart:0,insetInlineStart:0,width:0,height:`100%`,padding:`${e.paddingXXS}px 0`,borderRadius:e.borderRadiusSM,[`& ~ ${t}-item:not(${t}-item-selected):not(${t}-item-disabled)::after`]:{backgroundColor:`transparent`}}),[`&${t}-lg`]:{borderRadius:e.borderRadiusLG,[`${t}-item-label`]:{minHeight:e.controlHeightLG-e.segmentedContainerPadding*2,lineHeight:`${e.controlHeightLG-e.segmentedContainerPadding*2}px`,padding:`0 ${e.segmentedPaddingHorizontal}px`,fontSize:e.fontSizeLG},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadius}},[`&${t}-sm`]:{borderRadius:e.borderRadiusSM,[`${t}-item-label`]:{minHeight:e.controlHeightSM-e.segmentedContainerPadding*2,lineHeight:`${e.controlHeightSM-e.segmentedContainerPadding*2}px`,padding:`0 ${e.segmentedPaddingHorizontalSM}px`},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadiusXS}}}),W(`&-disabled ${t}-item`,e)),W(`${t}-item-disabled`,e)),{[`${t}-thumb-motion-appear-active`]:{transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOut}, width ${e.motionDurationSlow} ${e.motionEaseInOut}`,willChange:`transform, width`}})}},fe=ne(`Segmented`,e=>{let{lineWidthBold:t,lineWidth:n,colorTextLabel:r,colorText:i,colorFillSecondary:a,colorBgLayout:o,colorBgElevated:s}=e;return[de(M(e,{segmentedPaddingHorizontal:e.controlPaddingHorizontal-n,segmentedPaddingHorizontalSM:e.controlPaddingHorizontalSM-n,segmentedContainerPadding:t,labelColor:r,labelColorHover:i,bgColor:o,bgColorHover:a,bgColorSelected:s}))]}),K=e=>e?{left:e.offsetLeft,right:e.parentElement.clientWidth-e.clientWidth-e.offsetLeft,width:e.clientWidth}:null,q=e=>e===void 0?void 0:`${e}px`,pe=l({props:{value:O(),getValueIndex:O(),prefixCls:O(),motionName:O(),onMotionStart:O(),onMotionEnd:O(),direction:O(),containerRef:O()},emits:[`motionStart`,`motionEnd`],setup(e,n){let{emit:i}=n,a=_(),o=t=>{var n;let r=e.getValueIndex(t),i=(n=e.containerRef.value)==null?void 0:n.querySelectorAll(`.${e.prefixCls}-item`)[r];return(i==null?void 0:i.offsetParent)&&i},l=_(null),u=_(null);r(()=>e.value,(e,t)=>{let n=o(t),r=o(e),a=K(n),s=K(r);l.value=a,u.value=s,i(n&&r?`motionStart`:`motionEnd`)},{flush:`post`});let d=s(()=>{var t,n;return e.direction===`rtl`?q(-((t=l.value)==null?void 0:t.right)):q((n=l.value)==null?void 0:n.left)}),f=s(()=>{var t,n;return e.direction===`rtl`?q(-((t=u.value)==null?void 0:t.right)):q((n=u.value)==null?void 0:n.left)}),p,m=e=>{clearTimeout(p),h(()=>{e&&(e.style.transform=`translateX(var(--thumb-start-left))`,e.style.width=`var(--thumb-start-width)`)})},g=t=>{p=setTimeout(()=>{t&&(oe(t,`${e.motionName}-appear-active`),t.style.transform=`translateX(var(--thumb-active-left))`,t.style.width=`var(--thumb-active-width)`)})},v=t=>{l.value=null,u.value=null,t&&(t.style.transform=null,t.style.width=null,se(t,`${e.motionName}-appear-active`)),i(`motionEnd`)},y=s(()=>{var e,t;return{"--thumb-start-left":d.value,"--thumb-start-width":q((e=l.value)==null?void 0:e.width),"--thumb-active-left":f.value,"--thumb-active-width":q((t=u.value)==null?void 0:t.width)}});return c(()=>{clearTimeout(p)}),()=>{let n={ref:a,style:y.value,class:[`${e.prefixCls}-thumb`]};return t(b,{appear:!0,onBeforeEnter:m,onEnter:g,onAfterEnter:v},{default:()=>[!l.value||!u.value?null:t(`div`,n,null)]})}}});function me(e){return e.map(e=>typeof e==`object`&&e?e:{label:e==null?void 0:e.toString(),title:e==null?void 0:e.toString(),value:e})}var he=()=>({prefixCls:String,options:k(),block:E(),disabled:E(),size:A(),value:w(w({},ee([String,Number])),{required:!0}),motionName:String,onChange:P(),"onUpdate:value":P()}),J=(e,n)=>{let{slots:r,emit:i}=n,{value:a,disabled:o,payload:s,title:c,prefixCls:l,label:u=r.label,checked:d,className:f}=e,p=e=>{o||i(`change`,e,a)};return t(`label`,{class:I({[`${l}-item-disabled`]:o},f)},[t(`input`,{class:`${l}-item-input`,type:`radio`,disabled:o,checked:d,onChange:p},null),t(`div`,{class:`${l}-item-label`,title:typeof c==`string`?c:``},[typeof u==`function`?u({value:a,disabled:o,payload:s,title:c}):u==null?a:u])])};J.inheritAttrs=!1;var ge=l({name:`ASegmented`,inheritAttrs:!1,props:re(he(),{options:[],motionName:`thumb-motion`}),slots:Object,setup(e,n){let{emit:r,slots:i,attrs:a}=n,{prefixCls:o,direction:c,size:l}=F(`segmented`,e),[u,d]=fe(o),f=v(),p=v(!1),m=s(()=>me(e.options)),h=(t,n)=>{e.disabled||(r(`update:value`,n),r(`change`,n))};return()=>{let n=o.value;return u(t(`div`,D(D({},a),{},{class:I(n,{[d.value]:!0,[`${n}-block`]:e.block,[`${n}-disabled`]:e.disabled,[`${n}-lg`]:l.value==`large`,[`${n}-sm`]:l.value==`small`,[`${n}-rtl`]:c.value===`rtl`},a.class),ref:f}),[t(`div`,{class:`${n}-group`},[t(pe,{containerRef:f,prefixCls:n,value:e.value,motionName:`${n}-${e.motionName}`,direction:c.value,getValueIndex:e=>m.value.findIndex(t=>t.value===e),onMotionStart:()=>{p.value=!0},onMotionEnd:()=>{p.value=!1}},null),m.value.map(r=>t(J,D(D({key:r.value,prefixCls:n,checked:r.value===e.value,onChange:h},r),{},{className:I(r.className,`${n}-item`,{[`${n}-item-selected`]:r.value===e.value&&!p.value}),disabled:!!e.disabled||!!r.disabled}),i))])]))}}}),Y=T(ge);function X(e,t=`未返回`){return typeof e==`number`&&Number.isFinite(e)?e.toLocaleString(`zh-CN`):t}function Z(e,t){return e?X(e[String(t)]):`—`}function Q(e){return{chat:`客服回答与裁判`,guard:`界面检测`,knowledge:`知识整理`}[e]||e||`未标记`}function _e(e){if(!e)return`—`;let t=e.trim().replace(` `,`T`),n=new Date(/(?:Z|[+-]\d{2}:?\d{2})$/i.test(t)?t:`${t}Z`);return Number.isNaN(n.getTime())?e:n.toISOString().slice(0,19).replace(`T`,` `)}function $(){let e=v(null),t=_(!1),n=_(``),r;function i(){r==null||r.abort(),r=void 0,t.value=!1}function a(e){return o.apply(this,arguments)}function o(){return o=S(function*(a){i();let o=new AbortController;r=o,e.value=null,n.value=``,t.value=!0;try{let t=yield a(o.signal);r===o&&!o.signal.aborted&&(e.value=t)}catch(e){r===o&&!o.signal.aborted&&(n.value=C(e,`加载失败,请稍后重试`))}finally{r===o&&(t.value=!1)}}),o.apply(this,arguments)}return f(i),{cancel:i,data:e,error:n,loading:t,run:a}}var ve={class:`mb-4 rounded border border-gray-200 p-3 dark:border-gray-700`},ye={class:`flex flex-wrap items-center justify-between gap-2`},be={key:0,class:`mb-1 text-xs text-gray-500`},xe={class:`mb-1 text-xs text-gray-500`},Se={class:`m-0 text-xs text-gray-500`},Ce={class:`text-xs text-gray-500`},we={key:0,class:`text-xs text-orange-500`},Te={key:1},Ee={class:`text-xs text-gray-500`},De=l({__name:`ModelUsageStats`,props:{accountId:{},days:{}},setup(e){let c=e,l=_(``),f=_(1),h=_(20),{data:v,loading:b,error:S,run:C}=$(),{data:w,loading:T,error:E,run:D}=$(),O=s(()=>{var e;return(e=v.value)==null?void 0:e.summary}),k=s(()=>{var e;return(e=O.value)!=null&&e.request_count?Math.round(O.value.known_count/O.value.request_count*1e3)/10:0}),A=s(()=>{var e,t;return Math.max(1,...((e=(t=v.value)==null?void 0:t.daily)==null?[]:e).map(e=>{var t;return(t=e.total_tokens)==null?0:t}))}),ee=s(()=>{var e,t;return((e=(t=v.value)==null?void 0:t.by_model)==null?[]:e).map(e=>x(x({},e),{},{key:`${e.provider_id}:${e.model}`}))});function j(){return{accountId:c.accountId,days:c.days,purpose:l.value}}function M(){let e=x(x({},j()),{},{limit:h.value,offset:(f.value-1)*h.value});return D(t=>ie(e,t))}function N(){let e=j();C(t=>ae(e,t)),M()}r(()=>[c.accountId,c.days,l.value],()=>{f.value=1,N()},{immediate:!0});function P(e){var t,n;let r=(t=e.pageSize)==null?h.value:t;f.value=r===h.value?(n=e.current)==null?1:n:1,h.value=r,M()}let F=[{title:`请求数`,dataIndex:`request_count`,key:`request_count`,width:85},{title:`已记录输入`,key:`input_tokens`,width:115},{title:`已记录输出`,key:`output_tokens`,width:115},{title:`已记录总 Token`,key:`total_tokens`,width:135},{title:`用量覆盖`,key:`coverage`,width:120}];return(e,r)=>(u(),g(i(B),{title:`模型 Token 用量`,class:`mb-5`,size:`small`},{extra:p(()=>[t(i(z),{loading:i(b)||i(T),onClick:N},{default:p(()=>[...r[1]||(r[1]=[n(`刷新用量`,-1)])]),_:1},8,[`loading`])]),default:p(()=>{var e,s,c,_;return[r[6]||(r[6]=a(`p`,{class:`mb-3 text-sm text-gray-500`},` 每次实际上游请求单独计数,包含所有回答候选、裁判、重试、界面检测及知识整理。Token 仅汇总上游已返回的用量;未返回和历史未记录的部分不作估算。 `,-1)),t(i(Y),{value:l.value,"onUpdate:value":r[0]||(r[0]=e=>l.value=e),class:`mb-4`,options:[{value:``,label:`全部用途`},{value:`chat`,label:`客服回答与裁判`},{value:`guard`,label:`界面检测`},{value:`knowledge`,label:`知识整理`}]},null,8,[`value`]),i(S)?(u(),g(i(R),{key:0,class:`mb-4`,type:`error`,"show-icon":``,message:`用量统计${i(S)}`},null,8,[`message`])):y(``,!0),t(i(ce),{gutter:[12,12],class:`mb-4`},{default:p(()=>[t(i(H),{xs:24,sm:12,xl:6},{default:p(()=>[t(i(B),{size:`small`,loading:i(b)},{default:p(()=>[t(i(V),{title:`实际上游请求`,value:O.value?i(X)(O.value.request_count):`—`},null,8,[`value`])]),_:1},8,[`loading`])]),_:1}),t(i(H),{xs:24,sm:12,xl:6},{default:p(()=>[t(i(B),{size:`small`,loading:i(b)},{default:p(()=>[t(i(V),{title:`已记录输入 Token`,value:i(Z)(O.value,`input_tokens`)},null,8,[`value`])]),_:1},8,[`loading`])]),_:1}),t(i(H),{xs:24,sm:12,xl:6},{default:p(()=>[t(i(B),{size:`small`,loading:i(b)},{default:p(()=>[t(i(V),{title:`已记录输出 Token`,value:i(Z)(O.value,`output_tokens`)},null,8,[`value`])]),_:1},8,[`loading`])]),_:1}),t(i(H),{xs:24,sm:12,xl:6},{default:p(()=>[t(i(B),{size:`small`,loading:i(b)},{default:p(()=>[t(i(V),{title:`已记录总 Token`,value:i(Z)(O.value,`total_tokens`)},null,8,[`value`])]),_:1},8,[`loading`])]),_:1})]),_:1}),i(v)&&O.value?(u(),o(d,{key:1},[a(`div`,ve,[a(`div`,ye,[a(`span`,null,`总 Token 用量覆盖:`+m(i(X)(O.value.known_count))+` / `+m(i(X)(O.value.request_count))+` 次请求`,1),t(i(U),{color:O.value.missing_count?`orange`:`green`},{default:p(()=>[n(m(i(X)(O.value.missing_count))+` 次未返回总用量`,1)]),_:1},8,[`color`])]),t(i(le),{percent:k.value,size:`small`,status:O.value.missing_count?`normal`:void 0},null,8,[`percent`,`status`]),O.value.input_known_count!=null&&O.value.output_known_count!=null?(u(),o(`p`,be,` 输入用量已记录 `+m(O.value.input_known_count)+` / `+m(O.value.request_count)+` 次;输出用量已记录 `+m(O.value.output_known_count)+` / `+m(O.value.request_count)+` 次。部分请求缺少用量时,合计仅包含已知部分。 `,1)):y(``,!0),a(`p`,xe,` 已记录缓存输入 `+m(i(Z)(O.value,`cached_input_tokens`))+`;已记录推理 `+m(i(Z)(O.value,`reasoning_tokens`))+`。 缓存与推理属于明细项,不额外叠加至总 Token。单项未返回时显示“未返回”。 `,1),a(`p`,Se,`统计起点 `+m(i(_e)(i(v).since))+` UTC;日期趋势按 UTC 自然日汇总。`,1)]),i(v).legacy_unmetered_calls?(u(),g(i(R),{key:0,class:`mb-4`,type:`warning`,"show-icon":``,message:`另有 ${i(X)(i(v).legacy_unmetered_calls)} 次历史业务调用未记录 Token`,description:`这些历史调用没有逐次上游用量记录,不计入以上请求数和已记录 Token 合计。`},null,8,[`message`])):y(``,!0),O.value.request_count?(u(),o(d,{key:2},[r[2]||(r[2]=a(`h3`,{class:`mb-2 font-medium`},`按模型统计`,-1)),t(i(L),{"data-source":ee.value,"row-key":`key`,size:`small`,pagination:!1,scroll:{x:850},class:`mb-4`,columns:[{title:`模型 / 服务商`,key:`model`,width:230},...F]},{bodyCell:p(({column:e,record:t})=>[e.key===`model`?(u(),o(d,{key:0},[a(`div`,null,m(t.model||`未标记模型`),1),a(`div`,Ce,m(t.provider_name||t.provider_id),1)],64)):e.key===`coverage`?(u(),o(d,{key:1},[n(m(t.known_count)+` / `+m(t.request_count),1),t.missing_count?(u(),o(`div`,we,m(t.missing_count)+` 次未返回`,1)):y(``,!0)],64)):String(e.key).endsWith(`_tokens`)?(u(),o(d,{key:2},[n(m(i(Z)(t,e.key)),1)],64)):y(``,!0)]),_:1},8,[`data-source`,`columns`]),r[3]||(r[3]=a(`h3`,{class:`mb-2 font-medium`},`按用途统计`,-1)),t(i(L),{"data-source":i(v).by_purpose,"row-key":`purpose`,size:`small`,pagination:!1,scroll:{x:800},class:`mb-4`,columns:[{title:`用途`,key:`purpose`,width:180},...F]},{bodyCell:p(({column:e,record:t})=>[e.key===`purpose`?(u(),o(d,{key:0},[n(m(i(Q)(t.purpose)),1)],64)):e.key===`coverage`?(u(),o(d,{key:1},[n(m(t.known_count)+` / `+m(t.request_count),1)],64)):String(e.key).endsWith(`_tokens`)?(u(),o(d,{key:2},[n(m(i(Z)(t,e.key)),1)],64)):y(``,!0)]),_:1},8,[`data-source`,`columns`]),r[4]||(r[4]=a(`h3`,{class:`mb-2 font-medium`},`每日趋势(UTC)`,-1)),t(i(L),{"data-source":i(v).daily,"row-key":`date`,size:`small`,pagination:!1,scroll:{x:950},class:`mb-4`,columns:[{title:`日期(UTC)`,dataIndex:`date`,key:`date`,width:125},...F,{title:`已记录总量趋势`,key:`trend`,width:200}]},{bodyCell:p(({column:e,record:t})=>[e.key===`trend`?(u(),o(d,{key:0},[t.total_tokens==null?(u(),o(`span`,Te,`未返回`)):(u(),g(i(le),{key:0,percent:Math.round(t.total_tokens/A.value*100),"show-info":!1,size:`small`},null,8,[`percent`]))],64)):e.key===`coverage`?(u(),o(d,{key:1},[n(m(t.known_count)+` / `+m(t.request_count),1)],64)):String(e.key).endsWith(`_tokens`)?(u(),o(d,{key:2},[n(m(i(Z)(t,e.key)),1)],64)):y(``,!0)]),_:1},8,[`data-source`,`columns`])],64)):(u(),g(i(te),{key:1,class:`my-5`,description:`当前账号与时间范围内暂无上游请求记录`}))],64)):y(``,!0),r[7]||(r[7]=a(`h3`,{class:`mb-2 font-medium`},`实际请求明细`,-1)),i(E)?(u(),g(i(R),{key:2,class:`mb-3`,type:`error`,"show-icon":``,message:`请求明细${i(E)}`},{action:p(()=>[t(i(z),{size:`small`,onClick:M},{default:p(()=>[...r[5]||(r[5]=[n(`重试`,-1)])]),_:1})]),_:1},8,[`message`])):y(``,!0),t(i(L),{"data-source":(e=(s=i(w))==null?void 0:s.items)==null?[]:e,"row-key":`event_id`,size:`small`,loading:i(T),scroll:{x:1600},pagination:{current:f.value,pageSize:h.value,total:(c=(_=i(w))==null?void 0:_.total)==null?0:c,showSizeChanger:!0,pageSizeOptions:[`20`,`50`,`100`],showTotal:e=>`共 ${e} 次上游请求`},columns:[{title:`时间(UTC)`,key:`created_at`,width:170},{title:`模型 / 服务商`,key:`model`,width:230},{title:`用途 / 角色`,key:`purpose`,width:150},{title:`状态`,key:`status`,width:80},{title:`输入 Token`,key:`input_tokens`,width:110},{title:`输出 Token`,key:`output_tokens`,width:110},{title:`总 Token`,key:`total_tokens`,width:110},{title:`缓存输入`,key:`cached_input_tokens`,width:110},{title:`推理 Token`,key:`reasoning_tokens`,width:110},{title:`耗时`,key:`latency_ms`,width:90},{title:`尝试次数`,dataIndex:`attempt`,key:`attempt`,width:90},{title:`请求编号`,dataIndex:`request_id`,key:`request_id`,width:210,ellipsis:!0}],onChange:P},{bodyCell:p(({column:e,record:r})=>[e.key===`created_at`?(u(),o(d,{key:0},[n(m(i(_e)(r.created_at)),1)],64)):e.key===`model`?(u(),o(d,{key:1},[a(`div`,null,m(r.model||`未标记模型`),1),a(`div`,Ee,m(r.provider_name||r.provider_id),1)],64)):e.key===`purpose`?(u(),o(d,{key:2},[a(`div`,null,m(i(Q)(r.purpose)),1),t(i(U),null,{default:p(()=>[n(m(r.role===`judge`?`裁判`:`回答 / 生成`),1)]),_:2},1024)],64)):e.key===`status`?(u(),g(i(U),{key:3,color:r.status===`success`?`green`:`red`},{default:p(()=>[n(m(r.status===`success`?`成功`:`失败`),1)]),_:2},1032,[`color`])):String(e.key).endsWith(`_tokens`)?(u(),o(d,{key:4},[n(m(i(X)(r[String(e.key)])),1)],64)):e.key===`latency_ms`?(u(),o(d,{key:5},[n(m(i(X)(r.latency_ms,`—`))+` ms`,1)],64)):y(``,!0)]),emptyText:p(()=>[n(m(i(E)?`请求明细加载失败,请重试`:`暂无实际上游请求`),1)]),_:1},8,[`data-source`,`loading`,`pagination`])]}),_:1}))}}),Oe=e({default:()=>ke}),ke=De;export{Y as i,Oe as n,$ as r,ke as t};