Metadata-Version: 2.4
Name: evalytic-sdk
Version: 0.3.2
Summary: Zero-throw LLM observability SDK for OpenAI, Anthropic, Gemini, Groq, Mistral, and Cohere
License: MIT
Keywords: anthropic,gemini,llm,observability,openai,tracing
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27.0
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.20.0; extra == 'anthropic'
Provides-Extra: dev
Requires-Dist: mypy>=1.9.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.4.0; extra == 'dev'
Provides-Extra: gemini
Requires-Dist: google-generativeai>=0.7.0; extra == 'gemini'
Provides-Extra: openai
Requires-Dist: openai>=1.0.0; extra == 'openai'
Description-Content-Type: text/markdown

# Evalytic Python SDK

Zero-throw LLM observability — one line of code, full visibility into every call.

## Install

```bash
pip install evalytic
```

## Quickstart

```python
from evalytic import Evalytic

e = Evalytic(api_key="evl_...")  # or set EVALYTIC_API_KEY env var

# Wrap any supported provider client
import anthropic
client = e.wrap(anthropic.Anthropic())

# Per-user tracking
client = e.wrap(anthropic.Anthropic(), user="user_123")
```

## Supported providers

```python
# Anthropic
import anthropic
client = e.wrap(anthropic.Anthropic())

# OpenAI
from openai import OpenAI
client = e.wrap(OpenAI())

# Groq
from groq import Groq
client = e.wrap(Groq())

# Mistral
from mistralai import Mistral
client = e.wrap(Mistral(api_key="..."))

# Cohere
import cohere
client = e.wrap(cohere.Client("..."))

# Google Gemini
import google.generativeai as genai
model = e.wrap(genai.GenerativeModel("gemini-2.0-flash"))
```

## Config file

Create `.evalytic` in your project root (automatically gitignored):

```
EVALYTIC_API_KEY=evl_...
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
```

All keys are loaded as environment variables when `Evalytic()` is instantiated.

## Per-user cost tracking

```python
# Per-wrap: attach a user to a specific client instance
client = e.wrap(anthropic.Anthropic(), user="alice")

# Global default: all clients use this user unless overridden
e.set_user("alice")
client = e.wrap(anthropic.Anthropic())
```

User stats appear in the Evalytic dashboard under the Users tab (Pro plan).

## Setup wizard

```bash
python -m evalytic.setup
```

## Dashboard

[evalytic-dashboard.vercel.app](https://evalytic-dashboard.vercel.app)
