The objection
Fixed price requires a definition of done. LLM output varies between runs, so the obvious criterion — 'the output is correct' — is not checkable in the way a normal acceptance test is. This is the reason most AI work is sold hourly, and it is a real difficulty rather than an excuse.
Separate the deterministic from the probabilistic
Most of an AI system is ordinary software and can be specified normally. The retrieval pipeline exists and is configured a particular way. Tenant filtering is enforced in the query layer. The eval harness runs in CI and blocks on failure. Cost telemetry is attributed per workflow. Every one of those is binary and inspectable.
Only the generative step is probabilistic, and it is a smaller fraction of the work than the framing implies. Writing criteria for the deterministic majority is not hard; it is just not usually attempted.
For the probabilistic part, specify the property and the process
Two things can be committed to honestly. First, mechanical properties that must hold on every output: valid schema, no figure absent from the source data, no cross-tenant content, refusal where required. These are checkable per-run and are genuine acceptance criteria.
Second, the measurement apparatus: the eval suite exists, covers the agreed cases, runs in CI, and reports a baseline. That is deliverable and verifiable.
What cannot honestly be committed to is a specific quality score, because the achievable score depends on data the client controls. Promising one is either padding or a future argument.
Name the unknowns as unknowns
Some questions are genuinely unanswerable before work starts — whether a corpus supports the intended use, whether a cheaper model is adequate for a step. The correct treatment is to name them in the scope and structure them: a bounded investigation with a decision point, rather than an assumption buried in a number.
A fixed price over a vague scope is not a commitment. It is a dispute with a date on it.
Why this benefits the client more than the supplier
Written criteria remove the argument that fixed-price engagements usually end in. They also force specificity early, while changing direction is still cheap. The document is doing real work before any code exists — and if the engagement never proceeds, the client keeps a specification they can hand to anyone.