fix(agents): cap openai-completions tool call ids to provider-safe format (#31947)

Co-authored-by: bmendonca3 <bmendonca3@users.noreply.github.com>
This commit is contained in:
bmendonca3
2026-03-02 11:08:20 -07:00
committed by GitHub
parent 83c8406f01
commit a6489ab5e9
5 changed files with 45 additions and 9 deletions

View File

@@ -94,6 +94,7 @@ export function resolveTranscriptPolicy(params: {
(provider === "openrouter" || provider === "opencode" || provider === "kilocode") &&
modelId.toLowerCase().includes("gemini");
const isCopilotClaude = provider === "github-copilot" && modelId.toLowerCase().includes("claude");
const requiresOpenAiCompatibleToolIdSanitization = params.modelApi === "openai-completions";
// GitHub Copilot's Claude endpoints can reject persisted `thinking` blocks with
// non-binary/non-base64 signatures (e.g. thinkingSignature: "reasoning_text").
@@ -102,7 +103,8 @@ export function resolveTranscriptPolicy(params: {
const needsNonImageSanitize = isGoogle || isAnthropic || isMistral || isOpenRouterGemini;
const sanitizeToolCallIds = isGoogle || isMistral || isAnthropic;
const sanitizeToolCallIds =
isGoogle || isMistral || isAnthropic || requiresOpenAiCompatibleToolIdSanitization;
const toolCallIdMode: ToolCallIdMode | undefined = isMistral
? "strict9"
: sanitizeToolCallIds
@@ -117,7 +119,8 @@ export function resolveTranscriptPolicy(params: {
return {
sanitizeMode: isOpenAi ? "images-only" : needsNonImageSanitize ? "full" : "images-only",
sanitizeToolCallIds: !isOpenAi && sanitizeToolCallIds,
sanitizeToolCallIds:
(!isOpenAi && sanitizeToolCallIds) || requiresOpenAiCompatibleToolIdSanitization,
toolCallIdMode,
repairToolUseResultPairing,
preserveSignatures: false,