agtrace_engine/session/
summary.rs

1use 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}