diff --git a/src/lib/components/PerformancePanel.svelte b/src/lib/components/PerformancePanel.svelte new file mode 100644 index 0000000..7d875ad --- /dev/null +++ b/src/lib/components/PerformancePanel.svelte @@ -0,0 +1,467 @@ + + +
+
+

📈 Performance

+ +
+ + {#if loading} +
Lade Statistiken...
+ {:else} + +
+

💰 Kosten

+
+
+ {formatCost($sessionStats.totalCost)} + Aktuelle Session +
+
+ {formatCost(aggregated.todayCost)} + Heute ({aggregated.todaySessions} Sessions) +
+
+ {formatCost(aggregated.totalCost)} + Gesamt ({aggregated.totalSessions} Sessions) +
+
+
+ + +
+

🔢 Token

+
+
+ {formatTokens($sessionStats.totalTokensIn)} + Input (Session) +
+
+ {formatTokens($sessionStats.totalTokensOut)} + Output (Session) +
+
+ {formatTokens(aggregated.totalTokensIn + aggregated.totalTokensOut)} + Gesamt (alle) +
+
+ + + {#if $sessionStats.totalTokensIn > 0 || $sessionStats.totalTokensOut > 0} + {@const total = $sessionStats.totalTokensIn + $sessionStats.totalTokensOut} + {@const inPercent = Math.round(($sessionStats.totalTokensIn / total) * 100)} +
+
+ In {inPercent}% +
+
+ Out {100 - inPercent}% +
+
+ {/if} +
+ + +
+

⚡ Leistung

+
+
+ {$monitorStats.apiCalls} + API-Calls +
+
5}> + {errorRate()}% + Fehlerrate +
+
+ {$monitorStats.avgLatencyMs}ms + Ø Latenz +
+
+ + + {#if latencyStats()} + {@const stats = latencyStats()} +
+
+ Min: + {formatLatency(stats.min)} +
+
+ P50: + {formatLatency(stats.p50)} +
+
+ P95: + {formatLatency(stats.p95)} +
+
+ Max: + {formatLatency(stats.max)} +
+
+ {/if} +
+ + + {#if recentSessions.length > 1} +
+

📋 Letzte Sessions

+
+ {#each recentSessions as session} +
+ + {session.title.length > 25 ? session.title.substring(0, 25) + '...' : session.title} + + {formatCost(session.cost_usd)} + {formatTokens(session.token_input + session.token_output)} +
+ {/each} +
+
+ {/if} + {/if} +
+ + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 7a35968..d61f27e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -11,6 +11,7 @@ import GuardRailsPanel from '$lib/components/GuardRailsPanel.svelte'; import SettingsPanel from '$lib/components/SettingsPanel.svelte'; import MonitorPanel from '$lib/components/MonitorPanel.svelte'; + import PerformancePanel from '$lib/components/PerformancePanel.svelte'; let activeMiddleTab = 'activity'; let activeRightTab = 'agents'; @@ -18,6 +19,7 @@ const middleTabs = [ { id: 'activity', label: 'Aktivität', icon: '📋' }, { id: 'monitor', label: 'Monitor', icon: '📊' }, + { id: 'perf', label: 'Kosten', icon: '📈' }, { id: 'knowledge', label: 'Wissen', icon: '📚' }, { id: 'memory', label: 'Gedächtnis', icon: '🧠' }, { id: 'audit', label: 'Historie', icon: '📝' }, @@ -68,6 +70,8 @@ {:else if activeMiddleTab === 'monitor'} + {:else if activeMiddleTab === 'perf'} + {:else if activeMiddleTab === 'knowledge'} {:else if activeMiddleTab === 'memory'}