langchain.js
    Preparing search index...

    Interface MessageStructure<TTools>

    Core interface that defines the structure of messages.

    // Basic message structure with just content blocks
    interface SimpleMessageStructure extends MessageStructure {
    content: {
    human: ContentBlock.Text;
    // allows for text + reasoning blocks in ai messages
    ai: ContentBlock.Text | ContentBlock.Reasoning;
    }
    }

    // Message structure with tools and properties
    interface AdvancedMessageStructure extends MessageStructure {
    tools: {
    calculator: MessageToolDefinition<
    { operation: string; numbers: number[] },
    number
    >;
    };
    content: {
    // allows for text + image blocks in human messages
    human: ContentBlock.Text | ContentBlock.Multimodal.Image;
    // only allows for text blocks in ai messages
    ai: ContentBlock.Text;
    };
    properties: {
    // pins properties to ai messages
    ai: {
    response_metadata: {
    confidence: number;
    model: string;
    };
    };
    }
    }

    // Using with $MergeMessageStructure to combine structures
    // The resulting type when passed into BaseMessage will have a calculator tool,
    // allow for text + image blocks in human messages,
    // and text + reasoning blocks + additional arbitrary properties in ai messages.
    type CombinedStructure = $MergeMessageStructure<
    SimpleMessageStructure,
    AdvancedMessageStructure
    >;

    // Using in a Message object
    const message: Message<CombinedStructure> = {
    id: "msg-123",
    type: "human",
    content: [
    { type: "text", text: "Hello!" }
    { type: "image", mimeType: "image/jpeg", url: "https://example.com/image.jpg" }
    // this block will throw an error because it's not defined in the structure
    { type: "reasoning", reasoning: "The answer is 42" }
    ]
    };
    interface MessageStructure<TTools extends MessageToolSet = MessageToolSet> {
        content?: Partial<
            {
                ai: ContentBlock;
                human: ContentBlock;
                system: ContentBlock;
                tool: ContentBlock;
                [key: string & {}]: ContentBlock;
            },
        >;
        outputVersion?: MessageOutputVersion;
        properties?: Partial<
            {
                ai: Record<string, unknown>;
                human: Record<string, unknown>;
                system: Record<string, unknown>;
                tool: Record<string, unknown>;
                [key: string & {}]: Record<string, unknown>;
            },
        >;
        tools?: TTools;
    }

    Type Parameters

    Hierarchy (View Summary)

    Index

    Properties

    content?: Partial<
        {
            ai: ContentBlock;
            human: ContentBlock;
            system: ContentBlock;
            tool: ContentBlock;
            [key: string & {}]: ContentBlock;
        },
    >

    Optional mapping of message types to their allowed content blocks. Each message type can specify what content block types it supports (text, images, etc).

    outputVersion?: MessageOutputVersion

    Optional output version for the message structure. If not provided, defaults to "v0".

    properties?: Partial<
        {
            ai: Record<string, unknown>;
            human: Record<string, unknown>;
            system: Record<string, unknown>;
            tool: Record<string, unknown>;
            [key: string & {}]: Record<string, unknown>;
        },
    >

    Optional mapping of message types to arbitrary property objects. Allows attaching custom metadata or other information to specific message types.

    tools?: TTools

    Optional set of tool definitions that can be used in messages. Each tool is defined with input/output types and can be referenced in tool messages.