@langchain/google 0.1.11 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/chat_models/api-types.d.cts +257 -102
  3. package/dist/chat_models/api-types.d.ts +257 -102
  4. package/dist/chat_models/base.cjs +76 -9
  5. package/dist/chat_models/base.cjs.map +1 -1
  6. package/dist/chat_models/base.d.cts +5 -0
  7. package/dist/chat_models/base.d.ts +5 -0
  8. package/dist/chat_models/base.js +77 -10
  9. package/dist/chat_models/base.js.map +1 -1
  10. package/dist/chat_models/node.cjs.map +1 -1
  11. package/dist/chat_models/node.js.map +1 -1
  12. package/dist/chat_models/types.cjs +6 -0
  13. package/dist/chat_models/types.cjs.map +1 -0
  14. package/dist/chat_models/types.d.cts +13 -0
  15. package/dist/chat_models/types.d.ts +13 -0
  16. package/dist/chat_models/types.js +6 -0
  17. package/dist/chat_models/types.js.map +1 -0
  18. package/dist/clients/node.cjs.map +1 -1
  19. package/dist/clients/node.js.map +1 -1
  20. package/dist/converters/messages.cjs +12 -0
  21. package/dist/converters/messages.cjs.map +1 -1
  22. package/dist/converters/messages.js +12 -0
  23. package/dist/converters/messages.js.map +1 -1
  24. package/dist/converters/params.cjs +12 -0
  25. package/dist/converters/params.cjs.map +1 -1
  26. package/dist/converters/params.js +12 -1
  27. package/dist/converters/params.js.map +1 -1
  28. package/dist/converters/tools.cjs.map +1 -1
  29. package/dist/converters/tools.js.map +1 -1
  30. package/dist/utils/gcp-auth.cjs.map +1 -1
  31. package/dist/utils/gcp-auth.js.map +1 -1
  32. package/dist/utils/stream_events.cjs +173 -0
  33. package/dist/utils/stream_events.cjs.map +1 -0
  34. package/dist/utils/stream_events.js +173 -0
  35. package/dist/utils/stream_events.js.map +1 -0
  36. package/node.cjs +1 -0
  37. package/node.d.cts +1 -0
  38. package/node.d.ts +1 -0
  39. package/node.js +1 -0
  40. package/package.json +13 -8
@@ -1,5 +1,8 @@
1
+ const require_misc = require("../utils/misc.cjs");
1
2
  const require_errors = require("../utils/errors.cjs");
3
+ const require_stream_events = require("../utils/stream_events.cjs");
2
4
  const require_profiles = require("./profiles.cjs");
5
+ const require_types = require("./types.cjs");
3
6
  const require_stream = require("../utils/stream.cjs");
4
7
  const require_messages = require("../converters/messages.cjs");
5
8
  const require_tools = require("../converters/tools.cjs");
@@ -21,6 +24,13 @@ function getPlatformType(platform, hasApiKey) {
21
24
  else if (hasApiKey) return "gai";
22
25
  else return "gcp";
23
26
  }
27
+ function usageMetadataToTokenUsage(usageMetadata) {
28
+ return {
29
+ promptTokens: usageMetadata.input_tokens,
30
+ completionTokens: usageMetadata.output_tokens,
31
+ totalTokens: usageMetadata.total_tokens
32
+ };
33
+ }
24
34
  function mapDetailToMediaResolution(detail) {
25
35
  switch (detail) {
26
36
  case "low": return "MEDIA_RESOLUTION_LOW";
@@ -35,18 +45,20 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
35
45
  streamUsage = true;
36
46
  _platform;
37
47
  _endpoint;
48
+ _customHeaders;
38
49
  _location;
39
50
  _apiVersion;
40
51
  apiClient;
41
52
  constructor(params) {
42
53
  super(params);
43
54
  this.params = params;
44
- this._addVersion("@langchain/google", "0.1.11");
55
+ this._addVersion("@langchain/google", "0.2.0");
45
56
  if (!params.apiClient) throw new require_errors.ConfigurationError("BaseChatGoogle requires an apiClient. This should be provided automatically by ChatGoogle constructors. If you're extending BaseChatGoogle directly, please provide an apiClient instance.");
46
57
  this.apiClient = params.apiClient;
47
58
  this.model = params.model;
48
59
  this._platform = require_params.convertParamsToPlatformType(params);
49
60
  this._endpoint = params.endpoint;
61
+ this._customHeaders = params.customHeaders;
50
62
  this._location = params.location;
51
63
  this._apiVersion = params.apiVersion;
52
64
  this.disableStreaming = params?.disableStreaming === true;
@@ -161,7 +173,8 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
161
173
  speechConfig: require_params.convertFieldsToSpeechConfig(fields),
162
174
  ...fields.imageConfig ? { imageConfig: fields.imageConfig } : {},
163
175
  ...mediaResolution ? { mediaResolution } : {}
164
- }
176
+ },
177
+ ...require_params.convertFieldsToServiceTier(this.platform, fields)
165
178
  };
166
179
  }
167
180
  getLsParams(options) {
@@ -175,6 +188,15 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
175
188
  ls_stop: options.stop
176
189
  };
177
190
  }
191
+ getHeaders(options) {
192
+ const fields = combineGoogleChatModelFields(this.params, options);
193
+ return {
194
+ "Content-Type": "application/json",
195
+ ...this.platform === "gcp" && typeof fields.serviceTier !== "undefined" && require_types.settableServiceTier.includes(fields.serviceTier) ? { "X-Vertex-AI-LLM-Shared-Request-Type": fields.serviceTier } : {},
196
+ ...this._customHeaders,
197
+ ...options.customHeaders
198
+ };
199
+ }
178
200
  async _generate(messages, options, runManager) {
179
201
  if (this.streaming) {
180
202
  const stream = await this._streamResponseChunks(messages, options, runManager);
@@ -184,6 +206,7 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
184
206
  return { generations: finalChunk ? [finalChunk] : [] };
185
207
  }
186
208
  const url = await this.buildUrl();
209
+ const headers = this.getHeaders(options);
187
210
  const body = {
188
211
  ...this.invocationParams(options),
189
212
  systemInstruction: require_messages.convertMessagesToGeminiSystemInstruction(messages),
@@ -192,11 +215,12 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
192
215
  const moduleName = this.constructor.name;
193
216
  await runManager?.handleCustomEvent(`google-request-${moduleName}`, {
194
217
  url,
218
+ headers,
195
219
  body
196
220
  });
197
221
  const response = await this.apiClient.fetch(new Request(url, {
198
222
  method: "POST",
199
- headers: { "Content-Type": "application/json" },
223
+ headers,
200
224
  body: JSON.stringify(body),
201
225
  signal: options.signal
202
226
  }));
@@ -209,7 +233,7 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
209
233
  await runManager?.handleCustomEvent(`google-response-${moduleName}`, {
210
234
  data,
211
235
  url: response.url,
212
- headers: response.headers,
236
+ headers: Array.from(response.headers.entries()),
213
237
  status: response.status,
214
238
  statusText: response.statusText
215
239
  });
@@ -220,6 +244,12 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
220
244
  const text = require_messages.convertAIMessageToText(message);
221
245
  const usageMetadata = require_messages.convertGeminiGenerateContentResponseToUsageMetadata(data);
222
246
  message.usage_metadata = usageMetadata;
247
+ const serviceTier = require_misc.iife(() => {
248
+ const trafficType = data.usageMetadata?.trafficType;
249
+ const serviceTierHeader = response.headers.get("x-gemini-service-tier");
250
+ if (trafficType?.startsWith("ON_DEMAND_")) return trafficType?.substring(10).toLowerCase();
251
+ return serviceTierHeader || "standard";
252
+ });
223
253
  return {
224
254
  generations: [{
225
255
  text,
@@ -233,13 +263,47 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
233
263
  }
234
264
  }],
235
265
  llmOutput: {
236
- tokenUsage: usageMetadata,
266
+ tokenUsage: usageMetadataToTokenUsage(usageMetadata),
237
267
  model: data.modelVersion,
238
268
  responseId: data.responseId,
239
- usageMetadata
269
+ usageMetadata,
270
+ serviceTier
240
271
  }
241
272
  };
242
273
  }
