Skip to main content

A Python library for tracking and controlling token usage in LLM prompts without running the models

Project description

WatchToken

Python 3.8+ License: MIT Code style: black

Biblioteka Pythona do śledzenia i kontroli liczby tokenów w promptach wysyłanych do różnych modeli językowych (LLM), bez konieczności ich uruchamiania.

🚀 Funkcje

  • Obsługa wielu modeli: OpenAI GPT-3.5/4/4-turbo, Claude 3, Gemini, Mistral i inne
  • Tokenizacja bez uruchamiania modelu: Wykorzystuje tiktoken, sentencepiece lub estymacje
  • Elastyczne limity: Definiowanie limitów tokenów per model lub globalnie
  • Inteligentne ostrzeganie: Powiadomienia o przekroczeniu limitów
  • Estymacja kosztów: Obliczanie szacunkowych kosztów na podstawie liczby tokenów
  • Logowanie użycia: Śledzenie użycia tokenów i kosztów
  • Modularna architektura: Łatwa rozbudowa o własne tokenizery i modele
  • Typowanie: Pełne wsparcie dla type hints

📦 Instalacja

pip install watchtoken

Dodatkowe zależności:

# Dla modeli używających SentencePiece
pip install watchtoken[sentencepiece]

# Dla modeli Hugging Face
pip install watchtoken[transformers]

# Wszystkie dodatkowe zależności
pip install watchtoken[sentencepiece,transformers]

🔧 Szybki start

from watchtoken import TokenCounter

# Podstawowe użycie
tc = TokenCounter(model="gpt-4-turbo", limit=8000)

prompt = "Napisz streszczenie 'Pana Tadeusza' w formie opisu filmowego..."

# Sprawdzenie czy prompt przekracza limit
if tc.is_over(prompt):
    print("Zbyt długi prompt!")
else:
    print(f"Zużyto {tc.count(prompt)} tokenów.")

# Estymacja kosztu (zakładając 200 tokenów odpowiedzi)
cost = tc.estimate_cost(prompt, output_tokens=200)
print(f"Szacowany koszt: ${cost:.4f}")

📖 Szczegółowe przykłady

Różne modele

from watchtoken import TokenCounter

# OpenAI modele - najnowsze
gpt4o_counter = TokenCounter("gpt-4o", limit=128000)  # Multimodal
gpt4o_mini_counter = TokenCounter("gpt-4o-mini", limit=128000)  # Ekonomiczny
gpt41_counter = TokenCounter("gpt-4.1", limit=1000000)  # Najnowszy z dużym kontekstem

# Claude modele - najnowsze
claude_sonnet4_counter = TokenCounter("claude-sonnet-4", limit=200000)
claude_haiku_counter = TokenCounter("claude-3-haiku", limit=200000)  # Najszybszy

# Gemini modele
gemini25_pro_counter = TokenCounter("gemini-2.5-pro", limit=1048576)  # Najnowszy Pro
gemini25_flash_counter = TokenCounter("gemini-2.5-flash", limit=1048576)  # Szybki 2.5
gemini25_lite_counter = TokenCounter("gemini-2.5-flash-lite", limit=1000000)  # Ultra-ekonomiczny

Callbacki i obsługa przekroczeń

from watchtoken import TokenCounter

def on_limit_exceeded(tokens: int, limit: int, model: str) -> None:
    print(f"⚠️ Przekroczono limit! {tokens}/{limit} tokenów dla {model}")

tc = TokenCounter(
    model="gpt-4-turbo",
    limit=1000,
    on_limit_exceeded=on_limit_exceeded
)

# Automatyczne wywołanie callbacka przy przekroczeniu
tc.check_limit("Very long prompt...")

Estymacja kosztów z różnymi parametrami

from watchtoken import TokenCounter

tc = TokenCounter("gpt-4-turbo")

prompt = "Analyze this data..."

# Podstawowa estymacja
cost = tc.estimate_cost(prompt, output_tokens=500)

# Z uwzględnieniem dodatkowych parametrów
cost_detailed = tc.estimate_cost(
    prompt,
    output_tokens=500,
    input_multiplier=1.0,  # Standardowa cena za input
    output_multiplier=2.0  # 2x cena za output (typowe dla GPT-4)
)

