token-metrics 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ Metadata-Version: 2.4
2
+ Name: token-metrics
3
+ Version: 0.1.0
4
+ Summary: A simple token utilization tracking library for LLM APIs
5
+ Author: Monica P
6
+ Requires-Dist: litellm
7
+ Dynamic: author
8
+ Dynamic: requires-dist
9
+ Dynamic: summary
@@ -0,0 +1,3 @@
1
+ [build-system]
2
+ requires = ["setuptools", "wheel"]
3
+ build-backend = "setuptools.build_meta"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,10 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name="token-metrics",
5
+ version="0.1.0",
6
+ packages=find_packages(),
7
+ install_requires=["litellm"],
8
+ description="A simple token utilization tracking library for LLM APIs",
9
+ author="Monica P",
10
+ )
@@ -0,0 +1,3 @@
1
+ from .tracker import TokenUtilizationSystem
2
+
3
+ __all__ = ["TokenUtilizationSystem"]
@@ -0,0 +1,109 @@
1
+ import json
2
+ import uuid
3
+ import os
4
+
5
+
6
+ class TokenUtilizationSystem:
7
+ def __init__(self, db_path="user_database.json"):
8
+ self.db_path = db_path
9
+ self.default_limit = 1_000_000
10
+ self.users = self._load_db()
11
+
12
+ def _load_db(self):
13
+ if os.path.exists(self.db_path):
14
+ with open(self.db_path, 'r', encoding='utf-8') as f:
15
+ return json.load(f)
16
+ return {}
17
+
18
+ def _save_db(self):
19
+ safe = {}
20
+ for uid, data in self.users.items():
21
+ safe[uid] = {
22
+ "name": data["name"],
23
+ "input_tokens_used": data["input_tokens_used"],
24
+ "output_tokens_used": data["output_tokens_used"],
25
+ "token_balance": data["token_balance"]
26
+ }
27
+ with open(self.db_path, 'w', encoding='utf-8') as f:
28
+ json.dump(safe, f, indent=4)
29
+
30
+ def register(self, name):
31
+ """
32
+ Register a new user or return existing user's ID.
33
+
34
+ Args:
35
+ name (str): User's name
36
+ Returns:
37
+ user_id (str)
38
+ """
39
+ for uid, data in self.users.items():
40
+ if data['name'].lower() == name.lower():
41
+ return uid
42
+
43
+ user_id = f"USR-{uuid.uuid4().hex[:6].upper()}"
44
+ self.users[user_id] = {
45
+ "name": name,
46
+ "input_tokens_used": 0,
47
+ "output_tokens_used": 0,
48
+ "token_balance": self.default_limit
49
+ }
50
+ self._save_db()
51
+ return user_id
52
+
53
+ def track(self, user_id, input_tokens, output_tokens):
54
+ """
55
+ Track token usage after a chat response.
56
+
57
+ Args:
58
+ user_id (str): ID returned from register()
59
+ input_tokens (int): prompt_tokens from your LLM response
60
+ output_tokens (int): completion_tokens from your LLM response
61
+ Returns:
62
+ dict with updated usage, or error string if limit exceeded
63
+ """
64
+ user = self.users.get(user_id)
65
+ if not user:
66
+ return "Error: User not found."
67
+
68
+ if user['token_balance'] <= 0:
69
+ return "Token limit of 1,000,000 reached. Please upgrade to Premium."
70
+
71
+ user['input_tokens_used'] += input_tokens
72
+ user['output_tokens_used'] += output_tokens
73
+ user['token_balance'] = max(0, user['token_balance'] - (input_tokens + output_tokens))
74
+ self._save_db()
75
+
76
+ return {
77
+ "input_tokens_used": user['input_tokens_used'],
78
+ "output_tokens_used": user['output_tokens_used'],
79
+ "remaining_balance": user['token_balance']
80
+ }
81
+
82
+ def get_usage(self, user_id):
83
+ """
84
+ Get token usage stats for a user.
85
+
86
+ Args:
87
+ user_id (str): ID returned from register()
88
+ """
89
+ user = self.users.get(user_id)
90
+ if not user:
91
+ return "Error: User not found."
92
+ return {
93
+ "name": user["name"],
94
+ "input_tokens_used": user["input_tokens_used"],
95
+ "output_tokens_used": user["output_tokens_used"],
96
+ "token_balance": user["token_balance"]
97
+ }
98
+
99
+ def has_balance(self, user_id):
100
+ """
101
+ Check if user still has token balance remaining.
102
+
103
+ Args:
104
+ user_id (str): ID returned from register()
105
+ Returns:
106
+ bool
107
+ """
108
+ user = self.users.get(user_id)
109
+ return bool(user and user['token_balance'] > 0)
@@ -0,0 +1,9 @@
1
+ Metadata-Version: 2.4
2
+ Name: token-metrics
3
+ Version: 0.1.0
4
+ Summary: A simple token utilization tracking library for LLM APIs
5
+ Author: Monica P
6
+ Requires-Dist: litellm
7
+ Dynamic: author
8
+ Dynamic: requires-dist
9
+ Dynamic: summary
@@ -0,0 +1,9 @@
1
+ pyproject.toml
2
+ setup.py
3
+ token_metrics/__init__.py
4
+ token_metrics/tracker.py
5
+ token_metrics.egg-info/PKG-INFO
6
+ token_metrics.egg-info/SOURCES.txt
7
+ token_metrics.egg-info/dependency_links.txt
8
+ token_metrics.egg-info/requires.txt
9
+ token_metrics.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ token_metrics