message_content_chunk

message_content_chunk(chunk)

Extract content from various message chunk types into a ChatMessage.

This function uses singledispatch to allow for easy extension to support new chunk types. To add support for a new type, register a new function using the @message_content_chunk.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(). 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
chunk The message chunk object to extract content from (e.g., ChatCompletionChunk, BaseMessageChunk, etc.). required

Note

This function is implicitly called by Chat.append_message_stream() (on every chunk of a message stream). 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 chunk type is unsupported.