1
1
import time
2
2
from typing import Dict , Union
3
3
from ldclient import Context , LDClient
4
- from ldai .types import BedrockTokenUsage , FeedbackKind , TokenUsage , UnderscoreTokenUsage
4
+ from ldai .types import BedrockTokenUsage , FeedbackKind , OpenAITokenUsage , TokenUsage , UnderscoreTokenUsage
5
5
6
6
class LDAIConfigTracker :
7
7
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):
27
27
self .track_duration (duration )
28
28
return result
29
29
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
-
39
30
def track_error (self , error : int ) -> None :
40
31
self .ld_client .track ('$ld:ai:error' , self .context , self .get_track_data (), error )
41
32
42
- def track_generation (self , generation : int ) -> None :
43
- self .ld_client .track ('$ld:ai:generation' , self .context , self .get_track_data (), generation )
44
-
45
33
def track_feedback (self , feedback : Dict [str , FeedbackKind ]) -> None :
46
34
if feedback ['kind' ] == FeedbackKind .Positive :
47
35
self .ld_client .track ('$ld:ai:feedback:user:positive' , self .context , self .get_track_data (), 1 )
48
36
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