Retriever Templates
21 pre-configured retriever templates for common search patterns like semantic, faceted, and RAG
Why do anything?
Building retrievers from scratch is time-consuming. Templates provide proven starting points.
Why now?
Common search patterns are well-understood. Encoding best practices in templates saves time.
Why this feature?
21 retriever templates covering semantic search, faceted search, RAG preparation, anomaly detection, and more.
How It Works
Retriever templates provide pre-configured stage pipelines for common search patterns.
1
Template Selection
Choose from 21 available templates
2
Parameter Binding
Bind template variables to your context
3
Stage Generation
Generate retriever stages from template
4
Deployment
Deploy configured retriever to namespace
Why This Approach
Templates encode best practices. Variable binding enables customization without rebuilding.
Where This Is Used
Integration
retriever = client.retrievers.from_template(template_id="semantic_search", params={...})Recent updates
Full changelog- Aug 22, 2026Declaring an image input on a retriever gives you visual similarity searchSearching a video library by picture used to mean wiring an embedding call yourself and matching the vectors by hand. A saved retriever whose input_schema declares a field of type image now serves visual-similarity search over indexed scenes directly: pass an image URL as that field and the retriever embeds it and ranks scenes against it, the same way a text query runs. Object-storage URIs and plain HTTP URLs both work, so an image already sitting in your bucket does not need to be re-uploaded or made public first. Nothing else about the retriever changes, which means an existing pipeline with filters, reranking and grouping keeps all of it and gains an image entry point.
- Aug 22, 2026GET /v1/retrievers/typeahead returns prefix suggestions for a search boxA search box that suggests as you type had to be assembled by the caller from separate queries. One namespace-scoped call now does it: pass q and get back a ranked, deduplicated list drawn from three sources run concurrently. Values of the metadata fields you name come from an index-backed facet with a per-value document count, so you can show how many documents sit behind each suggestion. Collection names come from a prefix match. Recent searches come from the caller's own executions, scoped per org and namespace, so they are permission-trimmed by construction and nobody sees another tenant's queries. Ranking puts recent searches first, then values by count, then collections. A source that fails is dropped and named in warnings rather than failing the whole request, so a slow facet degrades the suggestions instead of blanking the box. Two limits are worth knowing because neither announces itself: limit is per SOURCE, not per response, so a limit of 10 with all three sources answering returns up to 30 suggestions and a box sized against the parameter is sized wrong by three times; and at most 5 of the fields you pass are consulted, with a sixth contributing nothing and no warning saying which five ran.
- Aug 22, 2026A multi-stage retriever now has a total deadline, and degrades instead of timing outEvery stage was individually bounded at 25 seconds, but those ceilings compose: a pipeline with enough stages had no total bound until the gateway gave up at 600 seconds. A sweep across four namespaces found executions running 20 to 40 seconds, while the one namespace that had declared a per-stage cap held at about 5 seconds. The mechanism worked and you had to know to turn it on. Executions now carry a hard deadline, 60 seconds by default, which is above every completion observed in a 7-day window and an order of magnitude under the gateway. On breach the execution returns the results it has accumulated with a warning naming the knob, and skips the remaining stages, so a slow pipeline gives you partial results rather than a 504. Each stage's own ceiling and its degrade-retry are clamped so neither can outlive the deadline. Set execution_hard_timeout_ms to change it, or zero to disable.
- Aug 11, 2026A feature_uri that does not exist now says so, instead of telling you your vectors are missingAsking a collection for a feature it does not expose used to land in the vectors-absent branch, so the answer came back as "this collection has no vectors, re-upsert your data". On a collection holding 359,202 vectors that answer was not merely unhelpful, it prescribed a full re-ingestion and named the real cause as ruled out. A confident wrong remedy is worse than silence: silence costs time, this cost a re-extraction and pointed away from the typo. The response now distinguishes the two, naming which features the collection actually exposes, and a collection with genuinely no declared indexes still reaches the original message.