microsoft/semantic-kernel · error · ServiceInvalidRequestError
Unsupported item type in Assistant message while formatting
Error message
Unsupported item type in Assistant message while formatting chat history for Google AI Inference: {type(item)} What it means
Raised by format_assistant_message when a ChatMessageContent item in an assistant-role message is not a TextContent, FunctionCallContent, or ImageContent. The Google AI assistant-message formatter serializes text, function calls (tool invocations), and images only. Any other item type (e.g. FunctionResultContent, BinaryContent) in an assistant message is unsupported.
Source
Thrown at python/semantic_kernel/connectors/ai/google/google_ai/services/utils.py:116
Part(
function_call={
"name": item.name, # type: ignore[arg-type]
"args": json.loads(item.arguments) if isinstance(item.arguments, str) else item.arguments,
},
thought_signature=thought_signature,
)
)
else:
parts.append(
Part.from_function_call(
name=item.name, # type: ignore[arg-type]
args=json.loads(item.arguments) if isinstance(item.arguments, str) else item.arguments, # type: ignore[arg-type]
)
)
elif isinstance(item, ImageContent):
parts.append(_create_image_part(item))
else:
raise ServiceInvalidRequestError(
"Unsupported item type in Assistant message while formatting chat history for Google AI"
f" Inference: {type(item)}"
)
return parts
def format_tool_message(message: ChatMessageContent) -> list[Part]:
"""Format a tool message to the expected object for the client.
Args:
message: The tool message.
Returns:
The formatted tool message.
"""
parts: list[Part] = []
for item in message.items:View on GitHub (pinned to c028a0c7dc)
Solutions
- Ensure assistant messages contain only TextContent, FunctionCallContent, or ImageContent.
- Move FunctionResultContent items into tool-role messages (add_message(role=AuthorRole.TOOL, ...)) rather than assistant messages.
- Pre-validate assistant-message items before sending to the Google AI service.
Example fix
# before
history.add_message(
role=AuthorRole.ASSISTANT,
items=[TextContent(text='calling tool'), FunctionResultContent(id='1', name='search', result='{...}')],
)
# after
history.add_message(role=AuthorRole.ASSISTANT, items=[TextContent(text='calling tool')])
history.add_message(role=AuthorRole.TOOL, items=[FunctionResultContent(id='1', name='search', result='{...}')]) Defensive patterns
Strategy: type-guard
Validate before calling
from semantic_kernel.contents.text_content import TextContent
from semantic_kernel.contents.image_content import ImageContent
from semantic_kernel.contents.function_call_content import FunctionCallContent
ALLOWED = (TextContent, ImageContent, FunctionCallContent)
def validate_assistant_items(message):
for item in message.items:
if not isinstance(item, ALLOWED):
raise TypeError(f'Unsupported assistant item type: {type(item).__name__}') Type guard
from semantic_kernel.contents.text_content import TextContent
from semantic_kernel.contents.image_content import ImageContent
from semantic_kernel.contents.function_call_content import FunctionCallContent
def is_valid_assistant_item(item) -> bool:
return isinstance(item, (TextContent, ImageContent, FunctionCallContent)) Prevention
- Put FunctionResultContent in tool-role messages, not assistant messages.
- Validate assistant-message items before sending to Google AI.
- When migrating history from another connector, normalize item types per role.
When it happens
Trigger: An assistant-role ChatMessageContent whose items include a type outside {TextContent, FunctionCallContent, ImageContent}, then calling a chat completion method that formats chat history.
Common situations: Chat history replay where assistant messages were populated with FunctionResultContent instead of putting results in tool-role messages; cross-connector history migration; custom content subclasses in assistant items.
Related errors
- Unsupported item type in User message while formatting chat
- No function result provided in the tool message.
- Unknown type {type_name} with content type {data_content_typ
- Tool message found without a preceding message.
- Tool message found after a user or system message.
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/8a9a0b04deffeed6.
Report an issue: GitHub.