Properties and Domains¶
Properties and Property Domains are what ado uses to describe the inputs and outputs of Experiments, and the dimensions of Entity Spaces.
Property¶
A Property is a named concept — a string identifier such as:
- gpu-model
- batch-size
- node-selection-method
- solve-time
A Property may optionally carry metadata (a description) that explains what the identifier represents.
Some Properties are also associated with a Property Domain that specifies the set of values the Property is allowed to take:
- gpu-model → one of {A100, H100, MI300}
- batch-size → any integer between 1 and 1024
- node-selection-method → one of {round-robin, random, greedy}
- solve-time → a positive floating‑point number
Property Types¶
In ado there are three roles a Property can play:
- Constitutive properties — the inputs to Experiments, and the dimensions of an Entity Space. They describe inherent or assumed characteristics of the Entity — the "givens". Constitutive properties usually have a Property Domain.
- Target properties — the properties an Experiment intends to measure, e.g.
train_tokens_per_second. - Observed properties — the values actually recorded by a specific Experiment. Because many Experiments may target the same property, each observed property is namespaced to the Experiment that produced it (e.g.
finetune_lora-train_tokens_per_second). See Target and Observed Properties.
Note
In ado, usually only constitutive properties have Property Domains.
Property Domain Types¶
ado supports the following Property Domain types. Each is written under a domain: key in ado YAML.
Note
The different domain types are distinguished by a Variable Type field (variableType). In many cases this can be omitted and ado will infer it automatically — see Auto-inference.
Categorical¶
A finite, named set of values. Typically strings, though numeric values are also allowed.
Used when the property can take one of a fixed list of labels.
domain:
values: [granite-3-8b, llama3-8b, mistral-7b-v0.1]
Discrete¶
A finite set of numeric values, specified either as an explicit list or as a range with a step interval. Both forms are equivalent.
Used when the property takes a countable set of numbers.
Explicit list:
domain:
values: [1, 2, 4, 8, 16, 32, 64, 128]
Range with interval (lower inclusive, upper exclusive):
domain:
domainRange: [1, 129]
interval: 1
Interval only (unbounded discrete — any multiple of the interval):
domain:
interval: 1
Continuous¶
A continuous numeric domain. Use for real-valued properties.
Bounded range — any real value within the bounds is valid:
domain:
domainRange: [0, 100]
Unbounded — any real number:
domain:
variableType: CONTINUOUS_VARIABLE_TYPE
Binary¶
Exactly two values: true and false.
domain:
variableType: BINARY_VARIABLE_TYPE
Open Categorical¶
Categorical values where the complete set of categories is not known in advance. variableType must be set explicitly. An optional values field can seed a known subset of categories.
Used for properties where new categories can appear at runtime, for example a molecule identifier or an AI model name.
domain:
variableType: OPEN_CATEGORICAL_VARIABLE_TYPE
Auto-inference of Property Domain Types¶
When variableType is omitted, ado infers it from the other fields:
| Fields present | Inferred type |
|---|---|
values with all numeric entries | DISCRETE_VARIABLE_TYPE |
values with any non-numeric entry | CATEGORICAL_VARIABLE_TYPE |
domainRange only (no interval) | CONTINUOUS_VARIABLE_TYPE |
domainRange + interval | DISCRETE_VARIABLE_TYPE |
interval only (no domainRange) | DISCRETE_VARIABLE_TYPE |
BINARY_VARIABLE_TYPE and OPEN_CATEGORICAL_VARIABLE_TYPE cannot be inferred and must always be declared explicitly.
Probability Functions¶
Each domain can optionally specify a probability function that controls how values are sampled. The default is uniform — every value in the domain is equally likely.
domain:
values: [1, 2, 4, 8, 16]
probabilityFunction:
identifier: uniform
A normal distribution is also available for continuous and discrete domains:
domain:
domainRange: [0.0, 1.0]
probabilityFunction:
identifier: normal
parameters:
mean: 0.5
std: 0.1
When no probabilityFunction is specified, uniform sampling is used.
Property Subdomains¶
Domain A is a subdomain of domain B if every value in A is also a valid value in B. A subdomain represents a narrowed or more specific version of a parent domain.
The most common place this matters in ado is when defining an Entity Space: the domain you assign to each entity space dimension must be a subdomain of the corresponding experiment input domain. This ensures that all entities in the space are valid inputs to the experiment.
Compatible Subdomain Types¶
Not every combination of domain types is valid — the subdomain type must be compatible with the parent type:
| Parent domain | Compatible sub-domain types | Notes |
|---|---|---|
CONTINUOUS | CONTINUOUS, DISCRETE (finite), BINARY | Sub-range must lie within the parent range; BINARY requires 0 and 1 to be within the range |
DISCRETE | DISCRETE, BINARY | Sub-values must be a subset of the parent values; BINARY only valid if both 0 and 1 appear in the parent |
CATEGORICAL | CATEGORICAL, DISCRETE (finite), BINARY | Sub-values must be a subset of the parent values |
BINARY | BINARY, DISCRETE (≤2 values) | Values must be a subset of {0, 1} / {false, true} |
OPEN_CATEGORICAL | OPEN_CATEGORICAL, CATEGORICAL, DISCRETE (finite), BINARY | The most permissive categorical parent |
Example¶
Suppose an experiment declares the following required input domains:
# Experiment input domains (the maximum possible extent)
- identifier: model_name
domain:
values: [granite-3-8b, llama3-8b, mistral-7b-v0.1, granite-34b-code-base]
- identifier: batch_size
domain:
domainRange: [1, 4097]
interval: 1
- identifier: temperature
domain:
domainRange: [0.0, 100.0]
A valid entity space could narrow each of these to a focused subdomain:
# Entity space domains (subdomains of the experiment inputs above)
- identifier: model_name
domain:
values: [granite-3-8b, llama3-8b] # CATEGORICAL ⊆ CATEGORICAL ✓
- identifier: batch_size
domain:
values: [1, 2, 4, 8, 16] # DISCRETE ⊆ DISCRETE ✓
- identifier: temperature
domain:
domainRange: [20.0, 40.0] # CONTINUOUS ⊆ CONTINUOUS ✓
The following entity space domains would be invalid because they are not subdomains of the corresponding experiment inputs:
- identifier: batch_size
domain:
# Values above 4096 are not in the Experiment input domain for batch_size
domainRange: [4096, 8124]
interval: 1028
- identifier: model_name
domain:
# granite-4-3b is not one of the allowed values
domainRange: [granite-4-3b]