Skip to main content

eucompliance-ai-act

EU AI Act Article 50 disclosure for deployers — one line, and your content never leaves your system.

Article 50 of the EU AI Act has applied since 2 August 2026. If you build someone else's model into your product, you are the deployer and the disclosure obligation is yours — not the model provider's. Exposure is up to EUR 15 million or 3 % of worldwide annual turnover (Art. 99(4)(g)).

pip install eucompliance-ai-act
from eucompliance_ai_act import wrap
from openai import OpenAI

client = wrap(OpenAI(), deployer="Muster GmbH")

response = client.chat.completions.create(model="gpt-5", messages=[...])
print(response.disclosure)          # the text you must show your users
print(response.disclosure.record)   # the signed provenance record, for your files

Nothing else changes: same calls, same return values, same errors.

Already using LiteLLM or LangChain?

import litellm
from eucompliance_ai_act.integrations import litellm_logger

log = litellm_logger(deployer="Muster GmbH")
litellm.callbacks = [log]          # every model behind the proxy, one line
from eucompliance_ai_act.integrations import langchain_callback

log = langchain_callback(deployer="Muster GmbH")
chain.invoke(input, config={"callbacks": [log]})

Both run the disclosure on a background thread — your model call never waits for us — and swallow their own errors, so nothing here can take your application down. log.last is the most recent record, log.summary() the tally, and file="disclosures.jsonl" writes them straight to disk.

Haystack and LlamaIndex too

# Haystack — a component you drop in after the generator
from eucompliance_ai_act.integrations import haystack_component

pipe.add_component("disclosure", haystack_component(deployer="Muster GmbH"))
pipe.connect("llm.replies", "disclosure.replies")
# LlamaIndex — an event handler on every model call
import llama_index.core.instrumentation as instrument
from eucompliance_ai_act.integrations import llamaindex_handler

instrument.get_dispatcher().add_event_handler(
    llamaindex_handler(deployer="Muster GmbH"))

None of these frameworks — LiteLLM, LangChain, Haystack, LlamaIndex — becomes a dependency of this package; the classes are located at call time, so installing eucompliance-ai-act pulls in nothing you did not already have.

Your content never leaves your system

This is the point of the design, not a footnote.

The library computes the SHA-256 of the output locally and transmits only that hash. We attest a hash we cannot reverse. Verification works by recomputing, so nothing is lost — and there is no data-protection question to answer, no latency added on the content path, and no liability for us over data we never saw.

{"provenance": {"content_sha256": "e3b0c442…", "hashed_by": "client"}}

What you get back

  • The disclosure text in German or English, in the wording required for your case — generated content, edited content, deepfake, or interactive system.
  • A signed provenance record: content hash, model, provider, deployer, timestamp — signed with EIP-191 and verifiable by anyone, free and without an account.
  • The obligations that actually apply to you, with their article references — and if you are neither established in the EU nor serving EU users, it says so instead of selling you something.

Failure does not break you

Two deliberate properties, because a compliance tool that takes down production is removed after the first incident:

  • If our service is unreachable, you still get a valid disclosure text, flagged offline=True. The legal obligation applies regardless of our uptime.
  • If anything in this library fails, your model call still returns normally. The disclosure is attached on a best-effort basis and never raises into your code path.

Reconciling with payment records (x402 / CAAP-1)

If your agent pays for inference over x402 and books it under CAAP-1, the audit binding in your ledger already retains a content hash per entry. Every record this library produces carries the same content_sha256 at the top level — in to_json(), in the file= JSONL of every integration, and in the log_evidence() helper:

from eucompliance_ai_act import disclose, log_evidence

d = disclose(text, model="gpt-5", deployer="Muster GmbH", kind="interaktion")
log_evidence(d)   # appends one line to ai-disclosure-evidence.jsonl

One key, two books: an auditor can join a booked payment to its disclosure record without either system knowing about the other — and without the content itself being stored anywhere. We treat the record layout as a stable contract: additive changes only.

Verifying later

from eucompliance_ai_act import verify
result = verify(response.disclosure.record, content=the_text)
# {'valid': True, 'content_matches': True, ...}

Free, no account. If the content was altered after signing, content_matches is False and the verdict carries receipt_tampered.

What this does and does not prove

Proves: that this exact content was attested as AI-generated by this deployer at this time, and is unchanged since.

Does not prove: that content without a record is human. Reliable detection of AI-written text does not exist — anything sold as such is a coin flip with a price tag. We attest origin. We do not guess it.

Also worth saying: a detachable record can be removed. It protects against alteration, not against omission.

This is a technical attestation, not legal advice. Classifying your own system remains your responsibility.

Pricing

The free tier needs no account: five calls per day per address. Beyond that, POST /x402/ai-disclosure costs $0.01 per call, payable per request in USDC — no account, no subscription. Verification is always free.

import os
os.environ["EUCOMPLIANCE_API_KEY"] = "…"   # optional

Links

MIT licensed. Operated by Patrick Kaufmann, sole proprietor in Vienna, Austria.

Metadata

Release files for eucompliance-ai-act 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eucompliance-ai-act 0.3.1
File Size Uploaded
eucompliance_ai_act-0.3.1.tar.gz 14.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eucompliance-ai-act 0.3.1
File Interpreter ABI Platform
eucompliance_ai_act-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 27.8 kB

Release files / eucompliance_ai_act-0.3.1.tar.gz

Download URL eucompliance_ai_act-0.3.1.tar.gz
Size 14.6 kB
Tags Source
SHA-256 checksum
How to use checksums
14c3dd7bb48b6967436f50b3a41f4ca3889b734fb4e193f35158de32280d55e7
BLAKE2b-256 checksum
How to use checksums
52c75473e50dfacd2bdb815b422d4d943269ef9a5cfad84121776843e03e085c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / eucompliance_ai_act-0.3.1-py3-none-any.whl

Download URL eucompliance_ai_act-0.3.1-py3-none-any.whl
Size 13.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2be5b70f92bec5727707930330a7198f168783a3d436524dc1b1d6f5325def98
BLAKE2b-256 checksum
How to use checksums
2cb210606ad66724439f4f8d4bd7f31be19877fa0148db8e8ea395c1697a0c2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page