Skip to content

Commit d9c4168

Browse files
committed
tweak editor implementor
1 parent df6f385 commit d9c4168

File tree

1 file changed

+37
-31
lines changed

1 file changed

+37
-31
lines changed

.agents/editor/best-of-n/editor-implementor2.ts

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -61,38 +61,57 @@ Write out your complete implementation now.`,
6161
const initialMessageHistoryLength =
6262
initialAgentState.messageHistory.length
6363

64+
// Helper to check if a message is empty (no tool calls and empty/no text)
65+
const isEmptyAssistantMessage = (message: any): boolean => {
66+
if (message.role !== 'assistant' || !Array.isArray(message.content)) {
67+
return false
68+
}
69+
const hasToolCalls = message.content.some(
70+
(part: any) => part.type === 'tool-call',
71+
)
72+
if (hasToolCalls) {
73+
return false
74+
}
75+
// Check if all text parts are empty or there are no text parts
76+
const textParts = message.content.filter(
77+
(part: any) => part.type === 'text',
78+
)
79+
if (textParts.length === 0) {
80+
return true
81+
}
82+
return textParts.every((part: any) => !part.text || !part.text.trim())
83+
}
84+
6485
const { agentState } = yield 'STEP_ALL'
6586

6687
let postMessages = agentState.messageHistory.slice(
6788
initialMessageHistoryLength,
6889
)
6990

91+
// Retry if no messages or if the only message is empty (no tool calls and empty text)
7092
if (postMessages.length === 0) {
71-
const { agentState: postMessagesAgentState } = yield 'STEP'
93+
logger.debug('No messages after STEP_ALL, retrying')
94+
const { agentState: postMessagesAgentState } = yield 'STEP_ALL'
95+
postMessages = postMessagesAgentState.messageHistory.slice(
96+
initialMessageHistoryLength,
97+
)
98+
} else if (
99+
postMessages.length === 1 &&
100+
isEmptyAssistantMessage(postMessages[0])
101+
) {
102+
logger.debug(
103+
'Empty assistant message (no tool calls, empty text) after STEP_ALL, retrying',
104+
)
105+
const { agentState: postMessagesAgentState } = yield 'STEP_ALL'
72106
postMessages = postMessagesAgentState.messageHistory.slice(
73107
initialMessageHistoryLength,
74108
)
75-
} else if (postMessages.length == 1) {
76-
const message = postMessages[0]
77-
if (
78-
message.role === 'assistant' &&
79-
message.content.length === 1 &&
80-
message.content[0].type === 'text' &&
81-
!message.content[0].text
82-
) {
83-
const { agentState: postMessagesAgentState } = yield 'STEP_ALL'
84-
postMessages = postMessagesAgentState.messageHistory.slice(
85-
initialMessageHistoryLength,
86-
)
87-
}
88109
}
89-
90110
logger.debug(
91111
{
92-
numMessages: postMessages.length,
93-
messageRoles: postMessages.map((m: any) => m.role),
112+
postMessages,
94113
},
95-
'Post STEP_ALL messages',
114+
'Editor Implementor 2 Post STEP_ALL messages',
96115
)
97116

98117
// Extract tool calls from assistant messages
@@ -122,25 +141,12 @@ Write out your complete implementation now.`,
122141
}
123142
}
124143

125-
logger.debug(
126-
{ numToolCalls: toolCalls.length, numToolResults: toolResults.length },
127-
'Extracted tool calls and results',
128-
)
129-
130144
// Concatenate all unified diffs for the selector to review
131145
const unifiedDiffs = toolResults
132146
.filter((result: any) => result.unifiedDiff)
133147
.map((result: any) => `--- ${result.file} ---\n${result.unifiedDiff}`)
134148
.join('\n\n')
135149

136-
logger.debug(
137-
{
138-
unifiedDiffsLength: unifiedDiffs.length,
139-
hasContent: unifiedDiffs.length > 0,
140-
},
141-
'Generated unified diffs',
142-
)
143-
144150
yield {
145151
toolName: 'set_output',
146152
input: {

0 commit comments

Comments
 (0)