agent: Fix thinking step showing up as pending even though it is completed (#27926)

Release Notes:

- N/A
This commit is contained in:
Bennet Bo Fenner 2025-04-02 17:43:39 +02:00 committed by GitHub
parent 9c4e61eae1
commit da3383b10e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -929,6 +929,7 @@ impl ActiveThread {
let checkpoint = thread.checkpoint_for_message(message_id); let checkpoint = thread.checkpoint_for_message(message_id);
let context = thread.context_for_message(message_id).collect::<Vec<_>>(); let context = thread.context_for_message(message_id).collect::<Vec<_>>();
let tool_uses = thread.tool_uses_for_message(message_id, cx); let tool_uses = thread.tool_uses_for_message(message_id, cx);
let has_tool_uses = !tool_uses.is_empty();
// Don't render user messages that are just there for returning tool results. // Don't render user messages that are just there for returning tool results.
if message.role == Role::User && thread.message_has_tool_results(message_id) { if message.role == Role::User && thread.message_has_tool_results(message_id) {
@ -1061,7 +1062,12 @@ impl ActiveThread {
div() div()
.min_h_6() .min_h_6()
.text_ui(cx) .text_ui(cx)
.child(self.render_message_content(message_id, rendered_message, cx)) .child(self.render_message_content(
message_id,
rendered_message,
has_tool_uses,
cx,
))
}, },
) )
.when(!context.is_empty(), |parent| { .when(!context.is_empty(), |parent| {
@ -1321,15 +1327,21 @@ impl ActiveThread {
&self, &self,
message_id: MessageId, message_id: MessageId,
rendered_message: &RenderedMessage, rendered_message: &RenderedMessage,
has_tool_uses: bool,
cx: &Context<Self>, cx: &Context<Self>,
) -> impl IntoElement { ) -> impl IntoElement {
let pending_thinking_segment_index = rendered_message let is_last_message = self.messages.last() == Some(&message_id);
.segments let pending_thinking_segment_index = if is_last_message && !has_tool_uses {
.iter() rendered_message
.enumerate() .segments
.last() .iter()
.filter(|(_, segment)| matches!(segment, RenderedMessageSegment::Thinking { .. })) .enumerate()
.map(|(index, _)| index); .last()
.filter(|(_, segment)| matches!(segment, RenderedMessageSegment::Thinking { .. }))
.map(|(index, _)| index)
} else {
None
};
div() div()
.text_ui(cx) .text_ui(cx)