@ai-sdk/google 4.0.0-beta.31 → 4.0.0-beta.32

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/google-provider.ts","../src/version.ts","../src/google-generative-ai-embedding-model.ts","../src/google-error.ts","../src/google-generative-ai-embedding-options.ts","../src/google-generative-ai-language-model.ts","../src/convert-google-generative-ai-usage.ts","../src/convert-json-schema-to-openapi-schema.ts","../src/convert-to-google-generative-ai-messages.ts","../src/get-model-path.ts","../src/google-generative-ai-options.ts","../src/google-prepare-tools.ts","../src/map-google-generative-ai-finish-reason.ts","../src/tool/code-execution.ts","../src/tool/enterprise-web-search.ts","../src/tool/file-search.ts","../src/tool/google-maps.ts","../src/tool/google-search.ts","../src/tool/url-context.ts","../src/tool/vertex-rag-store.ts","../src/google-tools.ts","../src/google-generative-ai-image-model.ts","../src/google-generative-ai-files.ts","../src/google-generative-ai-video-model.ts"],"sourcesContent":["export type { GoogleErrorData } from './google-error';\nexport type {\n GoogleLanguageModelOptions,\n /** @deprecated Use `GoogleLanguageModelOptions` instead. */\n GoogleLanguageModelOptions as GoogleGenerativeAIProviderOptions,\n} from './google-generative-ai-options';\nexport type { GoogleGenerativeAIProviderMetadata } from './google-generative-ai-prompt';\nexport type {\n GoogleImageModelOptions,\n /** @deprecated Use `GoogleImageModelOptions` instead. */\n GoogleImageModelOptions as GoogleGenerativeAIImageProviderOptions,\n} from './google-generative-ai-image-model';\nexport type {\n GoogleEmbeddingModelOptions,\n /** @deprecated Use `GoogleEmbeddingModelOptions` instead. */\n GoogleEmbeddingModelOptions as GoogleGenerativeAIEmbeddingProviderOptions,\n} from './google-generative-ai-embedding-options';\nexport type {\n GoogleVideoModelOptions,\n /** @deprecated Use `GoogleVideoModelOptions` instead. */\n GoogleVideoModelOptions as GoogleGenerativeAIVideoProviderOptions,\n} from './google-generative-ai-video-model';\nexport type { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\nexport type { GoogleFilesUploadOptions } from './google-generative-ai-files';\nexport { createGoogleGenerativeAI, google } from './google-provider';\nexport type {\n GoogleGenerativeAIProvider,\n GoogleGenerativeAIProviderSettings,\n} from './google-provider';\nexport { VERSION } from './version';\n","import {\n EmbeddingModelV4,\n Experimental_VideoModelV4,\n FilesV4,\n ImageModelV4,\n LanguageModelV4,\n ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\nimport { GoogleGenerativeAIEmbeddingModel } from './google-generative-ai-embedding-model';\nimport { GoogleGenerativeAIEmbeddingModelId } from './google-generative-ai-embedding-options';\nimport { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model';\nimport { GoogleGenerativeAIModelId } from './google-generative-ai-options';\nimport { googleTools } from './google-tools';\n\nimport {\n GoogleGenerativeAIImageSettings,\n GoogleGenerativeAIImageModelId,\n} from './google-generative-ai-image-settings';\nimport { GoogleGenerativeAIImageModel } from './google-generative-ai-image-model';\nimport { GoogleGenerativeAIFiles } from './google-generative-ai-files';\nimport { GoogleGenerativeAIVideoModel } from './google-generative-ai-video-model';\nimport { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\n\nexport interface GoogleGenerativeAIProvider extends ProviderV4 {\n (modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n languageModel(modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n chat(modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(\n modelId: GoogleGenerativeAIImageModelId,\n settings?: GoogleGenerativeAIImageSettings,\n ): ImageModelV4;\n\n /**\n * @deprecated Use `chat()` instead.\n */\n generativeAI(modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(\n modelId: GoogleGenerativeAIEmbeddingModelId,\n ): EmbeddingModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: GoogleGenerativeAIVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(\n modelId: GoogleGenerativeAIVideoModelId,\n ): Experimental_VideoModelV4;\n\n files(): FilesV4;\n\n tools: typeof googleTools;\n}\n\nexport interface GoogleGenerativeAIProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is `https://generativelanguage.googleapis.com/v1beta`.\n */\n baseURL?: string;\n\n /**\n * API key that is being send using the `x-goog-api-key` header.\n * It defaults to the `GOOGLE_GENERATIVE_AI_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string | undefined>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Optional function to generate a unique ID for each request.\n */\n generateId?: () => string;\n\n /**\n * Custom provider name\n * Defaults to 'google.generative-ai'.\n */\n name?: string;\n}\n\n/**\n * Create a Google Generative AI provider instance.\n */\nexport function createGoogleGenerativeAI(\n options: GoogleGenerativeAIProviderSettings = {},\n): GoogleGenerativeAIProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://generativelanguage.googleapis.com/v1beta';\n\n const providerName = options.name ?? 'google.generative-ai';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'x-goog-api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'GOOGLE_GENERATIVE_AI_API_KEY',\n description: 'Google Generative AI',\n }),\n ...options.headers,\n },\n `ai-sdk/google/${VERSION}`,\n );\n\n const createChatModel = (modelId: GoogleGenerativeAIModelId) =>\n new GoogleGenerativeAILanguageModel(modelId, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n generateId: options.generateId ?? generateId,\n supportedUrls: () => ({\n '*': [\n // Google Generative Language \"files\" endpoint\n // e.g. https://generativelanguage.googleapis.com/v1beta/files/...\n new RegExp(`^${baseURL}/files/.*$`),\n // YouTube URLs (public or unlisted videos)\n new RegExp(\n `^https://(?:www\\\\.)?youtube\\\\.com/watch\\\\?v=[\\\\w-]+(?:&[\\\\w=&.-]*)?$`,\n ),\n new RegExp(`^https://youtu\\\\.be/[\\\\w-]+(?:\\\\?[\\\\w=&.-]*)?$`),\n ],\n }),\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (modelId: GoogleGenerativeAIEmbeddingModelId) =>\n new GoogleGenerativeAIEmbeddingModel(modelId, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createImageModel = (\n modelId: GoogleGenerativeAIImageModelId,\n settings: GoogleGenerativeAIImageSettings = {},\n ) =>\n new GoogleGenerativeAIImageModel(modelId, settings, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createFiles = () =>\n new GoogleGenerativeAIFiles({\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: GoogleGenerativeAIVideoModelId) =>\n new GoogleGenerativeAIVideoModel(modelId, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId ?? generateId,\n });\n\n const provider = function (modelId: GoogleGenerativeAIModelId) {\n if (new.target) {\n throw new Error(\n 'The Google Generative AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.generativeAI = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n provider.files = createFiles;\n provider.tools = googleTools;\n\n return provider as GoogleGenerativeAIProvider;\n}\n\n/**\n * Default Google Generative AI provider instance.\n */\nexport const google = createGoogleGenerativeAI();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n EmbeddingModelV4,\n TooManyEmbeddingValuesForCallError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n FetchFunction,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\nimport {\n GoogleGenerativeAIEmbeddingModelId,\n googleEmbeddingModelOptions,\n} from './google-generative-ai-embedding-options';\n\ntype GoogleGenerativeAIEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class GoogleGenerativeAIEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: GoogleGenerativeAIEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n private readonly config: GoogleGenerativeAIEmbeddingConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n constructor(\n modelId: GoogleGenerativeAIEmbeddingModelId,\n config: GoogleGenerativeAIEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n // Parse provider options\n const googleOptions = await parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleEmbeddingModelOptions,\n });\n\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const mergedHeaders = combineHeaders(\n await resolve(this.config.headers),\n headers,\n );\n\n const multimodalContent = googleOptions?.content;\n\n if (\n multimodalContent != null &&\n multimodalContent.length !== values.length\n ) {\n throw new Error(\n `The number of multimodal content entries (${multimodalContent.length}) must match the number of values (${values.length}).`,\n );\n }\n\n // For single embeddings, use the single endpoint\n if (values.length === 1) {\n const valueParts = multimodalContent?.[0];\n const textPart = values[0] ? [{ text: values[0] }] : [];\n const parts =\n valueParts != null\n ? [...textPart, ...valueParts]\n : [{ text: values[0] }];\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:embedContent`,\n headers: mergedHeaders,\n body: {\n model: `models/${this.modelId}`,\n content: {\n parts,\n },\n outputDimensionality: googleOptions?.outputDimensionality,\n taskType: googleOptions?.taskType,\n },\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleGenerativeAISingleEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: [response.embedding.values],\n usage: undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n\n // For multiple values, use the batch endpoint\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:batchEmbedContents`,\n headers: mergedHeaders,\n body: {\n requests: values.map((value, index) => {\n const valueParts = multimodalContent?.[index];\n const textPart = value ? [{ text: value }] : [];\n return {\n model: `models/${this.modelId}`,\n content: {\n role: 'user',\n parts:\n valueParts != null\n ? [...textPart, ...valueParts]\n : [{ text: value }],\n },\n outputDimensionality: googleOptions?.outputDimensionality,\n taskType: googleOptions?.taskType,\n };\n }),\n },\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleGenerativeAITextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.embeddings.map(item => item.values),\n usage: undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst googleGenerativeAITextEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.object({ values: z.array(z.number()) })),\n }),\n ),\n);\n\n// Schema for single embedding response\nconst googleGenerativeAISingleEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embedding: z.object({ values: z.array(z.number()) }),\n }),\n ),\n);\n","import {\n createJsonErrorResponseHandler,\n type InferSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst googleErrorDataSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n code: z.number().nullable(),\n message: z.string(),\n status: z.string(),\n }),\n }),\n ),\n);\n\nexport type GoogleErrorData = InferSchema<typeof googleErrorDataSchema>;\n\nexport const googleFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: googleErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import {\n type InferSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type GoogleGenerativeAIEmbeddingModelId =\n | 'gemini-embedding-001'\n | 'gemini-embedding-2-preview'\n | (string & {});\n\nconst googleEmbeddingContentPartSchema = z.union([\n z.object({ text: z.string() }),\n z.object({\n inlineData: z.object({\n mimeType: z.string(),\n data: z.string(),\n }),\n }),\n]);\n\nexport const googleEmbeddingModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Optional. Optional reduced dimension for the output embedding.\n * If set, excessive values in the output embedding are truncated from the end.\n */\n outputDimensionality: z.number().optional(),\n\n /**\n * Optional. Specifies the task type for generating embeddings.\n * Supported task types:\n * - SEMANTIC_SIMILARITY: Optimized for text similarity.\n * - CLASSIFICATION: Optimized for text classification.\n * - CLUSTERING: Optimized for clustering texts based on similarity.\n * - RETRIEVAL_DOCUMENT: Optimized for document retrieval.\n * - RETRIEVAL_QUERY: Optimized for query-based retrieval.\n * - QUESTION_ANSWERING: Optimized for answering questions.\n * - FACT_VERIFICATION: Optimized for verifying factual information.\n * - CODE_RETRIEVAL_QUERY: Optimized for retrieving code blocks based on natural language queries.\n */\n taskType: z\n .enum([\n 'SEMANTIC_SIMILARITY',\n 'CLASSIFICATION',\n 'CLUSTERING',\n 'RETRIEVAL_DOCUMENT',\n 'RETRIEVAL_QUERY',\n 'QUESTION_ANSWERING',\n 'FACT_VERIFICATION',\n 'CODE_RETRIEVAL_QUERY',\n ])\n .optional(),\n\n /**\n * Optional. Per-value multimodal content parts for embedding non-text\n * content (images, video, PDF, audio). Each entry corresponds to the\n * embedding value at the same index and its parts are merged with the\n * text value in the request. Use `null` for entries that are text-only.\n *\n * The array length must match the number of values being embedded. In\n * the case of a single embedding, the array length must be 1.\n */\n content: z\n .array(z.array(googleEmbeddingContentPartSchema).min(1).nullable())\n .optional(),\n }),\n ),\n);\n\nexport type GoogleEmbeddingModelOptions = InferSchema<\n typeof googleEmbeddingModelOptions\n>;\n","import {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4Source,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n JSONObject,\n SharedV4ProviderMetadata,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n FetchFunction,\n generateId,\n InferSchema,\n isCustomReasoning,\n lazySchema,\n mapReasoningToProviderBudget,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n ParseResult,\n postJsonToApi,\n Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n convertGoogleGenerativeAIUsage,\n GoogleGenerativeAIUsageMetadata,\n} from './convert-google-generative-ai-usage';\nimport { convertJSONSchemaToOpenAPISchema } from './convert-json-schema-to-openapi-schema';\nimport { convertToGoogleGenerativeAIMessages } from './convert-to-google-generative-ai-messages';\nimport { getModelPath } from './get-model-path';\nimport { googleFailedResponseHandler } from './google-error';\nimport {\n GoogleGenerativeAIModelId,\n googleLanguageModelOptions,\n} from './google-generative-ai-options';\nimport {\n GoogleGenerativeAIContentPart,\n GoogleGenerativeAIProviderMetadata,\n} from './google-generative-ai-prompt';\nimport { prepareTools } from './google-prepare-tools';\nimport { mapGoogleGenerativeAIFinishReason } from './map-google-generative-ai-finish-reason';\n\ntype GoogleGenerativeAIConfig = {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId: () => string;\n\n /**\n * The supported URLs for the model.\n */\n supportedUrls?: () => LanguageModelV4['supportedUrls'];\n};\n\nexport class GoogleGenerativeAILanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: GoogleGenerativeAIModelId;\n\n private readonly config: GoogleGenerativeAIConfig;\n private readonly generateId: () => string;\n\n constructor(\n modelId: GoogleGenerativeAIModelId,\n config: GoogleGenerativeAIConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n this.generateId = config.generateId ?? generateId;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportedUrls() {\n return this.config.supportedUrls?.() ?? {};\n }\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n tools,\n toolChoice,\n reasoning,\n providerOptions,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const providerOptionsName = this.config.provider.includes('vertex')\n ? 'vertex'\n : 'google';\n let googleOptions = await parseProviderOptions({\n provider: providerOptionsName,\n providerOptions,\n schema: googleLanguageModelOptions,\n });\n\n if (googleOptions == null && providerOptionsName !== 'google') {\n googleOptions = await parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleLanguageModelOptions,\n });\n }\n\n // Add warning if Vertex rag tools are used with a non-Vertex Google provider\n if (\n tools?.some(\n tool =>\n tool.type === 'provider' && tool.id === 'google.vertex_rag_store',\n ) &&\n !this.config.provider.startsWith('google.vertex.')\n ) {\n warnings.push({\n type: 'other',\n message:\n \"The 'vertex_rag_store' tool is only supported with the Google Vertex provider \" +\n 'and might not be supported or could behave unexpectedly with the current Google provider ' +\n `(${this.config.provider}).`,\n });\n }\n\n const isGemmaModel = this.modelId.toLowerCase().startsWith('gemma-');\n const supportsFunctionResponseParts = this.modelId.startsWith('gemini-3');\n\n const { contents, systemInstruction } = convertToGoogleGenerativeAIMessages(\n prompt,\n {\n isGemmaModel,\n providerOptionsName,\n supportsFunctionResponseParts,\n },\n );\n\n const {\n tools: googleTools,\n toolConfig: googleToolConfig,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n modelId: this.modelId,\n });\n\n const resolvedThinking = resolveThinkingConfig({\n reasoning,\n modelId: this.modelId,\n warnings,\n });\n const thinkingConfig =\n googleOptions?.thinkingConfig || resolvedThinking\n ? { ...resolvedThinking, ...googleOptions?.thinkingConfig }\n : undefined;\n\n return {\n args: {\n generationConfig: {\n // standardized settings:\n maxOutputTokens,\n temperature,\n topK,\n topP,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n seed,\n\n // response format:\n responseMimeType:\n responseFormat?.type === 'json' ? 'application/json' : undefined,\n responseSchema:\n responseFormat?.type === 'json' &&\n responseFormat.schema != null &&\n // Google GenAI does not support all OpenAPI Schema features,\n // so this is needed as an escape hatch:\n // TODO convert into provider option\n (googleOptions?.structuredOutputs ?? true)\n ? convertJSONSchemaToOpenAPISchema(responseFormat.schema)\n : undefined,\n ...(googleOptions?.audioTimestamp && {\n audioTimestamp: googleOptions.audioTimestamp,\n }),\n\n // provider options:\n responseModalities: googleOptions?.responseModalities,\n thinkingConfig,\n ...(googleOptions?.mediaResolution && {\n mediaResolution: googleOptions.mediaResolution,\n }),\n ...(googleOptions?.imageConfig && {\n imageConfig: googleOptions.imageConfig,\n }),\n },\n contents,\n systemInstruction: isGemmaModel ? undefined : systemInstruction,\n safetySettings: googleOptions?.safetySettings,\n tools: googleTools,\n toolConfig: googleOptions?.retrievalConfig\n ? {\n ...googleToolConfig,\n retrievalConfig: googleOptions.retrievalConfig,\n }\n : googleToolConfig,\n cachedContent: googleOptions?.cachedContent,\n labels: googleOptions?.labels,\n serviceTier: googleOptions?.serviceTier,\n },\n warnings: [...warnings, ...toolWarnings],\n providerOptionsName,\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings, providerOptionsName } = await this.getArgs(options);\n\n const mergedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/${getModelPath(\n this.modelId,\n )}:generateContent`,\n headers: mergedHeaders,\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(responseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const candidate = response.candidates[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // map ordered parts to content:\n const parts = candidate.content?.parts ?? [];\n\n const usageMetadata = response.usageMetadata;\n\n // Associates a code execution result with its preceding call.\n let lastCodeExecutionToolCallId: string | undefined;\n // Associates a server-side tool response with its preceding call (tool combination).\n let lastServerToolCallId: string | undefined;\n\n // Build content array from all parts\n for (const part of parts) {\n if ('executableCode' in part && part.executableCode?.code) {\n const toolCallId = this.config.generateId();\n lastCodeExecutionToolCallId = toolCallId;\n\n content.push({\n type: 'tool-call',\n toolCallId,\n toolName: 'code_execution',\n input: JSON.stringify(part.executableCode),\n providerExecuted: true,\n });\n } else if ('codeExecutionResult' in part && part.codeExecutionResult) {\n content.push({\n type: 'tool-result',\n // Assumes a result directly follows its corresponding call part.\n toolCallId: lastCodeExecutionToolCallId!,\n toolName: 'code_execution',\n result: {\n outcome: part.codeExecutionResult.outcome,\n output: part.codeExecutionResult.output ?? '',\n },\n });\n // Clear the ID after use to avoid accidental reuse.\n lastCodeExecutionToolCallId = undefined;\n } else if ('text' in part && part.text != null) {\n const thoughtSignatureMetadata = part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n\n if (part.text.length === 0) {\n if (thoughtSignatureMetadata != null && content.length > 0) {\n const lastContent = content[content.length - 1];\n lastContent.providerMetadata = thoughtSignatureMetadata;\n }\n } else {\n content.push({\n type: part.thought === true ? 'reasoning' : 'text',\n text: part.text,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n } else if ('functionCall' in part) {\n content.push({\n type: 'tool-call' as const,\n toolCallId: this.config.generateId(),\n toolName: part.functionCall.name,\n input: JSON.stringify(part.functionCall.args),\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined,\n });\n } else if ('inlineData' in part) {\n const hasThought = part.thought === true;\n const hasThoughtSignature = !!part.thoughtSignature;\n content.push({\n type: hasThought ? 'reasoning-file' : 'file',\n data: part.inlineData.data,\n mediaType: part.inlineData.mimeType,\n providerMetadata: hasThoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined,\n });\n } else if ('toolCall' in part && part.toolCall) {\n const toolCallId = part.toolCall.id ?? this.config.generateId();\n lastServerToolCallId = toolCallId;\n content.push({\n type: 'tool-call',\n toolCallId,\n toolName: `server:${part.toolCall.toolType}`,\n input: JSON.stringify(part.toolCall.args ?? {}),\n providerExecuted: true,\n dynamic: true,\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n serverToolCallId: toolCallId,\n serverToolType: part.toolCall.toolType,\n },\n }\n : {\n [providerOptionsName]: {\n serverToolCallId: toolCallId,\n serverToolType: part.toolCall.toolType,\n },\n },\n });\n } else if ('toolResponse' in part && part.toolResponse) {\n const responseToolCallId =\n lastServerToolCallId ??\n part.toolResponse.id ??\n this.config.generateId();\n content.push({\n type: 'tool-result',\n toolCallId: responseToolCallId,\n toolName: `server:${part.toolResponse.toolType}`,\n result: (part.toolResponse.response ?? {}) as JSONObject,\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n serverToolCallId: responseToolCallId,\n serverToolType: part.toolResponse.toolType,\n },\n }\n : {\n [providerOptionsName]: {\n serverToolCallId: responseToolCallId,\n serverToolType: part.toolResponse.toolType,\n },\n },\n });\n lastServerToolCallId = undefined;\n }\n }\n\n const sources =\n extractSources({\n groundingMetadata: candidate.groundingMetadata,\n generateId: this.config.generateId,\n }) ?? [];\n for (const source of sources) {\n content.push(source);\n }\n\n return {\n content,\n finishReason: {\n unified: mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n // Only count client-executed tool calls for finish reason determination.\n hasToolCalls: content.some(\n part => part.type === 'tool-call' && !part.providerExecuted,\n ),\n }),\n raw: candidate.finishReason ?? undefined,\n },\n usage: convertGoogleGenerativeAIUsage(usageMetadata),\n warnings,\n providerMetadata: {\n [providerOptionsName]: {\n promptFeedback: response.promptFeedback ?? null,\n groundingMetadata: candidate.groundingMetadata ?? null,\n urlContextMetadata: candidate.urlContextMetadata ?? null,\n safetyRatings: candidate.safetyRatings ?? null,\n usageMetadata: usageMetadata ?? null,\n finishMessage: candidate.finishMessage ?? null,\n serviceTier: response.serviceTier ?? null,\n } satisfies GoogleGenerativeAIProviderMetadata,\n },\n request: { body: args },\n response: {\n // TODO timestamp, model id, id\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings, providerOptionsName } = await this.getArgs(options);\n\n const headers = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/${getModelPath(\n this.modelId,\n )}:streamGenerateContent?alt=sse`,\n headers,\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(chunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: GoogleGenerativeAIUsageMetadata | undefined = undefined;\n let providerMetadata: SharedV4ProviderMetadata | undefined = undefined;\n let lastGroundingMetadata: GroundingMetadataSchema | null = null;\n let lastUrlContextMetadata: UrlContextMetadataSchema | null = null;\n let serviceTier: string | null = null;\n\n const generateId = this.config.generateId;\n let hasToolCalls = false;\n\n // Track active blocks to group consecutive parts of same type\n let currentTextBlockId: string | null = null;\n let currentReasoningBlockId: string | null = null;\n let blockCounter = 0;\n\n // Track emitted sources to prevent duplicates\n const emittedSourceUrls = new Set<string>();\n // Associates a code execution result with its preceding call.\n let lastCodeExecutionToolCallId: string | undefined;\n // Associates a server-side tool response with its preceding call (tool combination).\n let lastServerToolCallId: string | undefined;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<ChunkSchema>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n const usageMetadata = value.usageMetadata;\n\n if (usageMetadata != null) {\n usage = usageMetadata;\n }\n\n if (value.serviceTier != null) {\n serviceTier = value.serviceTier;\n }\n\n const candidate = value.candidates?.[0];\n\n // sometimes the API returns an empty candidates array\n if (candidate == null) {\n return;\n }\n\n const content = candidate.content;\n\n if (candidate.groundingMetadata != null) {\n lastGroundingMetadata = candidate.groundingMetadata;\n }\n if (candidate.urlContextMetadata != null) {\n lastUrlContextMetadata = candidate.urlContextMetadata;\n }\n\n const sources = extractSources({\n groundingMetadata: candidate.groundingMetadata,\n generateId,\n });\n if (sources != null) {\n for (const source of sources) {\n if (\n source.sourceType === 'url' &&\n !emittedSourceUrls.has(source.url)\n ) {\n emittedSourceUrls.add(source.url);\n controller.enqueue(source);\n }\n }\n }\n\n // Process tool call's parts before determining finishReason to ensure hasToolCalls is properly set\n if (content != null) {\n // Process all parts in a single loop to preserve original order\n const parts = content.parts ?? [];\n for (const part of parts) {\n if ('executableCode' in part && part.executableCode?.code) {\n const toolCallId = generateId();\n lastCodeExecutionToolCallId = toolCallId;\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName: 'code_execution',\n input: JSON.stringify(part.executableCode),\n providerExecuted: true,\n });\n } else if (\n 'codeExecutionResult' in part &&\n part.codeExecutionResult\n ) {\n // Assumes a result directly follows its corresponding call part.\n const toolCallId = lastCodeExecutionToolCallId;\n\n if (toolCallId) {\n controller.enqueue({\n type: 'tool-result',\n toolCallId,\n toolName: 'code_execution',\n result: {\n outcome: part.codeExecutionResult.outcome,\n output: part.codeExecutionResult.output ?? '',\n },\n });\n // Clear the ID after use.\n lastCodeExecutionToolCallId = undefined;\n }\n } else if ('text' in part && part.text != null) {\n const thoughtSignatureMetadata = part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n\n if (part.text.length === 0) {\n if (\n thoughtSignatureMetadata != null &&\n currentTextBlockId !== null\n ) {\n controller.enqueue({\n type: 'text-delta',\n id: currentTextBlockId,\n delta: '',\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n } else if (part.thought === true) {\n // End any active text block before starting reasoning\n if (currentTextBlockId !== null) {\n controller.enqueue({\n type: 'text-end',\n id: currentTextBlockId,\n });\n currentTextBlockId = null;\n }\n\n // Start new reasoning block if not already active\n if (currentReasoningBlockId === null) {\n currentReasoningBlockId = String(blockCounter++);\n controller.enqueue({\n type: 'reasoning-start',\n id: currentReasoningBlockId,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: currentReasoningBlockId,\n delta: part.text,\n providerMetadata: thoughtSignatureMetadata,\n });\n } else {\n if (currentReasoningBlockId !== null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: currentReasoningBlockId,\n });\n currentReasoningBlockId = null;\n }\n\n if (currentTextBlockId === null) {\n currentTextBlockId = String(blockCounter++);\n controller.enqueue({\n type: 'text-start',\n id: currentTextBlockId,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: currentTextBlockId,\n delta: part.text,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n } else if ('inlineData' in part) {\n // End any active text or reasoning block before starting file output.\n // Relevant for multimodal output models.\n if (currentTextBlockId !== null) {\n controller.enqueue({\n type: 'text-end',\n id: currentTextBlockId,\n });\n currentTextBlockId = null;\n }\n if (currentReasoningBlockId !== null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: currentReasoningBlockId,\n });\n currentReasoningBlockId = null;\n }\n\n const hasThought = part.thought === true;\n const hasThoughtSignature = !!part.thoughtSignature;\n const fileMeta = hasThoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n controller.enqueue({\n type: hasThought ? 'reasoning-file' : 'file',\n mediaType: part.inlineData.mimeType,\n data: part.inlineData.data,\n providerMetadata: fileMeta,\n });\n } else if ('toolCall' in part && part.toolCall) {\n const toolCallId = part.toolCall.id ?? generateId();\n lastServerToolCallId = toolCallId;\n const serverMeta = {\n [providerOptionsName]: {\n ...(part.thoughtSignature\n ? { thoughtSignature: part.thoughtSignature }\n : {}),\n serverToolCallId: toolCallId,\n serverToolType: part.toolCall.toolType,\n },\n };\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName: `server:${part.toolCall.toolType}`,\n input: JSON.stringify(part.toolCall.args ?? {}),\n providerExecuted: true,\n dynamic: true,\n providerMetadata: serverMeta,\n });\n } else if ('toolResponse' in part && part.toolResponse) {\n const responseToolCallId =\n lastServerToolCallId ??\n part.toolResponse.id ??\n generateId();\n const serverMeta = {\n [providerOptionsName]: {\n ...(part.thoughtSignature\n ? { thoughtSignature: part.thoughtSignature }\n : {}),\n serverToolCallId: responseToolCallId,\n serverToolType: part.toolResponse.toolType,\n },\n };\n\n controller.enqueue({\n type: 'tool-result',\n toolCallId: responseToolCallId,\n toolName: `server:${part.toolResponse.toolType}`,\n result: (part.toolResponse.response ?? {}) as JSONObject,\n providerMetadata: serverMeta,\n });\n lastServerToolCallId = undefined;\n }\n }\n\n const toolCallDeltas = getToolCallsFromParts({\n parts: content.parts,\n generateId,\n providerOptionsName,\n });\n\n if (toolCallDeltas != null) {\n for (const toolCall of toolCallDeltas) {\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.toolCallId,\n toolName: toolCall.toolName,\n providerMetadata: toolCall.providerMetadata,\n });\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.toolCallId,\n delta: toolCall.args,\n providerMetadata: toolCall.providerMetadata,\n });\n\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.toolCallId,\n providerMetadata: toolCall.providerMetadata,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.args,\n providerMetadata: toolCall.providerMetadata,\n });\n\n hasToolCalls = true;\n }\n }\n }\n\n if (candidate.finishReason != null) {\n finishReason = {\n unified: mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls,\n }),\n raw: candidate.finishReason,\n };\n\n providerMetadata = {\n [providerOptionsName]: {\n promptFeedback: value.promptFeedback ?? null,\n groundingMetadata: lastGroundingMetadata,\n urlContextMetadata: lastUrlContextMetadata,\n safetyRatings: candidate.safetyRatings ?? null,\n usageMetadata: usageMetadata ?? null,\n finishMessage: candidate.finishMessage ?? null,\n serviceTier,\n } satisfies GoogleGenerativeAIProviderMetadata,\n };\n }\n },\n\n flush(controller) {\n if (currentTextBlockId !== null) {\n controller.enqueue({\n type: 'text-end',\n id: currentTextBlockId,\n });\n }\n if (currentReasoningBlockId !== null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: currentReasoningBlockId,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertGoogleGenerativeAIUsage(usage),\n providerMetadata,\n });\n },\n }),\n ),\n response: { headers: responseHeaders },\n request: { body: args },\n };\n }\n}\n\nfunction isGemini3Model(modelId: string): boolean {\n return /gemini-3[\\.\\-]/i.test(modelId) || /gemini-3$/i.test(modelId);\n}\n\nfunction getMaxOutputTokensForGemini25Model(): number {\n return 65536;\n}\n\nfunction getMaxThinkingTokensForGemini25Model(modelId: string): number {\n const id = modelId.toLowerCase();\n if (id.includes('2.5-pro') || id.includes('gemini-3-pro-image')) {\n return 32768;\n }\n return 24576;\n}\n\ntype GoogleThinkingConfig = NonNullable<\n InferSchema<typeof googleLanguageModelOptions>['thinkingConfig']\n>;\n\nfunction resolveThinkingConfig({\n reasoning,\n modelId,\n warnings,\n}: {\n reasoning: LanguageModelV4CallOptions['reasoning'];\n modelId: string;\n warnings: SharedV4Warning[];\n}): Omit<GoogleThinkingConfig, 'includeThoughts'> | undefined {\n if (!isCustomReasoning(reasoning)) {\n return undefined;\n }\n\n if (isGemini3Model(modelId) && !modelId.includes('gemini-3-pro-image')) {\n return resolveGemini3ThinkingConfig({ reasoning, warnings });\n }\n\n return resolveGemini25ThinkingConfig({ reasoning, modelId, warnings });\n}\n\nfunction resolveGemini3ThinkingConfig({\n reasoning,\n warnings,\n}: {\n reasoning: Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'provider-default' | undefined\n >;\n warnings: SharedV4Warning[];\n}): Pick<GoogleThinkingConfig, 'thinkingLevel'> | undefined {\n if (reasoning === 'none') {\n // It's not possible to fully disable thinking with Gemini 3.\n return { thinkingLevel: 'minimal' };\n }\n\n const thinkingLevel = mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'minimal',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'high',\n },\n warnings,\n });\n\n if (thinkingLevel == null) {\n return undefined;\n }\n\n return { thinkingLevel };\n}\n\nfunction resolveGemini25ThinkingConfig({\n reasoning,\n modelId,\n warnings,\n}: {\n reasoning: Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'provider-default' | undefined\n >;\n modelId: string;\n warnings: SharedV4Warning[];\n}): Pick<GoogleThinkingConfig, 'thinkingBudget'> | undefined {\n if (reasoning === 'none') {\n return { thinkingBudget: 0 };\n }\n\n const thinkingBudget = mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens: getMaxOutputTokensForGemini25Model(),\n maxReasoningBudget: getMaxThinkingTokensForGemini25Model(modelId),\n minReasoningBudget: 0,\n warnings,\n });\n if (thinkingBudget == null) {\n return undefined;\n }\n return { thinkingBudget };\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n providerOptionsName,\n}: {\n parts: ContentSchema['parts'];\n generateId: () => string;\n providerOptionsName: string;\n}) {\n const functionCallParts = parts?.filter(\n part => 'functionCall' in part,\n ) as Array<\n GoogleGenerativeAIContentPart & {\n functionCall: { name: string; args: unknown };\n thoughtSignature?: string | null;\n }\n >;\n\n return functionCallParts == null || functionCallParts.length === 0\n ? undefined\n : functionCallParts.map(part => ({\n type: 'tool-call' as const,\n toolCallId: generateId(),\n toolName: part.functionCall.name,\n args: JSON.stringify(part.functionCall.args),\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined,\n }));\n}\n\nfunction extractSources({\n groundingMetadata,\n generateId,\n}: {\n groundingMetadata: GroundingMetadataSchema | undefined | null;\n generateId: () => string;\n}): undefined | LanguageModelV4Source[] {\n if (!groundingMetadata?.groundingChunks) {\n return undefined;\n }\n\n const sources: LanguageModelV4Source[] = [];\n\n for (const chunk of groundingMetadata.groundingChunks) {\n if (chunk.web != null) {\n // Handle web chunks as URL sources\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: chunk.web.uri,\n title: chunk.web.title ?? undefined,\n });\n } else if (chunk.image != null) {\n // Handle image chunks as image sources\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n // Google requires attribution to the source URI, not the actual image URI.\n // TODO: add another type in v7 to allow both the image and source URL to be included separately\n url: chunk.image.sourceUri,\n title: chunk.image.title ?? undefined,\n });\n } else if (chunk.retrievedContext != null) {\n // Handle retrievedContext chunks from RAG operations\n const uri = chunk.retrievedContext.uri;\n const fileSearchStore = chunk.retrievedContext.fileSearchStore;\n\n if (uri && (uri.startsWith('http://') || uri.startsWith('https://'))) {\n // Old format: Google Search with HTTP/HTTPS URL\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: uri,\n title: chunk.retrievedContext.title ?? undefined,\n });\n } else if (uri) {\n // Old format: Document with file path (gs://, etc.)\n const title = chunk.retrievedContext.title ?? 'Unknown Document';\n let mediaType = 'application/octet-stream';\n let filename: string | undefined = undefined;\n\n if (uri.endsWith('.pdf')) {\n mediaType = 'application/pdf';\n filename = uri.split('/').pop();\n } else if (uri.endsWith('.txt')) {\n mediaType = 'text/plain';\n filename = uri.split('/').pop();\n } else if (uri.endsWith('.docx')) {\n mediaType =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n filename = uri.split('/').pop();\n } else if (uri.endsWith('.doc')) {\n mediaType = 'application/msword';\n filename = uri.split('/').pop();\n } else if (uri.match(/\\.(md|markdown)$/)) {\n mediaType = 'text/markdown';\n filename = uri.split('/').pop();\n } else {\n filename = uri.split('/').pop();\n }\n\n sources.push({\n type: 'source',\n sourceType: 'document',\n id: generateId(),\n mediaType,\n title,\n filename,\n });\n } else if (fileSearchStore) {\n // New format: File Search with fileSearchStore (no uri)\n const title = chunk.retrievedContext.title ?? 'Unknown Document';\n sources.push({\n type: 'source',\n sourceType: 'document',\n id: generateId(),\n mediaType: 'application/octet-stream',\n title,\n filename: fileSearchStore.split('/').pop(),\n });\n }\n } else if (chunk.maps != null) {\n if (chunk.maps.uri) {\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: chunk.maps.uri,\n title: chunk.maps.title ?? undefined,\n });\n }\n }\n }\n\n return sources.length > 0 ? sources : undefined;\n}\n\nexport const getGroundingMetadataSchema = () =>\n z.object({\n webSearchQueries: z.array(z.string()).nullish(),\n imageSearchQueries: z.array(z.string()).nullish(),\n retrievalQueries: z.array(z.string()).nullish(),\n searchEntryPoint: z.object({ renderedContent: z.string() }).nullish(),\n groundingChunks: z\n .array(\n z.object({\n web: z\n .object({ uri: z.string(), title: z.string().nullish() })\n .nullish(),\n image: z\n .object({\n sourceUri: z.string(),\n imageUri: z.string(),\n title: z.string().nullish(),\n domain: z.string().nullish(),\n })\n .nullish(),\n retrievedContext: z\n .object({\n uri: z.string().nullish(),\n title: z.string().nullish(),\n text: z.string().nullish(),\n fileSearchStore: z.string().nullish(),\n })\n .nullish(),\n maps: z\n .object({\n uri: z.string().nullish(),\n title: z.string().nullish(),\n text: z.string().nullish(),\n placeId: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n groundingSupports: z\n .array(\n z.object({\n segment: z\n .object({\n startIndex: z.number().nullish(),\n endIndex: z.number().nullish(),\n text: z.string().nullish(),\n })\n .nullish(),\n segment_text: z.string().nullish(),\n groundingChunkIndices: z.array(z.number()).nullish(),\n supportChunkIndices: z.array(z.number()).nullish(),\n confidenceScores: z.array(z.number()).nullish(),\n confidenceScore: z.array(z.number()).nullish(),\n }),\n )\n .nullish(),\n retrievalMetadata: z\n .union([\n z.object({\n webDynamicRetrievalScore: z.number(),\n }),\n z.object({}),\n ])\n .nullish(),\n });\n\nconst getContentSchema = () =>\n z.object({\n parts: z\n .array(\n z.union([\n // note: order matters since text can be fully empty\n z.object({\n functionCall: z.object({\n name: z.string(),\n args: z.unknown(),\n }),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n inlineData: z.object({\n mimeType: z.string(),\n data: z.string(),\n }),\n thought: z.boolean().nullish(),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n toolCall: z.object({\n toolType: z.string(),\n args: z.unknown().nullish(),\n id: z.string(),\n }),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n toolResponse: z.object({\n toolType: z.string(),\n response: z.unknown().nullish(),\n id: z.string(),\n }),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n executableCode: z\n .object({\n language: z.string(),\n code: z.string(),\n })\n .nullish(),\n codeExecutionResult: z\n .object({\n outcome: z.string(),\n output: z.string().nullish(),\n })\n .nullish(),\n text: z.string().nullish(),\n thought: z.boolean().nullish(),\n thoughtSignature: z.string().nullish(),\n }),\n ]),\n )\n .nullish(),\n });\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/configure-safety-filters\nconst getSafetyRatingSchema = () =>\n z.object({\n category: z.string().nullish(),\n probability: z.string().nullish(),\n probabilityScore: z.number().nullish(),\n severity: z.string().nullish(),\n severityScore: z.number().nullish(),\n blocked: z.boolean().nullish(),\n });\n\nconst tokenDetailsSchema = z\n .array(\n z.object({\n modality: z.string(),\n tokenCount: z.number(),\n }),\n )\n .nullish();\n\nconst usageSchema = z.object({\n cachedContentTokenCount: z.number().nullish(),\n thoughtsTokenCount: z.number().nullish(),\n promptTokenCount: z.number().nullish(),\n candidatesTokenCount: z.number().nullish(),\n totalTokenCount: z.number().nullish(),\n // https://cloud.google.com/vertex-ai/generative-ai/docs/reference/rest/v1/GenerateContentResponse#TrafficType\n trafficType: z.string().nullish(),\n // https://ai.google.dev/api/generate-content#Modality\n promptTokensDetails: tokenDetailsSchema,\n candidatesTokensDetails: tokenDetailsSchema,\n});\n\n// https://ai.google.dev/api/generate-content#UrlRetrievalMetadata\nexport const getUrlContextMetadataSchema = () =>\n z.object({\n urlMetadata: z\n .array(\n z.object({\n retrievedUrl: z.string(),\n urlRetrievalStatus: z.string(),\n }),\n )\n .nullish(),\n });\n\nconst responseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n candidates: z.array(\n z.object({\n content: getContentSchema().nullish().or(z.object({}).strict()),\n finishReason: z.string().nullish(),\n finishMessage: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n groundingMetadata: getGroundingMetadataSchema().nullish(),\n urlContextMetadata: getUrlContextMetadataSchema().nullish(),\n }),\n ),\n usageMetadata: usageSchema.nullish(),\n promptFeedback: z\n .object({\n blockReason: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n })\n .nullish(),\n serviceTier: z.string().nullish(),\n }),\n ),\n);\n\ntype ContentSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['content']\n>;\nexport type GroundingMetadataSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']\n>;\n\ntype GroundingChunkSchema = NonNullable<\n GroundingMetadataSchema['groundingChunks']\n>[number];\n\nexport type UrlContextMetadataSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['urlContextMetadata']\n>;\n\nexport type SafetyRatingSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['safetyRatings']\n>[number];\n\nexport type PromptFeedbackSchema = NonNullable<\n InferSchema<typeof responseSchema>['promptFeedback']\n>;\n\nexport type UsageMetadataSchema = NonNullable<\n InferSchema<typeof responseSchema>['usageMetadata']\n>;\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst chunkSchema = lazySchema(() =>\n zodSchema(\n z.object({\n candidates: z\n .array(\n z.object({\n content: getContentSchema().nullish(),\n finishReason: z.string().nullish(),\n finishMessage: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n groundingMetadata: getGroundingMetadataSchema().nullish(),\n urlContextMetadata: getUrlContextMetadataSchema().nullish(),\n }),\n )\n .nullish(),\n usageMetadata: usageSchema.nullish(),\n promptFeedback: z\n .object({\n blockReason: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n })\n .nullish(),\n serviceTier: z.string().nullish(),\n }),\n ),\n);\n\ntype ChunkSchema = InferSchema<typeof chunkSchema>;\n","import { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type GoogleGenerativeAITokenDetail = {\n modality: string;\n tokenCount: number;\n};\n\nexport type GoogleGenerativeAIUsageMetadata = {\n promptTokenCount?: number | null;\n candidatesTokenCount?: number | null;\n totalTokenCount?: number | null;\n cachedContentTokenCount?: number | null;\n thoughtsTokenCount?: number | null;\n trafficType?: string | null;\n promptTokensDetails?: GoogleGenerativeAITokenDetail[] | null;\n candidatesTokensDetails?: GoogleGenerativeAITokenDetail[] | null;\n};\n\nexport function convertGoogleGenerativeAIUsage(\n usage: GoogleGenerativeAIUsageMetadata | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.promptTokenCount ?? 0;\n const candidatesTokens = usage.candidatesTokenCount ?? 0;\n const cachedContentTokens = usage.cachedContentTokenCount ?? 0;\n const thoughtsTokens = usage.thoughtsTokenCount ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cachedContentTokens,\n cacheRead: cachedContentTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: candidatesTokens + thoughtsTokens,\n text: candidatesTokens,\n reasoning: thoughtsTokens,\n },\n raw: usage,\n };\n}\n","import { JSONSchema7Definition } from '@ai-sdk/provider';\n\n/**\n * Converts JSON Schema 7 to OpenAPI Schema 3.0\n */\nexport function convertJSONSchemaToOpenAPISchema(\n jsonSchema: JSONSchema7Definition | undefined,\n isRoot = true,\n): unknown {\n // Handle empty object schemas: undefined at root, preserved when nested\n if (jsonSchema == null) {\n return undefined;\n }\n\n if (isEmptyObjectSchema(jsonSchema)) {\n if (isRoot) {\n return undefined;\n }\n\n if (typeof jsonSchema === 'object' && jsonSchema.description) {\n return { type: 'object', description: jsonSchema.description };\n }\n return { type: 'object' };\n }\n\n if (typeof jsonSchema === 'boolean') {\n return { type: 'boolean', properties: {} };\n }\n\n const {\n type,\n description,\n required,\n properties,\n items,\n allOf,\n anyOf,\n oneOf,\n format,\n const: constValue,\n minLength,\n enum: enumValues,\n } = jsonSchema;\n\n const result: Record<string, unknown> = {};\n\n if (description) result.description = description;\n if (required) result.required = required;\n if (format) result.format = format;\n\n if (constValue !== undefined) {\n result.enum = [constValue];\n }\n\n // Handle type\n if (type) {\n if (Array.isArray(type)) {\n const hasNull = type.includes('null');\n const nonNullTypes = type.filter(t => t !== 'null');\n\n if (nonNullTypes.length === 0) {\n // Only null type\n result.type = 'null';\n } else {\n // One or more non-null types: always use anyOf\n result.anyOf = nonNullTypes.map(t => ({ type: t }));\n if (hasNull) {\n result.nullable = true;\n }\n }\n } else {\n result.type = type;\n }\n }\n\n // Handle enum\n if (enumValues !== undefined) {\n result.enum = enumValues;\n }\n\n if (properties != null) {\n result.properties = Object.entries(properties).reduce(\n (acc, [key, value]) => {\n acc[key] = convertJSONSchemaToOpenAPISchema(value, false);\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n if (items) {\n result.items = Array.isArray(items)\n ? items.map(item => convertJSONSchemaToOpenAPISchema(item, false))\n : convertJSONSchemaToOpenAPISchema(items, false);\n }\n\n if (allOf) {\n result.allOf = allOf.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n }\n if (anyOf) {\n // Handle cases where anyOf includes a null type\n if (\n anyOf.some(\n schema => typeof schema === 'object' && schema?.type === 'null',\n )\n ) {\n const nonNullSchemas = anyOf.filter(\n schema => !(typeof schema === 'object' && schema?.type === 'null'),\n );\n\n if (nonNullSchemas.length === 1) {\n // If there's only one non-null schema, convert it and make it nullable\n const converted = convertJSONSchemaToOpenAPISchema(\n nonNullSchemas[0],\n false,\n );\n if (typeof converted === 'object') {\n result.nullable = true;\n Object.assign(result, converted);\n }\n } else {\n // If there are multiple non-null schemas, keep them in anyOf\n result.anyOf = nonNullSchemas.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n result.nullable = true;\n }\n } else {\n result.anyOf = anyOf.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n }\n }\n if (oneOf) {\n result.oneOf = oneOf.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n }\n\n if (minLength !== undefined) {\n result.minLength = minLength;\n }\n\n return result;\n}\n\nfunction isEmptyObjectSchema(jsonSchema: JSONSchema7Definition): boolean {\n return (\n jsonSchema != null &&\n typeof jsonSchema === 'object' &&\n jsonSchema.type === 'object' &&\n (jsonSchema.properties == null ||\n Object.keys(jsonSchema.properties).length === 0) &&\n !jsonSchema.additionalProperties\n );\n}\n","import {\n LanguageModelV4Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n isProviderReference,\n resolveProviderReference,\n} from '@ai-sdk/provider-utils';\nimport {\n GoogleGenerativeAIContent,\n GoogleGenerativeAIContentPart,\n GoogleGenerativeAIFunctionResponsePart,\n GoogleGenerativeAIPrompt,\n} from './google-generative-ai-prompt';\n\nconst dataUrlRegex = /^data:([^;,]+);base64,(.+)$/s;\n\nfunction parseBase64DataUrl(\n value: string,\n): { mediaType: string; data: string } | undefined {\n const match = dataUrlRegex.exec(value);\n if (match == null) {\n return undefined;\n }\n\n return {\n mediaType: match[1],\n data: match[2],\n };\n}\n\nfunction convertUrlToolResultPart(\n url: string,\n): GoogleGenerativeAIFunctionResponsePart | undefined {\n // Per https://ai.google.dev/api/caching#FunctionResponsePart, only inline data is supported.\n // https://docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/function-calling#functionresponsepart suggests that this\n // may be different for Vertex, but this needs to be confirmed and further tested for both APIs.\n const parsedDataUrl = parseBase64DataUrl(url);\n if (parsedDataUrl == null) {\n return undefined;\n }\n\n return {\n inlineData: {\n mimeType: parsedDataUrl.mediaType,\n data: parsedDataUrl.data,\n },\n };\n}\n\n/*\n * Appends tool result content parts to the message using the functionResponse\n * format with support for multimodal parts (e.g. inline images/files alongside\n * text). This format is supported by Gemini 3+ models.\n */\nfunction appendToolResultParts(\n parts: GoogleGenerativeAIContentPart[],\n toolName: string,\n outputValue: Array<{\n type: string;\n [key: string]: unknown;\n }>,\n): void {\n const functionResponseParts: GoogleGenerativeAIFunctionResponsePart[] = [];\n const responseTextParts: string[] = [];\n\n for (const contentPart of outputValue) {\n switch (contentPart.type) {\n case 'text': {\n responseTextParts.push(contentPart.text as string);\n break;\n }\n case 'image-data':\n case 'file-data': {\n functionResponseParts.push({\n inlineData: {\n mimeType: contentPart.mediaType as string,\n data: contentPart.data as string,\n },\n });\n break;\n }\n case 'image-url':\n case 'file-url': {\n const functionResponsePart = convertUrlToolResultPart(\n contentPart.url as string,\n );\n\n if (functionResponsePart != null) {\n functionResponseParts.push(functionResponsePart);\n } else {\n responseTextParts.push(JSON.stringify(contentPart));\n }\n break;\n }\n default: {\n responseTextParts.push(JSON.stringify(contentPart));\n break;\n }\n }\n }\n\n parts.push({\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content:\n responseTextParts.length > 0\n ? responseTextParts.join('\\n')\n : 'Tool executed successfully.',\n },\n ...(functionResponseParts.length > 0\n ? { parts: functionResponseParts }\n : {}),\n },\n });\n}\n\n/*\n * Appends tool result content parts using a legacy format for pre-Gemini 3\n * models that do not support multimodal parts within functionResponse. Instead,\n * non-text content like images is sent as separate top-level inlineData parts.\n */\nfunction appendLegacyToolResultParts(\n parts: GoogleGenerativeAIContentPart[],\n toolName: string,\n outputValue: Array<{\n type: string;\n [key: string]: unknown;\n }>,\n): void {\n for (const contentPart of outputValue) {\n switch (contentPart.type) {\n case 'text':\n parts.push({\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content: contentPart.text,\n },\n },\n });\n break;\n case 'image-data':\n parts.push(\n {\n inlineData: {\n mimeType: String(contentPart.mediaType),\n data: String(contentPart.data),\n },\n },\n {\n text: 'Tool executed successfully and returned this image as a response',\n },\n );\n break;\n default:\n parts.push({ text: JSON.stringify(contentPart) });\n break;\n }\n }\n}\n\nexport function convertToGoogleGenerativeAIMessages(\n prompt: LanguageModelV4Prompt,\n options?: {\n isGemmaModel?: boolean;\n providerOptionsName?: string;\n supportsFunctionResponseParts?: boolean;\n },\n): GoogleGenerativeAIPrompt {\n const systemInstructionParts: Array<{ text: string }> = [];\n const contents: Array<GoogleGenerativeAIContent> = [];\n let systemMessagesAllowed = true;\n const isGemmaModel = options?.isGemmaModel ?? false;\n const providerOptionsName = options?.providerOptionsName ?? 'google';\n const supportsFunctionResponseParts =\n options?.supportsFunctionResponseParts ?? true;\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (!systemMessagesAllowed) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'system messages are only supported at the beginning of the conversation',\n });\n }\n\n systemInstructionParts.push({ text: content });\n break;\n }\n\n case 'user': {\n systemMessagesAllowed = false;\n\n const parts: GoogleGenerativeAIContentPart[] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n parts.push({ text: part.text });\n break;\n }\n\n case 'file': {\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n if (part.data instanceof URL) {\n parts.push({\n fileData: {\n mimeType: mediaType,\n fileUri: part.data.toString(),\n },\n });\n } else if (isProviderReference(part.data)) {\n if (providerOptionsName === 'vertex') {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n parts.push({\n fileData: {\n mimeType: mediaType,\n fileUri: resolveProviderReference({\n reference: part.data,\n provider: 'google',\n }),\n },\n });\n } else {\n parts.push({\n inlineData: {\n mimeType: mediaType,\n data: convertToBase64(part.data),\n },\n });\n }\n\n break;\n }\n }\n }\n\n contents.push({ role: 'user', parts });\n break;\n }\n\n case 'assistant': {\n systemMessagesAllowed = false;\n\n contents.push({\n role: 'model',\n parts: content\n .map(part => {\n const providerOpts =\n part.providerOptions?.[providerOptionsName] ??\n (providerOptionsName !== 'google'\n ? part.providerOptions?.google\n : part.providerOptions?.vertex);\n const thoughtSignature =\n providerOpts?.thoughtSignature != null\n ? String(providerOpts.thoughtSignature)\n : undefined;\n\n switch (part.type) {\n case 'text': {\n return part.text.length === 0\n ? undefined\n : {\n text: part.text,\n thoughtSignature,\n };\n }\n\n case 'reasoning': {\n return part.text.length === 0\n ? undefined\n : {\n text: part.text,\n thought: true,\n thoughtSignature,\n };\n }\n\n case 'reasoning-file': {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'File data URLs in assistant messages are not supported',\n });\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: convertToBase64(part.data),\n },\n thought: true,\n thoughtSignature,\n };\n }\n\n case 'file': {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'File data URLs in assistant messages are not supported',\n });\n }\n\n if (isProviderReference(part.data)) {\n if (providerOptionsName === 'vertex') {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n return {\n fileData: {\n mimeType: part.mediaType,\n fileUri: resolveProviderReference({\n reference: part.data,\n provider: 'google',\n }),\n },\n ...(providerOpts?.thought === true\n ? { thought: true }\n : {}),\n thoughtSignature,\n };\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: convertToBase64(part.data),\n },\n ...(providerOpts?.thought === true\n ? { thought: true }\n : {}),\n thoughtSignature,\n };\n }\n\n case 'tool-call': {\n const serverToolCallId =\n providerOpts?.serverToolCallId != null\n ? String(providerOpts.serverToolCallId)\n : undefined;\n const serverToolType =\n providerOpts?.serverToolType != null\n ? String(providerOpts.serverToolType)\n : undefined;\n\n if (serverToolCallId && serverToolType) {\n return {\n toolCall: {\n toolType: serverToolType,\n args:\n typeof part.input === 'string'\n ? JSON.parse(part.input)\n : part.input,\n id: serverToolCallId,\n },\n thoughtSignature,\n };\n }\n\n return {\n functionCall: {\n name: part.toolName,\n args: part.input,\n },\n thoughtSignature,\n };\n }\n\n case 'tool-result': {\n const serverToolCallId =\n providerOpts?.serverToolCallId != null\n ? String(providerOpts.serverToolCallId)\n : undefined;\n const serverToolType =\n providerOpts?.serverToolType != null\n ? String(providerOpts.serverToolType)\n : undefined;\n\n if (serverToolCallId && serverToolType) {\n return {\n toolResponse: {\n toolType: serverToolType,\n response:\n part.output.type === 'json' ? part.output.value : {},\n id: serverToolCallId,\n },\n thoughtSignature,\n };\n }\n\n return undefined;\n }\n }\n })\n .filter(part => part !== undefined),\n });\n\n break;\n }\n\n case 'tool': {\n systemMessagesAllowed = false;\n\n const parts: GoogleGenerativeAIContentPart[] = [];\n\n for (const part of content) {\n if (part.type === 'tool-approval-response') {\n continue;\n }\n\n const partProviderOpts =\n part.providerOptions?.[providerOptionsName] ??\n (providerOptionsName !== 'google'\n ? part.providerOptions?.google\n : part.providerOptions?.vertex);\n const serverToolCallId =\n partProviderOpts?.serverToolCallId != null\n ? String(partProviderOpts.serverToolCallId)\n : undefined;\n const serverToolType =\n partProviderOpts?.serverToolType != null\n ? String(partProviderOpts.serverToolType)\n : undefined;\n\n if (serverToolCallId && serverToolType) {\n const serverThoughtSignature =\n partProviderOpts?.thoughtSignature != null\n ? String(partProviderOpts.thoughtSignature)\n : undefined;\n\n if (contents.length > 0) {\n const lastContent = contents[contents.length - 1];\n if (lastContent.role === 'model') {\n lastContent.parts.push({\n toolResponse: {\n toolType: serverToolType,\n response:\n part.output.type === 'json' ? part.output.value : {},\n id: serverToolCallId,\n },\n thoughtSignature: serverThoughtSignature,\n });\n continue;\n }\n }\n }\n\n const output = part.output;\n\n if (output.type === 'content') {\n if (supportsFunctionResponseParts) {\n appendToolResultParts(parts, part.toolName, output.value);\n } else {\n appendLegacyToolResultParts(parts, part.toolName, output.value);\n }\n } else {\n parts.push({\n functionResponse: {\n name: part.toolName,\n response: {\n name: part.toolName,\n content:\n output.type === 'execution-denied'\n ? (output.reason ?? 'Tool execution denied.')\n : output.value,\n },\n },\n });\n }\n }\n\n contents.push({\n role: 'user',\n parts,\n });\n break;\n }\n }\n }\n\n if (\n isGemmaModel &&\n systemInstructionParts.length > 0 &&\n contents.length > 0 &&\n contents[0].role === 'user'\n ) {\n const systemText = systemInstructionParts\n .map(part => part.text)\n .join('\\n\\n');\n\n contents[0].parts.unshift({ text: systemText + '\\n\\n' });\n }\n\n return {\n systemInstruction:\n systemInstructionParts.length > 0 && !isGemmaModel\n ? { parts: systemInstructionParts }\n : undefined,\n contents,\n };\n}\n","export function getModelPath(modelId: string): string {\n return modelId.includes('/') ? modelId : `models/${modelId}`;\n}\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type GoogleGenerativeAIModelId =\n // Stable models\n // https://ai.google.dev/gemini-api/docs/models/gemini\n | 'gemini-2.0-flash'\n | 'gemini-2.0-flash-001'\n | 'gemini-2.0-flash-lite'\n | 'gemini-2.0-flash-lite-001'\n | 'gemini-2.5-pro'\n | 'gemini-2.5-flash'\n | 'gemini-2.5-flash-image'\n | 'gemini-2.5-flash-lite'\n | 'gemini-2.5-flash-lite-preview-09-2025'\n | 'gemini-2.5-flash-preview-tts'\n | 'gemini-2.5-pro-preview-tts'\n | 'gemini-2.5-flash-native-audio-latest'\n | 'gemini-2.5-flash-native-audio-preview-09-2025'\n | 'gemini-2.5-flash-native-audio-preview-12-2025'\n | 'gemini-2.5-computer-use-preview-10-2025'\n | 'gemini-3-pro-preview'\n | 'gemini-3-pro-image-preview'\n | 'gemini-3-flash-preview'\n | 'gemini-3.1-pro-preview'\n | 'gemini-3.1-pro-preview-customtools'\n | 'gemini-3.1-flash-image-preview'\n | 'gemini-3.1-flash-lite-preview'\n // latest version\n // https://ai.google.dev/gemini-api/docs/models#latest\n | 'gemini-pro-latest'\n | 'gemini-flash-latest'\n | 'gemini-flash-lite-latest'\n | 'deep-research-pro-preview-12-2025'\n | 'nano-banana-pro-preview'\n | 'aqa'\n // Experimental models\n // https://ai.google.dev/gemini-api/docs/models/experimental-models\n | 'gemini-robotics-er-1.5-preview'\n | 'gemma-3-1b-it'\n | 'gemma-3-4b-it'\n | 'gemma-3n-e4b-it'\n | 'gemma-3n-e2b-it'\n | 'gemma-3-12b-it'\n | 'gemma-3-27b-it'\n | (string & {});\n\nexport const googleLanguageModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n responseModalities: z.array(z.enum(['TEXT', 'IMAGE'])).optional(),\n\n thinkingConfig: z\n .object({\n thinkingBudget: z.number().optional(),\n includeThoughts: z.boolean().optional(),\n // https://ai.google.dev/gemini-api/docs/gemini-3?thinking=high#thinking_level\n thinkingLevel: z\n .enum(['minimal', 'low', 'medium', 'high'])\n .optional(),\n })\n .optional(),\n\n /**\n * Optional.\n * The name of the cached content used as context to serve the prediction.\n * Format: cachedContents/{cachedContent}\n */\n cachedContent: z.string().optional(),\n\n /**\n * Optional. Enable structured output. Default is true.\n *\n * This is useful when the JSON Schema contains elements that are\n * not supported by the OpenAPI schema version that\n * Google Generative AI uses. You can use this to disable\n * structured outputs if you need to.\n */\n structuredOutputs: z.boolean().optional(),\n\n /**\n * Optional. A list of unique safety settings for blocking unsafe content.\n */\n safetySettings: z\n .array(\n z.object({\n category: z.enum([\n 'HARM_CATEGORY_UNSPECIFIED',\n 'HARM_CATEGORY_HATE_SPEECH',\n 'HARM_CATEGORY_DANGEROUS_CONTENT',\n 'HARM_CATEGORY_HARASSMENT',\n 'HARM_CATEGORY_SEXUALLY_EXPLICIT',\n 'HARM_CATEGORY_CIVIC_INTEGRITY',\n ]),\n threshold: z.enum([\n 'HARM_BLOCK_THRESHOLD_UNSPECIFIED',\n 'BLOCK_LOW_AND_ABOVE',\n 'BLOCK_MEDIUM_AND_ABOVE',\n 'BLOCK_ONLY_HIGH',\n 'BLOCK_NONE',\n 'OFF',\n ]),\n }),\n )\n .optional(),\n\n threshold: z\n .enum([\n 'HARM_BLOCK_THRESHOLD_UNSPECIFIED',\n 'BLOCK_LOW_AND_ABOVE',\n 'BLOCK_MEDIUM_AND_ABOVE',\n 'BLOCK_ONLY_HIGH',\n 'BLOCK_NONE',\n 'OFF',\n ])\n .optional(),\n\n /**\n * Optional. Enables timestamp understanding for audio-only files.\n *\n * https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/audio-understanding\n */\n audioTimestamp: z.boolean().optional(),\n\n /**\n * Optional. Defines labels used in billing reports. Available on Vertex AI only.\n *\n * https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/add-labels-to-api-calls\n */\n labels: z.record(z.string(), z.string()).optional(),\n\n /**\n * Optional. If specified, the media resolution specified will be used.\n *\n * https://ai.google.dev/api/generate-content#MediaResolution\n */\n mediaResolution: z\n .enum([\n 'MEDIA_RESOLUTION_UNSPECIFIED',\n 'MEDIA_RESOLUTION_LOW',\n 'MEDIA_RESOLUTION_MEDIUM',\n 'MEDIA_RESOLUTION_HIGH',\n ])\n .optional(),\n\n /**\n * Optional. Configures the image generation aspect ratio for Gemini models.\n *\n * https://ai.google.dev/gemini-api/docs/image-generation#aspect_ratios\n */\n imageConfig: z\n .object({\n aspectRatio: z\n .enum([\n '1:1',\n '2:3',\n '3:2',\n '3:4',\n '4:3',\n '4:5',\n '5:4',\n '9:16',\n '16:9',\n '21:9',\n '1:8',\n '8:1',\n '1:4',\n '4:1',\n ])\n .optional(),\n imageSize: z.enum(['1K', '2K', '4K', '512']).optional(),\n })\n .optional(),\n\n /**\n * Optional. Configuration for grounding retrieval.\n * Used to provide location context for Google Maps and Google Search grounding.\n *\n * https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps\n */\n retrievalConfig: z\n .object({\n latLng: z\n .object({\n latitude: z.number(),\n longitude: z.number(),\n })\n .optional(),\n })\n .optional(),\n\n /**\n * Optional. The service tier to use for the request.\n */\n serviceTier: z.enum(['standard', 'flex', 'priority']).optional(),\n }),\n ),\n);\n\nexport type GoogleLanguageModelOptions = InferSchema<\n typeof googleLanguageModelOptions\n>;\n","import {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertJSONSchemaToOpenAPISchema } from './convert-json-schema-to-openapi-schema';\nimport { GoogleGenerativeAIModelId } from './google-generative-ai-options';\n\nexport function prepareTools({\n tools,\n toolChoice,\n modelId,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n modelId: GoogleGenerativeAIModelId;\n}): {\n tools:\n | Array<\n | {\n functionDeclarations: Array<{\n name: string;\n description: string;\n parameters: unknown;\n }>;\n }\n | Record<string, any>\n >\n | undefined;\n toolConfig:\n | undefined\n | {\n functionCallingConfig?: {\n mode: 'AUTO' | 'NONE' | 'ANY' | 'VALIDATED';\n allowedFunctionNames?: string[];\n };\n includeServerSideToolInvocations?: boolean;\n };\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n const isLatest = (\n [\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-pro-latest',\n ] as const satisfies GoogleGenerativeAIModelId[]\n ).some(id => id === modelId);\n const isGemini2orNewer =\n modelId.includes('gemini-2') ||\n modelId.includes('gemini-3') ||\n modelId.includes('nano-banana') ||\n isLatest;\n const isGemini3orNewer = modelId.includes('gemini-3');\n const supportsFileSearch =\n modelId.includes('gemini-2.5') || modelId.includes('gemini-3');\n\n if (tools == null) {\n return { tools: undefined, toolConfig: undefined, toolWarnings };\n }\n\n // Check for mixed tool types and add warnings\n const hasFunctionTools = tools.some(tool => tool.type === 'function');\n const hasProviderTools = tools.some(tool => tool.type === 'provider');\n\n if (hasFunctionTools && hasProviderTools && !isGemini3orNewer) {\n toolWarnings.push({\n type: 'unsupported',\n feature: `combination of function and provider-defined tools`,\n });\n }\n\n if (hasProviderTools) {\n const googleTools: any[] = [];\n\n const ProviderTools = tools.filter(tool => tool.type === 'provider');\n ProviderTools.forEach(tool => {\n switch (tool.id) {\n case 'google.google_search':\n if (isGemini2orNewer) {\n googleTools.push({ googleSearch: { ...tool.args } });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details: 'Google Search requires Gemini 2.0 or newer.',\n });\n }\n break;\n case 'google.enterprise_web_search':\n if (isGemini2orNewer) {\n googleTools.push({ enterpriseWebSearch: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details: 'Enterprise Web Search requires Gemini 2.0 or newer.',\n });\n }\n break;\n case 'google.url_context':\n if (isGemini2orNewer) {\n googleTools.push({ urlContext: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The URL context tool is not supported with other Gemini models than Gemini 2.',\n });\n }\n break;\n case 'google.code_execution':\n if (isGemini2orNewer) {\n googleTools.push({ codeExecution: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The code execution tool is not supported with other Gemini models than Gemini 2.',\n });\n }\n break;\n case 'google.file_search':\n if (supportsFileSearch) {\n googleTools.push({ fileSearch: { ...tool.args } });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The file search tool is only supported with Gemini 2.5 models and Gemini 3 models.',\n });\n }\n break;\n case 'google.vertex_rag_store':\n if (isGemini2orNewer) {\n googleTools.push({\n retrieval: {\n vertex_rag_store: {\n rag_resources: {\n rag_corpus: tool.args.ragCorpus,\n },\n similarity_top_k: tool.args.topK as number | undefined,\n },\n },\n });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The RAG store tool is not supported with other Gemini models than Gemini 2.',\n });\n }\n break;\n case 'google.google_maps':\n if (isGemini2orNewer) {\n googleTools.push({ googleMaps: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The Google Maps grounding tool is not supported with Gemini models other than Gemini 2 or newer.',\n });\n }\n break;\n default:\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n break;\n }\n });\n\n if (hasFunctionTools && isGemini3orNewer && googleTools.length > 0) {\n const functionDeclarations: Array<{\n name: string;\n description: string;\n parameters: unknown;\n }> = [];\n for (const tool of tools) {\n if (tool.type === 'function') {\n functionDeclarations.push({\n name: tool.name,\n description: tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(tool.inputSchema),\n });\n }\n }\n\n const combinedToolConfig: {\n functionCallingConfig: {\n mode: 'VALIDATED' | 'ANY' | 'NONE';\n allowedFunctionNames?: string[];\n };\n includeServerSideToolInvocations: true;\n } = {\n functionCallingConfig: { mode: 'VALIDATED' },\n includeServerSideToolInvocations: true,\n };\n\n if (toolChoice != null) {\n switch (toolChoice.type) {\n case 'auto':\n break;\n case 'none':\n combinedToolConfig.functionCallingConfig = { mode: 'NONE' };\n break;\n case 'required':\n combinedToolConfig.functionCallingConfig = { mode: 'ANY' };\n break;\n case 'tool':\n combinedToolConfig.functionCallingConfig = {\n mode: 'ANY',\n allowedFunctionNames: [toolChoice.toolName],\n };\n break;\n }\n }\n\n return {\n tools: [...googleTools, { functionDeclarations }],\n toolConfig: combinedToolConfig,\n toolWarnings,\n };\n }\n\n return {\n tools: googleTools.length > 0 ? googleTools : undefined,\n toolConfig: undefined,\n toolWarnings,\n };\n }\n\n const functionDeclarations = [];\n let hasStrictTools = false;\n for (const tool of tools) {\n switch (tool.type) {\n case 'function':\n functionDeclarations.push({\n name: tool.name,\n description: tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(tool.inputSchema),\n });\n if (tool.strict === true) {\n hasStrictTools = true;\n }\n break;\n default:\n toolWarnings.push({\n type: 'unsupported',\n feature: `function tool ${tool.name}`,\n });\n break;\n }\n }\n\n if (toolChoice == null) {\n return {\n tools: [{ functionDeclarations }],\n toolConfig: hasStrictTools\n ? { functionCallingConfig: { mode: 'VALIDATED' } }\n : undefined,\n toolWarnings,\n };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: {\n functionCallingConfig: {\n mode: hasStrictTools ? 'VALIDATED' : 'AUTO',\n },\n },\n toolWarnings,\n };\n case 'none':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: { functionCallingConfig: { mode: 'NONE' } },\n toolWarnings,\n };\n case 'required':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: {\n functionCallingConfig: {\n mode: hasStrictTools ? 'VALIDATED' : 'ANY',\n },\n },\n toolWarnings,\n };\n case 'tool':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: {\n functionCallingConfig: {\n mode: hasStrictTools ? 'VALIDATED' : 'ANY',\n allowedFunctionNames: [toolChoice.toolName],\n },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapGoogleGenerativeAIFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'STOP':\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'MAX_TOKENS':\n return 'length';\n case 'IMAGE_SAFETY':\n case 'RECITATION':\n case 'SAFETY':\n case 'BLOCKLIST':\n case 'PROHIBITED_CONTENT':\n case 'SPII':\n return 'content-filter';\n case 'MALFORMED_FUNCTION_CALL':\n return 'error';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * A tool that enables the model to generate and run Python code.\n *\n * @note Ensure the selected model supports Code Execution.\n * Multi-tool usage with the code execution tool is typically compatible with Gemini >=2 models.\n *\n * @see https://ai.google.dev/gemini-api/docs/code-execution (Google AI)\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/code-execution-api (Vertex AI)\n */\nexport const codeExecution = createProviderToolFactoryWithOutputSchema<\n {\n language: string;\n code: string;\n },\n {\n outcome: string;\n output: string;\n },\n {}\n>({\n id: 'google.code_execution',\n inputSchema: z.object({\n language: z.string().describe('The programming language of the code.'),\n code: z.string().describe('The code to be executed.'),\n }),\n outputSchema: z.object({\n outcome: z\n .string()\n .describe('The outcome of the execution (e.g., \"OUTCOME_OK\").'),\n output: z.string().describe('The output from the code execution.'),\n }),\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/web-grounding-enterprise\n\nexport const enterpriseWebSearch = createProviderToolFactory<\n {\n // Enterprise Web Search does not have any input schema\n },\n {}\n>({\n id: 'google.enterprise_web_search',\n inputSchema: lazySchema(() => zodSchema(z.object({}))),\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/** Tool to retrieve knowledge from the File Search Stores. */\nconst fileSearchArgsBaseSchema = z\n .object({\n /** The names of the file_search_stores to retrieve from.\n * Example: `fileSearchStores/my-file-search-store-123`\n */\n fileSearchStoreNames: z\n .array(z.string())\n .describe(\n 'The names of the file_search_stores to retrieve from. Example: `fileSearchStores/my-file-search-store-123`',\n ),\n /** The number of file search retrieval chunks to retrieve. */\n topK: z\n .number()\n .int()\n .positive()\n .describe('The number of file search retrieval chunks to retrieve.')\n .optional(),\n\n /** Metadata filter to apply to the file search retrieval documents.\n * See https://google.aip.dev/160 for the syntax of the filter expression.\n */\n metadataFilter: z\n .string()\n .describe(\n 'Metadata filter to apply to the file search retrieval documents. See https://google.aip.dev/160 for the syntax of the filter expression.',\n )\n .optional(),\n })\n .passthrough();\n\nexport type GoogleFileSearchToolArgs = z.infer<typeof fileSearchArgsBaseSchema>;\n\nconst fileSearchArgsSchema = lazySchema(() =>\n zodSchema(fileSearchArgsBaseSchema),\n);\n\nexport const fileSearch = createProviderToolFactory<\n {},\n GoogleFileSearchToolArgs\n>({\n id: 'google.file_search',\n inputSchema: fileSearchArgsSchema,\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://ai.google.dev/gemini-api/docs/maps-grounding\n// https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps\n\nexport const googleMaps = createProviderToolFactory<{}, {}>({\n id: 'google.google_maps',\n inputSchema: lazySchema(() => zodSchema(z.object({}))),\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://ai.google.dev/gemini-api/docs/google-search\n// https://ai.google.dev/api/generate-content#GroundingSupport\n// https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-search\n\nconst googleSearchToolArgsBaseSchema = z\n .object({\n searchTypes: z\n .object({\n webSearch: z.object({}).optional(),\n imageSearch: z.object({}).optional(),\n })\n .optional(),\n\n timeRangeFilter: z\n .object({\n startTime: z.string(),\n endTime: z.string(),\n })\n .optional(),\n })\n .passthrough();\n\nexport type GoogleSearchToolArgs = z.infer<\n typeof googleSearchToolArgsBaseSchema\n>;\n\nconst googleSearchToolArgsSchema = lazySchema(() =>\n zodSchema(googleSearchToolArgsBaseSchema),\n);\n\nexport const googleSearch = createProviderToolFactory<{}, GoogleSearchToolArgs>(\n {\n id: 'google.google_search',\n inputSchema: googleSearchToolArgsSchema,\n },\n);\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const urlContext = createProviderToolFactory<\n {\n // Url context does not have any input schema, it will directly use the url from the prompt\n },\n {}\n>({\n id: 'google.url_context',\n inputSchema: lazySchema(() => zodSchema(z.object({}))),\n});\n","import { createProviderToolFactory } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/use-vertexai-search#generate-content-using-gemini-api\n// https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/rag-output-explained\n\n/**\n * A tool that enables the model to perform RAG searches against a Vertex RAG Store.\n *\n * @note Only works with Vertex Gemini models.\n */\nexport const vertexRagStore = createProviderToolFactory<\n {},\n {\n /**\n * RagCorpus resource names, eg: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}\n */\n ragCorpus: string;\n\n /**\n * The number of top contexts to retrieve.\n */\n topK?: number;\n }\n>({\n id: 'google.vertex_rag_store',\n inputSchema: z.object({\n ragCorpus: z.string(),\n topK: z.number().optional(),\n }),\n});\n","import { codeExecution } from './tool/code-execution';\nimport { enterpriseWebSearch } from './tool/enterprise-web-search';\nimport { fileSearch } from './tool/file-search';\nimport { googleMaps } from './tool/google-maps';\nimport { googleSearch } from './tool/google-search';\nimport { urlContext } from './tool/url-context';\nimport { vertexRagStore } from './tool/vertex-rag-store';\n\nexport const googleTools = {\n /**\n * Creates a Google search tool that gives Google direct access to real-time web content.\n * Must have name \"google_search\".\n */\n googleSearch,\n\n /**\n * Creates an Enterprise Web Search tool for grounding responses using a compliance-focused web index.\n * Designed for highly-regulated industries (finance, healthcare, public sector).\n * Does not log customer data and supports VPC service controls.\n * Must have name \"enterprise_web_search\".\n *\n * @note Only available on Vertex AI. Requires Gemini 2.0 or newer.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/web-grounding-enterprise\n */\n enterpriseWebSearch,\n\n /**\n * Creates a Google Maps grounding tool that gives the model access to Google Maps data.\n * Must have name \"google_maps\".\n *\n * @see https://ai.google.dev/gemini-api/docs/maps-grounding\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps\n */\n googleMaps,\n\n /**\n * Creates a URL context tool that gives Google direct access to real-time web content.\n * Must have name \"url_context\".\n */\n urlContext,\n\n /**\n * Enables Retrieval Augmented Generation (RAG) via the Gemini File Search tool.\n * Must have name \"file_search\".\n *\n * @param fileSearchStoreNames - Fully-qualified File Search store resource names.\n * @param metadataFilter - Optional filter expression to restrict the files that can be retrieved.\n * @param topK - Optional result limit for the number of chunks returned from File Search.\n *\n * @see https://ai.google.dev/gemini-api/docs/file-search\n */\n fileSearch,\n /**\n * A tool that enables the model to generate and run Python code.\n * Must have name \"code_execution\".\n *\n * @note Ensure the selected model supports Code Execution.\n * Multi-tool usage with the code execution tool is typically compatible with Gemini >=2 models.\n *\n * @see https://ai.google.dev/gemini-api/docs/code-execution (Google AI)\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/code-execution-api (Vertex AI)\n */\n codeExecution,\n\n /**\n * Creates a Vertex RAG Store tool that enables the model to perform RAG searches against a Vertex RAG Store.\n * Must have name \"vertex_rag_store\".\n */\n vertexRagStore,\n};\n","import {\n ImageModelV4,\n LanguageModelV4Prompt,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertToBase64,\n createJsonResponseHandler,\n FetchFunction,\n generateId as defaultGenerateId,\n type InferSchema,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\nimport {\n GoogleGenerativeAIImageModelId,\n GoogleGenerativeAIImageSettings,\n} from './google-generative-ai-image-settings';\nimport { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model';\nimport type { GoogleLanguageModelOptions } from './google-generative-ai-options';\n\ninterface GoogleGenerativeAIImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class GoogleGenerativeAIImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n\n get maxImagesPerCall(): number {\n if (this.settings.maxImagesPerCall != null) {\n return this.settings.maxImagesPerCall;\n }\n // https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash-image\n if (isGeminiModel(this.modelId)) {\n return 10;\n }\n // https://ai.google.dev/gemini-api/docs/imagen#imagen-model\n return 4;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: GoogleGenerativeAIImageModelId,\n private readonly settings: GoogleGenerativeAIImageSettings,\n private readonly config: GoogleGenerativeAIImageModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n // Gemini image models use the language model API internally\n if (isGeminiModel(this.modelId)) {\n return this.doGenerateGemini(options);\n }\n return this.doGenerateImagen(options);\n }\n\n private async doGenerateImagen(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const {\n prompt,\n n = 1,\n size,\n aspectRatio = '1:1',\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n } = options;\n const warnings: Array<SharedV4Warning> = [];\n\n // Imagen API endpoints do not support image editing\n if (files != null && files.length > 0) {\n throw new Error(\n 'Google Generative AI does not support image editing with Imagen models. ' +\n 'Use Google Vertex AI (@ai-sdk/google-vertex) for image editing capabilities.',\n );\n }\n\n if (mask != null) {\n throw new Error(\n 'Google Generative AI does not support image editing with masks. ' +\n 'Use Google Vertex AI (@ai-sdk/google-vertex) for image editing capabilities.',\n );\n }\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details:\n 'This model does not support the `seed` option through this provider.',\n });\n }\n\n const googleOptions = await parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleImageModelOptionsSchema,\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const parameters: Record<string, unknown> = {\n sampleCount: n,\n };\n\n if (aspectRatio != null) {\n parameters.aspectRatio = aspectRatio;\n }\n\n if (googleOptions) {\n Object.assign(parameters, googleOptions);\n }\n\n const body = {\n instances: [{ prompt }],\n parameters,\n };\n\n const { responseHeaders, value: response } = await postJsonToApi<{\n predictions: Array<{ bytesBase64Encoded: string }>;\n }>({\n url: `${this.config.baseURL}/models/${this.modelId}:predict`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n return {\n images: response.predictions.map(\n (p: { bytesBase64Encoded: string }) => p.bytesBase64Encoded,\n ),\n warnings,\n providerMetadata: {\n google: {\n images: response.predictions.map(() => ({\n // Add any prediction-specific metadata here\n })),\n },\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n private async doGenerateGemini(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const {\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n } = options;\n const warnings: Array<SharedV4Warning> = [];\n\n // Gemini does not support mask-based inpainting\n if (mask != null) {\n throw new Error(\n 'Gemini image models do not support mask-based image editing.',\n );\n }\n\n // Gemini does not support generating multiple images per call via n parameter\n if (n != null && n > 1) {\n throw new Error(\n 'Gemini image models do not support generating a set number of images per call. Use n=1 or omit the n parameter.',\n );\n }\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n // Build user message content for language model\n const userContent: Array<\n | { type: 'text'; text: string }\n | { type: 'file'; data: string | Uint8Array | URL; mediaType: string }\n > = [];\n\n // Add text prompt\n if (prompt != null) {\n userContent.push({ type: 'text', text: prompt });\n }\n\n // Add input images for editing\n if (files != null && files.length > 0) {\n for (const file of files) {\n if (file.type === 'url') {\n userContent.push({\n type: 'file',\n data: new URL(file.url),\n mediaType: 'image/*',\n });\n } else {\n userContent.push({\n type: 'file',\n data:\n typeof file.data === 'string'\n ? file.data\n : new Uint8Array(file.data),\n mediaType: file.mediaType,\n });\n }\n }\n }\n\n const languageModelPrompt: LanguageModelV4Prompt = [\n { role: 'user', content: userContent },\n ];\n\n // Instantiate language model\n const languageModel = new GoogleGenerativeAILanguageModel(this.modelId, {\n provider: this.config.provider,\n baseURL: this.config.baseURL,\n headers: this.config.headers ?? {},\n fetch: this.config.fetch,\n generateId: this.config.generateId ?? defaultGenerateId,\n });\n\n // Call language model with image-only response modality\n const result = await languageModel.doGenerate({\n prompt: languageModelPrompt,\n seed,\n providerOptions: {\n google: {\n responseModalities: ['IMAGE'],\n imageConfig: aspectRatio\n ? {\n aspectRatio: aspectRatio as NonNullable<\n GoogleLanguageModelOptions['imageConfig']\n >['aspectRatio'],\n }\n : undefined,\n ...((providerOptions?.google as Omit<\n GoogleLanguageModelOptions,\n 'responseModalities' | 'imageConfig'\n >) ?? {}),\n } satisfies GoogleLanguageModelOptions,\n },\n headers,\n abortSignal,\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n // Extract images from language model response\n const images: string[] = [];\n for (const part of result.content) {\n if (part.type === 'file' && part.mediaType.startsWith('image/')) {\n images.push(convertToBase64(part.data));\n }\n }\n\n return {\n images,\n warnings,\n providerMetadata: {\n google: {\n images: images.map(() => ({})),\n },\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: result.response?.headers,\n },\n usage: result.usage\n ? {\n inputTokens: result.usage.inputTokens.total,\n outputTokens: result.usage.outputTokens.total,\n totalTokens:\n (result.usage.inputTokens.total ?? 0) +\n (result.usage.outputTokens.total ?? 0),\n }\n : undefined,\n };\n }\n}\n\nfunction isGeminiModel(modelId: string): boolean {\n return modelId.startsWith('gemini-');\n}\n\n// minimal version of the schema\nconst googleImageResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n predictions: z\n .array(z.object({ bytesBase64Encoded: z.string() }))\n .default([]),\n }),\n ),\n);\n\n// Note: For the initial GA launch of Imagen 3, safety filters are not configurable.\n// https://ai.google.dev/gemini-api/docs/imagen#imagen-model\nconst googleImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n personGeneration: z\n .enum(['dont_allow', 'allow_adult', 'allow_all'])\n .nullish(),\n aspectRatio: z.enum(['1:1', '3:4', '4:3', '9:16', '16:9']).nullish(),\n }),\n ),\n);\n\nexport type GoogleImageModelOptions = InferSchema<\n typeof googleImageModelOptionsSchema\n>;\n","import {\n AISDKError,\n type FilesV4,\n type FilesV4UploadFileCallOptions,\n type FilesV4UploadFileResult,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n zodSchema,\n getFromApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\n\nexport type GoogleFilesUploadOptions = {\n displayName?: string | null;\n pollIntervalMs?: number | null;\n pollTimeoutMs?: number | null;\n\n [key: string]: unknown;\n};\n\ninterface GoogleGenerativeAIFilesConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n}\n\nexport class GoogleGenerativeAIFiles implements FilesV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(private readonly config: GoogleGenerativeAIFilesConfig) {}\n\n async uploadFile(\n options: FilesV4UploadFileCallOptions,\n ): Promise<FilesV4UploadFileResult> {\n const googleOptions = (await parseProviderOptions({\n provider: 'google',\n providerOptions: options.providerOptions,\n schema: googleFilesUploadOptionsSchema,\n })) as GoogleFilesUploadOptions | undefined;\n\n const resolvedHeaders = this.config.headers();\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n\n const warnings: Array<SharedV4Warning> = [];\n if (options.filename != null) {\n warnings.push({ type: 'unsupported', feature: 'filename' });\n }\n\n const data = options.data;\n const fileBytes =\n data instanceof Uint8Array\n ? data\n : Uint8Array.from(atob(data), c => c.charCodeAt(0));\n\n const mediaType = options.mediaType;\n const displayName = googleOptions?.displayName;\n\n const baseOrigin = this.config.baseURL.replace(/\\/v1beta$/, '');\n\n const initResponse = await fetchFn(`${baseOrigin}/upload/v1beta/files`, {\n method: 'POST',\n headers: {\n ...resolvedHeaders,\n 'X-Goog-Upload-Protocol': 'resumable',\n 'X-Goog-Upload-Command': 'start',\n 'X-Goog-Upload-Header-Content-Length': String(fileBytes.length),\n 'X-Goog-Upload-Header-Content-Type': mediaType,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n file: {\n ...(displayName != null ? { display_name: displayName } : {}),\n },\n }),\n });\n\n if (!initResponse.ok) {\n const errorBody = await initResponse.text();\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_ERROR',\n message: `Failed to initiate resumable upload: ${initResponse.status} ${errorBody}`,\n });\n }\n\n const uploadUrl = initResponse.headers.get('x-goog-upload-url');\n if (!uploadUrl) {\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_ERROR',\n message: 'No upload URL returned from initiation request',\n });\n }\n\n const uploadResponse = await fetchFn(uploadUrl, {\n method: 'POST',\n headers: {\n 'Content-Length': String(fileBytes.length),\n 'X-Goog-Upload-Offset': '0',\n 'X-Goog-Upload-Command': 'upload, finalize',\n },\n body: fileBytes,\n });\n\n if (!uploadResponse.ok) {\n const errorBody = await uploadResponse.text();\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_ERROR',\n message: `Failed to upload file data: ${uploadResponse.status} ${errorBody}`,\n });\n }\n\n const uploadResult = (await uploadResponse.json()) as {\n file: GoogleFileResource;\n };\n\n let file = uploadResult.file;\n\n const pollIntervalMs = googleOptions?.pollIntervalMs ?? 2000;\n const pollTimeoutMs = googleOptions?.pollTimeoutMs ?? 300000;\n const startTime = Date.now();\n\n while (file.state === 'PROCESSING') {\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_TIMEOUT',\n message: `File processing timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n await delay(pollIntervalMs);\n\n const { value: fileStatus } = await getFromApi({\n url: `${this.config.baseURL}/${file.name}`,\n headers: combineHeaders(resolvedHeaders),\n successfulResponseHandler: createJsonResponseHandler(\n googleFileResponseSchema,\n ),\n failedResponseHandler: googleFailedResponseHandler,\n fetch: this.config.fetch,\n });\n\n file = fileStatus;\n }\n\n if (file.state === 'FAILED') {\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_FAILED',\n message: `File processing failed for ${file.name}`,\n });\n }\n\n return {\n warnings,\n providerReference: { google: file.uri },\n mediaType: file.mimeType ?? options.mediaType,\n providerMetadata: {\n google: {\n name: file.name,\n displayName: file.displayName,\n mimeType: file.mimeType,\n sizeBytes: file.sizeBytes,\n state: file.state,\n uri: file.uri,\n ...(file.createTime != null ? { createTime: file.createTime } : {}),\n ...(file.updateTime != null ? { updateTime: file.updateTime } : {}),\n ...(file.expirationTime != null\n ? { expirationTime: file.expirationTime }\n : {}),\n ...(file.sha256Hash != null ? { sha256Hash: file.sha256Hash } : {}),\n },\n },\n };\n }\n}\n\ntype GoogleFileResource = {\n name: string;\n displayName?: string | null;\n mimeType: string;\n sizeBytes?: string | null;\n createTime?: string | null;\n updateTime?: string | null;\n expirationTime?: string | null;\n sha256Hash?: string | null;\n uri: string;\n state: string;\n};\n\nconst googleFileResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n name: z.string(),\n displayName: z.string().nullish(),\n mimeType: z.string(),\n sizeBytes: z.string().nullish(),\n createTime: z.string().nullish(),\n updateTime: z.string().nullish(),\n expirationTime: z.string().nullish(),\n sha256Hash: z.string().nullish(),\n uri: z.string(),\n state: z.string(),\n }),\n ),\n);\n\nconst googleFilesUploadOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n displayName: z.string().nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\nimport type { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\n\nexport type GoogleVideoModelOptions = {\n // Polling configuration\n pollIntervalMs?: number | null;\n pollTimeoutMs?: number | null;\n\n // Video generation options\n personGeneration?: 'dont_allow' | 'allow_adult' | 'allow_all' | null;\n negativePrompt?: string | null;\n\n // Reference images (for style/asset reference)\n referenceImages?: Array<{\n bytesBase64Encoded?: string;\n gcsUri?: string;\n }> | null;\n\n [key: string]: unknown; // For passthrough\n};\n\ninterface GoogleGenerativeAIVideoModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class GoogleGenerativeAIVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxVideosPerCall(): number {\n // Google supports multiple videos via sampleCount\n return 4;\n }\n\n constructor(\n readonly modelId: GoogleGenerativeAIVideoModelId,\n private readonly config: GoogleGenerativeAIVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n const googleOptions = (await parseProviderOptions({\n provider: 'google',\n providerOptions: options.providerOptions,\n schema: googleVideoModelOptionsSchema,\n })) as GoogleVideoModelOptions | undefined;\n\n const instances: Array<Record<string, unknown>> = [{}];\n const instance = instances[0];\n\n if (options.prompt != null) {\n instance.prompt = options.prompt;\n }\n\n // Handle image-to-video: convert image to base64\n if (options.image != null) {\n if (options.image.type === 'url') {\n warnings.push({\n type: 'unsupported',\n feature: 'URL-based image input',\n details:\n 'Google Generative AI video models require base64-encoded images. URL will be ignored.',\n });\n } else {\n const base64Data =\n typeof options.image.data === 'string'\n ? options.image.data\n : convertUint8ArrayToBase64(options.image.data);\n\n instance.image = {\n inlineData: {\n mimeType: options.image.mediaType || 'image/png',\n data: base64Data,\n },\n };\n }\n }\n\n if (googleOptions?.referenceImages != null) {\n instance.referenceImages = googleOptions.referenceImages.map(refImg => {\n if (refImg.bytesBase64Encoded) {\n return {\n inlineData: {\n mimeType: 'image/png',\n data: refImg.bytesBase64Encoded,\n },\n };\n } else if (refImg.gcsUri) {\n return {\n gcsUri: refImg.gcsUri,\n };\n }\n return refImg;\n });\n }\n\n const parameters: Record<string, unknown> = {\n sampleCount: options.n,\n };\n\n if (options.aspectRatio) {\n parameters.aspectRatio = options.aspectRatio;\n }\n\n if (options.resolution) {\n const resolutionMap: Record<string, string> = {\n '1280x720': '720p',\n '1920x1080': '1080p',\n '3840x2160': '4k',\n };\n parameters.resolution =\n resolutionMap[options.resolution] || options.resolution;\n }\n\n if (options.duration) {\n parameters.durationSeconds = options.duration;\n }\n\n if (options.seed) {\n parameters.seed = options.seed;\n }\n\n if (googleOptions != null) {\n const opts = googleOptions as GoogleVideoModelOptions;\n\n if (\n opts.personGeneration !== undefined &&\n opts.personGeneration !== null\n ) {\n parameters.personGeneration = opts.personGeneration;\n }\n if (opts.negativePrompt !== undefined && opts.negativePrompt !== null) {\n parameters.negativePrompt = opts.negativePrompt;\n }\n\n for (const [key, value] of Object.entries(opts)) {\n if (\n ![\n 'pollIntervalMs',\n 'pollTimeoutMs',\n 'personGeneration',\n 'negativePrompt',\n 'referenceImages',\n ].includes(key)\n ) {\n parameters[key] = value;\n }\n }\n }\n\n const { value: operation } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:predictLongRunning`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body: {\n instances,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n googleOperationSchema,\n ),\n failedResponseHandler: googleFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const operationName = operation.name;\n if (!operationName) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ERROR',\n message: 'No operation name returned from API',\n });\n }\n\n const pollIntervalMs = googleOptions?.pollIntervalMs ?? 10000; // 10 seconds (per Google docs)\n const pollTimeoutMs = googleOptions?.pollTimeoutMs ?? 600000; // 10 minutes\n\n const startTime = Date.now();\n let finalOperation = operation;\n let responseHeaders: Record<string, string> | undefined;\n\n while (!finalOperation.done) {\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n await delay(pollIntervalMs);\n\n if (options.abortSignal?.aborted) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ABORTED',\n message: 'Video generation request was aborted',\n });\n }\n\n const { value: statusOperation, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/${operationName}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n googleOperationSchema,\n ),\n failedResponseHandler: googleFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n finalOperation = statusOperation;\n responseHeaders = pollHeaders;\n }\n\n if (finalOperation.error) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_FAILED',\n message: `Video generation failed: ${finalOperation.error.message}`,\n });\n }\n\n const response = finalOperation.response;\n if (\n !response?.generateVideoResponse?.generatedSamples ||\n response.generateVideoResponse.generatedSamples.length === 0\n ) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ERROR',\n message: `No videos in response. Response: ${JSON.stringify(finalOperation)}`,\n });\n }\n\n const videos: Array<{ type: 'url'; url: string; mediaType: string }> = [];\n const videoMetadata: Array<{ uri: string }> = [];\n\n // Get API key from headers to append to download URLs\n const resolvedHeaders = await resolve(this.config.headers);\n const apiKey = resolvedHeaders?.['x-goog-api-key'];\n\n for (const generatedSample of response.generateVideoResponse\n .generatedSamples) {\n if (generatedSample.video?.uri) {\n // Append API key to URL for authentication during download\n const urlWithAuth = apiKey\n ? `${generatedSample.video.uri}${generatedSample.video.uri.includes('?') ? '&' : '?'}key=${apiKey}`\n : generatedSample.video.uri;\n\n videos.push({\n type: 'url',\n url: urlWithAuth,\n mediaType: 'video/mp4',\n });\n videoMetadata.push({\n uri: generatedSample.video.uri,\n });\n }\n }\n\n if (videos.length === 0) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ERROR',\n message: 'No valid videos in response',\n });\n }\n\n return {\n videos,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n google: {\n videos: videoMetadata,\n },\n },\n };\n }\n}\n\nconst googleOperationSchema = z.object({\n name: z.string().nullish(),\n done: z.boolean().nullish(),\n error: z\n .object({\n code: z.number().nullish(),\n message: z.string(),\n status: z.string().nullish(),\n })\n .nullish(),\n response: z\n .object({\n generateVideoResponse: z\n .object({\n generatedSamples: z\n .array(\n z.object({\n video: z\n .object({\n uri: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n })\n .nullish(),\n })\n .nullish(),\n});\n\nconst googleVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n personGeneration: z\n .enum(['dont_allow', 'allow_adult', 'allow_all'])\n .nullish(),\n negativePrompt: z.string().nullish(),\n referenceImages: z\n .array(\n z.object({\n bytesBase64Encoded: z.string().nullish(),\n gcsUri: z.string().nullish(),\n }),\n )\n .nullish(),\n })\n .passthrough(),\n ),\n);\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_v4","import_provider_utils","import_v4","responseHeaders","response","rawValue","import_provider_utils","import_v4","import_provider","import_provider_utils","_a","_b","_c","_d","import_provider_utils","import_v4","import_provider","googleTools","functionDeclarations","googleTools","generateId","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","defaultGenerateId","import_provider","import_provider_utils","import_v4","import_provider","import_provider_utils","import_v4","_a"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/google-provider.ts","../src/version.ts","../src/google-generative-ai-embedding-model.ts","../src/google-error.ts","../src/google-generative-ai-embedding-options.ts","../src/google-generative-ai-language-model.ts","../src/convert-google-generative-ai-usage.ts","../src/convert-json-schema-to-openapi-schema.ts","../src/convert-to-google-generative-ai-messages.ts","../src/get-model-path.ts","../src/google-generative-ai-options.ts","../src/google-prepare-tools.ts","../src/google-json-accumulator.ts","../src/map-google-generative-ai-finish-reason.ts","../src/tool/code-execution.ts","../src/tool/enterprise-web-search.ts","../src/tool/file-search.ts","../src/tool/google-maps.ts","../src/tool/google-search.ts","../src/tool/url-context.ts","../src/tool/vertex-rag-store.ts","../src/google-tools.ts","../src/google-generative-ai-image-model.ts","../src/google-generative-ai-files.ts","../src/google-generative-ai-video-model.ts"],"sourcesContent":["export type { GoogleErrorData } from './google-error';\nexport type {\n GoogleLanguageModelOptions,\n /** @deprecated Use `GoogleLanguageModelOptions` instead. */\n GoogleLanguageModelOptions as GoogleGenerativeAIProviderOptions,\n} from './google-generative-ai-options';\nexport type { GoogleGenerativeAIProviderMetadata } from './google-generative-ai-prompt';\nexport type {\n GoogleImageModelOptions,\n /** @deprecated Use `GoogleImageModelOptions` instead. */\n GoogleImageModelOptions as GoogleGenerativeAIImageProviderOptions,\n} from './google-generative-ai-image-model';\nexport type {\n GoogleEmbeddingModelOptions,\n /** @deprecated Use `GoogleEmbeddingModelOptions` instead. */\n GoogleEmbeddingModelOptions as GoogleGenerativeAIEmbeddingProviderOptions,\n} from './google-generative-ai-embedding-options';\nexport type {\n GoogleVideoModelOptions,\n /** @deprecated Use `GoogleVideoModelOptions` instead. */\n GoogleVideoModelOptions as GoogleGenerativeAIVideoProviderOptions,\n} from './google-generative-ai-video-model';\nexport type { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\nexport type { GoogleFilesUploadOptions } from './google-generative-ai-files';\nexport { createGoogleGenerativeAI, google } from './google-provider';\nexport type {\n GoogleGenerativeAIProvider,\n GoogleGenerativeAIProviderSettings,\n} from './google-provider';\nexport { VERSION } from './version';\n","import {\n EmbeddingModelV4,\n Experimental_VideoModelV4,\n FilesV4,\n ImageModelV4,\n LanguageModelV4,\n ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\nimport { GoogleGenerativeAIEmbeddingModel } from './google-generative-ai-embedding-model';\nimport { GoogleGenerativeAIEmbeddingModelId } from './google-generative-ai-embedding-options';\nimport { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model';\nimport { GoogleGenerativeAIModelId } from './google-generative-ai-options';\nimport { googleTools } from './google-tools';\n\nimport {\n GoogleGenerativeAIImageSettings,\n GoogleGenerativeAIImageModelId,\n} from './google-generative-ai-image-settings';\nimport { GoogleGenerativeAIImageModel } from './google-generative-ai-image-model';\nimport { GoogleGenerativeAIFiles } from './google-generative-ai-files';\nimport { GoogleGenerativeAIVideoModel } from './google-generative-ai-video-model';\nimport { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\n\nexport interface GoogleGenerativeAIProvider extends ProviderV4 {\n (modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n languageModel(modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n chat(modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(\n modelId: GoogleGenerativeAIImageModelId,\n settings?: GoogleGenerativeAIImageSettings,\n ): ImageModelV4;\n\n /**\n * @deprecated Use `chat()` instead.\n */\n generativeAI(modelId: GoogleGenerativeAIModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(\n modelId: GoogleGenerativeAIEmbeddingModelId,\n ): EmbeddingModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: GoogleGenerativeAIVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(\n modelId: GoogleGenerativeAIVideoModelId,\n ): Experimental_VideoModelV4;\n\n files(): FilesV4;\n\n tools: typeof googleTools;\n}\n\nexport interface GoogleGenerativeAIProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is `https://generativelanguage.googleapis.com/v1beta`.\n */\n baseURL?: string;\n\n /**\n * API key that is being send using the `x-goog-api-key` header.\n * It defaults to the `GOOGLE_GENERATIVE_AI_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string | undefined>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Optional function to generate a unique ID for each request.\n */\n generateId?: () => string;\n\n /**\n * Custom provider name\n * Defaults to 'google.generative-ai'.\n */\n name?: string;\n}\n\n/**\n * Create a Google Generative AI provider instance.\n */\nexport function createGoogleGenerativeAI(\n options: GoogleGenerativeAIProviderSettings = {},\n): GoogleGenerativeAIProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://generativelanguage.googleapis.com/v1beta';\n\n const providerName = options.name ?? 'google.generative-ai';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'x-goog-api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'GOOGLE_GENERATIVE_AI_API_KEY',\n description: 'Google Generative AI',\n }),\n ...options.headers,\n },\n `ai-sdk/google/${VERSION}`,\n );\n\n const createChatModel = (modelId: GoogleGenerativeAIModelId) =>\n new GoogleGenerativeAILanguageModel(modelId, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n generateId: options.generateId ?? generateId,\n supportedUrls: () => ({\n '*': [\n // Google Generative Language \"files\" endpoint\n // e.g. https://generativelanguage.googleapis.com/v1beta/files/...\n new RegExp(`^${baseURL}/files/.*$`),\n // YouTube URLs (public or unlisted videos)\n new RegExp(\n `^https://(?:www\\\\.)?youtube\\\\.com/watch\\\\?v=[\\\\w-]+(?:&[\\\\w=&.-]*)?$`,\n ),\n new RegExp(`^https://youtu\\\\.be/[\\\\w-]+(?:\\\\?[\\\\w=&.-]*)?$`),\n ],\n }),\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (modelId: GoogleGenerativeAIEmbeddingModelId) =>\n new GoogleGenerativeAIEmbeddingModel(modelId, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createImageModel = (\n modelId: GoogleGenerativeAIImageModelId,\n settings: GoogleGenerativeAIImageSettings = {},\n ) =>\n new GoogleGenerativeAIImageModel(modelId, settings, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createFiles = () =>\n new GoogleGenerativeAIFiles({\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: GoogleGenerativeAIVideoModelId) =>\n new GoogleGenerativeAIVideoModel(modelId, {\n provider: providerName,\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId ?? generateId,\n });\n\n const provider = function (modelId: GoogleGenerativeAIModelId) {\n if (new.target) {\n throw new Error(\n 'The Google Generative AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.generativeAI = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n provider.files = createFiles;\n provider.tools = googleTools;\n\n return provider as GoogleGenerativeAIProvider;\n}\n\n/**\n * Default Google Generative AI provider instance.\n */\nexport const google = createGoogleGenerativeAI();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n EmbeddingModelV4,\n TooManyEmbeddingValuesForCallError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n FetchFunction,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\nimport {\n GoogleGenerativeAIEmbeddingModelId,\n googleEmbeddingModelOptions,\n} from './google-generative-ai-embedding-options';\n\ntype GoogleGenerativeAIEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class GoogleGenerativeAIEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: GoogleGenerativeAIEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n private readonly config: GoogleGenerativeAIEmbeddingConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n constructor(\n modelId: GoogleGenerativeAIEmbeddingModelId,\n config: GoogleGenerativeAIEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n // Parse provider options\n const googleOptions = await parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleEmbeddingModelOptions,\n });\n\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const mergedHeaders = combineHeaders(\n await resolve(this.config.headers),\n headers,\n );\n\n const multimodalContent = googleOptions?.content;\n\n if (\n multimodalContent != null &&\n multimodalContent.length !== values.length\n ) {\n throw new Error(\n `The number of multimodal content entries (${multimodalContent.length}) must match the number of values (${values.length}).`,\n );\n }\n\n // For single embeddings, use the single endpoint\n if (values.length === 1) {\n const valueParts = multimodalContent?.[0];\n const textPart = values[0] ? [{ text: values[0] }] : [];\n const parts =\n valueParts != null\n ? [...textPart, ...valueParts]\n : [{ text: values[0] }];\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:embedContent`,\n headers: mergedHeaders,\n body: {\n model: `models/${this.modelId}`,\n content: {\n parts,\n },\n outputDimensionality: googleOptions?.outputDimensionality,\n taskType: googleOptions?.taskType,\n },\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleGenerativeAISingleEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: [response.embedding.values],\n usage: undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n\n // For multiple values, use the batch endpoint\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:batchEmbedContents`,\n headers: mergedHeaders,\n body: {\n requests: values.map((value, index) => {\n const valueParts = multimodalContent?.[index];\n const textPart = value ? [{ text: value }] : [];\n return {\n model: `models/${this.modelId}`,\n content: {\n role: 'user',\n parts:\n valueParts != null\n ? [...textPart, ...valueParts]\n : [{ text: value }],\n },\n outputDimensionality: googleOptions?.outputDimensionality,\n taskType: googleOptions?.taskType,\n };\n }),\n },\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleGenerativeAITextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.embeddings.map(item => item.values),\n usage: undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst googleGenerativeAITextEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.object({ values: z.array(z.number()) })),\n }),\n ),\n);\n\n// Schema for single embedding response\nconst googleGenerativeAISingleEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embedding: z.object({ values: z.array(z.number()) }),\n }),\n ),\n);\n","import {\n createJsonErrorResponseHandler,\n type InferSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst googleErrorDataSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n code: z.number().nullable(),\n message: z.string(),\n status: z.string(),\n }),\n }),\n ),\n);\n\nexport type GoogleErrorData = InferSchema<typeof googleErrorDataSchema>;\n\nexport const googleFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: googleErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import {\n type InferSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type GoogleGenerativeAIEmbeddingModelId =\n | 'gemini-embedding-001'\n | 'gemini-embedding-2-preview'\n | (string & {});\n\nconst googleEmbeddingContentPartSchema = z.union([\n z.object({ text: z.string() }),\n z.object({\n inlineData: z.object({\n mimeType: z.string(),\n data: z.string(),\n }),\n }),\n]);\n\nexport const googleEmbeddingModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Optional. Optional reduced dimension for the output embedding.\n * If set, excessive values in the output embedding are truncated from the end.\n */\n outputDimensionality: z.number().optional(),\n\n /**\n * Optional. Specifies the task type for generating embeddings.\n * Supported task types:\n * - SEMANTIC_SIMILARITY: Optimized for text similarity.\n * - CLASSIFICATION: Optimized for text classification.\n * - CLUSTERING: Optimized for clustering texts based on similarity.\n * - RETRIEVAL_DOCUMENT: Optimized for document retrieval.\n * - RETRIEVAL_QUERY: Optimized for query-based retrieval.\n * - QUESTION_ANSWERING: Optimized for answering questions.\n * - FACT_VERIFICATION: Optimized for verifying factual information.\n * - CODE_RETRIEVAL_QUERY: Optimized for retrieving code blocks based on natural language queries.\n */\n taskType: z\n .enum([\n 'SEMANTIC_SIMILARITY',\n 'CLASSIFICATION',\n 'CLUSTERING',\n 'RETRIEVAL_DOCUMENT',\n 'RETRIEVAL_QUERY',\n 'QUESTION_ANSWERING',\n 'FACT_VERIFICATION',\n 'CODE_RETRIEVAL_QUERY',\n ])\n .optional(),\n\n /**\n * Optional. Per-value multimodal content parts for embedding non-text\n * content (images, video, PDF, audio). Each entry corresponds to the\n * embedding value at the same index and its parts are merged with the\n * text value in the request. Use `null` for entries that are text-only.\n *\n * The array length must match the number of values being embedded. In\n * the case of a single embedding, the array length must be 1.\n */\n content: z\n .array(z.array(googleEmbeddingContentPartSchema).min(1).nullable())\n .optional(),\n }),\n ),\n);\n\nexport type GoogleEmbeddingModelOptions = InferSchema<\n typeof googleEmbeddingModelOptions\n>;\n","import {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4Source,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n JSONObject,\n SharedV4ProviderMetadata,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n FetchFunction,\n generateId,\n InferSchema,\n isCustomReasoning,\n lazySchema,\n mapReasoningToProviderBudget,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n ParseResult,\n postJsonToApi,\n Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n convertGoogleGenerativeAIUsage,\n GoogleGenerativeAIUsageMetadata,\n} from './convert-google-generative-ai-usage';\nimport { convertJSONSchemaToOpenAPISchema } from './convert-json-schema-to-openapi-schema';\nimport { convertToGoogleGenerativeAIMessages } from './convert-to-google-generative-ai-messages';\nimport { getModelPath } from './get-model-path';\nimport { googleFailedResponseHandler } from './google-error';\nimport {\n GoogleGenerativeAIModelId,\n googleLanguageModelOptions,\n} from './google-generative-ai-options';\nimport {\n GoogleGenerativeAIContentPart,\n GoogleGenerativeAIProviderMetadata,\n} from './google-generative-ai-prompt';\nimport { prepareTools } from './google-prepare-tools';\nimport { GoogleJSONAccumulator, PartialArg } from './google-json-accumulator';\nimport { mapGoogleGenerativeAIFinishReason } from './map-google-generative-ai-finish-reason';\n\ntype GoogleGenerativeAIConfig = {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId: () => string;\n\n /**\n * The supported URLs for the model.\n */\n supportedUrls?: () => LanguageModelV4['supportedUrls'];\n};\n\nexport class GoogleGenerativeAILanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: GoogleGenerativeAIModelId;\n\n private readonly config: GoogleGenerativeAIConfig;\n private readonly generateId: () => string;\n\n constructor(\n modelId: GoogleGenerativeAIModelId,\n config: GoogleGenerativeAIConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n this.generateId = config.generateId ?? generateId;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportedUrls() {\n return this.config.supportedUrls?.() ?? {};\n }\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n tools,\n toolChoice,\n reasoning,\n providerOptions,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const providerOptionsName = this.config.provider.includes('vertex')\n ? 'vertex'\n : 'google';\n let googleOptions = await parseProviderOptions({\n provider: providerOptionsName,\n providerOptions,\n schema: googleLanguageModelOptions,\n });\n\n if (googleOptions == null && providerOptionsName !== 'google') {\n googleOptions = await parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleLanguageModelOptions,\n });\n }\n\n // Add warning if Vertex rag tools are used with a non-Vertex Google provider\n const isVertexProvider = this.config.provider.startsWith('google.vertex.');\n\n if (\n tools?.some(\n tool =>\n tool.type === 'provider' && tool.id === 'google.vertex_rag_store',\n ) &&\n !isVertexProvider\n ) {\n warnings.push({\n type: 'other',\n message:\n \"The 'vertex_rag_store' tool is only supported with the Google Vertex provider \" +\n 'and might not be supported or could behave unexpectedly with the current Google provider ' +\n `(${this.config.provider}).`,\n });\n }\n\n if (googleOptions?.streamFunctionCallArguments && !isVertexProvider) {\n warnings.push({\n type: 'other',\n message:\n \"'streamFunctionCallArguments' is only supported on the Vertex AI API \" +\n 'and will be ignored with the current Google provider ' +\n `(${this.config.provider}). See https://docs.cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling#streaming-fc`,\n });\n }\n\n const isGemmaModel = this.modelId.toLowerCase().startsWith('gemma-');\n const supportsFunctionResponseParts = this.modelId.startsWith('gemini-3');\n\n const { contents, systemInstruction } = convertToGoogleGenerativeAIMessages(\n prompt,\n {\n isGemmaModel,\n providerOptionsName,\n supportsFunctionResponseParts,\n },\n );\n\n const {\n tools: googleTools,\n toolConfig: googleToolConfig,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n modelId: this.modelId,\n });\n\n const resolvedThinking = resolveThinkingConfig({\n reasoning,\n modelId: this.modelId,\n warnings,\n });\n const thinkingConfig =\n googleOptions?.thinkingConfig || resolvedThinking\n ? { ...resolvedThinking, ...googleOptions?.thinkingConfig }\n : undefined;\n\n const streamFunctionCallArguments = isVertexProvider\n ? (googleOptions?.streamFunctionCallArguments ?? true)\n : undefined;\n\n const toolConfig =\n googleToolConfig ||\n streamFunctionCallArguments ||\n googleOptions?.retrievalConfig\n ? {\n ...googleToolConfig,\n ...(streamFunctionCallArguments && {\n functionCallingConfig: {\n ...googleToolConfig?.functionCallingConfig,\n streamFunctionCallArguments: true as const,\n },\n }),\n ...(googleOptions?.retrievalConfig && {\n retrievalConfig: googleOptions.retrievalConfig,\n }),\n }\n : undefined;\n\n return {\n args: {\n generationConfig: {\n // standardized settings:\n maxOutputTokens,\n temperature,\n topK,\n topP,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n seed,\n\n // response format:\n responseMimeType:\n responseFormat?.type === 'json' ? 'application/json' : undefined,\n responseSchema:\n responseFormat?.type === 'json' &&\n responseFormat.schema != null &&\n // Google GenAI does not support all OpenAPI Schema features,\n // so this is needed as an escape hatch:\n // TODO convert into provider option\n (googleOptions?.structuredOutputs ?? true)\n ? convertJSONSchemaToOpenAPISchema(responseFormat.schema)\n : undefined,\n ...(googleOptions?.audioTimestamp && {\n audioTimestamp: googleOptions.audioTimestamp,\n }),\n\n // provider options:\n responseModalities: googleOptions?.responseModalities,\n thinkingConfig,\n ...(googleOptions?.mediaResolution && {\n mediaResolution: googleOptions.mediaResolution,\n }),\n ...(googleOptions?.imageConfig && {\n imageConfig: googleOptions.imageConfig,\n }),\n },\n contents,\n systemInstruction: isGemmaModel ? undefined : systemInstruction,\n safetySettings: googleOptions?.safetySettings,\n tools: googleTools,\n toolConfig,\n cachedContent: googleOptions?.cachedContent,\n labels: googleOptions?.labels,\n serviceTier: googleOptions?.serviceTier,\n },\n warnings: [...warnings, ...toolWarnings],\n providerOptionsName,\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings, providerOptionsName } = await this.getArgs(options);\n\n const mergedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/${getModelPath(\n this.modelId,\n )}:generateContent`,\n headers: mergedHeaders,\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(responseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const candidate = response.candidates[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // map ordered parts to content:\n const parts = candidate.content?.parts ?? [];\n\n const usageMetadata = response.usageMetadata;\n\n // Associates a code execution result with its preceding call.\n let lastCodeExecutionToolCallId: string | undefined;\n // Associates a server-side tool response with its preceding call (tool combination).\n let lastServerToolCallId: string | undefined;\n\n // Build content array from all parts\n for (const part of parts) {\n if ('executableCode' in part && part.executableCode?.code) {\n const toolCallId = this.config.generateId();\n lastCodeExecutionToolCallId = toolCallId;\n\n content.push({\n type: 'tool-call',\n toolCallId,\n toolName: 'code_execution',\n input: JSON.stringify(part.executableCode),\n providerExecuted: true,\n });\n } else if ('codeExecutionResult' in part && part.codeExecutionResult) {\n content.push({\n type: 'tool-result',\n // Assumes a result directly follows its corresponding call part.\n toolCallId: lastCodeExecutionToolCallId!,\n toolName: 'code_execution',\n result: {\n outcome: part.codeExecutionResult.outcome,\n output: part.codeExecutionResult.output ?? '',\n },\n });\n // Clear the ID after use to avoid accidental reuse.\n lastCodeExecutionToolCallId = undefined;\n } else if ('text' in part && part.text != null) {\n const thoughtSignatureMetadata = part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n\n if (part.text.length === 0) {\n if (thoughtSignatureMetadata != null && content.length > 0) {\n const lastContent = content[content.length - 1];\n lastContent.providerMetadata = thoughtSignatureMetadata;\n }\n } else {\n content.push({\n type: part.thought === true ? 'reasoning' : 'text',\n text: part.text,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n } else if (\n 'functionCall' in part &&\n part.functionCall.name != null &&\n part.functionCall.args != null\n ) {\n content.push({\n type: 'tool-call' as const,\n toolCallId: this.config.generateId(),\n toolName: part.functionCall.name,\n input: JSON.stringify(part.functionCall.args),\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined,\n });\n } else if ('inlineData' in part) {\n const hasThought = part.thought === true;\n const hasThoughtSignature = !!part.thoughtSignature;\n content.push({\n type: hasThought ? 'reasoning-file' : 'file',\n data: part.inlineData.data,\n mediaType: part.inlineData.mimeType,\n providerMetadata: hasThoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined,\n });\n } else if ('toolCall' in part && part.toolCall) {\n const toolCallId = part.toolCall.id ?? this.config.generateId();\n lastServerToolCallId = toolCallId;\n content.push({\n type: 'tool-call',\n toolCallId,\n toolName: `server:${part.toolCall.toolType}`,\n input: JSON.stringify(part.toolCall.args ?? {}),\n providerExecuted: true,\n dynamic: true,\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n serverToolCallId: toolCallId,\n serverToolType: part.toolCall.toolType,\n },\n }\n : {\n [providerOptionsName]: {\n serverToolCallId: toolCallId,\n serverToolType: part.toolCall.toolType,\n },\n },\n });\n } else if ('toolResponse' in part && part.toolResponse) {\n const responseToolCallId =\n lastServerToolCallId ??\n part.toolResponse.id ??\n this.config.generateId();\n content.push({\n type: 'tool-result',\n toolCallId: responseToolCallId,\n toolName: `server:${part.toolResponse.toolType}`,\n result: (part.toolResponse.response ?? {}) as JSONObject,\n providerMetadata: part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n serverToolCallId: responseToolCallId,\n serverToolType: part.toolResponse.toolType,\n },\n }\n : {\n [providerOptionsName]: {\n serverToolCallId: responseToolCallId,\n serverToolType: part.toolResponse.toolType,\n },\n },\n });\n lastServerToolCallId = undefined;\n }\n }\n\n const sources =\n extractSources({\n groundingMetadata: candidate.groundingMetadata,\n generateId: this.config.generateId,\n }) ?? [];\n for (const source of sources) {\n content.push(source);\n }\n\n return {\n content,\n finishReason: {\n unified: mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n // Only count client-executed tool calls for finish reason determination.\n hasToolCalls: content.some(\n part => part.type === 'tool-call' && !part.providerExecuted,\n ),\n }),\n raw: candidate.finishReason ?? undefined,\n },\n usage: convertGoogleGenerativeAIUsage(usageMetadata),\n warnings,\n providerMetadata: {\n [providerOptionsName]: {\n promptFeedback: response.promptFeedback ?? null,\n groundingMetadata: candidate.groundingMetadata ?? null,\n urlContextMetadata: candidate.urlContextMetadata ?? null,\n safetyRatings: candidate.safetyRatings ?? null,\n usageMetadata: usageMetadata ?? null,\n finishMessage: candidate.finishMessage ?? null,\n serviceTier: response.serviceTier ?? null,\n } satisfies GoogleGenerativeAIProviderMetadata,\n },\n request: { body: args },\n response: {\n // TODO timestamp, model id, id\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings, providerOptionsName } = await this.getArgs(options);\n\n const headers = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/${getModelPath(\n this.modelId,\n )}:streamGenerateContent?alt=sse`,\n headers,\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(chunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: GoogleGenerativeAIUsageMetadata | undefined = undefined;\n let providerMetadata: SharedV4ProviderMetadata | undefined = undefined;\n let lastGroundingMetadata: GroundingMetadataSchema | null = null;\n let lastUrlContextMetadata: UrlContextMetadataSchema | null = null;\n let serviceTier: string | null = null;\n\n const generateId = this.config.generateId;\n let hasToolCalls = false;\n\n // Track active blocks to group consecutive parts of same type\n let currentTextBlockId: string | null = null;\n let currentReasoningBlockId: string | null = null;\n let blockCounter = 0;\n\n // Track emitted sources to prevent duplicates\n const emittedSourceUrls = new Set<string>();\n // Associates a code execution result with its preceding call.\n let lastCodeExecutionToolCallId: string | undefined;\n // Associates a server-side tool response with its preceding call (tool combination).\n let lastServerToolCallId: string | undefined;\n\n const activeStreamingToolCalls: Array<{\n toolCallId: string;\n toolName: string;\n accumulator: GoogleJSONAccumulator;\n providerMetadata?: SharedV4ProviderMetadata;\n }> = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<ChunkSchema>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n const usageMetadata = value.usageMetadata;\n\n if (usageMetadata != null) {\n usage = usageMetadata;\n }\n\n if (value.serviceTier != null) {\n serviceTier = value.serviceTier;\n }\n\n const candidate = value.candidates?.[0];\n\n // sometimes the API returns an empty candidates array\n if (candidate == null) {\n return;\n }\n\n const content = candidate.content;\n\n if (candidate.groundingMetadata != null) {\n lastGroundingMetadata = candidate.groundingMetadata;\n }\n if (candidate.urlContextMetadata != null) {\n lastUrlContextMetadata = candidate.urlContextMetadata;\n }\n\n const sources = extractSources({\n groundingMetadata: candidate.groundingMetadata,\n generateId,\n });\n if (sources != null) {\n for (const source of sources) {\n if (\n source.sourceType === 'url' &&\n !emittedSourceUrls.has(source.url)\n ) {\n emittedSourceUrls.add(source.url);\n controller.enqueue(source);\n }\n }\n }\n\n // Process tool call's parts before determining finishReason to ensure hasToolCalls is properly set\n if (content != null) {\n // Process all parts in a single loop to preserve original order\n const parts = content.parts ?? [];\n for (const part of parts) {\n if ('executableCode' in part && part.executableCode?.code) {\n const toolCallId = generateId();\n lastCodeExecutionToolCallId = toolCallId;\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName: 'code_execution',\n input: JSON.stringify(part.executableCode),\n providerExecuted: true,\n });\n } else if (\n 'codeExecutionResult' in part &&\n part.codeExecutionResult\n ) {\n // Assumes a result directly follows its corresponding call part.\n const toolCallId = lastCodeExecutionToolCallId;\n\n if (toolCallId) {\n controller.enqueue({\n type: 'tool-result',\n toolCallId,\n toolName: 'code_execution',\n result: {\n outcome: part.codeExecutionResult.outcome,\n output: part.codeExecutionResult.output ?? '',\n },\n });\n // Clear the ID after use.\n lastCodeExecutionToolCallId = undefined;\n }\n } else if ('text' in part && part.text != null) {\n const thoughtSignatureMetadata = part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n\n if (part.text.length === 0) {\n if (\n thoughtSignatureMetadata != null &&\n currentTextBlockId !== null\n ) {\n controller.enqueue({\n type: 'text-delta',\n id: currentTextBlockId,\n delta: '',\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n } else if (part.thought === true) {\n // End any active text block before starting reasoning\n if (currentTextBlockId !== null) {\n controller.enqueue({\n type: 'text-end',\n id: currentTextBlockId,\n });\n currentTextBlockId = null;\n }\n\n // Start new reasoning block if not already active\n if (currentReasoningBlockId === null) {\n currentReasoningBlockId = String(blockCounter++);\n controller.enqueue({\n type: 'reasoning-start',\n id: currentReasoningBlockId,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: currentReasoningBlockId,\n delta: part.text,\n providerMetadata: thoughtSignatureMetadata,\n });\n } else {\n if (currentReasoningBlockId !== null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: currentReasoningBlockId,\n });\n currentReasoningBlockId = null;\n }\n\n if (currentTextBlockId === null) {\n currentTextBlockId = String(blockCounter++);\n controller.enqueue({\n type: 'text-start',\n id: currentTextBlockId,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: currentTextBlockId,\n delta: part.text,\n providerMetadata: thoughtSignatureMetadata,\n });\n }\n } else if ('inlineData' in part) {\n // End any active text or reasoning block before starting file output.\n // Relevant for multimodal output models.\n if (currentTextBlockId !== null) {\n controller.enqueue({\n type: 'text-end',\n id: currentTextBlockId,\n });\n currentTextBlockId = null;\n }\n if (currentReasoningBlockId !== null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: currentReasoningBlockId,\n });\n currentReasoningBlockId = null;\n }\n\n const hasThought = part.thought === true;\n const hasThoughtSignature = !!part.thoughtSignature;\n const fileMeta = hasThoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n controller.enqueue({\n type: hasThought ? 'reasoning-file' : 'file',\n mediaType: part.inlineData.mimeType,\n data: part.inlineData.data,\n providerMetadata: fileMeta,\n });\n } else if ('toolCall' in part && part.toolCall) {\n const toolCallId = part.toolCall.id ?? generateId();\n lastServerToolCallId = toolCallId;\n const serverMeta = {\n [providerOptionsName]: {\n ...(part.thoughtSignature\n ? { thoughtSignature: part.thoughtSignature }\n : {}),\n serverToolCallId: toolCallId,\n serverToolType: part.toolCall.toolType,\n },\n };\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName: `server:${part.toolCall.toolType}`,\n input: JSON.stringify(part.toolCall.args ?? {}),\n providerExecuted: true,\n dynamic: true,\n providerMetadata: serverMeta,\n });\n } else if ('toolResponse' in part && part.toolResponse) {\n const responseToolCallId =\n lastServerToolCallId ??\n part.toolResponse.id ??\n generateId();\n const serverMeta = {\n [providerOptionsName]: {\n ...(part.thoughtSignature\n ? { thoughtSignature: part.thoughtSignature }\n : {}),\n serverToolCallId: responseToolCallId,\n serverToolType: part.toolResponse.toolType,\n },\n };\n\n controller.enqueue({\n type: 'tool-result',\n toolCallId: responseToolCallId,\n toolName: `server:${part.toolResponse.toolType}`,\n result: (part.toolResponse.response ?? {}) as JSONObject,\n providerMetadata: serverMeta,\n });\n lastServerToolCallId = undefined;\n }\n }\n\n // Handle streaming and complete function calls\n for (const part of parts) {\n if (!('functionCall' in part)) continue;\n\n const providerMeta = part.thoughtSignature\n ? {\n [providerOptionsName]: {\n thoughtSignature: part.thoughtSignature,\n },\n }\n : undefined;\n\n const isStreamingChunk =\n part.functionCall.partialArgs != null ||\n (part.functionCall.name != null &&\n part.functionCall.willContinue === true);\n const isTerminalChunk =\n part.functionCall.name == null &&\n part.functionCall.args == null &&\n part.functionCall.partialArgs == null &&\n part.functionCall.willContinue == null;\n const isCompleteCall =\n part.functionCall.name != null &&\n part.functionCall.args != null &&\n part.functionCall.partialArgs == null;\n\n if (isStreamingChunk) {\n if (\n part.functionCall.name != null &&\n part.functionCall.willContinue === true\n ) {\n const toolCallId = generateId();\n const accumulator = new GoogleJSONAccumulator();\n activeStreamingToolCalls.push({\n toolCallId,\n toolName: part.functionCall.name,\n accumulator,\n providerMetadata: providerMeta,\n });\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallId,\n toolName: part.functionCall.name,\n providerMetadata: providerMeta,\n });\n\n if (part.functionCall.partialArgs != null) {\n const { textDelta } = accumulator.processPartialArgs(\n part.functionCall.partialArgs as PartialArg[],\n );\n if (textDelta.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCallId,\n delta: textDelta,\n providerMetadata: providerMeta,\n });\n }\n }\n } else if (\n part.functionCall.partialArgs != null &&\n activeStreamingToolCalls.length > 0\n ) {\n const active =\n activeStreamingToolCalls[\n activeStreamingToolCalls.length - 1\n ];\n const { textDelta } = active.accumulator.processPartialArgs(\n part.functionCall.partialArgs as PartialArg[],\n );\n if (textDelta.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: active.toolCallId,\n delta: textDelta,\n providerMetadata: providerMeta,\n });\n }\n }\n } else if (\n isTerminalChunk &&\n activeStreamingToolCalls.length > 0\n ) {\n const active = activeStreamingToolCalls.pop()!;\n const { finalJSON, closingDelta } =\n active.accumulator.finalize();\n\n if (closingDelta.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: active.toolCallId,\n delta: closingDelta,\n providerMetadata: active.providerMetadata,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-end',\n id: active.toolCallId,\n providerMetadata: active.providerMetadata,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: active.toolCallId,\n toolName: active.toolName,\n input: finalJSON,\n providerMetadata: active.providerMetadata,\n });\n\n hasToolCalls = true;\n } else if (isCompleteCall) {\n const toolCallId = generateId();\n const toolName = part.functionCall.name!;\n const args =\n typeof part.functionCall.args === 'string'\n ? part.functionCall.args\n : JSON.stringify(part.functionCall.args ?? {});\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallId,\n toolName,\n providerMetadata: providerMeta,\n });\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCallId,\n delta: args,\n providerMetadata: providerMeta,\n });\n\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCallId,\n providerMetadata: providerMeta,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input: args,\n providerMetadata: providerMeta,\n });\n\n hasToolCalls = true;\n }\n }\n }\n\n if (candidate.finishReason != null) {\n finishReason = {\n unified: mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls,\n }),\n raw: candidate.finishReason,\n };\n\n providerMetadata = {\n [providerOptionsName]: {\n promptFeedback: value.promptFeedback ?? null,\n groundingMetadata: lastGroundingMetadata,\n urlContextMetadata: lastUrlContextMetadata,\n safetyRatings: candidate.safetyRatings ?? null,\n usageMetadata: usageMetadata ?? null,\n finishMessage: candidate.finishMessage ?? null,\n serviceTier,\n } satisfies GoogleGenerativeAIProviderMetadata,\n };\n }\n },\n\n flush(controller) {\n if (currentTextBlockId !== null) {\n controller.enqueue({\n type: 'text-end',\n id: currentTextBlockId,\n });\n }\n if (currentReasoningBlockId !== null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: currentReasoningBlockId,\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertGoogleGenerativeAIUsage(usage),\n providerMetadata,\n });\n },\n }),\n ),\n response: { headers: responseHeaders },\n request: { body: args },\n };\n }\n}\n\nfunction isGemini3Model(modelId: string): boolean {\n return /gemini-3[\\.\\-]/i.test(modelId) || /gemini-3$/i.test(modelId);\n}\n\nfunction getMaxOutputTokensForGemini25Model(): number {\n return 65536;\n}\n\nfunction getMaxThinkingTokensForGemini25Model(modelId: string): number {\n const id = modelId.toLowerCase();\n if (id.includes('2.5-pro') || id.includes('gemini-3-pro-image')) {\n return 32768;\n }\n return 24576;\n}\n\ntype GoogleThinkingConfig = NonNullable<\n InferSchema<typeof googleLanguageModelOptions>['thinkingConfig']\n>;\n\nfunction resolveThinkingConfig({\n reasoning,\n modelId,\n warnings,\n}: {\n reasoning: LanguageModelV4CallOptions['reasoning'];\n modelId: string;\n warnings: SharedV4Warning[];\n}): Omit<GoogleThinkingConfig, 'includeThoughts'> | undefined {\n if (!isCustomReasoning(reasoning)) {\n return undefined;\n }\n\n if (isGemini3Model(modelId) && !modelId.includes('gemini-3-pro-image')) {\n return resolveGemini3ThinkingConfig({ reasoning, warnings });\n }\n\n return resolveGemini25ThinkingConfig({ reasoning, modelId, warnings });\n}\n\nfunction resolveGemini3ThinkingConfig({\n reasoning,\n warnings,\n}: {\n reasoning: Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'provider-default' | undefined\n >;\n warnings: SharedV4Warning[];\n}): Pick<GoogleThinkingConfig, 'thinkingLevel'> | undefined {\n if (reasoning === 'none') {\n // It's not possible to fully disable thinking with Gemini 3.\n return { thinkingLevel: 'minimal' };\n }\n\n const thinkingLevel = mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'minimal',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'high',\n },\n warnings,\n });\n\n if (thinkingLevel == null) {\n return undefined;\n }\n\n return { thinkingLevel };\n}\n\nfunction resolveGemini25ThinkingConfig({\n reasoning,\n modelId,\n warnings,\n}: {\n reasoning: Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'provider-default' | undefined\n >;\n modelId: string;\n warnings: SharedV4Warning[];\n}): Pick<GoogleThinkingConfig, 'thinkingBudget'> | undefined {\n if (reasoning === 'none') {\n return { thinkingBudget: 0 };\n }\n\n const thinkingBudget = mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens: getMaxOutputTokensForGemini25Model(),\n maxReasoningBudget: getMaxThinkingTokensForGemini25Model(modelId),\n minReasoningBudget: 0,\n warnings,\n });\n if (thinkingBudget == null) {\n return undefined;\n }\n return { thinkingBudget };\n}\n\nfunction extractSources({\n groundingMetadata,\n generateId,\n}: {\n groundingMetadata: GroundingMetadataSchema | undefined | null;\n generateId: () => string;\n}): undefined | LanguageModelV4Source[] {\n if (!groundingMetadata?.groundingChunks) {\n return undefined;\n }\n\n const sources: LanguageModelV4Source[] = [];\n\n for (const chunk of groundingMetadata.groundingChunks) {\n if (chunk.web != null) {\n // Handle web chunks as URL sources\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: chunk.web.uri,\n title: chunk.web.title ?? undefined,\n });\n } else if (chunk.image != null) {\n // Handle image chunks as image sources\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n // Google requires attribution to the source URI, not the actual image URI.\n // TODO: add another type in v7 to allow both the image and source URL to be included separately\n url: chunk.image.sourceUri,\n title: chunk.image.title ?? undefined,\n });\n } else if (chunk.retrievedContext != null) {\n // Handle retrievedContext chunks from RAG operations\n const uri = chunk.retrievedContext.uri;\n const fileSearchStore = chunk.retrievedContext.fileSearchStore;\n\n if (uri && (uri.startsWith('http://') || uri.startsWith('https://'))) {\n // Old format: Google Search with HTTP/HTTPS URL\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: uri,\n title: chunk.retrievedContext.title ?? undefined,\n });\n } else if (uri) {\n // Old format: Document with file path (gs://, etc.)\n const title = chunk.retrievedContext.title ?? 'Unknown Document';\n let mediaType = 'application/octet-stream';\n let filename: string | undefined = undefined;\n\n if (uri.endsWith('.pdf')) {\n mediaType = 'application/pdf';\n filename = uri.split('/').pop();\n } else if (uri.endsWith('.txt')) {\n mediaType = 'text/plain';\n filename = uri.split('/').pop();\n } else if (uri.endsWith('.docx')) {\n mediaType =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n filename = uri.split('/').pop();\n } else if (uri.endsWith('.doc')) {\n mediaType = 'application/msword';\n filename = uri.split('/').pop();\n } else if (uri.match(/\\.(md|markdown)$/)) {\n mediaType = 'text/markdown';\n filename = uri.split('/').pop();\n } else {\n filename = uri.split('/').pop();\n }\n\n sources.push({\n type: 'source',\n sourceType: 'document',\n id: generateId(),\n mediaType,\n title,\n filename,\n });\n } else if (fileSearchStore) {\n // New format: File Search with fileSearchStore (no uri)\n const title = chunk.retrievedContext.title ?? 'Unknown Document';\n sources.push({\n type: 'source',\n sourceType: 'document',\n id: generateId(),\n mediaType: 'application/octet-stream',\n title,\n filename: fileSearchStore.split('/').pop(),\n });\n }\n } else if (chunk.maps != null) {\n if (chunk.maps.uri) {\n sources.push({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: chunk.maps.uri,\n title: chunk.maps.title ?? undefined,\n });\n }\n }\n }\n\n return sources.length > 0 ? sources : undefined;\n}\n\nexport const getGroundingMetadataSchema = () =>\n z.object({\n webSearchQueries: z.array(z.string()).nullish(),\n imageSearchQueries: z.array(z.string()).nullish(),\n retrievalQueries: z.array(z.string()).nullish(),\n searchEntryPoint: z.object({ renderedContent: z.string() }).nullish(),\n groundingChunks: z\n .array(\n z.object({\n web: z\n .object({ uri: z.string(), title: z.string().nullish() })\n .nullish(),\n image: z\n .object({\n sourceUri: z.string(),\n imageUri: z.string(),\n title: z.string().nullish(),\n domain: z.string().nullish(),\n })\n .nullish(),\n retrievedContext: z\n .object({\n uri: z.string().nullish(),\n title: z.string().nullish(),\n text: z.string().nullish(),\n fileSearchStore: z.string().nullish(),\n })\n .nullish(),\n maps: z\n .object({\n uri: z.string().nullish(),\n title: z.string().nullish(),\n text: z.string().nullish(),\n placeId: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n groundingSupports: z\n .array(\n z.object({\n segment: z\n .object({\n startIndex: z.number().nullish(),\n endIndex: z.number().nullish(),\n text: z.string().nullish(),\n })\n .nullish(),\n segment_text: z.string().nullish(),\n groundingChunkIndices: z.array(z.number()).nullish(),\n supportChunkIndices: z.array(z.number()).nullish(),\n confidenceScores: z.array(z.number()).nullish(),\n confidenceScore: z.array(z.number()).nullish(),\n }),\n )\n .nullish(),\n retrievalMetadata: z\n .union([\n z.object({\n webDynamicRetrievalScore: z.number(),\n }),\n z.object({}),\n ])\n .nullish(),\n });\n\nconst partialArgSchema = z.object({\n jsonPath: z.string(),\n stringValue: z.string().nullish(),\n numberValue: z.number().nullish(),\n boolValue: z.boolean().nullish(),\n nullValue: z.unknown().nullish(),\n willContinue: z.boolean().nullish(),\n});\n\nconst getContentSchema = () =>\n z.object({\n parts: z\n .array(\n z.union([\n // note: order matters since text can be fully empty\n z.object({\n functionCall: z.object({\n name: z.string().nullish(),\n args: z.unknown().nullish(),\n partialArgs: z.array(partialArgSchema).nullish(),\n willContinue: z.boolean().nullish(),\n }),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n inlineData: z.object({\n mimeType: z.string(),\n data: z.string(),\n }),\n thought: z.boolean().nullish(),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n toolCall: z.object({\n toolType: z.string(),\n args: z.unknown().nullish(),\n id: z.string(),\n }),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n toolResponse: z.object({\n toolType: z.string(),\n response: z.unknown().nullish(),\n id: z.string(),\n }),\n thoughtSignature: z.string().nullish(),\n }),\n z.object({\n executableCode: z\n .object({\n language: z.string(),\n code: z.string(),\n })\n .nullish(),\n codeExecutionResult: z\n .object({\n outcome: z.string(),\n output: z.string().nullish(),\n })\n .nullish(),\n text: z.string().nullish(),\n thought: z.boolean().nullish(),\n thoughtSignature: z.string().nullish(),\n }),\n ]),\n )\n .nullish(),\n });\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/configure-safety-filters\nconst getSafetyRatingSchema = () =>\n z.object({\n category: z.string().nullish(),\n probability: z.string().nullish(),\n probabilityScore: z.number().nullish(),\n severity: z.string().nullish(),\n severityScore: z.number().nullish(),\n blocked: z.boolean().nullish(),\n });\n\nconst tokenDetailsSchema = z\n .array(\n z.object({\n modality: z.string(),\n tokenCount: z.number(),\n }),\n )\n .nullish();\n\nconst usageSchema = z.object({\n cachedContentTokenCount: z.number().nullish(),\n thoughtsTokenCount: z.number().nullish(),\n promptTokenCount: z.number().nullish(),\n candidatesTokenCount: z.number().nullish(),\n totalTokenCount: z.number().nullish(),\n // https://cloud.google.com/vertex-ai/generative-ai/docs/reference/rest/v1/GenerateContentResponse#TrafficType\n trafficType: z.string().nullish(),\n // https://ai.google.dev/api/generate-content#Modality\n promptTokensDetails: tokenDetailsSchema,\n candidatesTokensDetails: tokenDetailsSchema,\n});\n\n// https://ai.google.dev/api/generate-content#UrlRetrievalMetadata\nexport const getUrlContextMetadataSchema = () =>\n z.object({\n urlMetadata: z\n .array(\n z.object({\n retrievedUrl: z.string(),\n urlRetrievalStatus: z.string(),\n }),\n )\n .nullish(),\n });\n\nconst responseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n candidates: z.array(\n z.object({\n content: getContentSchema().nullish().or(z.object({}).strict()),\n finishReason: z.string().nullish(),\n finishMessage: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n groundingMetadata: getGroundingMetadataSchema().nullish(),\n urlContextMetadata: getUrlContextMetadataSchema().nullish(),\n }),\n ),\n usageMetadata: usageSchema.nullish(),\n promptFeedback: z\n .object({\n blockReason: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n })\n .nullish(),\n serviceTier: z.string().nullish(),\n }),\n ),\n);\n\ntype ContentSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['content']\n>;\nexport type GroundingMetadataSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']\n>;\n\ntype GroundingChunkSchema = NonNullable<\n GroundingMetadataSchema['groundingChunks']\n>[number];\n\nexport type UrlContextMetadataSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['urlContextMetadata']\n>;\n\nexport type SafetyRatingSchema = NonNullable<\n InferSchema<typeof responseSchema>['candidates'][number]['safetyRatings']\n>[number];\n\nexport type PromptFeedbackSchema = NonNullable<\n InferSchema<typeof responseSchema>['promptFeedback']\n>;\n\nexport type UsageMetadataSchema = NonNullable<\n InferSchema<typeof responseSchema>['usageMetadata']\n>;\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst chunkSchema = lazySchema(() =>\n zodSchema(\n z.object({\n candidates: z\n .array(\n z.object({\n content: getContentSchema().nullish(),\n finishReason: z.string().nullish(),\n finishMessage: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n groundingMetadata: getGroundingMetadataSchema().nullish(),\n urlContextMetadata: getUrlContextMetadataSchema().nullish(),\n }),\n )\n .nullish(),\n usageMetadata: usageSchema.nullish(),\n promptFeedback: z\n .object({\n blockReason: z.string().nullish(),\n safetyRatings: z.array(getSafetyRatingSchema()).nullish(),\n })\n .nullish(),\n serviceTier: z.string().nullish(),\n }),\n ),\n);\n\ntype ChunkSchema = InferSchema<typeof chunkSchema>;\n","import { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type GoogleGenerativeAITokenDetail = {\n modality: string;\n tokenCount: number;\n};\n\nexport type GoogleGenerativeAIUsageMetadata = {\n promptTokenCount?: number | null;\n candidatesTokenCount?: number | null;\n totalTokenCount?: number | null;\n cachedContentTokenCount?: number | null;\n thoughtsTokenCount?: number | null;\n trafficType?: string | null;\n promptTokensDetails?: GoogleGenerativeAITokenDetail[] | null;\n candidatesTokensDetails?: GoogleGenerativeAITokenDetail[] | null;\n};\n\nexport function convertGoogleGenerativeAIUsage(\n usage: GoogleGenerativeAIUsageMetadata | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.promptTokenCount ?? 0;\n const candidatesTokens = usage.candidatesTokenCount ?? 0;\n const cachedContentTokens = usage.cachedContentTokenCount ?? 0;\n const thoughtsTokens = usage.thoughtsTokenCount ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cachedContentTokens,\n cacheRead: cachedContentTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: candidatesTokens + thoughtsTokens,\n text: candidatesTokens,\n reasoning: thoughtsTokens,\n },\n raw: usage,\n };\n}\n","import { JSONSchema7Definition } from '@ai-sdk/provider';\n\n/**\n * Converts JSON Schema 7 to OpenAPI Schema 3.0\n */\nexport function convertJSONSchemaToOpenAPISchema(\n jsonSchema: JSONSchema7Definition | undefined,\n isRoot = true,\n): unknown {\n // Handle empty object schemas: undefined at root, preserved when nested\n if (jsonSchema == null) {\n return undefined;\n }\n\n if (isEmptyObjectSchema(jsonSchema)) {\n if (isRoot) {\n return undefined;\n }\n\n if (typeof jsonSchema === 'object' && jsonSchema.description) {\n return { type: 'object', description: jsonSchema.description };\n }\n return { type: 'object' };\n }\n\n if (typeof jsonSchema === 'boolean') {\n return { type: 'boolean', properties: {} };\n }\n\n const {\n type,\n description,\n required,\n properties,\n items,\n allOf,\n anyOf,\n oneOf,\n format,\n const: constValue,\n minLength,\n enum: enumValues,\n } = jsonSchema;\n\n const result: Record<string, unknown> = {};\n\n if (description) result.description = description;\n if (required) result.required = required;\n if (format) result.format = format;\n\n if (constValue !== undefined) {\n result.enum = [constValue];\n }\n\n // Handle type\n if (type) {\n if (Array.isArray(type)) {\n const hasNull = type.includes('null');\n const nonNullTypes = type.filter(t => t !== 'null');\n\n if (nonNullTypes.length === 0) {\n // Only null type\n result.type = 'null';\n } else {\n // One or more non-null types: always use anyOf\n result.anyOf = nonNullTypes.map(t => ({ type: t }));\n if (hasNull) {\n result.nullable = true;\n }\n }\n } else {\n result.type = type;\n }\n }\n\n // Handle enum\n if (enumValues !== undefined) {\n result.enum = enumValues;\n }\n\n if (properties != null) {\n result.properties = Object.entries(properties).reduce(\n (acc, [key, value]) => {\n acc[key] = convertJSONSchemaToOpenAPISchema(value, false);\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n if (items) {\n result.items = Array.isArray(items)\n ? items.map(item => convertJSONSchemaToOpenAPISchema(item, false))\n : convertJSONSchemaToOpenAPISchema(items, false);\n }\n\n if (allOf) {\n result.allOf = allOf.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n }\n if (anyOf) {\n // Handle cases where anyOf includes a null type\n if (\n anyOf.some(\n schema => typeof schema === 'object' && schema?.type === 'null',\n )\n ) {\n const nonNullSchemas = anyOf.filter(\n schema => !(typeof schema === 'object' && schema?.type === 'null'),\n );\n\n if (nonNullSchemas.length === 1) {\n // If there's only one non-null schema, convert it and make it nullable\n const converted = convertJSONSchemaToOpenAPISchema(\n nonNullSchemas[0],\n false,\n );\n if (typeof converted === 'object') {\n result.nullable = true;\n Object.assign(result, converted);\n }\n } else {\n // If there are multiple non-null schemas, keep them in anyOf\n result.anyOf = nonNullSchemas.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n result.nullable = true;\n }\n } else {\n result.anyOf = anyOf.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n }\n }\n if (oneOf) {\n result.oneOf = oneOf.map(item =>\n convertJSONSchemaToOpenAPISchema(item, false),\n );\n }\n\n if (minLength !== undefined) {\n result.minLength = minLength;\n }\n\n return result;\n}\n\nfunction isEmptyObjectSchema(jsonSchema: JSONSchema7Definition): boolean {\n return (\n jsonSchema != null &&\n typeof jsonSchema === 'object' &&\n jsonSchema.type === 'object' &&\n (jsonSchema.properties == null ||\n Object.keys(jsonSchema.properties).length === 0) &&\n !jsonSchema.additionalProperties\n );\n}\n","import {\n LanguageModelV4Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n isProviderReference,\n resolveProviderReference,\n} from '@ai-sdk/provider-utils';\nimport {\n GoogleGenerativeAIContent,\n GoogleGenerativeAIContentPart,\n GoogleGenerativeAIFunctionResponsePart,\n GoogleGenerativeAIPrompt,\n} from './google-generative-ai-prompt';\n\nconst dataUrlRegex = /^data:([^;,]+);base64,(.+)$/s;\n\nfunction parseBase64DataUrl(\n value: string,\n): { mediaType: string; data: string } | undefined {\n const match = dataUrlRegex.exec(value);\n if (match == null) {\n return undefined;\n }\n\n return {\n mediaType: match[1],\n data: match[2],\n };\n}\n\nfunction convertUrlToolResultPart(\n url: string,\n): GoogleGenerativeAIFunctionResponsePart | undefined {\n // Per https://ai.google.dev/api/caching#FunctionResponsePart, only inline data is supported.\n // https://docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/function-calling#functionresponsepart suggests that this\n // may be different for Vertex, but this needs to be confirmed and further tested for both APIs.\n const parsedDataUrl = parseBase64DataUrl(url);\n if (parsedDataUrl == null) {\n return undefined;\n }\n\n return {\n inlineData: {\n mimeType: parsedDataUrl.mediaType,\n data: parsedDataUrl.data,\n },\n };\n}\n\n/*\n * Appends tool result content parts to the message using the functionResponse\n * format with support for multimodal parts (e.g. inline images/files alongside\n * text). This format is supported by Gemini 3+ models.\n */\nfunction appendToolResultParts(\n parts: GoogleGenerativeAIContentPart[],\n toolName: string,\n outputValue: Array<{\n type: string;\n [key: string]: unknown;\n }>,\n): void {\n const functionResponseParts: GoogleGenerativeAIFunctionResponsePart[] = [];\n const responseTextParts: string[] = [];\n\n for (const contentPart of outputValue) {\n switch (contentPart.type) {\n case 'text': {\n responseTextParts.push(contentPart.text as string);\n break;\n }\n case 'image-data':\n case 'file-data': {\n functionResponseParts.push({\n inlineData: {\n mimeType: contentPart.mediaType as string,\n data: contentPart.data as string,\n },\n });\n break;\n }\n case 'image-url':\n case 'file-url': {\n const functionResponsePart = convertUrlToolResultPart(\n contentPart.url as string,\n );\n\n if (functionResponsePart != null) {\n functionResponseParts.push(functionResponsePart);\n } else {\n responseTextParts.push(JSON.stringify(contentPart));\n }\n break;\n }\n default: {\n responseTextParts.push(JSON.stringify(contentPart));\n break;\n }\n }\n }\n\n parts.push({\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content:\n responseTextParts.length > 0\n ? responseTextParts.join('\\n')\n : 'Tool executed successfully.',\n },\n ...(functionResponseParts.length > 0\n ? { parts: functionResponseParts }\n : {}),\n },\n });\n}\n\n/*\n * Appends tool result content parts using a legacy format for pre-Gemini 3\n * models that do not support multimodal parts within functionResponse. Instead,\n * non-text content like images is sent as separate top-level inlineData parts.\n */\nfunction appendLegacyToolResultParts(\n parts: GoogleGenerativeAIContentPart[],\n toolName: string,\n outputValue: Array<{\n type: string;\n [key: string]: unknown;\n }>,\n): void {\n for (const contentPart of outputValue) {\n switch (contentPart.type) {\n case 'text':\n parts.push({\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content: contentPart.text,\n },\n },\n });\n break;\n case 'image-data':\n parts.push(\n {\n inlineData: {\n mimeType: String(contentPart.mediaType),\n data: String(contentPart.data),\n },\n },\n {\n text: 'Tool executed successfully and returned this image as a response',\n },\n );\n break;\n default:\n parts.push({ text: JSON.stringify(contentPart) });\n break;\n }\n }\n}\n\nexport function convertToGoogleGenerativeAIMessages(\n prompt: LanguageModelV4Prompt,\n options?: {\n isGemmaModel?: boolean;\n providerOptionsName?: string;\n supportsFunctionResponseParts?: boolean;\n },\n): GoogleGenerativeAIPrompt {\n const systemInstructionParts: Array<{ text: string }> = [];\n const contents: Array<GoogleGenerativeAIContent> = [];\n let systemMessagesAllowed = true;\n const isGemmaModel = options?.isGemmaModel ?? false;\n const providerOptionsName = options?.providerOptionsName ?? 'google';\n const supportsFunctionResponseParts =\n options?.supportsFunctionResponseParts ?? true;\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (!systemMessagesAllowed) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'system messages are only supported at the beginning of the conversation',\n });\n }\n\n systemInstructionParts.push({ text: content });\n break;\n }\n\n case 'user': {\n systemMessagesAllowed = false;\n\n const parts: GoogleGenerativeAIContentPart[] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n parts.push({ text: part.text });\n break;\n }\n\n case 'file': {\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n if (part.data instanceof URL) {\n parts.push({\n fileData: {\n mimeType: mediaType,\n fileUri: part.data.toString(),\n },\n });\n } else if (isProviderReference(part.data)) {\n if (providerOptionsName === 'vertex') {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n parts.push({\n fileData: {\n mimeType: mediaType,\n fileUri: resolveProviderReference({\n reference: part.data,\n provider: 'google',\n }),\n },\n });\n } else {\n parts.push({\n inlineData: {\n mimeType: mediaType,\n data: convertToBase64(part.data),\n },\n });\n }\n\n break;\n }\n }\n }\n\n contents.push({ role: 'user', parts });\n break;\n }\n\n case 'assistant': {\n systemMessagesAllowed = false;\n\n contents.push({\n role: 'model',\n parts: content\n .map(part => {\n const providerOpts =\n part.providerOptions?.[providerOptionsName] ??\n (providerOptionsName !== 'google'\n ? part.providerOptions?.google\n : part.providerOptions?.vertex);\n const thoughtSignature =\n providerOpts?.thoughtSignature != null\n ? String(providerOpts.thoughtSignature)\n : undefined;\n\n switch (part.type) {\n case 'text': {\n return part.text.length === 0\n ? undefined\n : {\n text: part.text,\n thoughtSignature,\n };\n }\n\n case 'reasoning': {\n return part.text.length === 0\n ? undefined\n : {\n text: part.text,\n thought: true,\n thoughtSignature,\n };\n }\n\n case 'reasoning-file': {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'File data URLs in assistant messages are not supported',\n });\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: convertToBase64(part.data),\n },\n thought: true,\n thoughtSignature,\n };\n }\n\n case 'file': {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'File data URLs in assistant messages are not supported',\n });\n }\n\n if (isProviderReference(part.data)) {\n if (providerOptionsName === 'vertex') {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n return {\n fileData: {\n mimeType: part.mediaType,\n fileUri: resolveProviderReference({\n reference: part.data,\n provider: 'google',\n }),\n },\n ...(providerOpts?.thought === true\n ? { thought: true }\n : {}),\n thoughtSignature,\n };\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: convertToBase64(part.data),\n },\n ...(providerOpts?.thought === true\n ? { thought: true }\n : {}),\n thoughtSignature,\n };\n }\n\n case 'tool-call': {\n const serverToolCallId =\n providerOpts?.serverToolCallId != null\n ? String(providerOpts.serverToolCallId)\n : undefined;\n const serverToolType =\n providerOpts?.serverToolType != null\n ? String(providerOpts.serverToolType)\n : undefined;\n\n if (serverToolCallId && serverToolType) {\n return {\n toolCall: {\n toolType: serverToolType,\n args:\n typeof part.input === 'string'\n ? JSON.parse(part.input)\n : part.input,\n id: serverToolCallId,\n },\n thoughtSignature,\n };\n }\n\n return {\n functionCall: {\n name: part.toolName,\n args: part.input,\n },\n thoughtSignature,\n };\n }\n\n case 'tool-result': {\n const serverToolCallId =\n providerOpts?.serverToolCallId != null\n ? String(providerOpts.serverToolCallId)\n : undefined;\n const serverToolType =\n providerOpts?.serverToolType != null\n ? String(providerOpts.serverToolType)\n : undefined;\n\n if (serverToolCallId && serverToolType) {\n return {\n toolResponse: {\n toolType: serverToolType,\n response:\n part.output.type === 'json' ? part.output.value : {},\n id: serverToolCallId,\n },\n thoughtSignature,\n };\n }\n\n return undefined;\n }\n }\n })\n .filter(part => part !== undefined),\n });\n\n break;\n }\n\n case 'tool': {\n systemMessagesAllowed = false;\n\n const parts: GoogleGenerativeAIContentPart[] = [];\n\n for (const part of content) {\n if (part.type === 'tool-approval-response') {\n continue;\n }\n\n const partProviderOpts =\n part.providerOptions?.[providerOptionsName] ??\n (providerOptionsName !== 'google'\n ? part.providerOptions?.google\n : part.providerOptions?.vertex);\n const serverToolCallId =\n partProviderOpts?.serverToolCallId != null\n ? String(partProviderOpts.serverToolCallId)\n : undefined;\n const serverToolType =\n partProviderOpts?.serverToolType != null\n ? String(partProviderOpts.serverToolType)\n : undefined;\n\n if (serverToolCallId && serverToolType) {\n const serverThoughtSignature =\n partProviderOpts?.thoughtSignature != null\n ? String(partProviderOpts.thoughtSignature)\n : undefined;\n\n if (contents.length > 0) {\n const lastContent = contents[contents.length - 1];\n if (lastContent.role === 'model') {\n lastContent.parts.push({\n toolResponse: {\n toolType: serverToolType,\n response:\n part.output.type === 'json' ? part.output.value : {},\n id: serverToolCallId,\n },\n thoughtSignature: serverThoughtSignature,\n });\n continue;\n }\n }\n }\n\n const output = part.output;\n\n if (output.type === 'content') {\n if (supportsFunctionResponseParts) {\n appendToolResultParts(parts, part.toolName, output.value);\n } else {\n appendLegacyToolResultParts(parts, part.toolName, output.value);\n }\n } else {\n parts.push({\n functionResponse: {\n name: part.toolName,\n response: {\n name: part.toolName,\n content:\n output.type === 'execution-denied'\n ? (output.reason ?? 'Tool execution denied.')\n : output.value,\n },\n },\n });\n }\n }\n\n contents.push({\n role: 'user',\n parts,\n });\n break;\n }\n }\n }\n\n if (\n isGemmaModel &&\n systemInstructionParts.length > 0 &&\n contents.length > 0 &&\n contents[0].role === 'user'\n ) {\n const systemText = systemInstructionParts\n .map(part => part.text)\n .join('\\n\\n');\n\n contents[0].parts.unshift({ text: systemText + '\\n\\n' });\n }\n\n return {\n systemInstruction:\n systemInstructionParts.length > 0 && !isGemmaModel\n ? { parts: systemInstructionParts }\n : undefined,\n contents,\n };\n}\n","export function getModelPath(modelId: string): string {\n return modelId.includes('/') ? modelId : `models/${modelId}`;\n}\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type GoogleGenerativeAIModelId =\n // Stable models\n // https://ai.google.dev/gemini-api/docs/models/gemini\n | 'gemini-2.0-flash'\n | 'gemini-2.0-flash-001'\n | 'gemini-2.0-flash-lite'\n | 'gemini-2.0-flash-lite-001'\n | 'gemini-2.5-pro'\n | 'gemini-2.5-flash'\n | 'gemini-2.5-flash-image'\n | 'gemini-2.5-flash-lite'\n | 'gemini-2.5-flash-lite-preview-09-2025'\n | 'gemini-2.5-flash-preview-tts'\n | 'gemini-2.5-pro-preview-tts'\n | 'gemini-2.5-flash-native-audio-latest'\n | 'gemini-2.5-flash-native-audio-preview-09-2025'\n | 'gemini-2.5-flash-native-audio-preview-12-2025'\n | 'gemini-2.5-computer-use-preview-10-2025'\n | 'gemini-3-pro-preview'\n | 'gemini-3-pro-image-preview'\n | 'gemini-3-flash-preview'\n | 'gemini-3.1-pro-preview'\n | 'gemini-3.1-pro-preview-customtools'\n | 'gemini-3.1-flash-image-preview'\n | 'gemini-3.1-flash-lite-preview'\n // latest version\n // https://ai.google.dev/gemini-api/docs/models#latest\n | 'gemini-pro-latest'\n | 'gemini-flash-latest'\n | 'gemini-flash-lite-latest'\n | 'deep-research-pro-preview-12-2025'\n | 'nano-banana-pro-preview'\n | 'aqa'\n // Experimental models\n // https://ai.google.dev/gemini-api/docs/models/experimental-models\n | 'gemini-robotics-er-1.5-preview'\n | 'gemma-3-1b-it'\n | 'gemma-3-4b-it'\n | 'gemma-3n-e4b-it'\n | 'gemma-3n-e2b-it'\n | 'gemma-3-12b-it'\n | 'gemma-3-27b-it'\n | (string & {});\n\nexport const googleLanguageModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n responseModalities: z.array(z.enum(['TEXT', 'IMAGE'])).optional(),\n\n thinkingConfig: z\n .object({\n thinkingBudget: z.number().optional(),\n includeThoughts: z.boolean().optional(),\n // https://ai.google.dev/gemini-api/docs/gemini-3?thinking=high#thinking_level\n thinkingLevel: z\n .enum(['minimal', 'low', 'medium', 'high'])\n .optional(),\n })\n .optional(),\n\n /**\n * Optional.\n * The name of the cached content used as context to serve the prediction.\n * Format: cachedContents/{cachedContent}\n */\n cachedContent: z.string().optional(),\n\n /**\n * Optional. Enable structured output. Default is true.\n *\n * This is useful when the JSON Schema contains elements that are\n * not supported by the OpenAPI schema version that\n * Google Generative AI uses. You can use this to disable\n * structured outputs if you need to.\n */\n structuredOutputs: z.boolean().optional(),\n\n /**\n * Optional. A list of unique safety settings for blocking unsafe content.\n */\n safetySettings: z\n .array(\n z.object({\n category: z.enum([\n 'HARM_CATEGORY_UNSPECIFIED',\n 'HARM_CATEGORY_HATE_SPEECH',\n 'HARM_CATEGORY_DANGEROUS_CONTENT',\n 'HARM_CATEGORY_HARASSMENT',\n 'HARM_CATEGORY_SEXUALLY_EXPLICIT',\n 'HARM_CATEGORY_CIVIC_INTEGRITY',\n ]),\n threshold: z.enum([\n 'HARM_BLOCK_THRESHOLD_UNSPECIFIED',\n 'BLOCK_LOW_AND_ABOVE',\n 'BLOCK_MEDIUM_AND_ABOVE',\n 'BLOCK_ONLY_HIGH',\n 'BLOCK_NONE',\n 'OFF',\n ]),\n }),\n )\n .optional(),\n\n threshold: z\n .enum([\n 'HARM_BLOCK_THRESHOLD_UNSPECIFIED',\n 'BLOCK_LOW_AND_ABOVE',\n 'BLOCK_MEDIUM_AND_ABOVE',\n 'BLOCK_ONLY_HIGH',\n 'BLOCK_NONE',\n 'OFF',\n ])\n .optional(),\n\n /**\n * Optional. Enables timestamp understanding for audio-only files.\n *\n * https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/audio-understanding\n */\n audioTimestamp: z.boolean().optional(),\n\n /**\n * Optional. Defines labels used in billing reports. Available on Vertex AI only.\n *\n * https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/add-labels-to-api-calls\n */\n labels: z.record(z.string(), z.string()).optional(),\n\n /**\n * Optional. If specified, the media resolution specified will be used.\n *\n * https://ai.google.dev/api/generate-content#MediaResolution\n */\n mediaResolution: z\n .enum([\n 'MEDIA_RESOLUTION_UNSPECIFIED',\n 'MEDIA_RESOLUTION_LOW',\n 'MEDIA_RESOLUTION_MEDIUM',\n 'MEDIA_RESOLUTION_HIGH',\n ])\n .optional(),\n\n /**\n * Optional. Configures the image generation aspect ratio for Gemini models.\n *\n * https://ai.google.dev/gemini-api/docs/image-generation#aspect_ratios\n */\n imageConfig: z\n .object({\n aspectRatio: z\n .enum([\n '1:1',\n '2:3',\n '3:2',\n '3:4',\n '4:3',\n '4:5',\n '5:4',\n '9:16',\n '16:9',\n '21:9',\n '1:8',\n '8:1',\n '1:4',\n '4:1',\n ])\n .optional(),\n imageSize: z.enum(['1K', '2K', '4K', '512']).optional(),\n })\n .optional(),\n\n /**\n * Optional. Configuration for grounding retrieval.\n * Used to provide location context for Google Maps and Google Search grounding.\n *\n * https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps\n */\n retrievalConfig: z\n .object({\n latLng: z\n .object({\n latitude: z.number(),\n longitude: z.number(),\n })\n .optional(),\n })\n .optional(),\n\n /**\n * Optional. When set to true, function call arguments will be streamed\n * incrementally via partialArgs in streaming responses. Only supported\n * on the Vertex AI API (not the Gemini API).\n *\n * @default true\n *\n * https://docs.cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling#streaming-fc\n */\n streamFunctionCallArguments: z.boolean().optional(),\n\n /**\n * Optional. The service tier to use for the request.\n */\n serviceTier: z.enum(['standard', 'flex', 'priority']).optional(),\n }),\n ),\n);\n\nexport type GoogleLanguageModelOptions = InferSchema<\n typeof googleLanguageModelOptions\n>;\n","import {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertJSONSchemaToOpenAPISchema } from './convert-json-schema-to-openapi-schema';\nimport { GoogleGenerativeAIModelId } from './google-generative-ai-options';\n\nexport function prepareTools({\n tools,\n toolChoice,\n modelId,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n modelId: GoogleGenerativeAIModelId;\n}): {\n tools:\n | Array<\n | {\n functionDeclarations: Array<{\n name: string;\n description: string;\n parameters: unknown;\n }>;\n }\n | Record<string, any>\n >\n | undefined;\n toolConfig:\n | undefined\n | {\n functionCallingConfig?: {\n mode: 'AUTO' | 'NONE' | 'ANY' | 'VALIDATED';\n allowedFunctionNames?: string[];\n streamFunctionCallArguments?: boolean;\n };\n includeServerSideToolInvocations?: boolean;\n };\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n const isLatest = (\n [\n 'gemini-flash-latest',\n 'gemini-flash-lite-latest',\n 'gemini-pro-latest',\n ] as const satisfies GoogleGenerativeAIModelId[]\n ).some(id => id === modelId);\n const isGemini2orNewer =\n modelId.includes('gemini-2') ||\n modelId.includes('gemini-3') ||\n modelId.includes('nano-banana') ||\n isLatest;\n const isGemini3orNewer = modelId.includes('gemini-3');\n const supportsFileSearch =\n modelId.includes('gemini-2.5') || modelId.includes('gemini-3');\n\n if (tools == null) {\n return { tools: undefined, toolConfig: undefined, toolWarnings };\n }\n\n // Check for mixed tool types and add warnings\n const hasFunctionTools = tools.some(tool => tool.type === 'function');\n const hasProviderTools = tools.some(tool => tool.type === 'provider');\n\n if (hasFunctionTools && hasProviderTools && !isGemini3orNewer) {\n toolWarnings.push({\n type: 'unsupported',\n feature: `combination of function and provider-defined tools`,\n });\n }\n\n if (hasProviderTools) {\n const googleTools: any[] = [];\n\n const ProviderTools = tools.filter(tool => tool.type === 'provider');\n ProviderTools.forEach(tool => {\n switch (tool.id) {\n case 'google.google_search':\n if (isGemini2orNewer) {\n googleTools.push({ googleSearch: { ...tool.args } });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details: 'Google Search requires Gemini 2.0 or newer.',\n });\n }\n break;\n case 'google.enterprise_web_search':\n if (isGemini2orNewer) {\n googleTools.push({ enterpriseWebSearch: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details: 'Enterprise Web Search requires Gemini 2.0 or newer.',\n });\n }\n break;\n case 'google.url_context':\n if (isGemini2orNewer) {\n googleTools.push({ urlContext: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The URL context tool is not supported with other Gemini models than Gemini 2.',\n });\n }\n break;\n case 'google.code_execution':\n if (isGemini2orNewer) {\n googleTools.push({ codeExecution: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The code execution tool is not supported with other Gemini models than Gemini 2.',\n });\n }\n break;\n case 'google.file_search':\n if (supportsFileSearch) {\n googleTools.push({ fileSearch: { ...tool.args } });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The file search tool is only supported with Gemini 2.5 models and Gemini 3 models.',\n });\n }\n break;\n case 'google.vertex_rag_store':\n if (isGemini2orNewer) {\n googleTools.push({\n retrieval: {\n vertex_rag_store: {\n rag_resources: {\n rag_corpus: tool.args.ragCorpus,\n },\n similarity_top_k: tool.args.topK as number | undefined,\n },\n },\n });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The RAG store tool is not supported with other Gemini models than Gemini 2.',\n });\n }\n break;\n case 'google.google_maps':\n if (isGemini2orNewer) {\n googleTools.push({ googleMaps: {} });\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n details:\n 'The Google Maps grounding tool is not supported with Gemini models other than Gemini 2 or newer.',\n });\n }\n break;\n default:\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n break;\n }\n });\n\n if (hasFunctionTools && isGemini3orNewer && googleTools.length > 0) {\n const functionDeclarations: Array<{\n name: string;\n description: string;\n parameters: unknown;\n }> = [];\n for (const tool of tools) {\n if (tool.type === 'function') {\n functionDeclarations.push({\n name: tool.name,\n description: tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(tool.inputSchema),\n });\n }\n }\n\n const combinedToolConfig: {\n functionCallingConfig: {\n mode: 'VALIDATED' | 'ANY' | 'NONE';\n allowedFunctionNames?: string[];\n };\n includeServerSideToolInvocations: true;\n } = {\n functionCallingConfig: { mode: 'VALIDATED' },\n includeServerSideToolInvocations: true,\n };\n\n if (toolChoice != null) {\n switch (toolChoice.type) {\n case 'auto':\n break;\n case 'none':\n combinedToolConfig.functionCallingConfig = { mode: 'NONE' };\n break;\n case 'required':\n combinedToolConfig.functionCallingConfig = { mode: 'ANY' };\n break;\n case 'tool':\n combinedToolConfig.functionCallingConfig = {\n mode: 'ANY',\n allowedFunctionNames: [toolChoice.toolName],\n };\n break;\n }\n }\n\n return {\n tools: [...googleTools, { functionDeclarations }],\n toolConfig: combinedToolConfig,\n toolWarnings,\n };\n }\n\n return {\n tools: googleTools.length > 0 ? googleTools : undefined,\n toolConfig: undefined,\n toolWarnings,\n };\n }\n\n const functionDeclarations = [];\n let hasStrictTools = false;\n for (const tool of tools) {\n switch (tool.type) {\n case 'function':\n functionDeclarations.push({\n name: tool.name,\n description: tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(tool.inputSchema),\n });\n if (tool.strict === true) {\n hasStrictTools = true;\n }\n break;\n default:\n toolWarnings.push({\n type: 'unsupported',\n feature: `function tool ${tool.name}`,\n });\n break;\n }\n }\n\n if (toolChoice == null) {\n return {\n tools: [{ functionDeclarations }],\n toolConfig: hasStrictTools\n ? { functionCallingConfig: { mode: 'VALIDATED' } }\n : undefined,\n toolWarnings,\n };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: {\n functionCallingConfig: {\n mode: hasStrictTools ? 'VALIDATED' : 'AUTO',\n },\n },\n toolWarnings,\n };\n case 'none':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: { functionCallingConfig: { mode: 'NONE' } },\n toolWarnings,\n };\n case 'required':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: {\n functionCallingConfig: {\n mode: hasStrictTools ? 'VALIDATED' : 'ANY',\n },\n },\n toolWarnings,\n };\n case 'tool':\n return {\n tools: [{ functionDeclarations }],\n toolConfig: {\n functionCallingConfig: {\n mode: hasStrictTools ? 'VALIDATED' : 'ANY',\n allowedFunctionNames: [toolChoice.toolName],\n },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","export type PartialArg = {\n jsonPath: string;\n stringValue?: string | null;\n numberValue?: number | null;\n boolValue?: boolean | null;\n nullValue?: unknown;\n willContinue?: boolean | null;\n};\n\ntype PathSegment = string | number;\n\ntype StackEntry = {\n segment: PathSegment;\n isArray: boolean;\n childCount: number;\n};\n\n/**\n * Incrementally builds a JSON object from Google's streaming `partialArgs`\n * chunks emitted during tool-call function calling. Tracks both the structured\n * object and a running JSON text representation so callers can emit text deltas\n * that, when concatenated, form valid nested JSON matching JSON.stringify output.\n *\n * Input: [{jsonPath:\"$.location\",stringValue:\"Boston\"}]\n * Output: '{\"location\":\"Boston\"', then finalize() → closingDelta='}'\n */\nexport class GoogleJSONAccumulator {\n private accumulatedArgs: Record<string, unknown> = {};\n private jsonText = '';\n\n /**\n * Stack representing the currently \"open\" containers in the JSON output.\n * Entry 0 is always the root `{` object once the first value is written.\n */\n private pathStack: StackEntry[] = [];\n\n /**\n * Whether a string value is currently \"open\" (willContinue was true),\n * meaning the closing quote has not yet been emitted.\n */\n private stringOpen = false;\n\n /**\n * Input: [{jsonPath:\"$.brightness\",numberValue:50}]\n * Output: { currentJSON:{brightness:50}, textDelta:'{\"brightness\":50' }\n */\n processPartialArgs(partialArgs: PartialArg[]): {\n currentJSON: Record<string, unknown>;\n textDelta: string;\n } {\n let delta = '';\n\n for (const arg of partialArgs) {\n const rawPath = arg.jsonPath.replace(/^\\$\\./, '');\n if (!rawPath) continue;\n\n const segments = parsePath(rawPath);\n\n const existingValue = getNestedValue(this.accumulatedArgs, segments);\n const isStringContinuation =\n arg.stringValue != null && existingValue !== undefined;\n\n if (isStringContinuation) {\n const escaped = JSON.stringify(arg.stringValue).slice(1, -1);\n setNestedValue(\n this.accumulatedArgs,\n segments,\n (existingValue as string) + arg.stringValue,\n );\n delta += escaped;\n continue;\n }\n\n const resolved = resolvePartialArgValue(arg);\n if (resolved == null) continue;\n\n setNestedValue(this.accumulatedArgs, segments, resolved.value);\n delta += this.emitNavigationTo(segments, arg, resolved.json);\n }\n\n this.jsonText += delta;\n\n return {\n currentJSON: this.accumulatedArgs,\n textDelta: delta,\n };\n }\n\n /**\n * Input: jsonText='{\"brightness\":50', accumulatedArgs={brightness:50}\n * Output: { finalJSON:'{\"brightness\":50}', closingDelta:'}' }\n */\n finalize(): { finalJSON: string; closingDelta: string } {\n const finalArgs = JSON.stringify(this.accumulatedArgs);\n const closingDelta = finalArgs.slice(this.jsonText.length);\n return { finalJSON: finalArgs, closingDelta };\n }\n\n /**\n * Input: pathStack=[] (first call) or pathStack=[root,...] (subsequent calls)\n * Output: '{' (first call) or '' (subsequent calls)\n */\n private ensureRoot(): string {\n if (this.pathStack.length === 0) {\n this.pathStack.push({ segment: '', isArray: false, childCount: 0 });\n return '{';\n }\n return '';\n }\n\n /**\n * Emits the JSON text fragment needed to navigate from the current open\n * path to the new leaf at `targetSegments`, then writes the value.\n *\n * Input: targetSegments=[\"recipe\",\"name\"], arg={jsonPath:\"$.recipe.name\",stringValue:\"Lasagna\"}, valueJson='\"Lasagna\"'\n * Output: '{\"recipe\":{\"name\":\"Lasagna\"'\n */\n private emitNavigationTo(\n targetSegments: PathSegment[],\n arg: PartialArg,\n valueJson: string,\n ): string {\n let fragment = '';\n\n if (this.stringOpen) {\n fragment += '\"';\n this.stringOpen = false;\n }\n\n fragment += this.ensureRoot();\n\n const targetContainerSegments = targetSegments.slice(0, -1);\n const leafSegment = targetSegments[targetSegments.length - 1];\n\n const commonDepth = this.findCommonStackDepth(targetContainerSegments);\n\n fragment += this.closeDownTo(commonDepth);\n fragment += this.openDownTo(targetContainerSegments, leafSegment);\n fragment += this.emitLeaf(leafSegment, arg, valueJson);\n\n return fragment;\n }\n\n /**\n * Returns the stack depth to preserve when navigating to a new target\n * container path. Always >= 1 (the root is never popped).\n *\n * Input: stack=[root,\"recipe\",\"ingredients\",0], target=[\"recipe\",\"ingredients\",1]\n * Output: 3 (keep root+\"recipe\"+\"ingredients\")\n */\n private findCommonStackDepth(targetContainer: PathSegment[]): number {\n const maxDepth = Math.min(\n this.pathStack.length - 1,\n targetContainer.length,\n );\n let common = 0;\n for (let i = 0; i < maxDepth; i++) {\n if (this.pathStack[i + 1].segment === targetContainer[i]) {\n common++;\n } else {\n break;\n }\n }\n return common + 1;\n }\n\n /**\n * Closes containers from the current stack depth back down to `targetDepth`.\n *\n * Input: this.pathStack=[root,\"recipe\",\"ingredients\",0], targetDepth=3\n * Output: '}'\n */\n private closeDownTo(targetDepth: number): string {\n let fragment = '';\n while (this.pathStack.length > targetDepth) {\n const entry = this.pathStack.pop()!;\n fragment += entry.isArray ? ']' : '}';\n }\n return fragment;\n }\n\n /**\n * Opens containers from the current stack depth down to the full target\n * container path, emitting opening `{`, `[`, keys, and commas as needed.\n * `leafSegment` is used to determine if the innermost container is an array.\n *\n * Input: this.pathStack=[root], targetContainer=[\"recipe\",\"ingredients\"], leafSegment=0\n * Output: '\"recipe\":{\"ingredients\":['\n */\n private openDownTo(\n targetContainer: PathSegment[],\n leafSegment: PathSegment,\n ): string {\n let fragment = '';\n\n const startIdx = this.pathStack.length - 1;\n\n for (let i = startIdx; i < targetContainer.length; i++) {\n const seg = targetContainer[i];\n const parentEntry = this.pathStack[this.pathStack.length - 1];\n\n if (parentEntry.childCount > 0) {\n fragment += ',';\n }\n parentEntry.childCount++;\n\n if (typeof seg === 'string') {\n fragment += `${JSON.stringify(seg)}:`;\n }\n\n const childSeg =\n i + 1 < targetContainer.length ? targetContainer[i + 1] : leafSegment;\n const isArray = typeof childSeg === 'number';\n\n fragment += isArray ? '[' : '{';\n\n this.pathStack.push({ segment: seg, isArray, childCount: 0 });\n }\n\n return fragment;\n }\n\n /**\n * Emits the comma, key, and value for a leaf entry in the current container.\n *\n * Input: leafSegment=\"name\", arg={stringValue:\"Lasagna\"}, valueJson='\"Lasagna\"'\n * Output: '\"name\":\"Lasagna\"' (or ',\"name\":\"Lasagna\"' if container.childCount > 0)\n */\n private emitLeaf(\n leafSegment: PathSegment,\n arg: PartialArg,\n valueJson: string,\n ): string {\n let fragment = '';\n const container = this.pathStack[this.pathStack.length - 1];\n\n if (container.childCount > 0) {\n fragment += ',';\n }\n container.childCount++;\n\n if (typeof leafSegment === 'string') {\n fragment += `${JSON.stringify(leafSegment)}:`;\n }\n\n if (arg.stringValue != null && arg.willContinue) {\n fragment += valueJson.slice(0, -1);\n this.stringOpen = true;\n } else {\n fragment += valueJson;\n }\n\n return fragment;\n }\n}\n\n/**\n * Splits a dotted/bracketed JSON path like `recipe.ingredients[0].name` into segments.\n *\n * Input: \"recipe.ingredients[0].name\"\n * Output: [\"recipe\", \"ingredients\", 0, \"name\"]\n */\nfunction parsePath(rawPath: string): Array<string | number> {\n const segments: Array<string | number> = [];\n for (const part of rawPath.split('.')) {\n const bracketIdx = part.indexOf('[');\n if (bracketIdx === -1) {\n segments.push(part);\n } else {\n if (bracketIdx > 0) segments.push(part.slice(0, bracketIdx));\n for (const m of part.matchAll(/\\[(\\d+)\\]/g)) {\n segments.push(parseInt(m[1], 10));\n }\n }\n }\n return segments;\n}\n\n/**\n * Traverses a nested object along the given path segments and returns the leaf value.\n *\n * Input: ({recipe:{name:\"Lasagna\"}}, [\"recipe\",\"name\"])\n * Output: \"Lasagna\"\n */\nfunction getNestedValue(\n obj: Record<string, unknown>,\n segments: Array<string | number>,\n): unknown {\n let current: unknown = obj;\n for (const seg of segments) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string | number, unknown>)[seg];\n }\n return current;\n}\n\n/**\n * Sets a value at a nested path, creating intermediate objects or arrays as needed.\n *\n * Input: obj={}, segments=[\"recipe\",\"ingredients\",0,\"name\"], value=\"Noodles\"\n * Output: {recipe:{ingredients:[{name:\"Noodles\"}]}}\n */\nfunction setNestedValue(\n obj: Record<string, unknown>,\n segments: Array<string | number>,\n value: unknown,\n): void {\n let current: Record<string | number, unknown> = obj;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i];\n const nextSeg = segments[i + 1];\n if (current[seg] == null) {\n current[seg] = typeof nextSeg === 'number' ? [] : {};\n }\n current = current[seg] as Record<string | number, unknown>;\n }\n current[segments[segments.length - 1]] = value;\n}\n\n/**\n * Extracts the first non-null typed value from a partial arg and returns it with its JSON representation.\n *\n * Input: arg={stringValue:\"Boston\"} or arg={numberValue:50}\n * Output: {value:\"Boston\", json:'\"Boston\"'} or {value:50, json:'50'}\n */\nfunction resolvePartialArgValue(arg: {\n stringValue?: string | null;\n numberValue?: number | null;\n boolValue?: boolean | null;\n nullValue?: unknown;\n}): { value: unknown; json: string } | undefined {\n const value = arg.stringValue ?? arg.numberValue ?? arg.boolValue;\n if (value != null) return { value, json: JSON.stringify(value) };\n if ('nullValue' in arg) return { value: null, json: 'null' };\n return undefined;\n}\n","import { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapGoogleGenerativeAIFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'STOP':\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'MAX_TOKENS':\n return 'length';\n case 'IMAGE_SAFETY':\n case 'RECITATION':\n case 'SAFETY':\n case 'BLOCKLIST':\n case 'PROHIBITED_CONTENT':\n case 'SPII':\n return 'content-filter';\n case 'MALFORMED_FUNCTION_CALL':\n return 'error';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * A tool that enables the model to generate and run Python code.\n *\n * @note Ensure the selected model supports Code Execution.\n * Multi-tool usage with the code execution tool is typically compatible with Gemini >=2 models.\n *\n * @see https://ai.google.dev/gemini-api/docs/code-execution (Google AI)\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/code-execution-api (Vertex AI)\n */\nexport const codeExecution = createProviderToolFactoryWithOutputSchema<\n {\n language: string;\n code: string;\n },\n {\n outcome: string;\n output: string;\n },\n {}\n>({\n id: 'google.code_execution',\n inputSchema: z.object({\n language: z.string().describe('The programming language of the code.'),\n code: z.string().describe('The code to be executed.'),\n }),\n outputSchema: z.object({\n outcome: z\n .string()\n .describe('The outcome of the execution (e.g., \"OUTCOME_OK\").'),\n output: z.string().describe('The output from the code execution.'),\n }),\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/web-grounding-enterprise\n\nexport const enterpriseWebSearch = createProviderToolFactory<\n {\n // Enterprise Web Search does not have any input schema\n },\n {}\n>({\n id: 'google.enterprise_web_search',\n inputSchema: lazySchema(() => zodSchema(z.object({}))),\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/** Tool to retrieve knowledge from the File Search Stores. */\nconst fileSearchArgsBaseSchema = z\n .object({\n /** The names of the file_search_stores to retrieve from.\n * Example: `fileSearchStores/my-file-search-store-123`\n */\n fileSearchStoreNames: z\n .array(z.string())\n .describe(\n 'The names of the file_search_stores to retrieve from. Example: `fileSearchStores/my-file-search-store-123`',\n ),\n /** The number of file search retrieval chunks to retrieve. */\n topK: z\n .number()\n .int()\n .positive()\n .describe('The number of file search retrieval chunks to retrieve.')\n .optional(),\n\n /** Metadata filter to apply to the file search retrieval documents.\n * See https://google.aip.dev/160 for the syntax of the filter expression.\n */\n metadataFilter: z\n .string()\n .describe(\n 'Metadata filter to apply to the file search retrieval documents. See https://google.aip.dev/160 for the syntax of the filter expression.',\n )\n .optional(),\n })\n .passthrough();\n\nexport type GoogleFileSearchToolArgs = z.infer<typeof fileSearchArgsBaseSchema>;\n\nconst fileSearchArgsSchema = lazySchema(() =>\n zodSchema(fileSearchArgsBaseSchema),\n);\n\nexport const fileSearch = createProviderToolFactory<\n {},\n GoogleFileSearchToolArgs\n>({\n id: 'google.file_search',\n inputSchema: fileSearchArgsSchema,\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://ai.google.dev/gemini-api/docs/maps-grounding\n// https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps\n\nexport const googleMaps = createProviderToolFactory<{}, {}>({\n id: 'google.google_maps',\n inputSchema: lazySchema(() => zodSchema(z.object({}))),\n});\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://ai.google.dev/gemini-api/docs/google-search\n// https://ai.google.dev/api/generate-content#GroundingSupport\n// https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-search\n\nconst googleSearchToolArgsBaseSchema = z\n .object({\n searchTypes: z\n .object({\n webSearch: z.object({}).optional(),\n imageSearch: z.object({}).optional(),\n })\n .optional(),\n\n timeRangeFilter: z\n .object({\n startTime: z.string(),\n endTime: z.string(),\n })\n .optional(),\n })\n .passthrough();\n\nexport type GoogleSearchToolArgs = z.infer<\n typeof googleSearchToolArgsBaseSchema\n>;\n\nconst googleSearchToolArgsSchema = lazySchema(() =>\n zodSchema(googleSearchToolArgsBaseSchema),\n);\n\nexport const googleSearch = createProviderToolFactory<{}, GoogleSearchToolArgs>(\n {\n id: 'google.google_search',\n inputSchema: googleSearchToolArgsSchema,\n },\n);\n","import {\n createProviderToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const urlContext = createProviderToolFactory<\n {\n // Url context does not have any input schema, it will directly use the url from the prompt\n },\n {}\n>({\n id: 'google.url_context',\n inputSchema: lazySchema(() => zodSchema(z.object({}))),\n});\n","import { createProviderToolFactory } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/use-vertexai-search#generate-content-using-gemini-api\n// https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/rag-output-explained\n\n/**\n * A tool that enables the model to perform RAG searches against a Vertex RAG Store.\n *\n * @note Only works with Vertex Gemini models.\n */\nexport const vertexRagStore = createProviderToolFactory<\n {},\n {\n /**\n * RagCorpus resource names, eg: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}\n */\n ragCorpus: string;\n\n /**\n * The number of top contexts to retrieve.\n */\n topK?: number;\n }\n>({\n id: 'google.vertex_rag_store',\n inputSchema: z.object({\n ragCorpus: z.string(),\n topK: z.number().optional(),\n }),\n});\n","import { codeExecution } from './tool/code-execution';\nimport { enterpriseWebSearch } from './tool/enterprise-web-search';\nimport { fileSearch } from './tool/file-search';\nimport { googleMaps } from './tool/google-maps';\nimport { googleSearch } from './tool/google-search';\nimport { urlContext } from './tool/url-context';\nimport { vertexRagStore } from './tool/vertex-rag-store';\n\nexport const googleTools = {\n /**\n * Creates a Google search tool that gives Google direct access to real-time web content.\n * Must have name \"google_search\".\n */\n googleSearch,\n\n /**\n * Creates an Enterprise Web Search tool for grounding responses using a compliance-focused web index.\n * Designed for highly-regulated industries (finance, healthcare, public sector).\n * Does not log customer data and supports VPC service controls.\n * Must have name \"enterprise_web_search\".\n *\n * @note Only available on Vertex AI. Requires Gemini 2.0 or newer.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/web-grounding-enterprise\n */\n enterpriseWebSearch,\n\n /**\n * Creates a Google Maps grounding tool that gives the model access to Google Maps data.\n * Must have name \"google_maps\".\n *\n * @see https://ai.google.dev/gemini-api/docs/maps-grounding\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps\n */\n googleMaps,\n\n /**\n * Creates a URL context tool that gives Google direct access to real-time web content.\n * Must have name \"url_context\".\n */\n urlContext,\n\n /**\n * Enables Retrieval Augmented Generation (RAG) via the Gemini File Search tool.\n * Must have name \"file_search\".\n *\n * @param fileSearchStoreNames - Fully-qualified File Search store resource names.\n * @param metadataFilter - Optional filter expression to restrict the files that can be retrieved.\n * @param topK - Optional result limit for the number of chunks returned from File Search.\n *\n * @see https://ai.google.dev/gemini-api/docs/file-search\n */\n fileSearch,\n /**\n * A tool that enables the model to generate and run Python code.\n * Must have name \"code_execution\".\n *\n * @note Ensure the selected model supports Code Execution.\n * Multi-tool usage with the code execution tool is typically compatible with Gemini >=2 models.\n *\n * @see https://ai.google.dev/gemini-api/docs/code-execution (Google AI)\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/code-execution-api (Vertex AI)\n */\n codeExecution,\n\n /**\n * Creates a Vertex RAG Store tool that enables the model to perform RAG searches against a Vertex RAG Store.\n * Must have name \"vertex_rag_store\".\n */\n vertexRagStore,\n};\n","import {\n ImageModelV4,\n LanguageModelV4Prompt,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertToBase64,\n createJsonResponseHandler,\n FetchFunction,\n generateId as defaultGenerateId,\n type InferSchema,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\nimport {\n GoogleGenerativeAIImageModelId,\n GoogleGenerativeAIImageSettings,\n} from './google-generative-ai-image-settings';\nimport { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model';\nimport type { GoogleLanguageModelOptions } from './google-generative-ai-options';\n\ninterface GoogleGenerativeAIImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class GoogleGenerativeAIImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n\n get maxImagesPerCall(): number {\n if (this.settings.maxImagesPerCall != null) {\n return this.settings.maxImagesPerCall;\n }\n // https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash-image\n if (isGeminiModel(this.modelId)) {\n return 10;\n }\n // https://ai.google.dev/gemini-api/docs/imagen#imagen-model\n return 4;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: GoogleGenerativeAIImageModelId,\n private readonly settings: GoogleGenerativeAIImageSettings,\n private readonly config: GoogleGenerativeAIImageModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n // Gemini image models use the language model API internally\n if (isGeminiModel(this.modelId)) {\n return this.doGenerateGemini(options);\n }\n return this.doGenerateImagen(options);\n }\n\n private async doGenerateImagen(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const {\n prompt,\n n = 1,\n size,\n aspectRatio = '1:1',\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n } = options;\n const warnings: Array<SharedV4Warning> = [];\n\n // Imagen API endpoints do not support image editing\n if (files != null && files.length > 0) {\n throw new Error(\n 'Google Generative AI does not support image editing with Imagen models. ' +\n 'Use Google Vertex AI (@ai-sdk/google-vertex) for image editing capabilities.',\n );\n }\n\n if (mask != null) {\n throw new Error(\n 'Google Generative AI does not support image editing with masks. ' +\n 'Use Google Vertex AI (@ai-sdk/google-vertex) for image editing capabilities.',\n );\n }\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details:\n 'This model does not support the `seed` option through this provider.',\n });\n }\n\n const googleOptions = await parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleImageModelOptionsSchema,\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const parameters: Record<string, unknown> = {\n sampleCount: n,\n };\n\n if (aspectRatio != null) {\n parameters.aspectRatio = aspectRatio;\n }\n\n if (googleOptions) {\n Object.assign(parameters, googleOptions);\n }\n\n const body = {\n instances: [{ prompt }],\n parameters,\n };\n\n const { responseHeaders, value: response } = await postJsonToApi<{\n predictions: Array<{ bytesBase64Encoded: string }>;\n }>({\n url: `${this.config.baseURL}/models/${this.modelId}:predict`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n return {\n images: response.predictions.map(\n (p: { bytesBase64Encoded: string }) => p.bytesBase64Encoded,\n ),\n warnings,\n providerMetadata: {\n google: {\n images: response.predictions.map(() => ({\n // Add any prediction-specific metadata here\n })),\n },\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n private async doGenerateGemini(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const {\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n } = options;\n const warnings: Array<SharedV4Warning> = [];\n\n // Gemini does not support mask-based inpainting\n if (mask != null) {\n throw new Error(\n 'Gemini image models do not support mask-based image editing.',\n );\n }\n\n // Gemini does not support generating multiple images per call via n parameter\n if (n != null && n > 1) {\n throw new Error(\n 'Gemini image models do not support generating a set number of images per call. Use n=1 or omit the n parameter.',\n );\n }\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n // Build user message content for language model\n const userContent: Array<\n | { type: 'text'; text: string }\n | { type: 'file'; data: string | Uint8Array | URL; mediaType: string }\n > = [];\n\n // Add text prompt\n if (prompt != null) {\n userContent.push({ type: 'text', text: prompt });\n }\n\n // Add input images for editing\n if (files != null && files.length > 0) {\n for (const file of files) {\n if (file.type === 'url') {\n userContent.push({\n type: 'file',\n data: new URL(file.url),\n mediaType: 'image/*',\n });\n } else {\n userContent.push({\n type: 'file',\n data:\n typeof file.data === 'string'\n ? file.data\n : new Uint8Array(file.data),\n mediaType: file.mediaType,\n });\n }\n }\n }\n\n const languageModelPrompt: LanguageModelV4Prompt = [\n { role: 'user', content: userContent },\n ];\n\n // Instantiate language model\n const languageModel = new GoogleGenerativeAILanguageModel(this.modelId, {\n provider: this.config.provider,\n baseURL: this.config.baseURL,\n headers: this.config.headers ?? {},\n fetch: this.config.fetch,\n generateId: this.config.generateId ?? defaultGenerateId,\n });\n\n // Call language model with image-only response modality\n const result = await languageModel.doGenerate({\n prompt: languageModelPrompt,\n seed,\n providerOptions: {\n google: {\n responseModalities: ['IMAGE'],\n imageConfig: aspectRatio\n ? {\n aspectRatio: aspectRatio as NonNullable<\n GoogleLanguageModelOptions['imageConfig']\n >['aspectRatio'],\n }\n : undefined,\n ...((providerOptions?.google as Omit<\n GoogleLanguageModelOptions,\n 'responseModalities' | 'imageConfig'\n >) ?? {}),\n } satisfies GoogleLanguageModelOptions,\n },\n headers,\n abortSignal,\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n // Extract images from language model response\n const images: string[] = [];\n for (const part of result.content) {\n if (part.type === 'file' && part.mediaType.startsWith('image/')) {\n images.push(convertToBase64(part.data));\n }\n }\n\n return {\n images,\n warnings,\n providerMetadata: {\n google: {\n images: images.map(() => ({})),\n },\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: result.response?.headers,\n },\n usage: result.usage\n ? {\n inputTokens: result.usage.inputTokens.total,\n outputTokens: result.usage.outputTokens.total,\n totalTokens:\n (result.usage.inputTokens.total ?? 0) +\n (result.usage.outputTokens.total ?? 0),\n }\n : undefined,\n };\n }\n}\n\nfunction isGeminiModel(modelId: string): boolean {\n return modelId.startsWith('gemini-');\n}\n\n// minimal version of the schema\nconst googleImageResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n predictions: z\n .array(z.object({ bytesBase64Encoded: z.string() }))\n .default([]),\n }),\n ),\n);\n\n// Note: For the initial GA launch of Imagen 3, safety filters are not configurable.\n// https://ai.google.dev/gemini-api/docs/imagen#imagen-model\nconst googleImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n personGeneration: z\n .enum(['dont_allow', 'allow_adult', 'allow_all'])\n .nullish(),\n aspectRatio: z.enum(['1:1', '3:4', '4:3', '9:16', '16:9']).nullish(),\n }),\n ),\n);\n\nexport type GoogleImageModelOptions = InferSchema<\n typeof googleImageModelOptionsSchema\n>;\n","import {\n AISDKError,\n type FilesV4,\n type FilesV4UploadFileCallOptions,\n type FilesV4UploadFileResult,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n zodSchema,\n getFromApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\n\nexport type GoogleFilesUploadOptions = {\n displayName?: string | null;\n pollIntervalMs?: number | null;\n pollTimeoutMs?: number | null;\n\n [key: string]: unknown;\n};\n\ninterface GoogleGenerativeAIFilesConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n}\n\nexport class GoogleGenerativeAIFiles implements FilesV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(private readonly config: GoogleGenerativeAIFilesConfig) {}\n\n async uploadFile(\n options: FilesV4UploadFileCallOptions,\n ): Promise<FilesV4UploadFileResult> {\n const googleOptions = (await parseProviderOptions({\n provider: 'google',\n providerOptions: options.providerOptions,\n schema: googleFilesUploadOptionsSchema,\n })) as GoogleFilesUploadOptions | undefined;\n\n const resolvedHeaders = this.config.headers();\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n\n const warnings: Array<SharedV4Warning> = [];\n if (options.filename != null) {\n warnings.push({ type: 'unsupported', feature: 'filename' });\n }\n\n const data = options.data;\n const fileBytes =\n data instanceof Uint8Array\n ? data\n : Uint8Array.from(atob(data), c => c.charCodeAt(0));\n\n const mediaType = options.mediaType;\n const displayName = googleOptions?.displayName;\n\n const baseOrigin = this.config.baseURL.replace(/\\/v1beta$/, '');\n\n const initResponse = await fetchFn(`${baseOrigin}/upload/v1beta/files`, {\n method: 'POST',\n headers: {\n ...resolvedHeaders,\n 'X-Goog-Upload-Protocol': 'resumable',\n 'X-Goog-Upload-Command': 'start',\n 'X-Goog-Upload-Header-Content-Length': String(fileBytes.length),\n 'X-Goog-Upload-Header-Content-Type': mediaType,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n file: {\n ...(displayName != null ? { display_name: displayName } : {}),\n },\n }),\n });\n\n if (!initResponse.ok) {\n const errorBody = await initResponse.text();\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_ERROR',\n message: `Failed to initiate resumable upload: ${initResponse.status} ${errorBody}`,\n });\n }\n\n const uploadUrl = initResponse.headers.get('x-goog-upload-url');\n if (!uploadUrl) {\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_ERROR',\n message: 'No upload URL returned from initiation request',\n });\n }\n\n const uploadResponse = await fetchFn(uploadUrl, {\n method: 'POST',\n headers: {\n 'Content-Length': String(fileBytes.length),\n 'X-Goog-Upload-Offset': '0',\n 'X-Goog-Upload-Command': 'upload, finalize',\n },\n body: fileBytes,\n });\n\n if (!uploadResponse.ok) {\n const errorBody = await uploadResponse.text();\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_ERROR',\n message: `Failed to upload file data: ${uploadResponse.status} ${errorBody}`,\n });\n }\n\n const uploadResult = (await uploadResponse.json()) as {\n file: GoogleFileResource;\n };\n\n let file = uploadResult.file;\n\n const pollIntervalMs = googleOptions?.pollIntervalMs ?? 2000;\n const pollTimeoutMs = googleOptions?.pollTimeoutMs ?? 300000;\n const startTime = Date.now();\n\n while (file.state === 'PROCESSING') {\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_TIMEOUT',\n message: `File processing timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n await delay(pollIntervalMs);\n\n const { value: fileStatus } = await getFromApi({\n url: `${this.config.baseURL}/${file.name}`,\n headers: combineHeaders(resolvedHeaders),\n successfulResponseHandler: createJsonResponseHandler(\n googleFileResponseSchema,\n ),\n failedResponseHandler: googleFailedResponseHandler,\n fetch: this.config.fetch,\n });\n\n file = fileStatus;\n }\n\n if (file.state === 'FAILED') {\n throw new AISDKError({\n name: 'GOOGLE_FILES_UPLOAD_FAILED',\n message: `File processing failed for ${file.name}`,\n });\n }\n\n return {\n warnings,\n providerReference: { google: file.uri },\n mediaType: file.mimeType ?? options.mediaType,\n providerMetadata: {\n google: {\n name: file.name,\n displayName: file.displayName,\n mimeType: file.mimeType,\n sizeBytes: file.sizeBytes,\n state: file.state,\n uri: file.uri,\n ...(file.createTime != null ? { createTime: file.createTime } : {}),\n ...(file.updateTime != null ? { updateTime: file.updateTime } : {}),\n ...(file.expirationTime != null\n ? { expirationTime: file.expirationTime }\n : {}),\n ...(file.sha256Hash != null ? { sha256Hash: file.sha256Hash } : {}),\n },\n },\n };\n }\n}\n\ntype GoogleFileResource = {\n name: string;\n displayName?: string | null;\n mimeType: string;\n sizeBytes?: string | null;\n createTime?: string | null;\n updateTime?: string | null;\n expirationTime?: string | null;\n sha256Hash?: string | null;\n uri: string;\n state: string;\n};\n\nconst googleFileResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n name: z.string(),\n displayName: z.string().nullish(),\n mimeType: z.string(),\n sizeBytes: z.string().nullish(),\n createTime: z.string().nullish(),\n updateTime: z.string().nullish(),\n expirationTime: z.string().nullish(),\n sha256Hash: z.string().nullish(),\n uri: z.string(),\n state: z.string(),\n }),\n ),\n);\n\nconst googleFilesUploadOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n displayName: z.string().nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { googleFailedResponseHandler } from './google-error';\nimport type { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\n\nexport type GoogleVideoModelOptions = {\n // Polling configuration\n pollIntervalMs?: number | null;\n pollTimeoutMs?: number | null;\n\n // Video generation options\n personGeneration?: 'dont_allow' | 'allow_adult' | 'allow_all' | null;\n negativePrompt?: string | null;\n\n // Reference images (for style/asset reference)\n referenceImages?: Array<{\n bytesBase64Encoded?: string;\n gcsUri?: string;\n }> | null;\n\n [key: string]: unknown; // For passthrough\n};\n\ninterface GoogleGenerativeAIVideoModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class GoogleGenerativeAIVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxVideosPerCall(): number {\n // Google supports multiple videos via sampleCount\n return 4;\n }\n\n constructor(\n readonly modelId: GoogleGenerativeAIVideoModelId,\n private readonly config: GoogleGenerativeAIVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n const googleOptions = (await parseProviderOptions({\n provider: 'google',\n providerOptions: options.providerOptions,\n schema: googleVideoModelOptionsSchema,\n })) as GoogleVideoModelOptions | undefined;\n\n const instances: Array<Record<string, unknown>> = [{}];\n const instance = instances[0];\n\n if (options.prompt != null) {\n instance.prompt = options.prompt;\n }\n\n // Handle image-to-video: convert image to base64\n if (options.image != null) {\n if (options.image.type === 'url') {\n warnings.push({\n type: 'unsupported',\n feature: 'URL-based image input',\n details:\n 'Google Generative AI video models require base64-encoded images. URL will be ignored.',\n });\n } else {\n const base64Data =\n typeof options.image.data === 'string'\n ? options.image.data\n : convertUint8ArrayToBase64(options.image.data);\n\n instance.image = {\n inlineData: {\n mimeType: options.image.mediaType || 'image/png',\n data: base64Data,\n },\n };\n }\n }\n\n if (googleOptions?.referenceImages != null) {\n instance.referenceImages = googleOptions.referenceImages.map(refImg => {\n if (refImg.bytesBase64Encoded) {\n return {\n inlineData: {\n mimeType: 'image/png',\n data: refImg.bytesBase64Encoded,\n },\n };\n } else if (refImg.gcsUri) {\n return {\n gcsUri: refImg.gcsUri,\n };\n }\n return refImg;\n });\n }\n\n const parameters: Record<string, unknown> = {\n sampleCount: options.n,\n };\n\n if (options.aspectRatio) {\n parameters.aspectRatio = options.aspectRatio;\n }\n\n if (options.resolution) {\n const resolutionMap: Record<string, string> = {\n '1280x720': '720p',\n '1920x1080': '1080p',\n '3840x2160': '4k',\n };\n parameters.resolution =\n resolutionMap[options.resolution] || options.resolution;\n }\n\n if (options.duration) {\n parameters.durationSeconds = options.duration;\n }\n\n if (options.seed) {\n parameters.seed = options.seed;\n }\n\n if (googleOptions != null) {\n const opts = googleOptions as GoogleVideoModelOptions;\n\n if (\n opts.personGeneration !== undefined &&\n opts.personGeneration !== null\n ) {\n parameters.personGeneration = opts.personGeneration;\n }\n if (opts.negativePrompt !== undefined && opts.negativePrompt !== null) {\n parameters.negativePrompt = opts.negativePrompt;\n }\n\n for (const [key, value] of Object.entries(opts)) {\n if (\n ![\n 'pollIntervalMs',\n 'pollTimeoutMs',\n 'personGeneration',\n 'negativePrompt',\n 'referenceImages',\n ].includes(key)\n ) {\n parameters[key] = value;\n }\n }\n }\n\n const { value: operation } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:predictLongRunning`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body: {\n instances,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n googleOperationSchema,\n ),\n failedResponseHandler: googleFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const operationName = operation.name;\n if (!operationName) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ERROR',\n message: 'No operation name returned from API',\n });\n }\n\n const pollIntervalMs = googleOptions?.pollIntervalMs ?? 10000; // 10 seconds (per Google docs)\n const pollTimeoutMs = googleOptions?.pollTimeoutMs ?? 600000; // 10 minutes\n\n const startTime = Date.now();\n let finalOperation = operation;\n let responseHeaders: Record<string, string> | undefined;\n\n while (!finalOperation.done) {\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n await delay(pollIntervalMs);\n\n if (options.abortSignal?.aborted) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ABORTED',\n message: 'Video generation request was aborted',\n });\n }\n\n const { value: statusOperation, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/${operationName}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n googleOperationSchema,\n ),\n failedResponseHandler: googleFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n finalOperation = statusOperation;\n responseHeaders = pollHeaders;\n }\n\n if (finalOperation.error) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_FAILED',\n message: `Video generation failed: ${finalOperation.error.message}`,\n });\n }\n\n const response = finalOperation.response;\n if (\n !response?.generateVideoResponse?.generatedSamples ||\n response.generateVideoResponse.generatedSamples.length === 0\n ) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ERROR',\n message: `No videos in response. Response: ${JSON.stringify(finalOperation)}`,\n });\n }\n\n const videos: Array<{ type: 'url'; url: string; mediaType: string }> = [];\n const videoMetadata: Array<{ uri: string }> = [];\n\n // Get API key from headers to append to download URLs\n const resolvedHeaders = await resolve(this.config.headers);\n const apiKey = resolvedHeaders?.['x-goog-api-key'];\n\n for (const generatedSample of response.generateVideoResponse\n .generatedSamples) {\n if (generatedSample.video?.uri) {\n // Append API key to URL for authentication during download\n const urlWithAuth = apiKey\n ? `${generatedSample.video.uri}${generatedSample.video.uri.includes('?') ? '&' : '?'}key=${apiKey}`\n : generatedSample.video.uri;\n\n videos.push({\n type: 'url',\n url: urlWithAuth,\n mediaType: 'video/mp4',\n });\n videoMetadata.push({\n uri: generatedSample.video.uri,\n });\n }\n }\n\n if (videos.length === 0) {\n throw new AISDKError({\n name: 'GOOGLE_VIDEO_GENERATION_ERROR',\n message: 'No valid videos in response',\n });\n }\n\n return {\n videos,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n google: {\n videos: videoMetadata,\n },\n },\n };\n }\n}\n\nconst googleOperationSchema = z.object({\n name: z.string().nullish(),\n done: z.boolean().nullish(),\n error: z\n .object({\n code: z.number().nullish(),\n message: z.string(),\n status: z.string().nullish(),\n })\n .nullish(),\n response: z\n .object({\n generateVideoResponse: z\n .object({\n generatedSamples: z\n .array(\n z.object({\n video: z\n .object({\n uri: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n })\n .nullish(),\n })\n .nullish(),\n});\n\nconst googleVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n personGeneration: z\n .enum(['dont_allow', 'allow_adult', 'allow_all'])\n .nullish(),\n negativePrompt: z.string().nullish(),\n referenceImages: z\n .array(\n z.object({\n bytesBase64Encoded: z.string().nullish(),\n gcsUri: z.string().nullish(),\n }),\n )\n .nullish(),\n })\n .passthrough(),\n ),\n);\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_v4","import_provider_utils","import_v4","responseHeaders","response","rawValue","import_provider_utils","import_v4","import_provider","import_provider_utils","_a","_b","_c","_d","import_provider_utils","import_v4","import_provider","googleTools","functionDeclarations","googleTools","generateId","args","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","defaultGenerateId","import_provider","import_provider_utils","import_v4","import_provider","import_provider_utils","import_v4","_a"]}