Struct CoreMLModel

Source
pub struct CoreMLModel { /* private fields */ }
Expand description

CoreML model wrapper that provides Candle tensor integration

Implementations§

Source§

impl CoreMLModel

Source

pub fn load<P: AsRef<Path>>(path: P) -> Result<Self, CandleError>

Load a CoreML model from a .mlmodelc directory with default configuration

Source

pub fn load_with_function<P: AsRef<Path>>( path: P, config: &Config, function_name: &str, ) -> Result<Self, CandleError>

Load a CoreML model with a specific function name

Source

pub fn load_from_file<P: AsRef<Path>>( path: P, config: &Config, ) -> Result<Self, CandleError>

Load a CoreML model from a .mlmodelc directory following standard Candle patterns

Note: Unlike other Candle models, CoreML models are pre-compiled and don’t use VarBuilder. This method provides a Candle-compatible interface while loading from CoreML files.

Source

pub fn load_from_file_with_function<P: AsRef<Path>>( path: P, config: &Config, function_name: Option<&str>, ) -> Result<Self, CandleError>

Load a CoreML model with optional function name specification

Source

pub fn forward_single(&self, input: &Tensor) -> Result<Tensor, CandleError>

Run forward pass through the model with multiple inputs

Accepts tensors from CPU or Metal devices, rejects CUDA tensors. Returns output tensor on the same device as the input tensors.

§Arguments
  • inputs - Slice of tensors corresponding to the input_names in config order

Convenience method for single-input models (backward compatibility)

Source

pub fn forward(&self, inputs: &[&Tensor]) -> Result<Tensor, CandleError>

Source

pub fn forward_all( &self, inputs: &[&Tensor], ) -> Result<HashMap<String, Tensor>, CandleError>

Forward pass returning all outputs as a HashMap

This is useful for models that have multiple outputs, such as the Qwen LM head which produces 16 different logits chunks that need to be concatenated.

Source

pub fn config(&self) -> &Config

Get the model configuration

Source

pub fn make_state(&self) -> Result<CoreMLState, CandleError>

Create a fresh state object for this model.

This enables efficient autoregressive generation by maintaining persistent KV-cache across multiple prediction calls.

§Returns

A new CoreMLState instance that can be used with predict_with_state(). For stateless models, this returns an empty state object that can still be used with stateful prediction methods (resulting in stateless behavior).

§Example
use candle_core::{Device, Tensor};
use candle_coreml::{CoreMLModel, Config};

let model = CoreMLModel::load("model.mlmodelc")?;

// Create state for efficient token generation
let mut state = model.make_state()?;

// Use state with predict_with_state() for streaming inference
Source

pub fn predict_with_state( &self, inputs: &[&Tensor], state: &mut CoreMLState, ) -> Result<Tensor, CandleError>

Run forward pass through the model with persistent state.

This method enables efficient autoregressive generation by maintaining KV-cache state across multiple prediction calls. Unlike the stateless forward() method, this preserves computation state between calls.

§Arguments
  • inputs - Slice of tensors corresponding to input_names in config order
  • state - Mutable reference to the model state (will be updated)
§Returns

Output tensor on the same device as the input tensors.

§Device Compatibility

Accepts tensors from CPU or Metal devices, rejects CUDA tensors.

§Example
use candle_core::{Device, Tensor};
use candle_coreml::{CoreMLModel, Config};

let model = CoreMLModel::load("model.mlmodelc")?;
let device = Device::Cpu;

let mut state = model.make_state()?;

// Generate tokens with persistent KV-cache
for i in 0..10 {
    let input = Tensor::ones((1, 1), candle_core::DType::I64, &device)?;
    let output = model.predict_with_state(&[&input], &mut state)?;
    println!("Token {}: {:?}", i, output);
}

Trait Implementations§

Source§

impl Debug for CoreMLModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> ErasedDestructor for T
where T: 'static,