@ai-sdk/google 4.0.0-beta.48 → 4.0.0-beta.49

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.
@@ -290,13 +290,25 @@ function appendLegacyToolResultParts(parts, toolName, outputValue) {
290
290
  }
291
291
  }
292
292
  function convertToGoogleMessages(prompt, options) {
293
- var _a, _b, _c, _d, _e, _f, _g, _h;
293
+ var _a, _b, _c, _d;
294
294
  const systemInstructionParts = [];
295
295
  const contents = [];
296
296
  let systemMessagesAllowed = true;
297
297
  const isGemmaModel = (_a = options == null ? void 0 : options.isGemmaModel) != null ? _a : false;
298
- const providerOptionsName = (_b = options == null ? void 0 : options.providerOptionsName) != null ? _b : "google";
298
+ const providerOptionsNames = (_b = options == null ? void 0 : options.providerOptionsNames) != null ? _b : ["google"];
299
+ const isVertexLike = !providerOptionsNames.includes("google");
299
300
  const supportsFunctionResponseParts = (_c = options == null ? void 0 : options.supportsFunctionResponseParts) != null ? _c : true;
301
+ const readProviderOpts = (part) => {
302
+ var _a2, _b2, _c2, _d2, _e;
303
+ for (const name of providerOptionsNames) {
304
+ const v = (_a2 = part.providerOptions) == null ? void 0 : _a2[name];
305
+ if (v != null) return v;
306
+ }
307
+ if (isVertexLike) {
308
+ return (_b2 = part.providerOptions) == null ? void 0 : _b2.google;
309
+ }
310
+ return (_e = (_c2 = part.providerOptions) == null ? void 0 : _c2.googleVertex) != null ? _e : (_d2 = part.providerOptions) == null ? void 0 : _d2.vertex;
311
+ };
300
312
  for (const { role, content } of prompt) {
301
313
  switch (role) {
302
314
  case "system": {
@@ -329,7 +341,7 @@ function convertToGoogleMessages(prompt, options) {
329
341
  break;
330
342
  }
331
343
  case "reference": {
332
- if (providerOptionsName === "vertex") {
344
+ if (isVertexLike) {
333
345
  throw new UnsupportedFunctionalityError({
334
346
  functionality: "file parts with provider references"
335
347
  });
@@ -378,8 +390,7 @@ function convertToGoogleMessages(prompt, options) {
378
390
  contents.push({
379
391
  role: "model",
380
392
  parts: content.map((part) => {
381
- var _a2, _b2, _c2, _d2;
382
- const providerOpts = (_d2 = (_a2 = part.providerOptions) == null ? void 0 : _a2[providerOptionsName]) != null ? _d2 : providerOptionsName !== "google" ? (_b2 = part.providerOptions) == null ? void 0 : _b2.google : (_c2 = part.providerOptions) == null ? void 0 : _c2.vertex;
393
+ const providerOpts = readProviderOpts(part);
383
394
  const thoughtSignature = (providerOpts == null ? void 0 : providerOpts.thoughtSignature) != null ? String(providerOpts.thoughtSignature) : void 0;
384
395
  switch (part.type) {
385
396
  case "text": {
@@ -423,7 +434,7 @@ function convertToGoogleMessages(prompt, options) {
423
434
  });
424
435
  }
425
436
  case "reference": {
426
- if (providerOptionsName === "vertex") {
437
+ if (isVertexLike) {
427
438
  throw new UnsupportedFunctionalityError({
428
439
  functionality: "file parts with provider references"
429
440
  });
@@ -513,7 +524,7 @@ function convertToGoogleMessages(prompt, options) {
513
524
  if (part.type === "tool-approval-response") {
514
525
  continue;
515
526
  }
516
- const partProviderOpts = (_g = (_d = part.providerOptions) == null ? void 0 : _d[providerOptionsName]) != null ? _g : providerOptionsName !== "google" ? (_e = part.providerOptions) == null ? void 0 : _e.google : (_f = part.providerOptions) == null ? void 0 : _f.vertex;
527
+ const partProviderOpts = readProviderOpts(part);
517
528
  const serverToolCallId = (partProviderOpts == null ? void 0 : partProviderOpts.serverToolCallId) != null ? String(partProviderOpts.serverToolCallId) : void 0;
518
529
  const serverToolType = (partProviderOpts == null ? void 0 : partProviderOpts.serverToolType) != null ? String(partProviderOpts.serverToolType) : void 0;
519
530
  if (serverToolCallId && serverToolType) {
@@ -546,7 +557,7 @@ function convertToGoogleMessages(prompt, options) {
546
557
  name: part.toolName,
547
558
  response: {
548
559
  name: part.toolName,
549
- content: output.type === "execution-denied" ? (_h = output.reason) != null ? _h : "Tool call execution denied." : output.value
560
+ content: output.type === "execution-denied" ? (_d = output.reason) != null ? _d : "Tool call execution denied." : output.value
550
561
  }
551
562
  }
552
563
  });
@@ -598,7 +609,7 @@ var googleFailedResponseHandler = createJsonErrorResponseHandler({
598
609
  errorToMessage: (data) => data.error.message
599
610
  });
600
611
 
601
- // src/google-options.ts
612
+ // src/google-language-model-options.ts
602
613
  import {
603
614
  lazySchema as lazySchema2,
604
615
  zodSchema as zodSchema2
@@ -1290,13 +1301,17 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1290
1301
  }, { isStreaming = false } = {}) {
1291
1302
  var _a, _b;
1292
1303
  const warnings = [];
1293
- const providerOptionsName = this.config.provider.includes("vertex") ? "vertex" : "google";
1294
- let googleOptions = await parseProviderOptions({
1295
- provider: providerOptionsName,
1296
- providerOptions,
1297
- schema: googleLanguageModelOptions
1298
- });
1299
- if (googleOptions == null && providerOptionsName !== "google") {
1304
+ const providerOptionsNames = this.config.provider.includes("vertex") ? ["googleVertex", "vertex"] : ["google"];
1305
+ let googleOptions;
1306
+ for (const name of providerOptionsNames) {
1307
+ googleOptions = await parseProviderOptions({
1308
+ provider: name,
1309
+ providerOptions,
1310
+ schema: googleLanguageModelOptions
1311
+ });
1312
+ if (googleOptions != null) break;
1313
+ }
1314
+ if (googleOptions == null && !providerOptionsNames.includes("google")) {
1300
1315
  googleOptions = await parseProviderOptions({
1301
1316
  provider: "google",
1302
1317
  providerOptions,
@@ -1326,7 +1341,7 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1326
1341
  const supportsFunctionResponseParts = this.modelId.startsWith("gemini-3");
1327
1342
  const { contents, systemInstruction } = convertToGoogleMessages(prompt, {
1328
1343
  isGemmaModel,
1329
- providerOptionsName,
1344
+ providerOptionsNames,
1330
1345
  supportsFunctionResponseParts
1331
1346
  });
1332
1347
  const {
@@ -1399,12 +1414,15 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1399
1414
  serviceTier: sanitizedServiceTier
1400
1415
  },
1401
1416
  warnings: [...warnings, ...toolWarnings],
1402
- providerOptionsName
1417
+ providerOptionsNames
1403
1418
  };
1404
1419
  }
1405
1420
  async doGenerate(options) {
1406
1421
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
1407
- const { args, warnings, providerOptionsName } = await this.getArgs(options);
1422
+ const { args, warnings, providerOptionsNames } = await this.getArgs(options);
1423
+ const wrapProviderMetadata = (payload) => Object.fromEntries(
1424
+ providerOptionsNames.map((name) => [name, payload])
1425
+ );
1408
1426
  const mergedHeaders = combineHeaders(
1409
1427
  this.config.headers ? await resolve(this.config.headers) : void 0,
1410
1428
  options.headers
@@ -1454,11 +1472,9 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1454
1472
  });
1455
1473
  lastCodeExecutionToolCallId = void 0;
1456
1474
  } else if ("text" in part && part.text != null) {
1457
- const thoughtSignatureMetadata = part.thoughtSignature ? {
1458
- [providerOptionsName]: {
1459
- thoughtSignature: part.thoughtSignature
1460
- }
1461
- } : void 0;
1475
+ const thoughtSignatureMetadata = part.thoughtSignature ? wrapProviderMetadata({
1476
+ thoughtSignature: part.thoughtSignature
1477
+ }) : void 0;
1462
1478
  if (part.text.length === 0) {
1463
1479
  if (thoughtSignatureMetadata != null && content.length > 0) {
1464
1480
  const lastContent = content[content.length - 1];
@@ -1477,11 +1493,9 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1477
1493
  toolCallId: this.config.generateId(),
1478
1494
  toolName: part.functionCall.name,
1479
1495
  input: JSON.stringify(part.functionCall.args),
1480
- providerMetadata: part.thoughtSignature ? {
1481
- [providerOptionsName]: {
1482
- thoughtSignature: part.thoughtSignature
1483
- }
1484
- } : void 0
1496
+ providerMetadata: part.thoughtSignature ? wrapProviderMetadata({
1497
+ thoughtSignature: part.thoughtSignature
1498
+ }) : void 0
1485
1499
  });
1486
1500
  } else if ("inlineData" in part) {
1487
1501
  const hasThought = part.thought === true;
@@ -1490,11 +1504,9 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1490
1504
  type: hasThought ? "reasoning-file" : "file",
1491
1505
  data: { type: "data", data: part.inlineData.data },
1492
1506
  mediaType: part.inlineData.mimeType,
1493
- providerMetadata: hasThoughtSignature ? {
1494
- [providerOptionsName]: {
1495
- thoughtSignature: part.thoughtSignature
1496
- }
1497
- } : void 0
1507
+ providerMetadata: hasThoughtSignature ? wrapProviderMetadata({
1508
+ thoughtSignature: part.thoughtSignature
1509
+ }) : void 0
1498
1510
  });
1499
1511
  } else if ("toolCall" in part && part.toolCall) {
1500
1512
  const toolCallId = (_e = part.toolCall.id) != null ? _e : this.config.generateId();
@@ -1506,18 +1518,14 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1506
1518
  input: JSON.stringify((_f = part.toolCall.args) != null ? _f : {}),
1507
1519
  providerExecuted: true,
1508
1520
  dynamic: true,
1509
- providerMetadata: part.thoughtSignature ? {
1510
- [providerOptionsName]: {
1511
- thoughtSignature: part.thoughtSignature,
1512
- serverToolCallId: toolCallId,
1513
- serverToolType: part.toolCall.toolType
1514
- }
1515
- } : {
1516
- [providerOptionsName]: {
1517
- serverToolCallId: toolCallId,
1518
- serverToolType: part.toolCall.toolType
1519
- }
1520
- }
1521
+ providerMetadata: part.thoughtSignature ? wrapProviderMetadata({
1522
+ thoughtSignature: part.thoughtSignature,
1523
+ serverToolCallId: toolCallId,
1524
+ serverToolType: part.toolCall.toolType
1525
+ }) : wrapProviderMetadata({
1526
+ serverToolCallId: toolCallId,
1527
+ serverToolType: part.toolCall.toolType
1528
+ })
1521
1529
  });
1522
1530
  } else if ("toolResponse" in part && part.toolResponse) {
1523
1531
  const responseToolCallId = (_g = lastServerToolCallId != null ? lastServerToolCallId : part.toolResponse.id) != null ? _g : this.config.generateId();
@@ -1526,18 +1534,14 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1526
1534
  toolCallId: responseToolCallId,
1527
1535
  toolName: `server:${part.toolResponse.toolType}`,
1528
1536
  result: (_h = part.toolResponse.response) != null ? _h : {},
1529
- providerMetadata: part.thoughtSignature ? {
1530
- [providerOptionsName]: {
1531
- thoughtSignature: part.thoughtSignature,
1532
- serverToolCallId: responseToolCallId,
1533
- serverToolType: part.toolResponse.toolType
1534
- }
1535
- } : {
1536
- [providerOptionsName]: {
1537
- serverToolCallId: responseToolCallId,
1538
- serverToolType: part.toolResponse.toolType
1539
- }
1540
- }
1537
+ providerMetadata: part.thoughtSignature ? wrapProviderMetadata({
1538
+ thoughtSignature: part.thoughtSignature,
1539
+ serverToolCallId: responseToolCallId,
1540
+ serverToolType: part.toolResponse.toolType
1541
+ }) : wrapProviderMetadata({
1542
+ serverToolCallId: responseToolCallId,
1543
+ serverToolType: part.toolResponse.toolType
1544
+ })
1541
1545
  });
1542
1546
  lastServerToolCallId = void 0;
1543
1547
  }
@@ -1563,17 +1567,15 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1563
1567
  },
1564
1568
  usage: convertGoogleUsage(usageMetadata),
1565
1569
  warnings,
1566
- providerMetadata: {
1567
- [providerOptionsName]: {
1568
- promptFeedback: (_k = response.promptFeedback) != null ? _k : null,
1569
- groundingMetadata: (_l = candidate.groundingMetadata) != null ? _l : null,
1570
- urlContextMetadata: (_m = candidate.urlContextMetadata) != null ? _m : null,
1571
- safetyRatings: (_n = candidate.safetyRatings) != null ? _n : null,
1572
- usageMetadata: usageMetadata != null ? usageMetadata : null,
1573
- finishMessage: (_o = candidate.finishMessage) != null ? _o : null,
1574
- serviceTier: (_p = response.serviceTier) != null ? _p : null
1575
- }
1576
- },
1570
+ providerMetadata: wrapProviderMetadata({
1571
+ promptFeedback: (_k = response.promptFeedback) != null ? _k : null,
1572
+ groundingMetadata: (_l = candidate.groundingMetadata) != null ? _l : null,
1573
+ urlContextMetadata: (_m = candidate.urlContextMetadata) != null ? _m : null,
1574
+ safetyRatings: (_n = candidate.safetyRatings) != null ? _n : null,
1575
+ usageMetadata: usageMetadata != null ? usageMetadata : null,
1576
+ finishMessage: (_o = candidate.finishMessage) != null ? _o : null,
1577
+ serviceTier: (_p = response.serviceTier) != null ? _p : null
1578
+ }),
1577
1579
  request: { body: args },
1578
1580
  response: {
1579
1581
  // TODO timestamp, model id, id
@@ -1583,10 +1585,13 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1583
1585
  };
1584
1586
  }
1585
1587
  async doStream(options) {
1586
- const { args, warnings, providerOptionsName } = await this.getArgs(
1588
+ const { args, warnings, providerOptionsNames } = await this.getArgs(
1587
1589
  options,
1588
1590
  { isStreaming: true }
1589
1591
  );
1592
+ const wrapProviderMetadata = (payload) => Object.fromEntries(
1593
+ providerOptionsNames.map((name) => [name, payload])
1594
+ );
1590
1595
  const headers = combineHeaders(
1591
1596
  this.config.headers ? await resolve(this.config.headers) : void 0,
1592
1597
  options.headers
@@ -1694,11 +1699,9 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1694
1699
  lastCodeExecutionToolCallId = void 0;
1695
1700
  }
1696
1701
  } else if ("text" in part && part.text != null) {
1697
- const thoughtSignatureMetadata = part.thoughtSignature ? {
1698
- [providerOptionsName]: {
1699
- thoughtSignature: part.thoughtSignature
1700
- }
1701
- } : void 0;
1702
+ const thoughtSignatureMetadata = part.thoughtSignature ? wrapProviderMetadata({
1703
+ thoughtSignature: part.thoughtSignature
1704
+ }) : void 0;
1702
1705
  if (part.text.length === 0) {
1703
1706
  if (thoughtSignatureMetadata != null && currentTextBlockId !== null) {
1704
1707
  controller.enqueue({
@@ -1770,11 +1773,9 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1770
1773
  }
1771
1774
  const hasThought = part.thought === true;
1772
1775
  const hasThoughtSignature = !!part.thoughtSignature;
1773
- const fileMeta = hasThoughtSignature ? {
1774
- [providerOptionsName]: {
1775
- thoughtSignature: part.thoughtSignature
1776
- }
1777
- } : void 0;
1776
+ const fileMeta = hasThoughtSignature ? wrapProviderMetadata({
1777
+ thoughtSignature: part.thoughtSignature
1778
+ }) : void 0;
1778
1779
  controller.enqueue({
1779
1780
  type: hasThought ? "reasoning-file" : "file",
1780
1781
  mediaType: part.inlineData.mimeType,
@@ -1784,13 +1785,11 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1784
1785
  } else if ("toolCall" in part && part.toolCall) {
1785
1786
  const toolCallId = (_e = part.toolCall.id) != null ? _e : generateId2();
1786
1787
  lastServerToolCallId = toolCallId;
1787
- const serverMeta = {
1788
- [providerOptionsName]: {
1789
- ...part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : {},
1790
- serverToolCallId: toolCallId,
1791
- serverToolType: part.toolCall.toolType
1792
- }
1793
- };
1788
+ const serverMeta = wrapProviderMetadata({
1789
+ ...part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : {},
1790
+ serverToolCallId: toolCallId,
1791
+ serverToolType: part.toolCall.toolType
1792
+ });
1794
1793
  controller.enqueue({
1795
1794
  type: "tool-call",
1796
1795
  toolCallId,
@@ -1802,13 +1801,11 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1802
1801
  });
1803
1802
  } else if ("toolResponse" in part && part.toolResponse) {
1804
1803
  const responseToolCallId = (_g = lastServerToolCallId != null ? lastServerToolCallId : part.toolResponse.id) != null ? _g : generateId2();
1805
- const serverMeta = {
1806
- [providerOptionsName]: {
1807
- ...part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : {},
1808
- serverToolCallId: responseToolCallId,
1809
- serverToolType: part.toolResponse.toolType
1810
- }
1811
- };
1804
+ const serverMeta = wrapProviderMetadata({
1805
+ ...part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : {},
1806
+ serverToolCallId: responseToolCallId,
1807
+ serverToolType: part.toolResponse.toolType
1808
+ });
1812
1809
  controller.enqueue({
1813
1810
  type: "tool-result",
1814
1811
  toolCallId: responseToolCallId,
@@ -1821,11 +1818,9 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1821
1818
  }
1822
1819
  for (const part of parts) {
1823
1820
  if (!("functionCall" in part)) continue;
1824
- const providerMeta = part.thoughtSignature ? {
1825
- [providerOptionsName]: {
1826
- thoughtSignature: part.thoughtSignature
1827
- }
1828
- } : void 0;
1821
+ const providerMeta = part.thoughtSignature ? wrapProviderMetadata({
1822
+ thoughtSignature: part.thoughtSignature
1823
+ }) : void 0;
1829
1824
  const isStreamingChunk = part.functionCall.partialArgs != null || part.functionCall.name != null && part.functionCall.willContinue === true;
1830
1825
  const isTerminalChunk = part.functionCall.name == null && part.functionCall.args == null && part.functionCall.partialArgs == null && part.functionCall.willContinue == null;
1831
1826
  const isCompleteCall = part.functionCall.name != null && part.functionCall.args != null && part.functionCall.partialArgs == null;
@@ -1936,17 +1931,15 @@ var GoogleLanguageModel = class _GoogleLanguageModel {
1936
1931
  }),
1937
1932
  raw: candidate.finishReason
1938
1933
  };
1939
- providerMetadata = {
1940
- [providerOptionsName]: {
1941
- promptFeedback: (_j = value.promptFeedback) != null ? _j : null,
1942
- groundingMetadata: lastGroundingMetadata,
1943
- urlContextMetadata: lastUrlContextMetadata,
1944
- safetyRatings: (_k = candidate.safetyRatings) != null ? _k : null,
1945
- usageMetadata: usageMetadata != null ? usageMetadata : null,
1946
- finishMessage: (_l = candidate.finishMessage) != null ? _l : null,
1947
- serviceTier
1948
- }
1949
- };
1934
+ providerMetadata = wrapProviderMetadata({
1935
+ promptFeedback: (_j = value.promptFeedback) != null ? _j : null,
1936
+ groundingMetadata: lastGroundingMetadata,
1937
+ urlContextMetadata: lastUrlContextMetadata,
1938
+ safetyRatings: (_k = candidate.safetyRatings) != null ? _k : null,
1939
+ usageMetadata: usageMetadata != null ? usageMetadata : null,
1940
+ finishMessage: (_l = candidate.finishMessage) != null ? _l : null,
1941
+ serviceTier
1942
+ });
1950
1943
  }
1951
1944
  },
1952
1945
  flush(controller) {