44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
"""Shared helpers for normalizing model_info shapes across utilities."""
|
|
|
|
from typing import Any, List
|
|
|
|
|
|
def unwrap_single_item(value: Any) -> Any:
|
|
"""Unwrap single-item tuple/list wrappers used by model-info call sites."""
|
|
if isinstance(value, (tuple, list)):
|
|
return value[0]
|
|
return value
|
|
|
|
|
|
def as_list(value: Any) -> List[Any]:
|
|
"""Normalize a scalar/tuple/list value into a list."""
|
|
if isinstance(value, list):
|
|
return value
|
|
if isinstance(value, tuple):
|
|
return list(value)
|
|
return [value]
|
|
|
|
|
|
def normalize_model_info_list(model_info: Any) -> List[Any]:
|
|
"""Normalize model_info into a flat list, preserving non-dict entries."""
|
|
if isinstance(model_info, tuple):
|
|
model_info = list(model_info)
|
|
|
|
if isinstance(model_info, list):
|
|
flattened_info: List[Any] = []
|
|
for item in model_info:
|
|
if isinstance(item, tuple):
|
|
flattened_info.extend(item)
|
|
else:
|
|
flattened_info.append(item)
|
|
return flattened_info
|
|
|
|
return [model_info]
|
|
|
|
|
|
def iter_model_info_dicts(model_info: Any):
|
|
"""Iterate dictionary entries from model_info in normalized order."""
|
|
for item in normalize_model_info_list(model_info):
|
|
if isinstance(item, dict):
|
|
yield item
|