Agent-side SDK for the Prova AI control plane (ingest, gateway-check, register).
Project description
prova-sdk (Python)
Agent-side SDK for the Prova AI control plane. Thin wrappers around:
POST /api/v1/audit/ingestPOST /api/v1/gateway/checkPOST /api/v1/inventory
Plus an Ed25519 receipt verifier and a one-shot migration tool that bulk-imports existing LangSmith / Langfuse / OpenAI logs into the Audit Vault.
Separate from the legacy prova package (the reasoning-chain verifier).
See /docs/sdk for guidance on which one to install.
Install
pip install prova-sdk
Requires Python 3.10+.
Quick start
from prova_cp import ProvaClient
prova = ProvaClient(api_key="prv_...")
prova.ingest({
"kind": "model_call",
"source": {"org_id": "YOUR_ORG", "framework": "langgraph", "app_id": "claims-orchestrator"},
"model": {"provider": "openai", "name": "gpt-4o"},
"payload": {"messages": messages, "response": response},
})
check = prova.gateway_check({"kind": "model_call", "payload": {"messages": messages}})
if check["action"] == "block":
raise PolicyBlocked(check["findings"])
Pass verify_receipts=True to make the client verify every returned receipt's
Ed25519 signature against the published public key before returning.
LangGraph / LangChain auto-instrumentation
Install the optional extra and drop the callback handler into any graph. Every LLM call, node, and tool call is ingested as a signed receipt automatically. No per-node code changes.
pip install "prova-sdk[langgraph]"
from prova_cp import ProvaClient, ProvaCallbackHandler
prova = ProvaClient(api_key="prv_...")
handler = ProvaCallbackHandler(
prova,
app_id="claims-orchestrator",
environment="production",
framework="langgraph",
)
# LangGraph
graph.invoke(inputs, config={"callbacks": [handler]})
# LangChain
chain.invoke(inputs, config={"callbacks": [handler]})
The handler is fail-silent: a Prova outage logs at warning level and never
breaks the agent. LLM calls become model_call receipts, graph nodes become
agent_step, tool calls become tool_call.
CrewAI
CrewAI has no LangChain-style callbacks; use its step_callback /
task_callback hooks instead.
from prova_cp import ProvaClient, ProvaCrewAI
tap = ProvaCrewAI(ProvaClient(api_key="prv_..."), app_id="research-crew")
crew = Crew(agents=[...], tasks=[...],
step_callback=tap.step_callback,
task_callback=tap.task_callback)
Agent steps become agent_step receipts; completed tasks become agent_run.
Raw OpenAI / Anthropic clients (no framework)
Wrap the vendor client once. Every completion is mirrored to a signed receipt. The vendor response is returned unchanged and a Prova failure never raises.
from openai import OpenAI
from prova_cp import ProvaClient, wrap_openai
client = wrap_openai(OpenAI(), ProvaClient(api_key="prv_..."), app_id="support-bot")
client.chat.completions.create(model="gpt-4o", messages=[...]) # auto-ingested
wrap_anthropic is identical for the Anthropic SDK (messages.create).
Migrate existing logs
CLI:
PROVA_API_KEY=prv_... prova-migrate --source langsmith --file runs.ndjson
Programmatic:
from prova_cp import ProvaClient, migrate
from prova_cp.migrate import read_ndjson
with ProvaClient(api_key="prv_...") as client, open("observations.ndjson") as f:
result = migrate(client, "langfuse", read_ndjson(f))
print(result)
Supported sources: langsmith, langfuse, openai. Idempotency keys are
derived from the source row id, so re-running the migration is safe.
Verify a receipt offline
from prova_cp import verify_receipt
verify_receipt(receipt, public_key_pem=PUBLIC_KEY_PEM)
Or fetch the public key from the deployment automatically:
verify_receipt(receipt, base_url="https://api.prova.cobound.dev")
Project details
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 prova_sdk-0.1.0.tar.gz.
File metadata
- Download URL: prova_sdk-0.1.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e86f18cf75a7232563e3025b6bf670f2f3eb7233ca5dfb9aa6f0d8b1631a91cd
|
|
| MD5 |
98444b0d42c2d36baa4174ca9741fcfa
|
|
| BLAKE2b-256 |
9f1b0a37226a7f9878d2f887525d13984ed26d17ed878c9794e8800b59b091cd
|
File details
Details for the file prova_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: prova_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.2 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 |
478d17e44131dcec1ad8fb37d2b05a02b2462d7eae2efcff65c67910095ca00c
|
|
| MD5 |
39e3be00a182be202caacbd5d2be18dd
|
|
| BLAKE2b-256 |
edc1db8786050c6b6fddb3214996707ff2b6b91f863561cb52ee1d182070f58e
|