Skip to main content

Track AI API usage with TokenTally

Project description

TokenTally Python SDK

Track your AI API usage with TokenTally. Get real-time analytics, cost tracking, and usage insights for Claude, OpenAI, and other AI providers.

Installation

pip install tokentally

Quick Start

from tokentally import TokenTally

# Initialize the client with your API key
tt = TokenTally(api_key="tt_your_api_key")

# Track usage manually
response = tt.track(
    tokens_in=150,
    tokens_out=300,
    model="claude-3-sonnet-20240229",
    provider="anthropic",
    metadata={
        "feature": "chat",
        "user_id": "user123",
    }
)

print(f"Recorded! Cost: ${response.cost_usd:.6f}")

Usage with Context Manager

The context manager automatically tracks timing:

from tokentally import TokenTally
import anthropic

tt = TokenTally(api_key="tt_your_api_key")
client = anthropic.Anthropic()

with tt.track_usage(
    model="claude-3-sonnet-20240229",
    metadata={"feature": "summarization"}
) as ctx:
    # Make your API call
    response = client.messages.create(
        model="claude-3-sonnet-20240229",
        max_tokens=1000,
        messages=[{"role": "user", "content": "Summarize this..."}]
    )

    # Set the usage from the response
    ctx.set_usage(
        tokens_in=response.usage.input_tokens,
        tokens_out=response.usage.output_tokens,
        stop_reason=response.stop_reason,
    )

# Usage is automatically sent when the context exits
print(f"Cost: ${ctx.response.cost_usd:.6f}")

Configuration

tt = TokenTally(
    api_key="tt_your_api_key",
    base_url="https://api.tokentally.io",  # Optional custom URL
    timeout=30.0,  # Request timeout in seconds
)

Error Handling

from tokentally import TokenTally, RateLimitError, AuthenticationError, TokenTallyError

tt = TokenTally(api_key="tt_your_api_key")

try:
    tt.track(tokens_in=100, tokens_out=200, model="claude-3-sonnet")
except RateLimitError:
    print("Rate limit exceeded. Upgrade your plan for unlimited usage.")
except AuthenticationError:
    print("Invalid API key. Check your credentials.")
except TokenTallyError as e:
    print(f"Error tracking usage: {e}")

Metadata

Add custom metadata to categorize your usage:

tt.track(
    tokens_in=100,
    tokens_out=200,
    model="claude-3-sonnet-20240229",
    metadata={
        "user_id": "user123",
        "feature_name": "chat_completion",
        "environment": "production",
        "code_path": "services.chat.complete",
        "request_id": "abc-123",
    }
)

Image Generation

Track image generation APIs like Leonardo, DALL-E, and Midjourney using credits, resolution, and quality parameters:

# Leonardo AI
tt.track(
    model="leonardo-phoenix",
    provider="leonardo",
    credits=15,
    resolution="1024x1024",
    quality="high",
)

# OpenAI DALL-E
tt.track(
    model="dall-e-3",
    provider="openai",
    resolution="1024x1024",
    quality="hd",
)

# With context manager
with tt.track_usage(model="leonardo-phoenix", provider="leonardo") as ctx:
    response = leonardo.generate(prompt="A sunset over mountains")

    ctx.set_usage(
        credits=response.credits_used,
        resolution="1024x1024",
        quality="high",
    )

License

MIT License - see LICENSE for details.

Project details


Download files

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

Source Distribution

tokentally-0.3.0.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

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

tokentally-0.3.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file tokentally-0.3.0.tar.gz.

File metadata

  • Download URL: tokentally-0.3.0.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for tokentally-0.3.0.tar.gz
Algorithm Hash digest
SHA256 56de50b401df421afd75effaf828c5fb08123e67410528aa090a52cf08747bc7
MD5 e5581e49c04034059e8ed1cdf9f3f18f
BLAKE2b-256 96aeaaecf0ecd957ec4d7172b173b93981b670498ee254359c3fdf0ead785b7e

See more details on using hashes here.

File details

Details for the file tokentally-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: tokentally-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for tokentally-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 976c5972ac7a6e3a6e7068c54f50ae731a363937772f2bf3b9eef453006ab1c4
MD5 06dc50b3487c8541e78e06a8e34d5d2d
BLAKE2b-256 b937d70486dce04f6fce8331204f77d781b2d0cc65a8dcf5403a580646bf9692

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page