What AI coding models get wrong about langchain

20 current findings across 23 models, verified against langchain release notes. Latest langchain at last verification: 1.4.0.

Where each model’s langchain version attribution stops

ModelStated cutoffAttribution stops atLag
Claude Fable 52026-01 1.0.0 · 2025-10-17 ~3 months
Claude Fable 5.12026-06 1.0.0 · 2025-10-17 ~8 months
Claude Fable 5.12026-06 1.1.0 · 2025-11-24 ~6 months
Claude Fable 5.12026-06 1.1.0 · 2025-11-24 ~6 months
Claude Fable 5.12026-06 1.2.0 · 2025-12-15 ~6 months
Claude Haiku 4.52025-02 0.3.0 · 2024-09-13 ~5 months
Claude Haiku 4.52025-02 0.2.0 · 2024-05-20 ~9 months
Claude Opus 52026-05 1.0.0 · 2025-10-17 ~7 months
Claude Opus 52026-05 1.0.0 · 2025-10-17 ~7 months
Claude Opus 52026-05 1.0.0 · 2025-10-17 ~7 months
Claude Opus 52026-05 1.0.0 · 2025-10-17 ~7 months
Claude Sonnet 52026-01 0.3.0 · 2024-09-13 ~16 months
Claude Sonnet 52026-01 1.0.0 · 2025-10-17 ~3 months
Claude Sonnet 52026-01 0.3.0 · 2024-09-13 ~16 months
Claude Sonnet 52026-01 1.0.0 · 2025-10-17 ~3 months
Claude Sonnet 52026-01 0.3.0 · 2024-09-13 ~16 months
Claude Sonnet 52026-01 0.3.0 · 2024-09-13 ~16 months

Measured by asking each model what shipped in a given langchain release, then checking the answer against the release timeline. Not inferred from the vendor’s cutoff date. This is the newest release the model can correctly place, not the newest langchain feature it knows — a model past this point often uses a newer API correctly while naming the wrong release for it. Why that distinction matters.

Findings

Sorted by severity. “Chargeable” means the change was published before that model’s own stated cutoff, so the model had the opportunity to know it.

SeverityBeliefModelChanged inChargeableProof
S1breaks-build from langchain import hub — removed from the package in 1.0.0
langchain.hub
Claude Sonnet 5 1.0.0
2025-10-17
yes source
S2silently-wrong Builds middleware around modify_model_request, a hook that exists in no released langchain 1.x — the middleware is registered and never fires
AgentMiddleware.modify_model_request
Claude Sonnet 5 1.0.0
2025-10-17
yes source
S2silently-wrong States that the bare model-retry middleware re-raises when retries run out; the shipped default returns an AIMessage and the agent carries on
ModelRetryMiddleware defaults
Claude Fable 5 1.1.0
2025-11-24
yes source
S2silently-wrong States the agent's step ceiling is LangGraph's 25 and prescribes raising it; create_agent has set a four-figure limit since 1.1.0
create_agent recursion limit
Claude Fable 5 1.1.0
2025-11-24
yes source
S2silently-wrong States that the bare model-retry middleware re-raises when retries run out; the shipped default returns an AIMessage and the agent carries on
ModelRetryMiddleware defaults
Claude Opus 5 1.1.0
2025-11-24
yes source
S2silently-wrong States the agent's step ceiling is LangGraph's 25 and prescribes raising it; create_agent has set a four-figure limit since 1.1.0
create_agent recursion limit
Claude Opus 5 1.1.0
2025-11-24
yes source
S2silently-wrong States that the bare model-retry middleware re-raises when retries run out; the shipped default returns an AIMessage and the agent carries on
ModelRetryMiddleware defaults
Claude Sonnet 5 1.1.0
2025-11-24
yes source
S2silently-wrong States the agent's step ceiling is LangGraph's 25 and prescribes raising it; create_agent has set a four-figure limit since 1.1.0
create_agent recursion limit
Claude Sonnet 5 1.1.0
2025-11-24
yes source
S2silently-wrong Names extras correctly but nests the values under a provider key the shipped attribute does not use
tool extras
Claude Fable 5 1.2.0
2025-12-15
yes source
S2silently-wrong Invents tool.provider_specific for per-tool provider parameters; the shipped attribute is extras
tool extras
Claude Opus 5 1.2.0
2025-12-15
yes source
S2silently-wrong Routes provider-specific tool parameters through metadata=, a real field whose documented destination is callback handlers, not the provider
tool extras
Claude Sonnet 5 1.2.0
2025-12-15
yes source
S3deprecated Builds agents with the deprecated LangGraph prebuilt instead of create_agent
langgraph.prebuilt.create_react_agent
Claude Sonnet 5 1.0.0
2025-10-17
yes source
S3deprecated Writes middleware against ModelRequest.system_prompt; the field was renamed to system_message in 1.1.0 and the string route is a documented deprecation
ModelRequest.system_message
Claude Opus 5 1.1.0
2025-11-24
yes source
S3deprecated Denies that a LangChain tool has any place of its own for provider-specific fields, then rebuilds the tool definition by hand — the verdict, the artefact and the attribution all wrong in the same direction
@tool(extras={...})
Claude Opus 5 1.2.0
2025-12-15
yes source
S3deprecated Denies a tool has any place of its own for provider-specific fields, names the field list it believes complete, and hand-builds the Anthropic tool definition instead
@tool(extras={...})
Claude Sonnet 5 1.2.0
2025-12-15
yes source
S3deprecated Denies that create_agent can register stream transformers at all, then ships a consumer-side wrapper that rebuilds per-scope identity by hand - the verdict and the artefact wrong in the same direction, four tasks apart
create_agent(transformers=...)
Claude Fable 5.1 1.3.0
2026-05-12
yes source
S3deprecated Names v2 as the highest event-stream protocol version an agent accepts, and describes it as the ceiling - v3 shipped for langchain agents in the same release as F1's parameter
astream_events(version="v3") on a create_agent agent
Claude Fable 5.1 1.3.0
2026-05-12
yes source
S4wrong-metadata Version knowledge stops at 0.3, sixteen months before its stated cutoff Claude Sonnet 5 1.0.0
2025-10-17
yes source
S4wrong-metadata Version knowledge stops at 1.0.0, with 1.1.0 inside its window Claude Fable 5 1.1.0
2025-11-24
yes source
S4wrong-metadata Version knowledge stops at 1.0.0 while 1.1.0 and 1.2.0 shipped inside its window Claude Opus 5 1.1.0
2025-11-24
yes source

Runs