Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,6 @@ class MessageRequestParams:
system: str | Iterable[TextBlockParam] | None = None


GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS = (
"gen_ai.usage.cache_creation.input_tokens"
)
GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS = "gen_ai.usage.cache_read.input_tokens"


@dataclass
class UsageTokens:
input_tokens: int | None = None
Expand Down Expand Up @@ -173,14 +167,8 @@ def set_invocation_response_attributes(
tokens = extract_usage_tokens(message.usage)
invocation.input_tokens = tokens.input_tokens
invocation.output_tokens = tokens.output_tokens
if tokens.cache_creation_input_tokens is not None:
invocation.attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] = (
tokens.cache_creation_input_tokens
)
if tokens.cache_read_input_tokens is not None:
invocation.attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] = (
tokens.cache_read_input_tokens
)
invocation.cache_creation_input_tokens = tokens.cache_creation_input_tokens
invocation.cache_read_input_tokens = tokens.cache_read_input_tokens

if capture_content:
invocation.output_messages = get_output_messages_from_message(message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@
from opentelemetry.instrumentation.genai.anthropic._raw_response import (
RawResponseProxy,
)
from opentelemetry.instrumentation.genai.anthropic.messages_extractors import (
GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,
GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,
)
from opentelemetry.instrumentation.genai.anthropic.wrappers import (
AsyncMessagesStreamWrapper,
)
Expand Down Expand Up @@ -882,8 +878,13 @@ async def test_async_messages_create_aggregates_cache_tokens(
assert len(spans) == 1
span = spans[0]

assert GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS in span.attributes
assert GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
in span.attributes
)
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
)
assert span.attributes[
GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS
] == expected_input_tokens(response.usage)
Expand All @@ -894,10 +895,15 @@ async def test_async_messages_create_aggregates_cache_tokens(
cache_creation = getattr(response.usage, "cache_creation_input_tokens", 0)
cache_read = getattr(response.usage, "cache_read_input_tokens", 0)
assert (
span.attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS]
span.attributes[
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
]
== cache_creation
)
assert span.attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] == cache_read
assert (
span.attributes[GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS]
== cache_read
)


@pytest.mark.asyncio
Expand Down Expand Up @@ -936,8 +942,13 @@ async def test_async_messages_create_streaming_aggregates_cache_tokens(
assert len(spans) == 1
span = spans[0]

assert GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS in span.attributes
assert GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
in span.attributes
)
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
)
assert (
span.attributes[GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS]
== input_tokens
Expand All @@ -947,10 +958,15 @@ async def test_async_messages_create_streaming_aggregates_cache_tokens(
== output_tokens
)
assert (
span.attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS]
span.attributes[
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
]
== cache_creation
)
assert span.attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] == cache_read
assert (
span.attributes[GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS]
== cache_read
)


@pytest.mark.asyncio
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@
RawResponseProxy,
)
from opentelemetry.instrumentation.genai.anthropic.messages_extractors import (
GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,
GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,
get_server_address_and_port,
)
from opentelemetry.semconv._incubating.attributes import (
Expand Down Expand Up @@ -1219,8 +1217,13 @@ def test_sync_messages_create_aggregates_cache_tokens(
assert len(spans) == 1
span = spans[0]

assert GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS in span.attributes
assert GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
in span.attributes
)
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
)
assert span.attributes[
GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS
] == expected_input_tokens(response.usage)
Expand All @@ -1231,10 +1234,15 @@ def test_sync_messages_create_aggregates_cache_tokens(
cache_creation = getattr(response.usage, "cache_creation_input_tokens", 0)
cache_read = getattr(response.usage, "cache_read_input_tokens", 0)
assert (
span.attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS]
span.attributes[
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
]
== cache_creation
)
assert span.attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] == cache_read
assert (
span.attributes[GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS]
== cache_read
)


@pytest.mark.vcr()
Expand Down Expand Up @@ -1273,8 +1281,13 @@ def test_sync_messages_create_streaming_aggregates_cache_tokens(
assert len(spans) == 1
span = spans[0]

assert GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS in span.attributes
assert GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
in span.attributes
)
assert (
GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in span.attributes
)
assert (
span.attributes[GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS]
== input_tokens
Expand All @@ -1284,10 +1297,15 @@ def test_sync_messages_create_streaming_aggregates_cache_tokens(
== output_tokens
)
assert (
span.attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS]
span.attributes[
GenAIAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS
]
== cache_creation
)
assert span.attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] == cache_read
assert (
span.attributes[GenAIAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS]
== cache_read
)


@pytest.mark.vcr()
Expand Down
Loading