| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| 1.20.0 and 1.20.0-beta30 source code.tar.gz | 2026-09-04 | 14.0 MB | |
| 1.20.0 and 1.20.0-beta30 source code.zip | 2026-09-04 | 17.2 MB | |
| README.md | 2026-09-04 | 16.2 kB | |
| Totals: 3 Items | 31.3 MB | 0 | |
Notable Changes
Non-blocking / reactive support by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/5527
An AI Service method used to hold its thread for the whole interaction - the model call, tool execution, memory I/O and guardrails. It can now return CompletableFuture<T>/CompletionStage<T> for a single response, or Flow.Publisher<AiServiceStreamingEvent>/Flow.Publisher<String> for streaming, and the interaction runs without blocking a thread. You choose the mode by the method's return type; nothing else about the interface changes.
Non-blocking goes all the way down, because a blocking gap at any layer re-blocks the whole call: tool calling (sync and CompletableFuture tools, sequential or concurrent), chat memory, guardrails, and the full retrieval graph including EmbeddingModel, EmbeddingStore, ScoringModel and WebSearchEngine.
The work is additive and marked @Experimental: the synchronous and TokenStream APIs are untouched. A few defaults deliberately differ on the async path - multiple tool calls run concurrently, a tool execution error fails the invocation rather than being sent to the LLM, and a tool argument-parse error is sent to the LLM rather than failing. See Non-blocking and Reactive.
Jackson 3 opt-in support by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6184
Add langchain4j-jackson3 to your classpath and LangChain4j's JSON runs on Jackson 3. There is nothing to configure and no API to call, and removing the dependency puts everything back on Jackson 2. Nothing changes for anyone who does not opt in.
With the opt-in in place, Jackson 2 can be excluded outright from most of the dependency graph; the modules that still need it are listed in the documentation. The one deliberate behaviour change is that a JSON failure surfaces as JsonReadException or JsonWriteException (both LangChain4jException) instead of a RuntimeException wrapping Jackson's own - catching RuntimeException works either way. See Using Jackson 3.
Other Changes
- fix: ignore stale and duplicate tool names when restoring tools found earlier by @farzad-sedaghatbin in https://github.com/langchain4j/langchain4j/pull/6080
- fix: consistent
addAll/removeAllinput handling across all embedding stores by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6069 - Fix Milvus vector lookup for IDs containing special characters by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6088
- Raise MCP JSON-RPC errors from list operations instead of NullPointerException by @martin-zatopek-cloverdx in https://github.com/langchain4j/langchain4j/pull/6072
- Avoid duplicate declaration of jsoup version by @jmartisk in https://github.com/langchain4j/langchain4j/pull/6092
- fix: Honor custom filter mapper in Azure Cosmos DB NoSQL token credential constructor by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5922
- fix: Add missing WHERE clause to filtered vector search in Azure Cosmos DB NoSQL store by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5921
- fix: Use the name of the provided Azure AI Search index when index creation is disabled by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5901
- fix: Escape single quotes in Azure AI Search metadata filter expressions by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5900
- Support customHeaders in OpenAI Responses API models by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6101
- Fix invalid Chroma relevance scores for collections that do not use cosine distance by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6077
- fix: split text without detectable sentences instead of failing or dropping it by @r0h1tb in https://github.com/langchain4j/langchain4j/pull/6091
- Remove obsolete langchain4j-github-models module by @jdubois in https://github.com/langchain4j/langchain4j/pull/5692
- Fix Chroma V2 lookups to propagate real failures instead of treating them as absent by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6084
- fix:Throw
ContentFilteredExceptionwhen Chat Completions returns a refusal by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6114 - fix: report malformed JSON objects as OutputParsingException by @Ayomipo18 in https://github.com/langchain4j/langchain4j/pull/6110
- fix: numeric metadata filters no longer throw for NaN and Infinity by @Tundesjaiyesmi in https://github.com/langchain4j/langchain4j/pull/6108
- Azure AI Search: Expose bring-your-own index fields as metadata by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6022
- fix: Throw
ContentFilteredExceptionwhen the Responses API returns a ref… by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6121 - fix: Map an
AiMessagewithout text and without tool calls instead of failing by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6123 - fix: ignore SSE events that arrive after an MCP operation was cancelled by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6125
- fix: Override toBuilder, equals, hashCode and toString in WatsonxChatResponseMetadata by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6140
- fix: preserve Content.metadata when ReRankingContentAggregator re-ranks by @zjh1252 in https://github.com/langchain4j/langchain4j/pull/6129
- fix: make MIME type detection from file extensions locale-independent by @dlwldn30 in https://github.com/langchain4j/langchain4j/pull/6147
- fix(mcp): retain description on union-typed tool parameter schemas by @lvcccc-sys in https://github.com/langchain4j/langchain4j/pull/6133
- fix: throw typed exception for null-valued tool search query by @farzad-sedaghatbin in https://github.com/langchain4j/langchain4j/pull/6154
- fix(experimental-sql): escape CSV special characters in SqlDatabaseContentRetriever results by @longingheart in https://github.com/langchain4j/langchain4j/pull/6156
- fix: discover @Tool methods on proxied tool objects by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6169
- MCP: stop exposing and using Jackson types by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6117
- docs: clarify Arize observability options by @arizedatngo in https://github.com/langchain4j/langchain4j/pull/6171
- fix(mcp): use UTF-8 for stdio and Docker transport streams by @dlwldn30 in https://github.com/langchain4j/langchain4j/pull/6178
- fix(mcp): don't treat a schema-typed additionalProperties as disallowed by @lvcccc-sys in https://github.com/langchain4j/langchain4j/pull/6138
- Make subscribeToResources wait for the server's acknowledgement by @jmartisk in https://github.com/langchain4j/langchain4j/pull/6099
- docs: fix RequestCategory typed key example by @Userchenentao5 in https://github.com/langchain4j/langchain4j/pull/6168
- feat(jina): support the INPUT_TYPE per-call embedding parameter by @farzad-sedaghatbin in https://github.com/langchain4j/langchain4j/pull/6165
- fix: Apply the configured maxRetries when embedding a batch by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6174
- fix: Map a content-filtered incomplete Responses API response to CONTENT_FILTER by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6182
- fix(voyage-ai): return one score per segment and deprecate topK by @windzaku in https://github.com/langchain4j/langchain4j/pull/6180
- fix: Terminate P2P planner when the agentic scope reaches a stable state by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5894
- fix: Pass a filtered snapshot of the agentic scope state to untyped MCP agents by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5888
- Propagate the original exception thrown by internal agent methods by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/5982
- fix: Stop P2P planner from exceeding maxAgentsInvocations by @thswlsqls in https://github.com/langchain4j/langchain4j/pull/5898
- fix(agentic): finalize failed executions after async sibling completion by @aravelo7 in https://github.com/langchain4j/langchain4j/pull/6116
- feat(bedrock): support request metadata in Converse APIs by @Ekkkkkkkko in https://github.com/langchain4j/langchain4j/pull/6189
- fix: fail fast when a LangChain4j type is used as an AI Service return type by @xiaoyixin3 in https://github.com/langchain4j/langchain4j/pull/6187
- fix(mcp): fail fast when the retried request gets 404 again after session reinitialization by @kevinyang03 in https://github.com/langchain4j/langchain4j/pull/6192
- docs: document OrcaRouter as an OpenAI-compatible provider by @nissrin2020ali-ux in https://github.com/langchain4j/langchain4j/pull/6197
- fix: Reject unsupported message and content types in the Responses API converter by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6196
- feat(google-ai-gemini): support context cache creation and management by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/5725
- fix: Detect the model provider in the Responses chat models by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6201
- Allow to configure ClassLoader on the ObjectMapper used for AgenticScope serialization by @mariofusco in https://github.com/langchain4j/langchain4j/pull/6207
- fix(mcp): cancel pending operations and notify server on read/prompt/subscribe timeouts by @ikaitist in https://github.com/langchain4j/langchain4j/pull/6175
- fix(mcp): make log level parsing locale-independent by @GuanJHCode in https://github.com/langchain4j/langchain4j/pull/6235
- feat: support resuming human-in-the-loop A2A tasks by @arnabnandy7 in https://github.com/langchain4j/langchain4j/pull/6038
- fix(mcp): clean up timed-out multi-round-trip retries by @wish857 in https://github.com/langchain4j/langchain4j/pull/6239
- feat(agentic): preserve agent argument descriptions by @CryoThrust in https://github.com/langchain4j/langchain4j/pull/6241
- fix(mcp): propagate WebSocket send failures by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6259
- chore(deps-dev): bump org.mariadb.jdbc:mariadb-java-client from 3.5.5 to 3.5.9 in /langchain4j-hibernate by @dependabot[bot] in https://github.com/langchain4j/langchain4j/pull/6213
- chore(deps): bump org.mariadb.jdbc:mariadb-java-client from 3.5.8 to 3.5.9 in /langchain4j-mariadb by @dependabot[bot] in https://github.com/langchain4j/langchain4j/pull/6214
- chore(deps): bump postcss-selector-parser in /docs by @dependabot[bot] in https://github.com/langchain4j/langchain4j/pull/6256
- fix(mcp): restore interrupt flag in readResource and getPrompt by @jmartisk in https://github.com/langchain4j/langchain4j/pull/6242
- Fix: Prevent retired stdio processes from cancelling active operations by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6261
- fix: Do not build a base
TokenUsagein the streaming AI Service by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6203 - Enhance langchain4j-watsonx with new Gateway models, streaming cancellation, and inline chat moderation by @andreadimaio in https://github.com/langchain4j/langchain4j/pull/6209
- fix(mcp): make x-mcp-header duplicate detection locale-independent by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6263
- fix(mcp): send cancellation notifications for timed-out paginated lists by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6267
- chore(google-genai): update google-genai dependency to 1.69.0 by @glaforge in https://github.com/langchain4j/langchain4j/pull/6269
- Document the Reactor bindings as available now that langchain4j-spring ships them by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6274
- Fix MCP agent argument type derivation by @Snow7-bot in https://github.com/langchain4j/langchain4j/pull/6240
- fix: guarantee AgenticScope cleanup on Planner initialization failure by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6286
- chore(deps-dev): bump org.testng:testng from 7.3.0 to 7.5.1 in /langchain4j-parent by @dependabot[bot] in https://github.com/langchain4j/langchain4j/pull/6273
- chore(deps): bump fast-uri from 3.1.5 to 3.1.7 in /docs by @dependabot[bot] in https://github.com/langchain4j/langchain4j/pull/6284
- chore(deps): bump browserslist from 4.28.2 to 4.28.8 in /docs by @dependabot[bot] in https://github.com/langchain4j/langchain4j/pull/6264
- fix(mcp): preserve JSON-RPC error data in McpException by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6278
- fix(mcp): encode blob resources as strict Base64 without line breaks by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6280
- fix(agentic): include inherited fields in supervisor argument descriptions by @Lubaoshuai in https://github.com/langchain4j/langchain4j/pull/6243
- feat(document-parser-docling): DocumentRequest templates, async parsing, and custom request executor by @edeandrea in https://github.com/langchain4j/langchain4j/pull/6255
- Make SupervisorAgentIT's Invoice constructible from the planner's arguments by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6300
- Fix three Jackson 3 defects the nightly integration run found by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6301
- Fix NullPointerException when completing a pending response with a null value by @subhashpolisetti in https://github.com/langchain4j/langchain4j/pull/6299
- feat(a2a): add @A2ATenantId for multi-tenant agent routing by @ehsavoie in https://github.com/langchain4j/langchain4j/pull/6303
New Contributors
- @martin-zatopek-cloverdx made their first contribution in https://github.com/langchain4j/langchain4j/pull/6072
- @r0h1tb made their first contribution in https://github.com/langchain4j/langchain4j/pull/6091
- @zjh1252 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6129
- @dlwldn30 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6147
- @lvcccc-sys made their first contribution in https://github.com/langchain4j/langchain4j/pull/6133
- @longingheart made their first contribution in https://github.com/langchain4j/langchain4j/pull/6156
- @arizedatngo made their first contribution in https://github.com/langchain4j/langchain4j/pull/6171
- @Userchenentao5 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6168
- @windzaku made their first contribution in https://github.com/langchain4j/langchain4j/pull/6180
- @aravelo7 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6116
- @Ekkkkkkkko made their first contribution in https://github.com/langchain4j/langchain4j/pull/6189
- @xiaoyixin3 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6187
- @kevinyang03 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6192
- @nissrin2020ali-ux made their first contribution in https://github.com/langchain4j/langchain4j/pull/6197
- @ikaitist made their first contribution in https://github.com/langchain4j/langchain4j/pull/6175
- @GuanJHCode made their first contribution in https://github.com/langchain4j/langchain4j/pull/6235
- @arnabnandy7 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6038
- @wish857 made their first contribution in https://github.com/langchain4j/langchain4j/pull/6239
- @CryoThrust made their first contribution in https://github.com/langchain4j/langchain4j/pull/6241
- @Snow7-bot made their first contribution in https://github.com/langchain4j/langchain4j/pull/6240
- @Lubaoshuai made their first contribution in https://github.com/langchain4j/langchain4j/pull/6243
Full Changelog: https://github.com/langchain4j/langchain4j/compare/1.19.0...1.20.0