@ai-sdk/google 4.0.113 → 4.0.116
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 +31 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -17
- 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 +44 -16
- package/dist/internal/index.js.map +1 -1
- package/docs/15-google.mdx +8 -0
- package/package.json +3 -3
- package/src/google-json-accumulator.ts +49 -0
- package/src/google-language-model.ts +25 -20
- package/src/google-prepare-tools.ts +7 -0
- package/src/interactions/google-interactions-language-model-options.ts +2 -0
- package/src/interactions/google-interactions-language-model.ts +1 -0
- package/src/interactions/google-interactions-prompt.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# @ai-sdk/google
|
|
2
2
|
|
|
3
|
+
## 4.0.116
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 45337f0: Preserve the served service tier from the `x-gemini-service-tier` response header when usage metadata omits it, for generated and streamed responses.
|
|
8
|
+
- 304dec5: Apply contiguous array-index validation to dotted numeric paths in streamed tool arguments, while preserving numeric object keys and valid contiguous array updates.
|
|
9
|
+
- Updated dependencies [88b9575]
|
|
10
|
+
- @ai-sdk/provider-utils@5.0.78
|
|
11
|
+
|
|
12
|
+
## 4.0.115
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Updated dependencies [9f37b45]
|
|
17
|
+
- @ai-sdk/provider-utils@5.0.77
|
|
18
|
+
|
|
19
|
+
## 4.0.114
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- 6400cf8: Add `resolveProviderOptions` to parse provider options that a model accepts under several `providerOptions` keys, either as aliases (`first`) or merged in order (`merge`), and use it for the existing multi-key lookups in the OpenAI, OpenAI-compatible, Anthropic, Google, and Amazon Bedrock models. Resolution behavior for these models is unchanged.
|
|
24
|
+
- a210a29: Pass `providerOptions.google.labels` through to Google and Vertex AI Interactions requests, including streaming, so callers can attach request metadata such as `safety_identifier`.
|
|
25
|
+
- 32dc1d2: Omit Google provider-defined tools, including File Search and Vertex RAG Store, when `toolChoice` is `none` so disabled tools cannot retrieve data or execute server-side. Preserve function declarations needed by conversation history while disabling function calling. This also applies when structured output uses a synthetic JSON response tool.
|
|
26
|
+
- 26fc2a9: skip streamed tool-call array indexes that leave a gap so a small response can't build a huge sparse array
|
|
27
|
+
- Updated dependencies [6400cf8]
|
|
28
|
+
- Updated dependencies [f608c05]
|
|
29
|
+
- Updated dependencies [cab9c1f]
|
|
30
|
+
- Updated dependencies [c70adf6]
|
|
31
|
+
- @ai-sdk/provider-utils@5.0.76
|
|
32
|
+
- @ai-sdk/provider@4.0.37
|
|
33
|
+
|
|
3
34
|
## 4.0.113
|
|
4
35
|
|
|
5
36
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -405,6 +405,7 @@ type GoogleInteractionsVideoOptions = {
|
|
|
405
405
|
* All fields are `.nullish()` per the existing google provider convention.
|
|
406
406
|
*/
|
|
407
407
|
declare const googleInteractionsLanguageModelOptions: import("@ai-sdk/provider-utils").LazySchema<{
|
|
408
|
+
labels?: Record<string, string> | null | undefined;
|
|
408
409
|
previousInteractionId?: string | null | undefined;
|
|
409
410
|
store?: boolean | null | undefined;
|
|
410
411
|
agent?: string | null | undefined;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["DecisionModelV4","BatchV4","SpeechTranslationModelV4","RealtimeFactoryV4","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4SessionIntent","RealtimeModelV4ServerConnection","RealtimeModelV4ServerEvent","RealtimeModelV4","RealtimeModelV4ClientEvent","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":";;;;cAgBM,wDAAqB;;;;;;;;KAQf,kBAAkB,mBAAmB;;;KCjBrC;cAqDC,6DAA0B;;;;;;;;;;;;;;;WAA1B;;;;;;;;;;;;;;;;;;;;;;;;KA+OD,6BAA6B,mBAChC;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["DecisionModelV4","BatchV4","SpeechTranslationModelV4","RealtimeFactoryV4","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4SessionIntent","RealtimeModelV4ServerConnection","RealtimeModelV4ServerEvent","RealtimeModelV4","RealtimeModelV4ClientEvent","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
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { EXPERIMENTAL_EMBEDDING_MODEL_PROVIDER_OPTIONS_TRANSFORMER, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, connectToWebSocket, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertInlineFileDataToUint8Array, convertJsonResponseToolStream, convertToBase64, convertUint8ArrayToBase64, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonLinesResponseHandler, createJsonResponseHandler, createNullLanguageModelUsage, createProviderExecutedToolFactory, createProviderStreamError, createToolNameMapping, delay, detectMediaType, downloadBlob, encodePathSegment, generateId, getFromApi, getRuntimeEnvironmentUserAgent, getTopLevelMediaType, isAbortError, isCustomReasoning, isFullMediaType, isRecord, isSameOrigin, isUrlSupported, lazySchema, loadApiKey, mapReasoningToProviderBudget, mapReasoningToProviderEffort, normalizeBatchRequestCounts, parseProviderOptions, postJsonToApi, postToApi, removeUndefinedEntries, resolve, resolveFullMediaType, resolveProviderReference, resolveWith, safeParseJSON, safeValidateTypes, secureJsonParse, serializeModelOptions, stringifyWithBigIntAndCycles, waitForWebSocketBufferDrain, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
|
|
1
|
+
import { EXPERIMENTAL_EMBEDDING_MODEL_PROVIDER_OPTIONS_TRANSFORMER, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, connectToWebSocket, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertInlineFileDataToUint8Array, convertJsonResponseToolStream, convertToBase64, convertUint8ArrayToBase64, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonLinesResponseHandler, createJsonResponseHandler, createNullLanguageModelUsage, createProviderExecutedToolFactory, createProviderStreamError, createToolNameMapping, delay, detectMediaType, downloadBlob, encodePathSegment, generateId, getFromApi, getRuntimeEnvironmentUserAgent, getTopLevelMediaType, isAbortError, isCustomReasoning, isFullMediaType, isRecord, isSameOrigin, isUrlSupported, lazySchema, loadApiKey, mapReasoningToProviderBudget, mapReasoningToProviderEffort, normalizeBatchRequestCounts, parseProviderOptions, postJsonToApi, postToApi, removeUndefinedEntries, resolve, resolveFullMediaType, resolveProviderOptions, resolveProviderReference, resolveWith, safeParseJSON, safeValidateTypes, secureJsonParse, serializeModelOptions, stringifyWithBigIntAndCycles, waitForWebSocketBufferDrain, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
|
|
2
2
|
import { Experimental_DecisionLanguageModel } from "@ai-sdk/provider-utils/experimental-decision";
|
|
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.116";
|
|
7
7
|
//#endregion
|
|
8
8
|
//#region src/google-error.ts
|
|
9
9
|
const getGoogleErrorSchema = () => z.object({
|
|
@@ -1243,6 +1243,7 @@ function getGoogleModelCapabilities(modelId) {
|
|
|
1243
1243
|
//#endregion
|
|
1244
1244
|
//#region src/google-prepare-tools.ts
|
|
1245
1245
|
function prepareTools({ tools, toolChoice, modelId, isVertexProvider = false }) {
|
|
1246
|
+
if (toolChoice?.type === "none") tools = tools?.filter((tool) => tool.type === "function");
|
|
1246
1247
|
tools = tools?.length ? tools : void 0;
|
|
1247
1248
|
const toolWarnings = [];
|
|
1248
1249
|
const { supportsGemini2Tools, supportsFileSearch, usesGemini3Features } = getGoogleModelCapabilities(modelId);
|
|
@@ -1439,6 +1440,7 @@ var GoogleJSONAccumulator = class {
|
|
|
1439
1440
|
const rawPath = (isArrayTerminator ? arg.jsonPath.slice(0, -2) : arg.jsonPath).replace(/^\$\./, "");
|
|
1440
1441
|
if (!rawPath || rawPath === "$") continue;
|
|
1441
1442
|
const segments = parsePath(rawPath);
|
|
1443
|
+
if (!normalizeAndCheckIndexes(this.accumulatedArgs, segments)) continue;
|
|
1442
1444
|
const existingValue = getNestedValue(this.accumulatedArgs, segments);
|
|
1443
1445
|
if (arg.stringValue != null && existingValue !== void 0) {
|
|
1444
1446
|
const escaped = JSON.stringify(arg.stringValue).slice(1, -1);
|
|
@@ -1664,6 +1666,35 @@ function getNestedValue(obj, segments) {
|
|
|
1664
1666
|
return current;
|
|
1665
1667
|
}
|
|
1666
1668
|
/**
|
|
1669
|
+
* Normalizes dotted array indexes in place and checks that every array index
|
|
1670
|
+
* is an existing element or the next one. Arrays are streamed in order, and a
|
|
1671
|
+
* sparse index would make `finalize()` serialize one `null` per hole, so a tiny
|
|
1672
|
+
* response could allocate without bound.
|
|
1673
|
+
* A missing or `null` parent is replaced with a new array, so it starts at 0.
|
|
1674
|
+
*
|
|
1675
|
+
* Input: ({items:["a"]}, ["items",1]) or ({items:["a"]}, ["items",5])
|
|
1676
|
+
* Output: true or false
|
|
1677
|
+
*/
|
|
1678
|
+
function normalizeAndCheckIndexes(obj, segments) {
|
|
1679
|
+
let current = obj;
|
|
1680
|
+
for (let i = 0; i < segments.length; i++) {
|
|
1681
|
+
let pathSegment = segments[i];
|
|
1682
|
+
if (Array.isArray(current) && typeof pathSegment === "string") {
|
|
1683
|
+
const index = Number(pathSegment);
|
|
1684
|
+
if (Number.isInteger(index) && index >= 0 && index < 2 ** 32 - 1 && String(index) === pathSegment) {
|
|
1685
|
+
pathSegment = index;
|
|
1686
|
+
segments[i] = index;
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
if (typeof pathSegment === "number") {
|
|
1690
|
+
const length = Array.isArray(current) ? current.length : current == null ? 0 : void 0;
|
|
1691
|
+
if (length !== void 0 && pathSegment > length) return false;
|
|
1692
|
+
}
|
|
1693
|
+
current = current != null && typeof current === "object" && hasOwnProperty(current, pathSegment) ? current[pathSegment] : void 0;
|
|
1694
|
+
}
|
|
1695
|
+
return true;
|
|
1696
|
+
}
|
|
1697
|
+
/**
|
|
1667
1698
|
* Sets a value at a nested path, creating intermediate objects or arrays as needed.
|
|
1668
1699
|
*
|
|
1669
1700
|
* Input: obj={}, segments=["recipe","ingredients",0,"name"], value="Noodles"
|
|
@@ -1753,18 +1784,10 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1753
1784
|
static async prepareRequest({ modelId, config, options: { prompt, maxOutputTokens, temperature, topP, topK, frequencyPenalty, presencePenalty, stopSequences, responseFormat, seed, tools, toolChoice, reasoning, providerOptions, abortSignal }, isStreaming = false }) {
|
|
1754
1785
|
const warnings = [];
|
|
1755
1786
|
const providerOptionsNames = config.provider.includes("vertex") ? ["googleVertex", "vertex"] : ["google"];
|
|
1756
|
-
|
|
1757
|
-
for (const name of providerOptionsNames) {
|
|
1758
|
-
googleOptions = await parseProviderOptions({
|
|
1759
|
-
provider: name,
|
|
1760
|
-
providerOptions,
|
|
1761
|
-
schema: googleLanguageModelOptions
|
|
1762
|
-
});
|
|
1763
|
-
if (googleOptions != null) break;
|
|
1764
|
-
}
|
|
1765
|
-
if (googleOptions == null && !providerOptionsNames.includes("google")) googleOptions = await parseProviderOptions({
|
|
1766
|
-
provider: "google",
|
|
1787
|
+
const { options: googleOptions } = await resolveProviderOptions({
|
|
1767
1788
|
providerOptions,
|
|
1789
|
+
namespaces: [...providerOptionsNames, "google"],
|
|
1790
|
+
resolution: "first",
|
|
1768
1791
|
schema: googleLanguageModelOptions
|
|
1769
1792
|
});
|
|
1770
1793
|
const isVertexProvider = config.provider.startsWith("google.vertex.");
|
|
@@ -1900,7 +1923,8 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1900
1923
|
};
|
|
1901
1924
|
}
|
|
1902
1925
|
async getArgs(options, { isStreaming = false } = {}) {
|
|
1903
|
-
const { responseFormat,
|
|
1926
|
+
const { responseFormat, toolChoice } = options;
|
|
1927
|
+
const tools = toolChoice?.type === "none" ? options.tools?.filter((tool) => tool.type === "function") : options.tools;
|
|
1904
1928
|
const entry = getGoogleLanguageModelEntry(this.modelId);
|
|
1905
1929
|
const { structuredOutput } = entry.capabilities.language;
|
|
1906
1930
|
let jsonResponseTool;
|
|
@@ -1932,7 +1956,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1932
1956
|
jsonResponseToolName: jsonResponseTool?.name
|
|
1933
1957
|
};
|
|
1934
1958
|
}
|
|
1935
|
-
static convertGenerateContentResponse({ config, response, warnings, providerOptionsNames, toolNameMapping, jsonResponseToolName, initialPromptTokenCount, groundingMetadataPerRequest }) {
|
|
1959
|
+
static convertGenerateContentResponse({ config, response, responseHeaders, warnings, providerOptionsNames, toolNameMapping, jsonResponseToolName, initialPromptTokenCount, groundingMetadataPerRequest }) {
|
|
1936
1960
|
const wrapProviderMetadata = (payload) => Object.fromEntries(providerOptionsNames.map((name) => [name, payload]));
|
|
1937
1961
|
const candidate = response.candidates?.[0];
|
|
1938
1962
|
const promptBlockReason = response.promptFeedback?.blockReason;
|
|
@@ -2065,7 +2089,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
2065
2089
|
safetyRatings: candidate?.safetyRatings ?? null,
|
|
2066
2090
|
usageMetadata: usageMetadata ?? null,
|
|
2067
2091
|
finishMessage: candidate?.finishMessage ?? null,
|
|
2068
|
-
serviceTier: usageMetadata?.serviceTier ?? null,
|
|
2092
|
+
serviceTier: usageMetadata?.serviceTier ?? responseHeaders?.["x-gemini-service-tier"] ?? null,
|
|
2069
2093
|
...candidate?.continuationToken != null ? { continuationToken: candidate.continuationToken } : {},
|
|
2070
2094
|
...initialPromptTokenCount != null ? { initialPromptTokenCount } : {}
|
|
2071
2095
|
}),
|
|
@@ -2115,6 +2139,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
2115
2139
|
...response,
|
|
2116
2140
|
usageMetadata
|
|
2117
2141
|
},
|
|
2142
|
+
responseHeaders,
|
|
2118
2143
|
warnings,
|
|
2119
2144
|
providerOptionsNames,
|
|
2120
2145
|
toolNameMapping,
|
|
@@ -2635,7 +2660,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
2635
2660
|
safetyRatings: lastSafetyRatings,
|
|
2636
2661
|
usageMetadata: usage ?? null,
|
|
2637
2662
|
finishMessage: lastFinishMessage,
|
|
2638
|
-
serviceTier: usage?.serviceTier ?? null,
|
|
2663
|
+
serviceTier: usage?.serviceTier ?? responseHeaders?.["x-gemini-service-tier"] ?? null,
|
|
2639
2664
|
...lastContinuationToken != null && (finishReason.raw === "MAX_TOKENS" || finishReason.raw === "CONTINUATION") ? { continuationToken: lastContinuationToken } : {},
|
|
2640
2665
|
...initialPromptTokenCount != null ? { initialPromptTokenCount } : {}
|
|
2641
2666
|
})
|
|
@@ -5947,6 +5972,8 @@ const googleInteractionsEventSchema = lazySchema(() => zodSchema((() => {
|
|
|
5947
5972
|
* All fields are `.nullish()` per the existing google provider convention.
|
|
5948
5973
|
*/
|
|
5949
5974
|
const googleInteractionsLanguageModelOptions = lazySchema(() => zodSchema(z.object({
|
|
5975
|
+
/** User-defined request metadata, including `safety_identifier`. */
|
|
5976
|
+
labels: z.record(z.string(), z.string()).nullish(),
|
|
5950
5977
|
previousInteractionId: z.string().nullish(),
|
|
5951
5978
|
store: z.boolean().nullish(),
|
|
5952
5979
|
agent: z.string().nullish(),
|
|
@@ -7086,6 +7113,7 @@ var GoogleInteractionsLanguageModel = class GoogleInteractionsLanguageModel {
|
|
|
7086
7113
|
args: pruneUndefined({
|
|
7087
7114
|
...isAgent ? { agent: this.agent } : { model: this.modelId },
|
|
7088
7115
|
input,
|
|
7116
|
+
labels: googleOptions?.labels ?? void 0,
|
|
7089
7117
|
system_instruction: systemInstruction,
|
|
7090
7118
|
tools: toolsForBody,
|
|
7091
7119
|
response_format: responseFormatEntries.length > 0 ? responseFormatEntries : void 0,
|