{"record":{"id":"7e38f1757924c0d4","repo":"langchain-ai/langgraph","slug":"unrecognized-format-expected-one-of-langchain","errorCode":null,"errorMessage":"Unrecognized {format=}. Expected one of 'langchain-openai', None.","messagePattern":"Unrecognized (.+?)\\. Expected one of 'langchain-openai', None\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"libs/langgraph/langgraph/graph/message.py","lineNumber":240,"sourceCode":"                ids_to_remove.add(m.id)\n            else:\n                ids_to_remove.discard(m.id)\n                merged[existing_idx] = m\n        else:\n            if isinstance(m, RemoveMessage):\n                raise ValueError(\n                    f\"Attempting to delete a message with an ID that doesn't exist ('{m.id}')\"\n                )\n\n            merged_by_id[m.id] = len(merged)\n            merged.append(m)\n    merged = [m for m in merged if m.id not in ids_to_remove]\n\n    if format == \"langchain-openai\":\n        merged = _format_messages(merged)\n    elif format:\n        msg = f\"Unrecognized {format=}. Expected one of 'langchain-openai', None.\"\n        raise ValueError(msg)\n    else:\n        pass\n\n    return merged\n\n\ndef _messages_delta_reducer(\n    state: list[AnyMessage], writes: list[list[AnyMessage]]\n) -> list[AnyMessage]:\n    \"\"\"**Experimental.** Batch reducer for use with `DeltaChannel`.\n\n    Processes all writes in one pass — dedup by ID, `RemoveMessage`\n    tombstoning — without calling `add_messages`.\n\n    This reducer is batching-invariant, as required by `DeltaChannel`:\n    `reducer(reducer(state, xs), ys) == reducer(state, xs + ys)`.\n\n    Raw dict / string / tuple inputs are coerced to typed `BaseMessage`","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/langchain-ai/langgraph/blob/38031739e551638e373fb553453256c23feeb41f/libs/langgraph/langgraph/graph/message.py#L222-L258","documentation":"Raised in message merging (add_messages / RemoveMessage handling) when the format argument is neither None, 'langchain-openai', nor falsy. It is an input-validation guard on the format parameter: an unsupported serialization format name was passed to a message-merging helper. Use 'langchain-openai' or omit the argument.","triggerScenarios":"Thrown at libs/langgraph/langgraph/graph/message.py:240 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass format=None to keep native message objects","Pass format='langchain-openai' to convert to OpenAI-style dicts","Implement custom formatting after the merge instead of an unsupported format string"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"38031739e551638e373fb553453256c23feeb41f","analyzedAt":"2026-08-26T18:02:49.312Z","contentChangedAt":"2026-08-26T18:02:49.312Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}