MCPcopy Create free account
hub / github.com/TanStack/ai / MessagePart

Function MessagePart

packages/ai-react-ui/src/chat-message.tsx:139–269  ·  view source on GitHub ↗
({
  part,
  isThinkingComplete,
  textPartRenderer,
  thinkingPartRenderer,
  toolsRenderer,
  defaultToolRenderer,
  toolResultRenderer,
}: {
  part: UIMessage['parts'][number]
  isThinkingComplete?: boolean
  textPartRenderer?: ChatMessageProps['textPartRenderer']
  thinkingPartRenderer?: ChatMessageProps['thinkingPartRenderer']
  toolsRenderer?: ChatMessageProps['toolsRenderer']
  defaultToolRenderer?: ChatMessageProps['defaultToolRenderer']
  toolResultRenderer?: ChatMessageProps['toolResultRenderer']
})

Source from the content-addressed store, hash-verified

137}
138
139function MessagePart({
140 part,
141 isThinkingComplete,
142 textPartRenderer,
143 thinkingPartRenderer,
144 toolsRenderer,
145 defaultToolRenderer,
146 toolResultRenderer,
147}: {
148 part: UIMessage['parts'][number]
149 isThinkingComplete?: boolean
150 textPartRenderer?: ChatMessageProps['textPartRenderer']
151 thinkingPartRenderer?: ChatMessageProps['thinkingPartRenderer']
152 toolsRenderer?: ChatMessageProps['toolsRenderer']
153 defaultToolRenderer?: ChatMessageProps['defaultToolRenderer']
154 toolResultRenderer?: ChatMessageProps['toolResultRenderer']
155}) {
156 // Text part
157 if (part.type === 'text') {
158 if (textPartRenderer) {
159 return <>{textPartRenderer({ content: part.content })}</>
160 }
161 return (
162 <div data-part-type="text" data-part-content>
163 {part.content}
164 </div>
165 )
166 }
167
168 // Thinking part
169 if (part.type === 'thinking') {
170 if (thinkingPartRenderer) {
171 return (
172 <>
173 {thinkingPartRenderer({
174 content: part.content,
175 isComplete: isThinkingComplete,
176 })}
177 </>
178 )
179 }
180 return (
181 <ThinkingPart content={part.content} isComplete={isThinkingComplete} />
182 )
183 }
184
185 // Tool call part
186 if (part.type === 'tool-call') {
187 const toolProps: ToolCallRenderProps = {
188 id: part.id,
189 name: part.name,
190 arguments: part.arguments,
191 state: part.state,
192 approval: part.approval,
193 output: part.output,
194 }
195
196 // Check if there's a specific renderer for this tool

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected