UNPKG

@ai-sdk/google

Version:

The **[Google Generative AI provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)** for the [AI SDK](https://ai-sdk.dev/docs) contains language model support for the [Google Generative AI](https://ai.google/discover/generativeai/)

263 lines (258 loc) 13 kB
import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils'; import { Resolvable, FetchFunction, InferSchema } from '@ai-sdk/provider-utils'; import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult } from '@ai-sdk/provider'; import { z } from 'zod/v4'; type GoogleGenerativeAIModelId = 'gemini-1.5-flash' | 'gemini-1.5-flash-latest' | 'gemini-1.5-flash-001' | 'gemini-1.5-flash-002' | 'gemini-1.5-flash-8b' | 'gemini-1.5-flash-8b-latest' | 'gemini-1.5-flash-8b-001' | 'gemini-1.5-pro' | 'gemini-1.5-pro-latest' | 'gemini-1.5-pro-001' | 'gemini-1.5-pro-002' | 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-live-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash-thinking-exp-01-21' | 'gemini-2.0-flash-exp' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image-preview' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-lite-preview-09-2025' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.5-flash-preview-09-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'gemini-2.5-pro-exp-03-25' | 'gemini-exp-1206' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); type GoogleGenerativeAIConfig = { provider: string; baseURL: string; headers: Resolvable<Record<string, string | undefined>>; fetch?: FetchFunction; generateId: () => string; /** * The supported URLs for the model. */ supportedUrls?: () => LanguageModelV3['supportedUrls']; }; declare class GoogleGenerativeAILanguageModel implements LanguageModelV3 { readonly specificationVersion = "v3"; readonly modelId: GoogleGenerativeAIModelId; private readonly config; private readonly generateId; constructor(modelId: GoogleGenerativeAIModelId, config: GoogleGenerativeAIConfig); get provider(): string; get supportedUrls(): Record<string, RegExp[]> | PromiseLike<Record<string, RegExp[]>>; private getArgs; doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult>; doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult>; } declare const getGroundingMetadataSchema: () => z.ZodObject<{ webSearchQueries: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>; retrievalQueries: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>; searchEntryPoint: z.ZodOptional<z.ZodNullable<z.ZodObject<{ renderedContent: z.ZodString; }, z.core.$strip>>>; groundingChunks: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{ web: z.ZodOptional<z.ZodNullable<z.ZodObject<{ uri: z.ZodString; title: z.ZodOptional<z.ZodNullable<z.ZodString>>; }, z.core.$strip>>>; retrievedContext: z.ZodOptional<z.ZodNullable<z.ZodObject<{ uri: z.ZodOptional<z.ZodNullable<z.ZodString>>; title: z.ZodOptional<z.ZodNullable<z.ZodString>>; text: z.ZodOptional<z.ZodNullable<z.ZodString>>; fileSearchStore: z.ZodOptional<z.ZodNullable<z.ZodString>>; }, z.core.$strip>>>; maps: z.ZodOptional<z.ZodNullable<z.ZodObject<{ uri: z.ZodOptional<z.ZodNullable<z.ZodString>>; title: z.ZodOptional<z.ZodNullable<z.ZodString>>; text: z.ZodOptional<z.ZodNullable<z.ZodString>>; placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>; }, z.core.$strip>>>; }, z.core.$strip>>>>; groundingSupports: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{ segment: z.ZodObject<{ startIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>; endIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>; text: z.ZodOptional<z.ZodNullable<z.ZodString>>; }, z.core.$strip>; segment_text: z.ZodOptional<z.ZodNullable<z.ZodString>>; groundingChunkIndices: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodNumber>>>; supportChunkIndices: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodNumber>>>; confidenceScores: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodNumber>>>; confidenceScore: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodNumber>>>; }, z.core.$strip>>>>; retrievalMetadata: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodObject<{ webDynamicRetrievalScore: z.ZodNumber; }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>>; }, z.core.$strip>; declare const getUrlContextMetadataSchema: () => z.ZodObject<{ urlMetadata: z.ZodArray<z.ZodObject<{ retrievedUrl: z.ZodString; urlRetrievalStatus: z.ZodString; }, z.core.$strip>>; }, z.core.$strip>; declare const responseSchema: _ai_sdk_provider_utils.LazySchema<{ candidates: { content?: Record<string, never> | { parts?: ({ functionCall: { name: string; args: unknown; }; thoughtSignature?: string | null | undefined; } | { inlineData: { mimeType: string; data: string; }; thoughtSignature?: string | null | undefined; } | { executableCode?: { language: string; code: string; } | null | undefined; codeExecutionResult?: { outcome: string; output: string; } | null | undefined; text?: string | null | undefined; thought?: boolean | null | undefined; thoughtSignature?: string | null | undefined; })[] | null | undefined; } | null | undefined; finishReason?: string | null | undefined; safetyRatings?: { category?: string | null | undefined; probability?: string | null | undefined; probabilityScore?: number | null | undefined; severity?: string | null | undefined; severityScore?: number | null | undefined; blocked?: boolean | null | undefined; }[] | null | undefined; groundingMetadata?: { webSearchQueries?: string[] | null | undefined; retrievalQueries?: string[] | null | undefined; searchEntryPoint?: { renderedContent: string; } | null | undefined; groundingChunks?: { web?: { uri: string; title?: string | null | undefined; } | null | undefined; retrievedContext?: { uri?: string | null | undefined; title?: string | null | undefined; text?: string | null | undefined; fileSearchStore?: string | null | undefined; } | null | undefined; maps?: { uri?: string | null | undefined; title?: string | null | undefined; text?: string | null | undefined; placeId?: string | null | undefined; } | null | undefined; }[] | null | undefined; groundingSupports?: { segment: { startIndex?: number | null | undefined; endIndex?: number | null | undefined; text?: string | null | undefined; }; segment_text?: string | null | undefined; groundingChunkIndices?: number[] | null | undefined; supportChunkIndices?: number[] | null | undefined; confidenceScores?: number[] | null | undefined; confidenceScore?: number[] | null | undefined; }[] | null | undefined; retrievalMetadata?: Record<string, never> | { webDynamicRetrievalScore: number; } | null | undefined; } | null | undefined; urlContextMetadata?: { urlMetadata: { retrievedUrl: string; urlRetrievalStatus: string; }[]; } | null | undefined; }[]; usageMetadata?: { cachedContentTokenCount?: number | null | undefined; thoughtsTokenCount?: number | null | undefined; promptTokenCount?: number | null | undefined; candidatesTokenCount?: number | null | undefined; totalTokenCount?: number | null | undefined; trafficType?: string | null | undefined; } | null | undefined; promptFeedback?: { blockReason?: string | null | undefined; safetyRatings?: { category?: string | null | undefined; probability?: string | null | undefined; probabilityScore?: number | null | undefined; severity?: string | null | undefined; severityScore?: number | null | undefined; blocked?: boolean | null | undefined; }[] | null | undefined; } | null | undefined; }>; type GroundingMetadataSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']>; type UrlContextMetadataSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['urlContextMetadata']>; type SafetyRatingSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['safetyRatings']>[number]; declare const googleTools: { /** * Creates a Google search tool that gives Google direct access to real-time web content. * Must have name "google_search". */ googleSearch: _ai_sdk_provider_utils.ProviderToolFactory<{}, { mode?: "MODE_DYNAMIC" | "MODE_UNSPECIFIED"; dynamicThreshold?: number; }>; /** * Creates an Enterprise Web Search tool for grounding responses using a compliance-focused web index. * Designed for highly-regulated industries (finance, healthcare, public sector). * Does not log customer data and supports VPC service controls. * Must have name "enterprise_web_search". * * @note Only available on Vertex AI. Requires Gemini 2.0 or newer. * * @see https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/web-grounding-enterprise */ enterpriseWebSearch: _ai_sdk_provider_utils.ProviderToolFactory<{}, {}>; /** * Creates a Google Maps grounding tool that gives the model access to Google Maps data. * Must have name "google_maps". * * @see https://ai.google.dev/gemini-api/docs/maps-grounding * @see https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-maps */ googleMaps: _ai_sdk_provider_utils.ProviderToolFactory<{}, {}>; /** * Creates a URL context tool that gives Google direct access to real-time web content. * Must have name "url_context". */ urlContext: _ai_sdk_provider_utils.ProviderToolFactory<{}, {}>; /** * Enables Retrieval Augmented Generation (RAG) via the Gemini File Search tool. * Must have name "file_search". * * @param fileSearchStoreNames - Fully-qualified File Search store resource names. * @param metadataFilter - Optional filter expression to restrict the files that can be retrieved. * @param topK - Optional result limit for the number of chunks returned from File Search. * * @see https://ai.google.dev/gemini-api/docs/file-search */ fileSearch: _ai_sdk_provider_utils.ProviderToolFactory<{}, { [x: string]: unknown; fileSearchStoreNames: string[]; topK?: number | undefined; metadataFilter?: string | undefined; }>; /** * A tool that enables the model to generate and run Python code. * Must have name "code_execution". * * @note Ensure the selected model supports Code Execution. * Multi-tool usage with the code execution tool is typically compatible with Gemini >=2 models. * * @see https://ai.google.dev/gemini-api/docs/code-execution (Google AI) * @see https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/code-execution-api (Vertex AI) */ codeExecution: _ai_sdk_provider_utils.ProviderToolFactoryWithOutputSchema<{ language: string; code: string; }, { outcome: string; output: string; }, {}>; /** * Creates a Vertex RAG Store tool that enables the model to perform RAG searches against a Vertex RAG Store. * Must have name "vertex_rag_store". */ vertexRagStore: _ai_sdk_provider_utils.ProviderToolFactory<{}, { ragCorpus: string; topK?: number; }>; }; export { GoogleGenerativeAILanguageModel, type GoogleGenerativeAIModelId, type GroundingMetadataSchema, type SafetyRatingSchema, type UrlContextMetadataSchema, getGroundingMetadataSchema, getUrlContextMetadataSchema, googleTools };