{"record":{"id":"933e94ccd2ceaf17","repo":"microsoft/autogen","slug":"unknown-type-type-name-with-content-type-data-c","errorCode":null,"errorMessage":"Unknown type {type_name} with content type {data_content_type}","messagePattern":"Unknown type (.+?) with content type (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/packages/autogen-core/src/autogen_core/_serialization.py","lineNumber":250,"sourceCode":"    def add_serializer(self, serializer: MessageSerializer[Any] | Sequence[MessageSerializer[Any]]) -> None:\n        if isinstance(serializer, Sequence):\n            for c in serializer:\n                self.add_serializer(c)\n            return\n\n        self._serializers[(serializer.type_name, serializer.data_content_type)] = serializer\n\n    def deserialize(self, payload: bytes, *, type_name: str, data_content_type: str) -> Any:\n        serializer = self._serializers.get((type_name, data_content_type))\n        if serializer is None:\n            return UnknownPayload(type_name, data_content_type, payload)\n\n        return serializer.deserialize(payload)\n\n    def serialize(self, message: Any, *, type_name: str, data_content_type: str) -> bytes:\n        serializer = self._serializers.get((type_name, data_content_type))\n        if serializer is None:\n            raise ValueError(f\"Unknown type {type_name} with content type {data_content_type}\")\n\n        return serializer.serialize(message)\n\n    def is_registered(self, type_name: str, data_content_type: str) -> bool:\n        return (type_name, data_content_type) in self._serializers\n\n    def type_name(self, message: Any) -> str:\n        return _type_name(message)\n","sourceCodeStart":232,"sourceCodeEnd":259,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-core/src/autogen_core/_serialization.py#L232-L259","documentation":"MessageRegistry.serialize looks up a serializer by the (type_name, data_content_type) pair and raises ValueError when no serializer was registered for that combination. Deserialization is forgiving (returns UnknownPayload), but serialization cannot proceed without a concrete serializer, hence the hard failure.","triggerScenarios":"Calling serializer.serialize(message, type_name=T, data_content_type=C) (or publishing/sending a message whose resolved type_name+content_type was never registered) on a runtime whose registry lacks that pair. Common when the content type differs, e.g. message registered as application/json but sent with application/x-protobuf, or the type_name string (module.Class) changed after a refactor/rename.","commonSituations":"Publishing before add_message_serializer was called (ordering bug, e.g. serializer registered inside an agent constructor that has not run); module renamed so _type_name produces 'newpkg.messages.Task' while the serializer was registered under the old name; mixing PYDANTIC and dataclass serializers with mismatched content types; cross-process setups where only one process registered the serializer.","solutions":["Register the serializer on every runtime/process that serializes: runtime.add_message_serializer(PYDANTICJsonMessageSerializer(Task))","Verify the pair with is_registered(type_name, data_content_type) before serializing","Use MessageRegistry.register_message(...).add_serializer(...) consistently so type_name and content type are derived from the same class","After renaming/moving message classes, re-register under the new _type_name output or fix stale string constants"],"exampleFix":"# before\nawait runtime.publish_message(Task(...), topic)  # ValueError: unknown type\n\n# after\nruntime.add_message_serializer(PYDANTICJsonMessageSerializer(Task))\nawait runtime.publish_message(Task(...), topic)","handlingStrategy":"validation","validationCode":"def ensure_serializable(registry, type_name: str, content_type: str):\n    if not registry.is_registered(type_name, content_type):\n        raise RuntimeError(\n            f\"no serializer for ({type_name}, {content_type}); register before publishing\"\n        )","typeGuard":"def message_is_registered(registry, message, content_type: str) -> bool:\n    from autogen_core._serialization import _type_name\n    return registry.is_registered(_type_name(message), content_type)","tryCatchPattern":"try:\n    payload = registry.serialize(msg, type_name=T, data_content_type=C)\nexcept ValueError as e:\n    if \"Unknown type\" in str(e):\n        registry.add_serializer(...)  # or route to error handling\n    else:\n        raise","preventionTips":["Register serializers during app init before any publish/send","Use MessageRegistry to derive type_name and content type from the class itself","After module renames, grep for stale fully-qualified type_name strings"],"tags":["autogen-core","serialization","message-registry","registration"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}