@ai-sdk/google 4.0.102 → 4.0.103
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/index.d.ts.map +1 -1
- package/dist/index.js +23 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +22 -4
- package/dist/internal/index.js.map +1 -1
- package/package.json +3 -3
- package/src/continue-google-stream.ts +11 -3
- package/src/google-language-model.ts +17 -4
- package/src/interactions/build-google-interactions-stream-transform.ts +12 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @ai-sdk/google
|
|
2
2
|
|
|
3
|
+
## 4.0.103
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 43ad966: Report `interrupted` when a stream ends cleanly without its provider completion signal, preserving partial output without emitting an error solely for the interruption.
|
|
8
|
+
|
|
9
|
+
This applies to OpenAI (Chat, Responses, and Completions), Anthropic, Google (Generate Content and Interactions), Alibaba, Amazon Bedrock Converse, Cohere, DeepSeek, Groq, Hugging Face Responses, Mistral Chat, Moonshot AI, Open Responses, Perplexity, and xAI Responses. It also covers cutoffs in later Anthropic messages and Google automatic continuations.
|
|
10
|
+
|
|
11
|
+
**Compatibility notice:** These streams previously fell back to `other` or omitted the finish part. Applications must now handle `interrupted` in finish-reason switches, mappings, and custom validation. Check `finishReason === 'interrupted'` to detect incomplete responses; interruption alone does not trigger error handling.
|
|
12
|
+
|
|
13
|
+
Explicit unknown completion reasons still map to `other`. Actual provider, parsing, and transport errors retain their error paths; affected error paths that previously left the finish reason as `other` now report `error`. OpenAI-compatible remains unchanged.
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [10026d1]
|
|
16
|
+
- @ai-sdk/provider@4.0.32
|
|
17
|
+
- @ai-sdk/provider-utils@5.0.66
|
|
18
|
+
|
|
3
19
|
## 4.0.102
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["DecisionModelV4","BatchV4","SpeechTranslationModelV4","RealtimeFactoryV4","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4ServerEvent","RealtimeModelV4ClientEvent","RealtimeModelV4","RealtimeModelV4SessionConfig","TranscriptionModelV4StreamOptions","SpeechTranslationModelV4StreamOptions","SpeechTranslationModelV4"],"sources":["../src/google-error.ts","../src/google-language-model-options.ts","../src/google-language-model.ts","../src/google-prompt.ts","../src/tool/google-search.ts","../src/google-image-model-options.ts","../src/google-embedding-model-options.ts","../src/google-video-model-options.ts","../src/google-video-settings.ts","../src/google-speech-model-options.ts","../src/google-files.ts","../src/interactions/google-interactions-language-model-options.ts","../src/interactions/google-interactions-provider-metadata.ts","../src/interactions/google-interactions-agent.ts","../src/google-tools.ts","../src/google-image-settings.ts","../src/transcription/google-transcription-model-options.ts","../src/speech-translation/google-speech-translation-model-options.ts","../src/google-provider.ts","../src/realtime/google-realtime-model.ts","../src/realtime/google-realtime-model-options.ts","../src/transcription/google-transcription-model.ts","../src/speech-translation/google-speech-translation-model.ts","../src/version.ts"],"mappings":";;;;cAgBM,wDAAqB;;;;;;;;KAQf,kBAAkB,mBAAmB;;;KCjBrC;cAqDC,6DAA0B;;;;;;;;;;;;;;;WAA1B;;;;;;;;;;;;;;;;;;;;;;;;KA+OD,6BAA6B,mBAChC;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["DecisionModelV4","BatchV4","SpeechTranslationModelV4","RealtimeFactoryV4","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4ServerEvent","RealtimeModelV4ClientEvent","RealtimeModelV4","RealtimeModelV4SessionConfig","TranscriptionModelV4StreamOptions","SpeechTranslationModelV4StreamOptions","SpeechTranslationModelV4"],"sources":["../src/google-error.ts","../src/google-language-model-options.ts","../src/google-language-model.ts","../src/google-prompt.ts","../src/tool/google-search.ts","../src/google-image-model-options.ts","../src/google-embedding-model-options.ts","../src/google-video-model-options.ts","../src/google-video-settings.ts","../src/google-speech-model-options.ts","../src/google-files.ts","../src/interactions/google-interactions-language-model-options.ts","../src/interactions/google-interactions-provider-metadata.ts","../src/interactions/google-interactions-agent.ts","../src/google-tools.ts","../src/google-image-settings.ts","../src/transcription/google-transcription-model-options.ts","../src/speech-translation/google-speech-translation-model-options.ts","../src/google-provider.ts","../src/realtime/google-realtime-model.ts","../src/realtime/google-realtime-model-options.ts","../src/transcription/google-transcription-model.ts","../src/speech-translation/google-speech-translation-model.ts","../src/version.ts"],"mappings":";;;;cAgBM,wDAAqB;;;;;;;;KAQf,kBAAkB,mBAAmB;;;KCjBrC;cAqDC,6DAA0B;;;;;;;;;;;;;;;WAA1B;;;;;;;;;;;;;;;;;;;;;;;;KA+OD,6BAA6B,mBAChC;;;cCosDI,iDAAc;;;cAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BR,kBAAkB,YACrB,mBAAmB;KAGT,0BAA0B,YACpC;KAGU,2BAA2B,YACrC;KAGU,qBAAqB,YAC/B;KAGU,uBAAuB,YACjC,mBAAmB;KAGT,sBAAsB,YAChC,mBAAmB;;;KC98DT,0BAA0B;KAE1B,2BAA2B;KAE3B,qBAAqB;KAErB,uBAAuB;KAEvB,sBAAsB;UAEjB;EACf,gBAAgB;EAChB,mBAAmB;;EAEnB,8BAA8B,MAAM;EACpC,oBAAoB;EACpB,eAAe;EACf,eAAe;EACf;EACA;EACA;;;;;;;EAQA;;;;;;;;;EAUA;;;;cC9GW,sCAA8B,EAAA;;;;;;;;;GAevC,EAAA,KAAA;KAEQ,uBAAuB,EAAE,MACnC,kBAAkB;;;KCJR,0BAA0B,KACpC;EAGA,eAAe;;;;KCtBL;cAuBC,8DAA2B;;;;;;;;;;;;;;;;;KAkD5B,8BAA8B,mBACjC;;;KC9EG;EAEV;EACA;EAGA;EACA;EAGA,kBAAkB;IAChB;IACA;;GAGD;;;;KClBS;;;KCOA;cAyBC,oEAAiC;;;;;;;;;;;;;;;;;;;;;;;;KA2ClC,2BAA2B,mBAC9B;;;KCtDG;EACV;EACA;EACA;GAEC;;;;;;;;;;;;;KCXS;;;;;KAiCA;;;;;;;;EAQV;IAIM;IACA;IACA;IACA;;;;;;;;;;cAWK,yEAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAtC;;;;;KA+ND,yCAAyC,mBAC5C;;;;;;;;KCtSG;;;;;EAKV;;;;EAKA;;;;;;;EAQA,yBAAyB;;;;;EAMzB;;;;;EAMA;;;;;EAMA;;;;;;;;;;;;;KC/BU;;;cCFC;;;;;;;;kBAAA;oBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KCRD;UAQK;;;;EAIf;;;;KCLU;;;;;;cAUC,kEAA+B;;;;;;;KAuChC,kCAAkC,mBACrC;;;KClDG;cAIC,sEAAmC;EAAA;;KAYpC,sCAAsC,mBACzC;;;UCkCQ,uBAAuB;GACrC,SAAS,gBAAgB;EAE1B,cAAc,SAAS,gBAAgB;EAEvC,KAAK,SAAS,gBAAgB;;EAG9B,cAAc,SAAS,gBAAgBA;;EAEvC,gBAAgB,SAAS,gBAAgBA;IACvC,YAAYA;;EAGd,sBAAsBC;IACpB,MAAM;IACN,OAAO;;;;;EAMT,MACE,SAAS,oBACT,WAAW,sBACV;;;;EAKH,aAAa,SAAS,gBAAgB;;;;EAKtC,UAAU,SAAS,yBAAyB;;;;EAK5C,eAAe,SAAS,yBAAyB;;;;EAKjD,cAAc,SAAS,yBAAyB;;;;EAKhD,mBAAmB,SAAS,yBAAyB;;;;EAKrD,MAAM,SAAS,qBAAqB;;;;EAKpC,WAAW,SAAS,qBAAqB;;;;EAKzC,YACE,SAAS,iCACRC;;;;EAKH,uBACE,SAAS,iCACRA;;;;EAKH,OAAO,SAAS,sBAAsB;;;;EAKtC,YAAY,SAAS,sBAAsB;;;;;;;EAQ3C,cAAc,SAAS,6BAA6B;;;;EAKpD,mBAAmB,SAAS,6BAA6B;EAEzD,SAAS;;;;;;;;;EAUT,aACE,gBACI;IACE,OAAO;;IACP;MACL;EAEH,uBAAuBC;EAEvB,cAAc;;UAGC;;EAEf;;IAEE;;;;;;EAOF;;;;;EAMA;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;EAKR;;;;;EAMA,YAAY;;;;;EAMZ;;;;;wBAqCc,aACd,UAAS,yBACR;;;;qBA0NU,QAAM;;;KClcP;EACV;EACA;EACA,eAAe;EACf,QAAQ;;cAGG,+BAA+BK;WACjC;WACA;WACA;mBAEQ;mBACA;EAEL,YAAA,iBAAiB,QAAQ;EAM/B,qBACJ,SAASJ,kDACR,QAAQC;EAmEX,mBAAmB;IAAW;IAAe;;IAC3C;IACA;;EAOF,iBACE,eACCC,0CAA6BA;EAIhC,qBACE,OAAOC,0CACN,WAAWC;EAId,mBACE,QAAQC,4CACP;;;;KChJO;KAEA;;;;;;;EAOV;;;;;IAKE;;;;;IAMA;;;;;;;;;;EAWF;;;;;;IAME;;;;;IAMA;;;;IAKA;;;;;;;;;;;EAYF;;;;UC6BQ;EACR;EACA;EACA,UAAU,WAAW;EACrB,QAAQ;EACR,YAAY;EACZ;IACE,oBAAoB;IACpB;;;qBAIS,oCAAoC;WAsBpC,SAAS;mBACD;WAtBV;UAED,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B,SAAS;IACT,QAAQ;MACT;MAIG;EAKO,YAAA,SAAS,4BACD,QAAQ;UAGb;EAUR,WACJ,SAAS,WAAW,yCACnB,QAAQ,QAAQ,WAAW;EAmGxB,SACJ,SAASC,iDACR,QACD,QAAQ,WAAW,YAAY;;;;KCxKvB;EACV;EACA;EACA,eAAe;EACf,YAAY;EACZ;IACE,oBAAoB;IACpB;;;cAIS,wCAAwCE;WAC1C;WACA,SAAS;mBAED;UAET,oBAAoB,OAAO;;;;UAO3B,sBAAsB;IAC5B,SAAS;IACT,QAAQ;MACT;MAIG;EAKF,YAAA,SAAS,gCACT,QAAQ;EAMJ,SACJ,SAASD,qDACR,QAAQ,QAAQ,WAAWC;;;;qBCpHnB"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Experimental_DecisionLanguageModel } from "@ai-sdk/provider-utils/exper
|
|
|
3
3
|
import { AISDKError, InvalidArgumentError, InvalidResponseDataError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
5
|
//#region src/version.ts
|
|
6
|
-
const VERSION = "4.0.
|
|
6
|
+
const VERSION = "4.0.103";
|
|
7
7
|
//#endregion
|
|
8
8
|
//#region src/google-error.ts
|
|
9
9
|
const getGoogleErrorSchema = () => z.object({
|
|
@@ -203,7 +203,9 @@ function getModelPath(modelId) {
|
|
|
203
203
|
* Events of the current stream are passed through unchanged. When an event
|
|
204
204
|
* signals that the per-request cap was reached while budget remains
|
|
205
205
|
* (`getContinuationToken` returns a token), the next request is sent with that
|
|
206
|
-
* token once the current stream ends, and its events are appended
|
|
206
|
+
* token once the current stream ends, and its events are appended after a
|
|
207
|
+
* `continuation-start` marker. The marker orders per-response state changes
|
|
208
|
+
* with buffered events, including when the new stream is empty. If the
|
|
207
209
|
* continuation request fails, the error is emitted as a failed parse result
|
|
208
210
|
* and the stream ends.
|
|
209
211
|
*/
|
|
@@ -230,6 +232,8 @@ function continueGoogleStream({ stream, getContinuationToken, continueStream })
|
|
|
230
232
|
pendingContinuationToken = void 0;
|
|
231
233
|
try {
|
|
232
234
|
reader = (await continueStream(continuationToken)).getReader();
|
|
235
|
+
controller.enqueue({ type: "continuation-start" });
|
|
236
|
+
return;
|
|
233
237
|
} catch (error) {
|
|
234
238
|
controller.enqueue({
|
|
235
239
|
success: false,
|
|
@@ -1922,7 +1926,7 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1922
1926
|
}
|
|
1923
1927
|
});
|
|
1924
1928
|
let finishReason = {
|
|
1925
|
-
unified: "
|
|
1929
|
+
unified: "interrupted",
|
|
1926
1930
|
raw: void 0
|
|
1927
1931
|
};
|
|
1928
1932
|
let usage = void 0;
|
|
@@ -1978,11 +1982,22 @@ var GoogleLanguageModel = class GoogleLanguageModel {
|
|
|
1978
1982
|
});
|
|
1979
1983
|
},
|
|
1980
1984
|
transform(chunk, controller) {
|
|
1985
|
+
if ("type" in chunk) {
|
|
1986
|
+
finishReason = {
|
|
1987
|
+
unified: "interrupted",
|
|
1988
|
+
raw: void 0
|
|
1989
|
+
};
|
|
1990
|
+
return;
|
|
1991
|
+
}
|
|
1981
1992
|
if (options.includeRawChunks) controller.enqueue({
|
|
1982
1993
|
type: "raw",
|
|
1983
1994
|
rawValue: chunk.rawValue
|
|
1984
1995
|
});
|
|
1985
1996
|
if (!chunk.success) {
|
|
1997
|
+
if (finishReason.unified === "interrupted") finishReason = {
|
|
1998
|
+
unified: "error",
|
|
1999
|
+
raw: void 0
|
|
2000
|
+
};
|
|
1986
2001
|
controller.enqueue({
|
|
1987
2002
|
type: "error",
|
|
1988
2003
|
error: chunk.error
|
|
@@ -4436,6 +4451,7 @@ function buildGoogleInteractionsStreamTransform({ warnings, generateId, includeR
|
|
|
4436
4451
|
let serviceTier = headerServiceTier;
|
|
4437
4452
|
let finishStatus;
|
|
4438
4453
|
let hasFunctionCall = false;
|
|
4454
|
+
let hasCompletionEvent = false;
|
|
4439
4455
|
const openBlocks = /* @__PURE__ */ new Map();
|
|
4440
4456
|
const emittedSourceKeys = /* @__PURE__ */ new Set();
|
|
4441
4457
|
function sourceKey(source) {
|
|
@@ -4848,6 +4864,7 @@ function buildGoogleInteractionsStreamTransform({ warnings, generateId, includeR
|
|
|
4848
4864
|
break;
|
|
4849
4865
|
}
|
|
4850
4866
|
case "interaction.completed": {
|
|
4867
|
+
hasCompletionEvent = true;
|
|
4851
4868
|
const interaction = value.interaction;
|
|
4852
4869
|
if (interaction?.id != null && interaction.id.length > 0) interactionId = interaction.id;
|
|
4853
4870
|
if (interaction?.status != null) finishStatus = interaction.status;
|
|
@@ -4872,12 +4889,13 @@ function buildGoogleInteractionsStreamTransform({ warnings, generateId, includeR
|
|
|
4872
4889
|
}
|
|
4873
4890
|
},
|
|
4874
4891
|
flush(controller) {
|
|
4892
|
+
const isInterrupted = !hasCompletionEvent && (finishStatus == null || finishStatus === "in_progress");
|
|
4875
4893
|
const finishReason = {
|
|
4876
|
-
unified: mapGoogleInteractionsFinishReason({
|
|
4894
|
+
unified: isInterrupted ? "interrupted" : mapGoogleInteractionsFinishReason({
|
|
4877
4895
|
status: finishStatus,
|
|
4878
4896
|
hasFunctionCall
|
|
4879
4897
|
}),
|
|
4880
|
-
raw: finishStatus
|
|
4898
|
+
raw: isInterrupted ? void 0 : finishStatus
|
|
4881
4899
|
};
|
|
4882
4900
|
const outputTokensByModality = getGoogleInteractionsOutputTokensByModality(usage);
|
|
4883
4901
|
const providerMetadata = { google: {
|