11import time
22from typing import Dict , Union
33from ldclient import Context , LDClient
4- from ldai .types import BedrockTokenUsage , FeedbackKind , TokenUsage , UnderscoreTokenUsage
4+ from ldai .types import BedrockTokenUsage , FeedbackKind , OpenAITokenUsage , TokenUsage , UnderscoreTokenUsage
55
66class LDAIConfigTracker :
77 def __init__ (self , ld_client : LDClient , variation_id : str , config_key : str , context : Context ):
@@ -27,23 +27,29 @@ def track_duration_of(self, func, *args, **kwargs):
2727 self .track_duration (duration )
2828 return result
2929
30- def track_tokens (self , tokens : Union [TokenUsage , UnderscoreTokenUsage , BedrockTokenUsage ]) -> None :
31- token_metrics = tokens .to_metrics ()
32- if token_metrics ['total' ] > 0 :
33- self .ld_client .track ('$ld:ai:tokens:total' , self .context , self .get_track_data (), token_metrics ['total' ])
34- if token_metrics ['input' ] > 0 :
35- self .ld_client .track ('$ld:ai:tokens:input' , self .context , self .get_track_data (), token_metrics ['input' ])
36- if token_metrics ['output' ] > 0 :
37- self .ld_client .track ('$ld:ai:tokens:output' , self .context , self .get_track_data (), token_metrics ['output' ])
38-
3930 def track_error (self , error : int ) -> None :
4031 self .ld_client .track ('$ld:ai:error' , self .context , self .get_track_data (), error )
4132
42- def track_generation (self , generation : int ) -> None :
43- self .ld_client .track ('$ld:ai:generation' , self .context , self .get_track_data (), generation )
44-
4533 def track_feedback (self , feedback : Dict [str , FeedbackKind ]) -> None :
4634 if feedback ['kind' ] == FeedbackKind .Positive :
4735 self .ld_client .track ('$ld:ai:feedback:user:positive' , self .context , self .get_track_data (), 1 )
4836 elif feedback ['kind' ] == FeedbackKind .Negative :
49- self .ld_client .track ('$ld:ai:feedback:user:negative' , self .context , self .get_track_data (), 1 )
37+ self .ld_client .track ('$ld:ai:feedback:user:negative' , self .context , self .get_track_data (), 1 )
38+
39+ def track_generation (self , generation : int ) -> None :
40+ self .ld_client .track ('$ld:ai:generation' , self .context , self .get_track_data (), generation )
41+
42+ def track_openai (self , func , * args , ** kwargs ):
43+ result = self .track_duration_of (func , * args , ** kwargs )
44+ if result .usage :
45+ self .track_tokens (OpenAITokenUsage (result .usage ))
46+ return result
47+
48+ def track_tokens (self , tokens : Union [TokenUsage , UnderscoreTokenUsage , BedrockTokenUsage ]) -> None :
49+ token_metrics = tokens .to_metrics ()
50+ if token_metrics ['total' ] > 0 :
51+ self .ld_client .track ('$ld:ai:tokens:total' , self .context , self .get_track_data (), token_metrics ['total' ])
52+ if token_metrics ['input' ] > 0 :
53+ self .ld_client .track ('$ld:ai:tokens:input' , self .context , self .get_track_data (), token_metrics ['input' ])
54+ if token_metrics ['output' ] > 0 :
55+ self .ld_client .track ('$ld:ai:tokens:output' , self .context , self .get_track_data (), token_metrics ['output' ])
0 commit comments