# We now surface embedding failures during knowledge ingestion

> A chunk that fails to embed is now visible and recoverable: files that only partly embedded are marked partial, retries are available, and embedders raise instead of returning an empty vector. Check your error handling when you upgrade.

- Published: 2026-09-01
- Author: Sannya Singal
- Categories: Changelog
- Canonical: https://www.agno.com/articles/we-now-surface-embedding-failures-during-knowledge-ingestion
- Markdown: https://www.agno.com/articles/we-now-surface-embedding-failures-during-knowledge-ingestion.md

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 `partial` content status. Files where some chunks embedded and others did not are now marked `partial`. They stay searchable but are flagged as incomplete. The `ContentStatus` API enum gains `partial`, so `/openapi.json` now lists `["processing", "completed", "partial", "failed"]`. No schema migration is needed, since the status column is already `varchar`.
- 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 `EmbeddingError` instead of returning an empty vector. A vector DB's `search()` now raises where it used to return `[]`. `Knowledge.search()` is unaffected.
- AWS Bedrock embedding failures now raise `EmbeddingError`, not `ModelProviderError`. Any `except ModelProviderError` handler around Bedrock embedding will stop catching them, so update those handlers to catch `EmbeddingError`.
- `GET /knowledge/content/{id}/status` now returns 404 for missing or non-owned content, instead of 200 with `status: "failed"`.
- `skip_if_exists=True` no longer skips `failed` or `partial` content. Incomplete content is re-embedded rather than left marked complete.

Learn more about [embedders](https://docs.agno.com/knowledge/concepts/embedder/overview) in the documentation.
