SynapCores

SynapCores v2.4.8-ce: EMBED handles long text instead of rejecting it

By , Founder & CTO, SynapCores · Published · Updated

SynapCores Community Edition v2.4.8-ce

Community Edition · free · seamless upgrade from v2.4.x

v2.4.8-ce fixes a sharp edge in embedding: EMBED() and RAG ingestion used to fail outright on any text longer than the embedding model's input window. Now the input is truncated to the window and embedded by default — the behavior people expect from the model — with a single knob to switch back to strict rejection. One targeted fix, drop-in, no data migration.

Embed long documents without a 400

The default embedding model (all-MiniLM) has a 512-token input window. Until now, calling EMBED() on anything longer returned an error — prompt exceeds model input budget — which surfaced the moment a RAG pipeline tried to embed a normal-length document or a long field.

As of v2.4.8-ce, over-length input is truncated to the model's window and embedded by default, which is exactly what the reference implementation for this model does. A long document now produces a vector instead of an error, so ingestion keeps moving. When input is truncated, the server logs it, so the behavior is never silent — and for best retrieval quality we still recommend chunking long documents to roughly 500 tokens rather than relying on truncation.

Keep strict rejection when you need it

If your pipeline must guarantee that nothing is ever silently shortened, keep the old behavior:

  • per instance: AIDB_EMBED_OVERSIZE=reject
  • or in gateway.toml: [query.ai_service] embed_truncate = false

In that mode an over-length EMBED() returns the same explicit error as before. Truncate is the default because a rejected embedding is the surprising outcome; reject stays one setting away.

A clearer readiness signal

/health/ai-ready now reports the embedding model's real input budget (512 for all-MiniLM) alongside its context figure, so what you see on the readiness probe matches what the engine actually accepts.

Not new behavior — a better default

To be clear for anyone tracking versions: the 512-token limit itself is long-standing, not introduced in a recent release. What changes in v2.4.8-ce is the default response to over-length input — embed-with-truncation instead of reject — plus the control to choose.

Proven before shipping

  • The state-asserting feature validator is fully green on the release build, including vector search and the bundled UI.
  • EMBED() on a document several times longer than the 512-token window returns a correct 384-dimension vector; the same long text auto-embeds and stores from an INSERT; and with reject mode set, the strict error is preserved.
  • Clean boot plus a model run on a non-AVX-512 CPU, embeddings serving at the default dimension.
  • Drop-in upgrade: no on-disk format change, existing vectors read as-is.

Get it

docker pull synapcores/community:v2.4.8-ce

Or upgrade in place — existing data is read as-is.

LM