rawctx
Tamper-proof receipts for your AI's answers.
When an AI answer is challenged, rawctx records what it said, which sources it used, and a verifiable receipt. It keeps answer evidence and proof review separate from the agent and observability stack you already run.
Install
pip install rawctx
rawctx login
You can also mint a no-signup, hash-only browser receipt from the rawctx Hub. The browser path sends cryptographic fingerprints instead of the question and answer text.
Log an answer
import rawctx
receipt = rawctx.log_answer(
"What is the refund policy?",
"Customers can request a refund within 30 days.",
project_key="support-assistant",
)
print(receipt)
Hash-centered storage is the default. Workspace settings can enable raw question and answer text storage, while hashes remain available when text storage is off.
Select a project and environment
Projects separate applications or services inside one workspace. Environments belong to a project and are used for filtering and deployment-specific credentials.
rawctx projects list
rawctx projects create support-assistant \
--display-name "Support assistant" \
--default-environment production
rawctx environments create staging --project support-assistant
rawctx projects use support-assistant --environment production
rawctx credential create production-writer \
--project support-assistant \
--scope answer_audit:create
credential create prints the plaintext project token once. Store it in a
secret manager. Use rawctx credential revoke CREDENTIAL_ID --project PROJECT
to revoke it.
Applications can select context explicitly or through environment variables:
with rawctx.RawctxClient(
project="support-assistant",
environment="production",
) as client:
client.create_answer_log(question_text="Question", answer_text="Answer")
RAWCTX_PROJECT=support-assistant
RAWCTX_ENVIRONMENT=production
project_key is the canonical method argument. application_key remains a
deprecated compatibility alias and is still sent on existing flat answer and
reconciliation API endpoints. When a new project_key call does not specify an
environment, the SDK leaves it unset so the server can apply the Project's
default environment.
Queue EZKL verification
Install the optional prover runtime and prepare rawctx.ezkl.json once with
the ONNX model, compiled circuit, settings, PK, VK, and workspace-compatible
SRS paths:
pip install 'rawctx[ezkl]'
{
"schema": "rawctx.ezkl.project.v1",
"model_path": "ezkl/model.onnx",
"compiled_circuit_path": "ezkl/network.compiled",
"settings_path": "ezkl/settings.json",
"proving_key_path": "ezkl/pk.key",
"verification_key_path": "ezkl/vk.key",
"srs_path": "ezkl/kzg.srs",
"srs_ref": "kzg_srs_v1"
}
Paths are relative to rawctx.ezkl.json. Set RAWCTX_EZKL_CONFIG when the
file is stored elsewhere.
Set the workspace endpoint and a Project credential in the process environment. Use a workspace login token only for Project and credential administration:
RAWCTX_REGISTRY=https://<workspace-api-host>
RAWCTX_TOKEN=<project-credential>
RAWCTX_PROJECT=ezkl-test
At runtime, no artifact path is passed. The SDK generates and locally verifies the proof, creates the answer log, and queues server verification:
import rawctx
with rawctx.RawctxClient() as client:
result = client.run_ezkl_and_log(
project_key="ezkl-test",
input_data=[[2.0]],
idempotency_key="ezkl:identity:run-001",
)
print(result["log_id"])
print(result["job_id"], result["proof_job"]["status"])
The helper supports a single public rescaled numeric input and output. Local
verification is followed by an asynchronous server job, so queued is not the
final result; wait for adapter_verified. The SRS must match the workspace's
pinned kzg_srs_v1 bundle and must not be regenerated with EZKL. Use a stable
idempotency_key because answer-log and job creation are separate writes.
What rawctx records
- Answer record: application, environment, question and answer text or hashes, idempotency key, policy flags, and status.
- Source evidence:
source_refsfor documents, registered audio or video evidence, answer segments, and purpose-bound retrieval events. - Model-run lineage: model metadata, input and output hashes, configuration hashes, trace IDs, and inference commitments.
- Lifecycle and proof: correction, void, and redaction events plus Merkle inclusion, signed tree-head binding, external anchors, witness receipts, and explicit proof status.
rawctx does not orchestrate model or agent inference and does not replace LangSmith, Langfuse, or another OpenTelemetry runtime. Its optional EZKL helper only runs the proof lifecycle for an already prepared ONNX circuit. rawctx records the evidence object that connects an answer to the sources and trace information needed for review.
Connect OpenTelemetry evidence
rawctx.ingest_otel_trace_bundle() wraps public-safe fields from an existing
OpenTelemetry trace into an answer-audit record. Keep trace ownership in your
current observability system and submit only the identifiers, hashes, and
references needed for answer review.
Do not send observability API keys, private trace URLs, raw tool outputs, or other secrets to rawctx.
Check answer-log completeness
Independent reconciliation compares a short-period external reference set with rawctx answer-audit logs. It detects missing, unexpected, late, duplicate, and unanchored records without becoming an inline decision gate.
rawctx reconcile run reconciliation.json --json
rawctx reconcile findings RUN_ID --json
rawctx reconcile proof RUN_ID --output reconciliation-proof.json
rawctx trust verify reconciliation-proof.json --online
The JSON command keeps the complete API payload in one file. For a CSV export, provide the run envelope and map the source columns locally:
moderation_id,occurred_at,result,source_row_id
mod-123,2026-08-12T09:13:00Z,blocked,row-987
rawctx reconcile run moderation.csv --format csv \
--source-key moderation-daily-export \
--period-start 2026-08-12T00:00:00Z \
--period-end 2026-08-13T00:00:00Z \
--project-key moderation-agent \
--environment production \
--id-column moderation_id \
--time-column occurred_at \
--outcome-column result \
--external-record-id-column source_row_id \
--json
CSV input is a local adapter for the same reconciliation API. It accepts
UTF-8, including a UTF-8 BOM, preserves duplicate rows for duplicate findings,
and rejects files over 10,000 records instead of splitting them automatically.
The Project and Environment can come from the active CLI profile when their
flags are omitted. A .csv suffix is detected automatically; --format can be
used to select json or csv explicitly.
Use a business-system export, provider usage export, or auditor-controlled extract that cannot be rewritten in lockstep with the answer logs. Persisted findings and proofs are commitment-oriented; do not place secrets, raw customer exports, raw PII, or private system URLs in payload metadata.
Review proof state
Proof status distinguishes externally anchored records from pending or local-only evidence. It describes the receipt's verification state; it does not claim that the submitted answer or upstream trace content is true.
rawctx trust proof answer ANSWER_LOG_ID --output proof.json
rawctx trust verify proof.json --online --json
Public documentation
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 rawctx-0.3.46.tar.gz.
File metadata
- Download URL: rawctx-0.3.46.tar.gz
- Upload date:
- Size: 207.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d64e9f882644782bdf25e5fd43d3bf165a658ea3675c44c3e7a129adcccd8805
|
|
| MD5 |
fdf02ff675d1b993ce029f130b1fe2df
|
|
| BLAKE2b-256 |
1502481ba071d770b3208b79e7709aa2055617712b4bc336d3239c7236fa5b1b
|
File details
Details for the file rawctx-0.3.46-py3-none-any.whl.
File metadata
- Download URL: rawctx-0.3.46-py3-none-any.whl
- Upload date:
- Size: 164.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14c249f5fb4650168928159a2dc9f361869a1934b66f98e0c5a957d48e15aa21
|
|
| MD5 |
13cd5826cd54d6ff37b546822bb05692
|
|
| BLAKE2b-256 |
252d48f9e8a7ffade6492e9fae339a5e6718fbd178fc54a1f98ddedf9ec7ac95
|