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
gpt4_counter = TokenCounter("gpt-4-turbo", limit=8000)
gpt35_counter = TokenCounter("gpt-3.5-turbo", limit=4000)

# Claude modele
claude_counter = TokenCounter("claude-3-sonnet", limit=200000)

# Gemini modele
gemini_counter = TokenCounter("gemini-pro", limit=30720)

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 tiktoken
Anthropic claude-3-sonnet, claude-3-opus Estymacja
Google gemini-pro, gemini-pro-vision Estymacja
Mistral mistral-7b, mixtral-8x7b SentencePiece 🚧
Custom Własne modele Pluginy

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 więcej modeli (LLaMA, PaLM)
  • v0.3.0: CLI interface
  • v0.4.0: Asynchroniczne API
  • v0.5.0: Integracje z popularnymi frameworkami (LangChain, LlamaIndex)
  • 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.1.0.tar.gz (25.1 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.1.0-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for watchtoken-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e74d9b645432e41843fa052ff24f533b376e4859184394ce85a4ad6b946ea694
MD5 5ef525f2220d6702299449864f712f97
BLAKE2b-256 576f06570717483fdc27af2836a6186cfacac647b06fe2522c2cba42fafa2b5f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: watchtoken-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.9 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 99780127b7c72bcc997183c75e807d11a7eb5fd9bc7aef4d9242ef8e9817acce
MD5 58ad0f5b447a01cd6dd6c8df305018fa
BLAKE2b-256 d524133bda46da257248dc3ab5d65aea148b91201f33329a405fe8b875ff1a24

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