{"record":{"id":"f30ad60b08322294","repo":"mlflow/mlflow","slug":"invalid-data-for-pydantic-class-name-e","errorCode":null,"errorMessage":"Invalid data for {pydantic_class.__name__}: {e}","messagePattern":"Invalid data for (.+?): (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"warning","filePath":"mlflow/genai/agent_server/validator.py","lineNumber":26,"sourceCode":"    ResponsesAgentResponse,\n    ResponsesAgentStreamEvent,\n)\n\n\nclass BaseAgentValidator:\n    \"\"\"Base validator class with common validation methods\"\"\"\n\n    def validate_pydantic(self, pydantic_class: type[BaseModel], data: Any) -> None:\n        \"\"\"Generic pydantic validator that throws an error if the data is invalid\"\"\"\n        if isinstance(data, pydantic_class):\n            return\n        try:\n            if isinstance(data, BaseModel):\n                pydantic_class(**data.model_dump())\n                return\n            pydantic_class(**data)\n        except Exception as e:\n            raise ValueError(f\"Invalid data for {pydantic_class.__name__}: {e}\")\n\n    def validate_dataclass(self, dataclass_class: Any, data: Any) -> None:\n        \"\"\"Generic dataclass validator that throws an error if the data is invalid\"\"\"\n        if isinstance(data, dataclass_class):\n            return\n        try:\n            dataclass_class(**data)\n        except Exception as e:\n            raise ValueError(f\"Invalid data for {dataclass_class.__name__}: {e}\")\n\n    def validate_and_convert_request(self, data: dict[str, Any]) -> dict[str, Any]:\n        return data\n\n    def validate_and_convert_result(self, result: Any, stream: bool = False) -> dict[str, Any]:\n        # Base implementation doesn't use stream parameter, but subclasses do\n        if isinstance(result, BaseModel):\n            return result.model_dump(exclude_none=True)\n        elif is_dataclass(result):","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/mlflow/mlflow/blob/6a27f2decc0b76eb1b54af31849784addb357dbc/mlflow/genai/agent_server/validator.py#L8-L44","documentation":"validate_pydantic attempts to construct pydantic_class from the data dict (or re-validate a BaseModel via model_dump). Any construction/validation failure is re-raised as ValueError naming the model class, which the server surfaces as a 400 error.","triggerScenarios":"Passing a dict missing required pydantic fields, with wrong field types, or a BaseModel instance whose dumped fields no longer satisfy the target class.","commonSituations":"Client sending payloads that don't match the agent's input/output pydantic models; schema drift between SDK versions; nested objects typed incorrectly.","solutions":["Read the wrapped pydantic error (included in the message) and fix the offending field","Validate your payload locally with pydantic_class(**data) before calling the endpoint","Regenerate payloads from the current SDK/model schema rather than hand-building dicts"],"exampleFix":"# before\nvalidate_pydantic(ChatAgentRequest, {\"messages\": \"hi\"})  # messages must be a list\n\n# after\nvalidate_pydantic(ChatAgentRequest, {\"messages\": [{\"role\": \"user\", \"content\": \"hi\"}]})","handlingStrategy":"validation","validationCode":"try:\n    PydanticClass(**payload)\nexcept Exception as e:\n    raise ValueError(f\"payload invalid before send: {e}\")","typeGuard":"from pydantic import BaseModel\nfrom typing import Type, Any\n\ndef matches_model(model: Type[BaseModel], data: Any) -> bool:\n    if not isinstance(data, dict):\n        return False\n    try:\n        model(**data)\n        return True\n    except Exception:\n        return False","tryCatchPattern":"try:\n    result = client.predict(payload)\nexcept ValueError as e:\n    if \"Invalid data for\" in str(e):\n        logger.error(\"Fix fields per pydantic error: %s\", e)","preventionTips":["Construct payloads via the pydantic model itself","Keep model schemas in a shared package across client/server","Run payload round-trip tests on schema changes"],"tags":["pydantic","schema-validation","validation"],"backgroundTag":"schema-validation-failed","analyzedSha":"6a27f2decc0b76eb1b54af31849784addb357dbc","analyzedAt":"2026-08-29T20:54:51.419Z","schemaVersion":2},"datasetVersion":"2026-08-29T22:17:34.462Z"}