mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-08 22:21:35 +00:00
fix: convert MCP TextContent objects to JSON-serializable format in logging
- Convert Pydantic BaseModel objects (TextContent, ImageContent, etc.) to dicts in get_final_response_obj - Fixes TypeError: Object of type TextContent is not JSON serializable - Resolves test failures in test_mcp_tool_call_hook and test_mcp_cost_tracking
This commit is contained in:
parent
2ef5a41a24
commit
ab877d9551
1 changed files with 17 additions and 1 deletions
|
|
@ -4380,7 +4380,23 @@ class StandardLoggingPayloadSetup:
|
|||
if response_obj:
|
||||
final_response_obj: Optional[Union[dict, str, list]] = response_obj
|
||||
elif isinstance(init_response_obj, list) or isinstance(init_response_obj, str):
|
||||
final_response_obj = init_response_obj
|
||||
# Convert MCP content objects (TextContent, ImageContent, etc.) to JSON-serializable format
|
||||
if isinstance(init_response_obj, list):
|
||||
serialized_list = []
|
||||
for item in init_response_obj:
|
||||
# Check if item is a Pydantic BaseModel (MCP content types are Pydantic models)
|
||||
if isinstance(item, BaseModel):
|
||||
# Convert Pydantic model to dict for JSON serialization
|
||||
serialized_list.append(item.model_dump())
|
||||
elif hasattr(item, "__dict__") and not isinstance(item, (str, int, float, bool, type(None))):
|
||||
# Fallback: convert object to dict (but skip primitive types)
|
||||
serialized_list.append(item.__dict__)
|
||||
else:
|
||||
# Already serializable (str, dict, int, float, bool, None, etc.)
|
||||
serialized_list.append(item)
|
||||
final_response_obj = serialized_list
|
||||
else:
|
||||
final_response_obj = init_response_obj
|
||||
else:
|
||||
final_response_obj = {}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue