@ai-sdk/openai 4.0.109 → 4.0.110
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 +23 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +159 -36
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +146 -6
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +148 -35
- package/dist/internal/index.js.map +1 -1
- package/docs/03-openai.mdx +68 -0
- package/package.json +1 -1
- package/src/chat/map-openai-finish-reason.ts +11 -4
- package/src/chat/openai-chat-api.ts +36 -0
- package/src/chat/openai-chat-language-model.ts +101 -12
- package/src/internal/index.ts +2 -0
- package/src/openai-batch.ts +8 -0
- package/src/responses/map-openai-responses-finish-reason.ts +7 -1
- package/src/responses/openai-responses-api.ts +71 -48
- package/src/responses/openai-responses-language-model.ts +56 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @ai-sdk/openai
|
|
2
2
|
|
|
3
|
+
## 4.0.110
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c6efa4b: Refactor Azure model ID logic into a model catalog that declares capabilities and provider options, and generate provider capability documentation from it. Export the OpenAI catalog internally for Azure to reuse. Request behavior is unchanged.
|
|
8
|
+
- f6dbf04: fix(openai): surface Chat Completions refusals as text content
|
|
9
|
+
|
|
10
|
+
The Chat Completions model ignored `message.refusal` (non-streaming) and `delta.refusal` (streaming). When the model refused to answer, `content` was `null`, so the AI SDK returned empty text with a `stop` finish reason and silently dropped the refusal. Refusal text is now emitted as text content in both `generateText` and `streamText` results, and it is emitted in addition to content when the API returns both. A refusal with a `stop` finish reason is now reported as a `content-filter` finish reason, matching the Anthropic provider and the Responses API.
|
|
11
|
+
|
|
12
|
+
- 646a7e3: fix(openai,openai-compatible): surface refusal logprobs and openai-compatible refusals
|
|
13
|
+
|
|
14
|
+
`@ai-sdk/openai`: Chat Completions responses that contain a refusal can return `logprobs.refusal` next to `logprobs.content`. The provider previously read only `logprobs.content`, so `providerMetadata.openai.logprobs` was empty or missing for refusals. Refusal logprobs are now included in emission order (content logprobs followed by refusal logprobs) in both `generateText` and `streamText`.
|
|
15
|
+
|
|
16
|
+
Streaming logprobs are now collected across all chunks in `streamText`: previously only the logprobs of the last streamed chunk were reported. This applies to content logprobs as well, so `providerMetadata.openai.logprobs` now contains the logprobs of every streamed token instead of only the last chunk's tokens. Explicitly empty logprobs (`logprobs: { content: [], refusal: null }`) are reported as an empty array, as before.
|
|
17
|
+
|
|
18
|
+
A refusal that arrives in the same streamed chunk as the `finish_reason` is now taken into account: such a response is reported with a `content-filter` finish reason instead of `stop`.
|
|
19
|
+
|
|
20
|
+
`@ai-sdk/openai-compatible`: Chat Completions responses that carry `message.refusal` (non-streaming) or `delta.refusal` (streaming) were ignored, so providers such as OpenAI served through `createOpenAICompatible` lost the refusal text and reported an empty `stop` response. Refusals are now returned as text content after any content text, and a non-empty refusal with a `stop` finish reason is reported as a `content-filter` finish reason. This also applies when the refusal and the finish reason arrive in the same streamed chunk. Non-string refusals (for example `refusal: false` from servers that use booleans) are ignored instead of failing the response.
|
|
21
|
+
|
|
22
|
+
- 6b97088: fix(openai): handle refusal content parts in the Responses API
|
|
23
|
+
|
|
24
|
+
The Responses API returns a `refusal` content part instead of `output_text` when the model declines a request. The response schema rejected these parts, so non-streaming calls failed with an `APICallError` ("Invalid JSON response"), and streamed `response.refusal.delta` / `response.refusal.done` events were dropped, producing empty text. Refusal content parts and stream events are now parsed: the refusal explanation is surfaced as text and the finish reason is mapped to `content-filter`. When the response also contains a client-side function call, the finish reason stays `tool-calls` so the tools are still executed.
|
|
25
|
+
|
|
3
26
|
## 4.0.109
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -297,6 +297,18 @@ declare const openaiResponsesChunkSchema: import("@ai-sdk/provider-utils").LazyS
|
|
|
297
297
|
logprob: number;
|
|
298
298
|
}[];
|
|
299
299
|
}[] | null | undefined;
|
|
300
|
+
} | {
|
|
301
|
+
type: "response.refusal.delta";
|
|
302
|
+
item_id: string;
|
|
303
|
+
delta: string;
|
|
304
|
+
output_index?: number | null | undefined;
|
|
305
|
+
content_index?: number | null | undefined;
|
|
306
|
+
} | {
|
|
307
|
+
type: "response.refusal.done";
|
|
308
|
+
item_id: string;
|
|
309
|
+
refusal: string;
|
|
310
|
+
output_index?: number | null | undefined;
|
|
311
|
+
content_index?: number | null | undefined;
|
|
300
312
|
} | {
|
|
301
313
|
type: "response.completed" | "response.incomplete";
|
|
302
314
|
response: {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["_$__tool_apply_patch0.ApplyPatchOperation","_$__tool_custom0.customToolFactory","_$_0.OpenAIComputerAction","_$_0.OpenAIComputerSafetyCheck","_$__responses_openai_responses_api0.OpenAIResponsesFileSearchToolComparisonFilter","_$__responses_openai_responses_api0.OpenAIResponsesFileSearchToolCompoundFilter","_$__tool_web_search0.webSearchToolFactory","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4SessionIntent","RealtimeModelV4ServerConnection","RealtimeModelV4ServerEvent","RealtimeModelV4ClientEvent","RealtimeModelV4SessionConfig","RealtimeModelV4","RealtimeModelV4SessionIntent","RealtimeModelV4SessionConfig","RealtimeModelV4ClientEvent","RealtimeModelV4","RealtimeModelV4","RealtimeFactoryV4","DecisionModelV4","SpeechTranslationModelV4","BatchV4","SpeechTranslationModelV4StreamOptions","SpeechTranslationModelV4"],"sources":["../src/openai-config.ts","../src/openai-decision-model.ts","../src/chat/openai-chat-language-model-options.ts","../src/completion/openai-completion-language-model-options.ts","../src/embedding/openai-embedding-model-options.ts","../src/image/openai-image-model-options.ts","../src/tool/apply-patch.ts","../src/tool/custom.ts","../src/responses/openai-responses-language-model-options.ts","../src/responses/openai-responses-api.ts","../src/tool/web-search.ts","../src/openai-tools.ts","../src/live/openai-realtime-model-live-options.ts","../src/realtime/openai-realtime-model.ts","../src/live/openai-realtime-model-live.ts","../src/openai-model-catalog.ts","../src/realtime/openai-realtime-factory.ts","../src/speech/openai-speech-model-options.ts","../src/transcription/openai-transcription-model-options.ts","../src/speech-translation/openai-speech-translation-model-options.ts","../src/openai-provider.ts","../src/responses/openai-responses-prepare-tools.ts","../src/speech-translation/openai-speech-translation-model.ts","../src/files/openai-files-options.ts","../src/tool/computer.ts","../src/responses/openai-responses-provider-metadata.ts","../src/version.ts","../src/openai-decision-model-options.ts"],"mappings":";;;;KAMK,gBAAgB;KAMT;EACV;;EAEA;EACA;EACA,MAAM;IAAW;IAAiB;;EAClC,UAAU,WAAW;EACrB,QAAQ;EACR,YAAY;EACZ;;;;;;;EAOA;;;;;;;EAOA;;;;;;;;;EASA;;;;KCZU;;;KCxBA;cAuEC,iEAA8B;;;;;;;;;;;;;;;;;;;;;;;KAwJ/B,iCAAiC,mBACpC;cAGI,mEAAgC;EAAA;;KASjC,mCAAmC,mBACtC;;;KC7OG;cAKC,uEAAoC;;cAApC;;;;;KAiDD,uCAAuC,mBAC1C;;;KCxDG;cAMC,8DAA2B;;;;KAkB5B,8BAA8B,mBACjC;;;KCrBG;cAmFC,0DAAuB;;;;;;;;;KAIxB,0BAA0B,mBAC7B;cAGI,oEAAiC;;;;;;;;;;;;;KAsClC,oCAAoC,mBACvC;cAGI,8DAA2B;;;;;;;;;;;;KAyB5B,8BAA8B,mBACjC;;;;;;KChHG;EAEN;;;;EAIA;;;;EAIA;;EAGA;;;;EAIA;;EAGA;;;;EAIA;;;;EAIA;;;;cCxDO,oDAAiB;;;;EAMZ;;;;;EAMN;;;;;EAOJ;IACE;IACA;IACA;;IAGA;;;;;KCqCE;cAsEC,4EAAyC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoR1C,sCAAsC,mBACzC;cAGI,4EAAyC;EAAA;;KAkB1C,sCAAsC,mBACzC;cAGI,yEAAsC;;;;;;;;;KAmBvC,mCAAmC,mBACtC;;;;;;KCsDG;;;;EAIV;;;;EAKA;;;;EAKA;;;;;KAMU;;;;EAIV;;;;EAKA,SAAS,MACL,gDACA;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["_$__tool_apply_patch0.ApplyPatchOperation","_$__tool_custom0.customToolFactory","_$_0.OpenAIComputerAction","_$_0.OpenAIComputerSafetyCheck","_$__responses_openai_responses_api0.OpenAIResponsesFileSearchToolComparisonFilter","_$__responses_openai_responses_api0.OpenAIResponsesFileSearchToolCompoundFilter","_$__tool_web_search0.webSearchToolFactory","RealtimeModelV4ClientSecretOptions","RealtimeModelV4ClientSecretResult","RealtimeModelV4SessionIntent","RealtimeModelV4ServerConnection","RealtimeModelV4ServerEvent","RealtimeModelV4ClientEvent","RealtimeModelV4SessionConfig","RealtimeModelV4","RealtimeModelV4SessionIntent","RealtimeModelV4SessionConfig","RealtimeModelV4ClientEvent","RealtimeModelV4","RealtimeModelV4","RealtimeFactoryV4","DecisionModelV4","SpeechTranslationModelV4","BatchV4","SpeechTranslationModelV4StreamOptions","SpeechTranslationModelV4"],"sources":["../src/openai-config.ts","../src/openai-decision-model.ts","../src/chat/openai-chat-language-model-options.ts","../src/completion/openai-completion-language-model-options.ts","../src/embedding/openai-embedding-model-options.ts","../src/image/openai-image-model-options.ts","../src/tool/apply-patch.ts","../src/tool/custom.ts","../src/responses/openai-responses-language-model-options.ts","../src/responses/openai-responses-api.ts","../src/tool/web-search.ts","../src/openai-tools.ts","../src/live/openai-realtime-model-live-options.ts","../src/realtime/openai-realtime-model.ts","../src/live/openai-realtime-model-live.ts","../src/openai-model-catalog.ts","../src/realtime/openai-realtime-factory.ts","../src/speech/openai-speech-model-options.ts","../src/transcription/openai-transcription-model-options.ts","../src/speech-translation/openai-speech-translation-model-options.ts","../src/openai-provider.ts","../src/responses/openai-responses-prepare-tools.ts","../src/speech-translation/openai-speech-translation-model.ts","../src/files/openai-files-options.ts","../src/tool/computer.ts","../src/responses/openai-responses-provider-metadata.ts","../src/version.ts","../src/openai-decision-model-options.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1396,9 +1396,9 @@ function getResponseMetadata$1({ id, model, created }) {
|
|
|
1396
1396
|
}
|
|
1397
1397
|
//#endregion
|
|
1398
1398
|
//#region src/chat/map-openai-finish-reason.ts
|
|
1399
|
-
function mapOpenAIFinishReason$1(finishReason) {
|
|
1399
|
+
function mapOpenAIFinishReason$1({ finishReason, hasRefusal = false }) {
|
|
1400
1400
|
switch (finishReason) {
|
|
1401
|
-
case "stop": return "stop";
|
|
1401
|
+
case "stop": return hasRefusal ? "content-filter" : "stop";
|
|
1402
1402
|
case "length": return "length";
|
|
1403
1403
|
case "content_filter": return "content-filter";
|
|
1404
1404
|
case "function_call":
|
|
@@ -1416,6 +1416,7 @@ const openaiChatResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
|
1416
1416
|
message: z.object({
|
|
1417
1417
|
role: z.literal("assistant").nullish(),
|
|
1418
1418
|
content: z.string().nullish(),
|
|
1419
|
+
refusal: z.string().nullish(),
|
|
1419
1420
|
audio: z.object({ transcript: z.string().nullish() }).nullish(),
|
|
1420
1421
|
tool_calls: z.array(z.object({
|
|
1421
1422
|
id: z.string().nullish(),
|
|
@@ -1436,14 +1437,24 @@ const openaiChatResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
|
1436
1437
|
})).nullish()
|
|
1437
1438
|
}),
|
|
1438
1439
|
index: z.number(),
|
|
1439
|
-
logprobs: z.object({
|
|
1440
|
-
|
|
1441
|
-
logprob: z.number(),
|
|
1442
|
-
top_logprobs: z.array(z.object({
|
|
1440
|
+
logprobs: z.object({
|
|
1441
|
+
content: z.array(z.object({
|
|
1443
1442
|
token: z.string(),
|
|
1444
|
-
logprob: z.number()
|
|
1445
|
-
|
|
1446
|
-
|
|
1443
|
+
logprob: z.number(),
|
|
1444
|
+
top_logprobs: z.array(z.object({
|
|
1445
|
+
token: z.string(),
|
|
1446
|
+
logprob: z.number()
|
|
1447
|
+
}))
|
|
1448
|
+
})).nullish(),
|
|
1449
|
+
refusal: z.array(z.object({
|
|
1450
|
+
token: z.string(),
|
|
1451
|
+
logprob: z.number(),
|
|
1452
|
+
top_logprobs: z.array(z.object({
|
|
1453
|
+
token: z.string(),
|
|
1454
|
+
logprob: z.number()
|
|
1455
|
+
}))
|
|
1456
|
+
})).nullish()
|
|
1457
|
+
}).nullish(),
|
|
1447
1458
|
finish_reason: z.string().nullish()
|
|
1448
1459
|
})),
|
|
1449
1460
|
usage: z.object({
|
|
@@ -1469,6 +1480,7 @@ const openaiChatChunkSchema = lazySchema(() => zodSchema(z.union([z.object({
|
|
|
1469
1480
|
delta: z.object({
|
|
1470
1481
|
role: z.enum(["assistant"]).nullish(),
|
|
1471
1482
|
content: z.string().nullish(),
|
|
1483
|
+
refusal: z.string().nullish(),
|
|
1472
1484
|
tool_calls: z.array(z.object({
|
|
1473
1485
|
index: z.number(),
|
|
1474
1486
|
id: z.string().nullish(),
|
|
@@ -1488,14 +1500,24 @@ const openaiChatChunkSchema = lazySchema(() => zodSchema(z.union([z.object({
|
|
|
1488
1500
|
})
|
|
1489
1501
|
})).nullish()
|
|
1490
1502
|
}).nullish(),
|
|
1491
|
-
logprobs: z.object({
|
|
1492
|
-
|
|
1493
|
-
logprob: z.number(),
|
|
1494
|
-
top_logprobs: z.array(z.object({
|
|
1503
|
+
logprobs: z.object({
|
|
1504
|
+
content: z.array(z.object({
|
|
1495
1505
|
token: z.string(),
|
|
1496
|
-
logprob: z.number()
|
|
1497
|
-
|
|
1498
|
-
|
|
1506
|
+
logprob: z.number(),
|
|
1507
|
+
top_logprobs: z.array(z.object({
|
|
1508
|
+
token: z.string(),
|
|
1509
|
+
logprob: z.number()
|
|
1510
|
+
}))
|
|
1511
|
+
})).nullish(),
|
|
1512
|
+
refusal: z.array(z.object({
|
|
1513
|
+
token: z.string(),
|
|
1514
|
+
logprob: z.number(),
|
|
1515
|
+
top_logprobs: z.array(z.object({
|
|
1516
|
+
token: z.string(),
|
|
1517
|
+
logprob: z.number()
|
|
1518
|
+
}))
|
|
1519
|
+
})).nullish()
|
|
1520
|
+
}).nullish(),
|
|
1499
1521
|
finish_reason: z.string().nullish(),
|
|
1500
1522
|
index: z.number()
|
|
1501
1523
|
})),
|
|
@@ -1930,6 +1952,12 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
1930
1952
|
type: "text",
|
|
1931
1953
|
text
|
|
1932
1954
|
});
|
|
1955
|
+
const refusal = choice.message.refusal;
|
|
1956
|
+
const hasRefusal = refusal != null && refusal.length > 0;
|
|
1957
|
+
if (hasRefusal) content.push({
|
|
1958
|
+
type: "text",
|
|
1959
|
+
text: refusal
|
|
1960
|
+
});
|
|
1933
1961
|
for (const toolCall of choice.message.tool_calls ?? []) content.push({
|
|
1934
1962
|
type: "tool-call",
|
|
1935
1963
|
toolCallId: toolCall.id || generateId(),
|
|
@@ -1947,11 +1975,16 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
1947
1975
|
const providerMetadata = { openai: {} };
|
|
1948
1976
|
if (completionTokenDetails?.accepted_prediction_tokens != null) providerMetadata.openai.acceptedPredictionTokens = completionTokenDetails?.accepted_prediction_tokens;
|
|
1949
1977
|
if (completionTokenDetails?.rejected_prediction_tokens != null) providerMetadata.openai.rejectedPredictionTokens = completionTokenDetails?.rejected_prediction_tokens;
|
|
1950
|
-
|
|
1978
|
+
const contentLogprobs = choice.logprobs?.content;
|
|
1979
|
+
const refusalLogprobs = choice.logprobs?.refusal;
|
|
1980
|
+
if (contentLogprobs != null || refusalLogprobs != null) providerMetadata.openai.logprobs = [...contentLogprobs ?? [], ...refusalLogprobs ?? []];
|
|
1951
1981
|
return {
|
|
1952
1982
|
content,
|
|
1953
1983
|
finishReason: {
|
|
1954
|
-
unified: mapOpenAIFinishReason$1(
|
|
1984
|
+
unified: mapOpenAIFinishReason$1({
|
|
1985
|
+
finishReason: choice.finish_reason,
|
|
1986
|
+
hasRefusal
|
|
1987
|
+
}),
|
|
1955
1988
|
raw: choice.finish_reason ?? void 0
|
|
1956
1989
|
},
|
|
1957
1990
|
usage: convertOpenAIChatUsage(response.usage),
|
|
@@ -2004,6 +2037,10 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
2004
2037
|
let usage = void 0;
|
|
2005
2038
|
let metadataExtracted = false;
|
|
2006
2039
|
let isActiveText = false;
|
|
2040
|
+
let hasRefusal = false;
|
|
2041
|
+
let rawFinishReason = void 0;
|
|
2042
|
+
let hasLogprobs = false;
|
|
2043
|
+
const streamedLogprobs = [];
|
|
2007
2044
|
const providerMetadata = { openai: {} };
|
|
2008
2045
|
return {
|
|
2009
2046
|
stream: checkedResponse.pipeThrough(new TransformStream({
|
|
@@ -2027,6 +2064,7 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
2027
2064
|
unified: "error",
|
|
2028
2065
|
raw: void 0
|
|
2029
2066
|
};
|
|
2067
|
+
rawFinishReason = void 0;
|
|
2030
2068
|
controller.enqueue({
|
|
2031
2069
|
type: "error",
|
|
2032
2070
|
error: chunk.error
|
|
@@ -2039,6 +2077,7 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
2039
2077
|
unified: "error",
|
|
2040
2078
|
raw: void 0
|
|
2041
2079
|
};
|
|
2080
|
+
rawFinishReason = void 0;
|
|
2042
2081
|
controller.enqueue({
|
|
2043
2082
|
type: "error",
|
|
2044
2083
|
error: createOpenAIProviderStreamError(value.error) ?? value.error
|
|
@@ -2061,14 +2100,25 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
2061
2100
|
if (value.usage.completion_tokens_details?.rejected_prediction_tokens != null) providerMetadata.openai.rejectedPredictionTokens = value.usage.completion_tokens_details?.rejected_prediction_tokens;
|
|
2062
2101
|
}
|
|
2063
2102
|
const choice = value.choices[0];
|
|
2064
|
-
if (choice?.finish_reason != null)
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2103
|
+
if (choice?.finish_reason != null) rawFinishReason = choice.finish_reason;
|
|
2104
|
+
if (choice?.logprobs != null) {
|
|
2105
|
+
const contentLogprobs = choice.logprobs.content;
|
|
2106
|
+
const refusalLogprobs = choice.logprobs.refusal;
|
|
2107
|
+
if (contentLogprobs != null || refusalLogprobs != null) {
|
|
2108
|
+
hasLogprobs = true;
|
|
2109
|
+
streamedLogprobs.push(...contentLogprobs ?? [], ...refusalLogprobs ?? []);
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2069
2112
|
if (choice?.delta == null) return;
|
|
2070
2113
|
const delta = choice.delta;
|
|
2071
|
-
|
|
2114
|
+
const textDeltas = [];
|
|
2115
|
+
if (delta.content != null && delta.content.length > 0) textDeltas.push(delta.content);
|
|
2116
|
+
if (delta.refusal != null && delta.refusal.length > 0) {
|
|
2117
|
+
hasRefusal = true;
|
|
2118
|
+
textDeltas.push(delta.refusal);
|
|
2119
|
+
}
|
|
2120
|
+
if (textDeltas.length === 0 && delta.content === "") textDeltas.push(delta.content);
|
|
2121
|
+
for (const textDelta of textDeltas) {
|
|
2072
2122
|
if (!isActiveText) {
|
|
2073
2123
|
controller.enqueue({
|
|
2074
2124
|
type: "text-start",
|
|
@@ -2079,7 +2129,7 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
2079
2129
|
controller.enqueue({
|
|
2080
2130
|
type: "text-delta",
|
|
2081
2131
|
id: "0",
|
|
2082
|
-
delta:
|
|
2132
|
+
delta: textDelta
|
|
2083
2133
|
});
|
|
2084
2134
|
}
|
|
2085
2135
|
if (delta.tool_calls != null) for (const toolCallDelta of delta.tool_calls) toolCallTracker.processDelta(toolCallDelta);
|
|
@@ -2097,6 +2147,14 @@ var OpenAIChatLanguageModel = class OpenAIChatLanguageModel {
|
|
|
2097
2147
|
id: "0"
|
|
2098
2148
|
});
|
|
2099
2149
|
toolCallTracker.flush();
|
|
2150
|
+
if (rawFinishReason != null) finishReason = {
|
|
2151
|
+
unified: mapOpenAIFinishReason$1({
|
|
2152
|
+
finishReason: rawFinishReason,
|
|
2153
|
+
hasRefusal
|
|
2154
|
+
}),
|
|
2155
|
+
raw: rawFinishReason
|
|
2156
|
+
};
|
|
2157
|
+
if (hasLogprobs) providerMetadata.openai.logprobs = streamedLogprobs;
|
|
2100
2158
|
controller.enqueue({
|
|
2101
2159
|
type: "finish",
|
|
2102
2160
|
finishReason,
|
|
@@ -2117,7 +2175,7 @@ function isOpenAIChatOutputChunk(chunk) {
|
|
|
2117
2175
|
if ("error" in chunk) return false;
|
|
2118
2176
|
return chunk.choices.some((choice) => {
|
|
2119
2177
|
const delta = choice.delta;
|
|
2120
|
-
return delta?.content != null && delta.content.length > 0 || delta?.tool_calls != null && delta.tool_calls.length > 0 || delta?.annotations != null && delta.annotations.length > 0;
|
|
2178
|
+
return delta?.content != null && delta.content.length > 0 || delta?.refusal != null && delta.refusal.length > 0 || delta?.tool_calls != null && delta.tool_calls.length > 0 || delta?.annotations != null && delta.annotations.length > 0;
|
|
2121
2179
|
});
|
|
2122
2180
|
}
|
|
2123
2181
|
//#endregion
|
|
@@ -3855,10 +3913,12 @@ function convertOpenAIResponsesUsage(usage) {
|
|
|
3855
3913
|
}
|
|
3856
3914
|
//#endregion
|
|
3857
3915
|
//#region src/responses/map-openai-responses-finish-reason.ts
|
|
3858
|
-
function mapOpenAIResponseFinishReason({ finishReason, hasFunctionCall }) {
|
|
3916
|
+
function mapOpenAIResponseFinishReason({ finishReason, hasFunctionCall, hasRefusal = false }) {
|
|
3859
3917
|
switch (finishReason) {
|
|
3860
3918
|
case void 0:
|
|
3861
|
-
case null:
|
|
3919
|
+
case null:
|
|
3920
|
+
if (hasFunctionCall) return "tool-calls";
|
|
3921
|
+
return hasRefusal ? "content-filter" : "stop";
|
|
3862
3922
|
case "max_output_tokens": return "length";
|
|
3863
3923
|
case "content_filter": return "content-filter";
|
|
3864
3924
|
default: return hasFunctionCall ? "tool-calls" : "other";
|
|
@@ -4038,6 +4098,8 @@ const openaiResponsesModeledChunkTypes = /* @__PURE__ */ new Set([
|
|
|
4038
4098
|
"response.output_item.done",
|
|
4039
4099
|
"response.output_text.annotation.added",
|
|
4040
4100
|
"response.output_text.delta",
|
|
4101
|
+
"response.refusal.delta",
|
|
4102
|
+
"response.refusal.done",
|
|
4041
4103
|
"response.reasoning_summary_part.added",
|
|
4042
4104
|
"response.reasoning_summary_part.done",
|
|
4043
4105
|
"response.reasoning_summary_text.delta"
|
|
@@ -4091,6 +4153,20 @@ const openaiResponsesChunkSchema = lazySchema(() => zodSchema(z.union([
|
|
|
4091
4153
|
}))
|
|
4092
4154
|
})).nullish()
|
|
4093
4155
|
}),
|
|
4156
|
+
z.object({
|
|
4157
|
+
type: z.literal("response.refusal.delta"),
|
|
4158
|
+
item_id: z.string(),
|
|
4159
|
+
output_index: z.number().nullish(),
|
|
4160
|
+
content_index: z.number().nullish(),
|
|
4161
|
+
delta: z.string()
|
|
4162
|
+
}),
|
|
4163
|
+
z.object({
|
|
4164
|
+
type: z.literal("response.refusal.done"),
|
|
4165
|
+
item_id: z.string(),
|
|
4166
|
+
output_index: z.number().nullish(),
|
|
4167
|
+
content_index: z.number().nullish(),
|
|
4168
|
+
refusal: z.string()
|
|
4169
|
+
}),
|
|
4094
4170
|
z.object({
|
|
4095
4171
|
type: z.enum(["response.completed", "response.incomplete"]),
|
|
4096
4172
|
response: z.object({
|
|
@@ -4648,7 +4724,7 @@ const openaiResponsesResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
|
4648
4724
|
role: z.literal("assistant"),
|
|
4649
4725
|
id: z.string(),
|
|
4650
4726
|
phase: z.enum(["commentary", "final_answer"]).nullish(),
|
|
4651
|
-
content: z.array(z.object({
|
|
4727
|
+
content: z.array(z.discriminatedUnion("type", [z.object({
|
|
4652
4728
|
type: z.literal("output_text"),
|
|
4653
4729
|
text: z.string(),
|
|
4654
4730
|
logprobs: z.array(z.object({
|
|
@@ -4687,7 +4763,10 @@ const openaiResponsesResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
|
4687
4763
|
index: z.number()
|
|
4688
4764
|
})
|
|
4689
4765
|
]))
|
|
4690
|
-
})
|
|
4766
|
+
}), z.object({
|
|
4767
|
+
type: z.literal("refusal"),
|
|
4768
|
+
refusal: z.string()
|
|
4769
|
+
})]))
|
|
4691
4770
|
}),
|
|
4692
4771
|
z.object({
|
|
4693
4772
|
type: z.literal("web_search_call"),
|
|
@@ -7220,6 +7299,7 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
7220
7299
|
const retrievedFileIds = /* @__PURE__ */ new Set();
|
|
7221
7300
|
let hasFunctionCall = false;
|
|
7222
7301
|
const hostedToolSearchCallIds = [];
|
|
7302
|
+
let hasRefusal = false;
|
|
7223
7303
|
let structuredOutputText;
|
|
7224
7304
|
for (const part of response.output) switch (part.type) {
|
|
7225
7305
|
case "reasoning":
|
|
@@ -7321,8 +7401,20 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
7321
7401
|
});
|
|
7322
7402
|
break;
|
|
7323
7403
|
case "message":
|
|
7324
|
-
if (options.responseFormat?.type === "json" && part.phase === "final_answer") structuredOutputText = part.content.map((contentPart) => contentPart.text).join("");
|
|
7404
|
+
if (options.responseFormat?.type === "json" && part.phase === "final_answer") structuredOutputText = part.content.map((contentPart) => contentPart.type === "output_text" ? contentPart.text : contentPart.refusal).join("");
|
|
7325
7405
|
for (const contentPart of part.content) {
|
|
7406
|
+
if (contentPart.type === "refusal") {
|
|
7407
|
+
hasRefusal = true;
|
|
7408
|
+
content.push({
|
|
7409
|
+
type: "text",
|
|
7410
|
+
text: contentPart.refusal,
|
|
7411
|
+
providerMetadata: { [providerOptionsName]: {
|
|
7412
|
+
itemId: part.id,
|
|
7413
|
+
...part.phase != null && { phase: part.phase }
|
|
7414
|
+
} }
|
|
7415
|
+
});
|
|
7416
|
+
continue;
|
|
7417
|
+
}
|
|
7326
7418
|
if (options.providerOptions?.[providerOptionsName]?.logprobs && contentPart.logprobs) logprobs.push(contentPart.logprobs);
|
|
7327
7419
|
const providerMetadata = {
|
|
7328
7420
|
itemId: part.id,
|
|
@@ -7609,7 +7701,8 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
7609
7701
|
finishReason: {
|
|
7610
7702
|
unified: mapOpenAIResponseFinishReason({
|
|
7611
7703
|
finishReason: response.incomplete_details?.reason,
|
|
7612
|
-
hasFunctionCall
|
|
7704
|
+
hasFunctionCall,
|
|
7705
|
+
hasRefusal
|
|
7613
7706
|
}),
|
|
7614
7707
|
raw: response.incomplete_details?.reason ?? void 0
|
|
7615
7708
|
},
|
|
@@ -7672,6 +7765,7 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
7672
7765
|
const fallbackAnnotations = [];
|
|
7673
7766
|
let activeMessagePhase;
|
|
7674
7767
|
let hasFunctionCall = false;
|
|
7768
|
+
let hasRefusal = false;
|
|
7675
7769
|
const activeReasoning = {};
|
|
7676
7770
|
const activeOutputItemIds = {};
|
|
7677
7771
|
const resolveOutputItemId = ({ itemId, outputIndex }) => outputIndex == null ? itemId : activeOutputItemIds[outputIndex] ?? itemId;
|
|
@@ -8438,7 +8532,19 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
8438
8532
|
delta: value.delta
|
|
8439
8533
|
});
|
|
8440
8534
|
if (options.providerOptions?.[providerOptionsName]?.logprobs && value.logprobs) logprobs.push(value.logprobs);
|
|
8441
|
-
} else if (value
|
|
8535
|
+
} else if (isRefusalDeltaChunk(value)) {
|
|
8536
|
+
hasRefusal = true;
|
|
8537
|
+
const itemId = resolveOutputItemId({
|
|
8538
|
+
itemId: value.item_id,
|
|
8539
|
+
outputIndex: value.output_index
|
|
8540
|
+
});
|
|
8541
|
+
controller.enqueue({
|
|
8542
|
+
type: "text-delta",
|
|
8543
|
+
id: itemId,
|
|
8544
|
+
delta: value.delta
|
|
8545
|
+
});
|
|
8546
|
+
} else if (isRefusalDoneChunk(value)) hasRefusal = true;
|
|
8547
|
+
else if (value.type === "response.reasoning_summary_part.added") {
|
|
8442
8548
|
const itemId = resolveOutputItemId({
|
|
8443
8549
|
itemId: value.item_id,
|
|
8444
8550
|
outputIndex: value.output_index
|
|
@@ -8496,7 +8602,8 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
8496
8602
|
if (!encounteredStreamError) finishReason = {
|
|
8497
8603
|
unified: mapOpenAIResponseFinishReason({
|
|
8498
8604
|
finishReason: value.response.incomplete_details?.reason,
|
|
8499
|
-
hasFunctionCall
|
|
8605
|
+
hasFunctionCall,
|
|
8606
|
+
hasRefusal
|
|
8500
8607
|
}),
|
|
8501
8608
|
raw: value.response.incomplete_details?.reason ?? void 0
|
|
8502
8609
|
};
|
|
@@ -8586,6 +8693,12 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
|
|
|
8586
8693
|
function isTextDeltaChunk(chunk) {
|
|
8587
8694
|
return chunk.type === "response.output_text.delta";
|
|
8588
8695
|
}
|
|
8696
|
+
function isRefusalDeltaChunk(chunk) {
|
|
8697
|
+
return chunk.type === "response.refusal.delta";
|
|
8698
|
+
}
|
|
8699
|
+
function isRefusalDoneChunk(chunk) {
|
|
8700
|
+
return chunk.type === "response.refusal.done";
|
|
8701
|
+
}
|
|
8589
8702
|
function isOpenAIChatCompletionChunk(value) {
|
|
8590
8703
|
const chunk = asRecord(value);
|
|
8591
8704
|
return chunk != null && Array.isArray(chunk.choices) && typeof chunk.type !== "string";
|
|
@@ -9106,6 +9219,7 @@ async function convertOpenAIBatchResult(body) {
|
|
|
9106
9219
|
const content = [];
|
|
9107
9220
|
const logprobs = [];
|
|
9108
9221
|
let hasFunctionCall = false;
|
|
9222
|
+
let hasRefusal = false;
|
|
9109
9223
|
for (const part of response.output) switch (part.type) {
|
|
9110
9224
|
case "reasoning": {
|
|
9111
9225
|
const summaries = part.summary.length > 0 ? part.summary : [{
|
|
@@ -9124,6 +9238,14 @@ async function convertOpenAIBatchResult(body) {
|
|
|
9124
9238
|
}
|
|
9125
9239
|
case "message":
|
|
9126
9240
|
for (const contentPart of part.content) {
|
|
9241
|
+
if (contentPart.type === "refusal") {
|
|
9242
|
+
hasRefusal = true;
|
|
9243
|
+
content.push({
|
|
9244
|
+
type: "text",
|
|
9245
|
+
text: contentPart.refusal
|
|
9246
|
+
});
|
|
9247
|
+
continue;
|
|
9248
|
+
}
|
|
9127
9249
|
content.push({
|
|
9128
9250
|
type: "text",
|
|
9129
9251
|
text: contentPart.text
|
|
@@ -9242,7 +9364,8 @@ async function convertOpenAIBatchResult(body) {
|
|
|
9242
9364
|
finishReason: {
|
|
9243
9365
|
unified: mapOpenAIResponseFinishReason({
|
|
9244
9366
|
finishReason: response.incomplete_details?.reason,
|
|
9245
|
-
hasFunctionCall
|
|
9367
|
+
hasFunctionCall,
|
|
9368
|
+
hasRefusal
|
|
9246
9369
|
}),
|
|
9247
9370
|
raw: response.incomplete_details?.reason ?? void 0
|
|
9248
9371
|
},
|
|
@@ -11009,7 +11132,7 @@ var OpenAISkills = class {
|
|
|
11009
11132
|
};
|
|
11010
11133
|
//#endregion
|
|
11011
11134
|
//#region src/version.ts
|
|
11012
|
-
const VERSION = "4.0.
|
|
11135
|
+
const VERSION = "4.0.110";
|
|
11013
11136
|
//#endregion
|
|
11014
11137
|
//#region src/openai-provider.ts
|
|
11015
11138
|
/**
|