text-embedding-3-large at 1536 dims) and indexed in Cloudflare
Vectorize. You query with plain text; we embed it and run k-NN with
metadata-filtered tenant isolation.
No vector store to provision, no embedding pipeline to maintain. Search
becomes available within a few seconds of each thread message persisting.
GET /v1/threads/:id/search — Within one thread
GET /v1/search — Across every thread you own
Query
Response
Score
Cosine similarity, range-1.0 to 1.0. Roughly:
No threshold filtering applied —
topK returns the closest N regardless
of score so you can render score badges in your UI.
Snippets
snippet is a ~240-char excerpt centered on the first matching token of
your query. For short messages, the full content is returned.
What gets embedded
- Every user turn (the
contentyou sent). - Every FINAL assistant turn (the model’s text response).
- Tool-loop intermediate turns (the
tool_use+tool_resultblocks inside a multi-turn dispatch) are NOT embedded — they’re internal state and would pollute search with non-prose noise. - Image/file/tool blocks within content are stripped at embed time; only text blocks contribute.
Tenant isolation
Every embedding is tagged with:user_id(your qlaud account)thread_idseq,role,created_atend_user_idif the thread was tagged with one at create time
user_id always;
optionally narrows by thread_id and/or end_user_id. Other qlaud
customers’ data is never visible.
Errors
Limits (v1)
- Embedding takes a few seconds after a turn persists; very recent turns may not be searchable yet.
- Newly-tagged
end_user_idfilter requires the Vectorize metadata index — already created at the qlaud account level, no setup on your end. - Cross-account search is impossible by design.