On this page
- The clauses that decide how an AI project ends
- Acceptance is a score on a frozen set, not a list of features
- The Drift Clauses
- What a model port actually costs, so you know what to negotiate
- What you own, itemised, because 'all deliverables' does not cover it
- Data terms with technical teeth
- Liability sized to permissions, not to the fee
- Payment gates instead of a calendar
- The exit schedule you can lift
- Terms worth being precise about, and the pre-signature check
The clauses that decide how an AI project ends
Five clauses decide how an AI project ends, and a standard software statement of work contains none of them. Acceptance stated as a score on a jointly built evaluation set rather than as a list of features. A named model version pinned in the contract, with a defined event for when the provider retires it. An itemised list of what the client owns, because prompts, evaluation sets, fine tune adapters and run logs are not covered by the phrase 'all deliverables'. Data terms that name the model providers as sub-processors rather than pointing at a list. And a liability position sized to what the system is permitted to do rather than to the fee. Agree all five before price is discussed, because they are paragraphs then and negotiations afterwards.
The reason these gaps exist is not that lawyers are careless. It is that software contracts were built around a deterministic deliverable. A payments integration either posts the charge or it does not, and you can point at the failure. An extraction pipeline reads the invoice number correctly on most invoices and incorrectly on the ones with two invoice numbers printed on them. Both parties can look at the same running system and disagree in complete good faith about whether it works, and a feature list gives them no instrument to settle it. Six weeks of that is how projects go to war.
Everything below is written for the technical schedules: the parts describing what the thing is, what it must score, what happens when the ground moves, and what you get on the way out. Your lawyer owns the frame those schedules sit inside.
- Zerolines of code need to change for an LLM system to start behaving differently, which is what breaks a conventional warranty clause
- One setof evaluation cases, frozen before the build starts, is what turns acceptance from an argument into a number
- 8 artifactsbeyond source code that a delivered AI system depends on, and a generic IP clause names none of them
- Permissionsnot the fee, is the right scale for a liability conversation, because a cap at the project fee is not risk transfer
Acceptance is a score on a frozen set, not a list of features
Write acceptance as a score on a case set both parties agreed to before any code existed. A feature list is unenforceable for an LLM system, because the system will do every listed feature some of the time, and the disagreement is about the rate rather than the capability.
- The client supplies the cases. They come from real history and they include the ugly ones. If the supplier picks the cases they will build the test they can pass, and they will not be doing anything dishonest. They will simply pick the cases they understand.
- The supplier supplies the harness and the scoring code. That is engineering work and it belongs on their side of the line. What it must produce is a result file broken down per failure category, not a single number.
- Both parties sign the pass bar before the build starts. A number, on a named metric, on a named case set, at a named model version. All four parts or the clause means nothing.
- Split the set. A visible portion the supplier may tune against, and a held out portion nobody sees until acceptance. Without a holdout you are paying to have your test memorised, and neither party finds that out until production traffic arrives.
- Score per failure category with a floor on each. An aggregate of 94 percent conceals the fact that all six failures landed on the case type that carries the money. Categories are agreed at the same time as the pass bar.
- Put the set size in the contract. A pass bar measured on twenty cases is noise wearing a percentage sign. Method for building the set properly is in building a golden dataset.
A team that has shipped LLM systems will want the evaluation set to exist, because it is the only thing that lets them prove they are finished and stop the scope conversation. A team that argues against a held out portion is not necessarily hiding anything, but they are telling you they intend to develop by tuning against the test, and that is worth knowing during procurement rather than after.
The Drift Clauses
An AI system changes its behaviour without anyone editing it, so a contract that only covers the build has covered the easy part. These five clauses handle the fact that the system's dependencies move on somebody else's schedule. Each one costs a paragraph before a price exists and is close to impossible to introduce afterwards.
The Drift Clauses
Five clauses for the fact that nothing in an LLM system holds still. Add them to the technical schedule as a block, not one at a time.
Name the provider, the model and the version string in the contract, and state that every performance commitment attaches to that version and to no other. Without the pin, a warranty that the system achieves a given score is a claim about a moving object, and in eight months neither party can point at what was actually promised.
Define the events that cause the acceptance evaluation to be re-run: the provider deprecates or retires the pinned version, either party changes the model, the retrieval corpus changes by more than an agreed proportion, or a scheduled quarterly re-run falls due. Then state who executes it, who pays for it, and what a failed re-qualification obliges each party to do.
The evaluation set, the golden answers and the harness are client property from the first commit, held in a client repository, with the supplier granted a licence to use them. This is the clause suppliers most often leave vague and the one that decides whether you can ever change the system without them. It is the contractual form of holding rung three in in-house, agency or freelancer for AI work.
Model retirement is certain and the port is real work: prompts get re-tuned, evaluations get re-run, output parsers sometimes need repair. Decide now whether that work sits inside a support retainer, is quoted at a capped day rate agreed today, or is the client's problem entirely. All three are defensible positions. Silence is not one, because silence resolves into an emergency quote.
Agree the failure rate the system is permitted in production, stated per failure category and measured on live traffic rather than on the evaluation set. Without a stated budget, every incident becomes a fresh argument about whether the system is defective, and both parties argue from feelings and screenshots.
What a model port actually costs, so you know what to negotiate
Put a number on the port before deciding who pays for it, because the number is usually smaller than the argument about it. The work scales with how many distinct prompts the system contains and how many output parsers depend on model formatting habits, not with the size of the codebase.
Every default here is an arbitrary stand-in. Replace all of them with your own numbers, including the model price per evaluation case, which you should take from your provider's current pricing page rather than from any article. The output that matters is the last one.
Use the last output to decide how hard to negotiate. If a port costs a small share of the fee, push for it to sit inside a support retainer and spend your negotiating energy elsewhere. If it is a large share, it deserves its own clause with a capped day rate agreed at signature rather than on the day the retirement notice arrives.
One honest caveat about this arithmetic: it prices the median port, which is boring. It does not price the tail case, where a newer model version is better at reasoning and worse at obeying a length constraint or a JSON schema, and a parser that has worked for a year starts failing on a shape it has never seen. Carry a contingency, and do not assume a version upgrade is an upgrade until the evaluation says so.
What you own, itemised, because 'all deliverables' does not cover it
List the assets individually in a schedule. A general assignment of deliverables was drafted for a world where the deliverable was code, and in an AI system the code is the part you could rewrite in a fortnight. The valuable artifacts sit outside it, and several of them will otherwise live in the supplier's accounts by default rather than by decision.
| Artifact | Covered by a standard IP clause | Why it decides your next year | What to write instead |
|---|---|---|---|
| Application source code | Usually yes | The easy part, and the least valuable thing in the delivery | Assignment on payment, standard wording is fine |
| Prompts and their version history | Often not, they get treated as supplier method | The behaviour of the system lives here rather than in the code | Named deliverable, in your repository, history intact, with the record of which version was live when |
| Evaluation set and golden answers | Almost never | Without it nobody can change anything and prove the change was safe | Client property from creation, supplier granted a licence to use |
| Fine tune datasets and adapter weights | Rarely | Your process is embedded in the weights and the weights are portable | Client owns the dataset and the resulting weights, supplier may not reuse either for another client |
| Vector index and embedding configuration | No | Rebuilding it means re-deciding chunking, which is a project rather than a task | Config and build script are deliverables, and the index must be reproducible from them |
| Run logs, prompts and completions | No, and they frequently sit in the supplier's account | This is the raw material for your future evaluations, and it may contain personal data | Client account, client retention policy, exportable in a documented format |
| Infrastructure as code and the credential inventory | Sometimes | Nobody knows whether this transferred until somebody tries a clean clone | Deliverable, with a reproducibility gate attached to payment |
| Supplier's internal frameworks and libraries | No, and they should not be | Trying to own these makes good suppliers walk away, correctly | A perpetual, irrevocable, transferable licence for use in the delivered system |
Data terms with technical teeth
Three data questions decide whether the data section is doing any work: who may train on your data, which companies your users' text physically reaches, and how long the logs live. Everything else in a typical data schedule is boilerplate that was already fine.
Training rights are three separate permissions
The first is whether the model provider trains on traffic sent through their API, which is a function of the account tier and the provider's own terms, and is not something your supplier grants or withholds. The second is whether the supplier may train or fine tune on your data for your system, which you probably want to allow. The third is whether the supplier may reuse your data for other clients, including as few shot examples pasted into a prompt template they carry between engagements. Write all three separately. A single sentence saying the supplier will not use client data for training covers the case you wanted to permit and misses the one that actually happens, which is a prompt template travelling to the next project with three of your real records inside it.
Name the model providers as sub-processors
A generic sub-processor clause pointing at a maintained list is standard practice and it is not sufficient here, because switching model providers is a one line configuration change that moves your users' text to a different company, a different jurisdiction and a different retention policy. Require the providers to be named, and require prior notice of a change rather than notification after the fact. The version pin clause and the sub-processor clause work together: one tells you the behaviour changed, the other tells you the destination changed.
Log retention has a technical floor and a legal ceiling
You need run logs to debug an incident, to build the next evaluation set, and to prove what the system did on a given date. Those logs contain whatever your users typed, which will include personal data that nobody intended to store. The usual failure is a retention window chosen implicitly by whoever configured the observability tool, which is effectively forever. Pick a number, write it into the schedule, and require redaction at write time rather than deletion later, because deletion later depends on somebody remembering. The mechanics are in personal data in AI pipelines.
It is an engineer pasting a real production record into a chat interface at eleven at night to work out why a prompt is failing. No clause prevents this and no training session prevents it either. What prevents it is a staging dataset of realistic synthetic records that is genuinely good enough to debug against, plus a rule that production data never leaves the pipeline. Write the rule into the contract if you want it on paper, then go and build the synthetic set, because the set is the part that works.
Liability sized to permissions, not to the fee
Size the liability conversation to what the system is permitted to do. If the cap and the blast radius do not meet, take permissions away rather than negotiating the cap upwards, because reducing permissions is a change you can make and a higher cap is a payment you might receive.
The arithmetic is uncomfortable and worth doing anyway. If an agent can issue refunds, the worst case is bounded by the refund limit multiplied by the rate at which it can act before a human notices, so the exposure is a number you can calculate. If it can send email to your customer list, the worst case is reputational and unbounded, and no cap addresses it. A liability cap set at the project fee, which is the market default, is entirely reasonable for a reporting pipeline and is theatre for an agent holding write access to a billing system.
On indemnity for model output: ask whether the supplier indemnifies you against infringement claims arising from what the model generates, and expect the answer to be no or heavily qualified. That is not a supplier being difficult. They cannot control what the model produces, and they are mostly passing through whatever protection the provider offers at whatever account tier you are on. The useful version of this clause is not an indemnity at all. It is a term requiring specific provider tiers, and requiring that any generated asset reaching a customer passes a named review step, which is a control you can actually verify. Design of that step is covered in guardrails without breaking things.
Payment gates instead of a calendar
Tie payments to gates that produce evidence rather than to months elapsed. Each gate should be a thing that either happened or did not, verifiable by someone on your side, and the final one should sit on the far side of a production soak rather than on the day the repository is transferred.
Before any build work is paid for, the current process is measured and the acceptance case set exists, is split into visible and held out portions, and is frozen. This gate protects both parties. A supplier who cannot extract a baseline from you is heading into a project where nobody will agree what better looks like. Method in baseline before automation.
The system reaches the agreed score per failure category on the held out portion, run by your engineer from a clean clone of the repository. Not demonstrated on the supplier's laptop, because a demonstration on their machine tests their machine.
Your named owner ships one real change alone, swaps the model version through config only, and diagnoses a planted fault from logs and traces without help. This is the gate that sets the cost of your next year, and it is the one suppliers will most want to fold into Gate 1.
An agreed period of live traffic within the agreed failure rate per category. Length is set by volume, not by convenience, and it has to be long enough to contain a full weekly cycle and a month end, because those are where the input distribution changes.
A share of the fee retained until Gate 3 clears. Agree the percentage at kickoff, when it is one line in a schedule. Agreeing it at the end, when the supplier has already moved their team onto the next engagement, is a different conversation entirely.
A gate structure that only protects the buyer gets priced in, and you pay for it anyway with less goodwill. Pair each gate with a client obligation and a defined response window: the baseline data arrives by a date, subject matter experts are available for a stated number of hours, environment access is granted within a stated number of days. A supplier blocked by a client for three weeks should be able to point at the schedule, otherwise the gates become a mechanism for shifting your own delays onto their margin.
The exit schedule you can lift
Write the exit schedule at signature, while both parties are optimistic and it costs nothing. The test of a good one is not its length. It is whether a client engineer could stand the system up from the listed materials without sending a single message to the supplier.
SCHEDULE E: EXIT AND CONTINUITY
Attach to the statement of work. This is the technical schedule. Have counsel
draft the legal frame around it.
E1) DELIVERY ON TERMINATION OR COMPLETION
Within ten business days of either event, the Supplier delivers into
repositories and cloud accounts controlled by the Client:
a) application source, infrastructure as code, and build scripts
b) all prompt templates and their full version history, together with the
record showing which version was live on which date
c) the acceptance evaluation set, the golden answers, the harness, and the
last full result file broken down per failure category
d) any fine tuning dataset and any resulting adapter or weights
e) retrieval configuration: chunking parameters, embedding model and
version, index build script, and the source document manifest
f) run logs for the retention period defined in Schedule D, exportable in
a documented format
g) a credential inventory listing every secret the Supplier held, the
system each one opens, and the rotation procedure
h) a written model change procedure covering how to move the system to a
new model version and re-run acceptance
E2) REPRODUCIBILITY TEST
Delivery is not complete until a Client engineer, working from the delivered
materials alone and without contacting the Supplier, brings the system up in
a Client environment and runs the evaluation suite to a score within ____
percent of the accepted score.
E3) TRANSITION ASSISTANCE
The Supplier provides up to ____ days of assistance at the rates in Schedule
B, available for ____ months after termination, usable for incident support
and for one model re-qualification.
E4) NO LOCK BY OMISSION
The Supplier warrants that the delivered system contains no dependency on a
Supplier owned service, account, licence or hosted component that the Client
cannot obtain directly. Any such dependency is listed below with the cost and
term of the Client's direct access:
____
E5) SURVIVING RESTRICTIONS
The training rights and data reuse restrictions in Schedule D survive
termination of this agreement.
E6) NO DEGRADED HANDOVER
Nothing in the delivered materials may be withheld, redacted or summarised on
the grounds that it constitutes Supplier method, except items expressly
listed in the Supplier retained materials schedule agreed at signature.
A word on source code escrow, which procurement often asks for and which is close to useless in AI work. The code is the part you could rewrite. What you cannot recreate is the evaluation set, the prompt history with results attached, and the knowledge of which twenty approaches were tried and rejected. If escrow makes someone comfortable, escrow the artifacts in E1. Better still, never let those artifacts live anywhere except your own repository from the first week, at which point the escrow question stops being interesting.
Clause E6 exists because of a specific pattern. A supplier delivers everything on the list and delivers the prompts as a cleaned final version with the history removed, on the reasonable sounding basis that the intermediate versions are their method. The history is precisely what you needed, because it records what was tried and what it scored. Agree the retained materials list at signature so the argument happens when it is cheap.
Terms worth being precise about, and the pre-signature check
- Acceptance evaluation set
- A fixed collection of real input cases with the correct output recorded for each, agreed before the build starts and used as the sole instrument of acceptance. It is normally split into a visible portion the supplier may tune against and a held out portion revealed only at acceptance.
- Held out set
- The portion of the acceptance cases the supplier never sees during development. It exists because a system tuned against every case it will later be tested on measures memorisation rather than capability, and the difference between the two only becomes visible on production traffic.
- Error budget
- The failure rate a system is permitted in production, stated per failure category and measured on live traffic rather than on the evaluation set. It converts an argument about whether the system is defective into a comparison against a number both parties signed.
- Model version pin
- A named provider, model and version string written into the contract, to which every performance commitment attaches. Without a pin, a warranty describes an object that changes on the provider's release schedule rather than on yours, and it becomes unenforceable in both directions.
- Sub-processor
- Any third party that processes your data on the supplier's behalf, which for an AI system includes the model provider, the vector database host and the observability vendor. Each named sub-processor is a company your users' text physically reaches.
- Holdback
- A share of the fee retained until a post go-live gate is met, as distinct from a warranty period with no money attached to it. Its purpose is to keep the supplier commercially present during the weeks when the real failure modes appear.
This is an engineering checklist for the technical schedules of an AI contract, written by people who build these systems and then live inside them for a few years. It is not legal advice and none of it substitutes for counsel drafting the frame it sits in. The division that works in practice is that your lawyer owns liability, jurisdiction, termination and the rest of the legal architecture, and you own the schedules describing what the thing is, what it must score, and how anyone will know it still works next year.
Questions readers ask next
Can acceptance criteria for an LLM system be written as a percentage?
Who should own the prompts in an AI development contract?
What happens contractually when the model provider retires the version we built on?
Is source code escrow worth asking for on an AI project?
Should the liability cap be higher for an autonomous agent?
How big should the acceptance evaluation set be?
Do we need a separate data processing agreement for AI work?
ChatGPTalker. "Contract Terms That Actually Matter for AI Projects." chatgptalker.com, 2026-08-26. https://chatgptalker.com/guides/ai-project-contract-terms/