Skip to main content
Run inference on your own low-rank adapter (LoRA) by uploading it to Together AI and deploying it for dedicated model inference. You can import an adapter from Hugging Face Hub or upload it from an S3 archive, whether or not you trained it on Together AI. You can also upload a full fine-tuned model instead of an adapter.
You don’t need to upload adapters created with post-training, because their inference checkpoints are already registered on the platform. Checkpoints on some base models aren’t registered, so you can’t deploy them.On supported base models, you can also attach several post-training adapters to one running multi-LoRA deployment of their base model and choose an adapter per request.

Requirements

An adapter is eligible for upload if it meets these requirements:
  • Source: Hugging Face Hub or an S3 presigned URL.
  • Files: The adapter directory must contain adapter_config.json and adapter_model.safetensors.
  • Base model: The adapter must target a base model that Together AI supports for dedicated inference.
If you’re uploading from S3, you must package the adapter files in a single archive (.zip or .tar.gz) with the files at the root of the archive, not nested inside an extra top-level directory. The presigned URL must point to the archive and have an expiration of at least 100 minutes.

Create the adapter

Register the adapter in your project before you upload weights. Every adapter must reference a supported base model via baseModelId. Give the adapter a readable name (for example my-stsb-lora), rather than a Hugging Face repo ID. If you pass an org-prefixed name like predibase/glue_stsb, the prefix will be stored on top of your project slug, and the catalog will render a doubled slug (for example your-project/predibase/glue_stsb).
Strip the org and pass only the bare repo name. An adapter that already has a doubled name can’t be renamed, so the only fix is to delete it and re-upload under the correct name.
List supported models and copy the id of the architecture the adapter targets (for example ml_CbJNwQC2ZqCU2iFT3mrCh).
Save the returned model id (for example ml_abc123). You pass this value to the upload command in the next step. The --type adapter you set on create marks the record as a LoRA adapter, so the upload commands derive the type from the record and take no type flag.

Create request fields

Upload the adapter

After creating the adapter record, upload its weights. Use a local upload when the files are on your machine, or a remote upload to stream them from Hugging Face or a presigned S3 URL. The adapter’s type and base model come from the record you created, so you don’t pass them again here.

Upload from your machine

Point the CLI at your local adapter directory:
CLI

Upload from Hugging Face or S3

A remote upload streams the weights server-side. Pass the source URL as --from (use --token for gated or private Hugging Face repos). For S3, pass the presigned archive URL as --from (no token needed):
The response is the upload job object, with id, modelId, and status at the top level. Save the job id. You use it to poll for status.

Upload from the console

The console combines creating the adapter record and uploading its weights into a single form.
1

Set the upload type

Set Upload type to Adapter (LoRA).
2

Choose the source

Under Model source, select Import from Hugging Face and enter the repo path or URL (add a Hugging Face token for gated or private repos), or select Download from S3 and paste a presigned archive URL. Upload from your machine shows a CLI command instead, so use tg models upload for files on your machine.
3

Name and configure the adapter

Enter a Model name, choose a Visibility, and select the Compatible base model the adapter runs on top of.
4

Import

Select Import. The upload runs server-side, with progress shown below the form. You can leave the form: the adapter appears under My models with an Uploading badge while the job is pending or running.
The Upload model form in the Together AI console, set to Adapter (LoRA) with Import from Hugging Face selected, showing fields for repository or URL, Hugging Face token, model name, visibility, and compatible base model.

Check upload status

Poll the remote-upload job until status is REMOTE_UPLOAD_STATUS_SUCCEEDED. The adapter is ready to deploy at that point.
Once the job reaches REMOTE_UPLOAD_STATUS_SUCCEEDED, confirm the files landed:
CLI
You can also track uploads on the My models page in the console. While a remote upload is pending or running, the adapter floats to the top of My models with an Uploading badge. Open the adapter to watch the live Upload progress event log on the model detail page. The revisions table appears after the upload finishes. That list also includes Internal-visibility adapters from other projects in your organization. Use the Visibility filter to show only Internal or only Private adapters.

Check revision validation

After files land, Together validates the revision’s weights automatically. Validation checks that the weights are in safetensors format and that the adapter is compatible with its base model. A revision must reach REVISION_VALIDATION_STATUS_SUCCESS before you can deploy it when you pin that revision explicitly. List revisions for an adapter:
CLI
The list and retrieve revision APIs also return validation fields on each revision. Replace $PROJECT_ID with your project ID (proj_...):
Shell
Each revision in the response includes:

Revision validation fields

validationStatus values

When validation fails, each entry in validationErrors includes rule, severity, and message describing what went wrong.

Deploy the adapter

Once the upload completes, your adapter has a model ID (ml_...) in your project, linked to its base model. Deploy it the same way as a base model, using a config for its base model. The CLI’s deploy command creates the endpoint, attaches a deployment, and routes all traffic to it in one step. For an adapter, pass --merge, which deploys the adapter merged into its base model. The SDK has no single equivalent, so the Python and TypeScript samples run the same steps individually:
See Manage deployments for the full deployment lifecycle.

Run inference

Once the deployment is READY and routable, call the endpoint by its endpoint string (<project_slug>/<endpoint_name>), the same as any other dedicated endpoint. Dedicated model inference is served at https://api-inference.together.ai:

Troubleshooting

“Model name already exists”: Each uploaded adapter needs a unique name. Adapter versioning isn’t supported, so re-upload under a new name. “Model not found” during upload: Create the adapter record with tg models create --type adapter, then pass the returned id to the upload command. 401 or 403 during upload: For CLI uploads, run tg whoami to confirm you’re logged in. For SDK uploads, confirm that TOGETHER_API_KEY is set. If your Together AI credentials are valid, check that your Hugging Face token has permission for private repos, or that your S3 presigned URL is valid and hasn’t expired. Upload job stuck in Processing: The job usually can’t reach the source. For S3, confirm the presigned URL hasn’t expired. For Hugging Face, confirm your token has access to the repo. Missing required files: Confirm that both adapter_config.json and adapter_model.safetensors are at the root of your S3 archive, or in the repo’s Files and versions tab on Hugging Face. Base model incompatibility: Confirm that the base model you trained the adapter against is one of the supported models for dedicated model inference. Adapter delete fails with the model is referenced by a live deployment (HTTP 400): A deployment still references this adapter. Stop the deployment, wait for DEPLOYMENT_STATE_STOPPED, delete the deployment, then delete the adapter with tg models rm <adapter_id>.