Metadata-Version: 2.4
Name: tokensor
Version: 0.1.0
Summary: LLM token observability SDK — wraps OpenAI and Anthropic clients to capture metadata
Project-URL: Homepage, https://tokensor.com
Project-URL: Repository, https://github.com/tokensor/tokensor
Project-URL: Bug Tracker, https://github.com/tokensor/tokensor/issues
Author-email: Tokensor <hello@tokensor.com>
License: MIT
Keywords: anthropic,cost,llm,observability,openai,tokens
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: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Requires-Dist: httpx>=0.28
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.30; extra == 'anthropic'
Provides-Extra: dev
Requires-Dist: anthropic>=0.30; extra == 'dev'
Requires-Dist: openai>=1.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest-cov>=6.0; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Provides-Extra: openai
Requires-Dist: openai>=1.0; extra == 'openai'
Description-Content-Type: text/markdown

# tokensor

LLM token observability for Python. Wraps your OpenAI or Anthropic client to capture call metadata (model, tokens, cost) and forward it to your Tokensor dashboard — one line of code, zero latency overhead.

## Install

```bash
pip install tokensor
# With OpenAI support:
pip install "tokensor[openai]"
# With Anthropic support:
pip install "tokensor[anthropic]"
```

## Quickstart

Get your API key from [app.tokensor.com](https://app.tokensor.com) → Settings → API Keys.

**OpenAI:**

```python
import os
import openai
import tokensor

client = tokensor.wrap(
    openai.OpenAI(),
    api_key=os.environ["TOKENSOR_API_KEY"],
)

# Use exactly like openai.OpenAI()
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)
```

**Anthropic:**

```python
import os
import anthropic
import tokensor

client = tokensor.wrap(
    anthropic.Anthropic(),
    api_key=os.environ["TOKENSOR_API_KEY"],
)

message = client.messages.create(
    model="claude-3-5-haiku-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
```

## Environment variables

| Variable | Required | Description |
|----------|----------|-------------|
| `TOKENSOR_API_KEY` | yes | Your Tokensor API key |
| `TOKENSOR_HOST` | no | Override API host (default: `https://api.tokensor.com`) |

## License

MIT
