| 76 | # ============================================================ |
| 77 | |
| 78 | class UsageTracker: |
| 79 | def __init__(self) -> None: |
| 80 | self._latest_turn = TokenUsage() |
| 81 | self._cumulative = TokenUsage() |
| 82 | self._turns: int = 0 |
| 83 | |
| 84 | def record(self, usage: TokenUsage) -> None: |
| 85 | """源码: usage.rs:186-193""" |
| 86 | self._latest_turn = usage |
| 87 | self._cumulative = TokenUsage( |
| 88 | input_tokens=self._cumulative.input_tokens + usage.input_tokens, |
| 89 | output_tokens=self._cumulative.output_tokens + usage.output_tokens, |
| 90 | cache_creation_input_tokens=( |
| 91 | self._cumulative.cache_creation_input_tokens |
| 92 | + usage.cache_creation_input_tokens |
| 93 | ), |
| 94 | cache_read_input_tokens=( |
| 95 | self._cumulative.cache_read_input_tokens |
| 96 | + usage.cache_read_input_tokens |
| 97 | ), |
| 98 | ) |
| 99 | self._turns += 1 |
| 100 | |
| 101 | def current_turn_usage(self) -> TokenUsage: |
| 102 | """源码: usage.rs:196-198""" |
| 103 | return self._latest_turn |
| 104 | |
| 105 | def cumulative_usage(self) -> TokenUsage: |
| 106 | """源码: usage.rs:201-203""" |
| 107 | return self._cumulative |
| 108 | |
| 109 | def turns(self) -> int: |
| 110 | """源码: usage.rs:206-208""" |
| 111 | return self._turns |
| 112 | |
| 113 | |
| 114 | # ============================================================ |