-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.py
More file actions
70 lines (57 loc) · 2.48 KB
/
logger.py
File metadata and controls
70 lines (57 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
import logging
from logging.handlers import RotatingFileHandler
class SessionLogger:
def __init__(self, session_id: str, sessions_dir: str):
self.session_id = session_id
self.sessions_dir = sessions_dir
self.logger = self._setup_logging()
# Initialize token counters
self.total_input_tokens = 0
self.total_output_tokens = 0
def _setup_logging(self) -> logging.Logger:
"""Configure logging for the session"""
log_formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(prefix)s - %(message)s"
)
log_file = os.path.join(self.sessions_dir, f"{self.session_id}.log")
file_handler = RotatingFileHandler(
log_file, maxBytes=1024 * 1024, backupCount=5
)
file_handler.setFormatter(log_formatter)
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
logger = logging.getLogger(self.session_id)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.setLevel(logging.DEBUG)
return logger
def update_token_usage(self, input_tokens: int, output_tokens: int):
"""Update the total token usage."""
self.total_input_tokens += input_tokens
self.total_output_tokens += output_tokens
def log_total_cost(self):
"""Calculate and log the total cost based on token usage."""
cost_per_million_input_tokens = 3.0 # $3.00 per million input tokens
cost_per_million_output_tokens = 15.0 # $15.00 per million output tokens
total_input_cost = (
self.total_input_tokens / 1_000_000
) * cost_per_million_input_tokens
total_output_cost = (
self.total_output_tokens / 1_000_000
) * cost_per_million_output_tokens
total_cost = total_input_cost + total_output_cost
prefix = "📊 session"
self.logger.info(
f"Total input tokens: {self.total_input_tokens}", extra={"prefix": prefix}
)
self.logger.info(
f"Total output tokens: {self.total_output_tokens}", extra={"prefix": prefix}
)
self.logger.info(
f"Total input cost: ${total_input_cost:.6f}", extra={"prefix": prefix}
)
self.logger.info(
f"Total output cost: ${total_output_cost:.6f}", extra={"prefix": prefix}
)
self.logger.info(f"Total cost: ${total_cost:.6f}", extra={"prefix": prefix})