Skip to content

Commit dccfe81

Browse files
committed
PR feedback
1 parent b1ddf4f commit dccfe81

2 files changed

Lines changed: 22 additions & 12 deletions

File tree

‎py/src/braintrust/integrations/anthropic/_utils.py‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,14 @@ def extract_anthropic_usage(usage: Any) -> tuple[dict[str, float], dict[str, Any
101101
if "prompt_cache_creation_tokens" not in metrics and cache_creation_breakdown:
102102
metrics["prompt_cache_creation_tokens"] = sum(cache_creation_breakdown)
103103

104-
total_prompt_tokens = (
105-
metrics.get("prompt_tokens", 0)
106-
+ metrics.get("prompt_cached_tokens", 0)
107-
+ metrics.get("prompt_cache_creation_tokens", 0)
108-
)
109-
metrics["prompt_tokens"] = total_prompt_tokens
110-
metrics["tokens"] = total_prompt_tokens + metrics.get("completion_tokens", 0)
104+
if metrics:
105+
total_prompt_tokens = (
106+
metrics.get("prompt_tokens", 0)
107+
+ metrics.get("prompt_cached_tokens", 0)
108+
+ metrics.get("prompt_cache_creation_tokens", 0)
109+
)
110+
metrics["prompt_tokens"] = total_prompt_tokens
111+
metrics["tokens"] = total_prompt_tokens + metrics.get("completion_tokens", 0)
111112

112113
metadata = {
113114
f"usage_{name}": value

‎py/src/braintrust/integrations/anthropic/test_anthropic.py‎

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,13 @@ def test_setup_creates_spans(memory_logger):
548548
)
549549

550550
usage = message.usage
551+
552+
spans = memory_logger.pop()
553+
assert len(spans) == 1
554+
span = spans[0]
555+
assert span["metadata"]["model"] == MODEL
556+
assert span["metadata"]["provider"] == "anthropic"
557+
551558
cache_creation = getattr(usage, "cache_creation", None)
552559
if cache_creation is None:
553560
pytest.skip("Anthropic SDK version does not expose nested cache_creation usage fields")
@@ -559,11 +566,6 @@ def test_setup_creates_spans(memory_logger):
559566
ephemeral_5m = cache_creation.ephemeral_5m_input_tokens
560567
ephemeral_1h = cache_creation.ephemeral_1h_input_tokens
561568

562-
spans = memory_logger.pop()
563-
assert len(spans) == 1
564-
span = spans[0]
565-
assert span["metadata"]["model"] == MODEL
566-
assert span["metadata"]["provider"] == "anthropic"
567569
assert span["metadata"]["usage_service_tier"] == usage.service_tier
568570
assert span["metadata"]["usage_inference_geo"] == usage.inference_geo
569571
metrics = span["metrics"]
@@ -609,6 +611,13 @@ def test_extract_anthropic_usage_preserves_nested_numeric_fields():
609611
}
610612

611613

614+
def test_extract_anthropic_usage_skips_empty_usage():
615+
metrics, metadata = extract_anthropic_usage(SimpleNamespace())
616+
617+
assert metrics == {}
618+
assert metadata == {}
619+
620+
612621
def _make_batch_requests():
613622
return [
614623
{

0 commit comments

Comments
 (0)