@@ -371,7 +371,7 @@ def start_tool_call_span(self, tool: ToolUse, parent_span: Optional[Span] = None
371371 "type" : "tool_call" ,
372372 "name" : tool ["name" ],
373373 "id" : tool ["toolUseId" ],
374- "arguments" : [ {"content" : tool ["input" ]}] ,
374+ "arguments" : {"content" : tool ["input" ]},
375375 }
376376 ],
377377 }
@@ -727,7 +727,7 @@ def _add_event_messages(self, span: Span, messages: Messages) -> None:
727727 input_messages : list = []
728728 for message in messages :
729729 input_messages .append (
730- {"role" : message ["role" ], "parts" : [{ "type" : "text" , "content" : message ["content" ]}] }
730+ {"role" : message ["role" ], "parts" : self . _map_content_blocks_to_otel_parts ( message ["content" ]) }
731731 )
732732 self ._add_event (
733733 span , "gen_ai.client.inference.operation.details" , {"gen_ai.input.messages" : serialize (input_messages )}
@@ -740,6 +740,41 @@ def _add_event_messages(self, span: Span, messages: Messages) -> None:
740740 {"content" : serialize (message ["content" ])},
741741 )
742742
743+ def _map_content_blocks_to_otel_parts (self , content_blocks : list [ContentBlock ]) -> list [dict [str , Any ]]:
744+ """Map ContentBlock objects to OpenTelemetry parts format."""
745+ parts : list [dict [str , Any ]] = []
746+
747+ for block in content_blocks :
748+ if "text" in block :
749+ # Standard TextPart
750+ parts .append ({"type" : "text" , "content" : block ["text" ]})
751+ elif "toolUse" in block :
752+ # Standard ToolCallRequestPart
753+ tool_use = block ["toolUse" ]
754+ parts .append (
755+ {
756+ "type" : "tool_call" ,
757+ "name" : tool_use ["name" ],
758+ "id" : tool_use ["toolUseId" ],
759+ "arguments" : {"content" : tool_use ["input" ]},
760+ }
761+ )
762+ elif "toolResult" in block :
763+ # Standard ToolCallResponsePart
764+ tool_result = block ["toolResult" ]
765+ parts .append (
766+ {
767+ "type" : "tool_call_response" ,
768+ "id" : tool_result ["toolUseId" ],
769+ "response" : tool_result ["content" ],
770+ }
771+ )
772+ else :
773+ # For all other ContentBlock types, use the key as type and value as content
774+ for key , value in block .items ():
775+ parts .append ({"type" : key , "content" : value })
776+ return parts
777+
743778
744779# Singleton instance for global access
745780_tracer_instance = None
0 commit comments