langfuse_client_base/models/
observations_view.rs1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, bon::Builder)]
15pub struct ObservationsView {
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 #[serde(rename = "promptName", deserialize_with = "Option::deserialize")]
90 pub prompt_name: Option<String>,
91 #[serde(rename = "promptVersion", deserialize_with = "Option::deserialize")]
93 pub prompt_version: Option<i32>,
94 #[serde(rename = "modelId", deserialize_with = "Option::deserialize")]
96 pub model_id: Option<String>,
97 #[serde(rename = "inputPrice", deserialize_with = "Option::deserialize")]
99 pub input_price: Option<f64>,
100 #[serde(rename = "outputPrice", deserialize_with = "Option::deserialize")]
102 pub output_price: Option<f64>,
103 #[serde(rename = "totalPrice", deserialize_with = "Option::deserialize")]
105 pub total_price: Option<f64>,
106 #[serde(
108 rename = "calculatedInputCost",
109 deserialize_with = "Option::deserialize"
110 )]
111 pub calculated_input_cost: Option<f64>,
112 #[serde(
114 rename = "calculatedOutputCost",
115 deserialize_with = "Option::deserialize"
116 )]
117 pub calculated_output_cost: Option<f64>,
118 #[serde(
120 rename = "calculatedTotalCost",
121 deserialize_with = "Option::deserialize"
122 )]
123 pub calculated_total_cost: Option<f64>,
124 #[serde(rename = "latency", deserialize_with = "Option::deserialize")]
126 pub latency: Option<f64>,
127 #[serde(rename = "timeToFirstToken", deserialize_with = "Option::deserialize")]
129 pub time_to_first_token: Option<f64>,
130}
131
132impl ObservationsView {
133 pub fn new(
134 id: String,
135 trace_id: Option<String>,
136 r#type: String,
137 name: Option<String>,
138 start_time: chrono::DateTime<chrono::FixedOffset>,
139 end_time: Option<chrono::DateTime<chrono::FixedOffset>>,
140 completion_start_time: Option<chrono::DateTime<chrono::FixedOffset>>,
141 model: Option<String>,
142 model_parameters: Option<serde_json::Value>,
143 input: Option<serde_json::Value>,
144 version: Option<String>,
145 output: Option<serde_json::Value>,
146 usage: models::Usage,
147 level: models::ObservationLevel,
148 status_message: Option<String>,
149 parent_observation_id: Option<String>,
150 prompt_id: Option<String>,
151 usage_details: std::collections::HashMap<String, i32>,
152 cost_details: std::collections::HashMap<String, f64>,
153 environment: String,
154 prompt_name: Option<String>,
155 prompt_version: Option<i32>,
156 model_id: Option<String>,
157 input_price: Option<f64>,
158 output_price: Option<f64>,
159 total_price: Option<f64>,
160 calculated_input_cost: Option<f64>,
161 calculated_output_cost: Option<f64>,
162 calculated_total_cost: Option<f64>,
163 latency: Option<f64>,
164 time_to_first_token: Option<f64>,
165 ) -> ObservationsView {
166 ObservationsView {
167 id,
168 trace_id,
169 r#type,
170 name,
171 start_time,
172 end_time,
173 completion_start_time,
174 model,
175 model_parameters,
176 input,
177 version,
178 metadata: None,
179 output,
180 usage: Box::new(usage),
181 level,
182 status_message,
183 parent_observation_id,
184 prompt_id,
185 usage_details,
186 cost_details,
187 environment,
188 prompt_name,
189 prompt_version,
190 model_id,
191 input_price,
192 output_price,
193 total_price,
194 calculated_input_cost,
195 calculated_output_cost,
196 calculated_total_cost,
197 latency,
198 time_to_first_token,
199 }
200 }
201}