2828 <div class =" text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" >Tool Sequences</div >
2929 <div class =" mt-1 text-2xl font-semibold text-slate-900 dark:text-white" >{{ toolCallSequences }}</div >
3030 </div >
31+ <div class =" rounded-lg bg-white p-3 shadow-sm dark:bg-slate-800" >
32+ <div class =" text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" >Cached Prompt Tokens</div >
33+ <div class =" mt-1 text-2xl font-semibold text-slate-900 dark:text-white" >{{ formatNumber(totalCachedTokens) }}</div >
34+ </div >
3135 </div >
3236 </div >
3337
5761 </div >
5862
5963 <div class =" flex items-center gap-3" >
64+ <div
65+ v-if =" sequence.cachedTokens > 0"
66+ class =" rounded-full bg-sky-100 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-sky-800 dark:bg-sky-900/50 dark:text-sky-200"
67+ >
68+ Cache hit: {{ formatNumber(sequence.cachedTokens) }}
69+ </div >
6070 <div
6171 class =" rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide"
6272 :class =" sequence.resultType === 'tool_calls'
7282 </div >
7383 </summary >
7484
75- <div class =" mt-4 grid gap-3 md:grid-cols-4 " >
85+ <div class =" mt-4 grid gap-3 md:grid-cols-5 " >
7686 <div class =" rounded-lg bg-slate-50 p-3 dark:bg-slate-800/70" >
7787 <div class =" text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" >Prompt</div >
7888 <div class =" mt-1 text-sm font-semibold text-slate-900 dark:text-white" >
97107 {{ sequence.toolCalls.length }}
98108 </div >
99109 </div >
110+ <div class =" rounded-lg bg-slate-50 p-3 dark:bg-slate-800/70" >
111+ <div class =" text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" >Cached Prompt Tokens</div >
112+ <div class =" mt-1 text-sm font-semibold text-slate-900 dark:text-white" >
113+ {{ formatNumber(sequence.cachedTokens) }}
114+ </div >
115+ </div >
100116 </div >
101117
102118 <section v-if =" sequence.prompt" class =" mt-4" >
@@ -264,6 +280,8 @@ type DebugSequence = {
264280 prompt: string ;
265281 reasoning: string ;
266282 text: string ;
283+ cachedTokens: number ;
284+ responseId: string | null ;
267285 toolCalls: DebugToolCall [];
268286 endedAt: string ;
269287 resultType: ' tool_calls' | ' final_text' ;
@@ -291,6 +309,10 @@ const toolCallSequences = computed(() =>
291309 debugSequences .value .filter ((sequence ) => sequence .resultType === ' tool_calls' ).length ,
292310);
293311
312+ const totalCachedTokens = computed (() =>
313+ debugSequences .value .reduce ((sum , sequence ) => sum + sequence .cachedTokens , 0 ),
314+ );
315+
294316const rawJson = computed (() => JSON .stringify (debugSequences .value , null , 2 ));
295317const copiedFieldKey = ref <string | null >(null );
296318let copiedFieldResetTimer: ReturnType <typeof setTimeout > | null = null ;
@@ -299,6 +321,13 @@ function formatTimestamp(value: string) {
299321 return new Date (value ).toLocaleString ();
300322}
301323
324+ function formatNumber(value : number ) {
325+ if (value ) {
326+ return value .toLocaleString ();
327+ }
328+ return ' 0' ;
329+ }
330+
302331function sequenceDuration(sequence : DebugSequence ) {
303332 const startedAtMs = new Date (sequence .startedAt ).getTime ();
304333 const endedAtMs = new Date (sequence .endedAt ).getTime ();
0 commit comments