Releases: aws/nova-forge-sdk
Release list
Release 1.4.9
Release Notes 2026-06-04
New Features
- Multi-Turn Reinforcement Learning (MTRL) Support on Serverless SageMaker Training Jobs (SMTJ)
- Added support for Multi-turn RFT on SMTJ Serverless. This technique will output a Restricted Model Package (RMP), which can be used in iterative training, evaluation, and model deployment.
- Users can now pass ARNs of their RL agents deployed on Bedrock AgentCore or bring in custom 3P lambdas, to run the multiturn RL training loop on SageMaker Serverless
- MTRL Dataset Validation
- Added support for MTRL dataset transformation and validation.
- Breaking Change: platform is now a required parameter for RFT_MULTITURN_LORA and RFT_MULTITURN_FULL training methods. Callers must pass either Platform.SMTJServerless or Platform.SMHP.
- SageMaker Inference Component Support
- Added support for inference components, which decouple the model from the endpoint infrastructure. This provides more flexibility to deploy different model checkpoints as separate inference components on a single endpoint — each with its own resource requirements and independent lifecycle management.
- Create step_wise_training_metrics.csv for SMHP SFT jobs
- Added generate_training_metrics_csv method to ForgeTrainer that fetches CloudWatch logs for a completed SMHP SFT job, extracts step-level metrics, and uploads csv to S3.
Release 1.4.8
Release Notes 2026-05-26
New Features
InspectLens Job-Based Evaluation
- Added support for running InspectLens benchmarks as SageMaker Training Jobs via a new
EvaluationTask.INSPECT_LENSevaluation type andInspectLensConfigfor configuring benchmarks, inference provider, and output path. - A quickstart notebook (
samples/inspectlens_quickstart.ipynb) is included to help you get started. - For a full overview of InspectLens and how it can be used for evaluation, see the InspectLens Evaluation Guide.
- You can also learn more about InspectLens support on SageMaker Training jobs here.
Bug Fix
- Fixed
find_sagemaker_model_by_tagto return the most recently created SageMaker model when multiple models share the same escrow URI tag, rather than returning an arbitrary match.
Release 1.4.7
Release Notes
2026-05-14
Enhancements
get_config() method
- Added a method that allows users to preview overridable training parameters before launching a job
Added typed DataMixingConfig and TrainingOverrides**
- Allows for IDE autocomplete and static validation of key/values
Bug Fixes
Path Traversal Protection
- Added path traversal protection in SMTJ wheel extraction code
Improved get_logs() error messaging
- Added ValueError with actionable message when get_logs() is called without a prior job
SHA-256 Checksum Verification
- Added checksum verification for bundled wheel files before uploading
Validation
- Added proper validation so users can provide reasoning_effort=None in training overrides to explicitly disable reasoning without errors
- Added separate validation logic for temperature parameter to handle int/float type coercion correctly
Set minimum version of pyarrow to 14.0.1
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
Release 1.4.6
Release Notes
2026-05-14
New Features
Data Mixing
- Add SMTJServerless platform support for data mixing for Supervised Fine-Tuning (SFT) on Nova Lite 2
Dataset
- Auto-derive S3 output paths for local and HuggingFace filter chains
Enhancements
Documentation
- Restructure docs and agent context for AI-native development — split
docs/spec.mdinto 10 per-domain files
Training
- Add SFT validation dataset support (
validation_data_s3_path,val_check_interval) to SMTJ, SMTJServerless, and SMHP platforms
HubContent Version for Serverless Jobs and New Hyperparameters
- Added HubContent version support for serverless jobs using base model ARNs
- Added
save_stepsandfine_tuned_modelas hyperparameters for SMTJ serverless jobs
Bug Fixes
Region Configuration
- Fixed region configuration to use an explicit parameter instead of implicitly depending on
DEFAULT_AWS_REGIONenvironment variable
Release 1.4.5
New Features
HuggingFace Hub Integration for Data Prep
- Added integration for HuggingFace Hub in Data Prep pipeline, enabling users to stream HuggingFace datasets to remove manual effort to download datasets
Batch Sample Tracing for Training Data
- Added enable_batch_sample_tracing parameter to ForgeTrainer, enabling customers to diagnose gradient spikes during CPT by identifying which training data lines were used in a specific training step
Enhancements
- Added hub_content_version parameter to ForgeTrainer, ForgeEvaluator, ForgeInference, and NovaModelCustomizer, allowing users to pin specific versions of hub content
Release 1.4.4
Bug Fixes
- Included the agi_data_curator-1.0.0-py3-none-any.whl in the PyPi distribution
Release 1.4.3
New Features
SageMaker Model Deployment
- Added FP8 memory optimization support for SageMaker endpoints via KV_CACHE_DTYPE="fp8" and QUANTIZATION_DTYPE="fp8" environment variables.
- Added 256k context length support for Nova Lite 2 on ml.p5.48xlarge with max concurrency 2.
Data Preparation
- Added a language detection filter (FilterMethod.LANGUAGE_DETECTION) for DatasetLoader.filter(). Filters samples by detected language using FastText lid.176.bin with a required languages allowlist (ISO 639-1 codes) and optional min_score threshold. The SDK auto-downloads and stages the model to S3 on first use and runs on SageMaker Training Jobs.
Enhancements
SageMaker Model Deployment
-
Added SageMakerEndpointEnvironment Pydantic model for typed, validated endpoint configuration, replacing the raw dictionary.
-
Renamed sagemaker_environment_variables to sagemaker_environment on ForgeDeployer.deploy(), ForgeDeployer.deploy_to_sagemaker(), NovaModelCustomizer.deploy(), and NovaModelCustomizer.deploy_to_sagemaker(). Type changed from Optional[Dict[str, Any]] to Optional[SageMakerEndpointEnvironment].
-
Renamed environment_variables to sagemaker_environment on NovaModelCustomizer.deploy_to_sagemaker() with the same type change.
Data Preparation
-
Removed filter-transform ordering constraints. DatasetLoader.filter() no longer enforces ordering relative to transform(). All filter methods can now be queued in any order.
-
Changed InvalidRecordsFilterOperation to stream records through a lazy generator instead of collecting into a list, reducing peak memory for large datasets.
-
Made FilterOperationResult.filtered_count and total_count required fields. Every filter operation must now report how many records it scanned and dropped. Custom filter operations must pass both counts explicitly (defaults removed).
-
Added extra = "forbid" to RFT Pydantic models (RFTMessage, RFTDatasetSample) to reject unexpected fields, including unsupported multimodal data.
-
Removed the default system prompt from data transformation. When no system column is present, the system field is omitted from Converse output instead of being populated with a generic prompt.
-
Action required: If you relied on the auto-injected system prompt, add a system column to your source data or post-process the transformed output.
-
Removed default_system_msg class attribute from DatasetTransformer.
-
Made OperationResult.output_state a required argument (no default).
-
Removed _default_job_caching_config().
-
Action required: Use JobCachingConfig() instead and replace dict .get() access with attribute access (e.g., config.enabled).
-
Removed _get_default_validation_config().
-
Action required: Use ValidationConfig() instead and replace dict .get() access with attribute access (e.g., config.iam).
SDK Architecture
- Replaced raw dict configs with typed Pydantic models: validation_config → ValidationConfig, job_caching_config → JobCachingConfig, reward output validation → RewardFunctionOutput/RewardMetric, RFT queue message counts → QueueMessageCounts. Provides attribute access and construction-time validation.
SMTJ Job Handling
- Changed SMTJ to pass job_name directly as base_job_name (SageMaker appends its own timestamp suffix). Updated JOB_NAME_REGEX to match SageMaker's actual constraint, rejecting trailing hyphens.
Documentation
- Updated README for modular service classes (ForgeTrainer, ForgeEvaluator, ForgeDeployer, ForgeInference).
- Updated Copyright and License notice from "Copyright 2025 Amazon.com" to "Copyright Amazon.com, Inc. or its affiliates". This is now included at the top of
testspython files.
Bug Fixes
- Fixed SMTJ job name regex to match SageMaker's actual constraint ([a-zA-Z0-9]{0,62})
- Fixed logging for internal SMTJ runtime manager.
Release 1.4.2
Bug Fix:
- When extracting inference results, prevent tar archives from writing files outside the intended directory
Release 1.4.1
New Features
- Add support for new SageMaker Inference environment variables to enable suffix decoding
Release 1.4.0
Hey Nova Builders! This release includes a major refactor of the Nova Forge SDK, improvements to the data preparation experience with the SDK, and better support for SMTJ Serverless jobs. We also have better local validations for your jobs, and resolved several common pain points causing slowdowns in experimentation with the SDK.
New Features
Platform support
- Support RFT training jobs in SMTJ Serverless
Data preparation
-
Added support for loading Parquet and Arrow datasets
-
All loaders now support directories --- pass a directory path and the loader scans for matching files
-
New filters such as fuzzy deduplication(
FilterMethod.FUZZY_DEDUP), exact deduplication(FilterMethod.EXACT_DEDUP), and general text filtering (FilterMethod.DEFAULT_TEXT_FILTER) -
A new
GlueRuntimeManagerto enable scalable data preparation jobs for the new filters
Telemetry
- Added telemetry for how the SDK is used to help guide our future development. To opt out, use the
TELEMETRY_OPT_OUTenvironment variable.
Enhancements
SDK Architecture
-
Decomposed
NovaModelCustomizerintoForgeTrainer,ForgeEvaluator,ForgeDeployer, andForgeInferenceservice classes.-
Restructured example notebooks to use the new service classes
-
NovaModelCustomizerstill works as normal for now. It is marked as deprecated, and the functions will be removed entirely in a future release.
-
Data preparation
-
Data validation expanded to check for reserved keywords in text and confirm that images and videos fit required training constraints (max 10 images/message, 10 MB/image, 1 video/message, 50 MB/video).
ValidateMethod.SCHEMArenamed toValidateMethod.INVALID_RECORDSto better highlight the new validation capability. -
Added
gifandwebpas valid image formats for multimodal data transformation -
Data validation can now be run as a filter instead of a validator to remove invalid samples from an otherwise valid dataset (
FilterMethod.INVALID_RECORDS) -
Support for auto-transforming datasets in OpenAI format with images to Converse format. Images are validated and auto-uploaded to S3 with valid Converse URI references.
-
Support using multimodal data to train Nova models with datamixing
Model Deployment
- Reuse previous uploads when deploying models, reducing wasted resources and allowing users to restart interrupted deployments from the uploaded model object
CloudWatch Logs
- Auto-resolve start times from the job when available, improving log-retrieval efficiency
Documentation
-
Migrated documentation and notebooks to the new modular service classes
-
Data preparation docs (
docs/data_prep.md) rewritten with operations-at-a-glance table, runtime manager section, and before/after examples -
Quickstart notebook overhauled with sample data upload, IAM role creation, and step-by-step commentary
Bug Fixes
- Added validation for instance count for SMTJ training
-
Fixed a bug with resolving training manifests due to a trailing slash character
-
Fix zombie processes in
kill_taskfor multiturn RFT on EC2 -
Eager validation in
load()catches bad file paths and missing files immediately instead of failing later in the data prep pipeline -
Fixed checkpoint resolution for SMTJ Serverless
-
Fixed bug in platform validation for SMTJ Serverless eval jobs
-
Fixed
get_job_status()to raise a clear error when EKS cluster is inaccessible -
Fixed
scale_cluster()to copy all optional fields when updating RIGs