@ai-sdk/google
Advanced tools
+13
-0
| # @ai-sdk/google | ||
| ## 3.0.77 | ||
| ### Patch Changes | ||
| - 0f9f9bf: feat(google): read `serviceTier` from `x-gemini-service-tier` response header in Gemini API and use PayGo for Vertex | ||
| ## 3.0.76 | ||
| ### Patch Changes | ||
| - f259bd1: fix(google): fix streaming tool call args | ||
| - 756fec1: feat(provider/google): add `gemini-3.5-flash` | ||
| ## 3.0.75 | ||
@@ -4,0 +17,0 @@ |
+39
-12
@@ -14,3 +14,3 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils'; | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
| declare const googleLanguageModelOptions: _ai_sdk_provider_utils.LazySchema<{ | ||
@@ -45,2 +45,4 @@ responseModalities?: ("TEXT" | "IMAGE")[] | undefined; | ||
| serviceTier?: "standard" | "flex" | "priority" | undefined; | ||
| sharedRequestType?: "standard" | "flex" | "priority" | undefined; | ||
| requestType?: "shared" | undefined; | ||
| }>; | ||
@@ -194,3 +196,2 @@ type GoogleLanguageModelOptions = InferSchema<typeof googleLanguageModelOptions>; | ||
| } | null | undefined; | ||
| serviceTier?: string | null | undefined; | ||
| }>; | ||
@@ -275,3 +276,3 @@ type GroundingMetadataSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']>; | ||
| */ | ||
| type GoogleInteractionsModelId = 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-lite-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-flash-preview-09-2025' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro' | 'gemini-2.5-pro-preview-tts' | 'gemini-3-flash-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-pro-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'lyria-3-clip-preview' | 'lyria-3-pro-preview' | (string & {}); | ||
| type GoogleInteractionsModelId = 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-lite-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-flash-preview-09-2025' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro' | 'gemini-2.5-pro-preview-tts' | 'gemini-3-flash-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-pro-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'lyria-3-clip-preview' | 'lyria-3-pro-preview' | (string & {}); | ||
| /** | ||
@@ -326,2 +327,25 @@ * Provider-options schema for `google.interactions(...)` calls. Read from the | ||
| pollingTimeoutMs?: number | null | undefined; | ||
| background?: boolean | null | undefined; | ||
| environment?: string | { | ||
| type: "remote"; | ||
| sources?: ({ | ||
| type: "gcs"; | ||
| source: string; | ||
| target?: string | null | undefined; | ||
| } | { | ||
| type: "repository"; | ||
| source: string; | ||
| target?: string | null | undefined; | ||
| } | { | ||
| type: "inline"; | ||
| content: string; | ||
| target: string; | ||
| })[] | null | undefined; | ||
| network?: "disabled" | { | ||
| allowlist: { | ||
| domain: string; | ||
| transform?: Record<string, string>[] | null | undefined; | ||
| }[]; | ||
| } | null | undefined; | ||
| } | null | undefined; | ||
| }>; | ||
@@ -356,10 +380,8 @@ type GoogleLanguageModelInteractionsOptions = InferSchema<typeof googleInteractionsLanguageModelOptions>; | ||
| * | ||
| * Sourced from `googleapis/js-genai` `src/interactions/resources/interactions.ts` | ||
| * (`Interaction.agent` enum). Subject to expansion as Google adds new agents. | ||
| * | ||
| * This is a strict string-literal union (no `string` escape hatch) so that | ||
| * passing an unknown agent name is a compile-time error. Add new agents here | ||
| * as Google publishes them. | ||
| * Strict string-literal union: unknown agent names are a compile-time error. | ||
| * User-defined agents (created via the `/agents` endpoint) are addressed by | ||
| * a separate `{ managedAgent: string }` factory shape — see | ||
| * `GoogleInteractionsModelInput`. | ||
| */ | ||
| type GoogleInteractionsAgentName = 'deep-research-pro-preview-12-2025' | 'deep-research-preview-04-2026' | 'deep-research-max-preview-04-2026'; | ||
| type GoogleInteractionsAgentName = 'deep-research-pro-preview-12-2025' | 'deep-research-preview-04-2026' | 'deep-research-max-preview-04-2026' | 'antigravity-preview-05-2026'; | ||
@@ -487,7 +509,12 @@ declare const googleTools: { | ||
| * Creates a language model targeting the Gemini Interactions API | ||
| * (`POST /v1beta/interactions`). Pass either a model ID (string) or | ||
| * `{ agent: <name> }` to use a Gemini agent preset. | ||
| * (`POST /v1beta/interactions`). Pass: | ||
| * - a model ID (string), | ||
| * - `{ agent: <name> }` to use a known Gemini agent preset, or | ||
| * - `{ managedAgent: <name> }` to use a user-defined agent created via | ||
| * the `/v1beta/agents` endpoint. | ||
| */ | ||
| interactions(modelIdOrAgent: GoogleInteractionsModelId | { | ||
| agent: GoogleInteractionsAgentName; | ||
| } | { | ||
| managedAgent: string; | ||
| }): LanguageModelV3; | ||
@@ -494,0 +521,0 @@ tools: typeof googleTools; |
+39
-12
@@ -14,3 +14,3 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils'; | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
| declare const googleLanguageModelOptions: _ai_sdk_provider_utils.LazySchema<{ | ||
@@ -45,2 +45,4 @@ responseModalities?: ("TEXT" | "IMAGE")[] | undefined; | ||
| serviceTier?: "standard" | "flex" | "priority" | undefined; | ||
| sharedRequestType?: "standard" | "flex" | "priority" | undefined; | ||
| requestType?: "shared" | undefined; | ||
| }>; | ||
@@ -194,3 +196,2 @@ type GoogleLanguageModelOptions = InferSchema<typeof googleLanguageModelOptions>; | ||
| } | null | undefined; | ||
| serviceTier?: string | null | undefined; | ||
| }>; | ||
@@ -275,3 +276,3 @@ type GroundingMetadataSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']>; | ||
| */ | ||
| type GoogleInteractionsModelId = 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-lite-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-flash-preview-09-2025' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro' | 'gemini-2.5-pro-preview-tts' | 'gemini-3-flash-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-pro-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'lyria-3-clip-preview' | 'lyria-3-pro-preview' | (string & {}); | ||
| type GoogleInteractionsModelId = 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-lite-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-flash-preview-09-2025' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro' | 'gemini-2.5-pro-preview-tts' | 'gemini-3-flash-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-pro-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'lyria-3-clip-preview' | 'lyria-3-pro-preview' | (string & {}); | ||
| /** | ||
@@ -326,2 +327,25 @@ * Provider-options schema for `google.interactions(...)` calls. Read from the | ||
| pollingTimeoutMs?: number | null | undefined; | ||
| background?: boolean | null | undefined; | ||
| environment?: string | { | ||
| type: "remote"; | ||
| sources?: ({ | ||
| type: "gcs"; | ||
| source: string; | ||
| target?: string | null | undefined; | ||
| } | { | ||
| type: "repository"; | ||
| source: string; | ||
| target?: string | null | undefined; | ||
| } | { | ||
| type: "inline"; | ||
| content: string; | ||
| target: string; | ||
| })[] | null | undefined; | ||
| network?: "disabled" | { | ||
| allowlist: { | ||
| domain: string; | ||
| transform?: Record<string, string>[] | null | undefined; | ||
| }[]; | ||
| } | null | undefined; | ||
| } | null | undefined; | ||
| }>; | ||
@@ -356,10 +380,8 @@ type GoogleLanguageModelInteractionsOptions = InferSchema<typeof googleInteractionsLanguageModelOptions>; | ||
| * | ||
| * Sourced from `googleapis/js-genai` `src/interactions/resources/interactions.ts` | ||
| * (`Interaction.agent` enum). Subject to expansion as Google adds new agents. | ||
| * | ||
| * This is a strict string-literal union (no `string` escape hatch) so that | ||
| * passing an unknown agent name is a compile-time error. Add new agents here | ||
| * as Google publishes them. | ||
| * Strict string-literal union: unknown agent names are a compile-time error. | ||
| * User-defined agents (created via the `/agents` endpoint) are addressed by | ||
| * a separate `{ managedAgent: string }` factory shape — see | ||
| * `GoogleInteractionsModelInput`. | ||
| */ | ||
| type GoogleInteractionsAgentName = 'deep-research-pro-preview-12-2025' | 'deep-research-preview-04-2026' | 'deep-research-max-preview-04-2026'; | ||
| type GoogleInteractionsAgentName = 'deep-research-pro-preview-12-2025' | 'deep-research-preview-04-2026' | 'deep-research-max-preview-04-2026' | 'antigravity-preview-05-2026'; | ||
@@ -487,7 +509,12 @@ declare const googleTools: { | ||
| * Creates a language model targeting the Gemini Interactions API | ||
| * (`POST /v1beta/interactions`). Pass either a model ID (string) or | ||
| * `{ agent: <name> }` to use a Gemini agent preset. | ||
| * (`POST /v1beta/interactions`). Pass: | ||
| * - a model ID (string), | ||
| * - `{ agent: <name> }` to use a known Gemini agent preset, or | ||
| * - `{ managedAgent: <name> }` to use a user-defined agent created via | ||
| * the `/v1beta/agents` endpoint. | ||
| */ | ||
| interactions(modelIdOrAgent: GoogleInteractionsModelId | { | ||
| agent: GoogleInteractionsAgentName; | ||
| } | { | ||
| managedAgent: string; | ||
| }): LanguageModelV3; | ||
@@ -494,0 +521,0 @@ tools: typeof googleTools; |
@@ -6,3 +6,3 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils'; | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
@@ -230,3 +230,2 @@ type GoogleGenerativeAIConfig = { | ||
| } | null | undefined; | ||
| serviceTier?: string | null | undefined; | ||
| }>; | ||
@@ -233,0 +232,0 @@ type GroundingMetadataSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']>; |
@@ -6,3 +6,3 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils'; | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
| type GoogleGenerativeAIModelId = 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-lite-001' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-image' | 'gemini-2.5-flash-lite' | 'gemini-2.5-flash-preview-tts' | 'gemini-2.5-pro-preview-tts' | 'gemini-2.5-flash-native-audio-latest' | 'gemini-2.5-flash-native-audio-preview-09-2025' | 'gemini-2.5-flash-native-audio-preview-12-2025' | 'gemini-2.5-computer-use-preview-10-2025' | 'gemini-3-pro-preview' | 'gemini-3-pro-image-preview' | 'gemini-3-flash-preview' | 'gemini-3.1-pro-preview' | 'gemini-3.1-pro-preview-customtools' | 'gemini-3.1-flash-image-preview' | 'gemini-3.1-flash-lite-preview' | 'gemini-3.1-flash-tts-preview' | 'gemini-3.5-flash' | 'gemini-pro-latest' | 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'deep-research-pro-preview-12-2025' | 'nano-banana-pro-preview' | 'aqa' | 'gemini-robotics-er-1.5-preview' | 'gemma-3-1b-it' | 'gemma-3-4b-it' | 'gemma-3n-e4b-it' | 'gemma-3n-e2b-it' | 'gemma-3-12b-it' | 'gemma-3-27b-it' | (string & {}); | ||
@@ -230,3 +230,2 @@ type GoogleGenerativeAIConfig = { | ||
| } | null | undefined; | ||
| serviceTier?: string | null | undefined; | ||
| }>; | ||
@@ -233,0 +232,0 @@ type GroundingMetadataSchema = NonNullable<InferSchema<typeof responseSchema>['candidates'][number]['groundingMetadata']>; |
+1
-1
| { | ||
| "name": "@ai-sdk/google", | ||
| "version": "3.0.75", | ||
| "version": "3.0.77", | ||
| "license": "Apache-2.0", | ||
@@ -5,0 +5,0 @@ "sideEffects": false, |
@@ -40,3 +40,2 @@ import type { | ||
| googleLanguageModelOptions, | ||
| VertexServiceTierMap, | ||
| type GoogleGenerativeAIModelId, | ||
@@ -159,8 +158,40 @@ } from './google-generative-ai-options'; | ||
| // Vertex API requires another service tier format. | ||
| let sanitizedServiceTier: string | undefined = googleOptions?.serviceTier; | ||
| if (googleOptions?.serviceTier && isVertexProvider) { | ||
| sanitizedServiceTier = VertexServiceTierMap[googleOptions.serviceTier]; | ||
| warnings.push({ | ||
| type: 'other', | ||
| message: | ||
| "'serviceTier' is a Gemini API option and is not supported on Vertex AI. " + | ||
| "Use 'sharedRequestType' (and optionally 'requestType') instead. See " + | ||
| 'https://docs.cloud.google.com/vertex-ai/generative-ai/docs/priority-paygo', | ||
| }); | ||
| } | ||
| if ( | ||
| (googleOptions?.sharedRequestType || googleOptions?.requestType) && | ||
| !isVertexProvider | ||
| ) { | ||
| warnings.push({ | ||
| type: 'other', | ||
| message: | ||
| "'sharedRequestType' and 'requestType' are Vertex AI options and " + | ||
| `are ignored with the current Google provider (${this.config.provider}).`, | ||
| }); | ||
| } | ||
| const vertexPaygoHeaders: Record<string, string> | undefined = | ||
| isVertexProvider && | ||
| (googleOptions?.sharedRequestType || googleOptions?.requestType) | ||
| ? { | ||
| ...(googleOptions.sharedRequestType && { | ||
| 'X-Vertex-AI-LLM-Shared-Request-Type': | ||
| googleOptions.sharedRequestType, | ||
| }), | ||
| ...(googleOptions.requestType && { | ||
| 'X-Vertex-AI-LLM-Request-Type': googleOptions.requestType, | ||
| }), | ||
| } | ||
| : undefined; | ||
| const bodyServiceTier = isVertexProvider | ||
| ? undefined | ||
| : googleOptions?.serviceTier; | ||
| const isGemmaModel = this.modelId.toLowerCase().startsWith('gemma-'); | ||
@@ -258,6 +289,7 @@ const supportsFunctionResponseParts = this.modelId.startsWith('gemini-3'); | ||
| labels: googleOptions?.labels, | ||
| serviceTier: sanitizedServiceTier, | ||
| serviceTier: bodyServiceTier, | ||
| }, | ||
| warnings: [...warnings, ...toolWarnings], | ||
| providerOptionsName, | ||
| extraHeaders: vertexPaygoHeaders, | ||
| }; | ||
@@ -269,3 +301,4 @@ } | ||
| ): Promise<LanguageModelV3GenerateResult> { | ||
| const { args, warnings, providerOptionsName } = await this.getArgs(options); | ||
| const { args, warnings, providerOptionsName, extraHeaders } = | ||
| await this.getArgs(options); | ||
@@ -275,2 +308,3 @@ const mergedHeaders = combineHeaders( | ||
| options.headers, | ||
| extraHeaders, | ||
| ); | ||
@@ -472,3 +506,3 @@ | ||
| finishMessage: candidate.finishMessage ?? null, | ||
| serviceTier: response.serviceTier ?? null, | ||
| serviceTier: responseHeaders?.['x-gemini-service-tier'] ?? null, | ||
| } satisfies GoogleGenerativeAIProviderMetadata, | ||
@@ -488,6 +522,4 @@ }, | ||
| ): Promise<LanguageModelV3StreamResult> { | ||
| const { args, warnings, providerOptionsName } = await this.getArgs( | ||
| options, | ||
| { isStreaming: true }, | ||
| ); | ||
| const { args, warnings, providerOptionsName, extraHeaders } = | ||
| await this.getArgs(options, { isStreaming: true }); | ||
@@ -497,2 +529,3 @@ const headers = combineHeaders( | ||
| options.headers, | ||
| extraHeaders, | ||
| ); | ||
@@ -520,3 +553,4 @@ | ||
| let lastUrlContextMetadata: UrlContextMetadataSchema | null = null; | ||
| let serviceTier: string | null = null; | ||
| const serviceTier: string | null = | ||
| responseHeaders?.['x-gemini-service-tier'] ?? null; | ||
@@ -545,2 +579,38 @@ const generateId = this.config.generateId; | ||
| const finishActiveStreamingToolCall = ( | ||
| controller: TransformStreamDefaultController<LanguageModelV3StreamPart>, | ||
| ) => { | ||
| const active = activeStreamingToolCalls.pop(); | ||
| if (active == null) { | ||
| return; | ||
| } | ||
| const { finalJSON, closingDelta } = active.accumulator.finalize(); | ||
| if (closingDelta.length > 0) { | ||
| controller.enqueue({ | ||
| type: 'tool-input-delta', | ||
| id: active.toolCallId, | ||
| delta: closingDelta, | ||
| providerMetadata: active.providerMetadata, | ||
| }); | ||
| } | ||
| controller.enqueue({ | ||
| type: 'tool-input-end', | ||
| id: active.toolCallId, | ||
| providerMetadata: active.providerMetadata, | ||
| }); | ||
| controller.enqueue({ | ||
| type: 'tool-call', | ||
| toolCallId: active.toolCallId, | ||
| toolName: active.toolName, | ||
| input: finalJSON, | ||
| providerMetadata: active.providerMetadata, | ||
| }); | ||
| hasToolCalls = true; | ||
| }; | ||
| return { | ||
@@ -574,6 +644,2 @@ stream: response.pipeThrough( | ||
| if (value.serviceTier != null) { | ||
| serviceTier = value.serviceTier; | ||
| } | ||
| const candidate = value.candidates?.[0]; | ||
@@ -838,6 +904,3 @@ | ||
| if (isStreamingChunk) { | ||
| if ( | ||
| part.functionCall.name != null && | ||
| part.functionCall.willContinue === true | ||
| ) { | ||
| if (part.functionCall.name != null) { | ||
| const toolCallId = part.functionCall.id ?? generateId(); | ||
@@ -860,5 +923,6 @@ const accumulator = new GoogleJSONAccumulator(); | ||
| if (part.functionCall.partialArgs != null) { | ||
| const { textDelta } = accumulator.processPartialArgs( | ||
| part.functionCall.partialArgs as PartialArg[], | ||
| ); | ||
| const partialArgs = part.functionCall | ||
| .partialArgs as PartialArg[]; | ||
| const { textDelta } = | ||
| accumulator.processPartialArgs(partialArgs); | ||
| if (textDelta.length > 0) { | ||
@@ -872,2 +936,8 @@ controller.enqueue({ | ||
| } | ||
| if ( | ||
| part.functionCall.willContinue !== true && | ||
| partialArgs.every(arg => arg.willContinue !== true) | ||
| ) { | ||
| finishActiveStreamingToolCall(controller); | ||
| } | ||
| } | ||
@@ -882,5 +952,6 @@ } else if ( | ||
| ]; | ||
| const { textDelta } = active.accumulator.processPartialArgs( | ||
| part.functionCall.partialArgs as PartialArg[], | ||
| ); | ||
| const partialArgs = part.functionCall | ||
| .partialArgs as PartialArg[]; | ||
| const { textDelta } = | ||
| active.accumulator.processPartialArgs(partialArgs); | ||
| if (textDelta.length > 0) { | ||
@@ -894,2 +965,8 @@ controller.enqueue({ | ||
| } | ||
| if ( | ||
| part.functionCall.willContinue !== true && | ||
| partialArgs.every(arg => arg.willContinue !== true) | ||
| ) { | ||
| finishActiveStreamingToolCall(controller); | ||
| } | ||
| } | ||
@@ -900,30 +977,3 @@ } else if ( | ||
| ) { | ||
| const active = activeStreamingToolCalls.pop()!; | ||
| const { finalJSON, closingDelta } = | ||
| active.accumulator.finalize(); | ||
| if (closingDelta.length > 0) { | ||
| controller.enqueue({ | ||
| type: 'tool-input-delta', | ||
| id: active.toolCallId, | ||
| delta: closingDelta, | ||
| providerMetadata: active.providerMetadata, | ||
| }); | ||
| } | ||
| controller.enqueue({ | ||
| type: 'tool-input-end', | ||
| id: active.toolCallId, | ||
| providerMetadata: active.providerMetadata, | ||
| }); | ||
| controller.enqueue({ | ||
| type: 'tool-call', | ||
| toolCallId: active.toolCallId, | ||
| toolName: active.toolName, | ||
| input: finalJSON, | ||
| providerMetadata: active.providerMetadata, | ||
| }); | ||
| hasToolCalls = true; | ||
| finishActiveStreamingToolCall(controller); | ||
| } else if (isCompleteCall) { | ||
@@ -1397,3 +1447,2 @@ const toolCallId = part.functionCall.id ?? generateId(); | ||
| .nullish(), | ||
| serviceTier: z.string().nullish(), | ||
| }), | ||
@@ -1454,3 +1503,2 @@ ), | ||
| .nullish(), | ||
| serviceTier: z.string().nullish(), | ||
| }), | ||
@@ -1457,0 +1505,0 @@ ), |
@@ -33,2 +33,3 @@ import { | ||
| | 'gemini-3.1-flash-tts-preview' | ||
| | 'gemini-3.5-flash' | ||
| // latest version | ||
@@ -210,5 +211,27 @@ // https://ai.google.dev/gemini-api/docs/models#latest | ||
| /** | ||
| * Optional. The service tier to use for the request. | ||
| * Optional. The service tier to use for the request. Sent as the | ||
| * `serviceTier` body field. Gemini API only. | ||
| */ | ||
| serviceTier: z.enum(['standard', 'flex', 'priority']).optional(), | ||
| /** | ||
| * Optional. Vertex AI only. Sent as the | ||
| * `X-Vertex-AI-LLM-Shared-Request-Type` request header to select a | ||
| * shared (PayGo) tier. With Provisioned Throughput allocated and | ||
| * `requestType` unset, the request falls back to this tier only if | ||
| * PT capacity is exhausted. | ||
| * | ||
| * https://docs.cloud.google.com/vertex-ai/generative-ai/docs/priority-paygo | ||
| * https://docs.cloud.google.com/vertex-ai/generative-ai/docs/flex-paygo | ||
| */ | ||
| sharedRequestType: z.enum(['priority', 'flex', 'standard']).optional(), | ||
| /** | ||
| * Optional. Vertex AI only. Sent as the `X-Vertex-AI-LLM-Request-Type` | ||
| * request header. Set to `'shared'` together with `sharedRequestType` | ||
| * to bypass Provisioned Throughput entirely. | ||
| * | ||
| * https://docs.cloud.google.com/vertex-ai/generative-ai/docs/priority-paygo | ||
| */ | ||
| requestType: z.enum(['shared']).optional(), | ||
| }), | ||
@@ -221,8 +244,1 @@ ), | ||
| >; | ||
| // Vertex API requires another service tier format. | ||
| export const VertexServiceTierMap = { | ||
| standard: 'SERVICE_TIER_STANDARD', | ||
| flex: 'SERVICE_TIER_FLEX', | ||
| priority: 'SERVICE_TIER_PRIORITY', | ||
| } as const; |
@@ -92,4 +92,7 @@ import type { | ||
| * Creates a language model targeting the Gemini Interactions API | ||
| * (`POST /v1beta/interactions`). Pass either a model ID (string) or | ||
| * `{ agent: <name> }` to use a Gemini agent preset. | ||
| * (`POST /v1beta/interactions`). Pass: | ||
| * - a model ID (string), | ||
| * - `{ agent: <name> }` to use a known Gemini agent preset, or | ||
| * - `{ managedAgent: <name> }` to use a user-defined agent created via | ||
| * the `/v1beta/agents` endpoint. | ||
| */ | ||
@@ -99,3 +102,4 @@ interactions( | ||
| | GoogleInteractionsModelId | ||
| | { agent: GoogleInteractionsAgentName }, | ||
| | { agent: GoogleInteractionsAgentName } | ||
| | { managedAgent: string }, | ||
| ): LanguageModelV3; | ||
@@ -219,3 +223,4 @@ | ||
| | GoogleInteractionsModelId | ||
| | { agent: GoogleInteractionsAgentName }, | ||
| | { agent: GoogleInteractionsAgentName } | ||
| | { managedAgent: string }, | ||
| ) => | ||
@@ -222,0 +227,0 @@ new GoogleInteractionsLanguageModel( |
@@ -5,8 +5,6 @@ /** | ||
| * | ||
| * Sourced from `googleapis/js-genai` `src/interactions/resources/interactions.ts` | ||
| * (`Interaction.agent` enum). Subject to expansion as Google adds new agents. | ||
| * | ||
| * This is a strict string-literal union (no `string` escape hatch) so that | ||
| * passing an unknown agent name is a compile-time error. Add new agents here | ||
| * as Google publishes them. | ||
| * Strict string-literal union: unknown agent names are a compile-time error. | ||
| * User-defined agents (created via the `/agents` endpoint) are addressed by | ||
| * a separate `{ managedAgent: string }` factory shape — see | ||
| * `GoogleInteractionsModelInput`. | ||
| */ | ||
@@ -17,2 +15,3 @@ | ||
| | 'deep-research-preview-04-2026' | ||
| | 'deep-research-max-preview-04-2026'; | ||
| | 'deep-research-max-preview-04-2026' | ||
| | 'antigravity-preview-05-2026'; |
@@ -35,2 +35,3 @@ import { | ||
| | 'gemini-3.1-flash-tts-preview' | ||
| | 'gemini-3.5-flash' | ||
| | 'lyria-3-clip-preview' | ||
@@ -192,2 +193,66 @@ | 'lyria-3-pro-preview' | ||
| pollingTimeoutMs: z.number().int().positive().nullish(), | ||
| /** | ||
| * Run the interaction in the background. Required for agents whose | ||
| * server-side workflow cannot complete within a single request/response. | ||
| * When `true`, the POST returns with a non-terminal status and the SDK | ||
| * polls `GET /interactions/{id}` until the work completes. Some agents | ||
| * reject `true`; see the agent's documentation for which mode it | ||
| * requires. | ||
| */ | ||
| background: z.boolean().nullish(), | ||
| /** | ||
| * Environment configuration for the agent sandbox. Only applies to agent | ||
| * calls (`google.interactions({ agent })`); ignored on model-id calls. | ||
| * | ||
| * - `"remote"`: provision a fresh sandbox for this call. | ||
| * - any other string: an existing `environment_id` to reuse. | ||
| * - object: provision a fresh sandbox and optionally preload `sources` | ||
| * and/or constrain outbound traffic via `network`. | ||
| */ | ||
| environment: z | ||
| .union([ | ||
| z.string(), | ||
| z.object({ | ||
| type: z.literal('remote'), | ||
| sources: z | ||
| .array( | ||
| z.union([ | ||
| z.object({ | ||
| type: z.literal('gcs'), | ||
| source: z.string(), | ||
| target: z.string().nullish(), | ||
| }), | ||
| z.object({ | ||
| type: z.literal('repository'), | ||
| source: z.string(), | ||
| target: z.string().nullish(), | ||
| }), | ||
| z.object({ | ||
| type: z.literal('inline'), | ||
| content: z.string(), | ||
| target: z.string(), | ||
| }), | ||
| ]), | ||
| ) | ||
| .nullish(), | ||
| network: z | ||
| .union([ | ||
| z.literal('disabled'), | ||
| z.object({ | ||
| allowlist: z.array( | ||
| z.object({ | ||
| domain: z.string(), | ||
| transform: z | ||
| .array(z.record(z.string(), z.string())) | ||
| .nullish(), | ||
| }), | ||
| ), | ||
| }), | ||
| ]) | ||
| .nullish(), | ||
| }), | ||
| ]) | ||
| .nullish(), | ||
| }), | ||
@@ -194,0 +259,0 @@ ), |
@@ -35,3 +35,6 @@ import type { | ||
| GoogleInteractionsAgentConfig, | ||
| GoogleInteractionsEnvironmentSource, | ||
| GoogleInteractionsGenerationConfig, | ||
| GoogleInteractionsNetworkAllowlistEntry, | ||
| GoogleInteractionsNetworkConfig, | ||
| GoogleInteractionsRequestBody, | ||
@@ -63,3 +66,4 @@ GoogleInteractionsResponseFormatEntry, | ||
| | GoogleInteractionsModelId | ||
| | { agent: string }; | ||
| | { agent: string } | ||
| | { managedAgent: string }; | ||
@@ -86,2 +90,5 @@ export class GoogleInteractionsLanguageModel implements LanguageModelV3 { | ||
| this.agent = undefined; | ||
| } else if ('managedAgent' in modelOrAgent) { | ||
| this.modelId = modelOrAgent.managedAgent; | ||
| this.agent = modelOrAgent.managedAgent; | ||
| } else { | ||
@@ -332,14 +339,56 @@ this.modelId = modelOrAgent.agent; | ||
| let environment: GoogleInteractionsRequestBody['environment']; | ||
| if (opts?.environment != null) { | ||
| if (!isAgent) { | ||
| warnings.push({ | ||
| type: 'other', | ||
| message: | ||
| 'google.interactions: environment is only supported when an agent is set; environment will be omitted from the request body.', | ||
| }); | ||
| } else if (typeof opts.environment === 'string') { | ||
| environment = opts.environment; | ||
| } else { | ||
| const env = opts.environment; | ||
| const sources: Array<GoogleInteractionsEnvironmentSource> | undefined = | ||
| env.sources?.map(s => { | ||
| if (s.type === 'inline') { | ||
| return { | ||
| type: 'inline' as const, | ||
| content: s.content, | ||
| target: s.target, | ||
| }; | ||
| } | ||
| return pruneUndefined({ | ||
| type: s.type, | ||
| source: s.source, | ||
| target: s.target ?? undefined, | ||
| }) as GoogleInteractionsEnvironmentSource; | ||
| }); | ||
| let network: GoogleInteractionsNetworkConfig | undefined; | ||
| if (env.network === 'disabled') { | ||
| network = 'disabled'; | ||
| } else if (env.network != null) { | ||
| network = { | ||
| allowlist: env.network.allowlist.map(entry => | ||
| pruneUndefined({ | ||
| domain: entry.domain, | ||
| transform: entry.transform ?? undefined, | ||
| }), | ||
| ) as Array<GoogleInteractionsNetworkAllowlistEntry>, | ||
| }; | ||
| } | ||
| environment = pruneUndefined({ | ||
| type: 'remote' as const, | ||
| sources: sources != null && sources.length > 0 ? sources : undefined, | ||
| network, | ||
| }); | ||
| } | ||
| } | ||
| /* | ||
| * Agent calls require `background: true` on the wire — otherwise the API | ||
| * rejects them with `background=true is required for agent interactions.` | ||
| * The server returns a non-terminal status (`in_progress`/`requires_action`) | ||
| * and the final outputs are streamed via `GET /interactions/{id}?stream=true` | ||
| * (or polled via `GET /interactions/{id}`). This is handled internally in | ||
| * `doGenerate` / `doStream` so the user-facing surface stays identical to | ||
| * model-id calls. | ||
| * | ||
| * Model-id calls retain their original synchronous behavior — no | ||
| * `background` field is sent. (No documented model accepts `background: | ||
| * true` today; revisit when one does.) | ||
| * `background` is opt-in via `providerOptions.google.background`. Some | ||
| * agents require it because their server-side workflow cannot complete | ||
| * within a single request; others reject it. When `background: true`, the | ||
| * POST returns a non-terminal status and the SDK polls | ||
| * `GET /interactions/{id}` until the work completes. | ||
| */ | ||
@@ -367,3 +416,4 @@ const args: GoogleInteractionsRequestBody = pruneUndefined({ | ||
| agent_config: agentConfig, | ||
| ...(isAgent ? { background: true } : {}), | ||
| environment, | ||
| background: opts?.background ?? undefined, | ||
| }); | ||
@@ -375,2 +425,3 @@ | ||
| isAgent, | ||
| isBackground: opts?.background === true, | ||
| pollingTimeoutMs: opts?.pollingTimeoutMs ?? undefined, | ||
@@ -413,4 +464,4 @@ }; | ||
| /* | ||
| * Agent calls run with `background: true`; the POST returns immediately | ||
| * with a non-terminal status (`in_progress` / `requires_action`). Poll | ||
| * Agent calls may return a non-terminal status (`in_progress` / | ||
| * `requires_action`) when invoked with `background: true`. Poll | ||
| * `GET /interactions/{id}` until terminal so the user-facing surface | ||
@@ -513,3 +564,3 @@ * matches a synchronous call. | ||
| ): Promise<LanguageModelV3StreamResult> { | ||
| const { args, warnings, isAgent, pollingTimeoutMs } = | ||
| const { args, warnings, isBackground, pollingTimeoutMs } = | ||
| await this.getArgs(options); | ||
@@ -526,9 +577,9 @@ | ||
| /* | ||
| * Agent calls require `background: true`, which is incompatible with | ||
| * `stream: true` on POST. Drive these via POST background -> GET stream | ||
| * (with terminal-status short-circuit). The user-facing stream surface | ||
| * stays identical -- text-start / text-delta / text-end / finish parts | ||
| * are emitted in the same order as a true SSE response. | ||
| * `background: true` is incompatible with `stream: true` on POST. Drive | ||
| * background calls via POST background -> GET stream (with terminal-status | ||
| * short-circuit). The user-facing stream surface stays identical -- | ||
| * text-start / text-delta / text-end / finish parts are emitted in the | ||
| * same order as a true SSE response. | ||
| */ | ||
| if (isAgent) { | ||
| if (isBackground) { | ||
| return this.doStreamBackground({ | ||
@@ -535,0 +586,0 @@ args, |
@@ -481,2 +481,51 @@ /** | ||
| 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 = { | ||
@@ -496,2 +545,3 @@ model?: string; | ||
| stream?: boolean; | ||
| environment?: GoogleInteractionsEnvironment; | ||
| /** | ||
@@ -498,0 +548,0 @@ * Run the interaction in the background. The POST returns immediately with a |
@@ -25,3 +25,3 @@ import { | ||
| * | ||
| * The connection can drop mid-run: deep-research agents idle for long | ||
| * The connection can drop mid-run: long-running agents idle for long | ||
| * stretches between SSE events and undici's default body timeout terminates | ||
@@ -28,0 +28,0 @@ * the request with `UND_ERR_BODY_TIMEOUT`. We track the last seen `event_id` |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
2315815
2.34%26733
2.35%