langsmith_rust/models/
metrics.rs1use 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