Skip to content

voplica.types.ai.training

The protobuf package voplica.types.ai.training: 0 services, 26 messages and 0 enums, defined in voplica/types/ai/training/ema.proto, voplica/types/ai/training/training.proto, voplica/types/ai/training/training_workflow.proto.

Field Number Type Label Description
use_ema 1 bool
ema_decay 2 float
Field Number Type Label Description
last_sample_requested_timestamp 1 uint64 last_sample_requested_timestamp indicates the user requested a sample manually. Samples are normally generated automatically on the trainer’s own cadence (typically a step-count threshold - per-EPOCH cadence is NOT guaranteed; e.g. ai-toolkit samples by steps); users may request samples in between. If last_sample_requested_timestamp > last_sample_generated_timestamp the training worker knows to generate a sample as soon as possible. Services should rate-limit manual requests (recommended: at most once per 15 minutes).
last_sample_generated_timestamp 2 uint64
samples 3 ModelTrainingSampleConfig repeated Samples to execute when sampling is triggered.
sample_after_save 4 bool When true, also run samples after each checkpoint save.
steps_sample_threshold 5 uint64 0 means no additional samples. >0 means sample every N training steps.
Field Number Type Label Description
save_on_stop 1 bool Save the model when training stops regardless of steps_save_threshold.
dtype 2 voplica.types.ai.common.DType Checkpoint weight dtype. Quantization options may be added later.
steps_save_threshold 3 uint64 Save the model every N training steps. 0 means do not save on a threshold.
model_name 4 string optional Optional model name to embed in the trained model metadata.
last_save_requested_timestamp 5 uint64
last_save_completed_timestamp 6 uint64
max_step_saves_to_keep 7 uint32
Field Number Type Label Description
length_ms 1 uint64 Sample length in milliseconds.
sample_rate 2 uint32 Sample rate (Hz).

One saved training checkpoint. It always carries inference-ready weights (grouped under model_asset_id) plus optional full state (weights + optimizer + scheduler + …) needed for ModelTrainingContinueFrom.trained_model_checkpoint_id continuation. The checkpoint is attached to a ModelVariant (model_variant_id) only when the owning job had an output_model_id; otherwise it stays unattached until the user calls CreateModelVariantFromTrainingCheckpoint.

