Skip to main content

langsmith_rust/models/
metrics.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct Metrics {
5    pub prompt_tokens: Option<u64>,
6    pub completion_tokens: Option<u64>,
7    pub total_tokens: Option<u64>,
8    pub total_cost: Option<f64>,
9    pub prompt_cost: Option<f64>,
10    pub completion_cost: Option<f64>,
11}
12
13impl Default for Metrics {
14    fn default() -> Self {
15        Self {
16            prompt_tokens: None,
17            completion_tokens: None,
18            total_tokens: None,
19            total_cost: None,
20            prompt_cost: None,
21            completion_cost: None,
22        }
23    }
24}
25
26impl Metrics {
27    pub fn new() -> Self {
28        Self::default()
29    }
30
31    pub fn with_tokens(mut self, prompt: u64, completion: u64) -> Self {
32        self.prompt_tokens = Some(prompt);
33        self.completion_tokens = Some(completion);
34        self.total_tokens = Some(prompt + completion);
35        self
36    }
37
38    pub fn with_costs(mut self, prompt: f64, completion: f64) -> Self {
39        self.prompt_cost = Some(prompt);
40        self.completion_cost = Some(completion);
41        self.total_cost = Some(prompt + completion);
42        self
43    }
44}
45