@@ -28,6 +28,23 @@ def get_model_params(kwargs: Dict[str, Any]) -> Dict[str, Any]:
2828 return model_params
2929
3030
31+ def get_usage (response , provider : str ) -> Dict [str , Any ]:
32+ if provider == "anthropic" :
33+ return {
34+ "input_tokens" : response .usage .input_tokens ,
35+ "output_tokens" : response .usage .output_tokens ,
36+ }
37+ elif provider == "openai" :
38+ return {
39+ "input_tokens" : response .usage .prompt_tokens ,
40+ "output_tokens" : response .usage .completion_tokens ,
41+ }
42+ return {
43+ "input_tokens" : 0 ,
44+ "output_tokens" : 0 ,
45+ }
46+
47+
3148def format_response (response , provider : str ):
3249 """
3350 Format a regular (non-streaming) response.
@@ -103,19 +120,17 @@ def call_llm_and_track_usage(
103120 posthog_trace_id = uuid .uuid4 ()
104121
105122 if response and hasattr (response , "usage" ):
106- usage = response . usage . model_dump ( )
123+ usage = get_usage ( response , provider )
107124
108- input_tokens = usage .get ("prompt_tokens" , 0 )
109- output_tokens = usage .get ("completion_tokens" , 0 )
110125 event_properties = {
111126 "$ai_provider" : provider ,
112127 "$ai_model" : kwargs .get ("model" ),
113128 "$ai_model_parameters" : get_model_params (kwargs ),
114129 "$ai_input" : with_privacy_mode (ph_client , posthog_privacy_mode , kwargs .get ("messages" )),
115130 "$ai_output_choices" : with_privacy_mode (ph_client , posthog_privacy_mode , format_response (response , provider )),
116131 "$ai_http_status" : http_status ,
117- "$ai_input_tokens" : input_tokens ,
118- "$ai_output_tokens" : output_tokens ,
132+ "$ai_input_tokens" : usage . get ( " input_tokens" , 0 ) ,
133+ "$ai_output_tokens" : usage . get ( " output_tokens" , 0 ) ,
119134 "$ai_latency" : latency ,
120135 "$ai_trace_id" : posthog_trace_id ,
121136 "$ai_base_url" : str (base_url ),
@@ -171,19 +186,17 @@ async def call_llm_and_track_usage_async(
171186 posthog_trace_id = uuid .uuid4 ()
172187
173188 if response and hasattr (response , "usage" ):
174- usage = response . usage . model_dump ( )
189+ usage = get_usage ( response , provider )
175190
176- input_tokens = usage .get ("prompt_tokens" , 0 )
177- output_tokens = usage .get ("completion_tokens" , 0 )
178191 event_properties = {
179192 "$ai_provider" : provider ,
180193 "$ai_model" : kwargs .get ("model" ),
181194 "$ai_model_parameters" : get_model_params (kwargs ),
182195 "$ai_input" : with_privacy_mode (ph_client , posthog_privacy_mode , kwargs .get ("messages" )),
183196 "$ai_output_choices" : with_privacy_mode (ph_client , posthog_privacy_mode , format_response (response , provider )),
184197 "$ai_http_status" : http_status ,
185- "$ai_input_tokens" : input_tokens ,
186- "$ai_output_tokens" : output_tokens ,
198+ "$ai_input_tokens" : usage . get ( " input_tokens" , 0 ) ,
199+ "$ai_output_tokens" : usage . get ( " output_tokens" , 0 ) ,
187200 "$ai_latency" : latency ,
188201 "$ai_trace_id" : posthog_trace_id ,
189202 "$ai_base_url" : str (base_url ),
0 commit comments