{"version":3,"sources":["../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-video-model.ts"],"sourcesContent":["import {\n  EmbeddingModelV3,\n  Experimental_VideoModelV3,\n  ImageModelV3,\n  LanguageModelV3,\n  ProviderV3,\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 { GoogleGenerativeAIVideoModel } from './google-generative-ai-video-model';\nimport { GoogleGenerativeAIVideoModelId } from './google-generative-ai-video-settings';\n\nexport interface GoogleGenerativeAIProvider extends ProviderV3 {\n  (modelId: GoogleGenerativeAIModelId): LanguageModelV3;\n\n  languageModel(modelId: GoogleGenerativeAIModelId): LanguageModelV3;\n\n  chat(modelId: GoogleGenerativeAIModelId): LanguageModelV3;\n\n  /**\n   * Creates a model for image generation.\n   */\n  image(\n    modelId: GoogleGenerativeAIImageModelId,\n    settings?: GoogleGenerativeAIImageSettings,\n  ): ImageModelV3;\n\n  /**\n   * @deprecated Use `chat()` instead.\n   */\n  generativeAI(modelId: GoogleGenerativeAIModelId): LanguageModelV3;\n\n  /**\n   * Creates a model for text embeddings.\n   */\n  embedding(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV3;\n\n  /**\n   * Creates a model for text embeddings.\n   */\n  embeddingModel(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV3;\n\n  /**\n   * @deprecated Use `embedding` instead.\n   */\n  textEmbedding(modelId: GoogleGenerativeAIEmbeddingModelId): EmbeddingModelV3;\n\n  /**\n   * @deprecated Use `embeddingModel` instead.\n   */\n  textEmbeddingModel(\n    modelId: GoogleGenerativeAIEmbeddingModelId,\n  ): EmbeddingModelV3;\n\n  /**\n   * Creates a model for video generation.\n   */\n  video(modelId: GoogleGenerativeAIVideoModelId): Experimental_VideoModelV3;\n\n  /**\n   * Creates a model for video generation.\n   */\n  videoModel(\n    modelId: GoogleGenerativeAIVideoModelId,\n  ): Experimental_VideoModelV3;\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 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 = 'v3' 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.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  EmbeddingModelV3,\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 EmbeddingModelV3 {\n  readonly specificationVersion = 'v3';\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<EmbeddingModelV3['doEmbed']>[0]): Promise<\n    Awaited<ReturnType<EmbeddingModelV3['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  LanguageModelV3,\n  LanguageModelV3CallOptions,\n  LanguageModelV3Content,\n  LanguageModelV3FinishReason,\n  LanguageModelV3GenerateResult,\n  LanguageModelV3Source,\n  LanguageModelV3StreamPart,\n  LanguageModelV3StreamResult,\n  JSONObject,\n  SharedV3ProviderMetadata,\n  SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonResponseHandler,\n  FetchFunction,\n  generateId,\n  InferSchema,\n  lazySchema,\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  VertexServiceTierMap,\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?: () => LanguageModelV3['supportedUrls'];\n};\n\nexport class GoogleGenerativeAILanguageModel implements LanguageModelV3 {\n  readonly specificationVersion = 'v3';\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    {\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      providerOptions,\n    }: LanguageModelV3CallOptions,\n    { isStreaming = false }: { isStreaming?: boolean } = {},\n  ) {\n    const warnings: SharedV3Warning[] = [];\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    // Vertex API requires another service tier format.\n    let sanitizedServiceTier: string | undefined = googleOptions?.serviceTier;\n    if (googleOptions?.serviceTier && isVertexProvider) {\n      sanitizedServiceTier = VertexServiceTierMap[googleOptions.serviceTier];\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 streamFunctionCallArguments =\n      isStreaming && isVertexProvider\n        ? (googleOptions?.streamFunctionCallArguments ?? false)\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: googleOptions?.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: sanitizedServiceTier,\n      },\n      warnings: [...warnings, ...toolWarnings],\n      providerOptionsName,\n    };\n  }\n\n  async doGenerate(\n    options: LanguageModelV3CallOptions,\n  ): Promise<LanguageModelV3GenerateResult> {\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<LanguageModelV3Content> = [];\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: 'file' as const,\n          data: part.inlineData.data,\n          mediaType: part.inlineData.mimeType,\n          providerMetadata:\n            hasThought || hasThoughtSignature\n              ? {\n                  [providerOptionsName]: {\n                    ...(hasThought ? { thought: true } : {}),\n                    ...(hasThoughtSignature\n                      ? { thoughtSignature: part.thoughtSignature }\n                      : {}),\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: LanguageModelV3CallOptions,\n  ): Promise<LanguageModelV3StreamResult> {\n    const { args, warnings, providerOptionsName } = await this.getArgs(\n      options,\n      { isStreaming: true },\n    );\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: LanguageModelV3FinishReason = {\n      unified: 'other',\n      raw: undefined,\n    };\n    let usage: GoogleGenerativeAIUsageMetadata | undefined = undefined;\n    let providerMetadata: SharedV3ProviderMetadata | 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?: SharedV3ProviderMetadata;\n    }> = [];\n\n    return {\n      stream: response.pipeThrough(\n        new TransformStream<\n          ParseResult<ChunkSchema>,\n          LanguageModelV3StreamPart\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 =\n                    hasThought || hasThoughtSignature\n                      ? {\n                          [providerOptionsName]: {\n                            ...(hasThought ? { thought: true } : {}),\n                            ...(hasThoughtSignature\n                              ? { thoughtSignature: part.thoughtSignature }\n                              : {}),\n                          },\n                        }\n                      : undefined;\n                  controller.enqueue({\n                    type: '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 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 | LanguageModelV3Source[] {\n  if (!groundingMetadata?.groundingChunks) {\n    return undefined;\n  }\n\n  const sources: LanguageModelV3Source[] = [];\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 { LanguageModelV3Usage } 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): LanguageModelV3Usage {\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  LanguageModelV3Prompt,\n  UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64 } 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: LanguageModelV3Prompt,\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              // default to image/jpeg for unknown image/* types\n              const mediaType =\n                part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n              parts.push(\n                part.data instanceof URL\n                  ? {\n                      fileData: {\n                        mimeType: mediaType,\n                        fileUri: part.data.toString(),\n                      },\n                    }\n                  : {\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 '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                    ...(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-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  | 'gemini-3.1-flash-tts-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) and only for Gemini 3+\n       * models.\n       *\n       * @default false\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\n// Vertex API requires another service tier format.\nexport const VertexServiceTierMap = {\n  standard: 'SERVICE_TIER_STANDARD',\n  flex: 'SERVICE_TIER_FLEX',\n  priority: 'SERVICE_TIER_PRIORITY',\n} as const;\n","import {\n  LanguageModelV3CallOptions,\n  SharedV3Warning,\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: LanguageModelV3CallOptions['tools'];\n  toolChoice?: LanguageModelV3CallOptions['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: SharedV3Warning[];\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: SharedV3Warning[] = [];\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 { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapGoogleGenerativeAIFinishReason({\n  finishReason,\n  hasToolCalls,\n}: {\n  finishReason: string | null | undefined;\n  hasToolCalls: boolean;\n}): LanguageModelV3FinishReason['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  ImageModelV3,\n  LanguageModelV3Prompt,\n  SharedV3Warning,\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 ImageModelV3 {\n  readonly specificationVersion = 'v3';\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<ImageModelV3['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<ImageModelV3['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<ImageModelV3['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<ImageModelV3['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<SharedV3Warning> = [];\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<ImageModelV3['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<ImageModelV3['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<SharedV3Warning> = [];\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: LanguageModelV3Prompt = [\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 Experimental_VideoModelV3,\n  type SharedV3Warning,\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_VideoModelV3 {\n  readonly specificationVersion = 'v3';\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_VideoModelV3['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n    const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n    const warnings: SharedV3Warning[] = [];\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":["generateId","lazySchema","zodSchema","z","lazySchema","zodSchema","z","responseHeaders","response","rawValue","lazySchema","zodSchema","z","combineHeaders","createJsonResponseHandler","lazySchema","parseProviderOptions","postJsonToApi","resolve","zodSchema","z","_a","_b","_c","_d","lazySchema","zodSchema","z","UnsupportedFunctionalityError","googleTools","functionDeclarations","UnsupportedFunctionalityError","parseProviderOptions","googleTools","combineHeaders","resolve","postJsonToApi","createJsonResponseHandler","generateId","args","generateId","z","lazySchema","zodSchema","z","lazySchema","zodSchema","z","createProviderToolFactory","lazySchema","zodSchema","z","createProviderToolFactory","lazySchema","zodSchema","z","createProviderToolFactory","lazySchema","zodSchema","z","createProviderToolFactory","lazySchema","zodSchema","z","createProviderToolFactory","z","combineHeaders","convertToBase64","createJsonResponseHandler","lazySchema","parseProviderOptions","postJsonToApi","resolve","zodSchema","z","parseProviderOptions","postJsonToApi","combineHeaders","resolve","createJsonResponseHandler","convertToBase64","lazySchema","zodSchema","z","combineHeaders","createJsonResponseHandler","lazySchema","parseProviderOptions","postJsonToApi","resolve","zodSchema","z","parseProviderOptions","postJsonToApi","combineHeaders","resolve","createJsonResponseHandler","z","lazySchema","zodSchema","_a","generateId"]}