Skip to main content
Fine-tuning trains on your data. You provide it either as a training file (JSONL) or a managed dataset, mapped into one of the supported training formats. Files and datasets are managed via the API at https://gateway.omnia-voice.com/v1 or the dashboard’s fine-tuning wizard. You can also curate a managed dataset straight from your logged traffic; filtered by task, model, or auto-detected segment, with a disjoint eval holdout. A dataset is a frozen snapshot: logs age out on your retention window (7/30/90 days), but a dataset curated from them does not: curate what matters before it expires.
Scope a dataset to one task. A dataset built from mixed traffic teaches a muddle of behaviours; one scoped to a single objective teaches that objective well. Send a task label on every call with the X-Omnia-Tag header (e.g. document-summary), then filter by it when you curate. Because the task label is independent of the model, the same task spans every model you route it to; swap models or rewrite prompts, and the task identity (and its dataset) persists. Calls with no tag fall under untagged traffic.
Curation isn’t just a filter; it cleans as it builds. Only successful responses are included; byte-identical duplicates (cache-replay collapse), truncated answers (finish_reason=length), and empty replies are dropped, and multi-turn conversations are reconstructed and folded so early turns aren’t over-trained. Every build reports exactly what it kept and why (“kept 4,812 of 6,003: 891 duplicates, 300 truncated…”).

Upload methods

Direct file

Upload a JSONL file directly as a training file.

Object storage (S3)

Use an S3-compatible bucket as a dataset source with your credentials.

Chunked upload

Large files upload in parts (chunked/multipart) so big datasets upload reliably.

Uploading a training file

Upload a JSONL training file with POST /v1/fine_tuning/files, and list your files with GET /v1/fine_tuning/files.
The response includes the file’s id, which you reference as trainingFileId (or validationFileId) when creating a job.

Training formats

When you use a managed dataset, you map its columns into one of four training formats. Pick the format that matches your task:
Plain text. Map a single column to the text field. Use for continued pretraining or simple completion.
Prompt/completion pairs. Map one column to the prompt and one to the completion. Use for instruction tuning.
OpenAI chat format: role/content conversations. Map the column that holds the conversation. Use for chat/assistant fine-tuning.
Already-tokenized data as token-id arrays. Map input_ids (and optionally labels, attention_mask). Use when you control tokenization.

Validation

JSONL is validated before a job starts. Line-level JSONL errors and format problems are surfaced with the exact reason, so you fix them before spending on a job rather than after. You can also preview dataset rows in the dashboard before training.

Using a dataset in a job

Once your file or dataset is ready, reference it when creating a fine-tuning job. A managed dataset is converted to a training_file automatically, using the column-mapping format you chose; you then pass the resulting file id as trainingFileId.

Create a job

Start training with your prepared data.

Deploy the result

Serve a trained model on a dedicated endpoint.