From 1a479a72e287e5451dd749ac775500e2e511b671 Mon Sep 17 00:00:00 2001 From: Chakshu Dhannawat Date: Tue, 8 Sep 2026 14:17:22 +0900 Subject: [PATCH] fix(inference): reject non-positive max_out_tokens at config validation Values <= 0 for max_out_tokens were accepted during config parsing and only failed at generation time with a confusing 'input size exceeds maximum length of -1' error. Add a field validator so DeepSpeedInferenceConfig raises a clear ValueError immediately. Signed-off-by: Chakshu Dhannawat --- deepspeed/inference/config.py | 6 +++++ tests/unit/inference/test_inference_config.py | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/deepspeed/inference/config.py b/deepspeed/inference/config.py index 2ef43cb0239d..25994a110d31 100644 --- a/deepspeed/inference/config.py +++ b/deepspeed/inference/config.py @@ -310,6 +310,12 @@ def validate_dtype(cls, field_value, values): return field_value raise TypeError(f"Invalid type for dtype: {type(field_value)}") + @field_validator("max_out_tokens") + def validate_max_out_tokens(cls, field_value, values): + if field_value <= 0: + raise ValueError(f"max_out_tokens must be a positive integer, got {field_value}") + return field_value + @field_validator("moe") def moe_backward_compat(cls, field_value, values): if isinstance(field_value, bool): diff --git a/tests/unit/inference/test_inference_config.py b/tests/unit/inference/test_inference_config.py index fcba7e0d601b..4e4a7d2ad664 100644 --- a/tests/unit/inference/test_inference_config.py +++ b/tests/unit/inference/test_inference_config.py @@ -82,3 +82,27 @@ def test_moe_backward_compat_bool(self): config = DeepSpeedInferenceConfig(moe=value) assert isinstance(config.moe, DeepSpeedMoEConfig) assert config.moe.enabled == value + + +@pytest.mark.inference +class TestInferenceConfigValidation: + """CPU-only validation tests for DeepSpeedInferenceConfig.""" + + def test_negative_max_out_tokens_rejected(self): + # Regression test for https://github.com/deepspeedai/DeepSpeed/issues/8339 + from deepspeed.inference.config import DeepSpeedInferenceConfig + + with pytest.raises(ValueError, match="max_out_tokens must be a positive integer"): + DeepSpeedInferenceConfig(max_out_tokens=-1) + + def test_zero_max_out_tokens_rejected(self): + from deepspeed.inference.config import DeepSpeedInferenceConfig + + with pytest.raises(ValueError, match="max_out_tokens must be a positive integer"): + DeepSpeedInferenceConfig(max_out_tokens=0) + + def test_positive_max_out_tokens_accepted(self): + from deepspeed.inference.config import DeepSpeedInferenceConfig + + config = DeepSpeedInferenceConfig(max_out_tokens=128) + assert config.max_out_tokens == 128