@langchain/google-common 2.1.18 → 2.1.20
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 +16 -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 +83 -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 +58 -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 +3 -3
- 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);
|
|
@@ -311,16 +298,13 @@ function getGeminiAPI(config) {
|
|
|
311
298
|
return Promise.all(contents);
|
|
312
299
|
}
|
|
313
300
|
async function messageContentToParts(content) {
|
|
314
|
-
|
|
301
|
+
return (await messageContentComplexToParts(typeof content === "string" ? [{
|
|
315
302
|
type: "text",
|
|
316
303
|
text: content
|
|
317
|
-
}] : content
|
|
318
|
-
const allParts = await messageContentComplexToParts(messageContent);
|
|
319
|
-
const parts = allParts.reduce((acc, val) => {
|
|
304
|
+
}] : content)).reduce((acc, val) => {
|
|
320
305
|
if (val) return [...acc, val];
|
|
321
306
|
else return acc;
|
|
322
307
|
}, []);
|
|
323
|
-
return parts;
|
|
324
308
|
}
|
|
325
309
|
function messageToolCallsToParts(toolCalls) {
|
|
326
310
|
if (!toolCalls || toolCalls.length === 0) return [];
|
|
@@ -370,12 +354,11 @@ function getGeminiAPI(config) {
|
|
|
370
354
|
}, "");
|
|
371
355
|
const responseName = (isAIMessage(prevMessage) && !!prevMessage.tool_calls?.length ? prevMessage.tool_calls[0].name : prevMessage.name) ?? message.tool_call_id;
|
|
372
356
|
try {
|
|
373
|
-
const content = JSON.parse(contentStr);
|
|
374
357
|
return [{
|
|
375
358
|
role: "function",
|
|
376
359
|
parts: [{ functionResponse: {
|
|
377
360
|
name: responseName,
|
|
378
|
-
response: { content }
|
|
361
|
+
response: { content: JSON.parse(contentStr) }
|
|
379
362
|
} }]
|
|
380
363
|
}];
|
|
381
364
|
} catch (_) {
|
|
@@ -426,8 +409,7 @@ function getGeminiAPI(config) {
|
|
|
426
409
|
};
|
|
427
410
|
}
|
|
428
411
|
function inlineDataPartToMessageContent(part) {
|
|
429
|
-
|
|
430
|
-
if (mimeType.startsWith("image")) return inlineDataPartToMessageContentImage(part);
|
|
412
|
+
if ((part?.inlineData?.mimeType ?? "").startsWith("image")) return inlineDataPartToMessageContentImage(part);
|
|
431
413
|
else return inlineDataPartToMessageContentMedia(part);
|
|
432
414
|
}
|
|
433
415
|
function fileDataPartToMessageContent(part) {
|
|
@@ -493,31 +475,22 @@ function getGeminiAPI(config) {
|
|
|
493
475
|
else return response.data;
|
|
494
476
|
}
|
|
495
477
|
function responseToParts(response) {
|
|
496
|
-
|
|
497
|
-
const parts = responseData?.candidates?.[0]?.content?.parts ?? [];
|
|
498
|
-
return parts;
|
|
478
|
+
return responseToGenerateContentResponseData(response)?.candidates?.[0]?.content?.parts ?? [];
|
|
499
479
|
}
|
|
500
480
|
function partToText(part) {
|
|
501
481
|
return "text" in part ? part.text : "";
|
|
502
482
|
}
|
|
503
483
|
function responseToString(response) {
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
const val = partToText(part);
|
|
507
|
-
return acc + val;
|
|
484
|
+
return responseToParts(response).reduce((acc, part) => {
|
|
485
|
+
return acc + partToText(part);
|
|
508
486
|
}, "");
|
|
509
|
-
return ret;
|
|
510
487
|
}
|
|
511
488
|
function safeResponseTo(response, responseTo) {
|
|
512
489
|
const safetyHandler = config?.safetyHandler ?? new DefaultGeminiSafetyHandler();
|
|
513
490
|
try {
|
|
514
|
-
|
|
515
|
-
return responseTo(safeResponse);
|
|
491
|
+
return responseTo(safetyHandler.handle(response));
|
|
516
492
|
} catch (xx) {
|
|
517
|
-
if (xx instanceof GoogleAISafetyError)
|
|
518
|
-
const ret = responseTo(xx.response);
|
|
519
|
-
xx.reply = ret;
|
|
520
|
-
}
|
|
493
|
+
if (xx instanceof GoogleAISafetyError) xx.reply = responseTo(xx.response);
|
|
521
494
|
throw xx;
|
|
522
495
|
}
|
|
523
496
|
}
|
|
@@ -528,11 +501,10 @@ function getGeminiAPI(config) {
|
|
|
528
501
|
const token = result?.token;
|
|
529
502
|
const logprob = result?.logProbability;
|
|
530
503
|
const encoder = new TextEncoder();
|
|
531
|
-
const bytes = Array.from(encoder.encode(token));
|
|
532
504
|
return {
|
|
533
505
|
token,
|
|
534
506
|
logprob,
|
|
535
|
-
bytes
|
|
507
|
+
bytes: Array.from(encoder.encode(token))
|
|
536
508
|
};
|
|
537
509
|
}
|
|
538
510
|
function candidateToLogprobs(candidate) {
|
|
@@ -553,25 +525,21 @@ function getGeminiAPI(config) {
|
|
|
553
525
|
const retrieval = candidate?.urlRetrievalMetadata?.urlRetrievalContexts ?? [];
|
|
554
526
|
const context = candidate?.urlContextMetadata?.urlMetadata ?? [];
|
|
555
527
|
const all = [...retrieval, ...context];
|
|
556
|
-
if (all.length === 0) return
|
|
528
|
+
if (all.length === 0) return;
|
|
557
529
|
else return { urlMetadata: all };
|
|
558
530
|
}
|
|
559
531
|
function addModalityCounts(modalityTokenCounts, details) {
|
|
560
532
|
modalityTokenCounts?.forEach((modalityTokenCount) => {
|
|
561
533
|
const { modality, tokenCount } = modalityTokenCount;
|
|
562
534
|
const modalityLc = modality.toLowerCase();
|
|
563
|
-
|
|
564
|
-
details[modalityLc] = currentCount + tokenCount;
|
|
535
|
+
details[modalityLc] = (details[modalityLc] ?? 0) + tokenCount;
|
|
565
536
|
});
|
|
566
537
|
}
|
|
567
538
|
function responseToUsageMetadata(response) {
|
|
568
539
|
if ("usageMetadata" in response.data) {
|
|
569
|
-
const
|
|
570
|
-
const usageMetadata = data?.usageMetadata;
|
|
540
|
+
const usageMetadata = (response?.data)?.usageMetadata;
|
|
571
541
|
const input_tokens = usageMetadata.promptTokenCount ?? 0;
|
|
572
|
-
const
|
|
573
|
-
const thoughtsTokenCount = usageMetadata.thoughtsTokenCount ?? 0;
|
|
574
|
-
const output_tokens = candidatesTokenCount + thoughtsTokenCount;
|
|
542
|
+
const output_tokens = (usageMetadata.candidatesTokenCount ?? 0) + (usageMetadata.thoughtsTokenCount ?? 0);
|
|
575
543
|
const total_tokens = usageMetadata.totalTokenCount ?? input_tokens + output_tokens;
|
|
576
544
|
const input_token_details = {};
|
|
577
545
|
addModalityCounts(usageMetadata.promptTokensDetails, input_token_details);
|
|
@@ -579,16 +547,14 @@ function getGeminiAPI(config) {
|
|
|
579
547
|
const output_token_details = {};
|
|
580
548
|
addModalityCounts(usageMetadata?.candidatesTokensDetails, output_token_details);
|
|
581
549
|
if (typeof usageMetadata?.thoughtsTokenCount === "number") output_token_details.reasoning = usageMetadata.thoughtsTokenCount;
|
|
582
|
-
|
|
550
|
+
return {
|
|
583
551
|
input_tokens,
|
|
584
552
|
output_tokens,
|
|
585
553
|
total_tokens,
|
|
586
554
|
input_token_details,
|
|
587
555
|
output_token_details
|
|
588
556
|
};
|
|
589
|
-
return ret;
|
|
590
557
|
}
|
|
591
|
-
return void 0;
|
|
592
558
|
}
|
|
593
559
|
function responseToGenerationInfo(response) {
|
|
594
560
|
const data = Array.isArray(response.data) && response.data[0] ? response.data[0] : response.data && response.data.candidates ? response.data : void 0;
|
|
@@ -648,20 +614,17 @@ function getGeminiAPI(config) {
|
|
|
648
614
|
}
|
|
649
615
|
function partToChatGeneration(part) {
|
|
650
616
|
const message = partToMessageChunk(part);
|
|
651
|
-
const text = partToText(part);
|
|
652
|
-
const generationInfo = {};
|
|
653
617
|
return new ChatGenerationChunk({
|
|
654
|
-
text,
|
|
618
|
+
text: partToText(part),
|
|
655
619
|
message,
|
|
656
|
-
generationInfo
|
|
620
|
+
generationInfo: {}
|
|
657
621
|
});
|
|
658
622
|
}
|
|
659
623
|
function groundingSupportByPart(groundingSupports) {
|
|
660
624
|
const ret = [];
|
|
661
625
|
if (!groundingSupports || groundingSupports.length === 0) return [];
|
|
662
626
|
groundingSupports?.forEach((groundingSupport) => {
|
|
663
|
-
const
|
|
664
|
-
const partIndex = segment?.partIndex ?? 0;
|
|
627
|
+
const partIndex = (groundingSupport?.segment)?.partIndex ?? 0;
|
|
665
628
|
if (ret[partIndex]) ret[partIndex].push(groundingSupport);
|
|
666
629
|
else ret[partIndex] = [groundingSupport];
|
|
667
630
|
});
|
|
@@ -674,7 +637,7 @@ function getGeminiAPI(config) {
|
|
|
674
637
|
const groundingMetadata = candidate?.groundingMetadata;
|
|
675
638
|
const citationMetadata = candidate?.citationMetadata;
|
|
676
639
|
const groundingParts = groundingSupportByPart(groundingMetadata?.groundingSupports);
|
|
677
|
-
|
|
640
|
+
return parts.map((part, index) => {
|
|
678
641
|
const gen = partToChatGeneration(part);
|
|
679
642
|
if (!gen.generationInfo) gen.generationInfo = {};
|
|
680
643
|
if (groundingMetadata) {
|
|
@@ -685,11 +648,9 @@ function getGeminiAPI(config) {
|
|
|
685
648
|
if (citationMetadata) gen.generationInfo.citationMetadata = citationMetadata;
|
|
686
649
|
return gen;
|
|
687
650
|
});
|
|
688
|
-
return ret;
|
|
689
651
|
}
|
|
690
652
|
function combineContent(gen, forceComplex = false) {
|
|
691
|
-
|
|
692
|
-
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("");
|
|
693
654
|
else {
|
|
694
655
|
const ret = [];
|
|
695
656
|
gen.forEach((item) => {
|
|
@@ -718,10 +679,8 @@ function getGeminiAPI(config) {
|
|
|
718
679
|
function combineAdditionalKwargs(gen) {
|
|
719
680
|
const ret = {};
|
|
720
681
|
gen.forEach((item) => {
|
|
721
|
-
const
|
|
722
|
-
|
|
723
|
-
const keys = Object.keys(kwargs);
|
|
724
|
-
keys.forEach((key) => {
|
|
682
|
+
const kwargs = (item?.message)?.additional_kwargs ?? {};
|
|
683
|
+
Object.keys(kwargs).forEach((key) => {
|
|
725
684
|
const value = kwargs[key];
|
|
726
685
|
if (Object.hasOwn(ret, key) && Array.isArray(ret[key]) && Array.isArray(value)) ret[key].push(...value);
|
|
727
686
|
else ret[key] = value;
|
|
@@ -736,17 +695,15 @@ function getGeminiAPI(config) {
|
|
|
736
695
|
const combinedToolCalls = combineToolCalls(gen.content);
|
|
737
696
|
const kwargs = combineAdditionalKwargs(gen.content);
|
|
738
697
|
const lastContent = gen.content[gen.content.length - 1];
|
|
739
|
-
const usage_metadata = responseToUsageMetadata(response);
|
|
740
|
-
const message = new AIMessageChunk({
|
|
741
|
-
content: combinedContent,
|
|
742
|
-
additional_kwargs: kwargs,
|
|
743
|
-
response_metadata: { model_provider: "google-vertexai" },
|
|
744
|
-
usage_metadata,
|
|
745
|
-
tool_calls: combinedToolCalls.tool_calls,
|
|
746
|
-
invalid_tool_calls: combinedToolCalls.invalid_tool_calls
|
|
747
|
-
});
|
|
748
698
|
return [new ChatGenerationChunk({
|
|
749
|
-
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
|
+
}),
|
|
750
707
|
text: combinedText,
|
|
751
708
|
generationInfo: lastContent.generationInfo
|
|
752
709
|
})];
|
|
@@ -785,8 +742,7 @@ function getGeminiAPI(config) {
|
|
|
785
742
|
return ret;
|
|
786
743
|
}
|
|
787
744
|
function responseToBaseMessageFields(response) {
|
|
788
|
-
|
|
789
|
-
return partsToBaseMessageChunkFields(parts);
|
|
745
|
+
return partsToBaseMessageChunkFields(responseToParts(response));
|
|
790
746
|
}
|
|
791
747
|
function partsToSignatures(parts) {
|
|
792
748
|
return parts.map((part) => part?.thoughtSignature ?? "");
|
|
@@ -832,16 +788,14 @@ function getGeminiAPI(config) {
|
|
|
832
788
|
return fields;
|
|
833
789
|
}
|
|
834
790
|
function responseToBaseMessage(response) {
|
|
835
|
-
|
|
836
|
-
return new AIMessage(fields);
|
|
791
|
+
return new AIMessage(responseToBaseMessageFields(response));
|
|
837
792
|
}
|
|
838
793
|
function safeResponseToBaseMessage(response) {
|
|
839
794
|
return safeResponseTo(response, responseToBaseMessage);
|
|
840
795
|
}
|
|
841
796
|
function responseToChatResult(response) {
|
|
842
|
-
const generations = responseToChatGenerations(response);
|
|
843
797
|
return {
|
|
844
|
-
generations,
|
|
798
|
+
generations: responseToChatGenerations(response),
|
|
845
799
|
llmOutput: responseToGenerationInfo(response)
|
|
846
800
|
};
|
|
847
801
|
}
|
|
@@ -857,17 +811,14 @@ function getGeminiAPI(config) {
|
|
|
857
811
|
}
|
|
858
812
|
}
|
|
859
813
|
async function formatMessageContents(input, _parameters) {
|
|
860
|
-
|
|
861
|
-
const contents = [{
|
|
814
|
+
return [{
|
|
862
815
|
role: "user",
|
|
863
|
-
parts
|
|
816
|
+
parts: await messageContentToParts(input)
|
|
864
817
|
}];
|
|
865
|
-
return contents;
|
|
866
818
|
}
|
|
867
819
|
async function formatBaseMessageContents(input, _parameters) {
|
|
868
820
|
const inputPromises = input.map((msg, i) => baseMessageToContent(msg, input[i - 1]));
|
|
869
|
-
|
|
870
|
-
return inputs.reduce((acc, cur) => {
|
|
821
|
+
return (await Promise.all(inputPromises)).reduce((acc, cur) => {
|
|
871
822
|
if (cur.every((content) => content.role === "system")) return acc;
|
|
872
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];
|
|
873
824
|
else acc.push(...cur);
|
|
@@ -936,8 +887,7 @@ function getGeminiAPI(config) {
|
|
|
936
887
|
}
|
|
937
888
|
async function formatSystemInstruction(input) {
|
|
938
889
|
if (!config?.useSystemInstruction) return {};
|
|
939
|
-
|
|
940
|
-
switch (it) {
|
|
890
|
+
switch (inputType(input)) {
|
|
941
891
|
case "BaseMessageArray": return formatBaseMessageSystemInstruction(input);
|
|
942
892
|
default: return {};
|
|
943
893
|
}
|
|
@@ -952,7 +902,6 @@ function getGeminiAPI(config) {
|
|
|
952
902
|
}
|
|
953
903
|
function searchToolName(tool) {
|
|
954
904
|
for (const name of GeminiSearchToolAttributes) if (name in tool) return name;
|
|
955
|
-
return void 0;
|
|
956
905
|
}
|
|
957
906
|
function cleanGeminiTool(tool) {
|
|
958
907
|
const orig = searchToolName(tool);
|
|
@@ -974,7 +923,7 @@ function getGeminiAPI(config) {
|
|
|
974
923
|
return result;
|
|
975
924
|
}
|
|
976
925
|
function formatToolConfig(parameters) {
|
|
977
|
-
if (!parameters.tool_choice || typeof parameters.tool_choice !== "string") return
|
|
926
|
+
if (!parameters.tool_choice || typeof parameters.tool_choice !== "string") return;
|
|
978
927
|
if ([
|
|
979
928
|
"auto",
|
|
980
929
|
"any",
|