mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
Get around the initial empty response from gemini-2.5-flash. (#10508)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user