Skip to main content

Key Features

Controls and Simulation Focus

Onyx is purpose-built for controls and simulation engineers who need AI models that:
  • Predict system dynamics - Model continuous hardware physics like acceleration/torque
  • Use hardware sensor data - Drop in about ~1 hour of time series data (~10Hz+ sampling rate)
  • Run fast at inference - Deploy for real-time simulation and embedded systems at 1kHz+, with model file sizes between ~10-500KB
  • Simulate trajectories - Our models add a simulate() method to industry standard model libraries (eg. PyTorch) for multi-step trajectories with automatic state management
  • Can be verified - By training small, fast models, we can verify the model’s full input-output behavior before deployment for reliability and safety

High-Level Workflow

1

Upload Data

Upload time series data from your hardware that captures the model inputs and outputs.
2

Train Models

Train or optimize models on your data from Python code or the platform UI. Training jobs will run in parallel on Onyx’s training infrastructure.
3

Deploy

Pull your trained models directly from code, each model is automatically traced and versioned for reproducibility.

Quick Example

Here’s a short example to show the style/shape of code used with Onyx. We provide full control of all model/training parameters, but maintain well tuned default templates for common use cases.
from onyxengine import Onyx
from onyxengine.modeling import Input, Output, MLPConfig, TrainingConfig, AdamWConfig

# Initialize the client (defaults to ONYX_API_KEY env var)
onyx = Onyx()

# Define model inputs and outputs, including state relationships
outputs = [Output(name='acceleration')]
inputs = [
    Input(name='velocity', parent='acceleration', relation='derivative'),
    Input(name='position', parent='velocity', relation='derivative'),
    Input(name='control_input'),
]

# Configure AI model and send training job to Onyx infrastructure
model_config = MLPConfig(
    outputs=outputs,
    inputs=inputs,
    dt=0.0025,
    sequence_length=8,
    hidden_layers=3,
    hidden_size=64,
    activation='relu',
    dropout=0.2,
    bias=True
)
training_config = TrainingConfig(
    training_iters=3000,
    train_batch_size=1024,
    test_dataset_size=1000,
    checkpoint_type='single_step',
    optimizer=AdamWConfig(lr=3e-4, weight_decay=1e-2),
    lr_scheduler=None
)
onyx.train_model(
    model_name='example_model',
    model_config=model_config,
    dataset_name='example_data',
    training_config=training_config,
)



"""
~2 minutes later, training completes...
"""
# Pull specific version of model directly from code and simulate trajectory
model = onyx.load_model(
    'example_model', 
    version_id='8c41702d-bb9c-4a6a-a212-efa00a2c92e8'
)
result = model.simulate(
    x0={'velocity': v0, 'position': p0},
    external_inputs={'control_input': u},
    sim_steps=100
)

Next Step: Installation

Installation

Set up your account and install the Python SDK