fix(google): repair Cloud Code Assist tool-call ordering (#406)

This commit is contained in:
Jonáš Jančařík
2026-01-07 18:30:35 +01:00
committed by Peter Steinberger
parent d4198bbce4
commit 974619d285
4 changed files with 94 additions and 3 deletions

View File

@@ -63,6 +63,7 @@ import {
isRateLimitAssistantError,
isRateLimitErrorMessage,
pickFallbackThinkingLevel,
sanitizeGoogleTurnOrdering,
sanitizeSessionMessagesImages,
} from "./pi-embedded-helpers.js";
import {
@@ -699,10 +700,27 @@ export async function compactEmbeddedPiSession(params: {
}));
try {
const prior = await sanitizeSessionMessagesImages(
const sanitizedImages = await sanitizeSessionMessagesImages(
session.messages,
"session:history",
);
const needsGoogleBootstrap =
(model.api === "google-gemini-cli" ||
model.api === "google-generative-ai") &&
sanitizedImages[0] &&
typeof sanitizedImages[0] === "object" &&
"role" in sanitizedImages[0] &&
sanitizedImages[0].role === "assistant";
const prior =
model.api === "google-gemini-cli" ||
model.api === "google-generative-ai"
? sanitizeGoogleTurnOrdering(sanitizedImages)
: sanitizedImages;
if (needsGoogleBootstrap) {
log.warn(
`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`,
);
}
if (prior.length > 0) {
session.agent.replaceMessages(prior);
}
@@ -1026,8 +1044,25 @@ export async function runEmbeddedPiAgent(params: {
session.messages,
"session:history",
);
if (prior.length > 0) {
session.agent.replaceMessages(prior);
const needsGoogleBootstrap =
(model.api === "google-gemini-cli" ||
model.api === "google-generative-ai") &&
prior[0] &&
typeof prior[0] === "object" &&
"role" in prior[0] &&
prior[0].role === "assistant";
const sanitizedPrior =
model.api === "google-gemini-cli" ||
model.api === "google-generative-ai"
? sanitizeGoogleTurnOrdering(prior)
: prior;
if (needsGoogleBootstrap) {
log.warn(
`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`,
);
}
if (sanitizedPrior.length > 0) {
session.agent.replaceMessages(sanitizedPrior);
}
} catch (err) {
session.dispose();