@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.
Files changed (108) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/auth.cjs +1 -2
  3. package/dist/auth.cjs.map +1 -1
  4. package/dist/auth.d.cts.map +1 -1
  5. package/dist/auth.d.ts.map +1 -1
  6. package/dist/auth.js +1 -2
  7. package/dist/auth.js.map +1 -1
  8. package/dist/chat_models.cjs +24 -27
  9. package/dist/chat_models.cjs.map +1 -1
  10. package/dist/chat_models.d.cts.map +1 -1
  11. package/dist/chat_models.d.ts.map +1 -1
  12. package/dist/chat_models.js +7 -9
  13. package/dist/chat_models.js.map +1 -1
  14. package/dist/connection.cjs +16 -26
  15. package/dist/connection.cjs.map +1 -1
  16. package/dist/connection.d.cts.map +1 -1
  17. package/dist/connection.d.ts.map +1 -1
  18. package/dist/connection.js +13 -22
  19. package/dist/connection.js.map +1 -1
  20. package/dist/embeddings.cjs +12 -22
  21. package/dist/embeddings.cjs.map +1 -1
  22. package/dist/embeddings.d.cts +0 -1
  23. package/dist/embeddings.d.cts.map +1 -1
  24. package/dist/embeddings.d.ts +0 -1
  25. package/dist/embeddings.d.ts.map +1 -1
  26. package/dist/embeddings.js +7 -16
  27. package/dist/embeddings.js.map +1 -1
  28. package/dist/experimental/media.cjs +41 -70
  29. package/dist/experimental/media.cjs.map +1 -1
  30. package/dist/experimental/media.d.cts.map +1 -1
  31. package/dist/experimental/media.d.ts.map +1 -1
  32. package/dist/experimental/media.js +36 -65
  33. package/dist/experimental/media.js.map +1 -1
  34. package/dist/experimental/utils/media_core.cjs +22 -39
  35. package/dist/experimental/utils/media_core.cjs.map +1 -1
  36. package/dist/experimental/utils/media_core.d.cts.map +1 -1
  37. package/dist/experimental/utils/media_core.d.ts.map +1 -1
  38. package/dist/experimental/utils/media_core.js +16 -33
  39. package/dist/experimental/utils/media_core.js.map +1 -1
  40. package/dist/index.cjs +1 -0
  41. package/dist/llms.cjs +14 -19
  42. package/dist/llms.cjs.map +1 -1
  43. package/dist/llms.d.cts.map +1 -1
  44. package/dist/llms.d.ts.map +1 -1
  45. package/dist/llms.js +4 -8
  46. package/dist/llms.js.map +1 -1
  47. package/dist/output_parsers.cjs +12 -29
  48. package/dist/output_parsers.cjs.map +1 -1
  49. package/dist/output_parsers.d.cts.map +1 -1
  50. package/dist/output_parsers.d.ts.map +1 -1
  51. package/dist/output_parsers.js +10 -26
  52. package/dist/output_parsers.js.map +1 -1
  53. package/dist/profiles.cjs +100 -17
  54. package/dist/profiles.cjs.map +1 -1
  55. package/dist/profiles.js +100 -17
  56. package/dist/profiles.js.map +1 -1
  57. package/dist/types-anthropic.d.cts.map +1 -1
  58. package/dist/types-anthropic.d.ts.map +1 -1
  59. package/dist/types.cjs +1 -0
  60. package/dist/types.cjs.map +1 -1
  61. package/dist/types.d.cts +0 -1
  62. package/dist/types.d.cts.map +1 -1
  63. package/dist/types.d.ts +0 -1
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js.map +1 -1
  66. package/dist/utils/anthropic.cjs +73 -113
  67. package/dist/utils/anthropic.cjs.map +1 -1
  68. package/dist/utils/anthropic.js +63 -102
  69. package/dist/utils/anthropic.js.map +1 -1
  70. package/dist/utils/common.cjs +10 -13
  71. package/dist/utils/common.cjs.map +1 -1
  72. package/dist/utils/common.d.cts.map +1 -1
  73. package/dist/utils/common.d.ts.map +1 -1
  74. package/dist/utils/common.js +6 -8
  75. package/dist/utils/common.js.map +1 -1
  76. package/dist/utils/failed_handler.cjs +1 -2
  77. package/dist/utils/failed_handler.cjs.map +1 -1
  78. package/dist/utils/failed_handler.d.cts.map +1 -1
  79. package/dist/utils/failed_handler.d.ts.map +1 -1
  80. package/dist/utils/failed_handler.js +1 -2
  81. package/dist/utils/failed_handler.js.map +1 -1
  82. package/dist/utils/gemini.cjs +89 -135
  83. package/dist/utils/gemini.cjs.map +1 -1
  84. package/dist/utils/gemini.d.cts.map +1 -1
  85. package/dist/utils/gemini.d.ts.map +1 -1
  86. package/dist/utils/gemini.js +64 -109
  87. package/dist/utils/gemini.js.map +1 -1
  88. package/dist/utils/index.cjs +1 -0
  89. package/dist/utils/palm.d.cts.map +1 -1
  90. package/dist/utils/palm.d.ts.map +1 -1
  91. package/dist/utils/safety.cjs.map +1 -1
  92. package/dist/utils/safety.d.cts.map +1 -1
  93. package/dist/utils/safety.d.ts.map +1 -1
  94. package/dist/utils/safety.js.map +1 -1
  95. package/dist/utils/stream.cjs +5 -9
  96. package/dist/utils/stream.cjs.map +1 -1
  97. package/dist/utils/stream.d.cts.map +1 -1
  98. package/dist/utils/stream.d.ts.map +1 -1
  99. package/dist/utils/stream.js +5 -9
  100. package/dist/utils/stream.js.map +1 -1
  101. package/dist/utils/zod_to_gemini_parameters.cjs +4 -7
  102. package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
  103. package/dist/utils/zod_to_gemini_parameters.d.cts.map +1 -1
  104. package/dist/utils/zod_to_gemini_parameters.d.ts.map +1 -1
  105. package/dist/utils/zod_to_gemini_parameters.js +2 -4
  106. package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
  107. package/package.json +5 -5
  108. package/dist/_virtual/rolldown_runtime.cjs +0 -25
