summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/cli/src/ui/hooks/useGeminiStream.ts2
-rw-r--r--packages/server/src/core/client.ts10
2 files changed, 9 insertions, 3 deletions
diff --git a/packages/cli/src/ui/hooks/useGeminiStream.ts b/packages/cli/src/ui/hooks/useGeminiStream.ts
index 7ab30463..6ff41d2f 100644
--- a/packages/cli/src/ui/hooks/useGeminiStream.ts
+++ b/packages/cli/src/ui/hooks/useGeminiStream.ts
@@ -333,8 +333,6 @@ export const useGeminiStream = (
{ type: 'error', text: `[API Error: ${event.value.message}]` },
userMessageTimestamp,
);
- setStreamingState(StreamingState.Idle);
- // Allow stream to end naturally
}
} // End stream loop
diff --git a/packages/server/src/core/client.ts b/packages/server/src/core/client.ts
index 0b1e8ecf..fc6080ab 100644
--- a/packages/server/src/core/client.ts
+++ b/packages/server/src/core/client.ts
@@ -16,7 +16,7 @@ import {
} from '@google/genai';
import process from 'node:process';
import { getFolderStructure } from '../utils/getFolderStructure.js';
-import { Turn, ServerGeminiStreamEvent } from './turn.js';
+import { Turn, ServerGeminiStreamEvent, GeminiEventType } from './turn.js';
import { Config } from '../config/config.js';
import { getCoreSystemPrompt } from './prompts.js';
import { ReadManyFilesTool } from '../tools/read-many-files.js';
@@ -156,7 +156,10 @@ export class GeminiClient {
turns++;
const turn = new Turn(chat, availableTools);
const resultStream = turn.run(request, signal);
+ let seenError = false;
for await (const event of resultStream) {
+ seenError =
+ seenError === false ? false : event.type === GeminiEventType.Error;
yield event;
}
@@ -176,6 +179,11 @@ export class GeminiClient {
}
}
request = fnResponses;
+
+ if (seenError) {
+ // We saw an error, lets stop processing to prevent unexpected consequences.
+ break;
+ }
}
if (turns >= this.MAX_TURNS) {
console.warn('sendMessageStream: Reached maximum tool call turns limit.');