@langchain/google-common 2.1.17 → 2.1.19
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.
- package/CHANGELOG.md +18 -0
- package/dist/auth.cjs +1 -2
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.d.cts.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +1 -2
- package/dist/auth.js.map +1 -1
- package/dist/chat_models.cjs +24 -27
- package/dist/chat_models.cjs.map +1 -1
- package/dist/chat_models.d.cts.map +1 -1
- package/dist/chat_models.d.ts.map +1 -1
- package/dist/chat_models.js +7 -9
- package/dist/chat_models.js.map +1 -1
- package/dist/connection.cjs +16 -26
- package/dist/connection.cjs.map +1 -1
- package/dist/connection.d.cts.map +1 -1
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +13 -22
- package/dist/connection.js.map +1 -1
- package/dist/embeddings.cjs +12 -22
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts +0 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts +0 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +7 -16
- package/dist/embeddings.js.map +1 -1
- package/dist/experimental/media.cjs +41 -70
- package/dist/experimental/media.cjs.map +1 -1
- package/dist/experimental/media.d.cts.map +1 -1
- package/dist/experimental/media.d.ts.map +1 -1
- package/dist/experimental/media.js +36 -65
- package/dist/experimental/media.js.map +1 -1
- package/dist/experimental/utils/media_core.cjs +22 -39
- package/dist/experimental/utils/media_core.cjs.map +1 -1
- package/dist/experimental/utils/media_core.d.cts.map +1 -1
- package/dist/experimental/utils/media_core.d.ts.map +1 -1
- package/dist/experimental/utils/media_core.js +16 -33
- package/dist/experimental/utils/media_core.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/llms.cjs +14 -19
- package/dist/llms.cjs.map +1 -1
- package/dist/llms.d.cts.map +1 -1
- package/dist/llms.d.ts.map +1 -1
- package/dist/llms.js +4 -8
- package/dist/llms.js.map +1 -1
- package/dist/output_parsers.cjs +12 -29
- package/dist/output_parsers.cjs.map +1 -1
- package/dist/output_parsers.d.cts.map +1 -1
- package/dist/output_parsers.d.ts.map +1 -1
- package/dist/output_parsers.js +10 -26
- package/dist/output_parsers.js.map +1 -1
- package/dist/profiles.cjs +100 -17
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +100 -17
- package/dist/profiles.js.map +1 -1
- package/dist/types-anthropic.d.cts.map +1 -1
- package/dist/types-anthropic.d.ts.map +1 -1
- package/dist/types.cjs +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +0 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/anthropic.cjs +73 -113
- package/dist/utils/anthropic.cjs.map +1 -1
- package/dist/utils/anthropic.js +63 -102
- package/dist/utils/anthropic.js.map +1 -1
- package/dist/utils/common.cjs +10 -13
- package/dist/utils/common.cjs.map +1 -1
- package/dist/utils/common.d.cts.map +1 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +6 -8
- package/dist/utils/common.js.map +1 -1
- package/dist/utils/failed_handler.cjs +1 -2
- package/dist/utils/failed_handler.cjs.map +1 -1
- package/dist/utils/failed_handler.d.cts.map +1 -1
- package/dist/utils/failed_handler.d.ts.map +1 -1
- package/dist/utils/failed_handler.js +1 -2
- package/dist/utils/failed_handler.js.map +1 -1
- package/dist/utils/gemini.cjs +89 -135
- package/dist/utils/gemini.cjs.map +1 -1
- package/dist/utils/gemini.d.cts.map +1 -1
- package/dist/utils/gemini.d.ts.map +1 -1
- package/dist/utils/gemini.js +64 -109
- package/dist/utils/gemini.js.map +1 -1
- package/dist/utils/index.cjs +1 -0
- package/dist/utils/palm.d.cts.map +1 -1
- package/dist/utils/palm.d.ts.map +1 -1
- package/dist/utils/safety.cjs.map +1 -1
- package/dist/utils/safety.d.cts.map +1 -1
- package/dist/utils/safety.d.ts.map +1 -1
- package/dist/utils/safety.js.map +1 -1
- package/dist/utils/stream.cjs +5 -9
- package/dist/utils/stream.cjs.map +1 -1
- package/dist/utils/stream.d.cts.map +1 -1
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/stream.js +5 -9
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.cjs +4 -7
- package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.d.cts.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.d.ts.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.js +2 -4
- package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
- package/package.json +5 -5
- package/dist/_virtual/rolldown_runtime.cjs +0 -25
package/dist/utils/gemini.js
CHANGED
|
@@ -18,14 +18,12 @@ var DefaultGeminiSafetyHandler = class {
|
|
|
18
18
|
this.errorFinish = settings?.errorFinish ?? this.errorFinish;
|
|
19
19
|
}
|
|
20
20
|
handleDataPromptFeedback(response, data) {
|
|
21
|
-
const
|
|
22
|
-
const blockReason = promptFeedback?.blockReason;
|
|
21
|
+
const blockReason = (data?.promptFeedback)?.blockReason;
|
|
23
22
|
if (blockReason) throw new GoogleAISafetyError(response, `Prompt blocked: ${blockReason}`);
|
|
24
23
|
return data;
|
|
25
24
|
}
|
|
26
25
|
handleDataFinishReason(response, data) {
|
|
27
|
-
const
|
|
28
|
-
const finishReason = firstCandidate?.finishReason;
|
|
26
|
+
const finishReason = (data?.candidates?.[0])?.finishReason;
|
|
29
27
|
if (this.errorFinish.includes(finishReason)) throw new GoogleAISafetyError(response, `Finish reason: ${finishReason}`);
|
|
30
28
|
return data;
|
|
31
29
|
}
|
|
@@ -111,29 +109,25 @@ function inferMimeTypeFromUrl(url) {
|
|
|
111
109
|
tif: "image/tiff"
|
|
112
110
|
};
|
|
113
111
|
try {
|
|
114
|
-
const
|
|
115
|
-
const extension = pathname.split(".").pop()?.toLowerCase().split(/[?#]/)[0];
|
|
112
|
+
const extension = new URL(url).pathname.split(".").pop()?.toLowerCase().split(/[?#]/)[0];
|
|
116
113
|
return extension ? mimeTypeMap[extension] : void 0;
|
|
117
114
|
} catch {
|
|
118
115
|
const match = url.match(/\.([a-zA-Z0-9]+)(?:[?#]|$)/);
|
|
119
|
-
if (match)
|
|
120
|
-
|
|
121
|
-
return mimeTypeMap[extension];
|
|
122
|
-
}
|
|
123
|
-
return void 0;
|
|
116
|
+
if (match) return mimeTypeMap[match[1].toLowerCase()];
|
|
117
|
+
return;
|
|
124
118
|
}
|
|
125
119
|
}
|
|
126
120
|
function normalizeSpeechConfig(config) {
|
|
127
|
-
function isSpeechConfig(config
|
|
128
|
-
return typeof config
|
|
121
|
+
function isSpeechConfig(config) {
|
|
122
|
+
return typeof config === "object" && (Object.hasOwn(config, "voiceConfig") || Object.hasOwn(config, "multiSpeakerVoiceConfig"));
|
|
129
123
|
}
|
|
130
|
-
function hasLanguage(config
|
|
131
|
-
return typeof config
|
|
124
|
+
function hasLanguage(config) {
|
|
125
|
+
return typeof config === "object" && Object.hasOwn(config, "languageCode");
|
|
132
126
|
}
|
|
133
|
-
function hasVoice(config
|
|
134
|
-
return Object.hasOwn(config
|
|
127
|
+
function hasVoice(config) {
|
|
128
|
+
return Object.hasOwn(config, "voice");
|
|
135
129
|
}
|
|
136
|
-
if (typeof config === "undefined") return
|
|
130
|
+
if (typeof config === "undefined") return;
|
|
137
131
|
if (isSpeechConfig(config)) return config;
|
|
138
132
|
let languageCode;
|
|
139
133
|
let voice;
|
|
@@ -146,14 +140,10 @@ function normalizeSpeechConfig(config) {
|
|
|
146
140
|
}
|
|
147
141
|
let ret;
|
|
148
142
|
if (typeof voice === "string") ret = { voiceConfig: { prebuiltVoiceConfig: { voiceName: voice } } };
|
|
149
|
-
else {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
voiceConfig: { prebuiltVoiceConfig: { voiceName: v.name } }
|
|
154
|
-
}));
|
|
155
|
-
ret = { multiSpeakerVoiceConfig: { speakerVoiceConfigs } };
|
|
156
|
-
}
|
|
143
|
+
else ret = { multiSpeakerVoiceConfig: { speakerVoiceConfigs: (Array.isArray(voice) ? voice : [voice]).map((v) => ({
|
|
144
|
+
speaker: v.speaker,
|
|
145
|
+
voiceConfig: { prebuiltVoiceConfig: { voiceName: v.name } }
|
|
146
|
+
})) } };
|
|
157
147
|
if (languageCode) ret.languageCode = languageCode;
|
|
158
148
|
return ret;
|
|
159
149
|
}
|
|
@@ -167,13 +157,10 @@ function getGeminiAPI(config) {
|
|
|
167
157
|
if (!url) throw new Error("Missing Image URL");
|
|
168
158
|
const mimeTypeAndData = extractMimeType(url);
|
|
169
159
|
if (mimeTypeAndData) return { inlineData: mimeTypeAndData };
|
|
170
|
-
else {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
fileUri: url
|
|
175
|
-
} };
|
|
176
|
-
}
|
|
160
|
+
else return { fileData: {
|
|
161
|
+
mimeType: inferMimeTypeFromUrl(url) || "image/png",
|
|
162
|
+
fileUri: url
|
|
163
|
+
} };
|
|
177
164
|
}
|
|
178
165
|
function messageContentImageUrl(content) {
|
|
179
166
|
const ret = messageContentImageUrlData(content);
|
|
@@ -296,6 +283,12 @@ function getGeminiAPI(config) {
|
|
|
296
283
|
break;
|
|
297
284
|
case "media": return await messageContentMedia(content);
|
|
298
285
|
case "reasoning": return messageContentReasoning(content);
|
|
286
|
+
case "input_audio":
|
|
287
|
+
if ("input_audio" in content) return { inlineData: {
|
|
288
|
+
mimeType: `audio/${content.input_audio.format}`,
|
|
289
|
+
data: content.input_audio.data
|
|
290
|
+
} };
|
|
291
|
+
break;
|
|
299
292
|
default: throw new Error(`Unsupported type "${content.type}" received while converting message to message parts: ${JSON.stringify(content)}`);
|
|
300
293
|
}
|
|
301
294
|
throw new Error(`Cannot coerce "${content.type}" message part into a string.`);
|
|
@@ -305,16 +298,13 @@ function getGeminiAPI(config) {
|
|
|
305
298
|
return Promise.all(contents);
|
|
306
299
|
}
|
|
307
300
|
async function messageContentToParts(content) {
|
|
308
|
-
|
|
301
|
+
return (await messageContentComplexToParts(typeof content === "string" ? [{
|
|
309
302
|
type: "text",
|
|
310
303
|
text: content
|
|
311
|
-
}] : content
|
|
312
|
-
const allParts = await messageContentComplexToParts(messageContent);
|
|
313
|
-
const parts = allParts.reduce((acc, val) => {
|
|
304
|
+
}] : content)).reduce((acc, val) => {
|
|
314
305
|
if (val) return [...acc, val];
|
|
315
306
|
else return acc;
|
|
316
307
|
}, []);
|
|
317
|
-
return parts;
|
|
318
308
|
}
|
|
319
309
|
function messageToolCallsToParts(toolCalls) {
|
|
320
310
|
if (!toolCalls || toolCalls.length === 0) return [];
|
|
@@ -364,12 +354,11 @@ function getGeminiAPI(config) {
|
|
|
364
354
|
}, "");
|
|
365
355
|
const responseName = (isAIMessage(prevMessage) && !!prevMessage.tool_calls?.length ? prevMessage.tool_calls[0].name : prevMessage.name) ?? message.tool_call_id;
|
|
366
356
|
try {
|
|
367
|
-
const content = JSON.parse(contentStr);
|
|
368
357
|
return [{
|
|
369
358
|
role: "function",
|
|
370
359
|
parts: [{ functionResponse: {
|
|
371
360
|
name: responseName,
|
|
372
|
-
response: { content }
|
|
361
|
+
response: { content: JSON.parse(contentStr) }
|
|
373
362
|
} }]
|
|
374
363
|
}];
|
|
375
364
|
} catch (_) {
|
|
@@ -420,8 +409,7 @@ function getGeminiAPI(config) {
|
|
|
420
409
|
};
|
|
421
410
|
}
|
|
422
411
|
function inlineDataPartToMessageContent(part) {
|
|
423
|
-
|
|
424
|
-
if (mimeType.startsWith("image")) return inlineDataPartToMessageContentImage(part);
|
|
412
|
+
if ((part?.inlineData?.mimeType ?? "").startsWith("image")) return inlineDataPartToMessageContentImage(part);
|
|
425
413
|
else return inlineDataPartToMessageContentMedia(part);
|
|
426
414
|
}
|
|
427
415
|
function fileDataPartToMessageContent(part) {
|
|
@@ -487,31 +475,22 @@ function getGeminiAPI(config) {
|
|
|
487
475
|
else return response.data;
|
|
488
476
|
}
|
|
489
477
|
function responseToParts(response) {
|
|
490
|
-
|
|
491
|
-
const parts = responseData?.candidates?.[0]?.content?.parts ?? [];
|
|
492
|
-
return parts;
|
|
478
|
+
return responseToGenerateContentResponseData(response)?.candidates?.[0]?.content?.parts ?? [];
|
|
493
479
|
}
|
|
494
480
|
function partToText(part) {
|
|
495
481
|
return "text" in part ? part.text : "";
|
|
496
482
|
}
|
|
497
483
|
function responseToString(response) {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
const val = partToText(part);
|
|
501
|
-
return acc + val;
|
|
484
|
+
return responseToParts(response).reduce((acc, part) => {
|
|
485
|
+
return acc + partToText(part);
|
|
502
486
|
}, "");
|
|
503
|
-
return ret;
|
|
504
487
|
}
|
|
505
488
|
function safeResponseTo(response, responseTo) {
|
|
506
489
|
const safetyHandler = config?.safetyHandler ?? new DefaultGeminiSafetyHandler();
|
|
507
490
|
try {
|
|
508
|
-
|
|
509
|
-
return responseTo(safeResponse);
|
|
491
|
+
return responseTo(safetyHandler.handle(response));
|
|
510
492
|
} catch (xx) {
|
|
511
|
-
if (xx instanceof GoogleAISafetyError)
|
|
512
|
-
const ret = responseTo(xx.response);
|
|
513
|
-
xx.reply = ret;
|
|
514
|
-
}
|
|
493
|
+
if (xx instanceof GoogleAISafetyError) xx.reply = responseTo(xx.response);
|
|
515
494
|
throw xx;
|
|
516
495
|
}
|
|
517
496
|
}
|
|
@@ -522,11 +501,10 @@ function getGeminiAPI(config) {
|
|
|
522
501
|
const token = result?.token;
|
|
523
502
|
const logprob = result?.logProbability;
|
|
524
503
|
const encoder = new TextEncoder();
|
|
525
|
-
const bytes = Array.from(encoder.encode(token));
|
|
526
504
|
return {
|
|
527
505
|
token,
|
|
528
506
|
logprob,
|
|
529
|
-
bytes
|
|
507
|
+
bytes: Array.from(encoder.encode(token))
|
|
530
508
|
};
|
|
531
509
|
}
|
|
532
510
|
function candidateToLogprobs(candidate) {
|
|
@@ -547,25 +525,21 @@ function getGeminiAPI(config) {
|
|
|
547
525
|
const retrieval = candidate?.urlRetrievalMetadata?.urlRetrievalContexts ?? [];
|
|
548
526
|
const context = candidate?.urlContextMetadata?.urlMetadata ?? [];
|
|
549
527
|
const all = [...retrieval, ...context];
|
|
550
|
-
if (all.length === 0) return
|
|
528
|
+
if (all.length === 0) return;
|
|
551
529
|
else return { urlMetadata: all };
|
|
552
530
|
}
|
|
553
531
|
function addModalityCounts(modalityTokenCounts, details) {
|
|
554
532
|
modalityTokenCounts?.forEach((modalityTokenCount) => {
|
|
555
533
|
const { modality, tokenCount } = modalityTokenCount;
|
|
556
534
|
const modalityLc = modality.toLowerCase();
|
|
557
|
-
|
|
558
|
-
details[modalityLc] = currentCount + tokenCount;
|
|
535
|
+
details[modalityLc] = (details[modalityLc] ?? 0) + tokenCount;
|
|
559
536
|
});
|
|
560
537
|
}
|
|
561
538
|
function responseToUsageMetadata(response) {
|
|
562
539
|
if ("usageMetadata" in response.data) {
|
|
563
|
-
const
|
|
564
|
-
const usageMetadata = data?.usageMetadata;
|
|
540
|
+
const usageMetadata = (response?.data)?.usageMetadata;
|
|
565
541
|
const input_tokens = usageMetadata.promptTokenCount ?? 0;
|
|
566
|
-
const
|
|
567
|
-
const thoughtsTokenCount = usageMetadata.thoughtsTokenCount ?? 0;
|
|
568
|
-
const output_tokens = candidatesTokenCount + thoughtsTokenCount;
|
|
542
|
+
const output_tokens = (usageMetadata.candidatesTokenCount ?? 0) + (usageMetadata.thoughtsTokenCount ?? 0);
|
|
569
543
|
const total_tokens = usageMetadata.totalTokenCount ?? input_tokens + output_tokens;
|
|
570
544
|
const input_token_details = {};
|
|
571
545
|
addModalityCounts(usageMetadata.promptTokensDetails, input_token_details);
|
|
@@ -573,16 +547,14 @@ function getGeminiAPI(config) {
|
|
|
573
547
|
const output_token_details = {};
|
|
574
548
|
addModalityCounts(usageMetadata?.candidatesTokensDetails, output_token_details);
|
|
575
549
|
if (typeof usageMetadata?.thoughtsTokenCount === "number") output_token_details.reasoning = usageMetadata.thoughtsTokenCount;
|
|
576
|
-
|
|
550
|
+
return {
|
|
577
551
|
input_tokens,
|
|
578
552
|
output_tokens,
|
|
579
553
|
total_tokens,
|
|
580
554
|
input_token_details,
|
|
581
555
|
output_token_details
|
|
582
556
|
};
|
|
583
|
-
return ret;
|
|
584
557
|
}
|
|
585
|
-
return void 0;
|
|
586
558
|
}
|
|
587
559
|
function responseToGenerationInfo(response) {
|
|
588
560
|
const data = Array.isArray(response.data) && response.data[0] ? response.data[0] : response.data && response.data.candidates ? response.data : void 0;
|
|
@@ -642,20 +614,17 @@ function getGeminiAPI(config) {
|
|
|
642
614
|
}
|
|
643
615
|
function partToChatGeneration(part) {
|
|
644
616
|
const message = partToMessageChunk(part);
|
|
645
|
-
const text = partToText(part);
|
|
646
|
-
const generationInfo = {};
|
|
647
617
|
return new ChatGenerationChunk({
|
|
648
|
-
text,
|
|
618
|
+
text: partToText(part),
|
|
649
619
|
message,
|
|
650
|
-
generationInfo
|
|
620
|
+
generationInfo: {}
|
|
651
621
|
});
|
|
652
622
|
}
|
|
653
623
|
function groundingSupportByPart(groundingSupports) {
|
|
654
624
|
const ret = [];
|
|
655
625
|
if (!groundingSupports || groundingSupports.length === 0) return [];
|
|
656
626
|
groundingSupports?.forEach((groundingSupport) => {
|
|
657
|
-
const
|
|
658
|
-
const partIndex = segment?.partIndex ?? 0;
|
|
627
|
+
const partIndex = (groundingSupport?.segment)?.partIndex ?? 0;
|
|
659
628
|
if (ret[partIndex]) ret[partIndex].push(groundingSupport);
|
|
660
629
|
else ret[partIndex] = [groundingSupport];
|
|
661
630
|
});
|
|
@@ -668,7 +637,7 @@ function getGeminiAPI(config) {
|
|
|
668
637
|
const groundingMetadata = candidate?.groundingMetadata;
|
|
669
638
|
const citationMetadata = candidate?.citationMetadata;
|
|
670
639
|
const groundingParts = groundingSupportByPart(groundingMetadata?.groundingSupports);
|
|
671
|
-
|
|
640
|
+
return parts.map((part, index) => {
|
|
672
641
|
const gen = partToChatGeneration(part);
|
|
673
642
|
if (!gen.generationInfo) gen.generationInfo = {};
|
|
674
643
|
if (groundingMetadata) {
|
|
@@ -679,11 +648,9 @@ function getGeminiAPI(config) {
|
|
|
679
648
|
if (citationMetadata) gen.generationInfo.citationMetadata = citationMetadata;
|
|
680
649
|
return gen;
|
|
681
650
|
});
|
|
682
|
-
return ret;
|
|
683
651
|
}
|
|
684
652
|
function combineContent(gen, forceComplex = false) {
|
|
685
|
-
|
|
686
|
-
if (allString && !forceComplex) return gen.map((item) => item.message.content).join("");
|
|
653
|
+
if (gen.every((item) => typeof item.message.content === "string") && !forceComplex) return gen.map((item) => item.message.content).join("");
|
|
687
654
|
else {
|
|
688
655
|
const ret = [];
|
|
689
656
|
gen.forEach((item) => {
|
|
@@ -712,10 +679,8 @@ function getGeminiAPI(config) {
|
|
|
712
679
|
function combineAdditionalKwargs(gen) {
|
|
713
680
|
const ret = {};
|
|
714
681
|
gen.forEach((item) => {
|
|
715
|
-
const
|
|
716
|
-
|
|
717
|
-
const keys = Object.keys(kwargs);
|
|
718
|
-
keys.forEach((key) => {
|
|
682
|
+
const kwargs = (item?.message)?.additional_kwargs ?? {};
|
|
683
|
+
Object.keys(kwargs).forEach((key) => {
|
|
719
684
|
const value = kwargs[key];
|
|
720
685
|
if (Object.hasOwn(ret, key) && Array.isArray(ret[key]) && Array.isArray(value)) ret[key].push(...value);
|
|
721
686
|
else ret[key] = value;
|
|
@@ -730,17 +695,15 @@ function getGeminiAPI(config) {
|
|
|
730
695
|
const combinedToolCalls = combineToolCalls(gen.content);
|
|
731
696
|
const kwargs = combineAdditionalKwargs(gen.content);
|
|
732
697
|
const lastContent = gen.content[gen.content.length - 1];
|
|
733
|
-
const usage_metadata = responseToUsageMetadata(response);
|
|
734
|
-
const message = new AIMessageChunk({
|
|
735
|
-
content: combinedContent,
|
|
736
|
-
additional_kwargs: kwargs,
|
|
737
|
-
response_metadata: { model_provider: "google-vertexai" },
|
|
738
|
-
usage_metadata,
|
|
739
|
-
tool_calls: combinedToolCalls.tool_calls,
|
|
740
|
-
invalid_tool_calls: combinedToolCalls.invalid_tool_calls
|
|
741
|
-
});
|
|
742
698
|
return [new ChatGenerationChunk({
|
|
743
|
-
message
|
|
699
|
+
message: new AIMessageChunk({
|
|
700
|
+
content: combinedContent,
|
|
701
|
+
additional_kwargs: kwargs,
|
|
702
|
+
response_metadata: { model_provider: "google-vertexai" },
|
|
703
|
+
usage_metadata: responseToUsageMetadata(response),
|
|
704
|
+
tool_calls: combinedToolCalls.tool_calls,
|
|
705
|
+
invalid_tool_calls: combinedToolCalls.invalid_tool_calls
|
|
706
|
+
}),
|
|
744
707
|
text: combinedText,
|
|
745
708
|
generationInfo: lastContent.generationInfo
|
|
746
709
|
})];
|
|
@@ -779,8 +742,7 @@ function getGeminiAPI(config) {
|
|
|
779
742
|
return ret;
|
|
780
743
|
}
|
|
781
744
|
function responseToBaseMessageFields(response) {
|
|
782
|
-
|
|
783
|
-
return partsToBaseMessageChunkFields(parts);
|
|
745
|
+
return partsToBaseMessageChunkFields(responseToParts(response));
|
|
784
746
|
}
|
|
785
747
|
function partsToSignatures(parts) {
|
|
786
748
|
return parts.map((part) => part?.thoughtSignature ?? "");
|
|
@@ -826,16 +788,14 @@ function getGeminiAPI(config) {
|
|
|
826
788
|
return fields;
|
|
827
789
|
}
|
|
828
790
|
function responseToBaseMessage(response) {
|
|
829
|
-
|
|
830
|
-
return new AIMessage(fields);
|
|
791
|
+
return new AIMessage(responseToBaseMessageFields(response));
|
|
831
792
|
}
|
|
832
793
|
function safeResponseToBaseMessage(response) {
|
|
833
794
|
return safeResponseTo(response, responseToBaseMessage);
|
|
834
795
|
}
|
|
835
796
|
function responseToChatResult(response) {
|
|
836
|
-
const generations = responseToChatGenerations(response);
|
|
837
797
|
return {
|
|
838
|
-
generations,
|
|
798
|
+
generations: responseToChatGenerations(response),
|
|
839
799
|
llmOutput: responseToGenerationInfo(response)
|
|
840
800
|
};
|
|
841
801
|
}
|
|
@@ -851,17 +811,14 @@ function getGeminiAPI(config) {
|
|
|
851
811
|
}
|
|
852
812
|
}
|
|
853
813
|
async function formatMessageContents(input, _parameters) {
|
|
854
|
-
|
|
855
|
-
const contents = [{
|
|
814
|
+
return [{
|
|
856
815
|
role: "user",
|
|
857
|
-
parts
|
|
816
|
+
parts: await messageContentToParts(input)
|
|
858
817
|
}];
|
|
859
|
-
return contents;
|
|
860
818
|
}
|
|
861
819
|
async function formatBaseMessageContents(input, _parameters) {
|
|
862
820
|
const inputPromises = input.map((msg, i) => baseMessageToContent(msg, input[i - 1]));
|
|
863
|
-
|
|
864
|
-
return inputs.reduce((acc, cur) => {
|
|
821
|
+
return (await Promise.all(inputPromises)).reduce((acc, cur) => {
|
|
865
822
|
if (cur.every((content) => content.role === "system")) return acc;
|
|
866
823
|
if (cur[0]?.role === "function" && acc.length > 0 && acc[acc.length - 1].role === "function") acc[acc.length - 1].parts = [...acc[acc.length - 1].parts, ...cur[0].parts];
|
|
867
824
|
else acc.push(...cur);
|
|
@@ -930,8 +887,7 @@ function getGeminiAPI(config) {
|
|
|
930
887
|
}
|
|
931
888
|
async function formatSystemInstruction(input) {
|
|
932
889
|
if (!config?.useSystemInstruction) return {};
|
|
933
|
-
|
|
934
|
-
switch (it) {
|
|
890
|
+
switch (inputType(input)) {
|
|
935
891
|
case "BaseMessageArray": return formatBaseMessageSystemInstruction(input);
|
|
936
892
|
default: return {};
|
|
937
893
|
}
|
|
@@ -946,7 +902,6 @@ function getGeminiAPI(config) {
|
|
|
946
902
|
}
|
|
947
903
|
function searchToolName(tool) {
|
|
948
904
|
for (const name of GeminiSearchToolAttributes) if (name in tool) return name;
|
|
949
|
-
return void 0;
|
|
950
905
|
}
|
|
951
906
|
function cleanGeminiTool(tool) {
|
|
952
907
|
const orig = searchToolName(tool);
|
|
@@ -968,7 +923,7 @@ function getGeminiAPI(config) {
|
|
|
968
923
|
return result;
|
|
969
924
|
}
|
|
970
925
|
function formatToolConfig(parameters) {
|
|
971
|
-
if (!parameters.tool_choice || typeof parameters.tool_choice !== "string") return
|
|
926
|
+
if (!parameters.tool_choice || typeof parameters.tool_choice !== "string") return;
|
|
972
927
|
if ([
|
|
973
928
|
"auto",
|
|
974
929
|
"any",
|