getStats method
Get aggregate stats across all conversations.
Implementation
Future<ConversationStats> getStats() async {
final conversations = await listConversations();
final toolCounts = <String, int>{};
final modelCounts = <String, int>{};
for (final conv in conversations) {
for (final tool in conv.toolsUsed) {
toolCounts[tool] = (toolCounts[tool] ?? 0) + 1;
}
modelCounts[conv.model] = (modelCounts[conv.model] ?? 0) + 1;
}
final totalMessages = conversations.fold(
0,
(sum, c) => sum + c.messageCount,
);
final totalCost = conversations.fold(0.0, (sum, c) => sum + c.totalCost);
return ConversationStats(
totalSessions: conversations.length,
totalMessages: totalMessages,
totalTokens: conversations.fold(
0,
(sum, c) => sum + c.totalInputTokens + c.totalOutputTokens,
),
totalCost: totalCost,
totalDuration: conversations.fold(
Duration.zero,
(sum, c) => sum + c.lastActiveAt.difference(c.startedAt),
),
toolUsageCounts: toolCounts,
modelUsageCounts: modelCounts,
averageMessagesPerSession: conversations.isEmpty
? 0
: totalMessages ~/ conversations.length,
averageCostPerSession: conversations.isEmpty
? 0.0
: totalCost / conversations.length,
);
}