Skip to main content

provy-sdk

Python SDK for Provy: prove your AI agents actually worked.

Send every session, agent step and evaluation with an ingest key. No database credentials and no Provy-side configuration — close a session and it appears on your dashboard.

A note on names. You may see argus inside: environment variables such as ARGUS_INGEST_KEY and ARGUS_URL still work, and OpenTelemetry attributes are still argus.*. Argus is the original codename, and those names are kept for wire compatibility so existing integrations keep working. Everything you actually type is provy.

Reliability

Telemetry that silently disappears is worse than none, so this client is built not to lose spans:

  • Retries transient failures with backoff, honouring Retry-After. A timeout or a 503 delays your data rather than destroying it.
  • Buffers and batches spans, flushing on a background thread and again at process exit, so a short script cannot end with telemetry still in memory.
  • Never silent. Anything dropped is counted and logged, and the counts are readable at client.buffer_stats. Telemetry being switched off is announced too, once, on stderr.
  • Never duplicates. Every span carries an id, so the server can recognise a retried write as the same span rather than a second one.
  • Never raises into your agent. A failed send is our problem, not a crash in your pipeline.

Install

pip install provy-sdk

The base install is the ingest client only (just requests). Optional extras:

Extra Adds For
provy-sdk[otel] OpenTelemetry SDK streaming existing OTel spans via ProvyExporter
provy-sdk[judge] anthropic running the LLM-as-judge in your own pipeline (circuit breakers)
provy-sdk[engine] supabase the legacy direct-to-database path (prefer the ingest API instead)

Connect

Get an ingest key from Provy: Agent Fleets → your fleet → Reveal key. Set it in your environment:

export PROVY_API_KEY=provy_...
export PROVY_EMIT=1              # required, see below
# optional, defaults to the hosted app:
export PROVY_URL=https://provy.ai

That key authenticates your fleet. It is the only credential you need. Keys issued before mid-2026 begin with argus_ and still work.

PROVY_EMIT: read this before your first run

Nothing is sent unless PROVY_EMIT=1 is set (or you pass enabled=True to the client). With it unset the client is a deliberate no-op: open_session() returns a local id, everything else does nothing, and your code runs unchanged.

This exists so a laptop run holding production credentials cannot write into your production Provy. Set it in the environments that should report (production, staging, CI) and leave it off on your machine.

The client logs one warning to stderr the first time it suppresses anything, so a run that reports nothing tells you why. Before 0.5.1 it did not, and the only clue was an empty dashboard.


Quickstart — direct ingest

from provy import ProvyClient

provy = ProvyClient()  # reads PROVY_API_KEY from the environment

session_id = provy.open_session("premarket")

provy.trace(
    session_id = session_id,
    agent      = "research",
    step_type  = "agent_step",          # llm_call | tool_call | agent_step | decision | error
    outcome    = "Generated AAPL thesis",
    latency_ms = 1240,
    tokens_in  = 800,
    tokens_out = 150,
)

provy.close_session(session_id, result_summary="Trade plan ready")

Open Sessions in Provy — your run appears within seconds.

The decorator form auto-traces a function:

@provy.trace_fn(agent="research", step_type="agent_step")
def run_research(ticker):
    ...

run_research("AAPL", session_id=session_id)

Already on OpenTelemetry?

If your pipeline emits OTel spans (LangChain, CrewAI, AutoGen, LlamaIndex, or raw OTel), attach the exporter and stream them — no per-step calls:

pip install "provy-sdk[otel]"
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from provy import ProvyExporter

provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(ProvyExporter(api_key="provy_...")))

Provy auto-detects the convention (OpenInference, OpenLLMetry/Traceloop, Langfuse, OTel GenAI) and builds the session from your spans.


Quality scoring

By default Provy runs the LLM-as-judge server-side on the traces you send — no SDK code, no key of yours. Configure criteria in Eval Manager and scores appear on the Quality page.

