Search Ignores "Under 400 Dollars": The Agent Wrote the Filter Itself
"I need to furnish a reading nook under 400 dollars": plain vector search returns 3 of 5 results over budget. Given the stage catalog as tools, the agent ran feature_search, then reached for attribute_filter and wrote price lt 400 itself. One result, $180, for $0.00061.

An embedding has no representation of a number. Ask a 118 image index to furnish a reading nook under 400 dollars and plain vector search matches reading nook beautifully: three of the top five cost more than 400 dollars, at 922, 451 and 663.
The second half of the diagram gives an agent the same sentence and the retriever's stage catalog as callable tools. Every step shown is read from the execution's own reasoning trace, tool call by tool call, with the real durations.
Iteration one, the agent called feature_search with a rewritten query, furniture for reading nook, dropping the price clause it knew the embedding could not use. Five results in 18.7 seconds.
Iteration two, it called a different stage, attribute_filter, and wrote the argument itself: price lt 400. Seven milliseconds. One result, a leather armchair at 180 dollars.
Nobody configured that filter. The agent read the sentence, decided the budget belonged to a stage that understands numbers, and reached for it. Three iterations, confidence 0.8, at a cost of sixty one hundredths of a cent on gemini-2.5-flash-lite.
The part worth sitting with is the second tool call. A language model parsing under 400 dollars is table stakes. A pipeline that exposes its stages as tools lets the model compose retrieval, filter and rerank steps on its own, per query, instead of running one fixed chain for every question.
What is real here: the photos are Pexels images with every photographer credited, the embeddings and both executions ran against the live API, and the trajectory is the recorded one. Prices and categories are demo catalog data generated for this corpus.
Run this on your own data
Mixpeek turns video, images, audio, and documents in your object storage into searchable, timestamped results through one API.
Search your own data