Field Number Type Label Description
id 1 string
model_training_job_id 2 string
model_training_run_id 3 string
step 4 uint64 Training step at which the checkpoint was saved.
created_at 5 uint64 Seconds since epoch.
model_asset_id 6 string Asset grouping the inference-ready weight files of this checkpoint. Always populated, so a ModelVariant can be created from this checkpoint at any time.
model_variant_id 7 string optional Model variant carrying the inference-ready weights. Populated only when the job had an output_model_id (or after CreateModelVariantFromTrainingCheckpoint). Suitable for ModelTrainingContinueFrom.model_variant_id continuation when present.
model_family 8 voplica.types.ai.common.ModelFamily Family/category of the produced weights, denormalized from the training config so a variant can be created later without re-reading the run.
subject_category 9 voplica.types.ai.common.SubjectCategory
checkpoint_files 10 voplica.types.file.FileInfo repeated Full set of files comprising this checkpoint (weights, optimizer state, scheduler state, EMA buffers, RNG state, etc.). Required for ModelTrainingContinueFrom.trained_model_checkpoint_id continuation. May be empty when only inference weights were saved.
metrics_snapshot 11 ModelTrainingMetricsSnapshot optional Snapshot of training metrics at the time of saving.
samples_group_id 12 string optional Optional samples group id when samples were produced together with this checkpoint (typically when sample_after_save = true).
checkpoint_name 13 string optional Optional human-friendly name (for example “step_5000.safetensors”).
trained_from_model_variant_id 14 string optional Continuation lineage: the model variant this run continued from, if any (copied from ModelTrainingContinueFrom.model_variant_id).
trained_from_model_checkpoint_id 15 string optional Continuation lineage: the training checkpoint this run continued from, if any (copied from ModelTrainingContinueFrom.trained_model_checkpoint_id).
Field Number Type Label Description
model_family 1 voplica.types.ai.common.ModelFamily Base model family which the trained model targets. Combined with model_type defines the architecture of the produced variants.
base_model_variant_id 2 string optional Model VARIANT whose weights are used as the base for training/fine-tuning. Omitted when training a model from scratch (only model_family/model_type define architecture in that case). This selects the weights to train ON; it is distinct from ModelTrainingJob.output_model_id (where produced variants are saved). Reproducibility relies on model-variant weight FILES being immutable once verified - replacing a variant’s files in place would silently change what “the same base” means for past runs.
model_type 3 voplica.types.ai.common.ModelType Destination model type (i.e. what kind of model are we training: full checkpoint, LoRA, ControlNet, etc.).
continue_training 4 ModelTrainingContinueFrom optional Optionally continue training instead of starting from scratch. Continuation does NOT affect dataset preparation - the same recipe and prepared snapshot can be reused.
training_params 5 ModelTrainingParams
stop_trigger 6 ModelTrainingStopTrigger When to stop training. If unset, the trainer stops based on training_params.
sampling_params 7 ModelSamplingParams
saving_params 8 ModelSavingParams
training_category 9 voplica.types.ai.common.SubjectCategory Informational hint for the trainer (character, style, object, etc.).
training_datasets 10 ModelTrainingDataset repeated Dataset selections consumed by the trainer. Authoritative for the training run. Each entry references either an existing preparation snapshot or a recipe that the workflow will resolve into a snapshot at start time.
data_policy 11 ModelTrainingDataPolicy Optional dataset policy that controls auto-preparation and partial-dataset behavior.
Field Number Type Label Description
model_variant_id 1 string oneof continue_from Loads only the weights of the model variant to continue training. Optimizer, scheduler, tokenizer state are NOT restored. Use lower initial learning rate.
trained_model_checkpoint_id 2 string oneof continue_from Loads weights plus optimizer, scheduler, and any other metadata needed to continue training, when the trainer can verify the metadata is compatible. Falls back to weights-only restoration otherwise.
Field Number Type Label Description
auto_prepare_missing_items 1 bool Read when StartModelTrainingJob plans the run. If true and some selected assets still miss items, files or caption formats (including assets that need subject discovery first), the service starts a combined run that discovers, prepares and captions the missing pieces, then trains. If false and anything required is missing, StartModelTrainingJob fails with FAILED_PRECONDITION.
fail_on_partial_dataset 2 bool If true, resolution fails when any selected source asset could not be prepared.
min_training_items 3 uint32 Minimum total training items (after filters) required before training can start. 0 means no minimum. Enforced at snapshot-resolution time.

One dataset selection for a training run: WHICH frozen training examples the run consumes.

A selection references prepared data (pinned snapshot | live preparation | recipe) and FILTERS the snapshot’s items by categories / target_keys / subject_ids / source_asset_ids. Because items own their captions, there is no separate caption source: caption_format picks WHICH of each item’s captions the trainer loads (UNSPECIFIED = train caption-less), and per-selection trigger_words are prepended at load time.

The character pattern: two jobs on the same dataset - one selecting categories=[CHARACTER_GENERIC] (full-body LoRA), one categories=[CHARACTER_FACE] (face LoRA) - both resolving to the SAME preparation snapshot, filtered differently.

