1
1
from enum import Enum
2
- from typing import TypedDict
2
+ from typing import Callable , TypedDict
3
+ from dataclasses import dataclass
4
+
5
+ @dataclass
6
+ class TokenMetrics (TypedDict ):
7
+ total : int
8
+ input : int
9
+ output : int # type: ignore
10
+
11
+ class AIConfigData (TypedDict ):
12
+ config : dict
13
+ prompt : any
14
+ _ldMeta : dict
15
+
16
+ class AITracker (TypedDict ):
17
+ track_duration : Callable [..., None ]
18
+ track_tokens : Callable [..., None ]
19
+ track_error : Callable [..., None ]
20
+ track_generation : Callable [..., None ]
21
+ track_feedback : Callable [..., None ]
22
+
23
+ class AIConfig ():
24
+ def __init__ (self , config : AIConfigData , tracker : AITracker ):
25
+ self ._config = config
26
+ self ._tracker = tracker
27
+
28
+ config : AIConfigData
29
+ tracker : AITracker
3
30
4
31
class FeedbackKind (Enum ):
5
32
Positive = "positive"
@@ -10,17 +37,48 @@ class TokenUsage(TypedDict):
10
37
prompt_tokens : int
11
38
completion_tokens : int
12
39
13
- class UnderscoreTokenUsage (TypedDict ):
14
- total_tokens : int
15
- prompt_tokens : int
16
- completion_tokens : int
40
+ def to_metrics (self ):
41
+ return {
42
+ 'total' : self ['total_tokens' ],
43
+ 'input' : self ['prompt_tokens' ],
44
+ 'output' : self ['completion_tokens' ],
45
+ }
17
46
18
- class BedrockTokenUsage (TypedDict ):
19
- totalTokens : int
20
- inputTokens : int
21
- outputTokens : int
47
+ class OpenAITokenUsage :
48
+ def __init__ (self , data : any ):
49
+ self .total_tokens = data .total_tokens
50
+ self .prompt_tokens = data .prompt_tokens
51
+ self .completion_tokens = data .completion_tokens
22
52
23
- class TokenMetrics (TypedDict ):
24
- total : int
25
- input : int
26
- output : int # type: ignore
53
+ def to_metrics (self ) -> TokenMetrics :
54
+ return {
55
+ 'total' : self .total_tokens ,
56
+ 'input' : self .prompt_tokens ,
57
+ 'output' : self .completion_tokens ,
58
+ }
59
+
60
+ class UnderscoreTokenUsage :
61
+ def __init__ (self , data : dict ):
62
+ self .total_tokens = data .get ('total_tokens' , 0 )
63
+ self .prompt_tokens = data .get ('prompt_tokens' , 0 )
64
+ self .completion_tokens = data .get ('completion_tokens' , 0 )
65
+
66
+ def to_metrics (self ) -> TokenMetrics :
67
+ return {
68
+ 'total' : self .total_tokens ,
69
+ 'input' : self .prompt_tokens ,
70
+ 'output' : self .completion_tokens ,
71
+ }
72
+
73
+ class BedrockTokenUsage :
74
+ def __init__ (self , data : dict ):
75
+ self .totalTokens = data .get ('totalTokens' , 0 )
76
+ self .inputTokens = data .get ('inputTokens' , 0 )
77
+ self .outputTokens = data .get ('outputTokens' , 0 )
78
+
79
+ def to_metrics (self ) -> TokenMetrics :
80
+ return {
81
+ 'total' : self .totalTokens ,
82
+ 'input' : self .inputTokens ,
83
+ 'output' : self .outputTokens ,
84
+ }
0 commit comments