@ai-sdk/google 4.0.112 → 4.0.113
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 +6 -0
- package/dist/index.js +1 -1
- package/dist/internal/index.d.ts +139 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -1
- package/package.json +1 -1
- package/src/internal/index.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @ai-sdk/google
|
|
2
2
|
|
|
3
|
+
## 4.0.113
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 27a8a77: Refactor Google Vertex model ID logic into a model catalog that declares capabilities and provider options, and generate provider capability documentation from it. Export Google catalog metadata internally for Vertex to reuse. Request behavior is unchanged.
|
|
8
|
+
|
|
3
9
|
## 4.0.112
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ 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.113";
|
|
7
7
|
//#endregion
|
|
8
8
|
//#region src/google-error.ts
|
|
9
9
|
const getGoogleErrorSchema = () => z.object({
|
package/dist/internal/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FetchFunction, InferSchema, Resolvable, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, createToolNameMapping } from "@ai-sdk/provider-utils";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
|
-
import { JSONObject, LanguageModelV4, LanguageModelV4CallOptions, LanguageModelV4GenerateResult, LanguageModelV4StreamResult, SharedV4Warning, SpeechModelV4 } from "@ai-sdk/provider";
|
|
3
|
+
import { JSONObject, LanguageModelV4, LanguageModelV4CallOptions, LanguageModelV4GenerateResult, LanguageModelV4StreamResult, ModelCapabilities, ModelCapability, ModelEntry, SharedV4Warning, SpeechModelV4 } from "@ai-sdk/provider";
|
|
4
4
|
//#region src/google-prompt.d.ts
|
|
5
5
|
type GoogleSystemInstruction = {
|
|
6
6
|
parts: Array<{
|
|
@@ -91,6 +91,46 @@ type GoogleFunctionResponsePart = {
|
|
|
91
91
|
//#endregion
|
|
92
92
|
//#region src/google-language-model-options.d.ts
|
|
93
93
|
type GoogleModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'gemini-3.5-flash-lite' | 'gemini-3.6-flash' | 'gemini-3.7-flash' | 'gemini-3.8-flash' | 'gemini-4-argon' | 'gemini-nano-banana-2.1' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'deep-research-max-preview-04-2026' | 'deep-research-preview-04-2026' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {});
|
|
94
|
+
declare const googleLanguageModelOptions: import("@ai-sdk/provider-utils").LazySchema<{
|
|
95
|
+
responseModalities?: ("TEXT" | "IMAGE" | "AUDIO")[] | undefined;
|
|
96
|
+
thinkingConfig?: {
|
|
97
|
+
thinkingBudget?: number | undefined;
|
|
98
|
+
includeThoughts?: boolean | undefined;
|
|
99
|
+
thinkingLevel?: "minimal" | "low" | "medium" | "high" | undefined;
|
|
100
|
+
} | undefined;
|
|
101
|
+
cachedContent?: string | undefined;
|
|
102
|
+
structuredOutputs?: boolean | undefined;
|
|
103
|
+
safetySettings?: {
|
|
104
|
+
category: "HARM_CATEGORY_UNSPECIFIED" | "HARM_CATEGORY_HATE_SPEECH" | "HARM_CATEGORY_DANGEROUS_CONTENT" | "HARM_CATEGORY_HARASSMENT" | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | "HARM_CATEGORY_CIVIC_INTEGRITY";
|
|
105
|
+
threshold: "HARM_BLOCK_THRESHOLD_UNSPECIFIED" | "BLOCK_LOW_AND_ABOVE" | "BLOCK_MEDIUM_AND_ABOVE" | "BLOCK_ONLY_HIGH" | "BLOCK_NONE" | "OFF";
|
|
106
|
+
}[] | undefined;
|
|
107
|
+
threshold?: "HARM_BLOCK_THRESHOLD_UNSPECIFIED" | "BLOCK_LOW_AND_ABOVE" | "BLOCK_MEDIUM_AND_ABOVE" | "BLOCK_ONLY_HIGH" | "BLOCK_NONE" | "OFF" | undefined;
|
|
108
|
+
audioTimestamp?: boolean | undefined;
|
|
109
|
+
labels?: Record<string, string> | undefined;
|
|
110
|
+
mediaResolution?: "MEDIA_RESOLUTION_UNSPECIFIED" | "MEDIA_RESOLUTION_LOW" | "MEDIA_RESOLUTION_MEDIUM" | "MEDIA_RESOLUTION_HIGH" | undefined;
|
|
111
|
+
imageConfig?: {
|
|
112
|
+
aspectRatio?: "1:1" | "2:3" | "3:2" | "3:4" | "4:3" | "4:5" | "5:4" | "9:16" | "16:9" | "21:9" | "1:8" | "8:1" | "1:4" | "4:1" | undefined;
|
|
113
|
+
imageSize?: "1K" | "2K" | "4K" | "512" | undefined;
|
|
114
|
+
personGeneration?: "PERSON_GENERATION_UNSPECIFIED" | "ALLOW_ALL" | "ALLOW_ADULT" | "ALLOW_NONE" | undefined;
|
|
115
|
+
prominentPeople?: "PROMINENT_PEOPLE_UNSPECIFIED" | "ALLOW_PROMINENT_PEOPLE" | "BLOCK_PROMINENT_PEOPLE" | undefined;
|
|
116
|
+
imageOutputOptions?: {
|
|
117
|
+
mimeType?: "image/jpeg" | "image/png" | undefined;
|
|
118
|
+
compressionQuality?: number | undefined;
|
|
119
|
+
} | undefined;
|
|
120
|
+
} | undefined;
|
|
121
|
+
retrievalConfig?: {
|
|
122
|
+
latLng?: {
|
|
123
|
+
latitude: number;
|
|
124
|
+
longitude: number;
|
|
125
|
+
} | undefined;
|
|
126
|
+
} | undefined;
|
|
127
|
+
streamFunctionCallArguments?: boolean | undefined;
|
|
128
|
+
serviceTier?: "standard" | "flex" | "priority" | undefined;
|
|
129
|
+
continuationToken?: string | undefined;
|
|
130
|
+
sharedRequestType?: "standard" | "flex" | "priority" | undefined;
|
|
131
|
+
requestType?: "shared" | undefined;
|
|
132
|
+
}>;
|
|
133
|
+
type GoogleLanguageModelOptions = InferSchema<typeof googleLanguageModelOptions>;
|
|
94
134
|
//#endregion
|
|
95
135
|
//#region src/google-language-model.d.ts
|
|
96
136
|
export type GoogleLanguageModelConfig = {
|
|
@@ -654,5 +694,103 @@ export declare class GoogleInteractionsLanguageModel implements LanguageModelV4
|
|
|
654
694
|
*/
|
|
655
695
|
type GoogleInteractionsAgentName = 'deep-research-pro-preview-12-2025' | 'deep-research-preview-04-2026' | 'deep-research-max-preview-04-2026' | 'antigravity-preview-05-2026';
|
|
656
696
|
//#endregion
|
|
697
|
+
//#region src/google-model-catalog.d.ts
|
|
698
|
+
type GoogleLanguageProviderOption = keyof GoogleLanguageModelOptions;
|
|
699
|
+
/** Options accepted under providerOptions.google (or googleVertex on Vertex). */
|
|
700
|
+
export declare const googleProviderOptions: {
|
|
701
|
+
readonly language: {
|
|
702
|
+
responseModalities: {
|
|
703
|
+
description: string;
|
|
704
|
+
};
|
|
705
|
+
thinkingConfig: {
|
|
706
|
+
description: string;
|
|
707
|
+
};
|
|
708
|
+
cachedContent: {
|
|
709
|
+
description: string;
|
|
710
|
+
};
|
|
711
|
+
structuredOutputs: {
|
|
712
|
+
description: string;
|
|
713
|
+
};
|
|
714
|
+
safetySettings: {
|
|
715
|
+
description: string;
|
|
716
|
+
};
|
|
717
|
+
threshold: {
|
|
718
|
+
description: string;
|
|
719
|
+
};
|
|
720
|
+
audioTimestamp: {
|
|
721
|
+
description: string;
|
|
722
|
+
};
|
|
723
|
+
labels: {
|
|
724
|
+
description: string;
|
|
725
|
+
};
|
|
726
|
+
mediaResolution: {
|
|
727
|
+
description: string;
|
|
728
|
+
};
|
|
729
|
+
imageConfig: {
|
|
730
|
+
description: string;
|
|
731
|
+
};
|
|
732
|
+
retrievalConfig: {
|
|
733
|
+
description: string;
|
|
734
|
+
};
|
|
735
|
+
streamFunctionCallArguments: {
|
|
736
|
+
description: string;
|
|
737
|
+
};
|
|
738
|
+
serviceTier: {
|
|
739
|
+
description: string;
|
|
740
|
+
};
|
|
741
|
+
continuationToken: {
|
|
742
|
+
description: string;
|
|
743
|
+
};
|
|
744
|
+
sharedRequestType: {
|
|
745
|
+
description: string;
|
|
746
|
+
};
|
|
747
|
+
requestType: {
|
|
748
|
+
description: string;
|
|
749
|
+
};
|
|
750
|
+
};
|
|
751
|
+
};
|
|
752
|
+
type GoogleLanguageCapabilities = NonNullable<ModelCapabilities['language']> & {
|
|
753
|
+
tools: NonNullable<ModelCapabilities['language']>['tools'] & {
|
|
754
|
+
/** Existing request gate for Gemini 2 provider-defined tools. */
|
|
755
|
+
gemini2: boolean;
|
|
756
|
+
googleSearch: ModelCapability;
|
|
757
|
+
urlContext: ModelCapability;
|
|
758
|
+
fileSearch: boolean;
|
|
759
|
+
mixed: boolean;
|
|
760
|
+
functionResponseParts: boolean;
|
|
761
|
+
};
|
|
762
|
+
reasoning: NonNullable<ModelCapabilities['language']>['reasoning'] & {
|
|
763
|
+
minBudget: number;
|
|
764
|
+
maxBudget: number;
|
|
765
|
+
};
|
|
766
|
+
sampling: NonNullable<ModelCapabilities['language']>['sampling'] & {
|
|
767
|
+
topK: ModelCapability;
|
|
768
|
+
penalties: ModelCapability;
|
|
769
|
+
};
|
|
770
|
+
structuredOutput: {
|
|
771
|
+
withFunctionTools: boolean;
|
|
772
|
+
};
|
|
773
|
+
};
|
|
774
|
+
type GoogleLanguageRequestConfig = {
|
|
775
|
+
systemInstruction: 'system' | 'user';
|
|
776
|
+
thinkingFormat: 'level' | 'budget';
|
|
777
|
+
reasoningMaxOutputTokens: number;
|
|
778
|
+
jsonResponseTool: boolean;
|
|
779
|
+
};
|
|
780
|
+
type GoogleLanguageModelEntry = ModelEntry<{
|
|
781
|
+
language: GoogleLanguageRequestConfig;
|
|
782
|
+
}> & {
|
|
783
|
+
capabilities: {
|
|
784
|
+
language: GoogleLanguageCapabilities;
|
|
785
|
+
};
|
|
786
|
+
providerOptions: {
|
|
787
|
+
language: Record<GoogleLanguageProviderOption, ModelCapability>;
|
|
788
|
+
};
|
|
789
|
+
requestConfig: {
|
|
790
|
+
language: GoogleLanguageRequestConfig;
|
|
791
|
+
};
|
|
792
|
+
};
|
|
793
|
+
export declare function getGoogleLanguageModelEntry(modelId: string): GoogleLanguageModelEntry;
|
|
794
|
+
//#endregion
|
|
657
795
|
export type { GoogleInteractionsAgentName, GoogleInteractionsModelId, GoogleInteractionsModelInput, GoogleModelId };
|
|
658
796
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["_$__google_prompt0.GoogleContent","_$__google_prompt0.GoogleSystemInstruction"],"sources":["../../src/google-prompt.ts","../../src/google-language-model-options.ts","../../src/google-language-model.ts","../../src/google-speech-model-options.ts","../../src/google-speech-model.ts","../../src/google-speech-input.ts","../../src/google-tools.ts","../../src/interactions/google-interactions-language-model-options.ts","../../src/interactions/google-interactions-language-model.ts","../../src/interactions/google-interactions-agent.ts"],"mappings":";;;;KAcY;EACV,OAAO;IAAQ;;;KAGL;EACV;EACA,OAAO,MAAM;;cAGF,2BAAyB,EAAA;;;;GAOpC,EAAA,KAAA;;KAGU,sBAAsB,EAAE,aAAa;KAErC;EACN;EAAc;EAAmB;;EAEjC;IAAc;IAAkB;;EAChC,gBAAgB;EAChB;EACA;;EAGA;IAAgB;IAAa;IAAc;;EAC3C;;EAGA;IACE;IACA;IACA;IACA,QAAQ,MAAM;;;EAIhB;IAAY;IAAkB;;EAC9B,gBAAgB;EAChB;EACA;;EAGA;IACE;IACA;IACA;;EAEF;;EAGA;IACE;IACA;IACA;;EAEF;;EAGA;IACE;IACA;;;EAIF;IACE;IACA;;;KAII;EAEN;IAAc;IAAkB;;;EAGhC;IAAY;IAAkB;;;;;KCxFxB;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["_$__google_prompt0.GoogleContent","_$__google_prompt0.GoogleSystemInstruction"],"sources":["../../src/google-prompt.ts","../../src/google-language-model-options.ts","../../src/google-language-model.ts","../../src/google-speech-model-options.ts","../../src/google-speech-model.ts","../../src/google-speech-input.ts","../../src/google-tools.ts","../../src/interactions/google-interactions-language-model-options.ts","../../src/interactions/google-interactions-language-model.ts","../../src/interactions/google-interactions-agent.ts","../../src/google-model-catalog.ts"],"mappings":"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"}
|
package/dist/internal/index.js
CHANGED
|
@@ -5988,6 +5988,6 @@ function pruneUndefined(obj) {
|
|
|
5988
5988
|
return result;
|
|
5989
5989
|
}
|
|
5990
5990
|
//#endregion
|
|
5991
|
-
export { GoogleInteractionsLanguageModel, GoogleLanguageModel, GoogleSpeechModel, getGoogleSpeechInput, getGroundingMetadataSchema, getUrlContextMetadataSchema, googleTools, responseSchema };
|
|
5991
|
+
export { GoogleInteractionsLanguageModel, GoogleLanguageModel, GoogleSpeechModel, getGoogleLanguageModelEntry, getGoogleSpeechInput, getGroundingMetadataSchema, getUrlContextMetadataSchema, googleProviderOptions, googleTools, responseSchema };
|
|
5992
5992
|
|
|
5993
5993
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
package/src/internal/index.ts
CHANGED
|
@@ -9,3 +9,8 @@ export {
|
|
|
9
9
|
} from '../interactions/google-interactions-language-model';
|
|
10
10
|
export type { GoogleInteractionsModelId } from '../interactions/google-interactions-language-model-options';
|
|
11
11
|
export type { GoogleInteractionsAgentName } from '../interactions/google-interactions-agent';
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
getGoogleLanguageModelEntry,
|
|
15
|
+
googleProviderOptions,
|
|
16
|
+
} from '../google-model-catalog';
|