Field Number Type Label Description
source_dataset_id 1 string
preparation_snapshot_id 2 string oneof selection PINNED: use the given DatasetPreparationSnapshot as-is. Resolution fails if the snapshot lacks any required_file_kinds or (when require_captions) caption_format.
recipe_selection 3 ModelTrainingDatasetRecipeSelection oneof selection
preparation_id 12 string oneof selection
source_asset_ids 4 string repeated Optional subset of source assets to include. Empty means “all current source assets”.
sampling_weight 6 double 0 means default weight 1.0.
repeats 7 uint32 0 means default repeats 1.
required_file_kinds 8 voplica.types.ai.dataset.PreparedFileKind repeated Required file kinds per item. Typically [TRAINING_SAMPLE], plus MASK for masked training. Resolution fails when the snapshot lacks any of them for the selected items.
target_keys 13 string repeated Recipe target variants this selection trains on (for example [“face_1024_square”]). Empty means “no target constraint”. Composes with categories as independent AND filters - categories are the semantic pick (face vs full-body), target_keys the precise structural one (face_1024 vs face_512).
categories 16 voplica.types.ai.common.SubjectCategory repeated Semantic filter: only items whose target category is listed (e.g. [CHARACTER_FACE] for a face LoRA). Empty means “no category constraint”.
subject_ids 17 string repeated Identity filter: only items of these DatasetSubjects (e.g. [anna_subject_id] so a group photo contributes only Anna’s crops). Empty means “no subject constraint”; when set, subjectless (whole-image) items are excluded.
caption_format 14 voplica.types.ai.dataset.DatasetCaptionFormat WHICH caption each item contributes: the trainer loads this format’s text from the frozen item (+ trigger_words). UNSPECIFIED = train caption-less (trigger words only, if any) - the STYLE fast lane.
require_captions 15 bool When true, resolution fails (FAILED_PRECONDITION) if any selected item lacks a caption_format caption; when false, such items train caption-less.
subset_name 9 string optional Optional human-friendly subset name (for trainers that group items into subsets).
trigger_words 10 string repeated Trigger words prepended to every loaded caption for THIS selection at training time (for example [“ohwx”]). They are deliberately NOT part of the dataset or its captions, so the same data can train models with and without triggers, and different selections in one job can carry different triggers. Excluded from data_selection_fingerprint.
video_params 18 ModelTrainingDatasetVideoParams optional VIDEO selections only: temporal loader knobs for this selection (ignored for image selections). Per-selection - NOT job-level - because one multi-dataset job routinely mixes an IMAGE identity dataset with a VIDEO motion dataset for the same character LoRA, and a job-level knob cannot express that. Unset = trainer defaults for the model family.
data_selection_fingerprint 20 string INTENT identity of this selection: a stable hash over the selection AS SPECIFIED - source_dataset_id, the literal selection arm (pinned snapshot id | preparation id | recipe fingerprint + reuse policy), source_asset_ids, target_keys, categories, subject_ids, caption_format, require_captions, required_file_kinds, sampling_weight, repeats, subset_name, and video_params (contributing ONLY WHEN SET - the canonical payload omits unset fields, so pre-video fingerprints do not rotate). Computable at attach time (before any resolution) and stable across preparation/caption edits, so it serves as the dedup/detach key for job selections. The RESOLVED identity of what a run actually trained on lives on ResolvedModelTrainingDataset.resolved_selection_fingerprint. Training hyperparameters AND trigger_words are intentionally excluded (trigger words are a training-time caption transform, not part of the selected data).
Field Number Type Label Description
recipe_id 1 string oneof recipe_ref Persistent recipe id.
recipe 2 voplica.types.ai.dataset.DatasetPreparationRecipe oneof recipe_ref Ad-hoc recipe payload.
reuse_policy 3 voplica.types.ai.dataset.DatasetPreparationReusePolicy

Temporal loader knobs for ONE video dataset selection. Maps 1:1 onto the trainer’s (ai-toolkit) video dataset options; the trainer derives family defaults when unset (e.g. WAN ~33 frames @ 16 fps; LTX ~121 frames @ 25 fps honoring (frames - 1) % 8 == 0).

Field Number Type Label Description
num_frames 1 uint32 Frames sampled per training clip. 0 = trainer default for the model family.
fps 2 uint32 Sampling fps used when a clip is longer than num_frames requires and shrink_video_to_frames is false. 0 = trainer default.
shrink_video_to_frames 3 bool optional When true (the default when unset), each clip is shrunk/stretched temporally to exactly num_frames instead of being sampled at fps.
do_i2v 4 bool optional Train image-to-video conditioning (first-frame conditioning). Unset = family-derived default (true for I2V architectures).
do_audio 5 bool optional Train the audio head from the clips’ muxed audio (audio-capable families only, e.g. LTX-2). Unset = false.
Field Number Type Label Description
resolution 1 voplica.types.image.ImageSize
negative_prompt 2 string optional Negative prompt. Usually empty for CFG-distilled families such as FLUX.
guidance_scale 3 float Classifier-free guidance scale. 0 means “trainer default for the family” (for example ~4.0 for FLUX, ~7.0 for SDXL).
sample_steps 4 uint32 Number of inference steps for the sample. 0 means “trainer default”.
sampler 5 string optional Inference sampler/scheduler name (for example “flowmatch”, “euler”, “dpmpp_2m”). Empty means “trainer default for the family”.
walk_seed 6 bool When true, advance the seed per prompt so each sample prompt uses a distinct seed (ai-toolkit walk_seed).

