{"record":{"id":"d82e844fb6b35ffb","repo":"langchain-ai/langchain","slug":"unsupported-model-version-for-pydanticoutputparser","errorCode":null,"errorMessage":"Unsupported model version for PydanticOutputParser: {self.pydantic_object.__class__}","messagePattern":"Unsupported model version for PydanticOutputParser: (.+?)","errorType":"exception","errorClass":"OutputParserException","httpStatus":null,"severity":"error","filePath":"libs/core/langchain_core/output_parsers/pydantic.py","lineNumber":35,"sourceCode":"\n\nclass PydanticOutputParser(JsonOutputParser, Generic[TBaseModel]):\n    \"\"\"Parse an output using a Pydantic model.\"\"\"\n\n    pydantic_object: Annotated[type[TBaseModel], SkipValidation()]\n    \"\"\"The Pydantic model to parse.\"\"\"\n\n    def _parse_obj(self, obj: Any) -> TBaseModel:\n        try:\n            if issubclass(self.pydantic_object, pydantic.BaseModel):\n                return self.pydantic_object.model_validate(obj)\n            if issubclass(self.pydantic_object, pydantic.v1.BaseModel):\n                return self.pydantic_object.parse_obj(obj)\n            msg = (  # type: ignore[unreachable]\n                \"Unsupported model version for PydanticOutputParser: \"\n                f\"{self.pydantic_object.__class__}\"\n            )\n            raise OutputParserException(msg)\n        except (pydantic.ValidationError, pydantic.v1.ValidationError) as e:\n            raise self._parser_exception(e, obj) from e\n\n    def _parser_exception(\n        self, e: Exception, json_object: Any\n    ) -> OutputParserException:\n        json_string = json.dumps(json_object, ensure_ascii=False)\n        name = self.pydantic_object.__name__\n        msg = f\"Failed to parse {name} from completion {json_string}. Got: {e}\"\n        return OutputParserException(msg, llm_output=json_string)\n\n    @overload\n    def parse_result(\n        self, result: list[Generation], *, partial: Literal[False] = False\n    ) -> TBaseModel: ...\n\n    @overload\n    def parse_result(","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/langchain-ai/langchain/blob/e32fa9a52eab3b61ad7a45399bfde59b3e580fc4/libs/core/langchain_core/output_parsers/pydantic.py#L17-L53","documentation":"Defensive unreachable branch in PydanticOutputParser._parse_obj: pydantic_object is neither a pydantic v2 BaseModel nor a pydantic.v1 BaseModel subclass, so neither model_validate nor parse_obj applies. The type system normally prevents this; it fires only when a non-BaseModel leaks in past type checks.","triggerScenarios":"Constructing PydanticOutputParser(pydantic_object=SomeDataclassOrArbitraryClass) while bypassing static typing (dynamic imports, plugin-provided classes); mutating pydantic_object after init.","commonSituations":"Migrating schemas to dataclasses/TypedDict while keeping PydanticOutputParser; config-driven parser construction from strings that resolve to non-Pydantic classes.","solutions":["Pass a Pydantic BaseModel subclass (v1 or v2) to pydantic_object","For dataclasses/TypedDict, convert them to BaseModel or use a JSON-schema-based parser instead","Add a runtime assert issubclass(pydantic_object, BaseModel) at wiring time to fail fast"],"exampleFix":"# before\nparser = PydanticOutputParser(pydantic_object=MyDataclass)\n\n# after\nfrom pydantic import BaseModel\nclass MySchema(BaseModel):\n    name: str\nparser = PydanticOutputParser(pydantic_object=MySchema)","handlingStrategy":"type-guard","validationCode":"from pydantic import BaseModel, v1\nassert isinstance(parser.pydantic_object, type) and (\n    issubclass(parser.pydantic_object, BaseModel)\n    or issubclass(parser.pydantic_object, v1.BaseModel)\n)","typeGuard":"from pydantic import BaseModel, v1\n\ndef is_pydantic_model(cls: object) -> bool:\n    return isinstance(cls, type) and (issubclass(cls, BaseModel) or issubclass(cls, v1.BaseModel))","tryCatchPattern":null,"preventionTips":["Keep a single typed factory for all PydanticOutputParser construction","Run mypy on parser wiring code to catch non-BaseModel schemas statically"],"tags":["pydantic","output-parsing","type-mismatch"],"backgroundTag":null,"analyzedSha":"e32fa9a52eab3b61ad7a45399bfde59b3e580fc4","analyzedAt":"2026-08-14T18:42:09.092Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}