@@ -161,21 +161,20 @@ async def process_row(row: EvaluationRow) -> EvaluationRow:
161161 tool_calls = converted_tool_calls ,
162162 )
163163 ]
164- row .messages = messages
165164
166- usage = getattr (response , "usage" , None )
167- if usage is not None :
168- prompt_tokens = getattr (usage , "prompt_tokens" , 0 ) or 0
169- completion_tokens = getattr (usage , "completion_tokens" , 0 ) or 0
170- total_tokens = getattr (usage , "total_tokens" , None )
171- if total_tokens is None :
172- total_tokens = prompt_tokens + completion_tokens
173-
174- row .execution_metadata .usage = CompletionUsage (
175- prompt_tokens = prompt_tokens ,
176- completion_tokens = completion_tokens ,
177- total_tokens = total_tokens ,
165+ row .execution_metadata .finish_reason = str (finish_reason ) if finish_reason is not None else None
166+ row .execution_metadata .tool_call_count = (
167+ len (converted_tool_calls ) if converted_tool_calls is not None else 0
168+ )
169+ row .execution_metadata .usage = (
170+ CompletionUsage ( # Note: LiteLLM sets usage dynamically via setattr(), not as a typed field
171+ prompt_tokens = response .usage .prompt_tokens , # pyright: ignore[reportAttributeAccessIssue]
172+ completion_tokens = response .usage .completion_tokens , # pyright: ignore[reportAttributeAccessIssue]
173+ total_tokens = response .usage .total_tokens , # pyright: ignore[reportAttributeAccessIssue]
178174 )
175+ )
176+
177+ row .messages = messages
179178
180179 row .execution_metadata .duration_seconds = time .perf_counter () - start_time
181180
0 commit comments