fishaudio/fish-speech · error · TypeError
Logger config must be a DictConfig!
Error message
Logger config must be a DictConfig!
What it means
instantiate_loggers mirrors the callbacks instantiator: the loggers config must be a DictConfig or a TypeError is raised. Each entry with a _target_ is instantiated via hydra.utils.instantiate.
Source
Thrown at fish_speech/utils/instantiators.py:43
for _, cb_conf in callbacks_cfg.items():
if isinstance(cb_conf, DictConfig) and "_target_" in cb_conf:
log.info(f"Instantiating callback <{cb_conf._target_}>")
callbacks.append(hydra.utils.instantiate(cb_conf))
return callbacks
def instantiate_loggers(logger_cfg: DictConfig) -> List[Logger]:
"""Instantiates loggers from config."""
logger: List[Logger] = []
if not logger_cfg:
log.warning("No logger configs found! Skipping...")
return logger
if not isinstance(logger_cfg, DictConfig):
raise TypeError("Logger config must be a DictConfig!")
for _, lg_conf in logger_cfg.items():
if isinstance(lg_conf, DictConfig) and "_target_" in lg_conf:
log.info(f"Instantiating logger <{lg_conf._target_}>")
logger.append(hydra.utils.instantiate(lg_conf))
return logger
View on GitHub (pinned to befe400174)
Solutions
- Keep the logger section as DictConfig (OmegaConf.create / OmegaConf.merge)
- Structure it as name -> {_target_: ...} pairs
- Set logger to null/empty to skip rather than passing a wrong-typed value
Defensive patterns
Strategy: type-guard
Validate before calling
from omegaconf import DictConfig, OmegaConf
if logger_cfg is not None and not isinstance(logger_cfg, DictConfig):
logger_cfg = OmegaConf.create(logger_cfg) Type guard
def is_dict_config(x):
from omegaconf import DictConfig
return x is None or isinstance(x, DictConfig) Prevention
- Keep cfg as a composed DictConfig end-to-end
- Set logger: null to disable rather than passing dicts
When it happens
Trigger: Calling train() with cfg.logger that is a plain python dict or list (e.g. WandbLogger/TensorBoard config after to_container conversion).
Common situations: Custom training scripts assembling the logger section from dicts; overriding logger configs programmatically; copying configs from tutorials that use dict literals.
Related errors
- Callbacks config must be a DictConfig!
- Unknown model type: {data['model_type']}
- Unknown model type: {config.model_type}
- Specify tags before launching a multirun!
- Metric value not found! <metric_name={metric_name}>\nMake su
AI-assisted analysis of fishaudio/fish-speech@befe400174 (2026-08-27).
Data as JSON: /api/errors/3cbcf0d5321dfc31.
Report an issue: GitHub.