@langchain/google 0.2.12 → 0.2.13

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 (110) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/chat_models/api_types/generate_content.d.cts +0 -2
  3. package/dist/chat_models/api_types/generate_content.d.ts +0 -2
  4. package/dist/chat_models/api_types/interactions.d.cts +1423 -0
  5. package/dist/chat_models/api_types/interactions.d.ts +1423 -0
  6. package/dist/chat_models/base.cjs +12 -11
  7. package/dist/chat_models/base.cjs.map +1 -1
  8. package/dist/chat_models/base.d.cts +3 -5
  9. package/dist/chat_models/base.d.ts +3 -5
  10. package/dist/chat_models/base.js +12 -11
  11. package/dist/chat_models/base.js.map +1 -1
  12. package/dist/chat_models/handlers/base.cjs +1 -2
  13. package/dist/chat_models/handlers/base.d.cts +0 -2
  14. package/dist/chat_models/handlers/base.d.ts +0 -2
  15. package/dist/chat_models/handlers/base.js +1 -2
  16. package/dist/chat_models/handlers/generate_content.cjs +5 -6
  17. package/dist/chat_models/handlers/generate_content.d.cts +0 -2
  18. package/dist/chat_models/handlers/generate_content.d.ts +0 -2
  19. package/dist/chat_models/handlers/generate_content.js +5 -6
  20. package/dist/chat_models/handlers/index.cjs +2 -0
  21. package/dist/chat_models/handlers/index.d.cts +2 -1
  22. package/dist/chat_models/handlers/index.d.ts +2 -1
  23. package/dist/chat_models/handlers/index.js +2 -1
  24. package/dist/chat_models/handlers/interactions.cjs +303 -0
  25. package/dist/chat_models/handlers/interactions.cjs.map +1 -0
  26. package/dist/chat_models/handlers/interactions.d.cts +33 -0
  27. package/dist/chat_models/handlers/interactions.d.ts +33 -0
  28. package/dist/chat_models/handlers/interactions.js +303 -0
  29. package/dist/chat_models/handlers/interactions.js.map +1 -0
  30. package/dist/chat_models/index.cjs +5 -4
  31. package/dist/chat_models/index.cjs.map +1 -1
  32. package/dist/chat_models/index.d.cts +4 -5
  33. package/dist/chat_models/index.d.ts +4 -5
  34. package/dist/chat_models/index.js +5 -5
  35. package/dist/chat_models/index.js.map +1 -1
  36. package/dist/chat_models/node.cjs +3 -4
  37. package/dist/chat_models/node.d.cts +1 -3
  38. package/dist/chat_models/node.d.ts +1 -3
  39. package/dist/chat_models/node.js +3 -4
  40. package/dist/chat_models/profiles.cjs +1 -2
  41. package/dist/chat_models/profiles.js +1 -2
  42. package/dist/chat_models/types.cjs +1 -2
  43. package/dist/chat_models/types.cjs.map +1 -1
  44. package/dist/chat_models/types.d.cts +524 -23
  45. package/dist/chat_models/types.d.ts +524 -23
  46. package/dist/chat_models/types.js +1 -2
  47. package/dist/chat_models/types.js.map +1 -1
  48. package/dist/clients/index.cjs +3 -4
  49. package/dist/clients/index.d.cts +0 -2
  50. package/dist/clients/index.d.ts +0 -2
  51. package/dist/clients/index.js +3 -4
  52. package/dist/clients/node.cjs +4 -5
  53. package/dist/clients/node.d.cts +0 -2
  54. package/dist/clients/node.d.ts +0 -2
  55. package/dist/clients/node.js +4 -5
  56. package/dist/const.cjs +1 -2
  57. package/dist/const.js +1 -2
  58. package/dist/converters/generate_content/messages.cjs +1 -2
  59. package/dist/converters/generate_content/messages.js +1 -2
  60. package/dist/converters/generate_content/params.cjs +1 -2
  61. package/dist/converters/generate_content/params.js +1 -2
  62. package/dist/converters/generate_content/stream_events.cjs +1 -2
  63. package/dist/converters/generate_content/stream_events.js +1 -2
  64. package/dist/converters/generate_content/tools.cjs +1 -2
  65. package/dist/converters/generate_content/tools.js +1 -2
  66. package/dist/converters/interactions/messages.cjs +766 -0
  67. package/dist/converters/interactions/messages.cjs.map +1 -0
  68. package/dist/converters/interactions/messages.js +759 -0
  69. package/dist/converters/interactions/messages.js.map +1 -0
  70. package/dist/converters/interactions/params.cjs +244 -0
  71. package/dist/converters/interactions/params.cjs.map +1 -0
  72. package/dist/converters/interactions/params.js +237 -0
  73. package/dist/converters/interactions/params.js.map +1 -0
  74. package/dist/converters/interactions/stream_events.cjs +769 -0
  75. package/dist/converters/interactions/stream_events.cjs.map +1 -0
  76. package/dist/converters/interactions/stream_events.js +768 -0
  77. package/dist/converters/interactions/stream_events.js.map +1 -0
  78. package/dist/converters/interactions/tools.cjs +229 -0
  79. package/dist/converters/interactions/tools.cjs.map +1 -0
  80. package/dist/converters/interactions/tools.js +228 -0
  81. package/dist/converters/interactions/tools.js.map +1 -0
  82. package/dist/converters/shared/params.cjs +1 -2
  83. package/dist/converters/shared/params.js +1 -2
  84. package/dist/index.cjs +2 -0
  85. package/dist/index.d.cts +3 -2
  86. package/dist/index.d.ts +3 -2
  87. package/dist/index.js +2 -1
  88. package/dist/node.cjs +1 -1
  89. package/dist/node.d.cts +1 -1
  90. package/dist/node.d.ts +1 -1
  91. package/dist/node.js +1 -1
  92. package/dist/utils/errors.cjs +1 -2
  93. package/dist/utils/errors.js +1 -2
  94. package/dist/utils/gcp-auth.cjs +3 -4
  95. package/dist/utils/gcp-auth.d.cts +0 -2
  96. package/dist/utils/gcp-auth.d.ts +0 -2
  97. package/dist/utils/gcp-auth.js +3 -4
  98. package/dist/utils/handler.cjs +1 -2
  99. package/dist/utils/handler.d.cts +0 -2
  100. package/dist/utils/handler.d.ts +0 -2
  101. package/dist/utils/handler.js +1 -2
  102. package/dist/utils/metadata.cjs +1 -2
  103. package/dist/utils/metadata.js +1 -2
  104. package/dist/utils/misc.cjs +1 -2
  105. package/dist/utils/misc.d.cts +0 -2
  106. package/dist/utils/misc.d.ts +0 -2
  107. package/dist/utils/misc.js +1 -2
  108. package/dist/utils/stream.cjs +1 -2
  109. package/dist/utils/stream.js +1 -2
  110. package/package.json +11 -9
