1use prost_types::Struct;
2use rlmesh_proto::common::v1::MessageBytes;
3use rlmesh_proto::spaces::v1::SpaceSpec;
4
5#[derive(Debug, Clone, Default, PartialEq, Eq)]
6pub struct RuntimeRouteContext {
7 pub route_id: String,
8 pub env_component_id: String,
9 pub model_component_id: String,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq)]
13pub struct EnvConnectedEvent {
14 pub session_id: String,
15 pub route: RuntimeRouteContext,
16 pub env_id: String,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
20pub struct ModelConnectedEvent {
21 pub session_id: String,
22 pub route: RuntimeRouteContext,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct SessionStartedEvent {
27 pub session_id: String,
28 pub route: RuntimeRouteContext,
29 pub env_id: String,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq)]
33pub struct SessionEndedEvent {
34 pub session_id: String,
35 pub route: RuntimeRouteContext,
36 pub reason: String,
37 pub total_steps: i64,
38 pub total_episodes: i64,
39}
40
41#[derive(Debug, Clone, PartialEq, Eq)]
42pub struct SessionFailedEvent {
43 pub session_id: String,
44 pub route: RuntimeRouteContext,
45 pub reason: String,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq)]
49pub struct LogEvent {
50 pub session_id: String,
51 pub route: RuntimeRouteContext,
52 pub level: LogLevel,
53 pub message: String,
54 pub source: Option<String>,
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq)]
58pub enum LogLevel {
59 Debug,
60 Info,
61 Warn,
62 Error,
63}
64
65impl LogLevel {
66 pub fn as_str(&self) -> &'static str {
67 match self {
68 LogLevel::Debug => "debug",
69 LogLevel::Info => "info",
70 LogLevel::Warn => "warn",
71 LogLevel::Error => "error",
72 }
73 }
74}
75
76#[derive(Debug, Clone, PartialEq, Eq)]
77pub struct EpisodeStartedEvent {
78 pub session_id: String,
79 pub route: RuntimeRouteContext,
80 pub episode_id: String,
81 pub episode_record_id: String,
82 pub episode_index: i64,
83 pub env_index: i32,
84 pub started_from_auto_reset: bool,
85}
86
87#[derive(Debug, Clone, PartialEq)]
88pub struct EpisodeCompletedEvent {
89 pub session_id: String,
90 pub route: RuntimeRouteContext,
91 pub episode_id: String,
92 pub episode_record_id: String,
93 pub episode_index: i64,
94 pub env_index: i32,
95 pub step_count: i64,
96 pub cumulative_reward: f64,
97 pub terminated: bool,
98 pub truncated: bool,
99 pub duration_ms: i64,
100 pub final_info: Option<Struct>,
101}
102
103#[derive(Debug, Clone, PartialEq)]
104pub struct ActionReceivedEvent {
105 pub session_id: String,
106 pub route: RuntimeRouteContext,
107 pub episode_id: String,
108 pub episode_record_id: String,
109 pub episode_ids: Vec<String>,
110 pub episode_record_ids: Vec<String>,
111 pub step: i64,
112 pub env_index: i32,
113 pub action_space: SpaceSpec,
114 pub action: Option<MessageBytes>,
115}
116
117#[derive(Debug, Clone, PartialEq)]
118pub struct StepCompletedEvent {
119 pub session_id: String,
120 pub route: RuntimeRouteContext,
121 pub episode_id: String,
122 pub episode_record_id: String,
123 pub step: i64,
124 pub env_index: i32,
125 pub rewards: Vec<f64>,
126}
127
128#[derive(Debug, Clone, PartialEq)]
129pub struct ObservationEmittedEvent {
130 pub session_id: String,
131 pub route: RuntimeRouteContext,
132 pub episode_id: String,
133 pub episode_record_id: String,
134 pub episode_ids: Vec<String>,
135 pub episode_record_ids: Vec<String>,
136 pub step: i64,
137 pub env_index: i32,
138 pub is_reset: bool,
139 pub num_envs: u32,
140 pub observation_space: SpaceSpec,
141 pub observation: Option<MessageBytes>,
142}
143
144#[derive(Debug, Clone, PartialEq)]
145pub struct TimingSummary {
146 pub operation: String,
147 pub component_id: String,
148 pub name: String,
149 pub sample_count: u64,
150 pub avg_ms: Option<f64>,
151 pub p50_ms: Option<f64>,
152 pub p95_ms: Option<f64>,
153 pub p99_ms: Option<f64>,
154}
155
156#[derive(Debug, Clone, PartialEq)]
157pub struct TelemetryWindowEvent {
158 pub session_id: String,
159 pub route: RuntimeRouteContext,
160 pub window_seconds: u32,
161 pub sample_count: u64,
162 pub steps_per_second: Option<f64>,
163 pub request_bytes_per_second: Option<f64>,
164 pub response_bytes_per_second: Option<f64>,
165 pub timings: Vec<TimingSummary>,
166 pub env_latency_ms_avg: Option<f64>,
167 pub env_latency_ms_p50: Option<f64>,
168 pub env_latency_ms_p95: Option<f64>,
169 pub env_latency_ms_p99: Option<f64>,
170 pub model_latency_ms_avg: Option<f64>,
171 pub model_latency_ms_p50: Option<f64>,
172 pub model_latency_ms_p95: Option<f64>,
173 pub model_latency_ms_p99: Option<f64>,
174 pub round_trip_ms_avg: Option<f64>,
175 pub round_trip_ms_p50: Option<f64>,
176 pub round_trip_ms_p95: Option<f64>,
177 pub round_trip_ms_p99: Option<f64>,
178 pub reconnects: u64,
179 pub drops: u64,
180}
181
182#[derive(Debug, Clone, PartialEq)]
183pub struct TelemetrySummaryEvent {
184 pub session_id: String,
185 pub route: RuntimeRouteContext,
186 pub total_seconds: u32,
187 pub sample_count: u64,
188 pub steps_per_second: Option<f64>,
189 pub request_bytes_per_second: Option<f64>,
190 pub response_bytes_per_second: Option<f64>,
191 pub timings: Vec<TimingSummary>,
192 pub env_latency_ms_avg: Option<f64>,
193 pub env_latency_ms_p50: Option<f64>,
194 pub env_latency_ms_p95: Option<f64>,
195 pub env_latency_ms_p99: Option<f64>,
196 pub model_latency_ms_avg: Option<f64>,
197 pub model_latency_ms_p50: Option<f64>,
198 pub model_latency_ms_p95: Option<f64>,
199 pub model_latency_ms_p99: Option<f64>,
200 pub round_trip_ms_avg: Option<f64>,
201 pub round_trip_ms_p50: Option<f64>,
202 pub round_trip_ms_p95: Option<f64>,
203 pub round_trip_ms_p99: Option<f64>,
204 pub reconnects: u64,
205 pub drops: u64,
206}