docs: which models an installation can run is its own answer - #667
Merged
Conversation
JArmandoAnaya
added a commit
that referenced
this pull request
Aug 21, 2026
* docs(inference): which families answer a capability is the installation's answer * docs: the not-runnable refusal names both things nothing here runs * docs(architecture): a curated entry is the driver's declaration, and carries no size * docs(architecture): what a provider declares, and what it must prove
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four pages under
docs/still described the set of model families VisionSet can run as aproperty of the release. It has been a property of the installation since drivers began
arriving through the
visionset.providersentry-point group, and this brings the documentationto that. It also adds the page a driver author needs, which is the last piece of the provider
contract and plugin architecture epic (#498) — the four slices before it shipped the two ports
and discovery, the three in-tree drivers migrated onto the contract, the conformance suite, and
the server-supplied catalog.
What was false, and what is true instead
docs/inference.mdcarried a capability table whose third column named the families answeringeach capability — "the SAM 2 and SAM 3 families", "the grounding-dino family" — as though the
release decided them. That column is gone, and a paragraph beneath the table says the capability
vocabulary is closed while the set of models answering to it is not, naming what this
distribution's own drivers serve as an illustration rather than as the definition. Two paragraphs
further down, an empty
capabilitieswas explained partly by a config having "declared one thisbuild has no adapter for"; it now says no installed driver serves it. That sentence wrapped
across a line break, which is why a phrase grep never found it.
INFERENCE_CONNECTION_NOT_RUNNABLEis raised for two unrelated reasons and both error tablesdescribed only one of them.
provider_forraises it for anhttpconnection, which is a factabout the build and remains true as written;
_localraises it through_no_adapter_forwhen noinstalled driver serves the family the downloaded config declares, which is a fact about the
installation and changes the moment somebody installs a driver. The rows in
docs/inference.mdand
docs/api.mdnow name both, anddocs/api.md's own paragraph on an emptycapabilitiestakes the same correction.
docs/architecture/backend/inference.mdstill pointed atinferenceCatalog.tsfor the curatedentries and still said each records a download size. Neither survived the served catalog: the
entries are
CuratedModeltuples on each driver'scuratedmember, the server hands the wholeinstalled set over
GET /inference/providers, andCuratedModelcarries no size at all, becausewhat a download costs is read live for the exact pair while somebody is still deciding. That page
and
docs/architecture/backend/wire.mdeach also described amodel_typeset as something "thisbuild serves"; both now say the installation.
The new page
docs/architecture/backend/providers.mdcovers the two protocols, the entry-point group, thepackaging pin, the trust that installing a driver asks for, and the conformance suite a driver
has to pass. It opens by stating that it is not a public extension API in this release and may
change without notice or a migration path: this epic's own body puts the stable contract and its
publication under "Later", so a page describing the contract is allowed where a page announcing
an extension API would not be.
Two things it states that an author cannot work out alone. A prerelease floor is mandatory while
this project is pre-1.0 —
0.0.1b2sorts before0.0.1, so an ordinary-lookingvisionset>=0.0.1excludes the very build the plugin targets, and the compatibility backstopskips the driver with a sentence naming both versions; the pin has to be
>=0.0.1b1. Andinstalling a provider is trusting its author with code execution in the server process and in
every worker, exactly as installing any
pippackage is.It sits in the architecture tree rather than among the behavioural pages because that is where
plugin-declaration guidance already lives —
architecture/backend/formats.mddocuments what anexporter plugin declares — and because
docs/README.mddescribes the architecture tree as themap and the pages beside it as the behavioural reference.
Its sidebar entry is in the same commit as the page, which is not tidiness.
tests/scripts/docs_sidebar.test.mjsholds every tracked document underdocs/todocs-site/src/sidebar.mjs, and that gate runs inside the frontend group — so a page addedwithout its entry reddens a check that reads as having nothing to do with documentation. The gate
was confirmed to fail on the page before the entry was added, and to pass after.
Test plan
bash scripts/check.sh— exit 0,PASSED ran=python,frontend,generated,browser skipped=docs.bash scripts/check.sh docs— exit 0, the opt-in group the default run skips and the one thatactually reads what this branch wrote:
The second half of the inference matrix —
uv sync --locked --extra local-inferencewithVISIONSET_REQUIRE_LOCAL_INFERENCE=1— was not run, and it is named here rather than left toinference: no Python changed on this branch, so no test behaves differently between the two halves
of that matrix. The CI
inference smokejob covers it either way.Beyond the gates, each claim the new page makes about the code was checked against the source
rather than against the plan that proposed it: the entry-point group and pinned distribution name
in
inference/registry.py, the>=0.0.1b1floor in_incompatible, the committedVERSION, bothModelCapabilitymembers, the 40-character commit rule onCuratedModel, the contested-familyrefusal, and the two discovery timings. The four documentation pages were then read end to end.
The built site was then driven in a real browser, because the gates prove that links resolve
and that the projection is deterministic — not that a page renders. Against
astro previewoverdocs-site/dist:/architecture/backend/providers/withWriting a provideras itstitle, taken from the
# H1as every other page's is.inferenceandformats, and theprevious/next pair chains
inference→providers→formats.code with their language labels, and every source reference resolves to a GitHub blob link.
/inference/renders with its two columns and no loose| --- |anywhere on the page, which is what a malformed table would leave behind.absent. The one phrase that survives — "the SAM 2 and SAM 3 families" — is in the new
illustrative sentence and in no table cell, which was confirmed rather than assumed.
/architecture/backend/inference/ispre-existing and unrelated: it appears identically on
/architecture/backend/jobs/, which thisbranch does not touch, and both are pages carrying a mermaid diagram.
Found, not fixed
installed()cannot report two drivers claiming oneprovider_id. The second silently replacesthe first in the returned mapping, and no registration comes back as skipped, so the condition is
invisible to anyone reading a discovery result. The conformance suite characterises this rather
than fixing it.
Four geometry schemas —
BboxGeometry,PolygonGeometry,PolylineGeometryandClassificationGeometry, reachable only fromSuggestedRegion— publishadditionalProperties: falsefrom a response body, which contradicts the generated client'sdeliberate tolerance of unknown keys on a response. Pre-existing, unfiled, and untouched here.
A note for whoever rebases next
The capability table this branch reshapes in
docs/inference.mdis also being edited by in-flightwork on batch pre-labeling (#425), which adds a Consumed by column to the four-column shape. The
resolution that keeps both is to carry that new column onto the two-column table this branch
leaves behind; restoring the Families column would put back the claim removed here.
Closes #498