1010import uuid
1111from typing import Any , Dict , List , Optional
1212
13+ from posthog .ai .types import StreamingContentBlock , ToolInProgress
1314from posthog .ai .utils import (
1415 call_llm_and_track_usage ,
16+ merge_usage_stats ,
1517)
1618from posthog .ai .anthropic .anthropic_converter import (
1719 extract_anthropic_usage_from_event ,
@@ -126,9 +128,9 @@ def _create_streaming(
126128 start_time = time .time ()
127129 usage_stats : Dict [str , int ] = {"input_tokens" : 0 , "output_tokens" : 0 }
128130 accumulated_content = ""
129- content_blocks : List [Dict [ str , Any ] ] = []
130- tools_in_progress : Dict [str , Dict [ str , Any ] ] = {}
131- current_text_block : Optional [Dict [ str , Any ] ] = None
131+ content_blocks : List [StreamingContentBlock ] = []
132+ tools_in_progress : Dict [str , ToolInProgress ] = {}
133+ current_text_block : Optional [StreamingContentBlock ] = None
132134 response = super ().create (** kwargs )
133135
134136 def generator ():
@@ -142,7 +144,7 @@ def generator():
142144 for event in response :
143145 # Extract usage stats from event
144146 event_usage = extract_anthropic_usage_from_event (event )
145- usage_stats . update ( event_usage )
147+ merge_usage_stats ( usage_stats , event_usage )
146148
147149 # Handle content block start events
148150 if hasattr (event , "type" ) and event .type == "content_block_start" :
@@ -157,7 +159,9 @@ def generator():
157159 current_text_block = None
158160
159161 if tool :
160- tools_in_progress [tool ["block" ]["id" ]] = tool
162+ tool_id = tool ["block" ].get ("id" )
163+ if tool_id :
164+ tools_in_progress [tool_id ] = tool
161165
162166 # Handle text delta events
163167 delta_text = handle_anthropic_text_delta (event , current_text_block )
@@ -208,7 +212,7 @@ def _capture_streaming_event(
208212 kwargs : Dict [str , Any ],
209213 usage_stats : Dict [str , int ],
210214 latency : float ,
211- content_blocks : List [Dict [ str , Any ] ],
215+ content_blocks : List [StreamingContentBlock ],
212216 accumulated_content : str ,
213217 ):
214218 from posthog .ai .types import StreamingEventData
@@ -225,7 +229,7 @@ def _capture_streaming_event(
225229
226230 event_data = StreamingEventData (
227231 provider = "anthropic" ,
228- model = kwargs .get ("model" ),
232+ model = kwargs .get ("model" , "unknown" ),
229233 base_url = str (self ._client .base_url ),
230234 kwargs = kwargs ,
231235 formatted_input = sanitized_input ,
0 commit comments