Skip to main content
A retriever is a pipeline of stages: searches, filters, fusion, reranking. The right pipeline depends on the query. A product SKU lookup wants a fast keyword search. A vague question wants several embedding searches fused and reranked. A photo search wants the image model. One fixed pipeline is either slow for the easy queries or weak for the hard ones. An adaptive query pipeline closes that gap. You state what you care about, and Mixpeek decides how each query runs.
Part of this page describes a preview. Per-query pipeline selection (everything under Per-query pipeline selection) is in development and not yet available. Field names may change before release. The parts under What adapts today are live.

What adapts today

Every retriever already adapts in three ways, with no configuration:

The query optimizer

Before each run, Mixpeek rewrites your stage list: it pushes filters into the vector store, fuses compatible stages and runs independent work in parallel. Explain shows what it did.

Filtered search strategy

Each filtered vector search counts the documents that match the filter, then either scans exactly those documents or searches a wider part of the index, whichever suits that query.

Auto-Tune

With learned fusion, the weights that blend your searches adapt to each user from clicks, purchases and feedback.
These change how a pipeline runs. They do not change which pipeline runs. That is the next step.

Per-query pipeline selection

Preview. Not yet available.
You save two or three versions of a retriever that make different trade-offs, for example a fast keyword version, your current hybrid version and a thorough version with reranking. For each query, Mixpeek picks the version expected to best meet your objective, from how that kind of query performed on your own evaluation data.

How it works

1

You save candidate versions

Each candidate is an ordinary saved revision of your retriever, with its own stages and parameters. You can read, test and call each one directly. Your current version is always the default.
2

You pick a goal and an evaluation dataset

Set optimize_for (quality, balanced, speed or cost) and point the planner at a judged evaluation dataset for this retriever.
3

Mixpeek evaluates the candidates

Evaluation runs score every candidate on your judged queries, recording quality, latency and credits per query. They run when the dataset, a candidate or your current version changes, at most once a day.
4

It confirms a version per kind of query

Queries are grouped into shapes by cheap text statistics (length, rare terms, digits and so on). A shape switches away from your current version only when a candidate wins on one half of the judged queries for that shape and the win holds on the other half.
5

Each query runs the confirmed version

A query of that shape runs the confirmed version. Every response says which version ran and why, with forecasts for the alternatives.

What you control

Configure it

Start in shadow: the planner decides and logs what it would serve while your current version keeps serving. Switch to on when the logged decisions look right.

What it promises

Candidates are compared only by evaluation runs on your judged dataset. Live queries are never used to test versions against each other, and your users’ queries are never re-run.
A shape switches only when a candidate’s win is confirmed on judged queries it was not chosen on, and its worst-case queries are no worse than your current version’s beyond a set margin. A retriever with no judged dataset never switches. Editing your current version sends every shape back to it until the next evaluation run.
A version forecast to exceed your credit or time limit is never chosen. If none fits, the fastest version runs and the response says so.
A query is billed for the version that ran, as today, and never above your retriever’s credit limit. Evaluation runs are billed as evaluation runs are today.
Pins, a version named in the request, and adaptation: off always take precedence over what the planner learned.
Decisions and statistics are stored as documents in your own namespace. Nothing learned from your evaluations is used for anyone else. Marketplace and public retrievers cannot turn the planner on, so consumers’ queries never train a publisher’s routing.

What we have measured so far

These numbers come from our own simulator and test namespaces, not from production traffic.
We also tested routing each query individually with a trained model, and re-bucketing query shapes automatically. Held to the same safety rules, neither beat shapes from simple text statistics, so the preview uses those.

Query optimization and explain

See the plan the optimizer built for a query, with per-stage estimates.

Auto-Tune

Learned fusion weights per user, from interactions.

Evaluations

Build the judged dataset the planner confirms versions on.

Filters

How filters run inside the vector store.