@ai-sdk/google 4.0.98 → 4.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -9
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +2 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +42 -8
- package/dist/internal/index.js.map +1 -1
- package/docs/15-google.mdx +8 -0
- package/package.json +3 -3
- package/src/google-error.ts +9 -6
- package/src/google-language-model.ts +63 -3
- package/src/google-prompt.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @ai-sdk/google
|
|
2
2
|
|
|
3
|
+
## 4.0.100
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d08bb66: Preserve grounding metadata from each automatically continued Google response in `groundingMetadataPerRequest`. Previously, a later response without grounding could leave earlier Search queries absent from the final provider metadata even though their sources were returned. The new array preserves request order and includes `null` for requests without grounding.
|
|
8
|
+
- Updated dependencies [60cc252]
|
|
9
|
+
- @ai-sdk/provider@4.0.30
|
|
10
|
+
- @ai-sdk/provider-utils@5.0.63
|
|
11
|
+
|
|
12
|
+
## 4.0.99
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- ae42699: fix(google): surface in-stream errors
|
|
17
|
+
- Updated dependencies [0957554]
|
|
18
|
+
- @ai-sdk/provider@4.0.29
|
|
19
|
+
- @ai-sdk/provider-utils@5.0.62
|
|
20
|
+
|
|
3
21
|
## 4.0.98
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -243,6 +243,8 @@ type GoogleUsageMetadata = UsageMetadataSchema;
|
|
|
243
243
|
interface GoogleProviderMetadata {
|
|
244
244
|
promptFeedback: GooglePromptFeedback | null;
|
|
245
245
|
groundingMetadata: GoogleGroundingMetadata | null;
|
|
246
|
+
/** Grounding from each automatically continued request, in request order. */
|
|
247
|
+
groundingMetadataPerRequest?: Array<GoogleGroundingMetadata | null>;
|
|
246
248
|
urlContextMetadata: GoogleUrlContextMetadata | null;
|
|
247
249
|
safetyRatings: GoogleSafetyRating[] | null;
|
|
248
250
|
usageMetadata: GoogleUsageMetadata | null;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["DecisionModelV4","BatchV4","SpeechTranslationModelV4","RealtimeFactoryV4","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4ServerEvent","RealtimeModelV4ClientEvent","RealtimeModelV4","RealtimeModelV4SessionConfig","TranscriptionModelV4StreamOptions","SpeechTranslationModelV4StreamOptions","SpeechTranslationModelV4"],"sources":["../src/google-error.ts","../src/google-language-model-options.ts","../src/google-language-model.ts","../src/google-prompt.ts","../src/tool/google-search.ts","../src/google-image-model-options.ts","../src/google-embedding-model-options.ts","../src/google-video-model-options.ts","../src/google-video-settings.ts","../src/google-speech-model-options.ts","../src/google-files.ts","../src/interactions/google-interactions-language-model-options.ts","../src/interactions/google-interactions-provider-metadata.ts","../src/interactions/google-interactions-agent.ts","../src/google-tools.ts","../src/google-image-settings.ts","../src/transcription/google-transcription-model-options.ts","../src/speech-translation/google-speech-translation-model-options.ts","../src/google-provider.ts","../src/realtime/google-realtime-model.ts","../src/realtime/google-realtime-model-options.ts","../src/transcription/google-transcription-model.ts","../src/speech-translation/google-speech-translation-model.ts","../src/version.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["DecisionModelV4","BatchV4","SpeechTranslationModelV4","RealtimeFactoryV4","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4ServerEvent","RealtimeModelV4ClientEvent","RealtimeModelV4","RealtimeModelV4SessionConfig","TranscriptionModelV4StreamOptions","SpeechTranslationModelV4StreamOptions","SpeechTranslationModelV4"],"sources":["../src/google-error.ts","../src/google-language-model-options.ts","../src/google-language-model.ts","../src/google-prompt.ts","../src/tool/google-search.ts","../src/google-image-model-options.ts","../src/google-embedding-model-options.ts","../src/google-video-model-options.ts","../src/google-video-settings.ts","../src/google-speech-model-options.ts","../src/google-files.ts","../src/interactions/google-interactions-language-model-options.ts","../src/interactions/google-interactions-provider-metadata.ts","../src/interactions/google-interactions-agent.ts","../src/google-tools.ts","../src/google-image-settings.ts","../src/transcription/google-transcription-model-options.ts","../src/speech-translation/google-speech-translation-model-options.ts","../src/google-provider.ts","../src/realtime/google-realtime-model.ts","../src/realtime/google-realtime-model-options.ts","../src/transcription/google-transcription-model.ts","../src/speech-translation/google-speech-translation-model.ts","../src/version.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,15 +3,16 @@ import { Experimental_DecisionLanguageModel } from "@ai-sdk/provider-utils/exper
|
|
|
3
3
|
import { AISDKError, InvalidArgumentError, InvalidResponseDataError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
5
|
//#region src/version.ts
|
|
6
|
-
const VERSION = "4.0.
|
|
6
|
+
const VERSION = "4.0.100";
|
|
7
7
|
//#endregion
|
|
8
8
|
//#region src/google-error.ts
|
|
9
|
-
const
|
|
9
|
+
const getGoogleErrorSchema = () => z.object({
|
|
10
10
|
code: z.number().nullable(),
|
|
11
11
|
message: z.string(),
|
|
12
12
|
status: z.string(),
|
|
13
13
|
details: z.array(z.unknown()).nullish()
|
|
14
|
-
})
|
|
14
|
+
});
|
|
15
|
+
const googleErrorDataSchema = lazySchema(() => zodSchema(z.object({ error: getGoogleErrorSchema() })));
|
|
15
16
|
const googleFailedResponseHandler = createJsonErrorResponseHandler({
|
|
16
17
|
errorSchema: googleErrorDataSchema,
|
|
17
18
|
errorToMessage: (data) => data.error.message
|
|
@@ -1682,7 +1683,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1682
1683
|
jsonResponseToolName: jsonResponseTool?.name
|
|
1683
1684
|
};
|
|
1684
1685
|
}
|
|
1685
|
-
static convertGenerateContentResponse({ config, response, warnings, providerOptionsNames, toolNameMapping, jsonResponseToolName, initialPromptTokenCount }) {
|
|
1686
|
+
static convertGenerateContentResponse({ config, response, warnings, providerOptionsNames, toolNameMapping, jsonResponseToolName, initialPromptTokenCount, groundingMetadataPerRequest }) {
|
|
1686
1687
|
const wrapProviderMetadata = (payload) => Object.fromEntries(providerOptionsNames.map((name) => [name, payload]));
|
|
1687
1688
|
const candidate = response.candidates?.[0];
|
|
1688
1689
|
const promptBlockReason = response.promptFeedback?.blockReason;
|
|
@@ -1810,6 +1811,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1810
1811
|
providerMetadata: wrapProviderMetadata({
|
|
1811
1812
|
promptFeedback: response.promptFeedback ?? null,
|
|
1812
1813
|
groundingMetadata: candidate?.groundingMetadata ?? null,
|
|
1814
|
+
...groundingMetadataPerRequest != null ? { groundingMetadataPerRequest } : {},
|
|
1813
1815
|
urlContextMetadata: candidate?.urlContextMetadata ?? null,
|
|
1814
1816
|
safetyRatings: candidate?.safetyRatings ?? null,
|
|
1815
1817
|
usageMetadata: usageMetadata ?? null,
|
|
@@ -1835,11 +1837,13 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1835
1837
|
});
|
|
1836
1838
|
let { responseHeaders, value: response, rawValue: rawResponse } = await generateContent(args);
|
|
1837
1839
|
const content = [];
|
|
1840
|
+
const groundingMetadataPerRequest = [];
|
|
1838
1841
|
let usageMetadata;
|
|
1839
1842
|
const firstPromptTokenCount = response.usageMetadata?.promptTokenCount;
|
|
1840
1843
|
let isContinued = false;
|
|
1841
1844
|
while (true) {
|
|
1842
1845
|
const candidate = response.candidates?.[0];
|
|
1846
|
+
groundingMetadataPerRequest.push(candidate?.groundingMetadata ?? null);
|
|
1843
1847
|
const continuationToken = candidate?.finishReason === "CONTINUATION" ? candidate.continuationToken : void 0;
|
|
1844
1848
|
usageMetadata = addGoogleUsageMetadata(usageMetadata, response.usageMetadata ?? void 0);
|
|
1845
1849
|
if (continuationToken == null) break;
|
|
@@ -1867,7 +1871,8 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1867
1871
|
providerOptionsNames,
|
|
1868
1872
|
toolNameMapping,
|
|
1869
1873
|
jsonResponseToolName,
|
|
1870
|
-
initialPromptTokenCount: isContinued ? firstPromptTokenCount : void 0
|
|
1874
|
+
initialPromptTokenCount: isContinued ? firstPromptTokenCount : void 0,
|
|
1875
|
+
groundingMetadataPerRequest: isContinued ? groundingMetadataPerRequest : void 0
|
|
1871
1876
|
});
|
|
1872
1877
|
const result = {
|
|
1873
1878
|
...lastResult,
|
|
@@ -1897,16 +1902,24 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1897
1902
|
fetch: this.config.fetch
|
|
1898
1903
|
});
|
|
1899
1904
|
const { responseHeaders, value: firstResponse } = await streamGenerateContent(args);
|
|
1905
|
+
const groundingMetadataPerRequest = [];
|
|
1906
|
+
let requestGroundingMetadata = null;
|
|
1900
1907
|
const response = continueGoogleStream({
|
|
1901
1908
|
stream: firstResponse,
|
|
1902
1909
|
getContinuationToken: (chunk) => {
|
|
1903
1910
|
const candidate = chunk.candidates?.[0];
|
|
1911
|
+
if (candidate?.groundingMetadata != null) requestGroundingMetadata = candidate.groundingMetadata;
|
|
1904
1912
|
return candidate?.finishReason === "CONTINUATION" ? candidate.continuationToken ?? void 0 : void 0;
|
|
1905
1913
|
},
|
|
1906
|
-
continueStream: async (continuationToken) =>
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1914
|
+
continueStream: async (continuationToken) => {
|
|
1915
|
+
const { value } = await streamGenerateContent({
|
|
1916
|
+
...args,
|
|
1917
|
+
continuationToken
|
|
1918
|
+
});
|
|
1919
|
+
groundingMetadataPerRequest.push(requestGroundingMetadata);
|
|
1920
|
+
requestGroundingMetadata = null;
|
|
1921
|
+
return value;
|
|
1922
|
+
}
|
|
1910
1923
|
});
|
|
1911
1924
|
let finishReason = {
|
|
1912
1925
|
unified: "other",
|
|
@@ -1977,6 +1990,25 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1977
1990
|
return;
|
|
1978
1991
|
}
|
|
1979
1992
|
const value = chunk.value;
|
|
1993
|
+
if (value.error != null) {
|
|
1994
|
+
finishReason = {
|
|
1995
|
+
unified: "error",
|
|
1996
|
+
raw: void 0
|
|
1997
|
+
};
|
|
1998
|
+
const error = value.error;
|
|
1999
|
+
controller.enqueue({
|
|
2000
|
+
type: "error",
|
|
2001
|
+
error: createProviderStreamError({
|
|
2002
|
+
message: error.message,
|
|
2003
|
+
type: error.status,
|
|
2004
|
+
code: error.code ?? void 0,
|
|
2005
|
+
statusCode: error.code ?? void 0,
|
|
2006
|
+
isRetryable: error.code != null && (error.code === 408 || error.code === 409 || error.code === 429 || error.code >= 500),
|
|
2007
|
+
data: error
|
|
2008
|
+
})
|
|
2009
|
+
});
|
|
2010
|
+
return;
|
|
2011
|
+
}
|
|
1980
2012
|
if (!hasEmittedResponseMetadata && value.responseId != null) {
|
|
1981
2013
|
hasEmittedResponseMetadata = true;
|
|
1982
2014
|
controller.enqueue({
|
|
@@ -2283,6 +2315,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
2283
2315
|
providerMetadata: wrapProviderMetadata({
|
|
2284
2316
|
promptFeedback,
|
|
2285
2317
|
groundingMetadata: lastGroundingMetadata,
|
|
2318
|
+
...groundingMetadataPerRequest.length > 0 ? { groundingMetadataPerRequest: [...groundingMetadataPerRequest, requestGroundingMetadata] } : {},
|
|
2286
2319
|
urlContextMetadata: lastUrlContextMetadata,
|
|
2287
2320
|
safetyRatings: lastSafetyRatings,
|
|
2288
2321
|
usageMetadata: usage ?? null,
|
|
@@ -2596,6 +2629,7 @@ const responseSchema = lazySchema(() => zodSchema(z.object({
|
|
|
2596
2629
|
}).nullish()
|
|
2597
2630
|
})));
|
|
2598
2631
|
const chunkSchema = lazySchema(() => zodSchema(z.object({
|
|
2632
|
+
error: getGoogleErrorSchema().nullish(),
|
|
2599
2633
|
responseId: z.string().nullish(),
|
|
2600
2634
|
candidates: z.array(z.object({
|
|
2601
2635
|
content: getContentSchema().nullish(),
|