From a9f98f36e640ec2d0eb757989b36004a72ce6643 Mon Sep 17 00:00:00 2001 From: Samuel Monson Date: Thu, 30 Oct 2025 18:01:58 -0400 Subject: [PATCH 1/3] Support dashed arguments for benchmark args Signed-off-by: Samuel Monson --- src/guidellm/benchmark/schemas.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/guidellm/benchmark/schemas.py b/src/guidellm/benchmark/schemas.py index b523d75d..8459f089 100644 --- a/src/guidellm/benchmark/schemas.py +++ b/src/guidellm/benchmark/schemas.py @@ -24,6 +24,8 @@ import yaml from pydantic import ( + AliasChoices, + AliasGenerator, ConfigDict, Field, ValidationError, @@ -1832,6 +1834,14 @@ def get_default(cls: type[BenchmarkGenerativeTextArgs], field: str) -> Any: use_enum_values=True, from_attributes=True, arbitrary_types_allowed=True, + validate_by_alias=True, + validate_by_name=True, + alias_generator=AliasGenerator( + # Support field names with hyphens + validation_alias=lambda field_name: AliasChoices( + field_name, field_name.replace("_", "-") + ), + ), ) # Required @@ -1878,6 +1888,7 @@ def get_default(cls: type[BenchmarkGenerativeTextArgs], field: str) -> Any: data_request_formatter: DatasetPreprocessor | dict[str, str] | str = Field( default="chat_completions", description="Request formatting preprocessor or template name", + validation_alias=AliasChoices("request_type", "request-type"), ) data_collator: Callable | Literal["generative"] | None = Field( default="generative", description="Data collator for batch processing" From 6d6907900711b488f2ccec11e7e74a20e154120a Mon Sep 17 00:00:00 2001 From: Samuel Monson Date: Fri, 31 Oct 2025 11:36:04 -0400 Subject: [PATCH 2/3] Fix commandline arguments not overriding scenario if set to default Signed-off-by: Samuel Monson --- src/guidellm/benchmark/schemas.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/guidellm/benchmark/schemas.py b/src/guidellm/benchmark/schemas.py index 8459f089..f713cd93 100644 --- a/src/guidellm/benchmark/schemas.py +++ b/src/guidellm/benchmark/schemas.py @@ -1798,9 +1798,8 @@ def create( scenario_data = scenario_data["args"] constructor_kwargs.update(scenario_data) - for key, value in kwargs.items(): - if value != cls.get_default(key): - constructor_kwargs[key] = value + # Apply overrides from kwargs + constructor_kwargs.update(kwargs) return cls.model_validate(constructor_kwargs) From 84538d9d891f11224d20d6cc1170c64a3b043d1e Mon Sep 17 00:00:00 2001 From: Samuel Monson Date: Fri, 31 Oct 2025 11:43:45 -0400 Subject: [PATCH 3/3] Change request_type precedence Signed-off-by: Samuel Monson --- src/guidellm/benchmark/schemas.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/guidellm/benchmark/schemas.py b/src/guidellm/benchmark/schemas.py index f713cd93..b2fd15f5 100644 --- a/src/guidellm/benchmark/schemas.py +++ b/src/guidellm/benchmark/schemas.py @@ -1887,7 +1887,12 @@ def get_default(cls: type[BenchmarkGenerativeTextArgs], field: str) -> Any: data_request_formatter: DatasetPreprocessor | dict[str, str] | str = Field( default="chat_completions", description="Request formatting preprocessor or template name", - validation_alias=AliasChoices("request_type", "request-type"), + validation_alias=AliasChoices( + "data_request_formatter", + "data-request-formatter", + "request_type", + "request-type", + ), ) data_collator: Callable | Literal["generative"] | None = Field( default="generative", description="Data collator for batch processing"