MessageContent
Multi-modal content types for messages and variables in the Python SDK.
Overview
Content types support text, images, PDFs, tool calls/responses, reasoning, errors, and search results. The MessageContent class is a oneOf union wrapper — the actual content is accessed via the actual_instance property.
MessageContent (Union Type)
Polymorphic content type supporting multiple modalities. Uses actual_instance to hold the concrete content variant.
from adaline_api.models.message_content import MessageContent
The actual_instance must be one of:
| Type | Modality | Description |
|---|
TextContent | "text" | Plain text content |
ImageContent | "image" | Image with detail level |
PdfContent | "pdf" | PDF document with file metadata |
ReasoningContent | "reasoning" | Chain-of-thought reasoning |
ToolCallContent | "tool-call" | Tool/function call request |
ToolResponseContent | "tool-response" | Tool/function execution response |
ErrorContent | "error" | Safety and content filtering errors |
SearchResultContent | "search-result" | Web search grounding results |
Accessing content:
from adaline_api.models.message_content import MessageContent
from adaline_api.models.text_content import TextContent
from adaline_api.models.image_content import ImageContent
content = MessageContent(actual_instance=TextContent(
modality="text",
value="Hello!"
))
# Access the underlying content
inner = content.actual_instance # TextContent instance
print(inner.modality) # 'text'
print(inner.value) # 'Hello!'
Type checking:
from adaline_api.models.text_content import TextContent
from adaline_api.models.image_content import ImageContent
from adaline_api.models.tool_call_content import ToolCallContent
def process_content(content: MessageContent):
instance = content.actual_instance
if isinstance(instance, TextContent):
print("Text:", instance.value)
elif isinstance(instance, ImageContent):
print("Image, detail:", instance.detail)
elif isinstance(instance, ToolCallContent):
print("Tool call:", instance.name)
Text Content
TextContent
See the dedicated TextContent page for full documentation.
Plain text content for messages.
from adaline_api.models.text_content import TextContent
Fields
Example
from adaline_api.models.text_content import TextContent
from adaline_api.models.message_content import MessageContent
text = TextContent(modality="text", value="Hello, how are you?")
content = MessageContent(actual_instance=text)
JSON:
{
"modality": "text",
"value": "Hello, how are you?"
}
Image Content
ImageContent
See the dedicated ImageContent page for full documentation.
Image content with detail level specification.
from adaline_api.models.image_content import ImageContent
Fields
Detail level. One of: "low", "medium", "high", "auto".
value
ImageContentValue
required
ImageContentValue
Union of URL or base64 image content. Use from_dict() to construct.
from adaline_api.models.image_content_value import ImageContentValue
Example
from adaline_api.models.image_content import ImageContent
from adaline_api.models.image_content_value import ImageContentValue
from adaline_api.models.message_content import MessageContent
# URL image
image = ImageContent(
modality="image",
detail="high",
value=ImageContentValue.from_dict({
"type": "url",
"url": "https://example.com/chart.png"
})
)
content = MessageContent(actual_instance=image)
# Base64 image
base64_image = ImageContent(
modality="image",
detail="auto",
value=ImageContentValue.from_dict({
"type": "base64",
"base64": "iVBORw0KGgoAAAANSUhEUgA...",
"mediaType": "jpeg"
})
)
JSON:
{
"modality": "image",
"detail": "high",
"value": {
"type": "url",
"url": "https://example.com/image.jpg"
}
}
PDF Content
PdfContent
See the dedicated PdfContent page for full documentation.
PDF document content with file metadata.
from adaline_api.models.pdf_content import PdfContent
Fields
PDF data — either a URL or base64-encoded content.
File metadata with name, id, and optional size.
Example
from adaline_api.models.pdf_content import PdfContent
from adaline_api.models.pdf_content_value import PdfContentValue
from adaline_api.models.pdf_content_file import PdfContentFile
from adaline_api.models.message_content import MessageContent
pdf = PdfContent(
modality="pdf",
value=PdfContentValue.from_dict({
"type": "url",
"url": "https://example.com/report.pdf"
}),
file=PdfContentFile(
name="Q4_Report.pdf",
id="file_abc123",
size=1024000
)
)
content = MessageContent(actual_instance=pdf)
JSON:
{
"modality": "pdf",
"value": {
"type": "url",
"url": "https://example.com/report.pdf"
},
"file": {
"name": "report.pdf",
"id": "file_123",
"size": 1024000
}
}
Tool Content
ToolCallContent
See the dedicated ToolCallContent page for full documentation.
Tool/function call request from LLM.
from adaline_api.models.tool_call_content import ToolCallContent
Fields
Zero-based index of the tool call. Minimum: 0.
Unique identifier for this tool call.
Name of the function to call.
JSON-encoded string of function arguments.
Optional MCP server name. Aliased as serverName in JSON.
Example
import json
from adaline_api.models.tool_call_content import ToolCallContent
from adaline_api.models.message_content import MessageContent
tool_call = ToolCallContent(
modality="tool-call",
index=0,
id="call_abc123",
name="get_weather",
arguments=json.dumps({
"city": "San Francisco",
"units": "fahrenheit"
}),
server_name="weather-api"
)
content = MessageContent(actual_instance=tool_call)
JSON:
{
"modality": "tool-call",
"index": 0,
"id": "call_abc123",
"name": "get_weather",
"arguments": "{\"city\":\"San Francisco\"}"
}
ToolResponseContent
See the dedicated ToolResponseContent page for full documentation.
Tool/function execution response.
from adaline_api.models.tool_response_content import ToolResponseContent
Fields
Zero-based index matching the tool call. Minimum: 0.
Identifier matching the tool call id.
Name of the function that was called.
JSON-encoded string of the function result.
api_response
ToolResponseContentApiResponse | None
Optional API response metadata with status_code. Aliased as apiResponse in JSON.
Example
import json
from adaline_api.models.tool_response_content import ToolResponseContent
from adaline_api.models.message_content import MessageContent
tool_response = ToolResponseContent(
modality="tool-response",
index=0,
id="call_abc123",
name="get_weather",
data=json.dumps({
"temperature": 72,
"conditions": "sunny",
"humidity": 65
})
)
content = MessageContent(actual_instance=tool_response)
JSON:
{
"modality": "tool-response",
"index": 0,
"id": "call_abc123",
"name": "get_weather",
"data": "{\"temperature\":72,\"conditions\":\"sunny\"}"
}
Reasoning Content
ReasoningContent
See the dedicated ReasoningContent page for full documentation.
Reasoning content for chain-of-thought responses.
from adaline_api.models.reasoning_content import ReasoningContent
Fields
value
ReasoningContentValueUnion
required
The reasoning value — either a thinking type with content and signature, or a redacted type.
Example
from adaline_api.models.reasoning_content import ReasoningContent
from adaline_api.models.reasoning_content_value_union import ReasoningContentValueUnion
from adaline_api.models.message_content import MessageContent
reasoning = ReasoningContent(
modality="reasoning",
value=ReasoningContentValueUnion.from_dict({
"type": "thinking",
"thinking": "Let me analyze this step by step...",
"signature": "sig_abc123"
})
)
content = MessageContent(actual_instance=reasoning)
Error Content
ErrorContent
See the dedicated ErrorContent page for full documentation.
Error content type for LLM safety and content filtering errors.
from adaline_api.models.error_content import ErrorContent
Fields
value
SafetyErrorContentValue
required
Safety error value with type and value fields.
Example
from adaline_api.models.error_content import ErrorContent
from adaline_api.models.safety_error_content_value import SafetyErrorContentValue
from adaline_api.models.message_content import MessageContent
error = ErrorContent(
modality="error",
value=SafetyErrorContentValue(
type="safety",
value="Content filtered due to safety policy."
)
)
content = MessageContent(actual_instance=error)
Search Result Content
SearchResultContent
See the dedicated SearchResultContent page for full documentation.
Search result content for grounding LLM responses with web search data.
from adaline_api.models.search_result_content import SearchResultContent
Fields
value
SearchResultGoogleContentValue
required
Google search result value with type, references, and responses.
Example
from adaline_api.models.search_result_content import SearchResultContent
from adaline_api.models.search_result_google_content_value import SearchResultGoogleContentValue
from adaline_api.models.message_content import MessageContent
search_result = SearchResultContent(
modality="search-result",
value=SearchResultGoogleContentValue.from_dict({
"type": "google",
"references": [{"title": "Example", "url": "https://example.com", "snippet": "..."}],
"responses": [{"text": "Search grounding result..."}]
})
)
content = MessageContent(actual_instance=search_result)
Complete Examples
Multi-Modal Message
from adaline_api.models.prompt_message import PromptMessage
from adaline_api.models.message_content import MessageContent
from adaline_api.models.text_content import TextContent
from adaline_api.models.image_content import ImageContent
from adaline_api.models.image_content_value import ImageContentValue
from adaline_api.models.pdf_content import PdfContent
from adaline_api.models.pdf_content_value import PdfContentValue
from adaline_api.models.pdf_content_file import PdfContentFile
message = PromptMessage(
role="user",
content=[
MessageContent(actual_instance=TextContent(
modality="text",
value="Analyze this image and document"
)),
MessageContent(actual_instance=ImageContent(
modality="image",
detail="high",
value=ImageContentValue.from_dict({
"type": "url",
"url": "https://example.com/image.jpg"
})
)),
MessageContent(actual_instance=PdfContent(
modality="pdf",
value=PdfContentValue.from_dict({
"type": "url",
"url": "https://example.com/report.pdf"
}),
file=PdfContentFile(name="report.pdf", id="file_123")
)),
]
)
import json
from adaline_api.models.prompt_message import PromptMessage
from adaline_api.models.message_content import MessageContent
from adaline_api.models.text_content import TextContent
from adaline_api.models.tool_call_content import ToolCallContent
from adaline_api.models.tool_response_content import ToolResponseContent
# 1. Assistant makes tool call
assistant_with_tool = PromptMessage(
role="assistant",
content=[MessageContent(actual_instance=ToolCallContent(
modality="tool-call",
index=0,
id="call_123",
name="get_weather",
arguments=json.dumps({"city": "Paris"})
))]
)
# 2. Tool responds
tool_result = PromptMessage(
role="tool",
content=[MessageContent(actual_instance=ToolResponseContent(
modality="tool-response",
index=0,
id="call_123",
name="get_weather",
data=json.dumps({"temp": 24, "conditions": "sunny"})
))]
)
# 3. Assistant uses tool result
final_response = PromptMessage(
role="assistant",
content=[MessageContent(actual_instance=TextContent(
modality="text",
value="The weather in Paris is sunny with a temperature of 24°C."
))]
)
Content Filtering
from adaline_api.models.text_content import TextContent
from adaline_api.models.image_content import ImageContent
from adaline_api.models.tool_call_content import ToolCallContent
message: PromptMessage = ...
# Get all text content
text_items = [
c.actual_instance for c in message.content
if isinstance(c.actual_instance, TextContent)
]
# Get all images
images = [
c.actual_instance for c in message.content
if isinstance(c.actual_instance, ImageContent)
]
# Get tool calls
tool_calls = [
c.actual_instance for c in message.content
if isinstance(c.actual_instance, ToolCallContent)
]
# Extract text values
text_values = " ".join(t.value for t in text_items)