Metadata-Version: 2.4
Name: provekit
Version: 0.5.0
Summary: Drop-in agent tracing — add one decorator, get a project key, review every run your agent makes.
Author: ProveKit contributors
License: MIT
Project-URL: Homepage, https://github.com/MobirizerServices/ProveKit
Project-URL: Repository, https://github.com/MobirizerServices/ProveKit
Project-URL: Issues, https://github.com/MobirizerServices/ProveKit/issues
Keywords: agent,llm,tracing,observability,opentelemetry,openai,anthropic,otel
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Monitoring
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: httpx<1,>=0.28
Provides-Extra: server
Requires-Dist: fastapi<1,>=0.115; extra == "server"
Requires-Dist: uvicorn[standard]<1,>=0.34; extra == "server"
Requires-Dist: sqlalchemy<3,>=2.0; extra == "server"
Requires-Dist: pydantic<3,>=2.10; extra == "server"
Requires-Dist: pydantic-settings<3,>=2.7; extra == "server"
Requires-Dist: cryptography<50,>=42; extra == "server"
Requires-Dist: anyio<5,>=4; extra == "server"
Requires-Dist: alembic<2,>=1.18; extra == "server"
Requires-Dist: psycopg[binary]<4,>=3.3; extra == "server"
Requires-Dist: email-validator<3,>=2.2; extra == "server"
Requires-Dist: redis<6,>=5.2; extra == "server"
Requires-Dist: sentry-sdk[fastapi]<3,>=2.20; extra == "server"
Provides-Extra: trace
Requires-Dist: opentelemetry-api<2,>=1.20; extra == "trace"
Requires-Dist: opentelemetry-sdk<2,>=1.20; extra == "trace"
Requires-Dist: openinference-instrumentation-openai>=0.1; extra == "trace"
Requires-Dist: openinference-instrumentation-anthropic>=0.1; extra == "trace"
Provides-Extra: http
Requires-Dist: opentelemetry-instrumentation-httpx>=0.40b0; extra == "http"
Requires-Dist: opentelemetry-instrumentation-requests>=0.40b0; extra == "http"
Requires-Dist: opentelemetry-instrumentation-urllib>=0.40b0; extra == "http"
Provides-Extra: trace-all
Requires-Dist: opentelemetry-api<2,>=1.20; extra == "trace-all"
Requires-Dist: opentelemetry-sdk<2,>=1.20; extra == "trace-all"
Requires-Dist: openinference-instrumentation-openai>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-anthropic>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-langchain>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-llama-index>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-crewai>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-bedrock>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-litellm>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-groq>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-mistralai>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-dspy>=0.1; extra == "trace-all"
Requires-Dist: openinference-instrumentation-haystack>=0.1; extra == "trace-all"
Requires-Dist: opentelemetry-instrumentation-httpx>=0.40b0; extra == "trace-all"
Requires-Dist: opentelemetry-instrumentation-requests>=0.40b0; extra == "trace-all"
Requires-Dist: opentelemetry-instrumentation-urllib>=0.40b0; extra == "trace-all"
Provides-Extra: mcp
Requires-Dist: mcp>=1.2; extra == "mcp"
Provides-Extra: dev
Requires-Dist: pytest==9.1.1; extra == "dev"
Requires-Dist: pytest-cov==6.0.0; extra == "dev"
Requires-Dist: ruff==0.9.2; extra == "dev"

# ProveKit

**One decorator. The whole agent flow.** Add one `@pk.trace` at your agent's entrypoint and
review every run — the model calls, tools, and steps — as a nested flow in your ProveKit
portal. OpenAI/Anthropic calls capture themselves. Open source, self-hostable, no framework
lock-in.

## Install

```bash
pip install "provekit[trace]"
```

## Use

```python
import provekit.trace as pk

# .env
#   PROVEKIT_API_KEY=pk_...        (create a project + key in the portal)
#   PROVEKIT_ENDPOINT=https://your-provekit-host

@pk.trace(name="support-agent")
def run_agent(question: str) -> str:
    docs = retrieve(question)          # wrap sub-steps with `with pk.span("retrieve"):`
    return chat(question, docs)        # the OpenAI/Anthropic call captures itself
```

Run your agent, open **Traces** in the portal, and every run shows up as a nested waterfall
with per-span input, output, and token usage.

It's OpenTelemetry under the hood, so your data is portable and nothing is locked in — but
you never have to touch OTel. Fail-open by design: if the key/endpoint are unset or the
portal is unreachable, your app runs completely unaffected.

## Run the portal (self-host)

The web app + ingest server ship in the same package:

```bash
pip install "provekit[server]"
uvicorn provekit.main:app --port 8100
```

See the [repo](https://github.com/MobirizerServices/ProveKit) for Docker/compose and the
full [tracing guide](https://github.com/MobirizerServices/ProveKit/blob/main/docs/TRACING.md).

- Repository: https://github.com/MobirizerServices/ProveKit
- License: MIT
