Get around the initial empty response from gemini-2.5-flash. (#10508)

This commit is contained in:
Victor May
2025-10-07 15:05:33 -04:00
committed by GitHub
parent cf7debbac1
commit ed0d1a0ba3
3 changed files with 26 additions and 8 deletions

View File

@@ -225,23 +225,37 @@ export class GeminiClient {
async startChat(extraHistory?: Content[]): Promise<GeminiChat> {
this.forceFullIdeContext = true;
this.hasFailedCompressionAttempt = false;
const envParts = await getEnvironmentContext(this.config);
const toolRegistry = this.config.getToolRegistry();
const toolDeclarations = toolRegistry.getFunctionDeclarations();
const tools: Tool[] = [{ functionDeclarations: toolDeclarations }];
// 1. Get the environment context parts as an array
const envParts = await getEnvironmentContext(this.config);
// 2. Convert the array of parts into a single string
const envContextString = envParts
.map((part) => part.text || '')
.join('\n\n');
// 3. Combine the dynamic context with the static handshake instruction
const allSetupText = `
${envContextString}
Reminder: Do not return an empty response when a tool call is required.
My setup is complete. I will provide my first command in the next turn.
`.trim();
// 4. Create the history with a single, comprehensive user turn
const history: Content[] = [
{
role: 'user',
parts: envParts,
},
{
role: 'model',
parts: [{ text: 'Got it. Thanks for the context!' }],
parts: [{ text: allSetupText }],
},
...(extraHistory ?? []),
];
try {
const userMemory = this.config.getUserMemory();
const systemInstruction = getCoreSystemPrompt(this.config, userMemory);

View File

@@ -251,7 +251,7 @@ describe('Turn', () => {
expect(reportError).toHaveBeenCalledWith(
error,
'Error when talking to Gemini API',
[...historyContent, reqParts],
[...historyContent, { role: 'user', parts: reqParts }],
'Turn.run-sendMessageStream',
);
});

View File

@@ -28,6 +28,7 @@ import {
} from '../utils/errors.js';
import type { GeminiChat } from './geminiChat.js';
import { parseThought, type ThoughtSummary } from '../utils/thoughtUtils.js';
import { createUserContent } from '@google/genai';
// Define a structure for tools passed to the server
export interface ServerTool {
@@ -306,7 +307,10 @@ export class Turn {
throw error;
}
const contextForReport = [...this.chat.getHistory(/*curated*/ true), req];
const contextForReport = [
...this.chat.getHistory(/*curated*/ true),
createUserContent(req),
];
await reportError(
error,
'Error when talking to Gemini API',