Skip to main content

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:
TypeModalityDescription
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

modality
str
required
Must be "text".
value
str
required
The text content string.

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

modality
str
required
Must be "image".
detail
str
required
Detail level. One of: "low", "medium", "high", "auto".
value
ImageContentValue
required
Image data — either a URL or base64-encoded content. See ImageContentValue.

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

modality
str
required
Must be "pdf".
value
PdfContentValue
required
PDF data — either a URL or base64-encoded content.
file
PdfContentFile
required
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

modality
str
required
Must be "tool-call".
index
int
required
Zero-based index of the tool call. Minimum: 0.
id
str
required
Unique identifier for this tool call.
name
str
required
Name of the function to call.
arguments
str
required
JSON-encoded string of function arguments.
server_name
str | None
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

modality
str
required
Must be "tool-response".
index
int
required
Zero-based index matching the tool call. Minimum: 0.
id
str
required
Identifier matching the tool call id.
name
str
required
Name of the function that was called.
data
str
required
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

modality
str
required
Must be "reasoning".
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

modality
str
required
Must be "error".
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

modality
str
required
Must be "search-result".
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")
        )),
    ]
)

Tool Call Flow

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)