Skip to main content

Thinking Block

When the model emits extended thinking (reasoning), the SDK automatically renders it as its own collapsible block, separate from the final answer. While streaming it shows an expanded "Thinking…"; once complete it auto-collapses. No setup is required.

Thinking Block

When the model emits extended thinking (reasoning), the SDK renders it as its own collapsible block, separate from the final answer. No setup needed — it appears automatically when the backend streams thinking events.

// Renders automatically, no prop needed
<Chatbot
  config={{ botProviderEndpoint: '...' }}
  customChannelId="my-channel"
/>

Thinking maps to ConversationThinkingMessage (type: 'thinking'); isThinking distinguishes the streaming vs. completed state.

Loading chatbot...

Message Shape

Thinking maps to ConversationThinkingMessage in the ConversationMessage union:

type ConversationThinkingMessage = {
type: "thinking";
messageId: string;
text: string;
isThinking: boolean; // true = streaming (expanded); false = completed (collapsed)
time: Date;
traceId?: string;
};

In real usage these are assembled and written into the Conversation automatically from the backend asgard.message.thinking.start / .delta / .complete events — you never handle them by hand.

See Also

  • Tool Call — grouped tool calls before the answer
  • Headless — walk conversation.messages yourself to render thinking