Changelog
Breaking Changes
- Embedding failures are surfaced, not masked. Ingestion now reports embedding failures instead of returning success. Content that previously showed
completedmay now showfailedorpartial— those ingests were always incomplete, they were only reported as successful. TheContentStatusenum in the API (/openapi.json) gainspartial, changing from["processing","completed","failed"]to["processing","completed","partial","failed"]. No schema migration is required (the status column is alreadyvarchar). - Embedders raise
EmbeddingErrorinstead of returning an empty vector on failure. Calling a vector DB'ssearch()directly now raises where it previously returned[];Knowledge.search()is unaffected and still returns no results. - AWS Bedrock embedding failures raise
EmbeddingError, notModelProviderError. Existingexcept ModelProviderErrorhandlers around Bedrock embedding will stop catching — switch toexcept EmbeddingError. GET /knowledge/content/{id}/statusreturns 404 for missing/non-owned content instead of 200 withstatus: "failed".skip_if_exists=Trueno longer skips content recorded asfailedorpartial, so incomplete content is re-embedded rather than silently marked complete.
New Features
partialcontent status: newContentStatus.PARTIALfor files where some chunks embedded and others did not — searchable but incomplete, so neithercompletednorfailed. (#9814)- Optional embedding retry during ingestion (off by default): enable with
Knowledge(max_embedding_retries=3, embedding_retry_backoff=1.0). Authentication failures ignore both settings and fail on the first attempt (the same credential is rejected every time). Note: each retry re-embeds the whole document. - GandrTools: new text-to-speech toolkit for the Gandr TTS API.
- llmman model provider: new model provider.
Improvements
- Actionable embedding failure messages: failure messages now name the chunk count, embedder, reason and recovery step, instead of "Could not insert embedding".
- Re-ingest no longer destroys searchable chunks: an
embed_before_replaceguard embeds documents before deleting existing ones, so a failing re-ingest aborts before anything is removed (previously a failed re-embed could leave a document with zero chunks). MCPToolsaccepts staticheaders=: connect-time auth headers can be passed directly on theurl=path for Streamable HTTP and SSE, without constructingStreamableHTTPClientParams.
What's Changed
- feat: add headers= argument to MCPTools for connect-time auth by @LHMQ878 in #9444
- chore: re-enable litellm and crawl4ai extras by @RayST3 with @Copilot in #9868
- feat: Add GandrTools text to speech toolkit for the Gandr TTS API by @AALG123 in #9852
- [feat] Add llmman model provider by @ericcurtin in #9863
- fix: repair broken cookbook models, imports, and image URL by @Himanshu040604 in #9889
- fix: surface embedding failures during knowledge ingestion by @sannya-singal in #9814
- chore: Release v3.0.5 by @kausmeows in #9888
New Contributors
- @AALG123 made their first contribution in #9852
- @ericcurtin made their first contribution in #9863
Full Changelog: v3.0.4...v3.0.5