Co-authored-by: Peiyuan Zhang <a1286225768@gmail.com> Co-authored-by: Will Lin <wlsaidhi@gmail.com>
46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from typing import Any, Dict
|
|
|
|
|
|
def update_config_from_args(config: Any,
|
|
args_dict: Dict[str, Any],
|
|
prefix: str = "",
|
|
pop_args: bool = False) -> None:
|
|
"""
|
|
Update configuration object from arguments dictionary.
|
|
|
|
Args:
|
|
config: The configuration object to update
|
|
args_dict: Dictionary containing arguments
|
|
prefix: Prefix for the configuration parameters in the args_dict.
|
|
If None, assumes direct attribute mapping without prefix.
|
|
"""
|
|
# Handle top-level attributes (no prefix)
|
|
args_not_to_remove = [
|
|
'model_path',
|
|
]
|
|
args_to_remove = []
|
|
if prefix.strip() == "":
|
|
for key, value in args_dict.items():
|
|
if hasattr(config, key) and value is not None:
|
|
if key == "text_encoder_precisions" and isinstance(value, list):
|
|
setattr(config, key, tuple(value))
|
|
else:
|
|
setattr(config, key, value)
|
|
if pop_args:
|
|
args_to_remove.append(key)
|
|
else:
|
|
# Handle nested attributes with prefix
|
|
prefix_with_dot = f"{prefix}."
|
|
for key, value in args_dict.items():
|
|
if key.startswith(prefix_with_dot) and value is not None:
|
|
attr_name = key[len(prefix_with_dot):]
|
|
if hasattr(config, attr_name):
|
|
setattr(config, attr_name, value)
|
|
if pop_args:
|
|
args_to_remove.append(key)
|
|
|
|
if pop_args:
|
|
for key in args_to_remove:
|
|
if key not in args_not_to_remove:
|
|
args_dict.pop(key)
|