forked from openai/openai-agents-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusage.py
More file actions
42 lines (33 loc) · 1.6 KB
/
Copy pathusage.py
File metadata and controls
42 lines (33 loc) · 1.6 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
from dataclasses import dataclass, field
from openai.types.responses.response_usage import InputTokensDetails, OutputTokensDetails
@dataclass
class Usage:
requests: int = 0
"""Total requests made to the LLM API."""
input_tokens: int = 0
"""Total input tokens sent, across all requests."""
input_tokens_details: InputTokensDetails = field(
default_factory=lambda: InputTokensDetails(cached_tokens=0)
)
"""Details about the input tokens, matching responses API usage details."""
output_tokens: int = 0
"""Total output tokens received, across all requests."""
output_tokens_details: OutputTokensDetails = field(
default_factory=lambda: OutputTokensDetails(reasoning_tokens=0)
)
"""Details about the output tokens, matching responses API usage details."""
total_tokens: int = 0
"""Total tokens sent and received, across all requests."""
def add(self, other: "Usage") -> None:
self.requests += other.requests if other.requests else 0
self.input_tokens += other.input_tokens if other.input_tokens else 0
self.output_tokens += other.output_tokens if other.output_tokens else 0
self.total_tokens += other.total_tokens if other.total_tokens else 0
self.input_tokens_details = InputTokensDetails(
cached_tokens=self.input_tokens_details.cached_tokens
+ other.input_tokens_details.cached_tokens
)
self.output_tokens_details = OutputTokensDetails(
reasoning_tokens=self.output_tokens_details.reasoning_tokens
+ other.output_tokens_details.reasoning_tokens
)