4
4
from ldai .types import BedrockTokenUsage , FeedbackKind , OpenAITokenUsage , TokenUsage , UnderscoreTokenUsage
5
5
6
6
class LDAIConfigTracker :
7
- def __init__ (self , ld_client : LDClient , variation_id : str , config_key : str , context : Context ):
7
+ def __init__ (self , ld_client : LDClient , version_key : str , config_key : str , context : Context ):
8
8
self .ld_client = ld_client
9
- self .variation_id = variation_id
9
+ self .version_key = version_key
10
10
self .config_key = config_key
11
11
self .context = context
12
12
13
13
def get_track_data (self ):
14
14
return {
15
- 'variationId ' : self .variation_id ,
15
+ 'versionKey ' : self .version_key ,
16
16
'configKey' : self .config_key ,
17
17
}
18
18
@@ -27,24 +27,33 @@ def track_duration_of(self, func, *args, **kwargs):
27
27
self .track_duration (duration )
28
28
return result
29
29
30
- def track_error (self , error : int ) -> None :
31
- self .ld_client .track ('$ld:ai:error' , self .context , self .get_track_data (), error )
32
-
33
30
def track_feedback (self , feedback : Dict [str , FeedbackKind ]) -> None :
34
31
if feedback ['kind' ] == FeedbackKind .Positive :
35
32
self .ld_client .track ('$ld:ai:feedback:user:positive' , self .context , self .get_track_data (), 1 )
36
33
elif feedback ['kind' ] == FeedbackKind .Negative :
37
34
self .ld_client .track ('$ld:ai:feedback:user:negative' , self .context , self .get_track_data (), 1 )
38
35
39
- def track_generation (self , generation : int ) -> None :
40
- self .ld_client .track ('$ld:ai:generation' , self .context , self .get_track_data (), generation )
36
+ def track_success (self ) -> None :
37
+ self .ld_client .track ('$ld:ai:generation' , self .context , self .get_track_data (), 1 )
41
38
42
39
def track_openai (self , func , * args , ** kwargs ):
43
40
result = self .track_duration_of (func , * args , ** kwargs )
44
41
if result .usage :
45
42
self .track_tokens (OpenAITokenUsage (result .usage ))
46
43
return result
47
44
45
+ def track_bedrock_converse (self , res : dict ) -> dict :
46
+ if res .get ('$metadata' , {}).get ('httpStatusCode' ) == 200 :
47
+ self .track_success ()
48
+ elif res .get ('$metadata' , {}).get ('httpStatusCode' ) and res ['$metadata' ]['httpStatusCode' ] >= 400 :
49
+ # Potentially add error tracking in the future.
50
+ pass
51
+ if res .get ('metrics' , {}).get ('latencyMs' ):
52
+ self .track_duration (res ['metrics' ]['latencyMs' ])
53
+ if res .get ('usage' ):
54
+ self .track_tokens (BedrockTokenUsage (res ['usage' ]))
55
+ return res
56
+
48
57
def track_tokens (self , tokens : Union [TokenUsage , UnderscoreTokenUsage , BedrockTokenUsage ]) -> None :
49
58
token_metrics = tokens .to_metrics ()
50
59
if token_metrics ['total' ] > 0 :
0 commit comments