@@ -18,14 +18,12 @@ var DefaultGeminiSafetyHandler = class {
18
18
  this.errorFinish = settings?.errorFinish ?? this.errorFinish;
19
19
  }
20
20
  handleDataPromptFeedback(response, data) {
21
- const promptFeedback = data?.promptFeedback;
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 firstCandidate = data?.candidates?.[0];
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 pathname = new URL(url).pathname;
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
- const extension = match[1].toLowerCase();
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$1) {
128
- return typeof config$1 === "object" && (Object.hasOwn(config$1, "voiceConfig") || Object.hasOwn(config$1, "multiSpeakerVoiceConfig"));
121
+ function isSpeechConfig(config) {
122
+ return typeof config === "object" && (Object.hasOwn(config, "voiceConfig") || Object.hasOwn(config, "multiSpeakerVoiceConfig"));
129
123
  }
130
- function hasLanguage(config$1) {
131
- return typeof config$1 === "object" && Object.hasOwn(config$1, "languageCode");
124
+ function hasLanguage(config) {
125
+ return typeof config === "object" && Object.hasOwn(config, "languageCode");
132
126
  }
133
- function hasVoice(config$1) {
134
- return Object.hasOwn(config$1, "voice");
127
+ function hasVoice(config) {
128
+ return Object.hasOwn(config, "voice");
135
129
  }
136
- if (typeof config === "undefined") return void 0;
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
- const voices = Array.isArray(voice) ? voice : [voice];
151
- const speakerVoiceConfigs = voices.map((v) => ({
152
- speaker: v.speaker,
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
- const mimeType = inferMimeTypeFromUrl(url) || "image/png";
172
- return { fileData: {
173
- mimeType,
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
- const messageContent = typeof content === "string" ? [{
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
- const mimeType = part?.inlineData?.mimeType ?? "";
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
- const responseData = responseToGenerateContentResponseData(response);
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
- const parts = responseToParts(response);
499
- const ret = parts.reduce((acc, part) => {
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
- const safeResponse = safetyHandler.handle(response);
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 void 0;
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
- const currentCount = details[modalityLc] ?? 0;
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 data = response?.data;
564
- const usageMetadata = data?.usageMetadata;
540
+ const usageMetadata = (response?.data)?.usageMetadata;
565
541
  const input_tokens = usageMetadata.promptTokenCount ?? 0;
566
- const candidatesTokenCount = usageMetadata.candidatesTokenCount ?? 0;
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
- const ret = {
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 segment = groundingSupport?.segment;
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
- const ret = parts.map((part, index) => {
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
- const allString = gen.every((item) => typeof item.message.content === "string");
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 message = item?.message;
716
- const kwargs = message?.additional_kwargs ?? {};
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
- const parts = responseToParts(response);
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
- const fields = responseToBaseMessageFields(response);
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
- const parts = await messageContentToParts(input);
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
- const inputs = await Promise.all(inputPromises);
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
- const it = inputType(input);
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 void 0;
926
+ if (!parameters.tool_choice || typeof parameters.tool_choice !== "string") return;
972
927
  if ([
973
928
  "auto",
974
929
  "any",