Skip to main content
Model weights are stored separately from Docker images, allowing you to version and update weights independently.

Upload methods

Best for large weight files. The CLI generates a presigned URL from your S3 bucket, and Reactor copies the data server-side. Nothing transits through your local machine.
reactor model weights --model my-model --version v1 --source s3://your-bucket/weights/
Flow:
  1. CLI uses your local AWS credentials to generate a presigned GET URL (1-hour expiry)
  2. CLI sends the presigned URL to the Reactor backend
  3. Reactor copies directly from your S3 bucket to its own storage
  4. CLI returns a job ID for tracking progress

Setting up S3 access

The CLI generates presigned URLs using your own AWS credentials, so no bucket policy change is needed in most cases. If your bucket has restrictive policies (VPC-only access, IP allowlists, or aws:SourceVpce conditions), you need to allow Reactor’s backend to fetch via the presigned URL. Add this statement to your bucket policy:
{
  "Sid": "AllowReactorWeightImport",
  "Effect": "Allow",
  "Principal": "*",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::your-bucket/weights/*",
  "Condition": {
    "StringLike": {
      "aws:UserAgent": "ReactorWeightImporter/*"
    }
  }
}
If you can’t modify your bucket policy, use direct upload instead. You can also copy weights to a less restrictive staging bucket first.

Troubleshooting S3 imports

ErrorFix
Access denied during importAdd the bucket policy above, or use direct upload instead.
Key not foundVerify the S3 path with aws s3 ls.
Import stuck in pendingLarge transfers take time. Check progress with reactor model weights --status <job-id>.
Expired tokenRetry the command. The CLI generates a fresh presigned URL each time.

Option 2: Direct upload

Best for smaller files or when weights are only available locally.
reactor model weights --model my-model --version v1 --source ./weights/
Files are uploaded directly from your machine to Reactor’s storage via a presigned PUT URL.

Versioning

Weights are versioned using the format model-name:version. Versions are arbitrary strings, but we recommend semantic tags:
reactor model weights --model my-model --version v1 --source ./weights/
reactor model weights --model my-model --version v2-finetune --source ./weights-v2/
Each version is stored independently. Publishing a model requires specifying which weight version to deploy.

Tracking upload progress

Both methods are asynchronous. Track progress with:
reactor model weights --status <job-id>
StatusMeaning
pendingJob is queued
in_progressTransfer is running
completedWeights are stored and ready
failedTransfer failed. Check the error message in the output.

Deleting weights

reactor model weights --model my-model --version v1 --delete
Deletion is permanent and immediate. No copies or backups are retained. See Data Security for details on how Reactor handles partner data.

Tips

  • Use S3 import when your weights are already in an AWS S3 bucket. It avoids bandwidth costs and is significantly faster for large files.
  • Large uploads (50GB+) benefit from the S3 import path since the transfer runs entirely server-side.
  • Direct upload works from anywhere. No AWS account required.