agentik_sdk/types/
shared.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
5pub struct RequestId(pub String);
6
7impl RequestId {
8 pub fn new(id: impl Into<String>) -> Self {
9 Self(id.into())
10 }
11
12 pub fn as_str(&self) -> &str {
13 &self.0
14 }
15}
16
17impl std::fmt::Display for RequestId {
18 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19 write!(f, "{}", self.0)
20 }
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
25pub struct Usage {
26 pub input_tokens: u32,
28
29 pub output_tokens: u32,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub cache_creation_input_tokens: Option<u32>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub cache_read_input_tokens: Option<u32>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub server_tool_use: Option<ServerToolUsage>,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub service_tier: Option<String>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
51pub struct ServerToolUsage {
52 pub web_search_requests: u32,
54}
55
56impl Usage {
57 pub fn total_tokens(&self) -> u32 {
59 self.input_tokens + self.output_tokens
60 }
61
62 pub fn total_input_tokens(&self) -> u32 {
64 self.input_tokens
65 + self.cache_creation_input_tokens.unwrap_or(0)
66 + self.cache_read_input_tokens.unwrap_or(0)
67 }
68}
69
70pub trait HasRequestId {
72 fn request_id(&self) -> Option<&RequestId>;
73}