Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/langchain-ai/langchain/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Messages are the inputs and outputs of chat models. LangChain provides several message types representing different roles in a conversation.

BaseMessage

Base abstract class for all messages. Source: langchain_core.messages.base:93 Inherits: Serializable

Properties

content
str | list[str | dict]
required
The contents of the message. Can be:
  • A string for simple text
  • A list of content blocks (text, images, audio, etc.)
type
str
required
The type of message (e.g., "human", "ai", "system"). Used for deserialization.
additional_kwargs
dict
default:"{}"
Additional payload data. Used for provider-specific information like tool calls.
response_metadata
dict
default:"{}"
Response metadata such as headers, token counts, model name.
name
str | None
default:"None"
Optional name for the message.
id
str | None
default:"None"
Optional unique identifier for the message.

Computed Properties

content_blocks
list[ContentBlock]
Normalized list of content blocks. Lazily parses content into standard format.
text
str
Text content extracted from all text blocks in the message.

Constructor

def __init__(
    self,
    content: str | list[str | dict] | None = None,
    content_blocks: list[ContentBlock] | None = None,
    **kwargs: Any
)
content
str | list[str | dict] | None
Message content
content_blocks
list[ContentBlock] | None
Typed standard content blocks (alternative to content)
**kwargs
Any
Additional fields like name, id, additional_kwargs

HumanMessage

Message from a human user. Source: langchain_core.messages.human Inherits: BaseMessage

Properties

type
Literal['human']
default:"'human'"
Message type identifier

Example

from langchain_core.messages import HumanMessage

msg = HumanMessage(content="Hello, AI!")
# or with content blocks
msg = HumanMessage(
    content=[
        {"type": "text", "text": "What's in this image?"},
        {"type": "image", "source": {"type": "url", "url": "https://..."}}
    ]
)

AIMessage

Message from an AI assistant. Source: langchain_core.messages.ai Inherits: BaseMessage

Properties

type
Literal['ai']
default:"'ai'"
Message type identifier
tool_calls
list[ToolCall]
default:"[]"
Tool calls made by the AI
invalid_tool_calls
list[InvalidToolCall]
default:"[]"
Tool calls that failed to parse
usage_metadata
UsageMetadata | None
default:"None"
Token usage information

Example

from langchain_core.messages import AIMessage

msg = AIMessage(content="Hello! How can I help you?")

# With tool calls
msg = AIMessage(
    content="",
    tool_calls=[
        {
            "name": "search",
            "args": {"query": "weather"},
            "id": "call_123"
        }
    ]
)

SystemMessage

System message providing instructions or context. Source: langchain_core.messages.system Inherits: BaseMessage

Properties

type
Literal['system']
default:"'system'"
Message type identifier

Example

from langchain_core.messages import SystemMessage

msg = SystemMessage(content="You are a helpful assistant.")

ChatMessage

Generic message with arbitrary role. Source: langchain_core.messages.chat Inherits: BaseMessage

Properties

type
Literal['chat']
default:"'chat'"
Message type identifier
role
str
required
The role of the message sender

Example

from langchain_core.messages import ChatMessage

msg = ChatMessage(content="Custom message", role="moderator")

FunctionMessage

Message representing a function response (deprecated in favor of ToolMessage). Source: langchain_core.messages.function Inherits: BaseMessage

Properties

type
Literal['function']
default:"'function'"
Message type identifier
name
str
required
Name of the function that was called

ToolMessage

Message representing the result of a tool call. Source: langchain_core.messages.tool Inherits: BaseMessage

Properties

type
Literal['tool']
default:"'tool'"
Message type identifier
tool_call_id
str
required
ID of the tool call this message is responding to
status
Literal['success', 'error'] | None
default:"'success'"
Status of the tool execution

Example

from langchain_core.messages import ToolMessage

msg = ToolMessage(
    content="Search results: ...",
    tool_call_id="call_123"
)

Message Chunks

Chunk versions of messages used for streaming.

AIMessageChunk

Source: langchain_core.messages.ai Streaming chunk of an AI message.
from langchain_core.messages import AIMessageChunk

