@@ -103,60 +103,59 @@ export function RenderMessage({
103
103
return < UserMessage message = { message . content } />
104
104
}
105
105
106
- if ( message . toolInvocations ?. length ) {
107
- return (
108
- < >
109
- { message . toolInvocations . map ( tool => (
110
- < ToolSection
111
- key = { tool . toolCallId }
112
- tool = { tool }
113
- isOpen = { getIsOpen ( messageId ) }
114
- onOpenChange = { open => onOpenChange ( messageId , open ) }
115
- />
116
- ) ) }
117
- </ >
118
- )
119
- }
120
-
106
+ // New way: Use parts instead of toolInvocations
121
107
return (
122
108
< >
123
- { toolData . map ( tool => (
124
- < ToolSection
125
- key = { tool . toolCallId }
126
- tool = { tool }
127
- isOpen = { getIsOpen ( tool . toolCallId ) }
128
- onOpenChange = { open => onOpenChange ( tool . toolCallId , open ) }
129
- />
130
- ) ) }
131
- { reasoningResult ? (
132
- < ReasoningAnswerSection
133
- content = { {
134
- reasoning : reasoningResult ,
135
- answer : message . content ,
136
- time : reasoningTime
137
- } }
138
- isOpen = { getIsOpen ( messageId ) }
139
- onOpenChange = { open => onOpenChange ( messageId , open ) }
140
- chatId = { chatId }
141
- />
142
- ) : (
143
- < AnswerSection
144
- content = { message . content }
145
- isOpen = { getIsOpen ( messageId ) }
146
- onOpenChange = { open => onOpenChange ( messageId , open ) }
147
- chatId = { chatId }
109
+ { message . parts ?. map ( ( part , index ) => {
110
+ switch ( part . type ) {
111
+ case 'tool-invocation' :
112
+ return (
113
+ < ToolSection
114
+ key = { `${ messageId } -tool-${ index } ` }
115
+ tool = { part . toolInvocation }
116
+ isOpen = { getIsOpen ( part . toolInvocation . toolCallId ) }
117
+ onOpenChange = { open =>
118
+ onOpenChange ( part . toolInvocation . toolCallId , open )
119
+ }
120
+ />
121
+ )
122
+ case 'text' :
123
+ return (
124
+ < AnswerSection
125
+ key = { `${ messageId } -text-${ index } ` }
126
+ content = { part . text }
127
+ isOpen = { getIsOpen ( messageId ) }
128
+ onOpenChange = { open => onOpenChange ( messageId , open ) }
129
+ chatId = { chatId }
130
+ />
131
+ )
132
+ case 'reasoning' :
133
+ return (
134
+ < ReasoningAnswerSection
135
+ key = { `${ messageId } -reasoning-${ index } ` }
136
+ content = { {
137
+ reasoning : part . reasoning ,
138
+ answer : '' , // The text part will handle the answer
139
+ time : 0 // If you need reasoning time, you can get it from part.details
140
+ } }
141
+ isOpen = { getIsOpen ( messageId ) }
142
+ onOpenChange = { open => onOpenChange ( messageId , open ) }
143
+ chatId = { chatId }
144
+ />
145
+ )
146
+ // Add other part types as needed
147
+ default :
148
+ return null
149
+ }
150
+ } ) }
151
+ { relatedQuestions && relatedQuestions . length > 0 && (
152
+ < RelatedQuestions
153
+ annotations = { relatedQuestions as JSONValue [ ] }
154
+ onQuerySelect = { onQuerySelect }
155
+ isOpen = { getIsOpen ( `${ messageId } -related` ) }
156
+ onOpenChange = { open => onOpenChange ( `${ messageId } -related` , open ) }
148
157
/>
149
158
) }
150
- { ! message . toolInvocations &&
151
- relatedQuestions &&
152
- relatedQuestions . length > 0 && (
153
- < RelatedQuestions
154
- annotations = { relatedQuestions as JSONValue [ ] }
155
- onQuerySelect = { onQuerySelect }
156
- isOpen = { getIsOpen ( `${ messageId } -related` ) }
157
- onOpenChange = { open => onOpenChange ( `${ messageId } -related` , open ) }
158
- />
159
- ) }
160
159
</ >
161
160
)
162
161
}
0 commit comments