Metadata-Version: 2.4
Name: agops-sdk
Version: 0.1.0
Summary: Agent observability SDK for Ag-Ops — wrap your LLM clients, see what your agents do.
Project-URL: Homepage, https://ag-obs.vercel.app
Project-URL: Source, https://github.com/jwadhwa2259/ag-obs
Author-email: Ag-Ops <hello@agops.dev>
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.9
Requires-Dist: httpx>=0.24
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.39; extra == 'anthropic'
Provides-Extra: dev
Requires-Dist: pytest-mock>=3.10; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Provides-Extra: openai
Requires-Dist: openai>=1.0; extra == 'openai'
Description-Content-Type: text/markdown

# agops-sdk

Lightweight observability wrapper for Anthropic and OpenAI Python SDKs. Part of [Ag-Ops](https://ag-obs.vercel.app).

Your API key never leaves your machine. The SDK intercepts each request/response and ships the session log asynchronously — fire-and-forget. SDK errors never break your app.

## Install

```bash
pip install agops-sdk
```

With your LLM client of choice:

```bash
pip install "agops-sdk[anthropic]"   # or [openai]
```

## Quickstart

```python
import agops_sdk
from anthropic import Anthropic

agops_sdk.configure(token="ag_...", project="my-project")
# or set AGOPS_TOKEN + AGOPS_PROJECT env vars

client = agops_sdk.wrap(Anthropic())

# Works exactly like the original client
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello"}],
)

# Streaming works too
with client.messages.stream(...) as stream:
    for text in stream.text_stream:
        print(text)
```

OpenAI works the same way:

```python
import agops_sdk
from openai import OpenAI

client = agops_sdk.wrap(OpenAI())
response = client.chat.completions.create(...)
```

## What gets shipped

Each call ships a session payload containing: model, messages (user + assistant + tool), token counts, duration, timestamps, and errors. The full transcript appears in the Ag-Ops dashboard within seconds.

## Delivery reliability

Failed shipments retry with exponential backoff (3 attempts: 1s, 2s, 4s). On repeated failure, sessions queue to disk at `~/.agops/queue/` and drain on the next successful call.

## Configuration

| Env var          | Purpose                                                 |
| ---------------- | ------------------------------------------------------- |
| `AGOPS_TOKEN`    | Ag-Ops API token (get one from the dashboard).          |
| `AGOPS_PROJECT`  | Project slug — optional, shown in the dashboard feed.   |
| `AGOPS_ENDPOINT` | Override the backend endpoint (default: hosted Ag-Ops). |

## License

MIT