A ModelTrainingJob is the user-facing handle for a single training initiative. Its dataset selections, hyperparameters, sampling settings, and saving settings live inside training_config, which is the only authoritative source of those values. The job may be (re)started multiple times producing one ModelTrainingRun (and one workflow execution) per start.

To inspect produced artifacts, callers list the job’s checkpoints (ListModelTrainingCheckpoints, limit 1, descending) and read the most recent one - the job intentionally does NOT denormalize “latest variant” / “latest checkpoint” pointers, which avoids write-time invariants and staleness bugs. A checkpoint may or may not be attached to a ModelVariant (see output_model_id).

Field Number Type Label Description
id 1 string
created_at 2 uint64 Seconds since epoch.
owner_id 3 string
search_and_use_visibility_type 4 voplica.types.base.VisibilityType
training_config 5 ModelTrainingConfig Authoritative training configuration. Dataset selections live in training_config.training_datasets.
status 6 voplica.types.base.JobStatus
current_workflow_execution_id 7 string optional Workflow execution id of the current run (when status is RUNNING/CANCELLING) or of the most recent run. May be empty if the job has never been started.
job_message 8 string optional Error/diagnostic message for the most recent run.
stats 9 ModelTrainingJobStats
output_model_id 10 string optional Optional destination GenModel for produced checkpoints. - When set: every checkpoint saved by the worker also creates a new ModelVariant under this model, and ModelTrainingCheckpoint.model_variant_id is populated. - When empty: checkpoints are stored against the training job only (no model variants are created). The user can later publish any checkpoint as a variant via CreateModelVariantFromTrainingCheckpoint. Independent of training_config.base_model_variant_id (the weights to train on) and training_config.continue_training (the checkpoint to continue from).
current_run_id 11 string optional Persisted training run row id of the current/most recent run. Use GetModelTrainingRun (or ListModelTrainingRuns filtered by model_training_job_id) to fetch the full run record.
Field Number Type Label Description
current_step 1 uint64 0-based step counter within the current/most recent run.
current_epoch 2 uint64 optional 0-based epoch counter, when the trainer reports epochs.
total_steps 3 uint64 optional Target total steps for the current/most recent run (mirrors StandardTrainingParams.total_steps).
last_step_duration_ms 4 uint64 optional Duration of the most recent training step in milliseconds.
average_step_duration_ms 5 uint64 optional Rolling average step duration in milliseconds (window defined by the worker).
estimated_time_to_finish_seconds 6 uint64 optional Estimated time-to-finish for the current run, in seconds.
latest_metrics 7 ModelTrainingMetricsSnapshot optional Latest snapshot of key training metrics (loss, learning rate, eval loss, etc.).
stats_updated_at 8 uint64 optional Timestamp of the last stats update (milliseconds since epoch).
Field Number Type Label Description
model_training_job_id 1 string
model_training_run_id 2 string
step 3 uint64
metric_key 4 string
value 5 double
captured_at 6 uint64

Snapshot of training metrics at a specific step. Used as the “current” view embedded in ModelTrainingJobStats.latest_metrics and inside ModelTrainingCheckpoint.metrics_snapshot. Historical metric values are stored as ModelTrainingMetricPoint time series.

Field Number Type Label Description
step 1 uint64
values 2 map<string, double> Generic key->value map. Recommended keys (workers should use these when applicable): “loss”, “eval_loss”, “unet_lr”, “te_lr”, “te_2_lr”, “t5_lr”, “clip_score_mean”, “clip_score_min”, “clip_score_max”, “grad_norm”, “grad_scale” Workers may add custom keys; the UI is metric-agnostic.
captured_at 3 uint64
Field Number Type Label Description
target_polygon_count 1 uint32 Target polygon count for the rendered preview mesh.
preview_render_resolution 2 voplica.types.image.ImageSize optional Optional render resolution for a preview image of the produced model.
Field Number Type Label Description
standard_training_params 1 StandardTrainingParams oneof params Standard hyperparameter set used by image / video / audio diffusion trainers (FLUX, SDXL, Z_IMAGE, WAN, LTX, etc.).

One workflow execution of a training job. Stores the per-run snapshot of inputs (training config, base model, continuation source) plus the worker-reported terminal status, final stats, and total trained steps.

