44from ldai .types import BedrockTokenUsage , FeedbackKind , OpenAITokenUsage , TokenUsage , UnderscoreTokenUsage
55
66class 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 ):
88 self .ld_client = ld_client
9- self .variation_id = variation_id
9+ self .version_key = version_key
1010 self .config_key = config_key
1111 self .context = context
1212
1313 def get_track_data (self ):
1414 return {
15- 'variationId ' : self .variation_id ,
15+ 'versionKey ' : self .version_key ,
1616 'configKey' : self .config_key ,
1717 }
1818
@@ -27,24 +27,33 @@ def track_duration_of(self, func, *args, **kwargs):
2727 self .track_duration (duration )
2828 return result
2929
30- def track_error (self , error : int ) -> None :
31- self .ld_client .track ('$ld:ai:error' , self .context , self .get_track_data (), error )
32-
3330 def track_feedback (self , feedback : Dict [str , FeedbackKind ]) -> None :
3431 if feedback ['kind' ] == FeedbackKind .Positive :
3532 self .ld_client .track ('$ld:ai:feedback:user:positive' , self .context , self .get_track_data (), 1 )
3633 elif feedback ['kind' ] == FeedbackKind .Negative :
3734 self .ld_client .track ('$ld:ai:feedback:user:negative' , self .context , self .get_track_data (), 1 )
3835
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 )
4138
4239 def track_openai (self , func , * args , ** kwargs ):
4340 result = self .track_duration_of (func , * args , ** kwargs )
4441 if result .usage :
4542 self .track_tokens (OpenAITokenUsage (result .usage ))
4643 return result
4744
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+
4857 def track_tokens (self , tokens : Union [TokenUsage , UnderscoreTokenUsage , BedrockTokenUsage ]) -> None :
4958 token_metrics = tokens .to_metrics ()
5059 if token_metrics ['total' ] > 0 :
0 commit comments