Logowanie użycia

from watchtoken import TokenCounter, FileLogger

# Logowanie do pliku
logger = FileLogger("token_usage.log")
tc = TokenCounter("gpt-4-turbo", logger=logger)

# Każde użycie zostanie zalogowane
tokens = tc.count("Hello world!")
cost = tc.estimate_cost("Hello world!", output_tokens=10)

🏗️ Architektura

Obsługiwane modele

Provider Model Tokenizer Status
OpenAI gpt-3.5-turbo, gpt-4, gpt-4-turbo, gpt-4o, gpt-4o-mini, gpt-4.1* tiktoken
Anthropic claude-3-haiku, claude-3-sonnet, claude-3-opus, claude-sonnet-4* Estymacja
Google gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-1.5-pro Estymacja
Mistral mistral-7b, mixtral-8x7b SentencePiece
Custom Własne modele Pluginy

*Najnowsze modele z szacowanymi cenami

Własne adaptery

from watchtoken.adapters import BaseAdapter
from watchtoken import TokenCounter

class CustomAdapter(BaseAdapter):
    def count_tokens(self, text: str) -> int:
        # Twoja implementacja tokenizacji
        return len(text.split())
    
    def get_cost_per_token(self) -> tuple[float, float]:
        # (input_cost, output_cost) per token
        return (0.00001, 0.00002)

# Rejestracja własnego adaptera
TokenCounter.register_adapter("my-model", CustomAdapter)

# Użycie
tc = TokenCounter("my-model")

🧪 Rozwój

# Klonowanie repozytorium
git clone https://github.com/yourusername/watchtoken.git
cd watchtoken

# Instalacja w trybie deweloperskim
pip install -e .[dev]

# Uruchomienie testów
pytest

# Formatowanie kodu
black watchtoken tests
isort watchtoken tests

# Sprawdzenie typów
mypy watchtoken

📋 Roadmapa

  • v0.2.0: ✅ Wsparcie dla najnowszych modeli (GPT-4o, Claude Sonnet 4, Gemini 2.5)
  • v0.3.0: CLI interface
  • v0.4.0: Asynchroniczne API
  • v0.5.0: Integracje z popularnymi frameworkami (LangChain, LlamaIndex)
  • v0.6.0: Wsparcie dla więcej modeli (LLaMA, xAI Grok)
  • v1.0.0: Stabilne API, pełna dokumentacja

🤝 Współpraca

Zachęcamy do współpracy! Zobacz CONTRIBUTING.md dla szczegółów.

📄 Licencja

MIT License - zobacz LICENSE dla szczegółów.

🙏 Podziękowania

  • tiktoken - tokenizacja OpenAI
  • sentencepiece - tokenizacja Google
  • Społeczność open-source za inspirację

WatchToken - Kontroluj swoje tokeny, zanim one kontrolują Twój budżet! 💰

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

watchtoken-0.2.2.tar.gz (28.6 kB view details)

Uploaded Source

Built Distribution

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

watchtoken-0.2.2-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file watchtoken-0.2.2.tar.gz.

File metadata

  • Download URL: watchtoken-0.2.2.tar.gz
  • Upload date:
  • Size: 28.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for watchtoken-0.2.2.tar.gz
Algorithm Hash digest
SHA256 efe0bd0eb3f35fbf8049efe4d2de8931d1807fcb11e2a20031d804111cca573f
MD5 2b88cca22291372b5b91635d44a36c52
BLAKE2b-256 500a31e0fa975c4b3b5979571ef45be46aa42e7acb1baeba05996ce072cd29da

See more details on using hashes here.

File details

Details for the file watchtoken-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: watchtoken-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 17.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for watchtoken-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fb1a02db1e273db5f8f1e095011e7dfa7df60447995f26679be32d863f4af4d0
MD5 e81a8379541243ec429ee552f915778c
BLAKE2b-256 b20307dd890d0ab7bf7ed9452b211b72d7d19277799df06f222cfb82cb787faa

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