chunk = AIMessageChunk(content="Hello")
chunk2 = AIMessageChunk(content=" world")
combined = chunk + chunk2  # AIMessageChunk(content="Hello world")

HumanMessageChunk

Source: langchain_core.messages.human Streaming chunk of a human message.

SystemMessageChunk

Source: langchain_core.messages.system Streaming chunk of a system message.

Content Blocks

Standard content block types for multimodal messages.

TextContentBlock

class TextContentBlock(TypedDict):
    type: Literal["text"]
    text: str
Plain text content.

ImageContentBlock

class ImageContentBlock(TypedDict, total=False):
    type: Literal["image"]
    source: dict  # url, base64, or file_id
    detail: str  # "auto", "low", "high"
Image content with various source types.

AudioContentBlock

class AudioContentBlock(TypedDict):
    type: Literal["audio"]
    source: dict  # base64 or url
Audio content.

VideoContentBlock

class VideoContentBlock(TypedDict):
    type: Literal["video"]
    source: dict  # url or base64
Video content.

FileContentBlock

class FileContentBlock(TypedDict):
    type: Literal["file"]
    source: dict  # url, base64, or file_id
Generic file content.

Tool Call Types

ToolCall

class ToolCall(TypedDict):
    name: str
    args: dict[str, Any]
    id: str | None
    type: Literal["tool_call"]  # optional
Represents a tool call made by the AI.
name
str
required
Name of the tool to call
args
dict[str, Any]
required
Arguments to pass to the tool
id
str | None
Unique identifier for this tool call

InvalidToolCall

class InvalidToolCall(TypedDict):
    name: str | None
    args: str | None
    id: str | None
    error: str | None
    type: Literal["invalid_tool_call"]  # optional
Represents a tool call that failed to parse.

Usage Metadata

UsageMetadata

class UsageMetadata(TypedDict):
    input_tokens: int
    output_tokens: int
    total_tokens: int
    input_token_details: InputTokenDetails  # optional
    output_token_details: OutputTokenDetails  # optional
Token usage information for a message.
input_tokens
int
required
Count of input tokens
output_tokens
int
required
Count of output tokens
total_tokens
int
required
Total token count (input + output)

InputTokenDetails

class InputTokenDetails(TypedDict, total=False):
    audio: int
    cache_creation: int
    cache_read: int
Breakdown of input token counts.

OutputTokenDetails

class OutputTokenDetails(TypedDict, total=False):
    audio: int
    reasoning: int
Breakdown of output token counts.

Utility Functions

convert_to_messages

def convert_to_messages(
    messages: Sequence[MessageLikeRepresentation]
) -> list[BaseMessage]
Convert message-like objects to BaseMessage instances.
messages
Sequence
required
Messages to convert. Can be:
  • BaseMessage instances
  • Tuples like ("human", "hello")
  • Dicts with role and content keys

message_chunk_to_message

def message_chunk_to_message(chunk: BaseMessageChunk) -> BaseMessage
Convert a message chunk to a complete message.

trim_messages

def trim_messages(
    messages: Sequence[BaseMessage],
    *,
    max_tokens: int | None = None,
    token_counter: Callable[[list[BaseMessage]], int] | None = None,
    strategy: Literal["first", "last"] = "last",
    allow_partial: bool = False
) -> list[BaseMessage]
Trim messages to fit within token limits.

filter_messages

def filter_messages(
    messages: Sequence[BaseMessage],
    *,
    include_types: Sequence[type[BaseMessage] | str] | None = None,
    exclude_types: Sequence[type[BaseMessage] | str] | None = None,
    include_names: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    include_ids: Sequence[str] | None = None,
    exclude_ids: Sequence[str] | None = None
) -> list[BaseMessage]
Filter messages by type, name, or ID.

merge_message_runs

def merge_message_runs(
    messages: Sequence[BaseMessage],
    chunk_separator: str = "\n\n"
) -> list[BaseMessage]
Merge consecutive messages of the same type.

Build docs developers (and LLMs) love