add Gemini, Anthropic
This commit is contained in:
@@ -254,6 +254,24 @@ def insert_usage(raw_items):
|
||||
ts_utc = parse_rfc3339(payload.get("timestamp"))
|
||||
ts_local = ts_utc.astimezone(LOCAL_TZ)
|
||||
tokens = payload.get("tokens") or {}
|
||||
# Handle different token field naming conventions across providers
|
||||
# OpenAI/Codex: input_tokens, output_tokens, total_tokens, reasoning_tokens, cached_tokens
|
||||
# Gemini/Google: prompt_tokens, completion_tokens, total_tokens
|
||||
# Anthropic: input_tokens, output_tokens
|
||||
# Generic fallback: try multiple possible field names
|
||||
def get_token_int(*keys, default=0):
|
||||
for k in keys:
|
||||
v = tokens.get(k)
|
||||
if v is not None:
|
||||
return int(v)
|
||||
return default
|
||||
|
||||
input_tokens = get_token_int("input_tokens", "prompt_tokens")
|
||||
output_tokens = get_token_int("output_tokens", "completion_tokens")
|
||||
reasoning_tokens = get_token_int("reasoning_tokens")
|
||||
cached_tokens = get_token_int("cached_tokens")
|
||||
total_tokens = get_token_int("total_tokens")
|
||||
|
||||
api_key = payload.get("api_key") or ""
|
||||
api_hash = hashlib.sha256(api_key.encode()).hexdigest()[:12] if api_key else ""
|
||||
values = {
|
||||
@@ -272,11 +290,11 @@ def insert_usage(raw_items):
|
||||
"api_key_hash": api_hash,
|
||||
"failed": 1 if payload.get("failed") else 0,
|
||||
"latency_ms": int(payload.get("latency_ms") or 0),
|
||||
"input_tokens": int(tokens.get("input_tokens") or 0),
|
||||
"output_tokens": int(tokens.get("output_tokens") or 0),
|
||||
"reasoning_tokens": int(tokens.get("reasoning_tokens") or 0),
|
||||
"cached_tokens": int(tokens.get("cached_tokens") or 0),
|
||||
"total_tokens": int(tokens.get("total_tokens") or 0),
|
||||
"input_tokens": input_tokens,
|
||||
"output_tokens": output_tokens,
|
||||
"reasoning_tokens": reasoning_tokens,
|
||||
"cached_tokens": cached_tokens,
|
||||
"total_tokens": total_tokens,
|
||||
"raw_json": raw,
|
||||
}
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user