CONSTRUX
Bid-On

Two honest states for a search, and no third

With an embedding model configured, a customer’s library is searched by meaning. Without one, it is searched on distinctive words and says so. What it never does is call the second one the first.

Every answer Bid-On drafts is drawn from one customer’s own evidence, so finding the right passage is the whole quality of the output. There are two honest ways to do it and the platform does both, labelled.

Where an embedding provider is configured, the question and the passages are embedded and compared by meaning. Where one is not, the search ranks on the share of the question’s distinctive words a passage actually uses. Every result carries which method ran and, on the semantic path, the model whose space the comparison was made in. The note says in words that a term search will miss a passage answering the question in other words.

There is no local stand-in for an embedding, and this is the one capability in the platform with none. Everywhere else a deterministic stand-in exists so a feature works without a provider, and each is marked as the stand-in on its output. A stand-in narrative is visibly a stand-in — somebody reads it and can tell. A stand-in vector is not readable by anybody: hashed tokens in a fixed-width array rank, sort and score exactly like real ones, and the results come back ordered to three decimal places meaning nothing. It is the one fallback that could not be labelled honestly enough to be safe, so a deployment without a provider is told which setting turns semantic search on.

The floor matters more than the method. Nearest-neighbour search always returns neighbours; there is no such thing as an empty result unless something refuses to produce one. And the nearest of several irrelevant passages reads exactly like a relevant one once a model has written a confident paragraph from it. So both paths have a floor below which nothing comes back, and returning nothing is what turns “here are the four closest things in the library” into “there is nothing here about that” — which is a true and useful answer that an unfiltered index can never give.

Nothing is ever compared across two models’ spaces. A cosine between vectors from different models is not a smaller number, it is a number with no meaning that sorts beside the real ones — so a passage embedded by another vendor is skipped and counted, never scored, and the count is on every answer. A library half embedded by one model and half by another is a real state, and a search that silently ignored half of it would look like a library half the size.

Re-reading a document drops its vectors with its passages. An item claiming to be embedded while its passages are not would fall out of every semantic search with nothing to explain why.

And the spend is separated from the read. Filtering on the customer, judging expiry against the deadline and refusing below a floor costs nothing, so a screen may call it freely. Embedding a question is a model call, so it is a command with a quote in front of it — two buttons on the screen rather than one that silently picks the paid path because a library happens to be embedded.

See the record being made rather than described.

Launch the demo environment

← All posts