@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/)
583 lines (516 loc) • 15.7 kB
text/typescript
/**
* Internal TypeScript types for the Gemini Interactions API wire format.
*
* Mirrors the public types in `googleapis/js-genai`:
* `src/interactions/resources/interactions.ts`.
*/
export type GoogleInteractionsTextContent = {
type: 'text';
text: string;
annotations?: Array<GoogleInteractionsAnnotation | { type: string }>;
};
export type GoogleInteractionsImageContent = {
type: 'image';
data?: string;
mime_type?: string;
uri?: string;
resolution?: 'low' | 'medium' | 'high' | 'ultra_high';
};
export type GoogleInteractionsAudioContent = {
type: 'audio';
data?: string;
mime_type?: string;
uri?: string;
channels?: number;
sample_rate?: number;
};
export type GoogleInteractionsDocumentContent = {
type: 'document';
data?: string;
mime_type?: string;
uri?: string;
};
export type GoogleInteractionsVideoContent = {
type: 'video';
data?: string;
mime_type?: string;
uri?: string;
resolution?: 'low' | 'medium' | 'high' | 'ultra_high';
};
export type GoogleInteractionsThoughtSummaryItem =
| GoogleInteractionsTextContent
| GoogleInteractionsImageContent;
export type GoogleInteractionsFunctionResultContent = {
type: 'function_result';
call_id: string;
result:
| string
| Array<GoogleInteractionsTextContent | GoogleInteractionsImageContent>
| unknown;
name?: string;
is_error?: boolean;
signature?: string;
};
/**
* Annotation types attached to a `text` content block:
* - `url_citation` (web) — `url` + optional `title`
* - `file_citation` — `url` for the citation target; optional `document_uri`
* / `file_name` for doc references
* - `place_citation` — Maps grounding, carries `url`
*/
export type GoogleInteractionsURLCitation = {
type: 'url_citation';
url?: string;
title?: string;
start_index?: number;
end_index?: number;
};
export type GoogleInteractionsFileCitation = {
type: 'file_citation';
file_name?: string;
document_uri?: string;
url?: string;
page_number?: number;
media_id?: string;
start_index?: number;
end_index?: number;
custom_metadata?: Record<string, unknown>;
};
export type GoogleInteractionsPlaceCitation = {
type: 'place_citation';
name?: string;
url?: string;
place_id?: string;
start_index?: number;
end_index?: number;
review_snippets?: Array<{
review_id?: string;
title?: string;
url?: string;
}>;
};
export type GoogleInteractionsAnnotation =
| GoogleInteractionsURLCitation
| GoogleInteractionsFileCitation
| GoogleInteractionsPlaceCitation;
/*
* --- Step payload shapes ---
*
* `function_call`, `thought`, and the built-in `*_call`/`*_result` are
* top-level **step** types — their fields live directly on the step object
* (no `content` indirection). The types below model those payloads; the step
* wrapper (`type` discriminator + payload) is `GoogleInteractionsStep`
* further down.
*/
export type GoogleInteractionsFunctionCallStepPayload = {
id: string;
name: string;
arguments: Record<string, unknown>;
signature?: string;
};
export type GoogleInteractionsThoughtStepPayload = {
signature?: string;
summary?: Array<GoogleInteractionsThoughtSummaryItem>;
};
export type GoogleInteractionsCodeExecutionCallStepPayload = {
id: string;
arguments?: { code?: string; language?: string };
signature?: string;
};
export type GoogleInteractionsCodeExecutionResultStepPayload = {
call_id: string;
result?: string;
is_error?: boolean;
signature?: string;
};
export type GoogleInteractionsURLContextCallStepPayload = {
id: string;
arguments?: { urls?: Array<string> };
signature?: string;
};
export type GoogleInteractionsURLContextResultEntry = {
url?: string;
status?: 'success' | 'error' | 'paywall' | 'unsafe' | string;
};
export type GoogleInteractionsURLContextResultStepPayload = {
call_id: string;
result?: Array<GoogleInteractionsURLContextResultEntry>;
is_error?: boolean;
signature?: string;
};
export type GoogleInteractionsGoogleSearchCallStepPayload = {
id: string;
arguments?: { queries?: Array<string> };
search_type?: 'web_search' | 'image_search' | 'enterprise_web_search';
signature?: string;
};
export type GoogleInteractionsGoogleSearchResultEntry = {
search_suggestions?: string;
url?: string;
title?: string;
};
export type GoogleInteractionsGoogleSearchResultStepPayload = {
call_id: string;
result?: Array<GoogleInteractionsGoogleSearchResultEntry>;
is_error?: boolean;
signature?: string;
};
export type GoogleInteractionsFileSearchCallStepPayload = {
id: string;
signature?: string;
};
export type GoogleInteractionsFileSearchResultStepPayload = {
call_id: string;
result?: Array<unknown>;
signature?: string;
};
export type GoogleInteractionsGoogleMapsCallStepPayload = {
id: string;
arguments?: { queries?: Array<string> };
signature?: string;
};
export type GoogleInteractionsGoogleMapsResultPlace = {
name?: string;
place_id?: string;
url?: string;
review_snippets?: Array<{
review_id?: string;
title?: string;
url?: string;
}>;
};
export type GoogleInteractionsGoogleMapsResultEntry = {
places?: Array<GoogleInteractionsGoogleMapsResultPlace>;
widget_context_token?: string;
};
export type GoogleInteractionsGoogleMapsResultStepPayload = {
call_id: string;
result?: Array<GoogleInteractionsGoogleMapsResultEntry>;
signature?: string;
};
export type GoogleInteractionsMCPServerToolCallStepPayload = {
id: string;
name: string;
server_name: string;
arguments?: Record<string, unknown>;
signature?: string;
};
export type GoogleInteractionsMCPServerToolResultStepPayload = {
call_id: string;
result?: unknown;
name?: string;
server_name?: string;
signature?: string;
};
/*
* Discriminated step union — the elements of `response.steps[]` and the
* `step` field on `step.start` SSE events.
*/
export type GoogleInteractionsModelOutputStep = {
type: 'model_output';
content?: Array<GoogleInteractionsContentBlock>;
};
export type GoogleInteractionsUserInputStep = {
type: 'user_input';
content?: Array<GoogleInteractionsContentBlock>;
};
export type GoogleInteractionsFunctionCallStep = {
type: 'function_call';
} & GoogleInteractionsFunctionCallStepPayload;
export type GoogleInteractionsThoughtStep = {
type: 'thought';
} & GoogleInteractionsThoughtStepPayload;
export type GoogleInteractionsBuiltinToolCallStep =
| ({
type: 'google_search_call';
} & GoogleInteractionsGoogleSearchCallStepPayload)
| ({
type: 'code_execution_call';
} & GoogleInteractionsCodeExecutionCallStepPayload)
| ({ type: 'url_context_call' } & GoogleInteractionsURLContextCallStepPayload)
| ({ type: 'file_search_call' } & GoogleInteractionsFileSearchCallStepPayload)
| ({ type: 'google_maps_call' } & GoogleInteractionsGoogleMapsCallStepPayload)
| ({
type: 'mcp_server_tool_call';
} & GoogleInteractionsMCPServerToolCallStepPayload);
export type GoogleInteractionsBuiltinToolResultStep =
| ({
type: 'google_search_result';
} & GoogleInteractionsGoogleSearchResultStepPayload)
| ({
type: 'code_execution_result';
} & GoogleInteractionsCodeExecutionResultStepPayload)
| ({
type: 'url_context_result';
} & GoogleInteractionsURLContextResultStepPayload)
| ({
type: 'file_search_result';
} & GoogleInteractionsFileSearchResultStepPayload)
| ({
type: 'google_maps_result';
} & GoogleInteractionsGoogleMapsResultStepPayload)
| ({
type: 'mcp_server_tool_result';
} & GoogleInteractionsMCPServerToolResultStepPayload);
export type GoogleInteractionsStep =
| GoogleInteractionsUserInputStep
| GoogleInteractionsModelOutputStep
| GoogleInteractionsFunctionCallStep
| GoogleInteractionsThoughtStep
| GoogleInteractionsBuiltinToolCallStep
| GoogleInteractionsBuiltinToolResultStep
| { type: string; [k: string]: unknown };
/*
* Inner content-block types (what lives inside `model_output.content[]` and
* `user_input.content[]`). Function calls, thoughts, and built-in tool
* call/result blocks are steps, not content blocks.
*/
export type GoogleInteractionsContentBlock =
| GoogleInteractionsTextContent
| GoogleInteractionsImageContent
| GoogleInteractionsAudioContent
| GoogleInteractionsDocumentContent
| GoogleInteractionsVideoContent
| GoogleInteractionsFunctionResultContent
| { type: string; [k: string]: unknown };
/**
* Alias kept for the file-part converter surface; identical to
* `GoogleInteractionsContentBlock`.
*/
export type GoogleInteractionsContent = GoogleInteractionsContentBlock;
/*
* `input` is an array of steps. A single-turn user prompt is sent as
* `[{ type: 'user_input', content: [...] }]`.
*/
export type GoogleInteractionsInput = Array<GoogleInteractionsStep>;
export type GoogleInteractionsTool =
| {
type: 'function';
name?: string;
description?: string;
parameters?: unknown;
}
| { type: 'code_execution' }
| { type: 'url_context' }
| {
type: 'computer_use';
environment?: 'browser';
excludedPredefinedFunctions?: Array<string>;
}
| {
type: 'mcp_server';
name?: string;
url?: string;
headers?: Record<string, string>;
allowed_tools?: Array<unknown>;
}
| {
type: 'google_search';
search_types?: Array<
'web_search' | 'image_search' | 'enterprise_web_search'
>;
}
| {
type: 'file_search';
file_search_store_names?: Array<string>;
metadata_filter?: string;
top_k?: number;
}
| {
type: 'google_maps';
enable_widget?: boolean;
latitude?: number;
longitude?: number;
}
| {
type: 'retrieval';
retrieval_types?: Array<'vertex_ai_search'>;
vertex_ai_search_config?: {
datastores?: Array<string>;
engine?: string;
};
};
export type GoogleInteractionsToolChoiceType =
| 'auto'
| 'any'
| 'none'
| 'validated';
export type GoogleInteractionsAllowedToolsConfig = {
allowed_tools?: {
mode?: GoogleInteractionsToolChoiceType;
tools?: Array<string>;
};
};
export type GoogleInteractionsToolChoice =
| GoogleInteractionsToolChoiceType
| GoogleInteractionsAllowedToolsConfig;
export type GoogleInteractionsThinkingLevel =
| 'minimal'
| 'low'
| 'medium'
| 'high';
export type GoogleInteractionsThinkingSummaries = 'auto' | 'none';
export type GoogleInteractionsResponseModality =
| 'text'
| 'image'
| 'audio'
| 'video'
| 'document';
export type GoogleInteractionsServiceTier = 'flex' | 'standard' | 'priority';
export type GoogleInteractionsAspectRatio =
| '1:1'
| '2:3'
| '3:2'
| '3:4'
| '4:3'
| '4:5'
| '5:4'
| '9:16'
| '16:9'
| '21:9'
| '1:8'
| '8:1'
| '1:4'
| '4:1';
export type GoogleInteractionsImageSize = '1K' | '2K' | '4K' | '512';
/*
* `response_format` is a polymorphic entry. Multiple modalities are requested
* by sending an array of entries. Entries the SDK constructs:
*
* { type: 'text', mime_type: 'application/json', schema: <JSONSchema> }
* -- structured output (JSON mode). `mime_type` is required; `schema` is
* optional but recommended.
*
* { type: 'image', mime_type, aspect_ratio?, image_size? }
* -- image generation. `mime_type` defaults to `image/png`.
*/
export type GoogleInteractionsResponseFormatTextEntry = {
type: 'text';
mime_type?: string;
schema?: unknown;
};
export type GoogleInteractionsResponseFormatImageEntry = {
type: 'image';
mime_type?: string;
aspect_ratio?: GoogleInteractionsAspectRatio;
image_size?: GoogleInteractionsImageSize;
};
export type GoogleInteractionsResponseFormatAudioEntry = {
type: 'audio';
mime_type?: string;
};
export type GoogleInteractionsResponseFormatEntry =
| GoogleInteractionsResponseFormatTextEntry
| GoogleInteractionsResponseFormatImageEntry
| GoogleInteractionsResponseFormatAudioEntry;
export type GoogleInteractionsGenerationConfig = {
temperature?: number;
top_p?: number;
seed?: number;
stop_sequences?: Array<string>;
max_output_tokens?: number;
thinking_level?: GoogleInteractionsThinkingLevel;
thinking_summaries?: GoogleInteractionsThinkingSummaries;
tool_choice?: GoogleInteractionsToolChoice;
};
export type GoogleInteractionsAgentConfig =
| { type: 'dynamic'; [k: string]: unknown }
| {
type: 'deep-research';
thinking_summaries?: GoogleInteractionsThinkingSummaries;
visualization?: 'off' | 'auto';
collaborative_planning?: boolean;
};
export type GoogleInteractionsGcsSource = {
type: 'gcs';
source: string;
target?: string;
};
export type GoogleInteractionsRepositorySource = {
type: 'repository';
source: string;
target?: string;
};
export type GoogleInteractionsInlineSource = {
type: 'inline';
content: string;
target: string;
};
export type GoogleInteractionsEnvironmentSource =
| GoogleInteractionsGcsSource
| GoogleInteractionsRepositorySource
| GoogleInteractionsInlineSource;
export type GoogleInteractionsNetworkAllowlistEntry = {
domain: string;
transform?: Array<Record<string, string>>;
};
export type GoogleInteractionsNetworkConfig =
| 'disabled'
| { allowlist: Array<GoogleInteractionsNetworkAllowlistEntry> };
/**
* Environment configuration for the agent sandbox.
*
* - `"remote"`: provision a fresh sandbox for this call.
* - any other string: an existing `environment_id` to reuse (forks the
* previous sandbox so its filesystem and installed packages persist).
* - object form: provision a fresh sandbox and preload it with `sources`
* and/or constrain outbound traffic via `network`.
*/
export type GoogleInteractionsEnvironment =
| string
| {
type: 'remote';
sources?: Array<GoogleInteractionsEnvironmentSource>;
network?: GoogleInteractionsNetworkConfig;
};
export type GoogleInteractionsRequestBody = {
model?: string;
agent?: string;
input: GoogleInteractionsInput;
system_instruction?: string;
tools?: Array<GoogleInteractionsTool>;
response_format?: Array<GoogleInteractionsResponseFormatEntry>;
response_modalities?: Array<GoogleInteractionsResponseModality>;
generation_config?: GoogleInteractionsGenerationConfig;
agent_config?: GoogleInteractionsAgentConfig;
previous_interaction_id?: string;
service_tier?: GoogleInteractionsServiceTier;
store?: boolean;
stream?: boolean;
environment?: GoogleInteractionsEnvironment;
/**
* Run the interaction in the background. The POST returns immediately with a
* non-terminal status (`in_progress` / `requires_action`); the client must
* poll `GET /interactions/{id}` until terminal.
*
* Required for agent calls -- the API returns
* `background=true is required for agent interactions.` otherwise. Not used
* for model-id calls.
*/
background?: boolean;
};
export type GoogleInteractionsStatus =
| 'in_progress'
| 'requires_action'
| 'completed'
| 'failed'
| 'cancelled'
| 'incomplete';
/*
* Aliases used by the source extractor; structurally equivalent to their
* step-payload counterparts.
*/
export type GoogleInteractionsBuiltinToolResultContent =
GoogleInteractionsBuiltinToolResultStep;
export type GoogleInteractionsGoogleSearchResultContent = Extract<
GoogleInteractionsBuiltinToolResultStep,
{ type: 'google_search_result' }
>;
export type GoogleInteractionsGoogleMapsResultContent = Extract<
GoogleInteractionsBuiltinToolResultStep,
{ type: 'google_maps_result' }
>;
export type GoogleInteractionsURLContextResultContent = Extract<
GoogleInteractionsBuiltinToolResultStep,
{ type: 'url_context_result' }
>;