CAWG training and data mining 1.1: notAllowed vs constrained

The CAWG training-and-data-mining assertion has four entries, each allowed, notAllowed or constrained. Constrained with no extra info counts as notAllowed.

4 min readSume
All posts

The CAWG training and data mining assertion, labelled cawg.training-mining, records whether an asset may be used for data mining, AI inference, generative AI training or other AI training. Each entry takes allowed, notAllowed or constrained, and the specification treats constrained as notAllowed when no further information is given. Sume's docs do not describe writing this assertion into generated files.

The entries and values

Version 1.1 of the specification is dated 16 May 2025. The four entry names below are as listed on the specification page.

CAWG training-and-data-mining entries (read 2026-10-04)
EntryWhat it coversValues
cawg.data_miningData mining of the assetallowed, notAllowed, constrained
cawg.ai_inferenceUsing the asset as input to a trained AI modelallowed, notAllowed, constrained
cawg.ai_generative_trainingTraining a generative AI modelallowed, notAllowed, constrained
cawg.ai_trainingTraining an AI modelallowed, notAllowed, constrained

Reading a value safely

The same rule in code: constrained without extra information resolves to notAllowed, so a reader that cannot interpret the extra information should refuse.

import asyncio

ENTRIES = ["cawg.data_mining", "cawg.ai_inference",
           "cawg.ai_generative_training", "cawg.ai_training"]
VALUES = {"allowed", "notAllowed", "constrained"}

def effective(value, extra_info=False):
    # the spec treats constrained with no extra information as notAllowed
    if value not in VALUES:
        raise ValueError(value)
    return "notAllowed" if value == "constrained" and not extra_info else value

async def main():
    for e in ENTRIES:
        print(e, effective("constrained"))

asyncio.run(main())

What Sume does and does not do

Sume's image API stores caller metadata on the job and sends none of it to the provider. That is your own record of an intent, such as a training preference for a delivered file, but it is not the assertion and no consumer reads it as one.

Where to go next

  • Decide the four entries per asset class before delivery.
  • Store the decision with the job id.
  • Create the signed assertion with a tool that supports CAWG.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume