synth_ai_core/data/
sensors.rs1use crate::data::levers::ScopeKey;
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5use std::collections::HashMap;
6
7#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
8#[serde(rename_all = "snake_case")]
9pub enum SensorKind {
10 Reward,
11 Timing,
12 Rollout,
13 Resource,
14 Safety,
15 Quality,
16 Trace,
17 ContextApply,
18 Experiment,
19 Custom,
20}
21
22#[derive(Clone, Debug, Serialize, Deserialize)]
23pub struct Sensor {
24 pub sensor_id: String,
25 pub kind: SensorKind,
26 pub scope: Vec<ScopeKey>,
27 pub value: Value,
28 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub units: Option<String>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub timestamp: Option<DateTime<Utc>>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub trace_id: Option<String>,
34 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
35 pub metadata: HashMap<String, Value>,
36}
37
38#[derive(Clone, Debug, Serialize, Deserialize)]
39pub struct SensorFrame {
40 pub scope: Vec<ScopeKey>,
41 pub sensors: Vec<Sensor>,
42 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
43 pub lever_versions: HashMap<String, i64>,
44 #[serde(default, skip_serializing_if = "Vec::is_empty")]
45 pub trace_ids: Vec<String>,
46 #[serde(default, skip_serializing_if = "Option::is_none")]
47 pub created_at: Option<DateTime<Utc>>,
48 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub frame_id: Option<String>,
50 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
51 pub metadata: HashMap<String, Value>,
52}
53
54#[derive(Clone, Debug, Serialize, Deserialize)]
55pub struct SensorFrameSummary {
56 pub frame_id: String,
57 pub created_at: DateTime<Utc>,
58 pub sensor_count: usize,
59 #[serde(default)]
60 pub sensor_kinds: Vec<String>,
61 #[serde(default)]
62 pub trace_ids: Vec<String>,
63 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
64 pub lever_versions: HashMap<String, i64>,
65}