summaryrefslogtreecommitdiff
path: root/packages/server/src/core/geminiChat.ts
diff options
context:
space:
mode:
authorTaylor Mullen <[email protected]>2025-05-26 14:25:31 -0700
committerN. Taylor Mullen <[email protected]>2025-05-26 14:29:24 -0700
commit597dc86a9c7011b7f3288445b14abb11817424da (patch)
tree3c966be056310a53ef0a9e96b835755c8790378e /packages/server/src/core/geminiChat.ts
parent480549e02ed4ae01c7df2abbd98bb0eb5b23bdd5 (diff)
Fix(chat): Prevent empty model response after function call
- Addresses a Gemini model bug where it may return an empty content object after a function response. - Previously, the SDK attempted to inject an empty model message, which could disrupt curated history. - This change modifies our custom class to detect this scenario using an utility and avoid pushing an unnecessary empty model message, thus preserving history integrity. Workaround for https://b.corp.google.com/issues/420354090 Part of https://github.com/google-gemini/gemini-cli/issues/551
Diffstat (limited to 'packages/server/src/core/geminiChat.ts')
-rw-r--r--packages/server/src/core/geminiChat.ts14
1 files changed, 9 insertions, 5 deletions
diff --git a/packages/server/src/core/geminiChat.ts b/packages/server/src/core/geminiChat.ts
index dd5f3b7a..c971e2cc 100644
--- a/packages/server/src/core/geminiChat.ts
+++ b/packages/server/src/core/geminiChat.ts
@@ -16,6 +16,7 @@ import {
GoogleGenAI,
createUserContent,
} from '@google/genai';
+import { isFunctionResponse } from '../utils/messageInspectors.js';
/**
* Returns true if the response is valid, false otherwise.
@@ -292,12 +293,15 @@ export class GeminiChat {
) {
outputContents = modelOutput;
} else {
- // Appends an empty content when model returns empty response, so that the
+ // When not a function response appends an empty content when model returns empty response, so that the
// history is always alternating between user and model.
- outputContents.push({
- role: 'model',
- parts: [],
- } as Content);
+ // Workaround for: https://b.corp.google.com/issues/420354090
+ if (!isFunctionResponse(userInput)) {
+ outputContents.push({
+ role: 'model',
+ parts: [],
+ } as Content);
+ }
}
if (
automaticFunctionCallingHistory &&