message_content

message_content(message)

Extract content from various message types into a ChatMessage.

This function uses singledispatch to allow for easy extension to support new message types. To add support for a new type, register a new function using the @message_content.register decorator.

To render a chatlas.ContentToolResult subclass as fully custom, standalone UI after a tool call settles, register complete and streaming handlers for it here and in message_content_chunk(). The pending condensed activity row remains while the tool runs, then shinychat pairs the custom result with that call and renders the returned UI outside the default drill-down card.

Examples

from chatlas import ContentToolResult
from shiny import ui
from shinychat import message_content, message_content_chunk
from shinychat.types import ChatMessage


class WeatherResult(ContentToolResult):
    location_name: str


def weather_result_ui(result: WeatherResult) -> ChatMessage:
    temperature = result.value["temperature_2m"]
    return ChatMessage(
        content=ui.div(
            ui.h4(result.location_name),
            f"{temperature} C",
            class_="weather-result",
        )
    )


@message_content.register
def _(result: WeatherResult) -> ChatMessage:
    return weather_result_ui(result)


@message_content_chunk.register
def _(result: WeatherResult) -> ChatMessage:
    return weather_result_ui(result)

Parameters

Name Type Description Default
message The message object to extract content from (e.g., ChatCompletion, BaseMessage, etc.). required

Note

This function is implicitly called by Chat.append_message() to support handling of various message types. It is not intended to be called directly by users, but may be useful for debugging or advanced use cases.

Returns

Name Type Description
ChatMessage A ChatMessage object containing the extracted content and role.

Raises

Name Type Description
ValueError If the message type is unsupported.