| 18 | |
| 19 | |
| 20 | def calculate_usage_stats( |
| 21 | messages: List[Dict[str, Any]], |
| 22 | response_content: str, |
| 23 | reasoning_content: Optional[str] = None, |
| 24 | ) -> Dict[str, int]: |
| 25 | prompt_text = "" |
| 26 | for message in messages: |
| 27 | role = message.get("role", "") |
| 28 | content = message.get("content", "") |
| 29 | prompt_text += f"{role}: {content}\n" |
| 30 | prompt_tokens = estimate_tokens(prompt_text) |
| 31 | |
| 32 | completion_text = response_content or "" |
| 33 | if reasoning_content: |
| 34 | completion_text += reasoning_content |
| 35 | completion_tokens = estimate_tokens(completion_text) |
| 36 | total_tokens = prompt_tokens + completion_tokens |
| 37 | return { |
| 38 | "prompt_tokens": prompt_tokens, |
| 39 | "completion_tokens": completion_tokens, |
| 40 | "total_tokens": total_tokens, |
| 41 | } |