feat: add Reset Stats button to admin LLM tracking panel
Allows resetting the LLM stats aggregation window without deleting historical data. Stores a reset timestamp in metadata and filters the aggregation query to only include calls after that point. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@ export interface LlmStatsService {
|
||||
getStats(): LlmStatsData;
|
||||
isTrackingEnabled(): boolean;
|
||||
setTrackingEnabled(enabled: boolean): void;
|
||||
resetStats(): void;
|
||||
}
|
||||
|
||||
export function createLlmStatsService(): LlmStatsService {
|
||||
@@ -52,6 +53,12 @@ export function createLlmStatsService(): LlmStatsService {
|
||||
const enabled = loadTrackingEnabled();
|
||||
try {
|
||||
const db = getDatabase();
|
||||
const resetRow = db.prepare("SELECT value FROM metadata WHERE key = 'llm_stats_reset_after'").get() as { value: string } | undefined;
|
||||
const resetAfter = resetRow?.value ?? null;
|
||||
|
||||
const whereClause = resetAfter ? 'WHERE timestamp > ?' : '';
|
||||
const params = resetAfter ? [resetAfter] : [];
|
||||
|
||||
const rows = db.prepare(`
|
||||
SELECT
|
||||
template_name,
|
||||
@@ -63,9 +70,10 @@ export function createLlmStatsService(): LlmStatsService {
|
||||
SUM(CASE WHEN retries > 0 THEN 1 ELSE 0 END) as retry_count,
|
||||
SUM(failed) as fail_count
|
||||
FROM llm_call_log
|
||||
${whereClause}
|
||||
GROUP BY template_name
|
||||
ORDER BY count DESC
|
||||
`).all() as Array<{
|
||||
`).all(...params) as Array<{
|
||||
template_name: string;
|
||||
count: number;
|
||||
total_cost: number;
|
||||
@@ -114,5 +122,14 @@ export function createLlmStatsService(): LlmStatsService {
|
||||
// ignore
|
||||
}
|
||||
},
|
||||
|
||||
resetStats(): void {
|
||||
try {
|
||||
const db = getDatabase();
|
||||
db.prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('llm_stats_reset_after', ?)").run(new Date().toISOString());
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -204,6 +204,14 @@ export class SocketServer {
|
||||
socket.emit('admin-llm-stats-result', stats);
|
||||
});
|
||||
|
||||
socket.on('admin-reset-llm-stats', () => {
|
||||
if (!this.authenticatedSockets.has(socket.id)) return;
|
||||
this.gameLoop.llmStatsService.resetStats();
|
||||
const stats = this.gameLoop.llmStatsService.getStats();
|
||||
socket.emit('admin-llm-stats-result', stats);
|
||||
this.gameLoop.logService.log('info', 'Game', 'Admin reset LLM stats');
|
||||
});
|
||||
|
||||
socket.on('admin-toggle-llm-tracking', (data: { enabled: boolean }) => {
|
||||
if (!this.authenticatedSockets.has(socket.id)) return;
|
||||
this.gameLoop.llmStatsService.setTrackingEnabled(data.enabled);
|
||||
|
||||
Reference in New Issue
Block a user