@@ -1,20 +1,20 @@
1
- import { iife } from "../../utils/misc.js";
2
- import { NoCandidatesError, PromptBlockedError, RequestError } from "../../utils/errors.js";
3
- import { subtractUsageMetadata, usageMetadataToTokenUsage } from "../../utils/metadata.js";
4
1
  import { GoogleChatApiHandler } from "./base.js";
5
2
  import { SafeJsonEventParserStream } from "../../utils/stream.js";
3
+ import { subtractUsageMetadata, usageMetadataToTokenUsage } from "../../utils/metadata.js";
4
+ import { iife } from "../../utils/misc.js";
5
+ import { NoCandidatesError, PromptBlockedError, RequestError } from "../../utils/errors.js";
6
6
  import { convertAIMessageToText, convertGeminiCandidateToAIMessage, convertGeminiGenerateContentResponseToUsageMetadata, convertGeminiPartsToToolCalls, convertMessagesToGeminiContents, convertMessagesToGeminiSystemInstruction } from "../../converters/generate_content/messages.js";
7
7
  import { convertToolChoiceToGeminiConfig, convertToolsToGeminiTools, mixesBuiltinAndFunctionTools, schemaToGeminiParameters } from "../../converters/generate_content/tools.js";
8
- import { settableServiceTier } from "../types.js";
9
8
  import { combineGoogleChatModelFields, convertFieldsToServiceTier, convertFieldsToSpeechConfig, convertFieldsToThinkingConfig, mapDetailToMediaResolution } from "../../converters/generate_content/params.js";
10
9
  import { convertGoogleGeminiStream } from "../../converters/generate_content/stream_events.js";
10
+ import { settableServiceTier } from "../types.js";
11
11
  import { AIMessageChunk } from "@langchain/core/messages";
12
12
  import { ChatGenerationChunk } from "@langchain/core/outputs";
13
13
  import { isInteropZodSchema } from "@langchain/core/utils/types";
14
14
  import { isSerializableSchema } from "@langchain/core/utils/standard_schema";
15
15
  import { toJsonSchema } from "@langchain/core/utils/json_schema";
16
16
  import { EventSourceParserStream } from "eventsource-parser/stream";
