`reasoning_effort = "High"` in config.toml failed the whole parse: the derived Deserialize matched lowercase variants only, while FromStr lowercased its input. Deserialize now routes through FromStr, so both paths share one vocabulary. Unknown tokens and non-strings still error. Ported from upstream (grok-build sampling-types/types.rs, 1.0.35).