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