11from 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
330
431class FeedbackKind (Enum ):
532 Positive = "positive"
@@ -10,17 +37,48 @@ class TokenUsage(TypedDict):
1037 prompt_tokens : int
1138 completion_tokens : int
1239
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+ }
1746
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
2252
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