Model Match — methodology

Method version 1.9.0 · engine: /engines/model-match/ · reads the model-facts registry, the normalised benchmark database, the class A model-memory registry, the power-mode and JetPack registries and the hardware catalog. Dataset: model-facts.json.

A choice between models on one named platform, not a platform recommendation. Every figure comes from the engine or registry that owns it, and the winner is the top of one ranked list computed by one published weight table.

Input rules

Inputs (WP-01). A field that is not stated takes its documented default and is listed in provenance.defaulted; a field that is stated but invalid — a count of 0, a negative, a fraction or a non-number, true in place of a count, an unknown value of an enumerated input, or an empty string — is rejected with VALIDATION_ERROR naming the field, never replaced by a default.

Input keys (WP-02). The engine accepts one list of input keys — the inputs documented here and their declared backward-compatible aliases. Unknown input keys are rejected with VALIDATION_ERROR naming the key: an invented or misspelt key is never silently ignored, a __ test hook never reaches the engine, and an alias sent together with the key it stands for is rejected too (the engine would read only one of them). export_json.inputs echoes every input the engine honoured, so replaying it reproduces the result.

Contents

  1. What it decides, and what it does not
  2. The candidate universe
  3. The canonical model map
  4. What each candidate is evaluated on
  5. Reference accuracy and quantised accuracy
  6. The vision memory model
  7. The filter, and how UNKNOWN is treated
  8. The four terms and the weight table
  9. Measured and estimated accuracy
  10. Winner, order, roles and ties
  11. What the registries actually contain
  12. What invalidates a result
  13. Method changelog

1. What it decides, and what it does not

Model Match answers one question: on the platform you already have, under this load and these constraints, which model should you run — and why that one and not the next. It returns a ranked list of every model with a benchmark row for that silicon, the four term scores and the weight table that produced each total, the checks behind the winner, every excluded model with the constraint that excluded it, and the accuracy of each candidate with the metric and the evaluation set named.

It does not recommend a platform. When the question is which platform, that is Hardware Match. It does not compute a throughput, a latency or a memory figure of its own either: it owns exactly two things, the candidate universe and the ranking. Everything inside a candidate comes from an engine or a registry that already owns it, and re-running that engine directly with the same inputs reproduces the same numbers — which is what makes the sentence "the winner fits" checkable rather than asserted.

It also does not model the rest of the pipeline. The throughput figures are inference-only; decode, preprocessing, tracking and encoding are Camera Stream Capacity's question.

2. The candidate universe

A model is a candidate on a platform if and only if the benchmark database holds at least one row for it on that platform. The candidate is the triple (model, variant, precision), which is exactly how the database records a measurement, and its universe size is a fact about coverage rather than a design choice: 90 triples on the Jetson T5000, 58 on the Orin Nano Super, 48 on the Orin NX 16GB, 11 on the Orin NX 8GB — and zero on the Jetson T4000, which returns an answer naming the platform and the gap instead of a list.

The alternative rule — admit any model and model the ones nobody measured — was rejected. A modelled throughput is labelled as modelled by Compute Fit and can never confirm a fit, so every added row would be a candidate that cannot win on the strength of its own evidence; and a comparison whose deciding number was invented is worse than a shorter list. A model with no row here is reported in the gaps, never as a silently modelled entry.

Filters narrow the universe before evaluation, never after ranking: a task, a precision, a list of families to keep or to drop. When the task is one of the three language tasks — text generation, vision + language, speech recognition — the universe is instead the class A model-memory registry of that type at the quantisation asked for, because a language-model question on an edge module is a memory question first and the registry, not the benchmark rows, is what carries sourced memory facts for it.

Above max_candidates (default 40, cap 90) the universe is truncated by benchmark-row count, before any scoring, and the truncation is reported. Truncating after scoring would let the cap silently decide the answer.

3. The canonical model map

The benchmark database records the same checkpoint under more than one id, because it was assembled from sources that spelled models differently. YOLOv8n-seg has its throughput rows under yolov8_seg|n and its 0.367 mAP under yolov8_seg|n-seg. SSD MobileNet v1 appears under three family spellings. EfficientNet-EdgeTPU appears under three more. Without a map that joins them, one candidate has speed and no accuracy while a phantom second has accuracy and no speed, and neither can be compared to anything.

