mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-04-26 12:55:58 +00:00
fix(providers): normalize anthropic cached token usage
This commit is contained in:
parent
4ce0a8a68e
commit
feb04a046d
@ -370,17 +370,20 @@ class AnthropicProvider(LLMProvider):
|
|||||||
|
|
||||||
usage: dict[str, int] = {}
|
usage: dict[str, int] = {}
|
||||||
if response.usage:
|
if response.usage:
|
||||||
|
input_tokens = response.usage.input_tokens
|
||||||
|
cache_creation = getattr(response.usage, "cache_creation_input_tokens", 0) or 0
|
||||||
|
cache_read = getattr(response.usage, "cache_read_input_tokens", 0) or 0
|
||||||
|
total_prompt_tokens = input_tokens + cache_creation + cache_read
|
||||||
usage = {
|
usage = {
|
||||||
"prompt_tokens": response.usage.input_tokens,
|
"prompt_tokens": total_prompt_tokens,
|
||||||
"completion_tokens": response.usage.output_tokens,
|
"completion_tokens": response.usage.output_tokens,
|
||||||
"total_tokens": response.usage.input_tokens + response.usage.output_tokens,
|
"total_tokens": total_prompt_tokens + response.usage.output_tokens,
|
||||||
}
|
}
|
||||||
for attr in ("cache_creation_input_tokens", "cache_read_input_tokens"):
|
for attr in ("cache_creation_input_tokens", "cache_read_input_tokens"):
|
||||||
val = getattr(response.usage, attr, 0)
|
val = getattr(response.usage, attr, 0)
|
||||||
if val:
|
if val:
|
||||||
usage[attr] = val
|
usage[attr] = val
|
||||||
# Normalize to cached_tokens for downstream consistency.
|
# Normalize to cached_tokens for downstream consistency.
|
||||||
cache_read = usage.get("cache_read_input_tokens", 0)
|
|
||||||
if cache_read:
|
if cache_read:
|
||||||
usage["cached_tokens"] = cache_read
|
usage["cached_tokens"] = cache_read
|
||||||
|
|
||||||
|
|||||||
@ -198,7 +198,7 @@ def test_anthropic_maps_cache_fields_to_cached_tokens():
|
|||||||
usage_obj = FakeUsage(
|
usage_obj = FakeUsage(
|
||||||
input_tokens=800,
|
input_tokens=800,
|
||||||
output_tokens=200,
|
output_tokens=200,
|
||||||
cache_creation_input_tokens=0,
|
cache_creation_input_tokens=300,
|
||||||
cache_read_input_tokens=1200,
|
cache_read_input_tokens=1200,
|
||||||
)
|
)
|
||||||
content_block = FakeUsage(type="text", text="hello")
|
content_block = FakeUsage(type="text", text="hello")
|
||||||
@ -211,7 +211,9 @@ def test_anthropic_maps_cache_fields_to_cached_tokens():
|
|||||||
)
|
)
|
||||||
result = AnthropicProvider._parse_response(response)
|
result = AnthropicProvider._parse_response(response)
|
||||||
assert result.usage["cached_tokens"] == 1200
|
assert result.usage["cached_tokens"] == 1200
|
||||||
assert result.usage["prompt_tokens"] == 800
|
assert result.usage["prompt_tokens"] == 2300
|
||||||
|
assert result.usage["total_tokens"] == 2500
|
||||||
|
assert result.usage["cache_creation_input_tokens"] == 300
|
||||||
|
|
||||||
|
|
||||||
def test_anthropic_no_cache_fields():
|
def test_anthropic_no_cache_fields():
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user