espnet3.utils.run_utils.apply_training_experiment_context
espnet3.utils.run_utils.apply_training_experiment_context
espnet3.utils.run_utils.apply_training_experiment_context(, training_config: DictConfig | None, inference_config: DictConfig | None, metrics_config: DictConfig | None, publication_config: DictConfig | None, demo_config: DictConfig | None = None, log: Logger) → None
Apply runner context propagation across stage configs.
Runner entry points call this after loading configs and before resolving interpolations. When training_config is available, its exp_tag and exp_dir are treated as the source of truth for inference, metrics, and publication. When both inference_config and metrics_config are present, metrics_config also inherits inference_dir from inference_config so measurement follows the same output location as inference. When both inference_config and publication_config are present, publication_config inherits inference_dir so pack_model can reuse the same inference output directory as the preceding inference stage.
- Parameters:
- training_config (DictConfig | None) – Training config selected for the current run. When None, this function is a no-op.
- inference_config (DictConfig | None) – Inference config to patch in place when present.
- metrics_config (DictConfig | None) – Metrics config to patch in place when present.
- publication_config (DictConfig | None) – Publication config to patch in place when present.
- demo_config (DictConfig | None) – Demo config to patch in place when present.
- log (logging.Logger) – Logger used for insert/overwrite messages.
- Returns: Provided configs are mutated in place.
- Return type: None
- Raises:This function does not raise exceptions. –
Notes
This helper is intentionally runner-oriented. It does not load configs; it only normalizes already-loaded configs before stage execution.
Examples
Insert missing experiment identity from training:
```python training_config = OmegaConf.create(
) inference_config = OmegaConf.create(
{“inference_dir”: “${exp_dir}/inference”}
) apply_training_experiment_context(
training_config=training_config, inference_config=inference_config, metrics_config=None, log=logging.getLogger(“example”),
)
Logs:
INFO Inserted inference_config.exp_tag from training_config
INFO Inserted inference_config.exp_dir from training_config
Result:
inference_config.exp_tag == “train_asr_rnn”
inference_config.exp_dir == “./exp/train_asr_rnn”
```Override conflicting experiment identity in inference:
```python training_config = OmegaConf.create(
) inference_config = OmegaConf.create(
) apply_training_experiment_context(
training_config=training_config, inference_config=inference_config, metrics_config=None, log=logging.getLogger(“example”),
)
Logs:
WARNING Overriding inference_config.exp_tag with
training_config value: ‘manual_tag’ -> ‘train_asr_rnn’
WARNING Overriding inference_config.exp_dir with
training_config value: ‘./exp/manual_tag’ -> ‘./exp/train_asr_rnn’
```Align metrics with a custom inference output directory:
```python inference_config = OmegaConf.create(
{ : “exp_tag”: “eval_debug”, “exp_dir”: “./exp/eval_debug”, “inference_dir”: “./custom/eval_outputs”,
}
) metrics_config = OmegaConf.create({“inference_dir”: None}) apply_training_experiment_context(
training_config=None, inference_config=inference_config, metrics_config=metrics_config, log=logging.getLogger(“example”),
)
Logs:
INFO Inserted metrics_config.exp_tag from inference_config
INFO Inserted metrics_config.exp_dir from inference_config
INFO Inserted metrics_config.inference_dir from inference_config
Result:
metrics_config.inference_dir == “./custom/eval_outputs”
metrics_config.exp_dir == “./exp/eval_debug”
metrics_config.exp_tag == “eval_debug”
```Leave standalone inference unchanged when no training config is given:
```python inference_config = OmegaConf.create(
) apply_training_experiment_context(
training_config=None, inference_config=inference_config, metrics_config=None, log=logging.getLogger(“example”),
)
No logs are emitted and inference_config is unchanged.
```