Skip to main content

rskit_agent/types/
result.rs

1use rskit_llm::types::{AssistantMessage, Message, Usage};
2
3use super::StopReason;
4
5/// The final outcome of an agent run.
6#[derive(Debug, Clone)]
7pub struct AgentResult {
8    /// All messages accumulated during the run (user + assistant + tool results).
9    pub messages: Vec<Message>,
10    /// The last assistant message before the loop ended.
11    pub final_message: AssistantMessage,
12    /// Aggregate token usage across all turns.
13    pub total_usage: Usage,
14    /// How many turns the agent executed.
15    pub turn_count: u32,
16    /// Why the agent stopped.
17    pub stop_reason: StopReason,
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23    use rskit_llm::types;
24
25    #[test]
26    fn test_agent_result_fields() {
27        let result = AgentResult {
28            messages: vec![types::user("hi")],
29            final_message: AssistantMessage {
30                content: types::text_content("hello"),
31                tool_calls: vec![],
32                usage: None,
33            },
34            total_usage: Usage {
35                input_tokens: 10,
36                output_tokens: 20,
37                cached_tokens: 0,
38                reasoning_tokens: 0,
39            },
40            turn_count: 1,
41            stop_reason: StopReason::EndTurn,
42        };
43        assert_eq!(result.turn_count, 1);
44        assert_eq!(result.total_usage.input_tokens, 10);
45    }
46}