langfuse_client_base/models/
observation.rs1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, bon::Builder)]
15pub struct Observation {
16 #[serde(rename = "id")]
18 pub id: String,
19 #[serde(rename = "traceId", deserialize_with = "Option::deserialize")]
21 pub trace_id: Option<String>,
22 #[serde(rename = "type")]
24 pub r#type: String,
25 #[serde(rename = "name", deserialize_with = "Option::deserialize")]
27 pub name: Option<String>,
28 #[serde(rename = "startTime")]
30 pub start_time: chrono::DateTime<chrono::FixedOffset>,
31 #[serde(rename = "endTime", deserialize_with = "Option::deserialize")]
33 pub end_time: Option<chrono::DateTime<chrono::FixedOffset>>,
34 #[serde(
36 rename = "completionStartTime",
37 deserialize_with = "Option::deserialize"
38 )]
39 pub completion_start_time: Option<chrono::DateTime<chrono::FixedOffset>>,
40 #[serde(rename = "model", deserialize_with = "Option::deserialize")]
42 pub model: Option<String>,
43 #[serde(rename = "modelParameters", deserialize_with = "Option::deserialize")]
45 pub model_parameters: Option<serde_json::Value>,
46 #[serde(rename = "input", deserialize_with = "Option::deserialize")]
48 pub input: Option<serde_json::Value>,
49 #[serde(rename = "version", deserialize_with = "Option::deserialize")]
51 pub version: Option<String>,
52 #[serde(
54 rename = "metadata",
55 default,
56 with = "::serde_with::rust::double_option",
57 skip_serializing_if = "Option::is_none"
58 )]
59 pub metadata: Option<Option<std::collections::HashMap<String, serde_json::Value>>>,
60 #[serde(rename = "output", deserialize_with = "Option::deserialize")]
62 pub output: Option<serde_json::Value>,
63 #[serde(rename = "usage")]
64 pub usage: Box<models::Usage>,
65 #[serde(rename = "level")]
66 pub level: models::ObservationLevel,
67 #[serde(rename = "statusMessage", deserialize_with = "Option::deserialize")]
69 pub status_message: Option<String>,
70 #[serde(
72 rename = "parentObservationId",
73 deserialize_with = "Option::deserialize"
74 )]
75 pub parent_observation_id: Option<String>,
76 #[serde(rename = "promptId", deserialize_with = "Option::deserialize")]
78 pub prompt_id: Option<String>,
79 #[serde(rename = "usageDetails")]
81 pub usage_details: std::collections::HashMap<String, i32>,
82 #[serde(rename = "costDetails")]
84 pub cost_details: std::collections::HashMap<String, f64>,
85 #[serde(rename = "environment")]
87 pub environment: String,
88}
89
90impl Observation {
91 pub fn new(
92 id: String,
93 trace_id: Option<String>,
94 r#type: String,
95 name: Option<String>,
96 start_time: chrono::DateTime<chrono::FixedOffset>,
97 end_time: Option<chrono::DateTime<chrono::FixedOffset>>,
98 completion_start_time: Option<chrono::DateTime<chrono::FixedOffset>>,
99 model: Option<String>,
100 model_parameters: Option<serde_json::Value>,
101 input: Option<serde_json::Value>,
102 version: Option<String>,
103 output: Option<serde_json::Value>,
104 usage: models::Usage,
105 level: models::ObservationLevel,
106 status_message: Option<String>,
107 parent_observation_id: Option<String>,
108 prompt_id: Option<String>,
109 usage_details: std::collections::HashMap<String, i32>,
110 cost_details: std::collections::HashMap<String, f64>,
111 environment: String,
112 ) -> Observation {
113 Observation {
114 id,
115 trace_id,
116 r#type,
117 name,
118 start_time,
119 end_time,
120 completion_start_time,
121 model,
122 model_parameters,
123 input,
124 version,
125 metadata: None,
126 output,
127 usage: Box::new(usage),
128 level,
129 status_message,
130 parent_observation_id,
131 prompt_id,
132 usage_details,
133 cost_details,
134 environment,
135 }
136 }
137}