Skip to content

Releases: langchain-ai/langchain

langchain==1.4.0a4

Choose a tag to compare

@github-actions github-actions released this 02 Sep 05:35

Initial release

release(langchain): 1.4.0a4
test(langchain): cover mixed-era ClientGroup and group elicitation
Update libs/langchain_v1/langchain/mcp/adapter.py
fix(langchain): drive MCP elicitation via member session for fastmcp 4.0.1
fix(sdk): use latest fastmcp and rm reentrant impl
cr
cr
refactor(langchain): inline MCP client arming into __init__
refactor(langchain): stamp an arm marker instead of introspecting the handler closure
fix(langchain): gate MCP interrupt routing on the negotiated protocol era
refactor(langchain): drop MCP elicitation flag, derive interrupt routing from the client
fix(sdk): add _ReentrantClientGroup
fix(langchain): narrow MCPAdapter.client union in mcp tests for mypy
chore(langchain): format mcp/adapter.py
release(langchain): 1.4.0a3
feat(langchain): group MCP tool metadata under an mcp namespace
refactor(langchain): stop exporting MCPAdapterTarget from langchain.mcp
refactor(langchain): rename convert_mcp_tool_to_langchain_tool to as_langchain_tool
refactor(langchain): rename MCPAdapter.get_tools to list_tools
feat(langchain): expose cache_mode on MCPAdapter.get_tools
chore(langchain): require fastmcp 4.0.0
feat(langchain): accept a ClientGroup as an MCPAdapter target
feat(langchain): mark the langchain.mcp namespace as beta
Revert "feat(langchain): accept a ClientGroup as an MCPAdapter target"
feat(langchain): accept a ClientGroup as an MCPAdapter target
chore(langchain): require fastmcp 4.0.0b5
fix(langchain): require a str MCP target to be an http(s) URL
release(langchain): 1.4.0a2
fix(langchain): require full fastmcp for the mcp extra
fix(langchain): name the content type MCP conversion could not handle
release(langchain): 1.4.0a1
test(langchain): skip MCP tests on a pydantic older than mcp supports
test(langchain): drive MCP tests through FastMCP's own utilities
fix(langchain/mcp): review edits (#39974)
Merge remote-tracking branch 'origin/master' into sydney-runkle/langchain/simplify-mcp-adapter
fix(langchain): import assert_never from typing_extensions
test(langchain): fix type errors in the MCP test suite
test(langchain): cover protocol eras across a multi-server fleet
test(langchain): cover both MCP protocol eras through one adapter
refactor(langchain): one elicitation request type per mode
refactor(langchain): keep the elicitation types out of langchain.mcp
fix(langchain): make the two FastMCP-private dependencies fail loudly
refactor(langchain): one elicitation response type per action
refactor(langchain): refuse MCP continuation rounds instead of polling
release(langchain): 1.3.18 (#39966)
refactor(langchain): tighten the elicitation answer types
refactor(langchain): move _declare_elicitation_capability to elicitation
docs(langchain): trim the langchain.mcp docstrings
fix(langchain): bound the MCP input-required retry loop
refactor(langchain): trim the MCPAdapterTarget docs
refactor(langchain): use ELICITATION_INTERRUPT_TYPE as the discriminator
refactor(langchain): drop MCPAdapter.aclose
fix(langchain): preserve content-block shape in PIIMiddleware redaction (#39894)
fix(core): shore up indexing in genai v1 streaming content (#39964)
fix(langchain): guard MCP elicitation calls against a dying session
feat(langchain): answer MCP elicitation with a LangGraph interrupt
feat(langchain): port MCP tool conversion from langchain-mcp-adapters
feat(langchain): drop elicitation from MCPAdapter
chore(langchain): require FastMCP 4.0.0b4 for the mcp extra
feat(langchain): simplify MCPAdapter construction
feat(langchain): langchain.mcp namespace, MCPAdapter
release(langchain): 1.3.17 (#39893)
fix(langchain): frame custom HITL rejection reasons (#39773)
chore(deps): bump minor and patch dependencies (#39869)
release(langchain): 1.3.16 (#39806)
feat(core): add standard model exception types (#39538)
feat(langchain): support custom token_counter in ContextEditingMiddleware (#39754)
fix(langchain): re-raise non-retryable exceptions in ModelRetryMiddleware (#38960)
chore(langchain): update docs on error handling for json schema (#39632)
fix(langchain): preserve final repeated schema ordering (#39284)
release(langchain): 1.3.15 (#39595)
feat(langchain): expose trace_policy on AgentMiddleware (#38910)
chore(langchain): fix type errors in tests (#39589)
chore: bump h2 from 4.3.0 to 4.4.1 in /libs/langchain_v1 (#39324)
fix(langchain): preserve history on SummarizationMiddleware summary failure (#39268)
fix(langchain): handle import error in LLMToolEmulator by model (#39290)
refactor(langchain): update doc strings (#39305)
feat(langchain): add state_schema param to wrap_tool_call (#39292)
fix(langchain): re-export PIIMatch from middleware package (#39291)
fix(langchain): restrict narrowed ToolStrategy in bound tools (#39259)
feat(langchain): filter internal middleware model calls from messages projection (#39252)
chore: bump aiohttp from 3.14.1 to 3.14.3 in /libs/langchain_v1 (#39242)
chore: bump cryptography from 48.0.1 to 50.0.0 in /libs/langchain_v1 (#39240)
test(langchain): regression test for shell tool + checkpointer msgpack error (#39267)
fix(langchain): handle malformed structured-output responses (#39245)
fix(langchain): prevent orphaned tool_calls in ToolCallLimitMiddleware end behavior (#39258)
fix(langchain): add aliases for bedrock mantle chat models (#39260)
feat(langchain): add LangSmith provider to init_chat_model (#39224)
fix(langchain): clear stale structured_response between checkpointed turns (#39248)
fix(langchain): stop HITL approval gates from silently failing open (#39247)
chore: bump the minor-and-patch group across 3 directories with 7 updates (#39187)
fix(langchain): propagate model middleware control flow (#39199)
fix(langchain): update Anthropic config test (#39172)
chore: bump pyasn1 from 0.6.3 to 0.6.4 in /libs/langchain_v1 (#39026)
chore: bump pillow from 12.2.0 to 12.3.0 in /libs/langchain_v1 (#38994)
feat(core): add reasoning_effort as a standard chat model parameter (#38887)
docs(langchain): clarify ToolRetryMiddleware exception handling (#38884)
release(langchain): 1.3.14 (#38883)
fix(langchain): only retry retryable exceptions in ToolRetryMiddleware (#38845)
feat(langchain): ToolErrorMiddleware (#38781)
release(langchain): 1.3.13 (#38787)
feat(langchain): add meta extra and support langchain-meta in init_chat_model (#38786)
feat(openai): support explicit prompt caching (#38762)
chore(deps): refresh lockfiles (#38746)
release(langchain): 1.3.12 (#38730)
fix(langchain): propagate interrupts through ToolRetryMiddleware (#38722)
fix(langchain): avoid shared process-group kill in shell middleware (#36359)
fix(langchain): sanitize anthropic cache markers on fallback retries (#37867)
style: fix some ruff preview rules in langchain_v1 and standard-tests (#38657)
chore(langchain): add types in agent middleware tests (#38188)
release(langchain): 1.3.11 (#38377)
fix(langchain,openai): only set strict=True on tools for OpenAI-compatible models in ProviderStrategy (#38370)
chore: bump pydantic-settings from 2.12.0 to 2.14.2 in /libs/langchain_v1 (#38279)
chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/langchain_v1 (#38280)
chore: bump langsmith from 0.8.9 to 0.8.18 in /libs/langchain_v1 (#38281)
docs(langchain): document summarization prompt contract (#38256)
release(langchain): 1.3.10 (#38255)
chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (#38176)
chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (#38179)
fix(langchain): switch summary format (#38171)
fix(langchain): detect provider strategy for dated gpt-5.2/gpt-5.4 snapshots (#38222)
chore(langchain): improve typing in tests (#38163)
chore: bump pyjwt from 2.12.0 to 2.13.0 in /libs/langchain_v1 (#38168)
release(openai): 1.3.2 (#38130)
hotfix(openai): switch version (#38123)
release(openai): 1.4.0 (#38120)
docs: refresh README installation and resources (#38119)
test(core,langchain): update tests for explicit deserialization allowlists (#38118)
release(core): 1.4.7 (#38111)
release(anthropic): 1.4.6 (#38105)
release(langchain): 1.3.9 (#38104)
fix(langchain,anthropic): confine file-search results and tighten anthropic allowed_prefixes (#38106)
release(langchain): 1.3.8 (#38096)
style(core,langchain,langchain-classic,partners): replace double backticks in docstrings (#38095)
release(core): 1.4.6 (#38061)
chore(langchain): add overloads to create_agent (#34309)
chore(infra): bump mypy to 2.1 and unify type-check config across the monorepo (#36470)
fix(langchain): support async middleware decorator typing (#34584)
fix(langchain): tighten structured output model fallbacks (#38042)
release(anthropic): 1.4.5 (#38036)
hotfix(core): bump lockfile(s) (#38032)
refactor(langchain): refactor test_create_agent_tool_validation (#34443)
release(langchain): 1.3.7 (#38024)
style(langchain): add ruff rules ARG (#34435)
feat(langchain): add ProviderToolSearchMiddleware (#37969)
chore(langchain): activate mypy warn_return_any (#34249)
test(langchain): mark legacy trigger view for 2.0 removal (#38002)
release(langchain): 1.3.6 (#38001)
fix(langchain): preserve summarization trigger compatibility (#38000)
release(langchain): 1.3.5 (#37998)
feat(langchain): port AND-capable trigger conditions to SummarizationMiddleware (#34576)
hotfix(openai): min core dep (#37990)
feat(openai): support apply_patch built-in tool (#37157)
chore: bump pyarrow from 21.0.0 to 23.0.1 in /libs/langchain_v1 (#37930)
chore: bump dependencies (#37892)
chore: bump aiohttp from 3.13.4 to 3.14.0 in /libs/langchain_v1 (#37888)
release(langchain): 1.3.4 (#37861)
fix(langchain): improve HITL rejection guidance (#37859)
release(langchain): 1.3.3 (#37843)
chore(langchain): bump langgraph to 1.2.4 (#37857)
chore(langchain): loosen langgraph dep range (#37855)
feat(langchain): project subagent runs onto typed run.subagents channel (#37739)
feat(langchain): add interrupt_mode and `...

Read more

langchain==1.4.0a3

Choose a tag to compare

@github-actions github-actions released this 01 Sep 17:19

Third alpha of the 1.4.0 line. This release focuses on the new langchain.mcp namespace for adapting MCP servers into LangChain tools.

langchain.mcp highlights

  • MCPAdapter adapts any target fastmcp.Client accepts — a URL, a local script, an in-process server, an MCPConfig naming several servers, or a pre-built client — as well as a FastMCP ClientGroup for a fleet of servers behind one client.
  • MCPAdapter.list_tools(*, cache_mode="use") discovers and adapts tools, with optional client-side response caching (SEP-2549): use serves a cached list within the server's TTL hint, refresh repopulates it, bypass skips it.
  • as_langchain_tool(tool, client, *, elicitation=None) converts a single MCP tool for callers managing their own client.
  • Tool metadata is grouped under an mcp namespace on each tool: the tool's annotations (snake_case) and _meta under metadata["mcp"]["tool"], and the serving server's identity under metadata["mcp"]["server"].
  • elicitation="interrupt" surfaces a server's mid-call questions as LangGraph interrupts, so a human answers and the run resumes.
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter

async with MCPAdapter("https://example.com/mcp") as adapter:
    agent = create_agent("anthropic:claude-sonnet-5", await adapter.list_tools())

Requires the mcp extra: pip install "langchain[mcp]" (and fastmcp>=4.0.0).

Install

pip install --pre "langchain==1.4.0a3"

This is a pre-release; install with --pre.


Release notes curated with the assistance of an AI agent.

langchain==1.4.0a2

langchain==1.4.0a2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Aug 16:19

Alpha preview of langchain.mcp — a first-party adapter that turns any MCP server into LangChain tools you can hand straight to create_agent.

Connection handling is FastMCP's, so its client features are available as-is rather than re-implemented behind a narrower interface.

pip install "langchain[mcp]==1.4.0a2"

Connect

MCPAdapter takes any target fastmcp.Client accepts — transport is inferred, so there is one entry point rather than one per protocol.

from langchain.agents import create_agent
from langchain.mcp import MCPAdapter

async with MCPAdapter("https://example.com/mcp") as adapter:
    agent = create_agent("anthropic:claude-sonnet-5", await adapter.get_tools())
    result = await agent.ainvoke({"messages": [{"role": "user", "content": "..."}]})

Valid targets: a URL, a local script path (launched over stdio), an in-process FastMCP server, a config naming several servers at once, or a fastmcp.Client you built yourself.

Tools returned by get_tools() hold the adapter's client, so they stay callable after the context exits — the async with block scopes discovery, not tool lifetime.

Auth, caching, timeouts — build the client

MCPAdapter takes two arguments: the target and elicitation. Everything else FastMCP supports is configured on a fastmcp.Client that you build and hand over as the target. This is the pattern to reach for whenever you need more than a bare connection:

from fastmcp.client import Client
from langchain.mcp import MCPAdapter

client = Client(
    "https://example.com/mcp",
    auth="oauth",       # or a bearer token string, or any httpx auth
    cache=True,         # opt-in response caching
    timeout=30,
)

async with MCPAdapter(client) as adapter:
    tools = await adapter.get_tools()

Auth accepts "oauth" to run the OAuth flow, a token string for bearer auth, or an httpx.Auth instance for anything custom — see FastMCP's auth docs. Per-server headers and auth can also be set in a multi-server config (below).

Caching is opt-in and off by default: cache=True enables it with defaults, honoring the server's own ttlMs and cacheScope hints; a CacheConfig customizes it. The cache is per-client and in-memory.

Everything else on fastmcp.Clienttimeout, log_handler, progress_handler, message_handler, roots, sampling_handler — works the same way. The adapter passes your client through untouched, so FastMCP behavior is not re-implemented or restricted.

One caveat: with elicitation="interrupt", the adapter clones your client so it does not overwrite a callback you set. Configuration (auth, cache settings, handlers) carries over to the clone; cached entries do not, since the clone gets its own store.

adapter.client exposes the underlying client for prompts, resources, and anything else the adapter does not wrap.

Multiple servers

Point the adapter at a config and it fans out to every server through one connection, presenting a single tool list to your agent.

config = {
    "mcpServers": {
        "weather": {"url": "https://weather.example.com/mcp"},
        "calendar": {
            "url": "https://calendar.example.com/mcp",
            "headers": {"Authorization": "Bearer ..."},
        },
    }
}

async with MCPAdapter(config) as adapter:
    agent = create_agent("anthropic:claude-sonnet-5", await adapter.get_tools())

With more than one server, tools are namespaced by server name — weather_get_forecast, calendar_create_event — so collisions between servers are impossible. With exactly one server, the adapter connects directly and names are unprefixed. Each entry takes its own headers, auth, transport, and timeout, so servers with different credentials compose in one agent. A local server uses command/args instead of url and is launched over stdio. The config follows FastMCP's MCP JSON schema, so a config you already use elsewhere works here unchanged.

Old and new protocol servers, side by side

MCP has moved from the initialize handshake to server/discover, and servers in the wild sit on both sides of that line. FastMCP negotiates the era per connection, so the adapter reaches either without you selecting one:

# handshake-era server over SSE
legacy = MCPAdapter("https://legacy.example.com/sse")

# modern-era server over streamable HTTP
modern = MCPAdapter("https://modern.example.com/mcp")

Separate adapters negotiate independently and can run concurrently, each on its own era. This is covered by integration tests that stand up one server of each era and call both.

The one rule worth knowing: a multi-server config exposes a single era, so its oldest backend sets the era for the whole fleet. Mixing a handshake-era server into a config pulls the modern backends back to the handshake era — they still work, but era-gated features go with it. Keep a legacy server in its own adapter when you want the others on the modern protocol:

async with (
    MCPAdapter({"mcpServers": {...modern servers...}}) as modern,
    MCPAdapter("https://legacy.example.com/sse") as legacy,
):
    tools = await modern.get_tools() + await legacy.get_tools()

Results

Each tool is async. An MCP tool that runs and reports failure comes back as a ToolMessage with status="error" carrying the server's own error text, so the agent can correct itself and retry. Transport failures and unconvertible content raise instead — a model cannot act on those.

Structured output rides along on the tool message artifact:

from langchain.mcp import MCPToolArtifact

artifact: MCPToolArtifact | None = tool_message.artifact  # None when there is no structured content
artifact["structured_content"]

Elicitation — servers that ask questions mid-call

Some MCP tools need input before they can finish. Opt in, and the request surfaces as a LangGraph interrupt(), so the human already reviewing the agent's work answers the server too.

adapter = MCPAdapter(target, elicitation="interrupt")

The capability is opt-in rather than default because declaring it is a promise made on the wire: an agent with no path to a human cannot keep it. Left unset, nothing is declared, and a server whose tool requires an answer declines the call rather than running without one.

The run stops with a typed payload, and resumes with one answer per request key:

from langgraph.types import Command

result = await agent.ainvoke({"messages": [...]}, config)

[pause] = result["__interrupt__"]
pause.value["type"]       # "mcp_elicitation"
pause.value["tool_name"]  # the tool that is waiting
pause.value["requests"]   # each question, in the order to ask them

answer = {"responses": {key: {"action": "accept", "content": {"guests": 4}}}}
result = await agent.ainvoke(Command(resume=answer), config)

Requests narrow on mode: a "form" request carries requested_schema for the answer to satisfy, a "url" request carries an address for the human to visit. Answers narrow on action"accept" (with content), "decline" (skip the question, let the call proceed), or "cancel" (abandon the tool call). Requires a checkpointer, as any interrupt does.

Sampling and roots are not answered through interrupts; leave those to your client's own handlers.

Types for handlers — MCPElicitationInterrupt, MCPElicitationRequest, MCPElicitationResponse, MCPElicitationResume, and the ELICITATION_INTERRUPT_TYPE discriminator — live in langchain.mcp.elicitation.

Further reading


This is an alpha: the interface may shift before 1.4.0 is final. Feedback on the API shape is exactly what we're after.

langchain==1.4.0a1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 22:21

Initial release

fix(langchain): name the content type MCP conversion could not handle
release(langchain): 1.4.0a1
test(langchain): skip MCP tests on a pydantic older than mcp supports
test(langchain): drive MCP tests through FastMCP's own utilities
fix(langchain/mcp): review edits (#39974)
Merge remote-tracking branch 'origin/master' into sydney-runkle/langchain/simplify-mcp-adapter
fix(langchain): import assert_never from typing_extensions
test(langchain): fix type errors in the MCP test suite
test(langchain): cover protocol eras across a multi-server fleet
test(langchain): cover both MCP protocol eras through one adapter
refactor(langchain): one elicitation request type per mode
refactor(langchain): keep the elicitation types out of langchain.mcp
fix(langchain): make the two FastMCP-private dependencies fail loudly
refactor(langchain): one elicitation response type per action
refactor(langchain): refuse MCP continuation rounds instead of polling
release(langchain): 1.3.18 (#39966)
refactor(langchain): tighten the elicitation answer types
refactor(langchain): move _declare_elicitation_capability to elicitation
docs(langchain): trim the langchain.mcp docstrings
fix(langchain): bound the MCP input-required retry loop
refactor(langchain): trim the MCPAdapterTarget docs
refactor(langchain): use ELICITATION_INTERRUPT_TYPE as the discriminator
refactor(langchain): drop MCPAdapter.aclose
fix(langchain): preserve content-block shape in PIIMiddleware redaction (#39894)
fix(core): shore up indexing in genai v1 streaming content (#39964)
fix(langchain): guard MCP elicitation calls against a dying session
feat(langchain): answer MCP elicitation with a LangGraph interrupt
feat(langchain): port MCP tool conversion from langchain-mcp-adapters
feat(langchain): drop elicitation from MCPAdapter
chore(langchain): require FastMCP 4.0.0b4 for the mcp extra
feat(langchain): simplify MCPAdapter construction
feat(langchain): langchain.mcp namespace, MCPAdapter
release(langchain): 1.3.17 (#39893)
fix(langchain): frame custom HITL rejection reasons (#39773)
chore(deps): bump minor and patch dependencies (#39869)
release(langchain): 1.3.16 (#39806)
feat(core): add standard model exception types (#39538)
feat(langchain): support custom token_counter in ContextEditingMiddleware (#39754)
fix(langchain): re-raise non-retryable exceptions in ModelRetryMiddleware (#38960)
chore(langchain): update docs on error handling for json schema (#39632)
fix(langchain): preserve final repeated schema ordering (#39284)
release(langchain): 1.3.15 (#39595)
feat(langchain): expose trace_policy on AgentMiddleware (#38910)
chore(langchain): fix type errors in tests (#39589)
chore: bump h2 from 4.3.0 to 4.4.1 in /libs/langchain_v1 (#39324)
fix(langchain): preserve history on SummarizationMiddleware summary failure (#39268)
fix(langchain): handle import error in LLMToolEmulator by model (#39290)
refactor(langchain): update doc strings (#39305)
feat(langchain): add state_schema param to wrap_tool_call (#39292)
fix(langchain): re-export PIIMatch from middleware package (#39291)
fix(langchain): restrict narrowed ToolStrategy in bound tools (#39259)
feat(langchain): filter internal middleware model calls from messages projection (#39252)
chore: bump aiohttp from 3.14.1 to 3.14.3 in /libs/langchain_v1 (#39242)
chore: bump cryptography from 48.0.1 to 50.0.0 in /libs/langchain_v1 (#39240)
test(langchain): regression test for shell tool + checkpointer msgpack error (#39267)
fix(langchain): handle malformed structured-output responses (#39245)
fix(langchain): prevent orphaned tool_calls in ToolCallLimitMiddleware end behavior (#39258)
fix(langchain): add aliases for bedrock mantle chat models (#39260)
feat(langchain): add LangSmith provider to init_chat_model (#39224)
fix(langchain): clear stale structured_response between checkpointed turns (#39248)
fix(langchain): stop HITL approval gates from silently failing open (#39247)
chore: bump the minor-and-patch group across 3 directories with 7 updates (#39187)
fix(langchain): propagate model middleware control flow (#39199)
fix(langchain): update Anthropic config test (#39172)
chore: bump pyasn1 from 0.6.3 to 0.6.4 in /libs/langchain_v1 (#39026)
chore: bump pillow from 12.2.0 to 12.3.0 in /libs/langchain_v1 (#38994)
feat(core): add reasoning_effort as a standard chat model parameter (#38887)
docs(langchain): clarify ToolRetryMiddleware exception handling (#38884)
release(langchain): 1.3.14 (#38883)
fix(langchain): only retry retryable exceptions in ToolRetryMiddleware (#38845)
feat(langchain): ToolErrorMiddleware (#38781)
release(langchain): 1.3.13 (#38787)
feat(langchain): add meta extra and support langchain-meta in init_chat_model (#38786)
feat(openai): support explicit prompt caching (#38762)
chore(deps): refresh lockfiles (#38746)
release(langchain): 1.3.12 (#38730)
fix(langchain): propagate interrupts through ToolRetryMiddleware (#38722)
fix(langchain): avoid shared process-group kill in shell middleware (#36359)
fix(langchain): sanitize anthropic cache markers on fallback retries (#37867)
style: fix some ruff preview rules in langchain_v1 and standard-tests (#38657)
chore(langchain): add types in agent middleware tests (#38188)
release(langchain): 1.3.11 (#38377)
fix(langchain,openai): only set strict=True on tools for OpenAI-compatible models in ProviderStrategy (#38370)
chore: bump pydantic-settings from 2.12.0 to 2.14.2 in /libs/langchain_v1 (#38279)
chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/langchain_v1 (#38280)
chore: bump langsmith from 0.8.9 to 0.8.18 in /libs/langchain_v1 (#38281)
docs(langchain): document summarization prompt contract (#38256)
release(langchain): 1.3.10 (#38255)
chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (#38176)
chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (#38179)
fix(langchain): switch summary format (#38171)
fix(langchain): detect provider strategy for dated gpt-5.2/gpt-5.4 snapshots (#38222)
chore(langchain): improve typing in tests (#38163)
chore: bump pyjwt from 2.12.0 to 2.13.0 in /libs/langchain_v1 (#38168)
release(openai): 1.3.2 (#38130)
hotfix(openai): switch version (#38123)
release(openai): 1.4.0 (#38120)
docs: refresh README installation and resources (#38119)
test(core,langchain): update tests for explicit deserialization allowlists (#38118)
release(core): 1.4.7 (#38111)
release(anthropic): 1.4.6 (#38105)
release(langchain): 1.3.9 (#38104)
fix(langchain,anthropic): confine file-search results and tighten anthropic allowed_prefixes (#38106)
release(langchain): 1.3.8 (#38096)
style(core,langchain,langchain-classic,partners): replace double backticks in docstrings (#38095)
release(core): 1.4.6 (#38061)
chore(langchain): add overloads to create_agent (#34309)
chore(infra): bump mypy to 2.1 and unify type-check config across the monorepo (#36470)
fix(langchain): support async middleware decorator typing (#34584)
fix(langchain): tighten structured output model fallbacks (#38042)
release(anthropic): 1.4.5 (#38036)
hotfix(core): bump lockfile(s) (#38032)
refactor(langchain): refactor test_create_agent_tool_validation (#34443)
release(langchain): 1.3.7 (#38024)
style(langchain): add ruff rules ARG (#34435)
feat(langchain): add ProviderToolSearchMiddleware (#37969)
chore(langchain): activate mypy warn_return_any (#34249)
test(langchain): mark legacy trigger view for 2.0 removal (#38002)
release(langchain): 1.3.6 (#38001)
fix(langchain): preserve summarization trigger compatibility (#38000)
release(langchain): 1.3.5 (#37998)
feat(langchain): port AND-capable trigger conditions to SummarizationMiddleware (#34576)
hotfix(openai): min core dep (#37990)
feat(openai): support apply_patch built-in tool (#37157)
chore: bump pyarrow from 21.0.0 to 23.0.1 in /libs/langchain_v1 (#37930)
chore: bump dependencies (#37892)
chore: bump aiohttp from 3.13.4 to 3.14.0 in /libs/langchain_v1 (#37888)
release(langchain): 1.3.4 (#37861)
fix(langchain): improve HITL rejection guidance (#37859)
release(langchain): 1.3.3 (#37843)
chore(langchain): bump langgraph to 1.2.4 (#37857)
chore(langchain): loosen langgraph dep range (#37855)
feat(langchain): project subagent runs onto typed run.subagents channel (#37739)
feat(langchain): add interrupt_mode and when predicate to HumanInTheLoopMiddleware (#37579)
chore(langchain): bump to 1.3.2, require langgraph>=1.2.2 (#37703)
fix(langchain): land final answer in last AIMessage for TodoListMiddleware (#37643)
feat(langchain): redact streamed PII in flight on PIIMiddleware (#37616)
chore(infra): bump langchain-tests floor to 1.1.9 (#37610)
release(standard-tests): 1.1.9 (#37609)
feat(langchain): register stream transformers on middleware (#37591)
chore: bump idna from 3.11 to 3.15 in /libs/langchain_v1 (#37534)
ci(infra): harden Dependabot version-bound preservation (#37510)
refactor(langchain): clean redundancy ifelse. (#37448)
hotfix: bump lockfiles (#37508)
chore(core,langchain,openai): refresh stale OpenAI model references (#37487)
fix(langchain): sort glob_search results by mtime (newest first) (#37462)
chore: bump langsmith from 0.7.31 to 0.8.0 in /libs/langchain_v1 (#37391)
release(langchain): 1.3.1 (#37454)
fix(langchain): alias Bedrock providers in summarization token check (#37453)
release(langchain): 1.3.0 (#37361)
chore(infra): merge v1.4 into master (#37350)
chore: bump urllib3 from 2.6.3 to 2.7.0 in /libs/langchain_v1 (#37328)
release(langchain): 1.2.18 (#37250)
revert: feat(langchain): ls_agent_type tag on create_agent calls (#37249)
chore(langchain-classic): deprecate hub, limit loads/dumps (#37234)
refactor(langchain-classic): retarget deprecations to create_agent, other chores (#37164)
chore(langchain,langchain-classic): uncomment optional deps (#37163)
release(fireworks): 1.2.1 (#37113)
release(langchain): 1.2.17 (#37110)
feat(langchain): add respond decision to HITL middleware (...

Read more

langchain==1.3.18

Choose a tag to compare

@github-actions github-actions released this 27 Aug 17:33
7d4b42b

Changes since langchain==1.3.17

release(langchain): 1.3.18 (#39966)
fix(langchain): preserve content-block shape in PIIMiddleware redaction (#39894)
fix(core): shore up indexing in genai v1 streaming content (#39964)

langchain-fireworks==1.6.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 21:56
885e858

Changes since langchain-fireworks==1.6.0

release(fireworks): 1.6.1 (#39975)
fix(fireworks): drop reasoning history blocks (#39973)
chore(model-profiles): refresh model profile data (#39844)

langchain-core==1.6.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 19:31
4fe9d30

Changes since langchain-core==1.6.0

revert: release(core): 1.6.2 (#39971)
release(core): 1.6.2 (#39967)
fix(core): shore up indexing in genai v1 streaming content (#39964)
fix(core): make StructuredTool JSON-serializable (#39631)
chore(deps): bump minor and patch dependencies (#39869)
release(core): 1.6.1 (#39832)
feat(core): propagate gateway information on error path (#39829)

langchain-anthropic==1.7.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 15:24
3b3b308

Changes since langchain-anthropic==1.6.1

release(anthropic): 1.7.0 (#39963)
feat(anthropic): support top-level param for skills via container; updates thinking display mode (#39962)
feat(anthropic): support 1.0 sdk (#39938)
fix(anthropic): auto-append advisor-tool-2026-03-01 beta header for advisor_20260301 tool (#39917)
feat(anthropic): surface gateway response metadata (#39809)

langchain==1.3.17

Choose a tag to compare

@github-actions github-actions released this 25 Aug 02:40
54383cd

Changes since langchain==1.3.16

release(langchain): 1.3.17 (#39893)
fix(langchain): frame custom HITL rejection reasons (#39773)
chore(deps): bump minor and patch dependencies (#39869)

langchain-perplexity==1.4.1

Choose a tag to compare

@github-actions github-actions released this 21 Aug 14:08
5feb55b

Changes since langchain-perplexity==1.4.0

release(perplexity): 1.4.1 (#39826)
fix(perplexity): include type="message" on Responses input items (#39774)
fix(perplexity): preserve caller extra_body (#39203)
chore: bump pillow from 12.2.0 to 12.3.0 in /libs/partners/perplexity (#38991)
chore(deps): refresh lockfiles (#38746)
fix(perplexity): use supported Responses API model (#38337)
chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/partners/perplexity (#38290)
chore: bump langsmith from 0.8.5 to 0.8.18 in /libs/partners/perplexity (#38289)
docs: refresh README installation and resources (#38119)
release(core): 1.4.7 (#38111)
fix(core,partners): rename package version trace metadata (#38110)
style(core,langchain,langchain-classic,partners): replace double backticks in docstrings (#38095)
release(core): 1.4.6 (#38061)
feat(core,partners): add package version tracking to tracing metadata (#35295)
chore(infra): bump mypy to 2.1 and unify type-check config across the monorepo (#36470)
feat(standard-tests): validate tool call chunks during streaming (#34707)
chore(partners): bump locks (#38052)