Ruby DSL#
The Ruby DSL provides high-level ergonomics on top of MLX::NN::Module and
MLX::Optimizers while preserving compatibility with native MLX execution.
Core entry points:
MLX::DSL::ModelMLX::DSL::ModelMixinMLX::DSL::TrainerMLX::DSL::DataMLX::DSL.experimentMLX::DSL.splits
require "mlx"
model = MyModel.new
trainer = model.trainer(optimizer: optimizer) { |x:, y:| loss_fn.call(model.call(x), y) }
data = MLX::DSL::Data.from(train_rows).batch(32)
plan = MLX::DSL.splits { train data }
Quick start:
require "mlx"
class Mlp < MLX::DSL::Model
option :in_dim
option :hidden_dim, default: 128
option :out_dim
layer :net do
sequential do
linear in_dim, hidden_dim
relu
linear hidden_dim, out_dim
end
end
def call(x)
net.call(x)
end
end
model = Mlp.new(in_dim: 32, out_dim: 10)
Reference pages:
# Typical progression:
# 1) model_declaration + builder_and_graphs
# 2) train_step + trainer_core/trainer_data
# 3) checkpoints_and_resume + artifact_policy
# 4) experiment + split_plan for reusable run configs