File size: 1,233 Bytes
f580ad3 |
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 |
"""
Monitoring utilities for tracking execution timing and token usage.
"""
from dataclasses import dataclass, field
__all__ = ["Timing", "TokenUsage"]
@dataclass
class TokenUsage:
"""
Contains the token usage information for a given step or run.
"""
input_tokens: int
output_tokens: int
total_tokens: int = field(init=False)
def __post_init__(self):
self.total_tokens = self.input_tokens + self.output_tokens
def dict(self):
return {
"input_tokens": self.input_tokens,
"output_tokens": self.output_tokens,
"total_tokens": self.total_tokens,
}
@dataclass
class Timing:
"""
Contains the timing information for a given step or run.
"""
start_time: float
end_time: float | None = None
@property
def duration(self):
return None if self.end_time is None else self.end_time - self.start_time
def dict(self):
return {
"start_time": self.start_time,
"end_time": self.end_time,
"duration": self.duration,
}
def __repr__(self) -> str:
return f"Timing(start_time={self.start_time}, end_time={self.end_time}, duration={self.duration})"
|