The map lives in the model-facts registry and is published in the dataset. Every entry names the non-canonical spelling, the canonical model and the reason the two are the same checkpoint; no entry points at another entry, and no canonical model is itself the source of an alias. After the map is applied, the merged candidate carries every row from every member spelling, and the result reports how many of its candidates are joins.

The map is Model Match's alone. The benchmark database is not rewritten by it, so no other engine's answers move because of it.

4. What each candidate is evaluated on

FactOwnerWhat it contributes
throughput, latency, precision, runtime, batchCompute FitThe constraint objects unchanged: the pessimistic edge of the matching benchmark rows with their ids and class, the three latency tiers, and UNSUPPORTED where the silicon cannot run the configuration.
memory — language modelModel Memory FitWeights at the quantisation, KV cache from the published architecture, runtime overhead, OS headroom and reserve, with the FITS / TIGHT / DOES NOT FIT verdict.
memory — vision modelthis engine, §6Weight file plus the published TensorRT activation and workspace split, on the shared memory budget.
reference accuracy, parameters, GFLOPs, weight size, licencemodel-facts registryOne row per canonical model, every figure with the document it was transcribed from.
quantised accuracy at this precisionbenchmark row, else the registryWhat was observed at the precision asked for, with the evaluation set named or recorded as unstated.

Every constraint is stamped with the engine that asserted it and the check it answers, so a reader can always say which engine is responsible for any number on the page. Nothing is recomputed here, and there is no constraint type that only this engine produces.

5. Reference accuracy and quantised accuracy

These are two different measurements and this engine never merges them.

The reference accuracy is the figure the model's own publisher puts on its model card, with the metric and the evaluation set named. For the detector families that is mAP50-95 on COCO val2017. Naming the metric is not decoration: it is what resolves the contradiction this engine was built on. YOLO11n has 0.395 published on the Ultralytics model page and 0.5085 published in the same publisher's Jetson guide. Eleven points apart is far more than quantisation explains, so they cannot be the same metric on the same set — and the guide does not say which set it used. The model card figure is the reference; the guide figure is recorded as a per-platform observation whose dataset is unstated, flagged as conflicting, and never presented as the model's accuracy.

The quantised accuracy is what was observed at the precision asked for. It is resolved in a fixed order: the benchmark row for this exact platform and precision if one exists; otherwise a per-platform figure the benchmark database dropped in its de-duplication; otherwise the publisher's own quantisation table, which also carries the drop in points, the quantisation method and the calibration set. Where the published drop at the requested precision exceeds two mAP points, the result names it in a warning — the ranking uses this quantised deployment figure, so the loss is priced into the score, and the reference stays on the row for context. A per-platform figure more than five points from the model card is withheld from the ranking: it is stated with its delta in the result's gaps (and in a warning when that model wins), and the model's accuracy term takes the unknown contribution (§9) — the reference is never substituted for it.

Evidence class. A vendor model-zoo or model-card accuracy table is an external measured benchmark: class C. Class B is reserved for EdgeAIStack's own measurements and class A for a vendor specification, so no accuracy figure on this page claims either. That is checked, not merely intended: a reference accuracy claiming class A or B fails a rule.

6. The vision memory model

