"""YAML loading with a corrected float resolver. PyYAML's default implicit float resolver requires a signed exponent, so plain scientific notation like `1.0e15` or `2.0e9` is loaded as a *string*. Our configs are full of token budgets in that form, so we install the fixed resolver everywhere configs are read. """ import re import yaml class _Loader(yaml.SafeLoader): pass _Loader.add_implicit_resolver( "tag:yaml.org,2002:float", re.compile(r"""^(?: [-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+]?[0-9]+)? |[-+]?\.[0-9_]+(?:[eE][-+]?[0-9]+)? |[-+]?[0-9][0-9_]*(?:[eE][-+]?[0-9]+) |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]* |[-+]?\.(?:inf|Inf|INF) |\.(?:nan|NaN|NAN))$""", re.X), list("-+0123456789.")) def load(path) -> dict: from pathlib import Path return yaml.load(Path(path).read_text(), Loader=_Loader) def loads(text: str) -> dict: return yaml.load(text, Loader=_Loader)