@ai-sdk/google 4.0.54 → 4.0.55
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 +6 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.js +60 -38
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +7 -6
- package/dist/internal/index.js +59 -37
- package/dist/internal/index.js.map +1 -1
- package/package.json +1 -1
- package/src/google-language-model.ts +71 -34
package/package.json
CHANGED
|
@@ -388,11 +388,16 @@ export class GoogleLanguageModel implements LanguageModelV4 {
|
|
|
388
388
|
Object.fromEntries(
|
|
389
389
|
providerOptionsNames.map(name => [name, payload]),
|
|
390
390
|
) as SharedV4ProviderMetadata;
|
|
391
|
-
const candidate = response.candidates[0];
|
|
391
|
+
const candidate = response.candidates?.[0];
|
|
392
|
+
const promptBlockReason = response.promptFeedback?.blockReason;
|
|
393
|
+
const isPromptBlocked =
|
|
394
|
+
candidate?.finishReason == null && promptBlockReason != null;
|
|
395
|
+
const rawFinishReason =
|
|
396
|
+
candidate?.finishReason ?? promptBlockReason ?? undefined;
|
|
392
397
|
const content: Array<LanguageModelV4Content> = [];
|
|
393
398
|
|
|
394
399
|
// map ordered parts to content:
|
|
395
|
-
const parts = candidate
|
|
400
|
+
const parts = candidate?.content?.parts ?? [];
|
|
396
401
|
|
|
397
402
|
const usageMetadata = response.usageMetadata;
|
|
398
403
|
|
|
@@ -517,7 +522,7 @@ export class GoogleLanguageModel implements LanguageModelV4 {
|
|
|
517
522
|
|
|
518
523
|
const sources =
|
|
519
524
|
extractSources({
|
|
520
|
-
groundingMetadata: candidate
|
|
525
|
+
groundingMetadata: candidate?.groundingMetadata,
|
|
521
526
|
generateId: this.config.generateId,
|
|
522
527
|
}) ?? [];
|
|
523
528
|
for (const source of sources) {
|
|
@@ -527,24 +532,26 @@ export class GoogleLanguageModel implements LanguageModelV4 {
|
|
|
527
532
|
return {
|
|
528
533
|
content,
|
|
529
534
|
finishReason: {
|
|
530
|
-
unified:
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
535
|
+
unified: isPromptBlocked
|
|
536
|
+
? 'content-filter'
|
|
537
|
+
: mapGoogleFinishReason({
|
|
538
|
+
finishReason: rawFinishReason,
|
|
539
|
+
// Only count client-executed tool calls for finish reason determination.
|
|
540
|
+
hasToolCalls: content.some(
|
|
541
|
+
part => part.type === 'tool-call' && !part.providerExecuted,
|
|
542
|
+
),
|
|
543
|
+
}),
|
|
544
|
+
raw: rawFinishReason,
|
|
538
545
|
},
|
|
539
546
|
usage: convertGoogleUsage(usageMetadata),
|
|
540
547
|
warnings,
|
|
541
548
|
providerMetadata: wrapProviderMetadata({
|
|
542
549
|
promptFeedback: response.promptFeedback ?? null,
|
|
543
|
-
groundingMetadata: candidate
|
|
544
|
-
urlContextMetadata: candidate
|
|
545
|
-
safetyRatings: candidate
|
|
550
|
+
groundingMetadata: candidate?.groundingMetadata ?? null,
|
|
551
|
+
urlContextMetadata: candidate?.urlContextMetadata ?? null,
|
|
552
|
+
safetyRatings: candidate?.safetyRatings ?? null,
|
|
546
553
|
usageMetadata: usageMetadata ?? null,
|
|
547
|
-
finishMessage: candidate
|
|
554
|
+
finishMessage: candidate?.finishMessage ?? null,
|
|
548
555
|
serviceTier: usageMetadata?.serviceTier ?? null,
|
|
549
556
|
} satisfies GoogleProviderMetadata),
|
|
550
557
|
response: {
|
|
@@ -735,6 +742,22 @@ export class GoogleLanguageModel implements LanguageModelV4 {
|
|
|
735
742
|
|
|
736
743
|
// sometimes the API returns an empty candidates array
|
|
737
744
|
if (candidate == null) {
|
|
745
|
+
const promptBlockReason = value.promptFeedback?.blockReason;
|
|
746
|
+
if (promptBlockReason != null) {
|
|
747
|
+
finishReason = {
|
|
748
|
+
unified: 'content-filter',
|
|
749
|
+
raw: promptBlockReason,
|
|
750
|
+
};
|
|
751
|
+
providerMetadata = wrapProviderMetadata({
|
|
752
|
+
promptFeedback: value.promptFeedback ?? null,
|
|
753
|
+
groundingMetadata: lastGroundingMetadata,
|
|
754
|
+
urlContextMetadata: lastUrlContextMetadata,
|
|
755
|
+
safetyRatings: null,
|
|
756
|
+
usageMetadata: usageMetadata ?? null,
|
|
757
|
+
finishMessage: null,
|
|
758
|
+
serviceTier: usage?.serviceTier ?? null,
|
|
759
|
+
} satisfies GoogleProviderMetadata);
|
|
760
|
+
}
|
|
738
761
|
return;
|
|
739
762
|
}
|
|
740
763
|
|
|
@@ -1110,13 +1133,21 @@ export class GoogleLanguageModel implements LanguageModelV4 {
|
|
|
1110
1133
|
}
|
|
1111
1134
|
}
|
|
1112
1135
|
|
|
1113
|
-
|
|
1136
|
+
const promptBlockReason = value.promptFeedback?.blockReason;
|
|
1137
|
+
const isPromptBlocked =
|
|
1138
|
+
candidate.finishReason == null && promptBlockReason != null;
|
|
1139
|
+
const rawFinishReason =
|
|
1140
|
+
candidate.finishReason ?? promptBlockReason ?? undefined;
|
|
1141
|
+
|
|
1142
|
+
if (rawFinishReason != null) {
|
|
1114
1143
|
finishReason = {
|
|
1115
|
-
unified:
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1144
|
+
unified: isPromptBlocked
|
|
1145
|
+
? 'content-filter'
|
|
1146
|
+
: mapGoogleFinishReason({
|
|
1147
|
+
finishReason: rawFinishReason,
|
|
1148
|
+
hasToolCalls,
|
|
1149
|
+
}),
|
|
1150
|
+
raw: rawFinishReason,
|
|
1120
1151
|
};
|
|
1121
1152
|
|
|
1122
1153
|
providerMetadata = wrapProviderMetadata({
|
|
@@ -1590,16 +1621,18 @@ export const responseSchema = lazySchema(() =>
|
|
|
1590
1621
|
zodSchema(
|
|
1591
1622
|
z.object({
|
|
1592
1623
|
responseId: z.string().nullish(),
|
|
1593
|
-
candidates: z
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1624
|
+
candidates: z
|
|
1625
|
+
.array(
|
|
1626
|
+
z.object({
|
|
1627
|
+
content: getContentSchema().nullish().or(z.object({}).strict()),
|
|
1628
|
+
finishReason: z.string().nullish(),
|
|
1629
|
+
finishMessage: z.string().nullish(),
|
|
1630
|
+
safetyRatings: z.array(getSafetyRatingSchema()).nullish(),
|
|
1631
|
+
groundingMetadata: getGroundingMetadataSchema().nullish(),
|
|
1632
|
+
urlContextMetadata: getUrlContextMetadataSchema().nullish(),
|
|
1633
|
+
}),
|
|
1634
|
+
)
|
|
1635
|
+
.nullish(),
|
|
1603
1636
|
usageMetadata: usageSchema.nullish(),
|
|
1604
1637
|
promptFeedback: z
|
|
1605
1638
|
.object({
|
|
@@ -1611,16 +1644,20 @@ export const responseSchema = lazySchema(() =>
|
|
|
1611
1644
|
),
|
|
1612
1645
|
);
|
|
1613
1646
|
|
|
1647
|
+
type CandidateSchema = NonNullable<
|
|
1648
|
+
InferSchema<typeof responseSchema>['candidates']
|
|
1649
|
+
>[number];
|
|
1650
|
+
|
|
1614
1651
|
export type GroundingMetadataSchema = NonNullable<
|
|
1615
|
-
|
|
1652
|
+
CandidateSchema['groundingMetadata']
|
|
1616
1653
|
>;
|
|
1617
1654
|
|
|
1618
1655
|
export type UrlContextMetadataSchema = NonNullable<
|
|
1619
|
-
|
|
1656
|
+
CandidateSchema['urlContextMetadata']
|
|
1620
1657
|
>;
|
|
1621
1658
|
|
|
1622
1659
|
export type SafetyRatingSchema = NonNullable<
|
|
1623
|
-
|
|
1660
|
+
CandidateSchema['safetyRatings']
|
|
1624
1661
|
>[number];
|
|
1625
1662
|
|
|
1626
1663
|
export type PromptFeedbackSchema = NonNullable<
|