17
- //#region src/chat_models/handlers/generate_content.ts
17
+ // src/chat_models/handlers/generate_content.ts
18
18
  /**
19
19
  * Concrete wire protocol handler for Google's Generate Content API
20
20
  * (`/v1beta/models/{model}:generateContent` and `:streamGenerateContent`).
@@ -339,7 +339,6 @@ var GenerateContentApiHandler = class extends GoogleChatApiHandler {
339
339
  };
340
340
  }
341
341
  };
342
- //#endregion
343
342
  export { GenerateContentApiHandler };
344
343
 
345
344
  //# sourceMappingURL=generate_content.js.map
@@ -1,4 +1,6 @@
1
1
  const require_base = require("./base.cjs");
2
2
  const require_generate_content = require("./generate_content.cjs");
3
+ const require_interactions = require("./interactions.cjs");
3
4
  exports.GenerateContentApiHandler = require_generate_content.GenerateContentApiHandler;
4
5
  exports.GoogleChatApiHandler = require_base.GoogleChatApiHandler;
6
+ exports.InteractionsApiHandler = require_interactions.InteractionsApiHandler;
@@ -1,3 +1,4 @@
1
1
  import { GoogleChatApiHandler } from "./base.cjs";
2
2
  import { GenerateContentApiHandler } from "./generate_content.cjs";
3
- export { GenerateContentApiHandler, GoogleChatApiHandler };
3
+ import { InteractionsApiHandler } from "./interactions.cjs";
4
+ export { GenerateContentApiHandler, GoogleChatApiHandler, InteractionsApiHandler };
@@ -1,3 +1,4 @@
1
1
  import { GoogleChatApiHandler } from "./base.js";
2
2
  import { GenerateContentApiHandler } from "./generate_content.js";
3
- export { GenerateContentApiHandler, GoogleChatApiHandler };
3
+ import { InteractionsApiHandler } from "./interactions.js";
4
+ export { GenerateContentApiHandler, GoogleChatApiHandler, InteractionsApiHandler };
@@ -1,3 +1,4 @@
1
1
  import { GoogleChatApiHandler } from "./base.js";
2
2
  import { GenerateContentApiHandler } from "./generate_content.js";
3
- export { GenerateContentApiHandler, GoogleChatApiHandler };
3
+ import { InteractionsApiHandler } from "./interactions.js";
4
+ export { GenerateContentApiHandler, GoogleChatApiHandler, InteractionsApiHandler };
@@ -0,0 +1,303 @@
1
+ const require_base = require("./base.cjs");
2
+ const require_stream = require("../../utils/stream.cjs");
3
+ const require_metadata = require("../../utils/metadata.cjs");
4
+ const require_misc = require("../../utils/misc.cjs");
5
+ const require_errors = require("../../utils/errors.cjs");
6
+ const require_messages = require("../../converters/generate_content/messages.cjs");
7
+ const require_tools = require("../../converters/generate_content/tools.cjs");
8
+ const require_messages$1 = require("../../converters/interactions/messages.cjs");
9
+ const require_tools$1 = require("../../converters/interactions/tools.cjs");
10
+ const require_params = require("../../converters/interactions/params.cjs");
11
+ const require_stream_events = require("../../converters/interactions/stream_events.cjs");
12
+ const require_types = require("../types.cjs");
13
+ let _langchain_core_utils_types = require("@langchain/core/utils/types");
14
+ let _langchain_core_utils_standard_schema = require("@langchain/core/utils/standard_schema");
15
+ let eventsource_parser_stream = require("eventsource-parser/stream");
16
+ // src/chat_models/handlers/interactions.ts
17
+ /**
18
+ * Concrete wire protocol handler for Google's Interactions API
19
+ * (`/v1beta/interactions` and `/v1beta/interactions?alt=sse`).
20
+ */
21
+ var InteractionsApiHandler = class extends require_base.GoogleChatApiHandler {
22
+ constructor(params) {
23
+ super(params);
24
+ }
25
+ get urlMethod() {
26
+ return this.params.streaming ? "interactions?alt=sse" : "interactions";
27
+ }
28
+ getUrlSuffix(urlMethod) {
29
+ const method = urlMethod ?? this.urlMethod;
30
+ if (method === "stream" || method.includes("alt=sse") || method.includes("stream")) return "/interactions?alt=sse";
31
+ return "/interactions";
32
+ }
33
+ async buildUrlVertexLocation(urlMethod) {
34
+ const projectId = await this.params.apiClient.getProjectId();
35
+ return this.formatUrl([`projects/${projectId}`, `locations/${this.params.location}`], urlMethod);
36
+ }
37
+ getHeaders(options) {
38
+ const fields = require_params.combineInteractionsFields(this.params, options ?? {});
39
+ return {
40
+ ...this.params.platform === "gcp" && typeof fields.serviceTier !== "undefined" && require_types.settableServiceTier.includes(fields.serviceTier) ? { "X-Vertex-AI-LLM-Shared-Request-Type": fields.serviceTier } : {},
41
+ ...super.getHeaders(options)
42
+ };
43
+ }
44
+ async generate(messages, options, runManager) {
45
+ const url = await this.buildUrl("interactions");
46
+ const headers = this.getHeaders(options);
47
+ const fields = require_params.combineInteractionsFields(this.params, options ?? {});
48
+ const mediaResolution = require_params.convertMediaResolutionToInteractions(fields.mediaResolution, fields.detail);
49
+ const systemInstruction = require_messages$1.convertMessagesToInteractionsSystemInstruction(messages);
50
+ const input = require_messages$1.convertMessagesToInteractionsInput(messages, mediaResolution);
51
+ const body = {
52
+ ...this.invocationParams(options),
53
+ ...systemInstruction ? { system_instruction: systemInstruction } : {},
54
+ input
55
+ };
56
+ const moduleName = this.constructor.name;
57
+ await runManager?.handleCustomEvent(`google-request-${moduleName}`, {
58
+ url,
59
+ headers,
60
+ body
61
+ });
62
+ let response;
63
+ try {
64
+ response = await this.params.caller.callWithOptions({
65
+ signal: options?.signal,
66
+ maxRetries: options?.maxRetries
67
+ }, async () => {
68
+ const nextResponse = await this.params.apiClient.fetch(new Request(url, {
69
+ method: "POST",
70
+ headers,
71
+ body: JSON.stringify(body),
72
+ signal: options?.signal
73
+ }));
74
+ if (!nextResponse.ok) throw await require_errors.RequestError.fromResponse(nextResponse);
75
+ return nextResponse;
76
+ });
77
+ } catch (error) {
78
+ await runManager?.handleCustomEvent(`google-response-${moduleName}`, { error });
79
+ throw error;
80
+ }
81
+ const data = await response.json();
82
+ await runManager?.handleCustomEvent(`google-response-${moduleName}`, {
83
+ data,
84
+ url: response.url,
85
+ headers: Array.from(response.headers.entries()),
86
+ status: response.status,
87
+ statusText: response.statusText
88
+ });
89
+ const { message, finishReason, usageMetadata } = require_messages$1.convertInteractionToAIMessage(data);
90
+ if (data.status === "failed" && (!data.steps || data.steps.length === 0) && (!data.outputs || data.outputs.length === 0)) throw new require_errors.NoCandidatesError();
91
+ const text = require_messages.convertAIMessageToText(message);
92
+ const serviceTier = require_misc.iife(() => {
93
+ const serviceTierHeader = response.headers.get("x-gemini-service-tier");
94
+ return data.service_tier ?? serviceTierHeader ?? "standard";
95
+ });
96
+ return {
97
+ generations: [{
98
+ text,
99
+ message,
100
+ generationInfo: {
101
+ ...finishReason ? { finishReason } : {},
102
+ ...message.response_metadata?.citationMetadata ? { citationMetadata: message.response_metadata.citationMetadata } : {},
103
+ ...message.response_metadata?.groundingMetadata ? { groundingMetadata: message.response_metadata.groundingMetadata } : {}
104
+ }
105
+ }],
106
+ llmOutput: {
107
+ tokenUsage: usageMetadata ? require_metadata.usageMetadataToTokenUsage(usageMetadata) : void 0,
108
+ model: data.model ?? this.params.model,
109
+ responseId: data.id,
110
+ usageMetadata,
111
+ serviceTier
112
+ }
113
+ };
114
+ }
115
+ async *streamResponseChunks(messages, options, runManager) {
116
+ const streamUsage = options?.streamUsage ?? this.params.streamUsage ?? false;
117
+ const fields = require_params.combineInteractionsFields(this.params, options ?? {});
118
+ const mediaResolution = require_params.convertMediaResolutionToInteractions(fields.mediaResolution, fields.detail);
119
+ const systemInstruction = require_messages$1.convertMessagesToInteractionsSystemInstruction(messages);
120
+ const input = require_messages$1.convertMessagesToInteractionsInput(messages, mediaResolution);
121
+ const body = {
122
+ ...this.invocationParams(options),
123
+ stream: true,
124
+ ...systemInstruction ? { system_instruction: systemInstruction } : {},
125
+ input
126
+ };
127
+ const url = await this.buildUrl("interactions?alt=sse");
128
+ const headers = this.getHeaders(options);
129
+ const moduleName = this.constructor.name;
130
+ await runManager?.handleCustomEvent(`google-request-${moduleName}`, {
131
+ url,
132
+ headers,
133
+ body
134
+ });
135
+ let response;
136
+ try {
137
+ response = await this.params.caller.callWithOptions({
138
+ signal: options?.signal,
139
+ maxRetries: options?.maxRetries
140
+ }, async () => {
141
+ const nextResponse = await this.params.apiClient.fetch(new Request(url, {
142
+ method: "POST",
143
+ headers,
144
+ body: JSON.stringify(body),
145
+ signal: options?.signal
146
+ }));
147
+ if (!nextResponse.ok) throw await require_errors.RequestError.fromResponse(nextResponse);
148
+ return nextResponse;
149
+ });
150
+ } catch (error) {
151
+ await runManager?.handleCustomEvent(`google-response-${moduleName}`, { error });
152
+ throw error;
153
+ }
154
+ await runManager?.handleCustomEvent(`google-response-${moduleName}`, {
155
+ url: response.url,
156
+ headers: response.headers,
157
+ status: response.status,
158
+ statusText: response.statusText
159
+ });
160
+ if (response.body) {
161
+ const eventStream = response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new eventsource_parser_stream.EventSourceParserStream()).pipeThrough(new require_stream.SafeJsonEventParserStream());
162
+ async function* sseEvents(stream, signal) {
163
+ const reader = stream.getReader();
164
+ try {
165
+ while (true) {
166
+ if (signal?.aborted) return;
167
+ const { done, value } = await reader.read();
168
+ if (done) break;
169
+ await runManager?.handleCustomEvent(`google-chunk-${moduleName}`, { chunk: value });
170
+ if (value !== null) yield value;
171
+ }
172
+ } finally {
173
+ reader.releaseLock();
174
+ }
175
+ }
176
+ for await (const chunk of require_stream_events.convertInteractionsStreamToChunks(sseEvents(eventStream, options?.signal), {
177
+ streamUsage,
178
+ model: this.params.model
179
+ })) {
180
+ yield chunk;
181
+ await runManager?.handleLLMNewToken(chunk.text ?? "", void 0, void 0, void 0, void 0, { chunk });
182
+ }
183
+ }
184
+ }
185
+ async *streamChatModelEvents(messages, options, _runManager) {
186
+ const fields = require_params.combineInteractionsFields(this.params, options ?? {});
187
+ const mediaResolution = require_params.convertMediaResolutionToInteractions(fields.mediaResolution, fields.detail);
188
+ const systemInstruction = require_messages$1.convertMessagesToInteractionsSystemInstruction(messages);
189
+ const input = require_messages$1.convertMessagesToInteractionsInput(messages, mediaResolution);
190
+ const body = {
191
+ ...this.invocationParams(options),
192
+ stream: true,
193
+ ...systemInstruction ? { system_instruction: systemInstruction } : {},
194
+ input
195
+ };
196
+ const url = await this.buildUrl("interactions?alt=sse");
197
+ const headers = this.getHeaders(options);
198
+ const response = await this.params.apiClient.fetch(new Request(url, {
199
+ method: "POST",
200
+ headers,
201
+ body: JSON.stringify(body),
202
+ signal: options?.signal
203
+ }));
204
+ if (!response.ok) throw await require_errors.RequestError.fromResponse(response);
205
+ if (!response.body) return;
206
+ const eventStream = response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new eventsource_parser_stream.EventSourceParserStream()).pipeThrough(new require_stream.SafeJsonEventParserStream());
207
+ const shouldStreamUsage = this.params.streamUsage !== false && options?.streamUsage !== false;
208
+ async function* sseEvents(stream, signal) {
209
+ const reader = stream.getReader();
210
+ try {
211
+ while (true) {
212
+ if (signal?.aborted) return;
213
+ const { done, value } = await reader.read();
214
+ if (done) break;
215
+ if (value !== null) yield value;
216
+ }
217
+ } finally {
218
+ reader.releaseLock();
219
+ }
220
+ }
221
+ yield* require_stream_events.convertInteractionsStream(sseEvents(eventStream, options?.signal), {
222
+ streamUsage: shouldStreamUsage,
223
+ model: this.params.model
224
+ });
225
+ }
226
+ invocationParams(options) {
227
+ const fields = require_params.combineInteractionsFields(this.params, options ?? {});
228
+ const tools = fields.tools ? require_tools$1.convertToolsToInteractionsTools(fields.tools) : void 0;
229
+ const toolChoice = require_tools$1.convertToolChoiceToInteractionsConfig(options?.tool_choice, !!(tools && tools.length > 0));
230
+ const thinking = require_params.convertFieldsToInteractionsThinking(this.params.model, fields);
231
+ const speechConfig = require_params.convertFieldsToInteractionsSpeechConfig(fields);
232
+ const responseFormat = require_params.convertFieldsToInteractionsResponseFormat(fields);
233
+ const safetySettings = require_params.convertSafetySettingsToInteractions(fields.safetySettings);
234
+ const generationConfig = {
235
+ ...fields.temperature !== void 0 ? { temperature: fields.temperature } : {},
236
+ ...fields.topP !== void 0 ? { top_p: fields.topP } : {},
237
+ ...fields.topK !== void 0 ? { top_k: fields.topK } : {},
238
+ ...fields.maxOutputTokens !== void 0 ? { max_output_tokens: fields.maxOutputTokens } : {},
239
+ ...fields.presencePenalty !== void 0 ? { presence_penalty: fields.presencePenalty } : {},
240
+ ...fields.frequencyPenalty !== void 0 ? { frequency_penalty: fields.frequencyPenalty } : {},
241
+ ...fields.stopSequences !== void 0 ? { stop_sequences: fields.stopSequences } : {},
242
+ ...fields.seed !== void 0 ? { seed: fields.seed } : {},
243
+ ...thinking,
244
+ ...speechConfig ? { speech_config: speechConfig } : {},
245
+ ...toolChoice ? { tool_choice: toolChoice } : {}
246
+ };
247
+ const hasGenerationConfig = Object.keys(generationConfig).length > 0;
248
+ return {
249
+ ...fields.agent ? {
250
+ agent: fields.agent,
251
+ ...fields.agentConfig ? { agent_config: fields.agentConfig } : {}
252
+ } : { model: this.params.model },
253
+ ...tools && tools.length > 0 ? { tools } : {},
254
+ ...responseFormat ? { response_format: responseFormat } : {},
255
+ ...safetySettings ? { safety_settings: safetySettings } : {},
256
+ ...hasGenerationConfig ? { generation_config: generationConfig } : {},
257
+ ...require_params.convertFieldsToInteractionsServiceTier(this.params.platform, fields),
258
+ ...fields.previousInteractionId ? { previous_interaction_id: fields.previousInteractionId } : {},
259
+ ...fields.store !== void 0 ? { store: fields.store } : {},
260
+ ...fields.background !== void 0 ? { background: fields.background } : {},
261
+ ...fields.webhookConfig ? { webhook_config: fields.webhookConfig } : {}
262
+ };
263
+ }
264
+ formatStructuredOutputTool(schema, options) {
265
+ let functionName = options?.name ?? "extract";
266
+ let interactionsFunctionTool;
267
+ if ((0, _langchain_core_utils_types.isInteropZodSchema)(schema) || (0, _langchain_core_utils_standard_schema.isSerializableSchema)(schema)) {
268
+ const jsonSchema = require_tools.schemaToGeminiParameters(schema);
269
+ const description = options?.description ?? (typeof jsonSchema.description === "string" ? jsonSchema.description : "A function available to call.");
270
+ interactionsFunctionTool = {
271
+ type: "function",
272
+ name: functionName,
273
+ description,
274
+ parameters: jsonSchema
275
+ };
276
+ } else if (typeof schema.name === "string" && typeof schema.parameters === "object" && schema.parameters != null) {
277
+ const raw = schema;
278
+ functionName = raw.name;
279
+ interactionsFunctionTool = {
280
+ type: "function",
281
+ name: raw.name,
282
+ description: options?.description ?? raw.description ?? "A function available to call.",
283
+ parameters: raw.parameters
284
+ };
285
+ } else {
286
+ const parameters = require_tools.schemaToGeminiParameters(schema);
287
+ interactionsFunctionTool = {
288
+ type: "function",
289
+ name: functionName,
290
+ description: options?.description ?? schema.description ?? "A function available to call.",
291
+ parameters
292
+ };
293
+ }
294
+ return {
295
+ tools: [interactionsFunctionTool],
296
+ toolChoice: functionName,
297
+ functionName
298
+ };
299
+ }
300
+ };
301
+ exports.InteractionsApiHandler = InteractionsApiHandler;
302
+
303
+ //# sourceMappingURL=interactions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.cjs","names":["GoogleChatApiHandler","combineInteractionsFields","settableServiceTier","convertMediaResolutionToInteractions","convertMessagesToInteractionsSystemInstruction","convertMessagesToInteractionsInput","RequestError","convertInteractionToAIMessage","NoCandidatesError","convertAIMessageToText","iife","usageMetadataToTokenUsage","EventSourceParserStream","SafeJsonEventParserStream","convertInteractionsStreamToChunks","convertInteractionsStream","convertToolsToInteractionsTools","convertToolChoiceToInteractionsConfig","convertFieldsToInteractionsThinking","convertFieldsToInteractionsSpeechConfig","convertFieldsToInteractionsResponseFormat","convertSafetySettingsToInteractions","convertFieldsToInteractionsServiceTier","isInteropZodSchema","isSerializableSchema","schemaToGeminiParameters"],"sources":["../../../src/chat_models/handlers/interactions.ts"],"sourcesContent":["import type { BaseMessage } from \"@langchain/core/messages\";\nimport type { ChatGenerationChunk, ChatResult } from \"@langchain/core/outputs\";\nimport type { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport type { BindToolsInput } from \"@langchain/core/language_models/chat_models\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport {\n type InteropZodType,\n isInteropZodSchema,\n} from \"@langchain/core/utils/types\";\nimport {\n type SerializableSchema,\n isSerializableSchema,\n} from \"@langchain/core/utils/standard_schema\";\nimport { EventSourceParserStream } from \"eventsource-parser/stream\";\nimport { GoogleChatApiHandler } from \"./base.js\";\nimport { SafeJsonEventParserStream } from \"../../utils/stream.js\";\nimport { usageMetadataToTokenUsage } from \"../../utils/metadata.js\";\nimport { iife } from \"../../utils/misc.js\";\nimport { NoCandidatesError, RequestError } from \"../../utils/errors.js\";\nimport { convertAIMessageToText } from \"../../converters/generate_content/messages.js\";\nimport { schemaToGeminiParameters } from \"../../converters/generate_content/tools.js\";\nimport {\n convertInteractionToAIMessage,\n convertMessagesToInteractionsInput,\n convertMessagesToInteractionsSystemInstruction,\n} from \"../../converters/interactions/messages.js\";\nimport {\n convertToolsToInteractionsTools,\n convertToolChoiceToInteractionsConfig,\n} from \"../../converters/interactions/tools.js\";\nimport {\n combineInteractionsFields,\n convertFieldsToInteractionsResponseFormat,\n convertFieldsToInteractionsServiceTier,\n convertFieldsToInteractionsSpeechConfig,\n convertFieldsToInteractionsThinking,\n convertMediaResolutionToInteractions,\n convertSafetySettingsToInteractions,\n} from \"../../converters/interactions/params.js\";\nimport {\n convertInteractionsStream,\n convertInteractionsStreamToChunks,\n} from \"../../converters/interactions/stream_events.js\";\nimport type {\n BaseChatGoogleCallOptions,\n InteractionsApiHandlerParams,\n InteractionsInvocationParams,\n Gemini,\n} from \"../types.js\";\nimport { settableServiceTier } from \"../types.js\";\n\ntype ServiceTier = Gemini.ServiceTier;\n\n/**\n * Concrete wire protocol handler for Google's Interactions API\n * (`/v1beta/interactions` and `/v1beta/interactions?alt=sse`).\n */\nexport class InteractionsApiHandler extends GoogleChatApiHandler<\n InteractionsInvocationParams,\n InteractionsApiHandlerParams\n> {\n constructor(params: InteractionsApiHandlerParams) {\n super(params);\n }\n\n protected get urlMethod(): string {\n return this.params.streaming ? \"interactions?alt=sse\" : \"interactions\";\n }\n\n protected getUrlSuffix(urlMethod?: string): string {\n const method = urlMethod ?? this.urlMethod;\n if (\n method === \"stream\" ||\n method.includes(\"alt=sse\") ||\n method.includes(\"stream\")\n ) {\n return \"/interactions?alt=sse\";\n }\n return \"/interactions\";\n }\n\n protected async buildUrlVertexLocation(urlMethod?: string): Promise<string> {\n const projectId = await this.params.apiClient.getProjectId();\n return this.formatUrl(\n [`projects/${projectId}`, `locations/${this.params.location}`],\n urlMethod\n );\n }\n\n override getHeaders(\n options?: BaseChatGoogleCallOptions\n ): Record<string, string> {\n const fields = combineInteractionsFields(this.params, options ?? {});\n\n // The priority type is set via header only for Vertex\n const priorityHeaders: Record<string, string> =\n this.params.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 ...priorityHeaders,\n ...super.getHeaders(options),\n };\n }\n\n async generate(\n messages: BaseMessage[],\n options?: BaseChatGoogleCallOptions,\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const url = await this.buildUrl(\"interactions\");\n const headers = this.getHeaders(options);\n const fields = combineInteractionsFields(this.params, options ?? {});\n const mediaResolution = convertMediaResolutionToInteractions(\n fields.mediaResolution,\n fields.detail\n );\n const systemInstruction =\n convertMessagesToInteractionsSystemInstruction(messages);\n const input = convertMessagesToInteractionsInput(messages, mediaResolution);\n\n const body: Gemini.Interactions.CreateInteractionParameters = {\n ...this.invocationParams(options),\n ...(systemInstruction ? { system_instruction: systemInstruction } : {}),\n input,\n };\n\n const moduleName = this.constructor.name;\n await runManager?.handleCustomEvent(`google-request-${moduleName}`, {\n url,\n headers,\n body,\n });\n\n let response: Response;\n try {\n response = await this.params.caller.callWithOptions(\n { signal: options?.signal, maxRetries: options?.maxRetries },\n async () => {\n const nextResponse = await this.params.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 (!nextResponse.ok) {\n throw await RequestError.fromResponse(nextResponse);\n }\n\n return nextResponse;\n }\n );\n } catch (error) {\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n error,\n });\n throw error;\n }\n\n const data: Gemini.Interactions.Interaction = 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 const { message, finishReason, usageMetadata } =\n convertInteractionToAIMessage(data);\n\n if (\n data.status === \"failed\" &&\n (!data.steps || data.steps.length === 0) &&\n (!data.outputs || data.outputs.length === 0)\n ) {\n throw new NoCandidatesError();\n }\n\n const text = convertAIMessageToText(message);\n\n const serviceTier: ServiceTier = iife((): ServiceTier => {\n const serviceTierHeader: string | null = response.headers.get(\n \"x-gemini-service-tier\"\n );\n return (data.service_tier ??\n serviceTierHeader ??\n \"standard\") as ServiceTier;\n });\n\n return {\n generations: [\n {\n text,\n message,\n generationInfo: {\n ...(finishReason ? { finishReason } : {}),\n ...(message.response_metadata?.citationMetadata\n ? {\n citationMetadata: message.response_metadata.citationMetadata,\n }\n : {}),\n ...(message.response_metadata?.groundingMetadata\n ? {\n groundingMetadata:\n message.response_metadata.groundingMetadata,\n }\n : {}),\n },\n },\n ],\n llmOutput: {\n tokenUsage: usageMetadata\n ? usageMetadataToTokenUsage(usageMetadata)\n : undefined,\n model: data.model ?? this.params.model,\n responseId: data.id,\n usageMetadata,\n serviceTier,\n },\n };\n }\n\n async *streamResponseChunks(\n messages: BaseMessage[],\n options?: BaseChatGoogleCallOptions,\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const streamUsage: boolean =\n options?.streamUsage ?? this.params.streamUsage ?? false;\n\n const fields = combineInteractionsFields(this.params, options ?? {});\n const mediaResolution = convertMediaResolutionToInteractions(\n fields.mediaResolution,\n fields.detail\n );\n const systemInstruction =\n convertMessagesToInteractionsSystemInstruction(messages);\n const input = convertMessagesToInteractionsInput(messages, mediaResolution);\n\n const body: Gemini.Interactions.CreateInteractionParameters = {\n ...this.invocationParams(options),\n stream: true,\n ...(systemInstruction ? { system_instruction: systemInstruction } : {}),\n input,\n };\n\n const url = await this.buildUrl(\"interactions?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 let response: Response;\n try {\n response = await this.params.caller.callWithOptions(\n { signal: options?.signal, maxRetries: options?.maxRetries },\n async () => {\n const nextResponse = await this.params.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 (!nextResponse.ok) {\n throw await RequestError.fromResponse(nextResponse);\n }\n\n return nextResponse;\n }\n );\n } catch (error) {\n await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n error,\n });\n throw error;\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.body) {\n const eventStream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new SafeJsonEventParserStream<Gemini.Interactions.InteractionSseEvent>()\n );\n\n async function* sseEvents(\n stream: ReadableStream<Gemini.Interactions.InteractionSseEvent | null>,\n signal?: AbortSignal\n ): AsyncGenerator<Gemini.Interactions.InteractionSseEvent> {\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 await runManager?.handleCustomEvent(`google-chunk-${moduleName}`, {\n chunk: value,\n });\n if (value !== null) {\n yield value;\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n for await (const chunk of convertInteractionsStreamToChunks(\n sseEvents(eventStream, options?.signal),\n {\n streamUsage,\n model: this.params.model,\n }\n )) {\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text ?? \"\",\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n }\n }\n\n async *streamChatModelEvents(\n messages: BaseMessage[],\n options?: BaseChatGoogleCallOptions,\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n const fields = combineInteractionsFields(this.params, options ?? {});\n const mediaResolution = convertMediaResolutionToInteractions(\n fields.mediaResolution,\n fields.detail\n );\n const systemInstruction =\n convertMessagesToInteractionsSystemInstruction(messages);\n const input = convertMessagesToInteractionsInput(messages, mediaResolution);\n\n const body: Gemini.Interactions.CreateInteractionParameters = {\n ...this.invocationParams(options),\n stream: true,\n ...(systemInstruction ? { system_instruction: systemInstruction } : {}),\n input,\n };\n\n const url = await this.buildUrl(\"interactions?alt=sse\");\n const headers = this.getHeaders(options);\n\n const response = await this.params.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.Interactions.InteractionSseEvent>()\n );\n\n const shouldStreamUsage =\n this.params.streamUsage !== false && options?.streamUsage !== false;\n\n async function* sseEvents(\n stream: ReadableStream<Gemini.Interactions.InteractionSseEvent | null>,\n signal?: AbortSignal\n ): AsyncGenerator<Gemini.Interactions.InteractionSseEvent> {\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* convertInteractionsStream(sseEvents(eventStream, options?.signal), {\n streamUsage: shouldStreamUsage,\n model: this.params.model,\n });\n }\n\n invocationParams(\n options?: BaseChatGoogleCallOptions\n ): InteractionsInvocationParams {\n const fields = combineInteractionsFields(this.params, options ?? {});\n\n const tools = fields.tools\n ? convertToolsToInteractionsTools(fields.tools)\n : undefined;\n\n const toolChoice = convertToolChoiceToInteractionsConfig(\n options?.tool_choice,\n !!(tools && tools.length > 0)\n );\n\n const thinking = convertFieldsToInteractionsThinking(\n this.params.model,\n fields\n );\n const speechConfig = convertFieldsToInteractionsSpeechConfig(fields);\n const responseFormat = convertFieldsToInteractionsResponseFormat(fields);\n const safetySettings = convertSafetySettingsToInteractions(\n fields.safetySettings\n );\n\n const generationConfig: Gemini.Interactions.GenerationConfig = {\n ...(fields.temperature !== undefined\n ? { temperature: fields.temperature }\n : {}),\n ...(fields.topP !== undefined ? { top_p: fields.topP } : {}),\n ...(fields.topK !== undefined ? { top_k: fields.topK } : {}),\n ...(fields.maxOutputTokens !== undefined\n ? { max_output_tokens: fields.maxOutputTokens }\n : {}),\n ...(fields.presencePenalty !== undefined\n ? { presence_penalty: fields.presencePenalty }\n : {}),\n ...(fields.frequencyPenalty !== undefined\n ? { frequency_penalty: fields.frequencyPenalty }\n : {}),\n ...(fields.stopSequences !== undefined\n ? { stop_sequences: fields.stopSequences }\n : {}),\n ...(fields.seed !== undefined ? { seed: fields.seed } : {}),\n ...thinking,\n ...(speechConfig ? { speech_config: speechConfig } : {}),\n ...(toolChoice ? { tool_choice: toolChoice } : {}),\n };\n\n const hasGenerationConfig = Object.keys(generationConfig).length > 0;\n\n return {\n ...(fields.agent\n ? {\n agent: fields.agent,\n ...(fields.agentConfig ? { agent_config: fields.agentConfig } : {}),\n }\n : { model: this.params.model }),\n ...(tools && tools.length > 0 ? { tools } : {}),\n ...(responseFormat ? { response_format: responseFormat } : {}),\n ...(safetySettings ? { safety_settings: safetySettings } : {}),\n ...(hasGenerationConfig ? { generation_config: generationConfig } : {}),\n ...convertFieldsToInteractionsServiceTier(this.params.platform, fields),\n ...(fields.previousInteractionId\n ? { previous_interaction_id: fields.previousInteractionId }\n : {}),\n ...(fields.store !== undefined ? { store: fields.store } : {}),\n ...(fields.background !== undefined\n ? { background: fields.background }\n : {}),\n ...(fields.webhookConfig ? { webhook_config: fields.webhookConfig } : {}),\n };\n }\n\n formatStructuredOutputTool(\n schema: InteropZodType | SerializableSchema | Record<string, unknown>,\n options?: { name?: string; description?: string }\n ): { tools: BindToolsInput[]; toolChoice: string; functionName: string } {\n let functionName = options?.name ?? \"extract\";\n let interactionsFunctionTool: Gemini.Interactions.Function;\n\n if (isInteropZodSchema(schema) || isSerializableSchema(schema)) {\n const jsonSchema = schemaToGeminiParameters(schema);\n const description =\n options?.description ??\n (typeof jsonSchema.description === \"string\"\n ? jsonSchema.description\n : \"A function available to call.\");\n interactionsFunctionTool = {\n type: \"function\",\n name: functionName,\n description,\n parameters: jsonSchema as unknown as Record<string, unknown>,\n };\n } else if (\n typeof (schema as { name?: unknown }).name === \"string\" &&\n typeof (schema as { parameters?: unknown }).parameters === \"object\" &&\n (schema as { parameters?: unknown }).parameters != null\n ) {\n const raw = schema as {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n functionName = raw.name;\n interactionsFunctionTool = {\n type: \"function\",\n name: raw.name,\n description:\n options?.description ??\n raw.description ??\n \"A function available to call.\",\n parameters: raw.parameters,\n };\n } else {\n const parameters = schemaToGeminiParameters(schema);\n interactionsFunctionTool = {\n type: \"function\",\n name: functionName,\n description:\n options?.description ??\n (schema as { description?: string }).description ??\n \"A function available to call.\",\n parameters: parameters as unknown as Record<string, unknown>,\n };\n }\n\n return {\n tools: [interactionsFunctionTool],\n toolChoice: functionName,\n functionName,\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { GoogleChatApiHandler } from "./base.cjs";
2
+ import { BaseChatGoogleCallOptions, InteractionsApiHandlerParams, InteractionsInvocationParams } from "../types.cjs";
3
+ import { BindToolsInput } from "@langchain/core/language_models/chat_models";
4
+ import { BaseMessage } from "@langchain/core/messages";
5
+ import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
6
+ import { ChatModelStreamEvent } from "@langchain/core/language_models/event";
7
+ import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
8
+ import { InteropZodType } from "@langchain/core/utils/types";
9
+ import { SerializableSchema } from "@langchain/core/utils/standard_schema";
10
+ /**
11
+ * Concrete wire protocol handler for Google's Interactions API
12
+ * (`/v1beta/interactions` and `/v1beta/interactions?alt=sse`).
13
+ */
14
+ export declare class InteractionsApiHandler extends GoogleChatApiHandler<InteractionsInvocationParams, InteractionsApiHandlerParams> {
15
+ constructor(params: InteractionsApiHandlerParams);
16
+ protected get urlMethod(): string;
17
+ protected getUrlSuffix(urlMethod?: string): string;
18
+ protected buildUrlVertexLocation(urlMethod?: string): Promise<string>;
19
+ getHeaders(options?: BaseChatGoogleCallOptions): Record<string, string>;
20
+ generate(messages: BaseMessage[], options?: BaseChatGoogleCallOptions, runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;
21
+ streamResponseChunks(messages: BaseMessage[], options?: BaseChatGoogleCallOptions, runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
22
+ streamChatModelEvents(messages: BaseMessage[], options?: BaseChatGoogleCallOptions, _runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatModelStreamEvent>;
23
+ invocationParams(options?: BaseChatGoogleCallOptions): InteractionsInvocationParams;
24
+ formatStructuredOutputTool(schema: InteropZodType | SerializableSchema | Record<string, unknown>, options?: {
25
+ name?: string;
26
+ description?: string;
27
+ }): {
28
+ tools: BindToolsInput[];
29
+ toolChoice: string;
30
+ functionName: string;
31
+ };
32
+ }
33
+ //# sourceMappingURL=interactions.d.cts.map
@@ -0,0 +1,33 @@
1
+ import { GoogleChatApiHandler } from "./base.js";
2
+ import { BaseChatGoogleCallOptions, InteractionsApiHandlerParams, InteractionsInvocationParams } from "../types.js";
3
+ import { BindToolsInput } from "@langchain/core/language_models/chat_models";
4
+ import { BaseMessage } from "@langchain/core/messages";
5
+ import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
6
+ import { InteropZodType } from "@langchain/core/utils/types";
7
+ import { SerializableSchema } from "@langchain/core/utils/standard_schema";
8
+ import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
9
+ import { ChatModelStreamEvent } from "@langchain/core/language_models/event";
10
+ /**
11
+ * Concrete wire protocol handler for Google's Interactions API
12
+ * (`/v1beta/interactions` and `/v1beta/interactions?alt=sse`).
13
+ */
14
+ export declare class InteractionsApiHandler extends GoogleChatApiHandler<InteractionsInvocationParams, InteractionsApiHandlerParams> {
15
+ constructor(params: InteractionsApiHandlerParams);
16
+ protected get urlMethod(): string;
17
+ protected getUrlSuffix(urlMethod?: string): string;
18
+ protected buildUrlVertexLocation(urlMethod?: string): Promise<string>;
19
+ getHeaders(options?: BaseChatGoogleCallOptions): Record<string, string>;
20
+ generate(messages: BaseMessage[], options?: BaseChatGoogleCallOptions, runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;
21
+ streamResponseChunks(messages: BaseMessage[], options?: BaseChatGoogleCallOptions, runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
22
+ streamChatModelEvents(messages: BaseMessage[], options?: BaseChatGoogleCallOptions, _runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatModelStreamEvent>;
23
+ invocationParams(options?: BaseChatGoogleCallOptions): InteractionsInvocationParams;
24
+ formatStructuredOutputTool(schema: InteropZodType | SerializableSchema | Record<string, unknown>, options?: {
25
+ name?: string;
26
+ description?: string;
27
+ }): {
28
+ tools: BindToolsInput[];
29
+ toolChoice: string;
30
+ functionName: string;
31
+ };
32
+ }
33
+ //# sourceMappingURL=interactions.d.ts.map