use meerkat_core::lifecycle::InputId;
use meerkat_core::types::SessionId;
use crate::accept::AcceptOutcome;
use crate::completion::CompletionHandle;
use crate::input::Input;
use crate::input_state::StoredInputState;
use crate::meerkat_machine_types::{
ImageOperationRoutingRequest, ImageOperationRoutingResult, SessionLlmReconfigureReport,
SessionLlmReconfigureRequest, SwitchTurnRequest,
};
use crate::runtime_state::RuntimeState;
use crate::traits::{ResetReport, RetireReport, RuntimeDriverError};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RuntimeMode {
V9Compliant,
}
#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
pub trait SessionServiceRuntimeExt: Send + Sync {
fn runtime_mode(&self) -> RuntimeMode;
async fn accept_input(
&self,
session_id: &SessionId,
input: Input,
) -> Result<AcceptOutcome, RuntimeDriverError>;
async fn accept_input_with_completion(
&self,
session_id: &SessionId,
input: Input,
) -> Result<(AcceptOutcome, Option<CompletionHandle>), RuntimeDriverError>;
async fn runtime_state(
&self,
session_id: &SessionId,
) -> Result<RuntimeState, RuntimeDriverError>;
async fn resolved_session_llm_capabilities(
&self,
_session_id: &SessionId,
) -> Result<Option<crate::meerkat_machine_types::SessionLlmCapabilitySurface>, RuntimeDriverError>
{
Err(RuntimeDriverError::Internal(
"resolved session llm capabilities are not implemented by this runtime adapter".into(),
))
}
async fn retire_runtime(
&self,
session_id: &SessionId,
) -> Result<RetireReport, RuntimeDriverError>;
async fn reset_runtime(
&self,
session_id: &SessionId,
) -> Result<ResetReport, RuntimeDriverError>;
async fn input_state(
&self,
session_id: &SessionId,
input_id: &InputId,
) -> Result<Option<StoredInputState>, RuntimeDriverError>;
async fn list_active_inputs(
&self,
session_id: &SessionId,
) -> Result<Vec<InputId>, RuntimeDriverError>;
async fn reconfigure_session_llm_identity(
&self,
session_id: &SessionId,
request: SessionLlmReconfigureRequest,
) -> Result<SessionLlmReconfigureReport, RuntimeDriverError>;
async fn configure_model_routing_baseline(
&self,
_session_id: &SessionId,
_baseline_model: meerkat_core::lifecycle::run_primitive::ModelId,
_realtime_capable: bool,
) -> Result<(), RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"model routing baseline is not supported by this runtime adapter".into(),
))
}
async fn session_model_routing_status(
&self,
_session_id: &SessionId,
) -> Result<meerkat_core::image_generation::SessionModelRoutingStatus, RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"model routing status is not supported by this runtime adapter".into(),
))
}
async fn request_switch_turn(
&self,
_session_id: &SessionId,
_request: SwitchTurnRequest,
) -> Result<meerkat_core::image_generation::SwitchTurnControlResult, RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"switch_turn is not supported by this runtime adapter".into(),
))
}
async fn admit_model_routing_assistant_turn(
&self,
_session_id: &SessionId,
) -> Result<(), RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"model routing turn admission is not supported by this runtime adapter".into(),
))
}
async fn begin_image_operation(
&self,
_session_id: &SessionId,
_request: ImageOperationRoutingRequest,
) -> Result<ImageOperationRoutingResult, RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"image operation routing is not supported by this runtime adapter".into(),
))
}
async fn activate_image_operation_override(
&self,
_session_id: &SessionId,
_operation_id: meerkat_core::image_generation::ImageOperationId,
) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"image operation activation is not supported by this runtime adapter".into(),
))
}
async fn complete_image_operation(
&self,
_session_id: &SessionId,
_operation_id: meerkat_core::image_generation::ImageOperationId,
_terminal: meerkat_core::image_generation::ImageOperationTerminalClass,
) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"image operation completion is not supported by this runtime adapter".into(),
))
}
async fn restore_image_operation_override(
&self,
_session_id: &SessionId,
_operation_id: meerkat_core::image_generation::ImageOperationId,
) -> Result<meerkat_core::image_generation::ImageOperationPhase, RuntimeDriverError> {
Err(RuntimeDriverError::Internal(
"image operation restore is not supported by this runtime adapter".into(),
))
}
}
#[cfg(test)]
mod tests {
use super::*;
fn _assert_object_safe(_: &dyn SessionServiceRuntimeExt) {}
#[test]
fn runtime_mode_equality() {
assert_eq!(RuntimeMode::V9Compliant, RuntimeMode::V9Compliant);
}
}