Run the judge in your own pipeline only when you want the verdict before an output is used (circuit breakers):

pip install "provy-sdk[judge]"   # adds anthropic
from provy import evaluate_session_outputs

evaluate_session_outputs(session_id, {"research": research_output_text})

Needs ANTHROPIC_API_KEY in your environment. Same judge core as the server side.


Business outcomes

For metrics you compute yourself (no LLM), write them with write_eval() — they land in Outcomes:

from provy import write_eval

write_eval(
    session_id = session_id,
    eval_name  = "approval_rate",
    agent      = "risk",
    score      = 0.6,
    passed     = True,
    threshold  = 0.2,
    reasoning  = "3 of 5 proposals approved",
)

API reference

ProvyClient(ingest_key=None, base_url=None)

Reads PROVY_API_KEY / PROVY_URL from the environment when arguments are omitted (legacy ARGUS_INGEST_KEY / ARGUS_URL still work).

Method When to call
open_session(session_type, external_id=None, metadata=None) start of a run; returns session_id
trace(session_id, agent, step_type, outcome, ...) each step; returns the span id
close_session(session_id, status="completed", result_summary=None, terminal_reason=None) end of the run
trace_fn(agent, step_type="agent_step") decorator that auto-traces a function

ProvyExporter(api_key, endpoint=None)

OTel SpanExporter. Attach to any TracerProvider. Needs the otel extra.

evaluate_session_outputs(session_id, agent_outputs)

Client-side LLM-as-judge. Needs the judge extra and ANTHROPIC_API_KEY.

write_eval(session_id, eval_name, agent, score, passed, threshold, reasoning, layer=5)

Writes one business-outcome eval row.

Legacy: TraceLogger (direct database writes via the engine extra) predates the ingest API. New pipelines should use ProvyClient. TraceLogger remains for existing internal pipelines.


Examples

  • examples/otel_quickstart.py — stream OTel spans to Provy
  • examples/github-actions-otel.yml — run a pipeline in GitHub Actions and stream to Provy

Support

Open an issue at github.com/amitgarg73/provy-sdk.

Download files

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

Source Distribution

provy_sdk-0.5.4.tar.gz (54.8 kB view details)

Uploaded Source

Built Distribution

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

provy_sdk-0.5.4-py3-none-any.whl (45.0 kB view details)

Uploaded Python 3

File details

Details for the file provy_sdk-0.5.4.tar.gz.

File metadata

  • Download URL: provy_sdk-0.5.4.tar.gz
  • Upload date:
  • Size: 54.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for provy_sdk-0.5.4.tar.gz
Algorithm Hash digest
SHA256 bd588b79a992ba6d9da3400852c46327a43d505a1308ffd8209959b623faf920
MD5 ac1224a74bc8b670d9629fee521afd9a
BLAKE2b-256 0d6d699823c589377ade422671da8f1323394dd3597044012f657021fdaad94c

See more details on using hashes here.

Provenance

The following attestation bundles were made for provy_sdk-0.5.4.tar.gz:

Publisher: publish.yml on amitgarg73/provy-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file provy_sdk-0.5.4-py3-none-any.whl.

File metadata

  • Download URL: provy_sdk-0.5.4-py3-none-any.whl
  • Upload date:
  • Size: 45.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for provy_sdk-0.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 139cccd2d234dabc04d2445baf0a45b53f044c3695a140619c22826a7b1bc422
MD5 57024f1a48c534756377e1b0f3275738
BLAKE2b-256 26e47f5a48305d15de5efeda0c89352e6661a8609ee07899c9224cbf1c8f2db2

See more details on using hashes here.

Provenance

The following attestation bundles were made for provy_sdk-0.5.4-py3-none-any.whl:

Publisher: publish.yml on amitgarg73/provy-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.6.1

2 files

0.6.0

2 files

This release

0.5.4 This release

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 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