LLM API call token usage-based expense tracker
Project description
TrackMyLLM(cost)
Usage
pip install llm-cost-tracker
1. Example usage for class method:
from tracker.cost_tracker import cost_tracker
from openai import OpenAI, AsyncOpenAI
class Agent:
def __init__(self, model_name, api_key = None):
self.model_name = model_name # nessary
self.costs: dict[str, list[float]] = {} # nessary
if api_key:
self._initialize_client(api_key)
def _initialize_client(self, api_key):
self.client = OpenAI(api_key=api_key)
self.aclient = AsyncOpenAI(api_key=api_key)
# just for compatibility
def total_cost(self):
return float(round(sum(sum(lst) for lst in self.costs.values()), 6))
@cost_tracker.track_cost()
def ask(self, prompt: str):
resp = self.client.chat.completions.create(
model=self.model_name,
messages=[{"role":"user","content":prompt}],
)
return resp, {"model_response": resp.choices[0].message.content}
@cost_tracker.track_cost()
async def aask(self, prompt: str):
resp = await self.aclient.chat.completions.create(
model=self.model_name,
messages=[{"role":"user","content":prompt}],
)
return resp, {"model_response": resp.choices[0].message.content}
test_client = Agent(model_name="gpt-4o-mini")
a, b = test_client.ask("Hello, world!")
print("Individual costs: ", test_client.costs)
print("Total cost: ", format(test_client.total_cost(), "f"))
# Individual costs: defaultdict(<class 'list'>, {'gpt-4o-mini': [8.400000000000001e-06]})
# Total cost: 0.000008
a, b = await test_client.aask("Hello, world!")
print("Individual costs: ", test_client.costs)
print("Total cost: ", format(test_client.total_cost(), "f"))
# Individual costs: {'gpt-4o-mini': [7.65e-06, 7.65e-06]}
# Total cost: 0.000015
2. Example usage for single function:
from openai import OpenAI
from tracker.cost_tracker import cost_tracker
model_name = "gpt-4o-mini"
client = OpenAI()
@cost_tracker.track_cost()
def generate(model_name, prompt):
completion = client.chat.completions.create(
model = model_name,
max_tokens=8192,
messages=[
{
"role":"system",
"content":"Your a Great AI"
},
{
"role":"user",
"content":prompt
}
],
)
return completion
response = generate(model_name, "Hello, world!")
print("Individual costs: ", cost_tracker.costs)
print("Total cost: ", format(cost_tracker.total_cost(), "f"))
# Individual costs: defaultdict(<class 'list'>, {'gpt-4o-mini': [8.400000000000001e-06]})
# Total cost: 0.000008
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
llm_cost_tracker-0.1.13.tar.gz
(12.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_cost_tracker-0.1.13.tar.gz.
File metadata
- Download URL: llm_cost_tracker-0.1.13.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f415209b887a7d6dc1acbedc8261e04e0ef02706058086b23566aa90761e174
|
|
| MD5 |
128d3a0dd953205ea6c36b9c9504cc41
|
|
| BLAKE2b-256 |
59950e559624bb9f5eb11cc460ee03a95f84bb28ddc1855e240acf0f29e368aa
|
File details
Details for the file llm_cost_tracker-0.1.13-py3-none-any.whl.
File metadata
- Download URL: llm_cost_tracker-0.1.13-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cbf2acf405d2191446f776188ac59fd7c4ec0da428bec31f1cf911592669e41
|
|
| MD5 |
ac7ea5bc0d65bd18786277aa9f69cf3a
|
|
| BLAKE2b-256 |
a8229e856201c5ac2330912d1a41e09f9baafab6814fbbe28963208210d6498b
|