Skip to main content

awr-emitter

Emit a signed AWR/2 WorkReceipt in one function call.

There are two sides to AWR and they need different code. A verifier reads a receipt and checks it; that is the awr package. An emitter writes one: it takes what your system just did and signs a document saying so. That is this package. It implements none of the format itself — every byte of canonicalization, every signature and every identifier comes from awr, so an emitted receipt and a verified receipt can never disagree about the rules.

from awr_emitter import emit_receipt, generate_key, jcs_payload

key = generate_key()                      # keep this; its .did is your issuer identity

receipt = emit_receipt(
    key=key,
    model_id="claude-opus-5@anthropic",
    input_payload=jcs_payload({"prompt": "summarise this", "n": 3}),
    output_payload=b"...the model's answer...",
    latency_ms=2340,
)

receipt is a plain dict, ready for json.dump. Anyone can check it without this package and without trusting you:

pip install awr
python -m awr verify receipt.json

The document is a W3C Verifiable Credential 2.0 with an eddsa-jcs-2022 DataIntegrityProof over RFC 8785 canonical bytes, issued under a did:key. Nothing about it is specific to this implementation: an unmodified off-the-shelf VC library verifies it, and there are two other independent verifiers (Rust and browser JavaScript) that agree byte for byte.

What it will not do

It does not verify. That is deliberate and the two jobs stay in different packages — a component that both issues and judges its own work is not evidence of anything.

Framework adapters

awr_emitter.adapters holds bridges to agent frameworks. Each is duck-typed against the framework instead of importing it, so this package depends on no framework and importing the adapters never pulls one in:

adapter use it for
awr_emitter.adapters.langgraph_callback LangChain / LangGraph — a callback handler that emits one receipt per LLM call

Links

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

awr_emitter-2.0.0.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

awr_emitter-2.0.0-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file awr_emitter-2.0.0.tar.gz.

File metadata

  • Download URL: awr_emitter-2.0.0.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for awr_emitter-2.0.0.tar.gz
Algorithm Hash digest
SHA256 74106b3fabcf8856b9d2de9bd4b2620f6fcd14bae83e4d11ad433ee2d26b12d8
MD5 16f22a7d28060b335d09224faff08f57
BLAKE2b-256 b4fc5bc42a4af03f4502d2e676f51aa6d9cbe5424dafc729e323879cbc29e8ad

See more details on using hashes here.

File details

Details for the file awr_emitter-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: awr_emitter-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for awr_emitter-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6da1238175859802ebcf7a515b8c2d9f6db24b1608f60cb3f42247a9ee6aa3c3
MD5 ddef08acf98de3c316326dd6ceb8c506
BLAKE2b-256 4327e9b05666392b4e20f4fbb7c014daf2dbbad2dc8001f4fb8c127f6165d7b8

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page