summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
authorAbhi <[email protected]>2025-06-23 17:30:13 -0400
committerGitHub <[email protected]>2025-06-23 21:30:13 +0000
commitdc76bcc433d58d879f8850ac777d2cd239dad611 (patch)
tree89458926149f83721f00f09a5b5b3130d571bda5 /packages/core/src
parent21e6a36cf1b17ff126b3d0253e68a6f3ebfc7c36 (diff)
Add error messaging for 429 errors (#1316)
Diffstat (limited to 'packages/core/src')
-rw-r--r--packages/core/src/core/turn.test.ts4
-rw-r--r--packages/core/src/core/turn.ts21
2 files changed, 21 insertions, 4 deletions
diff --git a/packages/core/src/core/turn.test.ts b/packages/core/src/core/turn.test.ts
index a525cbff..602a0b74 100644
--- a/packages/core/src/core/turn.test.ts
+++ b/packages/core/src/core/turn.test.ts
@@ -233,7 +233,9 @@ describe('Turn', () => {
expect(events.length).toBe(1);
const errorEvent = events[0] as ServerGeminiErrorEvent;
expect(errorEvent.type).toBe(GeminiEventType.Error);
- expect(errorEvent.value).toEqual({ message: 'API Error' });
+ expect(errorEvent.value).toEqual({
+ error: { message: 'API Error', status: undefined },
+ });
expect(turn.getDebugResponses().length).toBe(0);
expect(reportError).toHaveBeenCalledWith(
error,
diff --git a/packages/core/src/core/turn.ts b/packages/core/src/core/turn.ts
index cdb4a89f..85fffd93 100644
--- a/packages/core/src/core/turn.ts
+++ b/packages/core/src/core/turn.ts
@@ -49,8 +49,13 @@ export enum GeminiEventType {
Thought = 'thought',
}
-export interface GeminiErrorEventValue {
+export interface StructuredError {
message: string;
+ status?: number;
+}
+
+export interface GeminiErrorEventValue {
+ error: StructuredError;
}
export interface ToolCallRequestInfo {
@@ -236,8 +241,18 @@ export class Turn {
contextForReport,
'Turn.run-sendMessageStream',
);
- const errorMessage = getErrorMessage(error);
- yield { type: GeminiEventType.Error, value: { message: errorMessage } };
+ const status =
+ typeof error === 'object' &&
+ error !== null &&
+ 'status' in error &&
+ typeof (error as { status: unknown }).status === 'number'
+ ? (error as { status: number }).status
+ : undefined;
+ const structuredError: StructuredError = {
+ message: getErrorMessage(error),
+ status,
+ };
+ yield { type: GeminiEventType.Error, value: { error: structuredError } };
return;
}
}