Skip to content

Display

MessageRenderer

Bases: BaseModel


              flowchart TD
              src.tradingagents.interface.display.MessageRenderer[MessageRenderer]

              

              click src.tradingagents.interface.display.MessageRenderer href "" "src.tradingagents.interface.display.MessageRenderer"
            

Render LangChain messages as Rich panels via a pluggable emit target.

A single instance is reused across a run so the HumanMessage "Continue" placeholders (graph plumbing for Anthropic's message-ordering rules) can be filtered out, matching the behaviour of TradingAgentsGraph._save_conversation_log.

Attributes:

Name Type Description
emit Callable[[RenderableType], None]

Receives each rendered Rich renderable. CLI passes Console.print; TUI passes a thread-safe RichLog.write wrapper that defers writes to the Textual main thread via App.call_from_thread.

Methods:

Name Description
for_console

Build a renderer that prints each panel via Rich Console.

render

Render a single LangChain message.

emit

emit: Callable[[RenderableType], None] = Field(
    ...,
    title="Emit Callback",
    description="Sink for each rendered Rich renderable. CLI uses Console.print; TUI uses a RichLog.write wrapper that hops to the main thread.",
)

for_console

for_console(console: Console | None = None) -> MessageRenderer

Build a renderer that prints each panel via Rich Console.

Parameters:

Name Type Description Default

console

Console | None

The Rich console to write to. Defaults to a new console bound to stdout.

None

Returns:

Name Type Description
MessageRenderer MessageRenderer

A renderer whose emit is bound to the

MessageRenderer

console's print method.

Source code in src/tradingagents/interface/display.py
@classmethod
def for_console(cls, console: Console | None = None) -> MessageRenderer:
    """Build a renderer that prints each panel via Rich Console.

    Args:
        console (Console | None, optional): The Rich console to write
            to. Defaults to a new console bound to stdout.

    Returns:
        MessageRenderer: A renderer whose ``emit`` is bound to the
        console's print method.
    """
    target = console or Console()
    return cls(emit=target.print)

render

render(message: AnyMessage) -> None

Render a single LangChain message.

Parameters:

Name Type Description Default

message

AnyMessage

The LangChain message to render. Unknown message types fall through to a generic panel.

required
Source code in src/tradingagents/interface/display.py
def render(self, message: AnyMessage) -> None:
    """Render a single LangChain message.

    Args:
        message (AnyMessage): The LangChain message to render. Unknown
            message types fall through to a generic panel.
    """
    if isinstance(message, HumanMessage):
        if isinstance(message.content, str) and message.content.strip() == "Continue":
            return
        self._render_human(message)
    elif isinstance(message, AIMessage):
        self._render_ai(message)
    elif isinstance(message, ToolMessage):
        self._render_tool(message)
    elif isinstance(message, SystemMessage):
        self._render_system(message)
    else:
        self._render_unknown(message)