agtrace_engine/session/
summary.rs1use super::types::AgentSession;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct SessionSummary {
6 pub event_counts: EventCounts,
7}
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct EventCounts {
11 pub total: usize,
12 pub user_messages: usize,
13 pub assistant_messages: usize,
14 pub tool_calls: usize,
15 pub reasoning_blocks: usize,
16}
17
18pub fn summarize(session: &AgentSession) -> SessionSummary {
19 let user_count = session.turns.len();
20 let mut assistant_count = 0;
21 let mut tool_call_count = 0;
22 let mut reasoning_count = 0;
23 let mut total_event_count = 0;
24
25 for turn in &session.turns {
26 total_event_count += 1;
27
28 for step in &turn.steps {
29 if step.message.is_some() {
30 assistant_count += 1;
31 total_event_count += 1;
32 }
33 if step.reasoning.is_some() {
34 reasoning_count += 1;
35 total_event_count += 1;
36 }
37
38 tool_call_count += step.tools.len();
39 total_event_count += step.tools.len() * 2;
40
41 if step.usage.is_some() {
42 total_event_count += 1;
43 }
44 }
45 }
46
47 SessionSummary {
48 event_counts: EventCounts {
49 total: total_event_count,
50 user_messages: user_count,
51 assistant_messages: assistant_count,
52 tool_calls: tool_call_count,
53 reasoning_blocks: reasoning_count,
54 },
55 }
56}