1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct Observation {
16 #[serde(rename = "id")]
18 pub id: String,
19 #[serde(rename = "traceId", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
21 pub trace_id: Option<Option<String>>,
22 #[serde(rename = "type")]
24 pub r#type: String,
25 #[serde(rename = "name", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
27 pub name: Option<Option<String>>,
28 #[serde(rename = "startTime")]
30 pub start_time: String,
31 #[serde(rename = "endTime", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
33 pub end_time: Option<Option<String>>,
34 #[serde(rename = "completionStartTime", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
36 pub completion_start_time: Option<Option<String>>,
37 #[serde(rename = "model", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
39 pub model: Option<Option<String>>,
40 #[serde(rename = "modelParameters", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
42 pub model_parameters: Option<Option<std::collections::HashMap<String, models::MapValue>>>,
43 #[serde(rename = "input", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
45 pub input: Option<Option<serde_json::Value>>,
46 #[serde(rename = "version", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
48 pub version: Option<Option<String>>,
49 #[serde(rename = "metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
51 pub metadata: Option<Option<serde_json::Value>>,
52 #[serde(rename = "output", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
54 pub output: Option<Option<serde_json::Value>>,
55 #[serde(rename = "usage", skip_serializing_if = "Option::is_none")]
56 pub usage: Option<models::Usage>,
57 #[serde(rename = "level")]
58 pub level: models::ObservationLevel,
59 #[serde(rename = "statusMessage", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
61 pub status_message: Option<Option<String>>,
62 #[serde(rename = "parentObservationId", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
64 pub parent_observation_id: Option<Option<String>>,
65 #[serde(rename = "promptId", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
67 pub prompt_id: Option<Option<String>>,
68 #[serde(rename = "usageDetails", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
70 pub usage_details: Option<Option<std::collections::HashMap<String, i32>>>,
71 #[serde(rename = "costDetails", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
73 pub cost_details: Option<Option<std::collections::HashMap<String, f64>>>,
74 #[serde(rename = "environment", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
76 pub environment: Option<Option<String>>,
77}
78
79impl Observation {
80 pub fn new(id: String, r#type: String, start_time: String, level: models::ObservationLevel) -> Observation {
81 Observation {
82 id,
83 trace_id: None,
84 r#type,
85 name: None,
86 start_time,
87 end_time: None,
88 completion_start_time: None,
89 model: None,
90 model_parameters: None,
91 input: None,
92 version: None,
93 metadata: None,
94 output: None,
95 usage: None,
96 level,
97 status_message: None,
98 parent_observation_id: None,
99 prompt_id: None,
100 usage_details: None,
101 cost_details: None,
102 environment: None,
103 }
104 }
105}
106