| """简单的 token 估算,不追求精确""" | |
| from __future__ import annotations | |
| from typing import Any, Dict | |
| def estimate_input_tokens(payload: Dict[str, Any]) -> int: | |
| """粗略估算 token 数:字符数 / 4 + 图片固定值""" | |
| total_chars = 0 | |
| image_count = 0 | |
| # 统计所有文本字符 | |
| def count_str(obj: Any) -> None: | |
| nonlocal total_chars, image_count | |
| if isinstance(obj, str): | |
| total_chars += len(obj) | |
| elif isinstance(obj, dict): | |
| # 检测图片 | |
| if obj.get("type") == "image" or "inlineData" in obj: | |
| image_count += 1 | |
| for v in obj.values(): | |
| count_str(v) | |
| elif isinstance(obj, list): | |
| for item in obj: | |
| count_str(item) | |
| count_str(payload) | |
| # 粗略估算:字符数/4 + 每张图片300 tokens | |
| return max(1, total_chars // 4 + image_count * 300) | |