From 79ab6ca652c4778a044173dca837f92b7dc14a0b Mon Sep 17 00:00:00 2001 From: Patrick Ribbsaeter Date: Mon, 10 Aug 2026 09:40:56 +0200 Subject: [PATCH 1/4] fix(google): preserve provider error details --- packages/google/src/google-error.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/google/src/google-error.ts b/packages/google/src/google-error.ts index ee620f2..9c44ae5 100644 --- a/packages/google/src/google-error.ts +++ b/packages/google/src/google-error.ts @@ -13,6 +13,7 @@ const googleErrorDataSchema = lazySchema(() => code: z.number().nullable(), message: z.string(), status: z.string(), + details: z.array(z.unknown()).nullish(), }), }), ), -- 2.55.0.windows.3 From 27edd560a7897d011d3dc7b0fe493066aef5ceae Mon Sep 17 00:00:00 2001 From: Patrick Ribbsaeter Date: Mon, 10 Aug 2026 09:41:08 +0200 Subject: [PATCH 2/4] test(google): add RetryInfo error fixture --- .../__fixtures__/google-429-retry-info.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/google/src/__fixtures__/google-429-retry-info.json diff --git a/packages/google/src/__fixtures__/google-429-retry-info.json b/packages/google/src/__fixtures__/google-429-retry-info.json new file mode 100644 index 0000000..131e51e --- /dev/null +++ b/packages/google/src/__fixtures__/google-429-retry-info.json @@ -0,0 +1,21 @@ +{ + "error": { + "code": 429, + "message": "You exceeded your current quota, please check your plan.", + "status": "RESOURCE_EXHAUSTED", + "details": [ + { + "@type": "type.googleapis.com/google.rpc.QuotaFailure", + "violations": [ + { + "quotaId": "GenerateRequestsPerMinutePerProjectPerModel-FreeTier" + } + ] + }, + { + "@type": "type.googleapis.com/google.rpc.RetryInfo", + "retryDelay": "34.4s" + } + ] + } +} -- 2.55.0.windows.3 From e7bae2d3eaa848a2be42e0245e4d1b726ad6dba5 Mon Sep 17 00:00:00 2001 From: Patrick Ribbsaeter Date: Mon, 10 Aug 2026 09:41:24 +0200 Subject: [PATCH 3/4] test(google): preserve RetryInfo in error data --- packages/google/src/google-error.test.ts | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/google/src/google-error.test.ts diff --git a/packages/google/src/google-error.test.ts b/packages/google/src/google-error.test.ts new file mode 100644 index 0000000..22a9391 --- /dev/null +++ b/packages/google/src/google-error.test.ts @@ -0,0 +1,35 @@ +import fs from 'node:fs'; +import { describe, expect, it } from 'vitest'; +import { googleFailedResponseHandler } from './google-error'; + +describe('googleFailedResponseHandler', () => { + it('preserves google.rpc.RetryInfo in APICallError.data', async () => { + const responseBody = fs.readFileSync( + 'src/__fixtures__/google-429-retry-info.json', + 'utf8', + ); + + const result = await googleFailedResponseHandler({ + url: 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent', + requestBodyValues: { contents: [] }, + response: new Response(responseBody, { + status: 429, + headers: { 'content-type': 'application/json' }, + }), + }); + + expect(result.value.data).toMatchObject({ + error: { + details: [ + { + '@type': 'type.googleapis.com/google.rpc.QuotaFailure', + }, + { + '@type': 'type.googleapis.com/google.rpc.RetryInfo', + retryDelay: '34.4s', + }, + ], + }, + }); + }); +}); -- 2.55.0.windows.3 From 4160f385b178277d6084896d2d83e97bf2c2f34b Mon Sep 17 00:00:00 2001 From: Patrick Ribbsaeter Date: Mon, 10 Aug 2026 09:41:33 +0200 Subject: [PATCH 4/4] chore: add Google provider changeset --- .changeset/calm-gemini-retry-info.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/calm-gemini-retry-info.md diff --git a/.changeset/calm-gemini-retry-info.md b/.changeset/calm-gemini-retry-info.md new file mode 100644 index 0000000..6ef19ff --- /dev/null +++ b/.changeset/calm-gemini-retry-info.md @@ -0,0 +1,5 @@ +--- +'@ai-sdk/google': patch +--- + +Preserve Google API error details, including `google.rpc.RetryInfo`, in `APICallError.data`. -- 2.55.0.windows.3