Bases: RegistryMixin[ConstraintInitializer]
Registry factory for creating and managing constraint initializers.
Provides centralized access to registered constraint types with support for creating constraints from ConstraintArgs instances or pre-configured initializer instances. Handles constraint resolution and type validation for the scheduler constraint system.
Example: :: from guidellm.scheduler import ConstraintsInitializerFactory
# Register new constraint type
@ConstraintsInitializerFactory.register("new_constraint")
class NewConstraint:
def create_constraint(self, **kwargs) -> Constraint:
return lambda state, request: SchedulerUpdateAction()
# Create and use constraint
args = NewConstraintArgs(kind="new_constraint")
initializer = ConstraintsInitializerFactory.create(args)
constraint = initializer.create_constraint()
Source code in src/guidellm/scheduler/constraints/factory.py
| class ConstraintsInitializerFactory(RegistryMixin[ConstraintInitializer]):
"""
Registry factory for creating and managing constraint initializers.
Provides centralized access to registered constraint types with support for
creating constraints from ``ConstraintArgs`` instances or pre-configured
initializer instances. Handles constraint resolution and type validation
for the scheduler constraint system.
Example:
::
from guidellm.scheduler import ConstraintsInitializerFactory
# Register new constraint type
@ConstraintsInitializerFactory.register("new_constraint")
class NewConstraint:
def create_constraint(self, **kwargs) -> Constraint:
return lambda state, request: SchedulerUpdateAction()
# Create and use constraint
args = NewConstraintArgs(kind="new_constraint")
initializer = ConstraintsInitializerFactory.create(args)
constraint = initializer.create_constraint()
"""
@classmethod
def create(cls, args: ConstraintArgs) -> ConstraintInitializer:
"""
Create a constraint initializer from a ``ConstraintArgs`` instance.
:param args: Validated constraint arguments with kind discriminator
:return: Configured constraint initializer instance
:raises ValueError: If args.kind is not registered in the factory
"""
if cls.registry is None or args.kind not in cls.registry:
raise ValueError(f"Unknown constraint discriminator: {args.kind}")
initializer_class = cls.registry[args.kind]
return initializer_class(args=args) # type: ignore[operator]
@classmethod
def deserialize(
cls, initializer_dict: dict[str, Any]
) -> SerializableConstraintInitializer | UnserializableConstraintInitializer:
"""
Deserialize constraint initializer from dictionary format.
:param initializer_dict: Dictionary representation of constraint initializer
:return: Reconstructed constraint initializer instance
:raises ValueError: If constraint type is unknown or cannot be deserialized
"""
if initializer_dict.get("type_") == "unserializable":
return UnserializableConstraintInitializer.model_validate(initializer_dict)
if (
cls.registry is not None
and initializer_dict.get("type_")
and initializer_dict["type_"] in cls.registry
):
initializer_class = cls.registry[initializer_dict["type_"]]
if hasattr(initializer_class, "model_validate"):
return initializer_class.model_validate(initializer_dict) # type: ignore[return-value]
else:
return initializer_class(**initializer_dict) # type: ignore[return-value,operator]
raise ValueError(
f"Cannot deserialize unknown constraint initializer: "
f"{initializer_dict.get('type_', 'unknown')}"
)
@classmethod
def resolve(
cls,
initializers: dict[
str,
Constraint | ConstraintInitializer,
],
) -> dict[str, Constraint]:
"""
Resolve constraint initializers to callable constraints.
:param initializers: Dictionary mapping constraint keys to specifications.
Values must be Constraint instances or ConstraintInitializer instances.
:return: Dictionary mapping constraint keys to callable functions
:raises TypeError: If a value is not a supported type
"""
constraints = {}
for key, val in initializers.items():
if isinstance(val, ConstraintInitializer):
constraints[key] = val.create_constraint()
elif isinstance(val, Constraint):
constraints[key] = val
else:
raise TypeError(
f"Constraint '{key}' has unsupported value type "
f"{type(val).__name__}. Expected a Constraint instance or "
f"ConstraintInitializer instance."
)
return constraints
|
create(args) classmethod
Create a constraint initializer from a ConstraintArgs instance.
Parameters:
| Name | Type | Description | Default |
args | ConstraintArgs | Validated constraint arguments with kind discriminator | required |
Returns:
Raises:
| Type | Description |
ValueError | If args.kind is not registered in the factory |
Source code in src/guidellm/scheduler/constraints/factory.py
| @classmethod
def create(cls, args: ConstraintArgs) -> ConstraintInitializer:
"""
Create a constraint initializer from a ``ConstraintArgs`` instance.
:param args: Validated constraint arguments with kind discriminator
:return: Configured constraint initializer instance
:raises ValueError: If args.kind is not registered in the factory
"""
if cls.registry is None or args.kind not in cls.registry:
raise ValueError(f"Unknown constraint discriminator: {args.kind}")
initializer_class = cls.registry[args.kind]
return initializer_class(args=args) # type: ignore[operator]
|
deserialize(initializer_dict) classmethod
Deserialize constraint initializer from dictionary format.
Parameters:
| Name | Type | Description | Default |
initializer_dict | dict[str, Any] | Dictionary representation of constraint initializer | required |
Returns:
Raises:
| Type | Description |
ValueError | If constraint type is unknown or cannot be deserialized |
Source code in src/guidellm/scheduler/constraints/factory.py
| @classmethod
def deserialize(
cls, initializer_dict: dict[str, Any]
) -> SerializableConstraintInitializer | UnserializableConstraintInitializer:
"""
Deserialize constraint initializer from dictionary format.
:param initializer_dict: Dictionary representation of constraint initializer
:return: Reconstructed constraint initializer instance
:raises ValueError: If constraint type is unknown or cannot be deserialized
"""
if initializer_dict.get("type_") == "unserializable":
return UnserializableConstraintInitializer.model_validate(initializer_dict)
if (
cls.registry is not None
and initializer_dict.get("type_")
and initializer_dict["type_"] in cls.registry
):
initializer_class = cls.registry[initializer_dict["type_"]]
if hasattr(initializer_class, "model_validate"):
return initializer_class.model_validate(initializer_dict) # type: ignore[return-value]
else:
return initializer_class(**initializer_dict) # type: ignore[return-value,operator]
raise ValueError(
f"Cannot deserialize unknown constraint initializer: "
f"{initializer_dict.get('type_', 'unknown')}"
)
|
resolve(initializers) classmethod
Resolve constraint initializers to callable constraints.
Parameters:
| Name | Type | Description | Default |
initializers | dict[str, Constraint | ConstraintInitializer] | Dictionary mapping constraint keys to specifications. Values must be Constraint instances or ConstraintInitializer instances. | required |
Returns:
| Type | Description |
dict[str, Constraint] | Dictionary mapping constraint keys to callable functions |
Raises:
| Type | Description |
TypeError | If a value is not a supported type |
Source code in src/guidellm/scheduler/constraints/factory.py
| @classmethod
def resolve(
cls,
initializers: dict[
str,
Constraint | ConstraintInitializer,
],
) -> dict[str, Constraint]:
"""
Resolve constraint initializers to callable constraints.
:param initializers: Dictionary mapping constraint keys to specifications.
Values must be Constraint instances or ConstraintInitializer instances.
:return: Dictionary mapping constraint keys to callable functions
:raises TypeError: If a value is not a supported type
"""
constraints = {}
for key, val in initializers.items():
if isinstance(val, ConstraintInitializer):
constraints[key] = val.create_constraint()
elif isinstance(val, Constraint):
constraints[key] = val
else:
raise TypeError(
f"Constraint '{key}' has unsupported value type "
f"{type(val).__name__}. Expected a Constraint instance or "
f"ConstraintInitializer instance."
)
return constraints
|