diff --git a/src/crewai/flow/flow.py b/src/crewai/flow/flow.py index 85e80c1bd..16f1cf9f0 100644 --- a/src/crewai/flow/flow.py +++ b/src/crewai/flow/flow.py @@ -11,6 +11,7 @@ from typing import ( Type, TypeVar, Union, + cast, ) from pydantic import BaseModel, ValidationError @@ -216,10 +217,18 @@ class Flow(Generic[T], metaclass=FlowMeta): if isinstance(self._state, BaseModel): # Structured state management try: - # Create a new instance with updated values to ensure validation - self._state = self._state.__class__( - **{**self._state.model_dump(), **inputs} + M = self._state.__class__ + + # Dynamically create a new model class with 'extra' set to 'forbid' + class ModelWithExtraForbid(M): + model_config = M.model_config.copy() + model_config["extra"] = "forbid" + + # Create a new instance using the combined state and inputs + self._state = cast( + T, ModelWithExtraForbid(**{**self._state.model_dump(), **inputs}) ) + except ValidationError as e: raise ValueError(f"Invalid inputs for structured state: {e}") from e elif isinstance(self._state, dict):