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(rename = "metadata")]
54 pub metadata: std::collections::HashMap<String, serde_json::Value>,
55 #[serde(rename = "output", deserialize_with = "Option::deserialize")]
57 pub output: Option<serde_json::Value>,
58 #[serde(rename = "usage")]
59 pub usage: Box<models::Usage>,
60 #[serde(rename = "level")]
61 pub level: models::ObservationLevel,
62 #[serde(rename = "statusMessage", deserialize_with = "Option::deserialize")]
64 pub status_message: Option<String>,
65 #[serde(
67 rename = "parentObservationId",
68 deserialize_with = "Option::deserialize"
69 )]
70 pub parent_observation_id: Option<String>,
71 #[serde(rename = "promptId", deserialize_with = "Option::deserialize")]
73 pub prompt_id: Option<String>,
74 #[serde(rename = "usageDetails")]
76 pub usage_details: std::collections::HashMap<String, i32>,
77 #[serde(rename = "costDetails")]
79 pub cost_details: std::collections::HashMap<String, f64>,
80 #[serde(rename = "environment")]
82 pub environment: String,
83}
84
85impl Observation {
86 pub fn new(
87 id: String,
88 trace_id: Option<String>,
89 r#type: String,
90 name: Option<String>,
91 start_time: chrono::DateTime<chrono::FixedOffset>,
92 end_time: Option<chrono::DateTime<chrono::FixedOffset>>,
93 completion_start_time: Option<chrono::DateTime<chrono::FixedOffset>>,
94 model: Option<String>,
95 model_parameters: Option<serde_json::Value>,
96 input: Option<serde_json::Value>,
97 version: Option<String>,
98 metadata: std::collections::HashMap<String, serde_json::Value>,
99 output: Option<serde_json::Value>,
100 usage: models::Usage,
101 level: models::ObservationLevel,
102 status_message: Option<String>,
103 parent_observation_id: Option<String>,
104 prompt_id: Option<String>,
105 usage_details: std::collections::HashMap<String, i32>,
106 cost_details: std::collections::HashMap<String, f64>,
107 environment: String,
108 ) -> Observation {
109 Observation {
110 id,
111 trace_id,
112 r#type,
113 name,
114 start_time,
115 end_time,
116 completion_start_time,
117 model,
118 model_parameters,
119 input,
120 version,
121 metadata,
122 output,
123 usage: Box::new(usage),
124 level,
125 status_message,
126 parent_observation_id,
127 prompt_id,
128 usage_details,
129 cost_details,
130 environment,
131 }
132 }
133}