274
+ async *_streamChatModelEvents(messages, options, _runManager) {
275
+ const body = {
276
+ ...this.invocationParams(options),
277
+ systemInstruction: require_messages.convertMessagesToGeminiSystemInstruction(messages),
278
+ contents: require_messages.convertMessagesToGeminiContents(messages)
279
+ };
280
+ const url = await this.buildUrl("streamGenerateContent?alt=sse");
281
+ const headers = this.getHeaders(options);
282
+ const response = await this.apiClient.fetch(new Request(url, {
283
+ method: "POST",
284
+ headers,
285
+ body: JSON.stringify(body),
286
+ signal: options.signal
287
+ }));
288
+ if (!response.ok) throw await require_errors.RequestError.fromResponse(response);
289
+ if (!response.body) return;
290
+ const eventStream = response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new eventsource_parser_stream.EventSourceParserStream()).pipeThrough(new require_stream.SafeJsonEventParserStream());
291
+ const shouldStreamUsage = this.streamUsage !== false && options.streamUsage !== false;
292
+ async function* geminiChunks(stream, signal) {
293
+ const reader = stream.getReader();
294
+ try {
295
+ while (true) {
296
+ if (signal?.aborted) return;
297
+ const { done, value } = await reader.read();
298
+ if (done) break;
299
+ if (value !== null) yield value;
300
+ }
301
+ } finally {
302
+ reader.releaseLock();
303
+ }
304
+ }
305
+ yield* require_stream_events.convertGoogleGeminiStream(geminiChunks(eventStream, options.signal), { streamUsage: shouldStreamUsage });
306
+ }
243
307
  async *_streamResponseChunks(messages, options, runManager) {
244
308
  const streamUsage = this.streamUsage ?? true;
245
309
  const body = {
@@ -248,20 +312,22 @@ var BaseChatGoogle = class extends _langchain_core_language_models_chat_models.B
248
312
  contents: require_messages.convertMessagesToGeminiContents(messages)
249
313
  };
250
314
  const url = await this.buildUrl("streamGenerateContent?alt=sse");
315
+ const headers = this.getHeaders(options);
251
316
  const moduleName = this.constructor.name;
252
317
  await runManager?.handleCustomEvent(`google-request-${moduleName}`, {
253
318
  url,
319
+ headers,
254
320
  body
255
321
  });
256
322
  const response = await this.apiClient.fetch(new Request(url, {
257
323
  method: "POST",
258
- headers: { "Content-Type": "application/json" },
324
+ headers,
259
325
  body: JSON.stringify(body),
260
326
  signal: options.signal
261
327
  }));
262
328
  await runManager?.handleCustomEvent(`google-response-${moduleName}`, {
263
329
  url: response.url,
264
- headers: response.headers,
330
+ headers: Array.from(response.headers.entries()),
265
331
  status: response.status,
266
332
  statusText: response.statusText
267
333
  });
@@ -428,7 +494,8 @@ function combineGoogleChatModelFields(a, b, ...rest) {
428
494
  maxReasoningTokens: b.maxReasoningTokens ?? a.maxReasoningTokens,
429
495
  thinkingBudget: b.thinkingBudget ?? a.thinkingBudget,
430
496
  reasoningEffort: b.reasoningEffort ?? a.reasoningEffort,
431
- thinkingLevel: b.thinkingLevel ?? a.thinkingLevel
497
+ thinkingLevel: b.thinkingLevel ?? a.thinkingLevel,
498
+ serviceTier: b.serviceTier ?? a.serviceTier
432
499
  };
433
500
  if (rest.length > 0) return combineGoogleChatModelFields(combined, rest[0], ...rest.slice(1));
434
501
  return combined;
@@ -1 +1 @@
1
- {"version":3,"file":"base.cjs","names":["BaseChatModel","ConfigurationError","convertParamsToPlatformType","PROFILES","convertToolsToGeminiTools","convertToolChoiceToGeminiConfig","convertFieldsToThinkingConfig","convertFieldsToSpeechConfig","convertMessagesToGeminiSystemInstruction","convertMessagesToGeminiContents","RequestError","PromptBlockedError","NoCandidatesError","convertGeminiCandidateToAIMessage","convertAIMessageToText","convertGeminiGenerateContentResponseToUsageMetadata","EventSourceParserStream","SafeJsonEventParserStream","ChatGenerationChunk","AIMessageChunk","convertGeminiPartsToToolCalls","subtractUsageMetadata","RunnableLambda","AIMessage","MalformedOutputError","schemaToGeminiParameters"],"sources":["../../src/chat_models/base.ts"],"sourcesContent":["import {\n BaseChatModel,\n type BaseChatModelCallOptions,\n type LangSmithParams,\n type BaseChatModelParams,\n} from \"@langchain/core/language_models/chat_models\";\nimport {\n AIMessage,\n AIMessageChunk,\n AIMessageChunkFields,\n BaseMessage,\n type UsageMetadata,\n} from \"@langchain/core/messages\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { concat } from \"@langchain/core/utils/stream\";\nimport { ChatGenerationChunk, ChatResult } from \"@langchain/core/outputs\";\nimport { EventSourceParserStream } from \"eventsource-parser/stream\";\nimport type { BindToolsInput } from \"@langchain/core/language_models/chat_models\";\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nimport PROFILES from \"./profiles.js\";\nimport type {\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"@langchain/core/language_models/base\";\nimport { Runnable, RunnableLambda } from \"@langchain/core/runnables\";\nimport {\n toJsonSchema,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n InteropZodType,\n isInteropZodSchema,\n} from \"@langchain/core/utils/types\";\n\nimport { ApiClient } from \"../clients/index.js\";\nimport type { ChatGoogleFields } from \"./types.js\";\nimport { SafeJsonEventParserStream } from \"../utils/stream.js\";\nimport {\n convertAIMessageToText,\n convertGeminiCandidateToAIMessage,\n convertGeminiGenerateContentResponseToUsageMetadata,\n convertGeminiPartsToToolCalls,\n convertMessagesToGeminiContents,\n convertMessagesToGeminiSystemInstruction,\n} from \"../converters/messages.js\";\nimport {\n ConfigurationError,\n MalformedOutputError,\n NoCandidatesError,\n PromptBlockedError,\n RequestError,\n} from \"../utils/errors.js\";\nimport {\n convertToolsToGeminiTools,\n convertToolChoiceToGeminiConfig,\n schemaToGeminiParameters,\n} from \"../converters/tools.js\";\nimport {\n convertParamsToPlatformType,\n convertFieldsToSpeechConfig,\n convertFieldsToThinkingConfig,\n} from \"../converters/params.js\";\nimport { Gemini } from \"./api-types.js\";\nimport { subtractUsageMetadata } from \"../utils/metadata.js\";\nimport {\n isSerializableSchema,\n SerializableSchema,\n} from \"@langchain/core/utils/standard_schema\";\nimport {\n assembleStructuredOutputPipeline,\n createContentParser,\n createFunctionCallingParser,\n} from \"@langchain/core/language_models/structured_output\";\n\nexport type GooglePlatformType = \"gai\" | \"gcp\";\n\nexport function getPlatformType(\n platform: GooglePlatformType | undefined,\n hasApiKey: boolean\n): GooglePlatformType {\n if (typeof platform !== \"undefined\") {\n return platform;\n } else if (hasApiKey) {\n return \"gai\";\n } else {\n return \"gcp\";\n }\n}\n\nfunction mapDetailToMediaResolution(\n detail?: ChatGoogleFields[\"detail\"]\n): Gemini.GenerationConfig[\"mediaResolution\"] | undefined {\n switch (detail) {\n case \"low\":\n return \"MEDIA_RESOLUTION_LOW\";\n case \"high\":\n return \"MEDIA_RESOLUTION_HIGH\";\n default:\n return undefined;\n }\n}\n\nexport interface BaseChatGoogleParams\n extends BaseChatModelParams, ChatGoogleFields {\n /**\n * The name of the Gemini model to use.\n *\n * Example: \"gemini-3-pro-preview\"\n */\n model: string;\n\n /**\n * Optional. The API client implementation for making HTTP requests to the Gemini API.\n * If not set, a default client will be used based on the runtime environment.\n */\n apiClient?: ApiClient;\n\n /**\n * Hostname for the API call (if this is running on GCP)\n * Usually this is computed based on location and platformType.\n **/\n endpoint?: string;\n\n /**\n * Region where the LLM is stored (if this is running on GCP)\n * Defaults to \"global\"\n **/\n location?: string;\n\n /**\n * The version of the API functions. Part of the path.\n * Usually this is computed based on platformType.\n **/\n apiVersion?: string;\n\n /**\n * What platform to run the service on.\n * If not specified, the class should determine this from other\n * means. Either way, the platform actually used will be in\n * the \"platform\" getter.\n */\n platformType?: GooglePlatformType;\n\n /**\n * For compatibility with Google's libraries, should this use Vertex?\n * The \"platformType\" parmeter takes precedence.\n */\n vertexai?: boolean;\n\n /**\n * Backwards compatibility.\n * @deprecated in favor of using `disableStreaming` or `.stream()`\n */\n streaming?: boolean;\n\n streamUsage?: boolean;\n}\n\nexport interface BaseChatGoogleCallOptions\n extends BaseChatModelCallOptions, ChatGoogleFields {}\n\nexport abstract class BaseChatGoogle<\n CallOptions extends BaseChatGoogleCallOptions = BaseChatGoogleCallOptions,\n> extends BaseChatModel<CallOptions, AIMessageChunk> {\n model: string;\n\n streaming: boolean;\n\n disableStreaming: boolean;\n\n streamUsage: boolean = true;\n\n protected _platform?: GooglePlatformType;\n\n protected _endpoint?: string;\n\n protected _location?: string;\n\n protected _apiVersion?: string;\n\n protected apiClient: ApiClient;\n\n constructor(protected params: BaseChatGoogleParams) {\n super(params);\n this._addVersion(\"@langchain/google\", __PKG_VERSION__);\n\n if (!params.apiClient) {\n throw new ConfigurationError(\n \"BaseChatGoogle requires an apiClient. This should be provided automatically by ChatGoogle constructors. If you're extending BaseChatGoogle directly, please provide an apiClient instance.\"\n );\n }\n this.apiClient = params.apiClient;\n\n this.model = params.model;\n this._platform = convertParamsToPlatformType(params);\n this._endpoint = params.endpoint;\n this._location = params.location;\n this._apiVersion = params.apiVersion;\n\n this.disableStreaming = params?.disableStreaming === true;\n this.streaming = params?.streaming === true;\n if (this.disableStreaming) this.streaming = false;\n // disable streaming in BaseChatModel if explicitly disabled\n if (params?.streaming === false) this.disableStreaming = true;\n\n this.streamUsage = params?.streamUsage ?? this.streamUsage;\n if (this.disableStreaming) this.streamUsage = false;\n }\n\n _llmType(): string {\n return \"google\";\n }\n\n protected get platformType(): GooglePlatformType | undefined {\n return this._platform;\n }\n\n protected get platform(): GooglePlatformType {\n return getPlatformType(this._platform, this.apiClient.hasApiKey());\n }\n\n protected get isVertexExpress(): boolean {\n return this.platform === \"gcp\" && this.apiClient.hasApiKey();\n }\n\n protected get apiVersion(): string {\n if (typeof this._apiVersion !== \"undefined\") {\n return this._apiVersion;\n } else if (this.platform === \"gai\") {\n return \"v1beta\";\n } else {\n return \"v1\";\n }\n }\n\n protected get location(): string {\n return this._location || \"global\";\n }\n\n protected get endpoint(): string {\n if (typeof this._endpoint !== \"undefined\") {\n return this._endpoint;\n } else if (this.platform === \"gai\") {\n return \"generativelanguage.googleapis.com\";\n } else if (this.isVertexExpress) {\n return \"aiplatform.googleapis.com\";\n } else if (this.location === \"global\") {\n // See https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/locations#use_the_global_endpoint\n return \"aiplatform.googleapis.com\";\n } else {\n return `${this.location}-aiplatform.googleapis.com`;\n }\n }\n\n protected get publisher(): string {\n return \"google\";\n }\n\n protected get urlMethod(): string {\n return this.streaming ? \"streamGenerateContent?alt=sse\" : \"generateContent\";\n }\n\n /**\n * Returns the model profile for this instance's model, describing its\n * capabilities and constraints (e.g. max tokens, input/output modalities,\n * tool calling support).\n *\n * @example\n * ```typescript\n * const model = new ChatGoogle({ model: \"gemini-2.5-pro\" });\n * const profile = model.profile;\n * console.log(profile.maxInputTokens); // 1048576\n * console.log(profile.imageInputs); // true\n * ```\n */\n get profile(): ModelProfile {\n return PROFILES[this.model] ?? {};\n }\n\n protected async buildUrlGemini(urlMethod?: string): Promise<string> {\n return `https://${this.endpoint}/${this.apiVersion}/models/${this.model}:${\n urlMethod ?? this.urlMethod\n }`;\n }\n\n protected async buildUrlVertexExpress(urlMethod?: string): Promise<string> {\n return `https://${this.endpoint}/${this.apiVersion}/publishers/${\n this.publisher\n }/models/${this.model}:${urlMethod ?? this.urlMethod}`;\n }\n\n protected async buildUrlVertexLocation(urlMethod?: string): Promise<string> {\n const projectId = await this.apiClient.getProjectId();\n return `https://${this.endpoint}/${\n this.apiVersion\n }/projects/${projectId}/locations/${this.location}/publishers/${\n this.publisher\n }/models/${this.model}:${urlMethod ?? this.urlMethod}`;\n }\n\n protected async buildUrlVertex(urlMethod?: string): Promise<string> {\n if (this.isVertexExpress) {\n return this.buildUrlVertexExpress(urlMethod);\n } else {\n return this.buildUrlVertexLocation(urlMethod);\n }\n }\n\n protected async buildUrl(urlMethod?: string): Promise<string> {\n switch (this.platform) {\n case \"gai\":\n return this.buildUrlGemini(urlMethod);\n default:\n return this.buildUrlVertex(urlMethod);\n }\n }\n\n override invocationParams(options: this[\"ParsedCallOptions\"]) {\n const fields = combineGoogleChatModelFields(this.params, options);\n const mediaResolution =\n fields.mediaResolution ?? mapDetailToMediaResolution(fields.detail);\n\n // Convert tools to Gemini format\n const tools = fields.tools\n ? convertToolsToGeminiTools(fields.tools)\n : undefined;\n\n // Convert tool choice to Gemini function calling config\n const toolConfig = convertToolChoiceToGeminiConfig(\n options.tool_choice,\n !!(tools && tools.length > 0)\n );\n\n let responseJsonSchema:\n | JsonSchema7Type\n | Record<string, unknown>\n | undefined;\n let responseMimeType: string | undefined;\n\n if (fields.responseSchema) {\n // Convert Zod schema to JSON Schema if needed\n if (\n isInteropZodSchema(fields.responseSchema) ||\n isSerializableSchema(fields.responseSchema)\n ) {\n responseJsonSchema = toJsonSchema(fields.responseSchema);\n } else {\n responseJsonSchema = fields.responseSchema as Record<string, unknown>;\n }\n // Automatically set responseMimeType to \"application/json\" when schema is provided\n responseMimeType = \"application/json\";\n }\n\n return {\n ...(tools && tools.length > 0 ? { tools } : {}),\n ...(toolConfig ? { toolConfig } : {}),\n safetySettings: fields.safetySettings,\n generationConfig: {\n temperature: fields.temperature,\n topP: fields.topP,\n topK: fields.topK,\n maxOutputTokens: fields.maxOutputTokens,\n presencePenalty: fields.presencePenalty,\n frequencyPenalty: fields.frequencyPenalty,\n stopSequences: fields.stopSequences,\n ...(responseMimeType ? { responseMimeType } : {}),\n ...(responseJsonSchema ? { responseJsonSchema } : {}),\n ...(fields.responseModalities && fields.responseModalities.length > 0\n ? { responseModalities: fields.responseModalities }\n : {}),\n candidateCount: 1,\n seed: fields.seed,\n responseLogprobs: fields.responseLogprobs,\n logprobs: fields.logprobs,\n ...(fields.enableEnhancedCivicAnswers !== undefined\n ? { enableEnhancedCivicAnswers: fields.enableEnhancedCivicAnswers }\n : {}),\n thinkingConfig: convertFieldsToThinkingConfig(this.model, fields),\n speechConfig: convertFieldsToSpeechConfig(fields),\n ...(fields.imageConfig ? { imageConfig: fields.imageConfig } : {}),\n ...(mediaResolution ? { mediaResolution } : {}),\n },\n };\n }\n\n getLsParams(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n const params = this.invocationParams(options);\n return {\n ls_provider: this.platform === \"gcp\" ? \"google_vertexai\" : \"google_genai\",\n ls_model_name: this.model,\n ls_model_type: \"chat\",\n ls_temperature: params.generationConfig?.temperature ?? undefined,\n ls_max_tokens: params.generationConfig?.maxOutputTokens ?? undefined,\n ls_stop: options.stop,\n };\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.streaming) {\n const stream = await this._streamResponseChunks(\n messages,\n options,\n runManager\n );\n let finalChunk: ChatGenerationChunk | null = null;\n for await (const chunk of stream) {\n finalChunk = !finalChunk ? chunk : concat(finalChunk, chunk);\n }\n if (\n typeof finalChunk?.message?.content === \"string\" &&\n typeof (\n finalChunk?.message?.additional_kwargs\n ?.originalTextContentBlock as Record<string, unknown>\n )?.text === \"string\"\n ) {\n (\n finalChunk.message.additional_kwargs\n .originalTextContentBlock as Record<string, unknown>\n ).text = finalChunk.message.content;\n }\n return {\n generations: finalChunk ? [finalChunk] : [],\n };\n }\n\n const url = await this.buildUrl();\n const body = {\n ...this.invocationParams(options),\n systemInstruction: convertMessagesToGeminiSystemInstruction(messages),\n contents: convertMessagesToGeminiContents(messages),\n };\n\n const moduleName = this.constructor.name;\n await runManager?.handleCustomEvent(`google-request-${moduleName}`, {\n url,\n body,\n });\n\n const response = await this.apiClient.fetch(\n new Request(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n signal: options.signal,\n })\n );\n\n if (!response.ok) {\n const error = await RequestError.fromResponse(response);\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n error,\n });\n throw error;\n }\n\n const data: Gemini.GenerateContentResponse = await response.json();\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n data,\n url: response.url,\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n });\n\n // Check for prompt feedback errors\n if (data.promptFeedback?.blockReason) {\n throw PromptBlockedError.fromPromptFeedback(data.promptFeedback);\n }\n\n // Check if we have candidates\n if (!data.candidates || data.candidates.length === 0) {\n throw new NoCandidatesError();\n }\n\n // Use the first candidate\n const candidate = data.candidates[0];\n const message = convertGeminiCandidateToAIMessage(candidate);\n\n // Extract text content from the message\n const text = convertAIMessageToText(message);\n\n const usageMetadata =\n convertGeminiGenerateContentResponseToUsageMetadata(data);\n message.usage_metadata = usageMetadata;\n\n return {\n generations: [\n {\n text,\n message,\n generationInfo: {\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n safetyRatings: candidate.safetyRatings,\n citationMetadata: candidate.citationMetadata,\n tokenCount: candidate.tokenCount,\n },\n },\n ],\n llmOutput: {\n tokenUsage: usageMetadata,\n model: data.modelVersion,\n responseId: data.responseId,\n usageMetadata,\n },\n };\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const streamUsage: boolean = this.streamUsage ?? true;\n\n const body = {\n ...this.invocationParams(options),\n systemInstruction: convertMessagesToGeminiSystemInstruction(messages),\n contents: convertMessagesToGeminiContents(messages),\n };\n\n const url = await this.buildUrl(\"streamGenerateContent?alt=sse\");\n const moduleName = this.constructor.name;\n await runManager?.handleCustomEvent(`google-request-${moduleName}`, {\n url,\n body,\n });\n\n const response = await this.apiClient.fetch(\n new Request(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n signal: options.signal,\n })\n );\n\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n url: response.url,\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const error = await RequestError.fromResponse(response);\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n error,\n });\n throw error;\n }\n\n if (response.body) {\n let previousUsage: UsageMetadata | undefined;\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new SafeJsonEventParserStream<Gemini.GenerateContentResponse>()\n )\n .pipeThrough(\n new TransformStream<\n Gemini.GenerateContentResponse,\n ChatGenerationChunk\n >({\n transform(chunk, controller) {\n // oxlint-disable-next-line no-void\n void runManager?.handleCustomEvent(`google-chunk-${moduleName}`, {\n chunk,\n });\n if (chunk === null) {\n controller.enqueue(\n new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({ content: \"\" }),\n generationInfo: { finishReason: \"stop\" },\n })\n );\n return;\n }\n\n // Extract text delta from the chunk\n const candidate = chunk.candidates?.[0];\n if (!candidate) {\n return;\n }\n\n const message = convertGeminiCandidateToAIMessage(candidate);\n const text = convertAIMessageToText(message);\n\n const parts = candidate.content?.parts ?? [];\n const toolCalls = convertGeminiPartsToToolCalls(parts);\n\n // Only emit if we have content\n if (parts.length > 0 || candidate.finishReason) {\n const messageChunkParams: AIMessageChunkFields = {\n content: message.content,\n tool_calls: toolCalls,\n response_metadata: {\n model_provider: \"google\",\n },\n additional_kwargs: {\n ...(message.additional_kwargs.originalTextContentBlock\n ? {\n originalTextContentBlock:\n message.additional_kwargs.originalTextContentBlock,\n }\n : {}),\n ...(candidate.finishReason\n ? {\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n }\n : {}),\n },\n };\n\n if (chunk?.usageMetadata && streamUsage) {\n const cumulative =\n convertGeminiGenerateContentResponseToUsageMetadata(chunk);\n messageChunkParams.usage_metadata = subtractUsageMetadata(\n cumulative,\n previousUsage\n );\n previousUsage = cumulative;\n }\n const messageChunk = new AIMessageChunk(messageChunkParams);\n\n controller.enqueue(\n new ChatGenerationChunk({\n text: text,\n message: messageChunk,\n generationInfo: {\n ...(candidate.finishReason && {\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n }),\n ...(candidate.safetyRatings && {\n safetyRatings: candidate.safetyRatings,\n }),\n },\n })\n );\n }\n },\n })\n );\n\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n yield value;\n await runManager?.handleLLMNewToken(\n value.text ?? \"\",\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: value }\n );\n }\n } finally {\n reader.releaseLock();\n }\n }\n }\n\n /**\n * Bind tool-like objects to this chat model.\n *\n * @param tools A list of tool definitions to bind to this chat model.\n * Can be a structured tool, an OpenAI formatted tool, or a Gemini function declaration.\n * @param kwargs Any additional parameters to bind.\n */\n bindTools(\n tools: BindToolsInput[],\n kwargs?: Partial<CallOptions>\n ): Runnable<BaseMessage[], AIMessageChunk, CallOptions> {\n return this.withConfig({\n ...kwargs,\n tools,\n } as Partial<CallOptions>);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n /**\n * Get structured output from the model based on a schema.\n *\n * This method supports two modes:\n * - `jsonMode`: Uses `responseSchema` to get JSON responses directly (preferred for structured outputs)\n * - `functionCalling`: Uses function calling with tools (default, for compatibility)\n *\n * @param outputSchema - The schema to use for structured output (Zod schema or JSON Schema)\n * @param config - Configuration options including method and whether to include raw response\n * @returns A Runnable that returns the parsed structured output\n */\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n let llm: Runnable<BaseMessage[], AIMessageChunk, CallOptions>;\n let outputParser: Runnable<BaseMessage, RunOutput>;\n\n const { schema, name, includeRaw } = {\n ...config,\n schema: outputSchema,\n };\n let method = config?.method ?? \"functionCalling\";\n\n if (method === \"jsonMode\") {\n console.warn(\n `\"jsonMode\" is not supported for Google models. Falling back to \"jsonSchema\".`\n );\n method = \"jsonSchema\";\n }\n\n if (method === \"jsonSchema\") {\n // Use JSON mode with responseSchema\n llm = this.withConfig({\n responseSchema: schema,\n } as Partial<CallOptions>);\n\n outputParser = RunnableLambda.from<BaseMessage, RunOutput>(\n async (input: BaseMessage): Promise<RunOutput> => {\n if (\n !AIMessage.isInstance(input) &&\n !AIMessageChunk.isInstance(input)\n ) {\n throw new MalformedOutputError({\n message: \"Input is not an AIMessage or AIMessageChunk.\",\n });\n }\n\n if (!input.text) {\n throw new MalformedOutputError({\n message:\n \"No content found in response. Cannot parse structured output.\",\n });\n }\n\n // Parse JSON and validate with schema\n const parser = createContentParser(schema);\n return await parser.parse(input.text);\n }\n );\n } else if (method === \"functionCalling\") {\n // Use function calling mode\n let functionName = name ?? \"extract\";\n let geminiFunctionDeclaration: Gemini.Tools.FunctionDeclaration;\n\n if (isInteropZodSchema(schema) || isSerializableSchema(schema)) {\n const jsonSchema = schemaToGeminiParameters(schema);\n const description =\n typeof jsonSchema.description === \"string\"\n ? jsonSchema.description\n : \"A function available to call.\";\n geminiFunctionDeclaration = {\n name: functionName,\n description,\n parameters: jsonSchema as Gemini.Tools.Schema,\n };\n } else if (\n typeof schema.name === \"string\" &&\n typeof schema.parameters === \"object\" &&\n schema.parameters != null\n ) {\n geminiFunctionDeclaration = schema as Gemini.Tools.FunctionDeclaration;\n functionName = schema.name;\n } else {\n // We are providing the schema for *just* the parameters\n const parameters = schemaToGeminiParameters(schema);\n geminiFunctionDeclaration = {\n name: functionName,\n description: (schema as { description?: string }).description ?? \"\",\n parameters,\n };\n }\n\n const tools: Gemini.Tool[] = [\n {\n functionDeclarations: [geminiFunctionDeclaration],\n },\n ];\n llm = this.bindTools(tools).withConfig({\n tool_choice: functionName,\n } as Partial<CallOptions>);\n\n outputParser = createFunctionCallingParser(schema, functionName);\n } else {\n throw new ConfigurationError(\n `Unrecognized structured output method '${method}'. Expected 'functionCalling' or 'jsonSchema'`\n );\n }\n\n return assembleStructuredOutputPipeline(\n llm,\n outputParser,\n includeRaw,\n includeRaw\n ? \"ChatGoogleStructuredOutputRunnable\"\n : \"ChatGoogleStructuredOutput\"\n );\n }\n}\n\ntype CombinableFields = Omit<BaseChatGoogleParams, \"model\">;\n\nexport function combineGoogleChatModelFields(\n a: CombinableFields,\n b: CombinableFields,\n ...rest: CombinableFields[]\n): CombinableFields {\n const combined: CombinableFields = {\n temperature: b.temperature ?? a.temperature,\n topP: b.topP ?? a.topP,\n topK: b.topK ?? a.topK,\n maxOutputTokens: b.maxOutputTokens ?? a.maxOutputTokens,\n presencePenalty: b.presencePenalty ?? a.presencePenalty,\n frequencyPenalty: b.frequencyPenalty ?? a.frequencyPenalty,\n stopSequences: b.stopSequences ?? a.stopSequences,\n seed: b.seed ?? a.seed,\n responseLogprobs: b.responseLogprobs ?? a.responseLogprobs,\n logprobs: b.logprobs ?? a.logprobs,\n safetySettings: b.safetySettings ?? a.safetySettings,\n responseSchema: b.responseSchema ?? a.responseSchema,\n tools: b.tools ?? a.tools,\n responseModalities: b.responseModalities ?? a.responseModalities,\n enableEnhancedCivicAnswers:\n b.enableEnhancedCivicAnswers ?? a.enableEnhancedCivicAnswers,\n speechConfig: b.speechConfig ?? a.speechConfig,\n imageConfig: b.imageConfig ?? a.imageConfig,\n mediaResolution: b.mediaResolution ?? a.mediaResolution,\n detail: b.detail ?? a.detail,\n maxReasoningTokens: b.maxReasoningTokens ?? a.maxReasoningTokens,\n thinkingBudget: b.thinkingBudget ?? a.thinkingBudget,\n reasoningEffort: b.reasoningEffort ?? a.reasoningEffort,\n thinkingLevel: b.thinkingLevel ?? a.thinkingLevel,\n };\n if (rest.length > 0) {\n return combineGoogleChatModelFields(combined, rest[0], ...rest.slice(1));\n }\n return combined;\n}\n\nexport function getGoogleChatModelParams<TParams extends BaseChatGoogleParams>(\n modelOrParams: string | TParams,\n paramsArg?: Omit<TParams, \"model\">\n): TParams {\n const model =\n typeof modelOrParams === \"string\" ? modelOrParams : modelOrParams.model;\n const params = typeof modelOrParams === \"string\" ? paramsArg : modelOrParams;\n return { model, ...params } as TParams;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"base.cjs","names":["BaseChatModel","ConfigurationError","convertParamsToPlatformType","PROFILES","convertToolsToGeminiTools","convertToolChoiceToGeminiConfig","convertFieldsToThinkingConfig","convertFieldsToSpeechConfig","convertFieldsToServiceTier","settableServiceTier","convertMessagesToGeminiSystemInstruction","convertMessagesToGeminiContents","RequestError","PromptBlockedError","NoCandidatesError","convertGeminiCandidateToAIMessage","convertAIMessageToText","convertGeminiGenerateContentResponseToUsageMetadata","iife","EventSourceParserStream","SafeJsonEventParserStream","convertGoogleGeminiStream","ChatGenerationChunk","AIMessageChunk","convertGeminiPartsToToolCalls","subtractUsageMetadata","RunnableLambda","AIMessage","MalformedOutputError","schemaToGeminiParameters"],"sources":["../../src/chat_models/base.ts"],"sourcesContent":["import {\n BaseChatModel,\n type BaseChatModelCallOptions,\n type LangSmithParams,\n type BaseChatModelParams,\n} from \"@langchain/core/language_models/chat_models\";\nimport {\n AIMessage,\n AIMessageChunk,\n AIMessageChunkFields,\n BaseMessage,\n type UsageMetadata,\n} from \"@langchain/core/messages\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport { convertGoogleGeminiStream } from \"../utils/stream_events.js\";\nimport { concat } from \"@langchain/core/utils/stream\";\nimport { ChatGenerationChunk, ChatResult } from \"@langchain/core/outputs\";\nimport { EventSourceParserStream } from \"eventsource-parser/stream\";\nimport type { BindToolsInput } from \"@langchain/core/language_models/chat_models\";\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nimport PROFILES from \"./profiles.js\";\nimport type {\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"@langchain/core/language_models/base\";\nimport { Runnable, RunnableLambda } from \"@langchain/core/runnables\";\nimport {\n toJsonSchema,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n InteropZodType,\n isInteropZodSchema,\n} from \"@langchain/core/utils/types\";\n\nimport { ApiClient } from \"../clients/index.js\";\nimport { ChatGoogleFields, settableServiceTier } from \"./types.js\";\nimport { SafeJsonEventParserStream } from \"../utils/stream.js\";\nimport {\n convertAIMessageToText,\n convertGeminiCandidateToAIMessage,\n convertGeminiGenerateContentResponseToUsageMetadata,\n convertGeminiPartsToToolCalls,\n convertMessagesToGeminiContents,\n convertMessagesToGeminiSystemInstruction,\n} from \"../converters/messages.js\";\nimport {\n ConfigurationError,\n MalformedOutputError,\n NoCandidatesError,\n PromptBlockedError,\n RequestError,\n} from \"../utils/errors.js\";\nimport {\n convertToolsToGeminiTools,\n convertToolChoiceToGeminiConfig,\n schemaToGeminiParameters,\n} from \"../converters/tools.js\";\nimport {\n convertParamsToPlatformType,\n convertFieldsToSpeechConfig,\n convertFieldsToThinkingConfig,\n convertFieldsToServiceTier,\n} from \"../converters/params.js\";\nimport { Gemini } from \"./api-types.js\";\nimport { subtractUsageMetadata } from \"../utils/metadata.js\";\nimport {\n isSerializableSchema,\n SerializableSchema,\n} from \"@langchain/core/utils/standard_schema\";\nimport {\n assembleStructuredOutputPipeline,\n createContentParser,\n createFunctionCallingParser,\n} from \"@langchain/core/language_models/structured_output\";\nimport { iife } from \"../utils/misc\";\nimport ServiceTier = Gemini.ServiceTier;\n\nexport type GooglePlatformType = \"gai\" | \"gcp\";\n\nexport function getPlatformType(\n platform: GooglePlatformType | undefined,\n hasApiKey: boolean\n): GooglePlatformType {\n if (typeof platform !== \"undefined\") {\n return platform;\n } else if (hasApiKey) {\n return \"gai\";\n } else {\n return \"gcp\";\n }\n}\n\nfunction usageMetadataToTokenUsage(usageMetadata: UsageMetadata) {\n return {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n };\n}\n\nfunction mapDetailToMediaResolution(\n detail?: ChatGoogleFields[\"detail\"]\n): Gemini.GenerationConfig[\"mediaResolution\"] | undefined {\n switch (detail) {\n case \"low\":\n return \"MEDIA_RESOLUTION_LOW\";\n case \"high\":\n return \"MEDIA_RESOLUTION_HIGH\";\n default:\n return undefined;\n }\n}\n\nexport interface BaseChatGoogleParams\n extends BaseChatModelParams, ChatGoogleFields {\n /**\n * The name of the Gemini model to use.\n *\n * Example: \"gemini-3-pro-preview\"\n */\n model: string;\n\n /**\n * Optional. The API client implementation for making HTTP requests to the Gemini API.\n * If not set, a default client will be used based on the runtime environment.\n */\n apiClient?: ApiClient;\n\n /**\n * Hostname for the API call (if this is running on GCP)\n * Usually this is computed based on location and platformType.\n **/\n endpoint?: string;\n\n /**\n * Region where the LLM is stored (if this is running on GCP)\n * Defaults to \"global\"\n **/\n location?: string;\n\n /**\n * The version of the API functions. Part of the path.\n * Usually this is computed based on platformType.\n **/\n apiVersion?: string;\n\n /**\n * What platform to run the service on.\n * If not specified, the class should determine this from other\n * means. Either way, the platform actually used will be in\n * the \"platform\" getter.\n */\n platformType?: GooglePlatformType;\n\n /**\n * For compatibility with Google's libraries, should this use Vertex?\n * The \"platformType\" parmeter takes precedence.\n */\n vertexai?: boolean;\n\n /**\n * Backwards compatibility.\n * @deprecated in favor of using `disableStreaming` or `.stream()`\n */\n streaming?: boolean;\n\n streamUsage?: boolean;\n}\n\nexport interface BaseChatGoogleCallOptions\n extends BaseChatModelCallOptions, ChatGoogleFields {}\n\nexport abstract class BaseChatGoogle<\n CallOptions extends BaseChatGoogleCallOptions = BaseChatGoogleCallOptions,\n> extends BaseChatModel<CallOptions, AIMessageChunk> {\n model: string;\n\n streaming: boolean;\n\n disableStreaming: boolean;\n\n streamUsage: boolean = true;\n\n protected _platform?: GooglePlatformType;\n\n protected _endpoint?: string;\n\n protected _customHeaders?: Record<string, string>;\n\n protected _location?: string;\n\n protected _apiVersion?: string;\n\n protected apiClient: ApiClient;\n\n constructor(protected params: BaseChatGoogleParams) {\n super(params);\n this._addVersion(\"@langchain/google\", __PKG_VERSION__);\n\n if (!params.apiClient) {\n throw new ConfigurationError(\n \"BaseChatGoogle requires an apiClient. This should be provided automatically by ChatGoogle constructors. If you're extending BaseChatGoogle directly, please provide an apiClient instance.\"\n );\n }\n this.apiClient = params.apiClient;\n\n this.model = params.model;\n this._platform = convertParamsToPlatformType(params);\n this._endpoint = params.endpoint;\n this._customHeaders = params.customHeaders;\n this._location = params.location;\n this._apiVersion = params.apiVersion;\n\n this.disableStreaming = params?.disableStreaming === true;\n this.streaming = params?.streaming === true;\n if (this.disableStreaming) this.streaming = false;\n // disable streaming in BaseChatModel if explicitly disabled\n if (params?.streaming === false) this.disableStreaming = true;\n\n this.streamUsage = params?.streamUsage ?? this.streamUsage;\n if (this.disableStreaming) this.streamUsage = false;\n }\n\n _llmType(): string {\n return \"google\";\n }\n\n protected get platformType(): GooglePlatformType | undefined {\n return this._platform;\n }\n\n protected get platform(): GooglePlatformType {\n return getPlatformType(this._platform, this.apiClient.hasApiKey());\n }\n\n protected get isVertexExpress(): boolean {\n return this.platform === \"gcp\" && this.apiClient.hasApiKey();\n }\n\n protected get apiVersion(): string {\n if (typeof this._apiVersion !== \"undefined\") {\n return this._apiVersion;\n } else if (this.platform === \"gai\") {\n return \"v1beta\";\n } else {\n return \"v1\";\n }\n }\n\n protected get location(): string {\n return this._location || \"global\";\n }\n\n protected get endpoint(): string {\n if (typeof this._endpoint !== \"undefined\") {\n return this._endpoint;\n } else if (this.platform === \"gai\") {\n return \"generativelanguage.googleapis.com\";\n } else if (this.isVertexExpress) {\n return \"aiplatform.googleapis.com\";\n } else if (this.location === \"global\") {\n // See https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/locations#use_the_global_endpoint\n return \"aiplatform.googleapis.com\";\n } else {\n return `${this.location}-aiplatform.googleapis.com`;\n }\n }\n\n protected get publisher(): string {\n return \"google\";\n }\n\n protected get urlMethod(): string {\n return this.streaming ? \"streamGenerateContent?alt=sse\" : \"generateContent\";\n }\n\n /**\n * Returns the model profile for this instance's model, describing its\n * capabilities and constraints (e.g. max tokens, input/output modalities,\n * tool calling support).\n *\n * @example\n * ```typescript\n * const model = new ChatGoogle({ model: \"gemini-2.5-pro\" });\n * const profile = model.profile;\n * console.log(profile.maxInputTokens); // 1048576\n * console.log(profile.imageInputs); // true\n * ```\n */\n get profile(): ModelProfile {\n return PROFILES[this.model] ?? {};\n }\n\n protected async buildUrlGemini(urlMethod?: string): Promise<string> {\n return `https://${this.endpoint}/${this.apiVersion}/models/${this.model}:${\n urlMethod ?? this.urlMethod\n }`;\n }\n\n protected async buildUrlVertexExpress(urlMethod?: string): Promise<string> {\n return `https://${this.endpoint}/${this.apiVersion}/publishers/${\n this.publisher\n }/models/${this.model}:${urlMethod ?? this.urlMethod}`;\n }\n\n protected async buildUrlVertexLocation(urlMethod?: string): Promise<string> {\n const projectId = await this.apiClient.getProjectId();\n return `https://${this.endpoint}/${\n this.apiVersion\n }/projects/${projectId}/locations/${this.location}/publishers/${\n this.publisher\n }/models/${this.model}:${urlMethod ?? this.urlMethod}`;\n }\n\n protected async buildUrlVertex(urlMethod?: string): Promise<string> {\n if (this.isVertexExpress) {\n return this.buildUrlVertexExpress(urlMethod);\n } else {\n return this.buildUrlVertexLocation(urlMethod);\n }\n }\n\n protected async buildUrl(urlMethod?: string): Promise<string> {\n switch (this.platform) {\n case \"gai\":\n return this.buildUrlGemini(urlMethod);\n default:\n return this.buildUrlVertex(urlMethod);\n }\n }\n\n override invocationParams(options: this[\"ParsedCallOptions\"]) {\n const fields = combineGoogleChatModelFields(this.params, options);\n const mediaResolution =\n fields.mediaResolution ?? mapDetailToMediaResolution(fields.detail);\n\n // Convert tools to Gemini format\n const tools = fields.tools\n ? convertToolsToGeminiTools(fields.tools)\n : undefined;\n\n // Convert tool choice to Gemini function calling config\n const toolConfig = convertToolChoiceToGeminiConfig(\n options.tool_choice,\n !!(tools && tools.length > 0)\n );\n\n let responseJsonSchema:\n | JsonSchema7Type\n | Record<string, unknown>\n | undefined;\n let responseMimeType: string | undefined;\n\n if (fields.responseSchema) {\n // Convert Zod schema to JSON Schema if needed\n if (\n isInteropZodSchema(fields.responseSchema) ||\n isSerializableSchema(fields.responseSchema)\n ) {\n responseJsonSchema = toJsonSchema(fields.responseSchema);\n } else {\n responseJsonSchema = fields.responseSchema as Record<string, unknown>;\n }\n // Automatically set responseMimeType to \"application/json\" when schema is provided\n responseMimeType = \"application/json\";\n }\n\n return {\n ...(tools && tools.length > 0 ? { tools } : {}),\n ...(toolConfig ? { toolConfig } : {}),\n safetySettings: fields.safetySettings,\n generationConfig: {\n temperature: fields.temperature,\n topP: fields.topP,\n topK: fields.topK,\n maxOutputTokens: fields.maxOutputTokens,\n presencePenalty: fields.presencePenalty,\n frequencyPenalty: fields.frequencyPenalty,\n stopSequences: fields.stopSequences,\n ...(responseMimeType ? { responseMimeType } : {}),\n ...(responseJsonSchema ? { responseJsonSchema } : {}),\n ...(fields.responseModalities && fields.responseModalities.length > 0\n ? { responseModalities: fields.responseModalities }\n : {}),\n candidateCount: 1,\n seed: fields.seed,\n responseLogprobs: fields.responseLogprobs,\n logprobs: fields.logprobs,\n ...(fields.enableEnhancedCivicAnswers !== undefined\n ? { enableEnhancedCivicAnswers: fields.enableEnhancedCivicAnswers }\n : {}),\n thinkingConfig: convertFieldsToThinkingConfig(this.model, fields),\n speechConfig: convertFieldsToSpeechConfig(fields),\n ...(fields.imageConfig ? { imageConfig: fields.imageConfig } : {}),\n ...(mediaResolution ? { mediaResolution } : {}),\n },\n ...convertFieldsToServiceTier(this.platform, fields),\n };\n }\n\n getLsParams(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n const params = this.invocationParams(options);\n return {\n ls_provider: this.platform === \"gcp\" ? \"google_vertexai\" : \"google_genai\",\n ls_model_name: this.model,\n ls_model_type: \"chat\",\n ls_temperature: params.generationConfig?.temperature ?? undefined,\n ls_max_tokens: params.generationConfig?.maxOutputTokens ?? undefined,\n ls_stop: options.stop,\n };\n }\n\n getHeaders(options: this[\"ParsedCallOptions\"]): HeadersInit {\n const fields = combineGoogleChatModelFields(this.params, options);\n\n // The priority type is set via header only for Vertex\n const priorityHeaders: Record<string, string> =\n this.platform === \"gcp\" &&\n typeof fields.serviceTier !== \"undefined\" &&\n settableServiceTier.includes(fields.serviceTier)\n ? { \"X-Vertex-AI-LLM-Shared-Request-Type\": fields.serviceTier }\n : {};\n\n return {\n \"Content-Type\": \"application/json\",\n ...priorityHeaders,\n ...this._customHeaders,\n ...options.customHeaders,\n };\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.streaming) {\n const stream = await this._streamResponseChunks(\n messages,\n options,\n runManager\n );\n let finalChunk: ChatGenerationChunk | null = null;\n for await (const chunk of stream) {\n finalChunk = !finalChunk ? chunk : concat(finalChunk, chunk);\n }\n if (\n typeof finalChunk?.message?.content === \"string\" &&\n typeof (\n finalChunk?.message?.additional_kwargs\n ?.originalTextContentBlock as Record<string, unknown>\n )?.text === \"string\"\n ) {\n (\n finalChunk.message.additional_kwargs\n .originalTextContentBlock as Record<string, unknown>\n ).text = finalChunk.message.content;\n }\n return {\n generations: finalChunk ? [finalChunk] : [],\n };\n }\n\n const url = await this.buildUrl();\n const headers = this.getHeaders(options);\n const body = {\n ...this.invocationParams(options),\n systemInstruction: convertMessagesToGeminiSystemInstruction(messages),\n contents: convertMessagesToGeminiContents(messages),\n };\n\n const moduleName = this.constructor.name;\n await runManager?.handleCustomEvent(`google-request-${moduleName}`, {\n url,\n headers,\n body,\n });\n\n const response = await this.apiClient.fetch(\n new Request(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: options.signal,\n })\n );\n\n if (!response.ok) {\n const error = await RequestError.fromResponse(response);\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n error,\n });\n throw error;\n }\n\n const data: Gemini.GenerateContentResponse = await response.json();\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n data,\n url: response.url,\n headers: Array.from(response.headers.entries()),\n status: response.status,\n statusText: response.statusText,\n });\n\n // Check for prompt feedback errors\n if (data.promptFeedback?.blockReason) {\n throw PromptBlockedError.fromPromptFeedback(data.promptFeedback);\n }\n\n // Check if we have candidates\n if (!data.candidates || data.candidates.length === 0) {\n throw new NoCandidatesError();\n }\n\n // Use the first candidate\n const candidate = data.candidates[0];\n const message = convertGeminiCandidateToAIMessage(candidate);\n\n // Extract text content from the message\n const text = convertAIMessageToText(message);\n\n const usageMetadata =\n convertGeminiGenerateContentResponseToUsageMetadata(data);\n message.usage_metadata = usageMetadata;\n\n const serviceTier: ServiceTier = iife((): ServiceTier => {\n // @ts-expect-error - trafficType is defined on Vertex, so isn't in the OpenAPI spec\n const trafficType: string | undefined = data.usageMetadata?.trafficType;\n\n // AI Studio replies with actual service type in the header\n const serviceTierHeader: string | null = response.headers.get(\n \"x-gemini-service-tier\"\n );\n\n if (trafficType?.startsWith(\"ON_DEMAND_\")) {\n return trafficType?.substring(\"ON_DEMAND_\".length).toLowerCase();\n }\n return serviceTierHeader || \"standard\";\n });\n\n return {\n generations: [\n {\n text,\n message,\n generationInfo: {\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n safetyRatings: candidate.safetyRatings,\n citationMetadata: candidate.citationMetadata,\n tokenCount: candidate.tokenCount,\n },\n },\n ],\n llmOutput: {\n tokenUsage: usageMetadataToTokenUsage(usageMetadata),\n model: data.modelVersion,\n responseId: data.responseId,\n usageMetadata,\n serviceTier,\n },\n };\n }\n\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n const body = {\n ...this.invocationParams(options),\n systemInstruction: convertMessagesToGeminiSystemInstruction(messages),\n contents: convertMessagesToGeminiContents(messages),\n };\n\n const url = await this.buildUrl(\"streamGenerateContent?alt=sse\");\n const headers = this.getHeaders(options);\n\n const response = await this.apiClient.fetch(\n new Request(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: options.signal,\n })\n );\n\n if (!response.ok) {\n throw await RequestError.fromResponse(response);\n }\n\n if (!response.body) {\n return;\n }\n\n const eventStream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new SafeJsonEventParserStream<Gemini.GenerateContentResponse>()\n );\n\n const shouldStreamUsage =\n this.streamUsage !== false && options.streamUsage !== false;\n\n async function* geminiChunks(\n stream: ReadableStream<Gemini.GenerateContentResponse | null>,\n signal?: AbortSignal\n ) {\n const reader = stream.getReader();\n try {\n while (true) {\n if (signal?.aborted) {\n return;\n }\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n if (value !== null) {\n yield value;\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n yield* convertGoogleGeminiStream(\n geminiChunks(eventStream, options.signal),\n {\n streamUsage: shouldStreamUsage,\n }\n );\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const streamUsage: boolean = this.streamUsage ?? true;\n\n const body = {\n ...this.invocationParams(options),\n systemInstruction: convertMessagesToGeminiSystemInstruction(messages),\n contents: convertMessagesToGeminiContents(messages),\n };\n\n const url = await this.buildUrl(\"streamGenerateContent?alt=sse\");\n const headers = this.getHeaders(options);\n const moduleName = this.constructor.name;\n await runManager?.handleCustomEvent(`google-request-${moduleName}`, {\n url,\n headers,\n body,\n });\n\n const response = await this.apiClient.fetch(\n new Request(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: options.signal,\n })\n );\n\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n url: response.url,\n headers: Array.from(response.headers.entries()),\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const error = await RequestError.fromResponse(response);\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n error,\n });\n throw error;\n }\n\n if (response.body) {\n let previousUsage: UsageMetadata | undefined;\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new SafeJsonEventParserStream<Gemini.GenerateContentResponse>()\n )\n .pipeThrough(\n new TransformStream<\n Gemini.GenerateContentResponse,\n ChatGenerationChunk\n >({\n transform(chunk, controller) {\n // oxlint-disable-next-line no-void\n void runManager?.handleCustomEvent(`google-chunk-${moduleName}`, {\n chunk,\n });\n if (chunk === null) {\n controller.enqueue(\n new ChatGenerationChunk({\n text: \"\",\n message: new AIMessageChunk({ content: \"\" }),\n generationInfo: { finishReason: \"stop\" },\n })\n );\n return;\n }\n\n // Extract text delta from the chunk\n const candidate = chunk.candidates?.[0];\n if (!candidate) {\n return;\n }\n\n const message = convertGeminiCandidateToAIMessage(candidate);\n const text = convertAIMessageToText(message);\n\n const parts = candidate.content?.parts ?? [];\n const toolCalls = convertGeminiPartsToToolCalls(parts);\n\n // Only emit if we have content\n if (parts.length > 0 || candidate.finishReason) {\n const messageChunkParams: AIMessageChunkFields = {\n content: message.content,\n tool_calls: toolCalls,\n response_metadata: {\n model_provider: \"google\",\n },\n additional_kwargs: {\n ...(message.additional_kwargs.originalTextContentBlock\n ? {\n originalTextContentBlock:\n message.additional_kwargs.originalTextContentBlock,\n }\n : {}),\n ...(candidate.finishReason\n ? {\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n }\n : {}),\n },\n };\n\n if (chunk?.usageMetadata && streamUsage) {\n const cumulative =\n convertGeminiGenerateContentResponseToUsageMetadata(chunk);\n messageChunkParams.usage_metadata = subtractUsageMetadata(\n cumulative,\n previousUsage\n );\n previousUsage = cumulative;\n }\n const messageChunk = new AIMessageChunk(messageChunkParams);\n\n controller.enqueue(\n new ChatGenerationChunk({\n text: text,\n message: messageChunk,\n generationInfo: {\n ...(candidate.finishReason && {\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n }),\n ...(candidate.safetyRatings && {\n safetyRatings: candidate.safetyRatings,\n }),\n },\n })\n );\n }\n },\n })\n );\n\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n yield value;\n await runManager?.handleLLMNewToken(\n value.text ?? \"\",\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: value }\n );\n }\n } finally {\n reader.releaseLock();\n }\n }\n }\n\n /**\n * Bind tool-like objects to this chat model.\n *\n * @param tools A list of tool definitions to bind to this chat model.\n * Can be a structured tool, an OpenAI formatted tool, or a Gemini function declaration.\n * @param kwargs Any additional parameters to bind.\n */\n bindTools(\n tools: BindToolsInput[],\n kwargs?: Partial<CallOptions>\n ): Runnable<BaseMessage[], AIMessageChunk, CallOptions> {\n return this.withConfig({\n ...kwargs,\n tools,\n } as Partial<CallOptions>);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n /**\n * Get structured output from the model based on a schema.\n *\n * This method supports two modes:\n * - `jsonMode`: Uses `responseSchema` to get JSON responses directly (preferred for structured outputs)\n * - `functionCalling`: Uses function calling with tools (default, for compatibility)\n *\n * @param outputSchema - The schema to use for structured output (Zod schema or JSON Schema)\n * @param config - Configuration options including method and whether to include raw response\n * @returns A Runnable that returns the parsed structured output\n */\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n outputSchema:\n | InteropZodType<RunOutput>\n | SerializableSchema<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n let llm: Runnable<BaseMessage[], AIMessageChunk, CallOptions>;\n let outputParser: Runnable<BaseMessage, RunOutput>;\n\n const { schema, name, includeRaw } = {\n ...config,\n schema: outputSchema,\n };\n let method = config?.method ?? \"functionCalling\";\n\n if (method === \"jsonMode\") {\n console.warn(\n `\"jsonMode\" is not supported for Google models. Falling back to \"jsonSchema\".`\n );\n method = \"jsonSchema\";\n }\n\n if (method === \"jsonSchema\") {\n // Use JSON mode with responseSchema\n llm = this.withConfig({\n responseSchema: schema,\n } as Partial<CallOptions>);\n\n outputParser = RunnableLambda.from<BaseMessage, RunOutput>(\n async (input: BaseMessage): Promise<RunOutput> => {\n if (\n !AIMessage.isInstance(input) &&\n !AIMessageChunk.isInstance(input)\n ) {\n throw new MalformedOutputError({\n message: \"Input is not an AIMessage or AIMessageChunk.\",\n });\n }\n\n if (!input.text) {\n throw new MalformedOutputError({\n message:\n \"No content found in response. Cannot parse structured output.\",\n });\n }\n\n // Parse JSON and validate with schema\n const parser = createContentParser(schema);\n return await parser.parse(input.text);\n }\n );\n } else if (method === \"functionCalling\") {\n // Use function calling mode\n let functionName = name ?? \"extract\";\n let geminiFunctionDeclaration: Gemini.Tools.FunctionDeclaration;\n\n if (isInteropZodSchema(schema) || isSerializableSchema(schema)) {\n const jsonSchema = schemaToGeminiParameters(schema);\n const description =\n typeof jsonSchema.description === \"string\"\n ? jsonSchema.description\n : \"A function available to call.\";\n geminiFunctionDeclaration = {\n name: functionName,\n description,\n parameters: jsonSchema as Gemini.Tools.Schema,\n };\n } else if (\n typeof schema.name === \"string\" &&\n typeof schema.parameters === \"object\" &&\n schema.parameters != null\n ) {\n geminiFunctionDeclaration = schema as Gemini.Tools.FunctionDeclaration;\n functionName = schema.name;\n } else {\n // We are providing the schema for *just* the parameters\n const parameters = schemaToGeminiParameters(schema);\n geminiFunctionDeclaration = {\n name: functionName,\n description: (schema as { description?: string }).description ?? \"\",\n parameters,\n };\n }\n\n const tools: Gemini.Tool[] = [\n {\n functionDeclarations: [geminiFunctionDeclaration],\n },\n ];\n llm = this.bindTools(tools).withConfig({\n tool_choice: functionName,\n } as Partial<CallOptions>);\n\n outputParser = createFunctionCallingParser(schema, functionName);\n } else {\n throw new ConfigurationError(\n `Unrecognized structured output method '${method}'. Expected 'functionCalling' or 'jsonSchema'`\n );\n }\n\n return assembleStructuredOutputPipeline(\n llm,\n outputParser,\n includeRaw,\n includeRaw\n ? \"ChatGoogleStructuredOutputRunnable\"\n : \"ChatGoogleStructuredOutput\"\n );\n }\n}\n\ntype CombinableFields = Omit<BaseChatGoogleParams, \"model\">;\n\nexport function combineGoogleChatModelFields(\n a: CombinableFields,\n b: CombinableFields,\n ...rest: CombinableFields[]\n): CombinableFields {\n const combined: CombinableFields = {\n temperature: b.temperature ?? a.temperature,\n topP: b.topP ?? a.topP,\n topK: b.topK ?? a.topK,\n maxOutputTokens: b.maxOutputTokens ?? a.maxOutputTokens,\n presencePenalty: b.presencePenalty ?? a.presencePenalty,\n frequencyPenalty: b.frequencyPenalty ?? a.frequencyPenalty,\n stopSequences: b.stopSequences ?? a.stopSequences,\n seed: b.seed ?? a.seed,\n responseLogprobs: b.responseLogprobs ?? a.responseLogprobs,\n logprobs: b.logprobs ?? a.logprobs,\n safetySettings: b.safetySettings ?? a.safetySettings,\n responseSchema: b.responseSchema ?? a.responseSchema,\n tools: b.tools ?? a.tools,\n responseModalities: b.responseModalities ?? a.responseModalities,\n enableEnhancedCivicAnswers:\n b.enableEnhancedCivicAnswers ?? a.enableEnhancedCivicAnswers,\n speechConfig: b.speechConfig ?? a.speechConfig,\n imageConfig: b.imageConfig ?? a.imageConfig,\n mediaResolution: b.mediaResolution ?? a.mediaResolution,\n detail: b.detail ?? a.detail,\n maxReasoningTokens: b.maxReasoningTokens ?? a.maxReasoningTokens,\n thinkingBudget: b.thinkingBudget ?? a.thinkingBudget,\n reasoningEffort: b.reasoningEffort ?? a.reasoningEffort,\n thinkingLevel: b.thinkingLevel ?? a.thinkingLevel,\n serviceTier: b.serviceTier ?? a.serviceTier,\n };\n if (rest.length > 0) {\n return combineGoogleChatModelFields(combined, rest[0], ...rest.slice(1));\n }\n return combined;\n}\n\nexport function getGoogleChatModelParams<TParams extends BaseChatGoogleParams>(\n modelOrParams: string | TParams,\n paramsArg?: Omit<TParams, \"model\">\n): TParams {\n const model =\n typeof modelOrParams === \"string\" ? modelOrParams : modelOrParams.model;\n const params = typeof modelOrParams === \"string\" ? paramsArg : modelOrParams;\n return { model, ...params } as TParams;\n}\n"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { ChatGoogleFields } from "./types.cjs";
5
5
  import { BaseChatModel, BaseChatModelCallOptions, BaseChatModelParams, BindToolsInput, LangSmithParams } from "@langchain/core/language_models/chat_models";
6
6
  import { AIMessageChunk, BaseMessage } from "@langchain/core/messages";
7
7
  import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
8
+ import { ChatModelStreamEvent } from "@langchain/core/language_models/event";
8
9
  import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
9
10
  import { ModelProfile } from "@langchain/core/language_models/profile";
10
11
  import { BaseLanguageModelInput, StructuredOutputMethodOptions } from "@langchain/core/language_models/base";
@@ -70,6 +71,7 @@ declare abstract class BaseChatGoogle<CallOptions extends BaseChatGoogleCallOpti
70
71
  streamUsage: boolean;
71
72
  protected _platform?: GooglePlatformType;
72
73
  protected _endpoint?: string;
74
+ protected _customHeaders?: Record<string, string>;
73
75
  protected _location?: string;
74
76
  protected _apiVersion?: string;
75
77
  protected apiClient: ApiClient;
@@ -103,6 +105,7 @@ declare abstract class BaseChatGoogle<CallOptions extends BaseChatGoogleCallOpti
103
105
  protected buildUrlVertex(urlMethod?: string): Promise<string>;
104
106
  protected buildUrl(urlMethod?: string): Promise<string>;
105
107
  invocationParams(options: this["ParsedCallOptions"]): {
108
+ serviceTier?: ServiceTier | undefined;
106
109
  tools?: Gemini.Tool[] | undefined;
107
110
  toolConfig?: Gemini.Tools.ToolConfig | undefined;
108
111
  safetySettings: {
@@ -237,7 +240,9 @@ declare abstract class BaseChatGoogle<CallOptions extends BaseChatGoogleCallOpti
237
240
  };
238
241
  };
239
242
  getLsParams(options: this["ParsedCallOptions"]): LangSmithParams;
243
+ getHeaders(options: this["ParsedCallOptions"]): HeadersInit;
240
244
  _generate(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;
245
+ _streamChatModelEvents(messages: BaseMessage[], options: this["ParsedCallOptions"], _runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatModelStreamEvent>;
241
246
  _streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
242
247
  /**
243
248
  * Bind tool-like objects to this chat model.
@@ -11,6 +11,7 @@ import { InteropZodType } from "@langchain/core/utils/types";
11
11
  import { BaseLanguageModelInput, StructuredOutputMethodOptions } from "@langchain/core/language_models/base";
12
12
  import { SerializableSchema } from "@langchain/core/utils/standard_schema";
13
13
  import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
14
+ import { ChatModelStreamEvent } from "@langchain/core/language_models/event";
14
15
  import { ModelProfile } from "@langchain/core/language_models/profile";
15
16
 
16
17
  //#region src/chat_models/base.d.ts
@@ -70,6 +71,7 @@ declare abstract class BaseChatGoogle<CallOptions extends BaseChatGoogleCallOpti
70
71
  streamUsage: boolean;
71
72
  protected _platform?: GooglePlatformType;
72
73
  protected _endpoint?: string;
74
+ protected _customHeaders?: Record<string, string>;
73
75
  protected _location?: string;
74
76
  protected _apiVersion?: string;
75
77
  protected apiClient: ApiClient;
@@ -103,6 +105,7 @@ declare abstract class BaseChatGoogle<CallOptions extends BaseChatGoogleCallOpti
103
105
  protected buildUrlVertex(urlMethod?: string): Promise<string>;
104
106
  protected buildUrl(urlMethod?: string): Promise<string>;
105
107
  invocationParams(options: this["ParsedCallOptions"]): {
108
+ serviceTier?: ServiceTier | undefined;
106
109
  tools?: Gemini.Tool[] | undefined;
107
110
  toolConfig?: Gemini.Tools.ToolConfig | undefined;
108
111
  safetySettings: {
@@ -237,7 +240,9 @@ declare abstract class BaseChatGoogle<CallOptions extends BaseChatGoogleCallOpti
237
240
  };
238
241
  };
239
242
  getLsParams(options: this["ParsedCallOptions"]): LangSmithParams;
243
+ getHeaders(options: this["ParsedCallOptions"]): HeadersInit;
240
244
  _generate(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;
245
+ _streamChatModelEvents(messages: BaseMessage[], options: this["ParsedCallOptions"], _runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatModelStreamEvent>;
241
246
  _streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
242
247
  /**
243
248
  * Bind tool-like objects to this chat model.