ark-api-ffi 0.16.0

Ark low-level Wasm FFI API
Documentation
define_api_id!(0xaed6_0109_4f07_3c83, "ml-v4");

pub use super::ml_v1::FutureHandle;
use crate::FFIResult;
use bytemuck::Pod;
use bytemuck::Zeroable;

#[repr(C)]
#[derive(Copy, Clone, PartialEq, Debug, Pod, Zeroable)]
pub struct ProtocolConfig {
    pub feature_count: u32,
    pub action_count: u32,
    pub hidden: u32,
    pub alpha: f32,
    /// Actually a boolean, but must be a u32 for ffi reasons.
    /// 0 for false, non-zero for true.
    pub use_terminal_masking: u32,
    pub learning_rate_init: f32,
    pub learning_rate_end: f32,
    pub learning_rate_steps: u32,
    pub batch_size: u32,
    pub memory_min_size: u32,
    pub memory_max_size: u32,
    pub gamma: f32,
    pub rollout_length: u32,
}

#[allow(clippy::too_many_arguments)]
#[ark_api_macros::ark_bindgen(imports = "ark-ml-v4")]
mod ml {
    use super::*;

    extern "C" {
        /// Starts training.
        ///
        /// The promise outputs a `TrainingHandle`.
        ///
        /// Will start from a checkpoint if the checkpoint parameter is non-empty.
        pub fn start_training(
            hive_url: &str,
            hive_port: u32,
            game_name: &str,
            experiment_name: &str,
            num_remote_workers: u32,
            config: &str,
            checkpoint: &str,
            training_duration_in_seconds: u64,
            protocol: &ProtocolConfig,
        ) -> FFIResult<FutureHandle>;
    }
}

pub use ml::*;