Status
Accepted on 2026-08-24. This decision extends ADR 0038; it does not change the evidence boundary established there.Context
AIConfigurator can search model, accelerator, runtime, concurrency, and latency constraints without provisioning every candidate. Upstream has also accepted a transition toward AISimulate. Waiting for that transition would delay useful candidate reduction, while importing AIConfigurator objects into InferCrane would turn the upstream migration into a domain and database migration. Real package validation found an additional compatibility boundary. AIConfigurator0.11.0
declares plotext>=5.3.2, but its reporting path calls plotext.plot_size, which is absent from
plotext 6.0.0. AIConfigurator’s own lockfile resolves plotext 5.3.2. Installing only the top-level
package can therefore succeed while execution fails.
Decision
InferCrane uses AIConfigurator through the existingoptimizer.Source boundary with this exact
tool tuple:
aiconfigurator==0.11.0;plotext==5.3.2;- Python 3.11–3.13 on a platform supported by upstream wheels.
- communicates through InferCrane-owned versioned JSON input and output schemas;
- runs out of process with bounded time, stdout, and stderr;
- receives a scrubbed environment without AWS, GCP, Kubernetes, RunPod, registry, or model-provider credentials;
- defaults Hugging Face and Transformers metadata access to offline mode;
- accepts network metadata lookup only through an explicit operator flag;
- records the upstream version and result digest;
- maps only topologies the selected InferCrane provider adapter can execute without guessing;
- labels every result
modeledandproposed-modeled-unqualified; - never provisions, benchmarks, promotes, routes, or scales infrastructure.
auto experience uses the estimator when the exact tuple is present and otherwise
falls back to reviewed catalog candidates with a visible warning. Explicit --source aiconfigurator fails instead of falling back.
AIConfigurator estimates do not satisfy AIPerf, Replay, semantic quality, sourced cost, Release
Guard, or Inference Passport requirements. Only InferCrane’s measured evidence and deterministic
policy can qualify a Serving Plan.
AISimulate migration
AISimulate will implement the sameoptimizer.Source and estimator JSON boundary after its stable
package, public schema, support matrix, parity evidence, and rollback documentation pass the gates
in the optimization execution plan.
Migration is performed as a source replacement:
- run AIConfigurator and AISimulate on the maintained calibration corpus;
- compare supported tuples, top-k candidates, modeled metrics, and errors;
- preserve prior AIConfigurator provenance and result digests;
- enable AISimulate for new campaigns only;
- retain AIConfigurator rollback until measured calibration passes;
- remove the old adapter in a later release without rewriting candidate or benchmark history.
Consequences
Users can reduce a large configuration space before paying for GPU experiments, including current L40S, L4, H100, H200, B200, and supported backend models. The result remains portable because the estimator is not the durable domain. The exact Python tuple is an optional tool, not a control-plane runtime dependency. Unsupported hosts retain reviewed catalog proposals. This preserves the single-binary core at the cost of a separate optional estimator environment.Verification
- Go fixture tests validate schema, version, topology, credential scrubbing, output bounds, and fallback behavior.
- A Linux x86_64 container test executes the real pinned packages against
Qwen/Qwen3-8Bon the modeled L40S system. - Candidate DeploymentSpecs must pass strict InferCrane schema loading.
- No modeled candidate may be described as measured, qualified, or recommended.