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
- Specification, vectors and conformance suite: https://verify.modelmarket.dev
- Verifier package: https://pypi.org/project/awr/
- Paste a receipt into a browser verifier: https://verify.modelmarket.dev
MIT.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74106b3fabcf8856b9d2de9bd4b2620f6fcd14bae83e4d11ad433ee2d26b12d8
|
|
| MD5 |
16f22a7d28060b335d09224faff08f57
|
|
| BLAKE2b-256 |
b4fc5bc42a4af03f4502d2e676f51aa6d9cbe5424dafc729e323879cbc29e8ad
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6da1238175859802ebcf7a515b8c2d9f6db24b1608f60cb3f42247a9ee6aa3c3
|
|
| MD5 |
ddef08acf98de3c316326dd6ceb8c506
|
|
| BLAKE2b-256 |
4327e9b05666392b4e20f4fbb7c014daf2dbbad2dc8001f4fb8c127f6165d7b8
|