| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-11-03 | 5.9 kB | |
| v8.0.0 source code.tar.gz | 2026-11-03 | 699.1 kB | |
| v8.0.0 source code.zip | 2026-11-03 | 928.2 kB | |
| Totals: 3 Items | 1.6 MB | 1 | |
Highlights
This is a major release, but most code only needs the version bump. Migrating below covers the breaking changes, which mostly affect struct literals.
Reasoning and prompt caching.
- Thinking/reasoning works with Claude, OpenAI, Ollama and DeepSeek. Turn it on with
CallOptions::with_thinking, and the reasoning comes back inGenerateResult.thinkingand on messages (#380). - Claude prompt caching via
cache_control(#381). Every provider now reports cache reads and writes inTokenUsage.
Vector stores.
deleteandget_by_idson theVectorStoretrait, implemented for every store (#382, [#383], [#384], closes [#139]).Document.id: set your own ids, and re-adding the same id updates the document in place (#358 by @mvanhorn, [#378]).- New
mariadbstore on MariaDB 11.7+ with the nativeVECTORtype (#396). - pgvector can use pgvecto.rs through a configurable extension name (#390).
Agents. ReActAgent (the classic MRKL "Thought / Action / Observation" agent) for models without native tool calling. AgentExecutor gained a configurable parser error handler and can return intermediate steps (#385).
Chains.
TransformChain(#388).APIChain, which reads API docs and calls the endpoint. It has allowed URLs and methods, a timeout and a response size cap (#389).
Tools.
PerplexitySearch(#391),ExaSearch(#392), andFirecrawlSearch/FirecrawlScrape(#397 by @erikengervall).WebScrapperis now configurable: CSS selector, excluded tags, user agent, timeout and max chars (#395, closes [#3]).
Document loaders. AssemblyAILoader for audio transcripts (#393). NotionDirectoryLoader for Notion exports (#394).
Utilities.
count_tokens,model_context_size,calculate_max_tokensandcombine_vectors(#387).RegexDictParserandCombiningParseroutput parsers (#386).
Fixes.
- Conversational streams stop at the first error instead of saving a half-finished turn to memory (#401 by @jihtsan).
ConversationalRetrieverChainkeeps the question-condensing tokens when the answer comes fromCachedLLM(#400 by @jihtsan).
Migrating from 7.x
Struct literals. Several public structs gained fields, so code that builds them with a struct literal needs ..Default::default() or the constructors:
TokenUsage:cache_read_tokens,cache_creation_tokensCallOptions:thinking,prompt_cachingMessage:thinking,cache_controlGenerateResult:thinking-
LogTools:thinking:::rust let usage = TokenUsage { prompt_tokens: 10, completion_tokens: 5, total_tokens: 15, ..Default::default() }; // or let usage = TokenUsage::new(10, 5);
Document is #[non_exhaustive]. It also gained the id field. Build it with Document::new(text) plus the with_* methods, e.g. .with_metadata(...), .with_score(...), .with_id(...). The non_exhaustive mark means future fields won't need another major release.
WebScrapper.
- It has private fields now, so build it with
WebScrapper::new()orWebScrapper::default()and the builder methods. - It is no longer
UnwindSafe/RefUnwindSafe, because it holds a reusable HTTP client. - Behaviour changes:
- non-2xx responses are errors
- only
http/httpsURLs are accepted <style>/<noscript>text is dropped- requests time out after 30 s by default
VectorStore::Options must be Sync. That's needed for the new default delete/get_by_ids methods. All the built-in option types already are; only custom stores with non-Sync options need a change.
What's Changed
- feat: support custom document IDs in OpenSearch, pgvector, and Qdrant by @mvanhorn in [#358]
- feat(vectorstore): caller document ids in the remaining network stores by @Abraxas-365 in [#378]
- fix(deps): update rust crate gix to 0.90 by @renovate[bot] in [#277]
- chore(deps): update actions/checkout action to v7 by @renovate[bot] in [#379]
- feat: reasoning/thinking support (Claude, OpenAI, Ollama, DeepSeek) by @Abraxas-365 in [#380]
- feat: prompt caching (Claude cache_control + cache usage) by @Abraxas-365 in [#381]
- feat(vectorstore): delete and get_by_ids (pgvector, qdrant, redis, chroma) by @Abraxas-365 in [#382]
- feat(vectorstore): delete and get_by_ids for mongodb, opensearch, pinecone, weaviate, milvus by @Abraxas-365 in [#383]
- feat(vectorstore): delete and get_by_ids for sqlite-vec, sqlite-vss, surrealdb by @Abraxas-365 in [#384]
- feat(agent): ReAct (MRKL) agent, parser error handler and intermediate steps by @Abraxas-365 in [#385]
- feat(output_parsers): RegexDictParser and CombiningParser by @Abraxas-365 in [#386]
- feat: token counting, context sizes and combine_vectors by @Abraxas-365 in [#387]
- feat(chain): TransformChain by @Abraxas-365 in [#388]
- feat(chain): APIChain by @Abraxas-365 in [#389]
- feat(pgvector): configurable extension name, pgvecto.rs support by @Abraxas-365 in [#390]
- feat(tools): PerplexitySearch tool on the Perplexity Search API by @Abraxas-365 in [#391]
- feat(tools): Exa web search tool by @Abraxas-365 in [#392]
- feat(document_loaders): AssemblyAI audio transcript loader by @Abraxas-365 in [#393]
- feat(document_loaders): Notion export directory loader by @Abraxas-365 in [#394]
- feat(tools): configurable WebScrapper (closes [#3]) by @Abraxas-365 in [#395]
- feat(vectorstore): MariaDB vector store by @Abraxas-365 in [#396]
- feat(tools): Firecrawl web search and scrape tools by @erikengervall in [#397]
- Retain RAG condensation usage on answer cache hits by @jihtsan in [#400]
- Stop failed conversational streams before saving memory by @jihtsan in [#401]
New Contributors
- @mvanhorn made their first contribution in [#358]
- @erikengervall made their first contribution in [#397]
- @jihtsan made their first contribution in [#400]
Full Changelog: https://github.com/Abraxas-365/langchain-rust/compare/v7.0.0...v8.0.0