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. |