diff --git a/src/pages/agent-office/components/TokenTab.jsx b/src/pages/agent-office/components/TokenTab.jsx new file mode 100644 index 0000000..fade7dd --- /dev/null +++ b/src/pages/agent-office/components/TokenTab.jsx @@ -0,0 +1,86 @@ +// src/pages/agent-office/components/TokenTab.jsx +import { useState, useEffect } from 'react'; +import { getAgentTokenUsage } from '../../../api'; + +export default function TokenTab({ agentId }) { + const [usage, setUsage] = useState(null); + const [days, setDays] = useState(1); + + useEffect(() => { + let cancelled = false; + getAgentTokenUsage(agentId, days).then(data => { + if (!cancelled) setUsage(data); + }); + return () => { cancelled = true; }; + }, [agentId, days]); + + if (!usage) return
Loading...
; + + const inputTokens = usage.input_tokens || 0; + const outputTokens = usage.output_tokens || 0; + const cacheRead = usage.cache_read || 0; + const cacheWrite = usage.cache_write || 0; + const total = inputTokens + outputTokens; + const cacheHitRate = inputTokens > 0 ? Math.round((cacheRead / inputTokens) * 100) : 0; + + return ( +
+
+ {[1, 7, 30].map(d => ( + + ))} +
+ +
+
+
Input Tokens
+
{inputTokens.toLocaleString()}
+
+
+
Output Tokens
+
{outputTokens.toLocaleString()}
+
+
+
Total
+
{total.toLocaleString()}
+
+
+
Cache Hit Rate
+
{cacheHitRate}%
+
+
+ + {/* Simple bar chart */} +
+
Input vs Output
+
+
0 ? `${(inputTokens / total) * 100}%` : '0%' }} + /> +
0 ? `${(outputTokens / total) * 100}%` : '0%' }} + /> +
+
+ Input + Output +
+
+ + {cacheRead > 0 && ( +
+ Cache Read: {cacheRead.toLocaleString()} + Cache Write: {cacheWrite.toLocaleString()} +
+ )} +
+ ); +}