Spaces:
Paused
Paused
| from typing import Any, Dict, List, Optional | |
| def estimate_tokens(text: str) -> int: | |
| if not text: | |
| return 0 | |
| chinese_chars = sum( | |
| 1 | |
| for char in text | |
| if "\u4e00" <= char <= "\u9fff" | |
| or "\u3000" <= char <= "\u303f" | |
| or "\uff00" <= char <= "\uffef" | |
| ) | |
| non_chinese_chars = len(text) - chinese_chars | |
| chinese_tokens = chinese_chars / 1.5 | |
| english_tokens = non_chinese_chars / 4.0 | |
| return max(1, int(chinese_tokens + english_tokens)) | |
| def calculate_usage_stats( | |
| messages: List[Dict[str, Any]], | |
| response_content: str, | |
| reasoning_content: Optional[str] = None, | |
| ) -> Dict[str, int]: | |
| prompt_text = "" | |
| for message in messages: | |
| role = message.get("role", "") | |
| content = message.get("content", "") | |
| prompt_text += f"{role}: {content}\n" | |
| prompt_tokens = estimate_tokens(prompt_text) | |
| completion_text = response_content or "" | |
| if reasoning_content: | |
| completion_text += reasoning_content | |
| completion_tokens = estimate_tokens(completion_text) | |
| total_tokens = prompt_tokens + completion_tokens | |
| return { | |
| "prompt_tokens": prompt_tokens, | |
| "completion_tokens": completion_tokens, | |
| "total_tokens": total_tokens, | |
| } | |