{"record":{"id":"4cd66ab3ac75a99c","repo":"microsoft/autogen","slug":"unsupported-payload-serialization-format-payload","errorCode":null,"errorMessage":"Unsupported payload serialization format: {payload_serialization_format}","messagePattern":"Unsupported payload serialization format: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/packages/autogen-ext/src/autogen_ext/runtimes/grpc/_worker_runtime.py","lineNumber":257,"sourceCode":"        self._agent_factories: Dict[\n            str, Callable[[], Agent | Awaitable[Agent]] | Callable[[AgentRuntime, AgentId], Agent | Awaitable[Agent]]\n        ] = {}\n        self._instantiated_agents: Dict[AgentId, Agent] = {}\n        self._known_namespaces: set[str] = set()\n        self._read_task: None | Task[None] = None\n        self._running = False\n        self._pending_requests: Dict[str, Future[Any]] = {}\n        self._pending_requests_lock = asyncio.Lock()\n        self._next_request_id = 0\n        self._host_connection: HostConnection | None = None\n        self._background_tasks: Set[Task[Any]] = set()\n        self._subscription_manager = SubscriptionManager()\n        self._serialization_registry = SerializationRegistry()\n        self._extra_grpc_config = extra_grpc_config or []\n        self._agent_instance_types: Dict[str, Type[Agent]] = {}\n\n        if payload_serialization_format not in {JSON_DATA_CONTENT_TYPE, PROTOBUF_DATA_CONTENT_TYPE}:\n            raise ValueError(f\"Unsupported payload serialization format: {payload_serialization_format}\")\n\n        self._payload_serialization_format = payload_serialization_format\n\n    async def start(self) -> None:\n        \"\"\"Start the runtime in a background task.\"\"\"\n        if self._running:\n            raise ValueError(\"Runtime is already running.\")\n        logger.info(f\"Connecting to host: {self._host_address}\")\n        self._host_connection = await HostConnection.from_host_address(\n            self._host_address, extra_grpc_config=self._extra_grpc_config\n        )\n        logger.info(\"Connection established\")\n        if self._read_task is None:\n            self._read_task = asyncio.create_task(self._run_read_loop())\n        self._running = True\n\n    def _raise_on_exception(self, task: Task[Any]) -> None:\n        exception = task.exception()","sourceCodeStart":239,"sourceCodeEnd":275,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/python/packages/autogen-ext/src/autogen_ext/runtimes/grpc/_worker_runtime.py#L239-L275","documentation":"GrpcWorkerAgentRuntime accepts a payload_serialization_format constructor argument that selects how message payloads cross the wire. Only the JSON and Protobuf content types (JSON_DATA_CONTENT_TYPE / PROTOBUF_DATA_CONTENT_TYPE) are implemented; anything else is rejected in __init__ with ValueError so misconfiguration fails before the runtime starts.","triggerScenarios":"Constructing GrpcWorkerAgentRuntime(host_address=..., payload_serialization_format='application/x-my-format') or any string other than the two supported content-type constants.","commonSituations":"Assuming an arbitrary MIME type or serializer name works; passing a custom serialization registry format id instead of the content-type constant; copy-paste from docs showing protobuf while sending a custom string.","solutions":["Use one of the supported constants: autogen_core.application JSON_DATA_CONTENT_TYPE ('application/json') or PROTOBUF_DATA_CONTENT_TYPE ('application/x-protobuf')","For custom payload types, register a serializer with the runtime's serialization registry and keep the wire format as JSON or protobuf","If you truly need a new wire format, subclass/extend the runtime rather than passing an unknown string"],"exampleFix":"# before\nruntime = GrpcWorkerAgentRuntime(host_address, payload_serialization_format=\"msgpack\")\n\n# after\nfrom autogen_ext.runtimes.grpc._constants import PROTOBUF_DATA_CONTENT_TYPE\nruntime = GrpcWorkerAgentRuntime(host_address, payload_serialization_format=PROTOBUF_DATA_CONTENT_TYPE)","handlingStrategy":"validation","validationCode":"from autogen_ext.runtimes.grpc._constants import JSON_DATA_CONTENT_TYPE, PROTOBUF_DATA_CONTENT_TYPE\n\nSUPPORTED_FORMATS = {JSON_DATA_CONTENT_TYPE, PROTOBUF_DATA_CONTENT_TYPE}\nassert payload_serialization_format in SUPPORTED_FORMATS, f\"use one of {SUPPORTED_FORMATS}\"","typeGuard":null,"tryCatchPattern":"try:\n    runtime = GrpcWorkerAgentRuntime(host, payload_serialization_format=fmt)\nexcept ValueError as e:\n    if \"serialization format\" in str(e):\n        fmt = JSON_DATA_CONTENT_TYPE\n        runtime = GrpcWorkerAgentRuntime(host, payload_serialization_format=fmt)\n    else:\n        raise","preventionTips":["Always pass the module constants, never string literals","Centralize runtime construction in one factory function","Assert supported formats in config validation at app startup"],"tags":["python","autogen","grpc","serialization","validation"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}