When a chunk failed to embed, Agno used to hide it. An embedder could return an empty vector, a file could be marked complete when half its chunks never embedded, and a status check could report success on content that was actually broken. We reworked this so a failed embedding is visible and recoverable.
What we added:
- A
partialcontent status. Files where some chunks embedded and others did not are now markedpartial. They stay searchable but are flagged as incomplete. TheContentStatusAPI enum gainspartial, so/openapi.jsonnow lists["processing", "completed", "partial", "failed"]. No schema migration is needed, since the status column is alreadyvarchar. - Optional embedding retries during ingestion, off by default. Set
Knowledge(max_embedding_retries=3, embedding_retry_backoff=1.0)to turn them on. Auth failures fail on the first attempt, and each retry re-embeds the whole document. - Actionable failure messages. A failure now names the chunk count, the embedder, the reason, and the recovery step, in place of the old "Could not insert embedding."
What changed, and what to check when you upgrade:
- Embedders now raise
EmbeddingErrorinstead of returning an empty vector. A vector DB'ssearch()now raises where it used to return[].Knowledge.search()is unaffected. - AWS Bedrock embedding failures now raise
EmbeddingError, notModelProviderError. Anyexcept ModelProviderErrorhandler around Bedrock embedding will stop catching them, so update those handlers to catchEmbeddingError. GET /knowledge/content/{id}/statusnow returns 404 for missing or non-owned content, instead of 200 withstatus: "failed".skip_if_exists=Trueno longer skipsfailedorpartialcontent. Incomplete content is re-embedded rather than left marked complete.
Learn more about embedders in the documentation.




