1use meerkat_core::lifecycle::{InputId, RunId};
8use meerkat_core::types::SessionId;
9
10use crate::accept::AcceptOutcome;
11use crate::completion::CompletionHandle;
12use crate::input::Input;
13use crate::input_state::StoredInputState;
14use crate::meerkat_machine_types::{
15 ImageOperationRoutingRequest, ImageOperationRoutingResult, SessionLlmReconfigureReport,
16 SessionLlmReconfigureRequest, SwitchTurnRequest,
17};
18use crate::runtime_state::RuntimeState;
19use crate::terminal_status::{
20 InteractionSelector, InteractionTerminalReport, RunTerminalReport, Sourced,
21};
22use crate::traits::{ResetReport, RetireReport, RuntimeDriverError};
23
24#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
29#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
30pub trait SessionServiceRuntimeExt: Send + Sync {
31 async fn accept_input(
33 &self,
34 session_id: &SessionId,
35 input: Input,
36 ) -> Result<AcceptOutcome, RuntimeDriverError>;
37
38 async fn accept_input_with_completion(
41 &self,
42 session_id: &SessionId,
43 input: Input,
44 ) -> Result<(AcceptOutcome, Option<CompletionHandle>), RuntimeDriverError>;
45
46 async fn runtime_state(
48 &self,
49 session_id: &SessionId,
50 ) -> Result<RuntimeState, RuntimeDriverError>;
51
52 async fn resolved_session_llm_capabilities(
54 &self,
55 _session_id: &SessionId,
56 ) -> Result<Option<crate::meerkat_machine_types::SessionLlmCapabilitySurface>, RuntimeDriverError>
57 {
58 Err(RuntimeDriverError::Internal(
59 "resolved session llm capabilities are not implemented by this runtime adapter".into(),
60 ))
61 }
62
63 async fn retire_runtime(
65 &self,
66 session_id: &SessionId,
67 ) -> Result<RetireReport, RuntimeDriverError>;
68
69 async fn reset_runtime(
71 &self,
72 session_id: &SessionId,
73 ) -> Result<ResetReport, RuntimeDriverError>;
74
75 async fn input_state(
78 &self,
79 session_id: &SessionId,
80 input_id: &InputId,
81 ) -> Result<Option<StoredInputState>, RuntimeDriverError>;
82
83 async fn input_state_by_idempotency_key(
94 &self,
95 session_id: &SessionId,
96 idempotency_key: &str,
97 ) -> Result<Option<StoredInputState>, RuntimeDriverError>;
98
99 async fn interaction_terminal_status(
109 &self,
110 session_id: &SessionId,
111 selector: InteractionSelector,
112 ) -> Result<Option<Sourced<InteractionTerminalReport>>, RuntimeDriverError>;
113
114 async fn run_terminal_status(
122 &self,
123 session_id: &SessionId,
124 run_id: &RunId,
125 ) -> Result<Sourced<RunTerminalReport>, RuntimeDriverError>;
126
127 async fn list_active_inputs(
129 &self,
130 session_id: &SessionId,
131 ) -> Result<Vec<InputId>, RuntimeDriverError>;
132
133 async fn reconfigure_session_llm_identity(
135 &self,
136 session_id: &SessionId,
137 request: SessionLlmReconfigureRequest,
138 ) -> Result<SessionLlmReconfigureReport, RuntimeDriverError>;
139
140 async fn configure_model_routing_baseline(
141 &self,
142 _session_id: &SessionId,
143 _baseline_model: meerkat_core::lifecycle::run_primitive::ModelId,
144 _realtime_capable: bool,
145 ) -> Result<(), RuntimeDriverError> {
146 Err(RuntimeDriverError::Internal(
147 "model routing baseline is not supported by this runtime adapter".into(),
148 ))
149 }
150
151 async fn session_model_routing_status(
152 &self,
153 _session_id: &SessionId,
154 ) -> Result<meerkat_core::image_generation::SessionModelRoutingStatus, RuntimeDriverError> {
155 Err(RuntimeDriverError::Internal(
156 "model routing status is not supported by this runtime adapter".into(),
157 ))
158 }
159
160 async fn request_switch_turn(
161 &self,
162 _session_id: &SessionId,
163 _request: SwitchTurnRequest,
164 ) -> Result<meerkat_core::image_generation::SwitchTurnControlResult, RuntimeDriverError> {
165 Err(RuntimeDriverError::Internal(
166 "switch_turn is not supported by this runtime adapter".into(),
167 ))
168 }
169
170 async fn admit_model_routing_assistant_turn(
171 &self,
172 _session_id: &SessionId,
173 ) -> Result<(), RuntimeDriverError> {
174 Err(RuntimeDriverError::Internal(
175 "model routing turn admission is not supported by this runtime adapter".into(),
176 ))
177 }
178
179 async fn begin_image_operation(
180 &self,
181 _session_id: &SessionId,
182 _request: ImageOperationRoutingRequest,
183 ) -> Result<ImageOperationRoutingResult, RuntimeDriverError> {
184 Err(RuntimeDriverError::Internal(
185 "image operation routing is not supported by this runtime adapter".into(),
186 ))
187 }
188
189 async fn deny_image_operation_plan(
190 &self,
191 _session_id: &SessionId,
192 _operation_id: meerkat_core::image_generation::ImageOperationId,
193 _reason: meerkat_core::image_generation::ImageOperationDenialReason,
194 ) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
195 Err(RuntimeDriverError::Internal(
196 "image operation plan denial is not supported by this runtime adapter".into(),
197 ))
198 }
199
200 async fn activate_image_operation_override(
201 &self,
202 _session_id: &SessionId,
203 _operation_id: meerkat_core::image_generation::ImageOperationId,
204 ) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
205 Err(RuntimeDriverError::Internal(
206 "image operation activation is not supported by this runtime adapter".into(),
207 ))
208 }
209
210 async fn classify_image_operation_terminal(
211 &self,
212 _session_id: &SessionId,
213 _operation_id: meerkat_core::image_generation::ImageOperationId,
214 _observation: meerkat_core::image_generation::ImageProviderTerminalObservation,
215 _provider_text: meerkat_core::image_generation::ProviderTextDisposition,
216 ) -> Result<meerkat_core::image_generation::ImageOperationTerminalClass, RuntimeDriverError>
217 {
218 Err(RuntimeDriverError::Internal(
219 "image operation terminal classification is not supported by this runtime adapter"
220 .into(),
221 ))
222 }
223
224 async fn complete_image_operation(
225 &self,
226 _session_id: &SessionId,
227 _operation_id: meerkat_core::image_generation::ImageOperationId,
228 _terminal: meerkat_core::image_generation::ImageOperationTerminalClass,
229 ) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
230 Err(RuntimeDriverError::Internal(
231 "image operation completion is not supported by this runtime adapter".into(),
232 ))
233 }
234
235 async fn restore_image_operation_override(
236 &self,
237 _session_id: &SessionId,
238 _operation_id: meerkat_core::image_generation::ImageOperationId,
239 ) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
240 Err(RuntimeDriverError::Internal(
241 "image operation restore is not supported by this runtime adapter".into(),
242 ))
243 }
244}
245
246#[cfg(test)]
247mod tests {
248 use super::*;
249
250 fn _assert_object_safe(_: &dyn SessionServiceRuntimeExt) {}
252}