use std::path::Path;
use crate::core::config::acceleration::AccelerationConfig;
use super::tensor::InferenceTensor;
#[derive(Debug, thiserror::Error)]
pub enum InferenceError {
#[error("failed to load inference model: {0}")]
Load(String),
#[error("inference run failed: {0}")]
Run(String),
#[error("tensor conversion failed: {0}")]
Tensor(String),
}
pub trait InferenceSession: Send + Sync {
fn run(&self, inputs: Vec<(String, InferenceTensor)>) -> Result<Vec<(String, InferenceTensor)>, InferenceError>;
fn input_names(&self) -> &[String];
}
pub trait InferenceBackend: Send + Sync {
fn load(
&self,
model_path: &Path,
accel: Option<&AccelerationConfig>,
) -> Result<Box<dyn InferenceSession>, InferenceError>;
#[allow(dead_code)]
fn load_with_thread_budget(
&self,
model_path: &Path,
accel: Option<&AccelerationConfig>,
thread_budget: usize,
) -> Result<Box<dyn InferenceSession>, InferenceError> {
let _ = thread_budget;
self.load(model_path, accel)
}
#[allow(dead_code)]
fn load_from_memory(
&self,
model_bytes: &[u8],
accel: Option<&AccelerationConfig>,
) -> Result<Box<dyn InferenceSession>, InferenceError>;
}