Field Number Type Label Description
id 1 string
model_training_job_id 2 string
workflow_execution_id 3 string optional
started_at 4 uint64 Seconds since epoch.
completed_at 5 uint64 optional
status 6 voplica.types.base.JobStatus
message 7 string optional Worker-provided detail for terminal states (typically an error or cancellation reason).
output_model_id 8 string optional Resolved output GenModel id for this run. Empty when the job has no output_model_id (checkpoints are then stored against the job without creating model variants).
training_config_snapshot 9 ModelTrainingConfig Snapshot of ModelTrainingConfig at run start. Subsequent edits to the job config do not affect this run.
base_model_variant_id 10 string optional Base model variant id from the snapshot (denormalized convenience copy of training_config_snapshot.base_model_variant_id).
continue_from 11 ModelTrainingContinueFrom optional Continuation source from the snapshot (denormalized convenience copy of training_config_snapshot.continue_training).
latest_stats 12 ModelTrainingJobStats Latest stats snapshot for this run.
trained_steps 13 uint64 Total training steps executed during this run (may be < total_steps for cancelled or failed runs). To find produced checkpoints/variants, list this run’s checkpoints (ListModelTrainingCheckpoints filtered by model_training_run_id).
root_workflow_execution_id 14 string Root workflow execution that triggered this run. Equals workflow_execution_id for training-only runs. Different from workflow_execution_id when this run is the training-child inside a combined ai.prepare_and_train_model_workflow execution; in that case root_workflow_execution_id is the combined parent and is what StartModelTrainingJobResponse.workflow_execution_id returned to the caller, while workflow_execution_id is the inner training-only child execution. Always populated immediately when the run is created (before any workflow starts).
Field Number Type Label Description
sample_id 1 string
sample_config 2 ModelTrainingSampleConfig
asset 3 voplica.types.file.AssetFileVariantGroups
Field Number Type Label Description
prompt 1 string
seed 2 int32
image 10 ModelTrainingImageSampleParams oneof params
video 11 ModelTrainingVideoSampleParams oneof params
audio 12 ModelTrainingAudioSampleParams oneof params
model_3d 13 ModelTrainingModel3DSampleParams oneof params
Field Number Type Label Description
samples_group_id 1 string
samples_time 2 uint64
step 3 uint64 Training step at which the samples group was produced.
samples 4 ModelTrainingSample repeated
model_variant_id 5 string optional Variant id of the model saved at the time these samples were generated, if any (typically populated when sample_after_save triggered the sampling).
model_training_job_id 6 string
model_training_run_id 7 string The run that produced these samples.
checkpoint_id 8 string optional Optional checkpoint reference when samples were produced alongside a saved checkpoint.
Field Number Type Label Description
after_trained_steps 1 uint64 0 means no step limit. >0 means stop after the given number of trained steps.
Field Number Type Label Description
resolution 1 voplica.types.image.ImageSize
length_ms 2 uint64 Duration of the produced video sample in milliseconds.
fps 3 uint32 Frames per second.
negative_prompt 4 string optional
guidance_scale 5 float 0 means “trainer default for the family”.
sample_steps 6 uint32 0 means “trainer default”.
sampler 7 string optional
walk_seed 8 bool
Field Number Type Label Description
total_steps 1 uint64 Max trained steps. Usually calculated as epochs * images_count * repeats / batch_size. Training may stop earlier according to ModelTrainingStopTrigger.
batch_size 2 uint32 Items trained in parallel (the number of items in VRAM simultaneously).
resolutions 3 voplica.types.image.ImageSize repeated Training resolutions. ai-toolkit currently supports only square resolutions, while OneTrainer can support different aspect ratios. Resolutions belong to dataset preparation targets too - the trainer expects prepared artifacts at the resolutions defined by the recipe targets.
enable_bucketing 4 bool
gradient_accumulation_steps 5 int64
train_unet 6 bool
train_text_encoder 7 bool
gradient_checkpointing 8 bool
lr_scheduler 9 voplica.types.ai.common.TrainingLrScheduler LEARNING RATE schedule (constant, cosine, cosine_with_restarts, …). The diffusion NOISE scheduler is a separate field below (noise_scheduler).
optimizer 10 voplica.types.ai.common.TrainingOptimizer
unet_lr 11 double Typically default: 0.0005
dtype 12 voplica.types.ai.common.DType
linear_timesteps 13 bool optional
ema_config 14 EMAConfig
apply_t5_attn_mask 15 bool optional TRAINER-SUPPORT NOTE (fields 15-18): the current ai-toolkit SDTrainer exposes a single learning rate and no per-text-encoder controls; trainers that cannot honor these fields MUST record the fact in the run’s registered stats/message rather than fail.
text_encoder_1_lr 16 double optional Typically default: 0.00005
text_encoder_2_lr 17 double optional Typically not trained.
train_t5 18 bool optional
network_dim 19 uint32 optional 1 - 256. Default: 32.
network_alpha 20 uint32 optional 1 - 256. Default: 16.
timestep_sampling 21 voplica.types.ai.common.TrainingTimestepSampling optional
discrete_flow_shift 22 float optional
guidance_scale 23 int32 optional
loss_type 24 voplica.types.ai.common.TrainingLossType optional Trainers without a matching implementation (e.g. ai-toolkit has no HUBER/SMOOTH_L1) fall back to their default loss and record the substitution in the run stats/message.
lr_scheduler_cycles 25 uint32 1 - 4. Default: 3. Consumed only by TRAINING_LR_SCHEDULER_COSINE_WITH_RESTARTS.
min_snr_gamma 26 int32 optional Max: 20. Min: any (including negative values). UNSET = trainer default (typically 5); an explicit 0 means literally zero (optional exists to disambiguate 0 from unset).
noise_offset 27 double optional Max: 1. Min: any (including negative values). UNSET = trainer default (typically 0.1); an explicit 0 disables noise offset (optional exists to disambiguate 0 from unset).
optimizer_args 28 string Optimizer-specific arguments. Examples: AdamW8Bit: weight_decay=0.1 Adafactor: scale_parameter=False, relative_step=False, warmup_init=False Prodigy: weight_decay=0.5, decouple=True, betas=0.9,0.99, use_bias_correction=False
noise_scheduler 29 voplica.types.ai.common.TrainingNoiseScheduler Diffusion NOISE scheduler for the training objective (ai-toolkit train.noise_scheduler). TRAINING_NOISE_SCHEDULER_UNSPECIFIED lets the trainer pick the canonical scheduler for ModelTrainingConfig.model_family (FLOWMATCH for FLUX/SD3/Z-Image/WAN/LTX, DDPM for SDXL).
caption_dropout_rate 30 float optional Dataset-loader knobs (uniform across all selected datasets). These affect training results, so they are part of the hyperparameter set rather than per-dataset defaults. Caption token dropout rate (0..1). 0 disables dropout.
shuffle_caption 31 bool optional When true, shuffle caption tokens/tags per step (ai-toolkit shuffle_tokens).
cache_latents_to_disk 32 bool optional When true, cache VAE latents to disk to speed up multi-epoch training (default true in most trainers). Exposed so memory-constrained runs can disable it.
Field Number Type Label Description
selection_index 1 uint32 Stable order matching the order of ModelTrainingConfig.training_datasets.
source_dataset_id 2 string
preparation_id 3 string The preparation this selection resolved through, and the version that was (or will be) frozen.
preparation_snapshot_version 4 uint64
preparation_snapshot_id 5 string
source_asset_ids 6 string repeated Resolved item filters (verbatim from the selection; the trainer passes them to ListDatasetPreparationSnapshotItems so filtering happens server-side).
target_keys 7 string repeated
categories 8 voplica.types.ai.common.SubjectCategory repeated
subject_ids 9 string repeated
required_file_kinds 10 voplica.types.ai.dataset.PreparedFileKind repeated File kinds the trainer requires per item.
caption_format 11 voplica.types.ai.dataset.DatasetCaptionFormat Which caption each frozen item contributes (UNSPECIFIED = train caption-less) and whether items lacking it fail resolution.
require_captions 12 bool
sampling_weight 13 double
repeats 14 uint32
subset_name 15 string optional
trigger_words 16 string repeated Trigger words prepended to each loaded caption for this selection at training time.
resolved_items_count 17 uint64 Number of frozen items matching the filters (computed at resolution; the trainer can sanity-check its paged stream against it).
resolved_selection_fingerprint 18 string RESOLVED identity of what this run actually trained on: stable hash over preparation_snapshot_id + the filter set (source_asset_ids, target_keys, categories, subject_ids) + caption_format + require_captions + required_file_kinds + sampling_weight + repeats + subset_name. Complements the intent-level ModelTrainingDataset.data_selection_fingerprint.
dataset_owner_id 19 string
revenue_share_eligible 20 bool
root_dataset_id 21 string