Breaking Changes:
Tinkex.Config now requires api_key to start with the 'tml-' prefix,
matching Python SDK behavior. Existing API keys without this prefix
will raise ArgumentError during config validation.
New Features:
Client-side validation for loss_fn and loss_fn_config parameters in
TrainingClient.forward/4 and TrainingClient.forward_backward/4:
- Validates loss_fn against LossFnType.values/0 before sending request
- Validates loss_fn_config is a map with string/atom keys and numeric
values (integers, floats, or parseable strings)
- Normalizes loss_fn_config keys to strings and values to floats
- Returns user-category validation errors with allowed values in data
Added LossFnType.values/0 returning all valid loss function atoms:
[:cross_entropy, :importance_sampling, :ppo, :cispo, :dro]
Bug Fixes:
checkpoint_multi_delete_live.exs now computes await timeout dynamically
based on config timeout and max_retries, preventing premature Task
timeouts during checkpoint saves with retries.
Documentation:
- All guides and examples updated to use tml- prefixed API keys
- CLI help text updated to reference Qwen/Qwen3-8B model
- Added Python SDK parity analysis document for commits e7a0d0c and
2d8e9d5 in docs/20251214/python-sdk-parity/
Test Coverage:
- Added test for api_key prefix validation error
- Added tests for loss_fn validation (forward and forward_backward)
- Added tests for loss_fn_config validation and normalization
- Added test for LossFnType.values/0
- Updated all test fixtures to use tml- prefixed API keys
Python SDK Parity:
Ports validation behavior from Python SDK commits e7a0d0c and 2d8e9d5
(Dec 15, 2025). The tml- prefix requirement aligns with Thinking
Machines Lab authentication standards.