'use strict'; const TokenUsage={ aggregate(answers){ const t={responses:0,input_total:0,output_total:0,input_avg:null,output_avg:null}; for(const a of answers){const u=a?.usage||{},i=u.prompt_tokens??u.input_tokens,o=u.completion_tokens??u.output_tokens;if(!Number.isInteger(i)||!Number.isInteger(o)||i<0||o<0)continue;t.responses++;t.input_total+=i;t.output_total+=o;} if(t.responses){t.input_avg=t.input_total/t.responses;t.output_avg=t.output_total/t.responses;}return t; }, format(n,avg=false){return typeof n==='number'&&Number.isFinite(n)?n.toLocaleString('en-US',{maximumFractionDigits:avg?1:0}):'—';}, table(d,condition){ const e=s=>String(s??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); return `
| Model | 응답 / 채점 | 정확도 | 총 입력 토큰 | 문항당 평균 입력 | 총 출력 토큰 | 문항당 평균 출력 | 토큰 집계 문항 |
|---|---|---|---|---|---|---|---|
| ${e(s.label)} | ${s.read} / ${s.graded} | ${CleanResults.cell({n:d.total,graded:s.graded,correct:s.correct})} | ${known?this.format(t.input_total):'—'} | ${known?this.format(t.input_avg,true):'—'} | ${known?this.format(t.output_total):'—'} | ${known?this.format(t.output_avg,true):'—'} | ${t?`${t.responses} / ${s.read}`:'집계 대기'} |
완료된 응답 중 토큰 사용량이 기록된 문항 기준 · 채점/임베딩/실패 재시도 제외 · 입력에는 보고된 캐시 토큰 포함 · 모델별 토크나이저가 달라 동일 자료도 토큰 수가 다릅니다.
`; }, answer(a){const t=this.aggregate([a]);return t.responses?`입력 ${this.format(t.input_total)} · 출력 ${this.format(t.output_total)} 토큰`:'토큰 사용량 미기록';} };