diff --git a/src/agents/pi-embedded-runner/run/attempt.ts b/src/agents/pi-embedded-runner/run/attempt.ts index ea465367a33..49938ba2d6e 100644 --- a/src/agents/pi-embedded-runner/run/attempt.ts +++ b/src/agents/pi-embedded-runner/run/attempt.ts @@ -72,6 +72,7 @@ import { import type { EmbeddedContextFile } from "../../pi-embedded-helpers.js"; import { downgradeOpenAIFunctionCallReasoningPairs, + downgradeOpenAIReasoningBlocks, isCloudCodeAssistFormatError, resolveBootstrapMaxChars, resolveBootstrapPromptTruncationWarningMode, @@ -1367,7 +1368,12 @@ export async function runEmbeddedAttempt( if (!Array.isArray(messages)) { return inner(model, context, options); } - const sanitized = downgradeOpenAIFunctionCallReasoningPairs(messages as AgentMessage[]); + const pairSanitized = downgradeOpenAIFunctionCallReasoningPairs( + messages as AgentMessage[], + ); + // Also strip orphaned reasoning blocks that lack a required following + // content item — OpenAI rejects these with a 400 error. + const sanitized = downgradeOpenAIReasoningBlocks(pairSanitized); if (sanitized === messages) { return inner(model, context, options); }