Vision memory is built here rather than taken from the legacy memory estimator, because that estimator assigns a documented total peak figure to its weight term and then multiplies it again — a six-fold over-count on the one row backed by a real measurement (logged as engine bug #18, owned by the package that rewrites its consumers). Model Match never reads that table.

Instead the budget is:

PartSourceClass
weights at this precisionThe registry byte size — a published parameter count multiplied by a byte width, weight-only.D
activations + builder workspace + IO buffersThe published TensorRT split where one exists. It exists for five detector variants.C or D
activations + workspace, everywhere elseThat same published curve read at this model's parameter count, with the builder-workspace policy the split records (64 MB, 128 MB above 40 M parameters).E
OS headroom and reserveThe shared memory budget, so this figure means the same thing here as in Camera Stream Capacity.E

The third row is the honest limitation: it is a five-point curve applied to architectures it was not measured on, which is an engineering heuristic and is labelled as one. That is why the size term is never evidence for a vision candidate, and why the memory constraint on such a candidate reports class E rather than borrowing the class of the split it was interpolated from. A candidate with no parameter count at all reports memory UNKNOWN rather than a guess.

Verdict: FITS below 85 % of module memory, TIGHT to 100 % inclusive, DOES NOT FIT above it — the same thresholds Model Memory Fit uses.

7. The filter, and how UNKNOWN is treated

A candidate is excluded if and only if a compute check FAILs or is UNSUPPORTED, or its memory check FAILs. That is the whole filter. There is no accuracy floor, no size ceiling, no throughput margin requirement and no preference anywhere in it: a preference changes the order of the ranked list and never its membership, which is a property a rule checks on every combination by re-running the same question at all four preferences.

Every excluded candidate is returned with the exact constraint that excluded it — the check, its status, what was required, what was available and the first assumption behind it — so an absence from the list is always explained.

A FAIL is only raised on evidence that can prove the miss (elimination authority). A candidate whose compute or memory miss rests on planning-only evidence — the multi-stream efficiency curve, a power-mode factor, a scaled or corpus-estimated throughput, the estimated activation and workspace memory — is not excluded: it is a planning candidate, planning_only: true, NEEDS VALIDATION with the modelled shortfall stated on its demoted row. Planning candidates are listed after every candidate without such a miss, and they anchor no cohort term (the accuracy range and the size anchor come from the others), so their presence never re-scores the rest. A planning candidate's own accuracy term reads against those anchors by the same groups: a measured figure beside measured anchors takes their floored min–max, held between the unknown contribution and 1; anything the anchors' group cannot rank takes the unknown contribution. coverage.planning_only counts them.

UNKNOWN never excludes anything and never passes anything free. A batch size nobody measured, a precision with no row, a model with no parameter count: each comes back UNKNOWN, caps the candidate's verdict at NEEDS VALIDATION — which ranks it after every FIT and FIT WITH RISKS candidate, whatever its score (§10) — and counts as class E in the evidence term. A candidate whose throughput and memory are both UNKNOWN is thin and sorts after every candidate with coverage in its tier, so it can only reach the top when nothing else has coverage either — which is what makes "the winner is the top of the list" safe.

Only a material check lowers a verdict. A candidate's verdict is the shared kernel's rollup of its own checks. A check the kernel reads as informational — a self-comparison such as "a row exists at the batch you asked for", or a catalog assertion — never lowers a verdict through its boundary, and a question the caller did not ask is not part of the verdict at all. These are the checks that can come back not established, and why each one decides something:

CheckOwnerNot established whenWhy it lowers the verdict
throughputCompute Fitno benchmark row resolves, or the figure is modelled onlyIt is the load question itself.
latencyCompute Fitonly with a latency target: a class D or reciprocal latency under the targetThe caller asked for it.
batchCompute Fita batch above 1 with no row at that batchThe throughput was resolved at another batch and is never extrapolated, so the load at the batch asked for is not established.
runtime (Jetson)Jetson Configuration Checkerits own sourced verdict on the JetPack and runtime pairingWhether the runtime runs at all.
memory, vision modelthis engine, §6no parameter count, or no module memory figure, on recordMemory is a hard check: DOES NOT FIT excludes.
memory, language modelModel Memory Fitthe model registry cannot size itThe same hard check.
throughput, language modelthis enginealways: its rows report tokens per second, not framesServing capacity is not modelled. Every language candidate carries it, so it never reorders them.

The precision check and the catalog runtime check are PASS or UNSUPPORTED, never not established. Accuracy, parameters, weight size and licence are not checks: a missing accuracy changes the accuracy term (§9), never the verdict.

8. The four terms and the weight table

Score is a plain weighted sum, Σ wᵢ·sᵢ, over four terms in [0,1]. No multipliers, no overlays, no per-preference code path. Each term is published beside the score, so the arithmetic can be recomputed from the numbers on the page — a ranking that cannot be checked from what it prints is not falsifiable.

TermDefinitionEvidence
accuracycohort_min_max over the publisher quantised deployment accuracy at the precision asked for (benchmark row on this platform, else the publisher quantisation table). Among feasible candidates sharing the same task and metric, measured figures are ranked against one another on a floored scale — the weakest scores 0.25 and the strongest 1 — and an estimate is never ranked against a measurement on its number (§9). A one-value cohort — a single candidate with a figure in its task and metric, or several at the same figure — has nothing to be ranked against and takes the unknown contribution, 0.25, like a candidate with no figure. The FP32 reference is context only and is never substituted when no quantised figure exists — that takes the unknown contribution: the floor of the scale, never 0.C measured, D estimated, E where absent
margin1 − the throughput utilization from Compute Fit's own constraint. An UNKNOWN throughput scores 0.inherited, C or D
evidenceThe mean class weight (A 1.00, B 0.90, C 0.75, D 0.50, E 0.25) over the candidate's constraints and its accuracy fact. An UNKNOWN counts as E whatever it claims. Each figure a benchmark row gives counts once: a check whose class Compute Fit read from rows that another check of the same candidate already carries names that check in evidence_ref and casts no vote of its own. The precision and batch checks only restate that the throughput's rows exist, so relabelling the row behind a throughput moves the term by one vote, not three; a latency or an accuracy measured in that same row is a figure of its own and keeps its vote.derived
sizeThe smallest weight file in the feasible set over this one, at the precision asked for.D for vision, A or D for a language model

The weight table below is class E — engineering judgement, not measurement. It is the only weight table in the engine: there is no overlay, no multiplier and no preference-specific branch anywhere else, and the applied row travels on every result so it can be read next to the scores it produced. Each row sums to 1.0.

PreferenceaccuracymarginevidencesizeClass
balanced0.300.300.250.15E
accuracy0.550.150.200.10E
speed0.100.550.200.15E
size0.100.150.200.55E

The evidence weight never drops below 0.20 in any row. That is deliberate: a preference is a statement about what you want, not permission to prefer an unsourced number over a sourced one.

9. Measured and estimated accuracy

A deployment accuracy is either measured — a publisher quantisation table or a published per-platform figure, class A, B or C — or estimated — an EdgeAIStack benchmark-corpus estimate, class D or E. Measured accuracy outranks estimated accuracy as evidence, not as numeric quality: inside a task-and-metric cohort the two are separate groups, and an estimate is never ranked against a measurement on its number. Ranked figures sit on a floored scale from the unknown contribution (the weakest) to 1 (the strongest), so a figure that cannot be compared never sits above a measured one.

In the task-and-metric cohortThe accuracy term
a measured figurefloored min–max among the measured figures only: the weakest 0.25, the strongest 1
an estimate beside a measured figurethe unknown contribution, whatever the estimate says; flagged estimated — measurement needed
estimates only, all made by one documented methodfloored min–max among the estimates (0.25 to 1); each still flagged estimated — measurement needed
estimates only, made by different methodsthe unknown contribution for each
no deployment figure, or a figure withheld as conflicting with the model cardthe unknown contribution
a group with nothing to be ranked against — one figure, or every figure the samethe unknown contribution

The unknown contribution is 0.25, class E. It is the class E evidence weight — the value the evidence term already gives an UNKNOWN check — and it is the floor of the accuracy scale: every ranked figure scores between 0.25 and 1, so an estimate, or a candidate with no comparable figure, never ranks above a measured figure on accuracy, and no accuracy term is ever 0. It never depends on the candidate's own number, so an estimate can never out-score a measurement because the estimate is larger. The price is stated, not hidden: between two measured models the accuracy spread is three quarters of the accuracy weight rather than all of it, so accuracy weighs a quarter less against margin, evidence and size than it did before method 1.6.0. The constant travels on every result as weights.accuracy_normalization.unknown_contribution with range [0.25, 1], normalisation version 3.

Every ranked candidate carries accuracy_group: the evidence group of its figure (measured, estimated or none), its cohort and cohort_basis — what that cohort was ranked on (measured, estimated_one_method, estimation_methods_differ or no_figures) — whether its term is min_max or the unknown_contribution and why, and on an estimate estimated_measurement_needed: true with the label "estimated — measurement needed" and the estimation method. Each estimate is also named in the result's gaps, and an estimate is never labelled most_accurate while a measured figure is ranked.

10. Winner, order, roles and ties

The ranked list is ordered by verdict tier first — every FIT candidate, then every FIT WITH RISKS one, then every NEEDS VALIDATION one — and by the published score inside a tier; a planning candidate (its miss rests on planning-only evidence, #263) follows every other candidate. Score is authoritative within a tier and never across tiers: a candidate with a material check left UNKNOWN never outranks one that fits, whatever its score. A preference moves candidates inside a tier, never across one. NO FIT candidates are excluded, not ranked.

The winner is ranked[0], full stop. There is no override, no re-pick and no input by which a caller can choose differently; a caller who dislikes the winner changes the preference or the constraints, not the result. The result's verdict is the winner's verdict, and the winner is never NO FIT.

When every evaluated model is excluded, the answer is NO FIT, not an error: the response is a success with verdict: NO_FIT, winner: null and an empty ranked list, every evaluated model in excluded with the constraint that excluded it, and questions naming the changes that can help — lower the load, relax a latency target, drop a precision or family filter, or ask Hardware Match which platform holds the load.

When the records hold no candidate at all — a platform with no benchmark row, a task or precision with no row on it, a family filter nothing on it matches — the answer is an evidence gap, not a NO FIT: nothing was shown not to fit. The response is a success with verdict: NEEDS_VALIDATION (insufficient evidence), winner: null, empty ranked and excluded lists, a refusal row whose binding_inputs names the field that left the universe empty, and questions that lead to a value with evidence — a platform with rows for the task, a task or precision on record for the platform, dropping the filter, Compute Fit for a named model, or Hardware Match. The page keeps offering those platforms and tasks and shows this answer. Only a malformed request, or a family or variant name no record carries anywhere (a 400 that names the field and the accepted values), is a request error.

Roles are labels on the ranked list, not a second selection pass. fastest and smallest mark the true maximum or minimum of the feasible set; most_accurate marks the highest measured deployment accuracy — the highest estimate only when no measured figure is ranked and the estimates share one method — and each may land on the winner itself. stretch marks a candidate that is at least a tenth more accurate than the winner but whose verdict is FIT WITH RISKS or NEEDS VALIDATION — the model worth measuring before you settle; on an estimate it sits beside estimated — measurement needed. A candidate may carry several roles or none.

The whole order is deterministic: verdict tier; inside a tier, coverage (thin candidates last — only the NEEDS VALIDATION tier can hold one); then score; then higher evidence, the accuracy standing (a measured figure before an estimate before none, then the higher figure inside the same group), lower total memory and the stable candidate id. A planning candidate (a miss that rests on planning-only evidence, #263) is listed after every other candidate — it can only be NEEDS VALIDATION — and anchors no cohort term. Two identical calls return byte-identical results.

11. What the registries actually contain

  • A reference accuracy is on record for roughly half of the candidate universe. The model-facts registry carries the model-card figure for the detector families whose publishers print one and for YOLO11-seg and YOLO11-pose; classification, the other pose and segmentation models and the transformer tail mostly have none. The accuracy term reads the deployment accuracy at the precision asked for, never the reference, so a model with no quantised figure — every YOLO11-seg and YOLO11-pose candidate included, since their card does not state the precision it was validated at — takes the unknown contribution on accuracy and competes on margin, evidence and size.
  • Licence is not on record for any model. A licence filter therefore has nothing to filter on, and the field is null everywhere rather than guessed.
  • Speech-recognition word error rate and language-model quality scores do not exist here at all. A language candidate is ranked on evidence and size.
  • Weight size is a parameter count times a byte width for every vision candidate — a model, not a published artefact size, and labelled class D on every row.
  • The TensorRT memory split is published for five detector variants. Every other vision candidate's activation figure is that curve interpolated, class E.
  • Per-platform accuracy figures often do not name their evaluation set. Those are recorded with dataset: unstated and flagged when they conflict with the model card by more than five points.

12. What invalidates a result

  • Your own evaluation set. Every accuracy here is COCO or ImageNet. Relative ordering on a public benchmark is a weak predictor of relative ordering on your scenes, your classes and your lighting; if accuracy is the deciding term, evaluate the top two on your own data.
  • Quantisation you have not done yourself. The published INT8 drops assume the publisher's calibration set and method. A different calibration set, or post-training quantisation where the publisher used quantisation-aware training, can move the figure by several points.
  • The vision memory estimate. Outside the five variants with a published split it is a class E interpolation, so a TIGHT verdict there is a hypothesis, not a measurement.
  • Everything Compute Fit's own caveats cover. Software versions, thermal state, input resolution, batch, the multi-stream efficiency curve and the fact that every benchmark row is inference-only.
  • The weight table. It is judgement. A deployment with a hard accuracy floor or a hard memory ceiling should treat those as constraints on the question — narrow the precision, exclude the families that cannot meet them — rather than hoping a weighted sum expresses them.
  • Coverage. A model that nobody has benchmarked on your silicon is absent, not rejected. Absence from this list is not evidence against a model.

13. Method changelog

MethodDateChange
1.9.02026-09-29A candidate's Compute Fit run carries a capacity_sweep row (published only when the platform's efficiency curve is not monotone, naming the maximum camera count over a full sweep, never the requested load) into this engine's per-candidate rollup unconditionally; that row could demote an otherwise-established FIT candidate to NEEDS VALIDATION even though it answers a different question (bug #267). Compute Fit now marks that row required_for_verdict: false, and this engine's carried copy (kernel transport, unchanged verdict logic) honours it, so it no longer counts. Every carried and own-produced constraint row also now publishes required_for_verdict. No real catalog combination is affected today — the sweep only fires on an injected test seam.
1.8.02026-09-29A runtime this engine's own caller states is forwarded to Compute Fit as stated; one not stated is no longer forwarded as a concrete value either (bug #276). Compute Fit resolves the same native runtime on its own when none is sent, so every existing recommendation is unchanged; a caller who explicitly names a runtime the platform does not run now gets Compute Fit's refusal for that candidate (UNSUPPORTED, NO FIT on that candidate's compute check) instead of a silent substitution to the platform's native runtime.
1.02026-09-09First release. The strict candidate universe (a benchmark row on this platform, or the class A model registry for a language task); the canonical model map joining the ids the benchmark database splits a checkpoint across; per-candidate evaluation composed from Compute Fit and the memory owners with nothing recomputed; a filter on hard facts only, with UNKNOWN never excluding; one ranking function over accuracy, margin, evidence and size with the class E weight table published in full; reference and quantised accuracy reported side by side and never merged; roles as labels on the ranked list; winner = ranked[0] with no override.
1.7.02026-09-29elimination authority (#263, owner ruling 2026-09-29). A candidate is excluded only on an authoritative or bounded FAIL. A candidate whose compute or memory miss rests on planning-only evidence is kept as a planning candidate (planning_only: true, NEEDS VALIDATION with the shortfall stated), listed after every other candidate (the 1.6.0 tier order holds inside each part) and anchoring no cohort term — its own accuracy term reads against the anchors by the 1.6.0 groups, held between the unknown contribution and 1; coverage.planning_only counts them. A load every model misses only on planning-only evidence is NEEDS VALIDATION (was NO FIT). Every row publishes elimination_authority.
1.6.12026-09-29No method change (bug #275). Compute Fit 1.6.0's precision and runtime checks carry the vendor-sourced class of the support lists (class A where the vendor documents the value), so the evidence term of a candidate whose precision or runtime check reads a list rises; the precision and batch checks that only restate benchmark rows still cast no vote. Jetson Thor T5000 FP8 candidates, excluded before on an UNSUPPORTED precision, now rank. Scores move and can reorder candidates inside a verdict tier; no other winner changes on the reference workloads.
1.6.02026-09-29Ranking change (owner rulings of 2026-09-29; bugs #265 and #258). Verdict tier before score (#265): the ranked list is every FIT candidate, then every FIT WITH RISKS one, then every NEEDS VALIDATION one, by score inside a tier — it was coverage, then score, so a candidate whose memory or throughput is UNKNOWN could out-score FIT ones (Thor T5000 detection 4 × 15 fps INT8, accuracy preference: YOLO26 l, memory UNKNOWN, over YOLO11 l, now YOLO11 l; AGX Orin detection 4 × 15 fps, accuracy: YOLO11 x FP32, throughput UNKNOWN, over YOLO11 m INT8, now YOLO11 m INT8). Measured and estimated accuracy in separate groups (#258): measured figures are ranked among themselves on a floored scale, the weakest at 0.25 and the strongest at 1; an estimate beside a measured figure takes the unknown contribution and is flagged estimated — measurement needed (accuracy_group, new on every ranked entry, with the cohort's basis); estimates are ranked against one another only when no measured figure shares their cohort and they share one method. The unknown contribution — no figure, a withheld figure, an estimate beside a measurement, a group with nothing to be ranked against — is 0.25, the class E evidence weight and the floor of the scale, where it was 0 (weights.accuracy_normalization version 2 → 3, with unknown_contribution and range). most_accurate reads the measured figures first. Across 17,920 swept questions, 393 of the 5,908 with a winner change winner (107 by the tier order, 253 by the accuracy groups and the floored scale, 33 by both) and 140 change verdict, every one to a better tier; no candidate's own verdict changes.
1.5.12026-09-29The precision and batch checks no longer vote in the evidence term (bug #264). Compute Fit's precision and batch checks read their class from the rows behind the throughput check and now name it in evidence_ref; a check that names another check of the same candidate casts no vote of its own. Before, the row behind a throughput voted three times — throughput, precision and batch — so relabelling that one row moved the term three times over, enough to take Thor T5000 detection from a FIT YOLO11 to a YOLO26 whose memory is UNKNOWN when derived rows were relabelled C → D. The evidence term of most candidates changes, and a winner changes where the term decided a close race; the weights are unchanged.
1.5.02026-09-29Ranking change (bug #258). A one-value accuracy cohort — one feasible candidate with a deployment accuracy in its task and metric, or several at the same figure — scores 0 on the accuracy term; it scored 1, the full accuracy weight, with nothing to be ranked against. A YOLOv8 segmentation or pose benchmark-row figure (class D, no model card) sits alone in its cohort, so it won on that term alone over FIT candidates with measured throughput: on the page's default question (Orin NX, any task, 8 cameras at 5 fps, balanced) YOLOv8n-pose FP16 at NEEDS VALIDATION, now YOLO11l INT8 (FIT); Orin NX pose now YOLO11n-pose FP16 (FIT); AGX Orin segmentation at a frame-rate target now YOLO11n-seg FP16 (FIT). weights.accuracy_normalization.version 1 → 2. Cohorts with a spread are unchanged.
1.4.42026-09-28An absent power_mode is listed in provenance.defaulted when the platform has power-mode presets (bug #248): Compute Fit already sized every candidate at the registry default preset, named on each throughput constraint, but the default was not recorded with the other defaults. A named mode is never listed. No ranking change.
1.4.32026-09-28Text only, no ranking change. The gap that counts candidates whose accuracy term is 0 now counts those with no deployment accuracy at the requested precision — it counted those without a model-card reference, so a model with a per-platform row and no card (EfficientDet-Lite3 on Coral) was reported as scoring 0 while it scored on its row. A winner whose per-platform figure was withheld as conflicting with its card is warned about as such, with both figures; it was told that no deployment accuracy was published. The notes no longer say the rank uses the reference figure (it has used the deployment figure since 1.2).
1.4.12026-09-28A platform, task, precision or family the records hold no benchmark row for is a success answering insufficient evidence (verdict: NEEDS_VALIDATION, winner: null) with a refusal row naming the field and questions leading to a value with evidence; it was a 400 error that named no field (bug #227). A family or variant name no record carries stays a 400, now naming the field and the accepted values. A NO FIT result also carries the refusal row. Winners and verdicts of every answerable request are unchanged.
1.4.02026-09-27A load no model on the platform holds returns a NO FIT answer (success, verdict: NO_FIT, winner: null, ranked: []) with every excluded model and its reason constraint, and a new questions field naming what to change; it was an HTTP 400 error that discarded the excluded list. A result with a winner carries questions: [].
1.3.12026-09-20object_detection is accepted as an alias of detection (and pose_estimation of pose), matching the canonical input map. A request that sets cameras without detect_fps or target_fps is rejected with a load-specific error.
1.32026-09-18The throughput published for each candidate is the capacity its own throughput check held the load against — after the multi-stream reduction for a camera load — so available_fps and the utilization describe one number. Before, a camera load showed the one-stream figure beside a utilization computed from the reduced one (eight cameras on Orin NX: 256 fps shown, 199.68 fps checked). The one-stream figure is still published, as single_stream_fps. Ranking was unchanged: the margin term already used the check's utilization.
1.4.22026-09-28Input rules (WP-01 remainder, WP-02): an invented precision is rejected before the universe is built — never answered as an evidence gap (a recognised precision with no rows still is); cameras, batch_size, max_candidates, context_tokens and sequences are integers (never rounded); prefer, quant, kv_quant, rates and targets are checked; defaults are listed in provenance.defaulted — the language-model ones only on a language task. Unknown input keys are rejected. No formula changed.

Method changes bump the method version; the composite dataset version follows the newest of the registries this engine reads, and every result also carries the per-engine versions in sub_engines.