11import boto3
2+ import botocore
23import pytest
34from botocore .exceptions import ClientError
45from botocore .loaders import Loader
56from botocore .stub import Stubber
7+ from packaging .version import Version
68
79import sentry_sdk
810from sentry_sdk .consts import OP , SPANDATA
911from sentry_sdk .integrations .boto3 import Boto3Integration
1012
13+ BOTOCORE_VERSION = Version (botocore .__version__ )
14+
1115pytestmark = pytest .mark .skipif (
1216 "bedrock-runtime" not in Loader ().list_available_services ("service-2" ),
1317 reason = "botocore is too old for bedrock-runtime." ,
1620
1721@pytest .fixture
1822def converse_response ():
23+ usage = {"inputTokens" : 10 , "outputTokens" : 20 , "totalTokens" : 30 }
24+ if BOTOCORE_VERSION >= Version ("1.37.24" ):
25+ usage ["cacheReadInputTokens" ] = 80
26+ usage ["cacheWriteInputTokens" ] = 20
27+
1928 return {
2029 "output" : {"message" : {"role" : "assistant" , "content" : [{"text" : "Hello" }]}},
2130 "stopReason" : "end_turn" ,
22- "usage" : { "inputTokens" : 50 , "outputTokens" : 30 , "totalTokens" : 80 } ,
31+ "usage" : usage ,
2332 "metrics" : {"latencyMs" : 500 },
2433 }
2534
@@ -68,6 +77,13 @@ def test_converse(
6877 assert span ["attributes" ][SPANDATA .GEN_AI_PROVIDER_NAME ] == "aws.bedrock"
6978 assert span ["attributes" ][SPANDATA .GEN_AI_OPERATION_NAME ] == "chat"
7079 assert span ["attributes" ][SPANDATA .GEN_AI_RESPONSE_STREAMING ] is False
80+ assert span ["attributes" ][SPANDATA .GEN_AI_USAGE_INPUT_TOKENS ] == 10
81+ assert span ["attributes" ][SPANDATA .GEN_AI_USAGE_OUTPUT_TOKENS ] == 20
82+ assert span ["attributes" ][SPANDATA .GEN_AI_USAGE_TOTAL_TOKENS ] == 30
83+ if BOTOCORE_VERSION < Version ("1.37.24" ):
84+ return
85+ assert span ["attributes" ][SPANDATA .GEN_AI_USAGE_INPUT_TOKENS_CACHED ] == 80
86+ assert span ["attributes" ][SPANDATA .GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE ] == 20
7187 else :
7288 events = capture_events ()
7389
@@ -83,6 +99,13 @@ def test_converse(
8399 assert span ["data" ][SPANDATA .GEN_AI_PROVIDER_NAME ] == "aws.bedrock"
84100 assert span ["data" ][SPANDATA .GEN_AI_OPERATION_NAME ] == "chat"
85101 assert span ["data" ][SPANDATA .GEN_AI_RESPONSE_STREAMING ] is False
102+ assert span ["data" ][SPANDATA .GEN_AI_USAGE_INPUT_TOKENS ] == 10
103+ assert span ["data" ][SPANDATA .GEN_AI_USAGE_OUTPUT_TOKENS ] == 20
104+ assert span ["data" ][SPANDATA .GEN_AI_USAGE_TOTAL_TOKENS ] == 30
105+ if BOTOCORE_VERSION < Version ("1.37.24" ):
106+ return
107+ assert span ["data" ][SPANDATA .GEN_AI_USAGE_INPUT_TOKENS_CACHED ] == 80
108+ assert span ["data" ][SPANDATA .GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE ] == 20
86109
87110
88111@pytest .mark .parametrize ("span_streaming" , [True , False ])
0 commit comments