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_utc = parse_rfc3339(payload.get("timestamp"))
|
||||||
ts_local = ts_utc.astimezone(LOCAL_TZ)
|
ts_local = ts_utc.astimezone(LOCAL_TZ)
|
||||||
tokens = payload.get("tokens") or {}
|
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_key = payload.get("api_key") or ""
|
||||||
api_hash = hashlib.sha256(api_key.encode()).hexdigest()[:12] if api_key else ""
|
api_hash = hashlib.sha256(api_key.encode()).hexdigest()[:12] if api_key else ""
|
||||||
values = {
|
values = {
|
||||||
@@ -272,11 +290,11 @@ def insert_usage(raw_items):
|
|||||||
"api_key_hash": api_hash,
|
"api_key_hash": api_hash,
|
||||||
"failed": 1 if payload.get("failed") else 0,
|
"failed": 1 if payload.get("failed") else 0,
|
||||||
"latency_ms": int(payload.get("latency_ms") or 0),
|
"latency_ms": int(payload.get("latency_ms") or 0),
|
||||||
"input_tokens": int(tokens.get("input_tokens") or 0),
|
"input_tokens": input_tokens,
|
||||||
"output_tokens": int(tokens.get("output_tokens") or 0),
|
"output_tokens": output_tokens,
|
||||||
"reasoning_tokens": int(tokens.get("reasoning_tokens") or 0),
|
"reasoning_tokens": reasoning_tokens,
|
||||||
"cached_tokens": int(tokens.get("cached_tokens") or 0),
|
"cached_tokens": cached_tokens,
|
||||||
"total_tokens": int(tokens.get("total_tokens") or 0),
|
"total_tokens": total_tokens,
|
||||||
"raw_json": raw,
|
"raw_json": raw,
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user