@@ -97,6 +97,7 @@ def test_tracks_bedrock_metrics(client: LDClient):
9797
9898 calls = [
9999 call ('$ld:ai:generation' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
100+ call ('$ld:ai:generation:success' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
100101 call ('$ld:ai:duration:total' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 50 ),
101102 call ('$ld:ai:tokens:total' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 330 ),
102103 call ('$ld:ai:tokens:input' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 220 ),
@@ -110,6 +111,39 @@ def test_tracks_bedrock_metrics(client: LDClient):
110111 assert tracker .get_summary ().usage == TokenUsage (330 , 220 , 110 )
111112
112113
114+ def test_tracks_bedrock_metrics_with_error (client : LDClient ):
115+ context = Context .create ('user-key' )
116+ tracker = LDAIConfigTracker (client , "variation-key" , "config-key" , context )
117+
118+ bedrock_result = {
119+ '$metadata' : {'httpStatusCode' : 500 },
120+ 'usage' : {
121+ 'totalTokens' : 330 ,
122+ 'inputTokens' : 220 ,
123+ 'outputTokens' : 110 ,
124+ },
125+ 'metrics' : {
126+ 'latencyMs' : 50 ,
127+ }
128+ }
129+ tracker .track_bedrock_converse_metrics (bedrock_result )
130+
131+ calls = [
132+ call ('$ld:ai:generation' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
133+ call ('$ld:ai:generation:error' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
134+ call ('$ld:ai:duration:total' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 50 ),
135+ call ('$ld:ai:tokens:total' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 330 ),
136+ call ('$ld:ai:tokens:input' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 220 ),
137+ call ('$ld:ai:tokens:output' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 110 ),
138+ ]
139+
140+ client .track .assert_has_calls (calls ) # type: ignore
141+
142+ assert tracker .get_summary ().success is False
143+ assert tracker .get_summary ().duration == 50
144+ assert tracker .get_summary ().usage == TokenUsage (330 , 220 , 110 )
145+
146+
113147def test_tracks_openai_metrics (client : LDClient ):
114148 context = Context .create ('user-key' )
115149 tracker = LDAIConfigTracker (client , "variation-key" , "config-key" , context )
@@ -166,11 +200,44 @@ def test_tracks_success(client: LDClient):
166200 tracker = LDAIConfigTracker (client , "variation-key" , "config-key" , context )
167201 tracker .track_success ()
168202
169- client . track . assert_called_with ( # type: ignore
170- '$ld:ai:generation' ,
171- context ,
172- { 'variationKey' : 'variation-key' , 'configKey' : 'config-key' },
173- 1
174- )
203+ calls = [
204+ call ( '$ld:ai:generation' , context , { 'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ) ,
205+ call ( '$ld:ai:generation:success' , context , { 'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ) ,
206+ ]
207+
208+ client . track . assert_has_calls ( calls ) # type: ignore
175209
176210 assert tracker .get_summary ().success is True
211+
212+
213+ def test_tracks_error (client : LDClient ):
214+ context = Context .create ('user-key' )
215+ tracker = LDAIConfigTracker (client , "variation-key" , "config-key" , context )
216+ tracker .track_error ()
217+
218+ calls = [
219+ call ('$ld:ai:generation' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
220+ call ('$ld:ai:generation:error' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
221+ ]
222+
223+ client .track .assert_has_calls (calls ) # type: ignore
224+
225+ assert tracker .get_summary ().success is False
226+
227+
228+ def test_error_overwrites_success (client : LDClient ):
229+ context = Context .create ('user-key' )
230+ tracker = LDAIConfigTracker (client , "variation-key" , "config-key" , context )
231+ tracker .track_success ()
232+ tracker .track_error ()
233+
234+ calls = [
235+ call ('$ld:ai:generation' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
236+ call ('$ld:ai:generation:success' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
237+ call ('$ld:ai:generation' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
238+ call ('$ld:ai:generation:error' , context , {'variationKey' : 'variation-key' , 'configKey' : 'config-key' }, 1 ),
239+ ]
240+
241+ client .track .assert_has_calls (calls ) # type: ignore
242+
243+ assert tracker .get_summary ().success is False
0 commit comments