@ai-sdk/openai 1.2.1 → 1.2.2
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.mts +31 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +805 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +812 -17
- package/dist/index.mjs.map +1 -1
- package/internal/dist/index.d.mts +16 -1
- package/internal/dist/index.d.ts +16 -1
- package/internal/dist/index.js +768 -12
- package/internal/dist/index.js.map +1 -1
- package/internal/dist/index.mjs +777 -12
- package/internal/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/internal/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ __export(internal_exports, {
|
|
|
24
24
|
OpenAICompletionLanguageModel: () => OpenAICompletionLanguageModel,
|
|
25
25
|
OpenAIEmbeddingModel: () => OpenAIEmbeddingModel,
|
|
26
26
|
OpenAIImageModel: () => OpenAIImageModel,
|
|
27
|
+
OpenAIResponsesLanguageModel: () => OpenAIResponsesLanguageModel,
|
|
27
28
|
modelMaxImagesPerCall: () => modelMaxImagesPerCall
|
|
28
29
|
});
|
|
29
30
|
module.exports = __toCommonJS(internal_exports);
|
|
@@ -42,6 +43,7 @@ function convertToOpenAIChatMessages({
|
|
|
42
43
|
systemMessageMode = "system"
|
|
43
44
|
}) {
|
|
44
45
|
const messages = [];
|
|
46
|
+
const warnings = [];
|
|
45
47
|
for (const { role, content } of prompt) {
|
|
46
48
|
switch (role) {
|
|
47
49
|
case "system": {
|
|
@@ -55,6 +57,10 @@ function convertToOpenAIChatMessages({
|
|
|
55
57
|
break;
|
|
56
58
|
}
|
|
57
59
|
case "remove": {
|
|
60
|
+
warnings.push({
|
|
61
|
+
type: "other",
|
|
62
|
+
message: "system messages are removed for this model"
|
|
63
|
+
});
|
|
58
64
|
break;
|
|
59
65
|
}
|
|
60
66
|
default: {
|
|
@@ -195,7 +201,7 @@ function convertToOpenAIChatMessages({
|
|
|
195
201
|
}
|
|
196
202
|
}
|
|
197
203
|
}
|
|
198
|
-
return messages;
|
|
204
|
+
return { messages, warnings };
|
|
199
205
|
}
|
|
200
206
|
|
|
201
207
|
// src/map-openai-chat-logprobs.ts
|
|
@@ -426,12 +432,14 @@ var OpenAIChatLanguageModel = class {
|
|
|
426
432
|
functionality: "structuredOutputs with useLegacyFunctionCalling"
|
|
427
433
|
});
|
|
428
434
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
+
const { messages, warnings: messageWarnings } = convertToOpenAIChatMessages(
|
|
436
|
+
{
|
|
437
|
+
prompt,
|
|
438
|
+
useLegacyFunctionCalling,
|
|
439
|
+
systemMessageMode: getSystemMessageMode(this.modelId)
|
|
440
|
+
}
|
|
441
|
+
);
|
|
442
|
+
warnings.push(...messageWarnings);
|
|
435
443
|
const baseArgs = {
|
|
436
444
|
// model id:
|
|
437
445
|
model: this.modelId,
|
|
@@ -466,11 +474,7 @@ var OpenAIChatLanguageModel = class {
|
|
|
466
474
|
prediction: (_e = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _e.prediction,
|
|
467
475
|
reasoning_effort: (_g = (_f = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _f.reasoningEffort) != null ? _g : this.settings.reasoningEffort,
|
|
468
476
|
// messages:
|
|
469
|
-
messages
|
|
470
|
-
prompt,
|
|
471
|
-
useLegacyFunctionCalling,
|
|
472
|
-
systemMessageMode: getSystemMessageMode(this.modelId)
|
|
473
|
-
})
|
|
477
|
+
messages
|
|
474
478
|
};
|
|
475
479
|
if (isReasoningModel(this.modelId)) {
|
|
476
480
|
if (baseArgs.temperature != null) {
|
|
@@ -1596,12 +1600,764 @@ var OpenAIImageModel = class {
|
|
|
1596
1600
|
var openaiImageResponseSchema = import_zod5.z.object({
|
|
1597
1601
|
data: import_zod5.z.array(import_zod5.z.object({ b64_json: import_zod5.z.string() }))
|
|
1598
1602
|
});
|
|
1603
|
+
|
|
1604
|
+
// src/responses/openai-responses-language-model.ts
|
|
1605
|
+
var import_provider_utils8 = require("@ai-sdk/provider-utils");
|
|
1606
|
+
var import_zod6 = require("zod");
|
|
1607
|
+
|
|
1608
|
+
// src/responses/convert-to-openai-responses-messages.ts
|
|
1609
|
+
var import_provider7 = require("@ai-sdk/provider");
|
|
1610
|
+
var import_provider_utils7 = require("@ai-sdk/provider-utils");
|
|
1611
|
+
function convertToOpenAIResponsesMessages({
|
|
1612
|
+
prompt,
|
|
1613
|
+
systemMessageMode
|
|
1614
|
+
}) {
|
|
1615
|
+
const messages = [];
|
|
1616
|
+
const warnings = [];
|
|
1617
|
+
for (const { role, content } of prompt) {
|
|
1618
|
+
switch (role) {
|
|
1619
|
+
case "system": {
|
|
1620
|
+
switch (systemMessageMode) {
|
|
1621
|
+
case "system": {
|
|
1622
|
+
messages.push({ role: "system", content });
|
|
1623
|
+
break;
|
|
1624
|
+
}
|
|
1625
|
+
case "developer": {
|
|
1626
|
+
messages.push({ role: "developer", content });
|
|
1627
|
+
break;
|
|
1628
|
+
}
|
|
1629
|
+
case "remove": {
|
|
1630
|
+
warnings.push({
|
|
1631
|
+
type: "other",
|
|
1632
|
+
message: "system messages are removed for this model"
|
|
1633
|
+
});
|
|
1634
|
+
break;
|
|
1635
|
+
}
|
|
1636
|
+
default: {
|
|
1637
|
+
const _exhaustiveCheck = systemMessageMode;
|
|
1638
|
+
throw new Error(
|
|
1639
|
+
`Unsupported system message mode: ${_exhaustiveCheck}`
|
|
1640
|
+
);
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
break;
|
|
1644
|
+
}
|
|
1645
|
+
case "user": {
|
|
1646
|
+
messages.push({
|
|
1647
|
+
role: "user",
|
|
1648
|
+
content: content.map((part) => {
|
|
1649
|
+
var _a, _b, _c;
|
|
1650
|
+
switch (part.type) {
|
|
1651
|
+
case "text": {
|
|
1652
|
+
return { type: "input_text", text: part.text };
|
|
1653
|
+
}
|
|
1654
|
+
case "image": {
|
|
1655
|
+
return {
|
|
1656
|
+
type: "input_image",
|
|
1657
|
+
image_url: part.image instanceof URL ? part.image.toString() : `data:${(_a = part.mimeType) != null ? _a : "image/jpeg"};base64,${(0, import_provider_utils7.convertUint8ArrayToBase64)(part.image)}`,
|
|
1658
|
+
// OpenAI specific extension: image detail
|
|
1659
|
+
detail: (_c = (_b = part.providerMetadata) == null ? void 0 : _b.openai) == null ? void 0 : _c.imageDetail
|
|
1660
|
+
};
|
|
1661
|
+
}
|
|
1662
|
+
case "file": {
|
|
1663
|
+
throw new import_provider7.UnsupportedFunctionalityError({
|
|
1664
|
+
functionality: "Image content parts in user messages"
|
|
1665
|
+
});
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
})
|
|
1669
|
+
});
|
|
1670
|
+
break;
|
|
1671
|
+
}
|
|
1672
|
+
case "assistant": {
|
|
1673
|
+
for (const part of content) {
|
|
1674
|
+
switch (part.type) {
|
|
1675
|
+
case "text": {
|
|
1676
|
+
messages.push({
|
|
1677
|
+
role: "assistant",
|
|
1678
|
+
content: [{ type: "output_text", text: part.text }]
|
|
1679
|
+
});
|
|
1680
|
+
break;
|
|
1681
|
+
}
|
|
1682
|
+
case "tool-call": {
|
|
1683
|
+
messages.push({
|
|
1684
|
+
type: "function_call",
|
|
1685
|
+
call_id: part.toolCallId,
|
|
1686
|
+
name: part.toolName,
|
|
1687
|
+
arguments: JSON.stringify(part.args)
|
|
1688
|
+
});
|
|
1689
|
+
break;
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
}
|
|
1693
|
+
break;
|
|
1694
|
+
}
|
|
1695
|
+
case "tool": {
|
|
1696
|
+
for (const part of content) {
|
|
1697
|
+
messages.push({
|
|
1698
|
+
type: "function_call_output",
|
|
1699
|
+
call_id: part.toolCallId,
|
|
1700
|
+
output: JSON.stringify(part.result)
|
|
1701
|
+
});
|
|
1702
|
+
}
|
|
1703
|
+
break;
|
|
1704
|
+
}
|
|
1705
|
+
default: {
|
|
1706
|
+
const _exhaustiveCheck = role;
|
|
1707
|
+
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
|
1708
|
+
}
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
return { messages, warnings };
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
// src/responses/map-openai-responses-finish-reason.ts
|
|
1715
|
+
function mapOpenAIResponseFinishReason({
|
|
1716
|
+
finishReason,
|
|
1717
|
+
hasToolCalls
|
|
1718
|
+
}) {
|
|
1719
|
+
switch (finishReason) {
|
|
1720
|
+
case void 0:
|
|
1721
|
+
case null:
|
|
1722
|
+
return hasToolCalls ? "tool-calls" : "stop";
|
|
1723
|
+
case "max_output_tokens":
|
|
1724
|
+
return "length";
|
|
1725
|
+
case "content_filter":
|
|
1726
|
+
return "content-filter";
|
|
1727
|
+
default:
|
|
1728
|
+
return hasToolCalls ? "tool-calls" : "unknown";
|
|
1729
|
+
}
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
// src/responses/openai-responses-prepare-tools.ts
|
|
1733
|
+
var import_provider8 = require("@ai-sdk/provider");
|
|
1734
|
+
function prepareResponsesTools({
|
|
1735
|
+
mode,
|
|
1736
|
+
strict
|
|
1737
|
+
}) {
|
|
1738
|
+
var _a;
|
|
1739
|
+
const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
|
|
1740
|
+
const toolWarnings = [];
|
|
1741
|
+
if (tools == null) {
|
|
1742
|
+
return { tools: void 0, tool_choice: void 0, toolWarnings };
|
|
1743
|
+
}
|
|
1744
|
+
const toolChoice = mode.toolChoice;
|
|
1745
|
+
const openaiTools = [];
|
|
1746
|
+
for (const tool of tools) {
|
|
1747
|
+
switch (tool.type) {
|
|
1748
|
+
case "function":
|
|
1749
|
+
openaiTools.push({
|
|
1750
|
+
type: "function",
|
|
1751
|
+
name: tool.name,
|
|
1752
|
+
description: tool.description,
|
|
1753
|
+
parameters: tool.parameters,
|
|
1754
|
+
strict: strict ? true : void 0
|
|
1755
|
+
});
|
|
1756
|
+
break;
|
|
1757
|
+
case "provider-defined":
|
|
1758
|
+
switch (tool.id) {
|
|
1759
|
+
case "openai.web_search_preview":
|
|
1760
|
+
openaiTools.push({
|
|
1761
|
+
type: "web_search_preview",
|
|
1762
|
+
search_context_size: tool.args.searchContextSize,
|
|
1763
|
+
user_location: tool.args.userLocation
|
|
1764
|
+
});
|
|
1765
|
+
break;
|
|
1766
|
+
default:
|
|
1767
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
1768
|
+
break;
|
|
1769
|
+
}
|
|
1770
|
+
break;
|
|
1771
|
+
default:
|
|
1772
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
1773
|
+
break;
|
|
1774
|
+
}
|
|
1775
|
+
}
|
|
1776
|
+
if (toolChoice == null) {
|
|
1777
|
+
return { tools: openaiTools, tool_choice: void 0, toolWarnings };
|
|
1778
|
+
}
|
|
1779
|
+
const type = toolChoice.type;
|
|
1780
|
+
switch (type) {
|
|
1781
|
+
case "auto":
|
|
1782
|
+
case "none":
|
|
1783
|
+
case "required":
|
|
1784
|
+
return { tools: openaiTools, tool_choice: type, toolWarnings };
|
|
1785
|
+
case "tool":
|
|
1786
|
+
return {
|
|
1787
|
+
tools: openaiTools,
|
|
1788
|
+
tool_choice: {
|
|
1789
|
+
type: "function",
|
|
1790
|
+
name: toolChoice.toolName
|
|
1791
|
+
},
|
|
1792
|
+
toolWarnings
|
|
1793
|
+
};
|
|
1794
|
+
default: {
|
|
1795
|
+
const _exhaustiveCheck = type;
|
|
1796
|
+
throw new import_provider8.UnsupportedFunctionalityError({
|
|
1797
|
+
functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`
|
|
1798
|
+
});
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
}
|
|
1802
|
+
|
|
1803
|
+
// src/responses/openai-responses-language-model.ts
|
|
1804
|
+
var OpenAIResponsesLanguageModel = class {
|
|
1805
|
+
constructor(modelId, config) {
|
|
1806
|
+
this.specificationVersion = "v1";
|
|
1807
|
+
this.defaultObjectGenerationMode = "json";
|
|
1808
|
+
this.modelId = modelId;
|
|
1809
|
+
this.config = config;
|
|
1810
|
+
}
|
|
1811
|
+
get provider() {
|
|
1812
|
+
return this.config.provider;
|
|
1813
|
+
}
|
|
1814
|
+
getArgs({
|
|
1815
|
+
mode,
|
|
1816
|
+
maxTokens,
|
|
1817
|
+
temperature,
|
|
1818
|
+
stopSequences,
|
|
1819
|
+
topP,
|
|
1820
|
+
topK,
|
|
1821
|
+
presencePenalty,
|
|
1822
|
+
frequencyPenalty,
|
|
1823
|
+
seed,
|
|
1824
|
+
prompt,
|
|
1825
|
+
providerMetadata,
|
|
1826
|
+
responseFormat
|
|
1827
|
+
}) {
|
|
1828
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
1829
|
+
const warnings = [];
|
|
1830
|
+
const modelConfig = getResponsesModelConfig(this.modelId);
|
|
1831
|
+
const type = mode.type;
|
|
1832
|
+
if (topK != null) {
|
|
1833
|
+
warnings.push({
|
|
1834
|
+
type: "unsupported-setting",
|
|
1835
|
+
setting: "topK"
|
|
1836
|
+
});
|
|
1837
|
+
}
|
|
1838
|
+
if (seed != null) {
|
|
1839
|
+
warnings.push({
|
|
1840
|
+
type: "unsupported-setting",
|
|
1841
|
+
setting: "seed"
|
|
1842
|
+
});
|
|
1843
|
+
}
|
|
1844
|
+
if (presencePenalty != null) {
|
|
1845
|
+
warnings.push({
|
|
1846
|
+
type: "unsupported-setting",
|
|
1847
|
+
setting: "presencePenalty"
|
|
1848
|
+
});
|
|
1849
|
+
}
|
|
1850
|
+
if (frequencyPenalty != null) {
|
|
1851
|
+
warnings.push({
|
|
1852
|
+
type: "unsupported-setting",
|
|
1853
|
+
setting: "frequencyPenalty"
|
|
1854
|
+
});
|
|
1855
|
+
}
|
|
1856
|
+
if (stopSequences != null) {
|
|
1857
|
+
warnings.push({
|
|
1858
|
+
type: "unsupported-setting",
|
|
1859
|
+
setting: "stopSequences"
|
|
1860
|
+
});
|
|
1861
|
+
}
|
|
1862
|
+
const { messages, warnings: messageWarnings } = convertToOpenAIResponsesMessages({
|
|
1863
|
+
prompt,
|
|
1864
|
+
systemMessageMode: modelConfig.systemMessageMode
|
|
1865
|
+
});
|
|
1866
|
+
warnings.push(...messageWarnings);
|
|
1867
|
+
const isStrictJsonSchema = (_b = (_a = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _a.strictJsonSchema) != null ? _b : true;
|
|
1868
|
+
const baseArgs = {
|
|
1869
|
+
model: this.modelId,
|
|
1870
|
+
input: messages,
|
|
1871
|
+
temperature,
|
|
1872
|
+
top_p: topP,
|
|
1873
|
+
max_output_tokens: maxTokens,
|
|
1874
|
+
...(responseFormat == null ? void 0 : responseFormat.type) === "json" && {
|
|
1875
|
+
text: {
|
|
1876
|
+
format: responseFormat.schema != null ? {
|
|
1877
|
+
type: "json_schema",
|
|
1878
|
+
strict: isStrictJsonSchema,
|
|
1879
|
+
name: (_c = responseFormat.name) != null ? _c : "response",
|
|
1880
|
+
description: responseFormat.description,
|
|
1881
|
+
schema: responseFormat.schema
|
|
1882
|
+
} : { type: "json_object" }
|
|
1883
|
+
}
|
|
1884
|
+
},
|
|
1885
|
+
// provider options:
|
|
1886
|
+
metadata: (_d = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _d.metadata,
|
|
1887
|
+
parallel_tool_calls: (_e = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _e.parallelToolCalls,
|
|
1888
|
+
previous_response_id: (_f = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _f.previousResponseId,
|
|
1889
|
+
store: (_g = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _g.store,
|
|
1890
|
+
user: (_h = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _h.user,
|
|
1891
|
+
// model-specific settings:
|
|
1892
|
+
...modelConfig.isReasoningModel && ((_i = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _i.reasoningEffort) != null && {
|
|
1893
|
+
reasoning: { effort: (_j = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _j.reasoningEffort }
|
|
1894
|
+
},
|
|
1895
|
+
...modelConfig.requiredAutoTruncation && {
|
|
1896
|
+
truncation: "auto"
|
|
1897
|
+
}
|
|
1898
|
+
};
|
|
1899
|
+
if (modelConfig.isReasoningModel) {
|
|
1900
|
+
if (baseArgs.temperature != null) {
|
|
1901
|
+
baseArgs.temperature = void 0;
|
|
1902
|
+
warnings.push({
|
|
1903
|
+
type: "unsupported-setting",
|
|
1904
|
+
setting: "temperature",
|
|
1905
|
+
details: "temperature is not supported for reasoning models"
|
|
1906
|
+
});
|
|
1907
|
+
}
|
|
1908
|
+
if (baseArgs.top_p != null) {
|
|
1909
|
+
baseArgs.top_p = void 0;
|
|
1910
|
+
warnings.push({
|
|
1911
|
+
type: "unsupported-setting",
|
|
1912
|
+
setting: "topP",
|
|
1913
|
+
details: "topP is not supported for reasoning models"
|
|
1914
|
+
});
|
|
1915
|
+
}
|
|
1916
|
+
}
|
|
1917
|
+
switch (type) {
|
|
1918
|
+
case "regular": {
|
|
1919
|
+
const { tools, tool_choice, toolWarnings } = prepareResponsesTools({
|
|
1920
|
+
mode,
|
|
1921
|
+
strict: true
|
|
1922
|
+
});
|
|
1923
|
+
return {
|
|
1924
|
+
args: {
|
|
1925
|
+
...baseArgs,
|
|
1926
|
+
tools,
|
|
1927
|
+
tool_choice
|
|
1928
|
+
},
|
|
1929
|
+
warnings: [...warnings, ...toolWarnings]
|
|
1930
|
+
};
|
|
1931
|
+
}
|
|
1932
|
+
case "object-json": {
|
|
1933
|
+
return {
|
|
1934
|
+
args: {
|
|
1935
|
+
...baseArgs,
|
|
1936
|
+
text: {
|
|
1937
|
+
format: mode.schema != null ? {
|
|
1938
|
+
type: "json_schema",
|
|
1939
|
+
strict: isStrictJsonSchema,
|
|
1940
|
+
name: (_k = mode.name) != null ? _k : "response",
|
|
1941
|
+
description: mode.description,
|
|
1942
|
+
schema: mode.schema
|
|
1943
|
+
} : { type: "json_object" }
|
|
1944
|
+
}
|
|
1945
|
+
},
|
|
1946
|
+
warnings
|
|
1947
|
+
};
|
|
1948
|
+
}
|
|
1949
|
+
case "object-tool": {
|
|
1950
|
+
return {
|
|
1951
|
+
args: {
|
|
1952
|
+
...baseArgs,
|
|
1953
|
+
tool_choice: { type: "function", name: mode.tool.name },
|
|
1954
|
+
tools: [
|
|
1955
|
+
{
|
|
1956
|
+
type: "function",
|
|
1957
|
+
name: mode.tool.name,
|
|
1958
|
+
description: mode.tool.description,
|
|
1959
|
+
parameters: mode.tool.parameters,
|
|
1960
|
+
strict: isStrictJsonSchema
|
|
1961
|
+
}
|
|
1962
|
+
]
|
|
1963
|
+
},
|
|
1964
|
+
warnings
|
|
1965
|
+
};
|
|
1966
|
+
}
|
|
1967
|
+
default: {
|
|
1968
|
+
const _exhaustiveCheck = type;
|
|
1969
|
+
throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
|
|
1970
|
+
}
|
|
1971
|
+
}
|
|
1972
|
+
}
|
|
1973
|
+
async doGenerate(options) {
|
|
1974
|
+
var _a, _b, _c, _d, _e;
|
|
1975
|
+
const { args: body, warnings } = this.getArgs(options);
|
|
1976
|
+
const {
|
|
1977
|
+
responseHeaders,
|
|
1978
|
+
value: response,
|
|
1979
|
+
rawValue: rawResponse
|
|
1980
|
+
} = await (0, import_provider_utils8.postJsonToApi)({
|
|
1981
|
+
url: this.config.url({
|
|
1982
|
+
path: "/responses",
|
|
1983
|
+
modelId: this.modelId
|
|
1984
|
+
}),
|
|
1985
|
+
headers: (0, import_provider_utils8.combineHeaders)(this.config.headers(), options.headers),
|
|
1986
|
+
body,
|
|
1987
|
+
failedResponseHandler: openaiFailedResponseHandler,
|
|
1988
|
+
successfulResponseHandler: (0, import_provider_utils8.createJsonResponseHandler)(
|
|
1989
|
+
import_zod6.z.object({
|
|
1990
|
+
id: import_zod6.z.string(),
|
|
1991
|
+
created_at: import_zod6.z.number(),
|
|
1992
|
+
model: import_zod6.z.string(),
|
|
1993
|
+
output: import_zod6.z.array(
|
|
1994
|
+
import_zod6.z.discriminatedUnion("type", [
|
|
1995
|
+
import_zod6.z.object({
|
|
1996
|
+
type: import_zod6.z.literal("message"),
|
|
1997
|
+
role: import_zod6.z.literal("assistant"),
|
|
1998
|
+
content: import_zod6.z.array(
|
|
1999
|
+
import_zod6.z.object({
|
|
2000
|
+
type: import_zod6.z.literal("output_text"),
|
|
2001
|
+
text: import_zod6.z.string(),
|
|
2002
|
+
annotations: import_zod6.z.array(
|
|
2003
|
+
import_zod6.z.object({
|
|
2004
|
+
type: import_zod6.z.literal("url_citation"),
|
|
2005
|
+
start_index: import_zod6.z.number(),
|
|
2006
|
+
end_index: import_zod6.z.number(),
|
|
2007
|
+
url: import_zod6.z.string(),
|
|
2008
|
+
title: import_zod6.z.string()
|
|
2009
|
+
})
|
|
2010
|
+
)
|
|
2011
|
+
})
|
|
2012
|
+
)
|
|
2013
|
+
}),
|
|
2014
|
+
import_zod6.z.object({
|
|
2015
|
+
type: import_zod6.z.literal("function_call"),
|
|
2016
|
+
call_id: import_zod6.z.string(),
|
|
2017
|
+
name: import_zod6.z.string(),
|
|
2018
|
+
arguments: import_zod6.z.string()
|
|
2019
|
+
}),
|
|
2020
|
+
import_zod6.z.object({
|
|
2021
|
+
type: import_zod6.z.literal("web_search_call")
|
|
2022
|
+
}),
|
|
2023
|
+
import_zod6.z.object({
|
|
2024
|
+
type: import_zod6.z.literal("computer_call")
|
|
2025
|
+
}),
|
|
2026
|
+
import_zod6.z.object({
|
|
2027
|
+
type: import_zod6.z.literal("reasoning")
|
|
2028
|
+
})
|
|
2029
|
+
])
|
|
2030
|
+
),
|
|
2031
|
+
incomplete_details: import_zod6.z.object({ reason: import_zod6.z.string() }).nullable(),
|
|
2032
|
+
usage: usageSchema
|
|
2033
|
+
})
|
|
2034
|
+
),
|
|
2035
|
+
abortSignal: options.abortSignal,
|
|
2036
|
+
fetch: this.config.fetch
|
|
2037
|
+
});
|
|
2038
|
+
const outputTextElements = response.output.filter((output) => output.type === "message").flatMap((output) => output.content).filter((content) => content.type === "output_text");
|
|
2039
|
+
const toolCalls = response.output.filter((output) => output.type === "function_call").map((output) => ({
|
|
2040
|
+
toolCallType: "function",
|
|
2041
|
+
toolCallId: output.call_id,
|
|
2042
|
+
toolName: output.name,
|
|
2043
|
+
args: output.arguments
|
|
2044
|
+
}));
|
|
2045
|
+
return {
|
|
2046
|
+
text: outputTextElements.map((content) => content.text).join("\n"),
|
|
2047
|
+
sources: outputTextElements.flatMap(
|
|
2048
|
+
(content) => content.annotations.map((annotation) => {
|
|
2049
|
+
var _a2, _b2, _c2;
|
|
2050
|
+
return {
|
|
2051
|
+
sourceType: "url",
|
|
2052
|
+
id: (_c2 = (_b2 = (_a2 = this.config).generateId) == null ? void 0 : _b2.call(_a2)) != null ? _c2 : (0, import_provider_utils8.generateId)(),
|
|
2053
|
+
url: annotation.url,
|
|
2054
|
+
title: annotation.title
|
|
2055
|
+
};
|
|
2056
|
+
})
|
|
2057
|
+
),
|
|
2058
|
+
finishReason: mapOpenAIResponseFinishReason({
|
|
2059
|
+
finishReason: (_a = response.incomplete_details) == null ? void 0 : _a.reason,
|
|
2060
|
+
hasToolCalls: toolCalls.length > 0
|
|
2061
|
+
}),
|
|
2062
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : void 0,
|
|
2063
|
+
usage: {
|
|
2064
|
+
promptTokens: response.usage.input_tokens,
|
|
2065
|
+
completionTokens: response.usage.output_tokens
|
|
2066
|
+
},
|
|
2067
|
+
rawCall: {
|
|
2068
|
+
rawPrompt: void 0,
|
|
2069
|
+
rawSettings: {}
|
|
2070
|
+
},
|
|
2071
|
+
rawResponse: {
|
|
2072
|
+
headers: responseHeaders,
|
|
2073
|
+
body: rawResponse
|
|
2074
|
+
},
|
|
2075
|
+
request: {
|
|
2076
|
+
body: JSON.stringify(body)
|
|
2077
|
+
},
|
|
2078
|
+
response: {
|
|
2079
|
+
id: response.id,
|
|
2080
|
+
timestamp: new Date(response.created_at * 1e3),
|
|
2081
|
+
modelId: response.model
|
|
2082
|
+
},
|
|
2083
|
+
providerMetadata: {
|
|
2084
|
+
openai: {
|
|
2085
|
+
responseId: response.id,
|
|
2086
|
+
cachedPromptTokens: (_c = (_b = response.usage.input_tokens_details) == null ? void 0 : _b.cached_tokens) != null ? _c : null,
|
|
2087
|
+
reasoningTokens: (_e = (_d = response.usage.output_tokens_details) == null ? void 0 : _d.reasoning_tokens) != null ? _e : null
|
|
2088
|
+
}
|
|
2089
|
+
},
|
|
2090
|
+
warnings
|
|
2091
|
+
};
|
|
2092
|
+
}
|
|
2093
|
+
async doStream(options) {
|
|
2094
|
+
const { args: body, warnings } = this.getArgs(options);
|
|
2095
|
+
const { responseHeaders, value: response } = await (0, import_provider_utils8.postJsonToApi)({
|
|
2096
|
+
url: this.config.url({
|
|
2097
|
+
path: "/responses",
|
|
2098
|
+
modelId: this.modelId
|
|
2099
|
+
}),
|
|
2100
|
+
headers: (0, import_provider_utils8.combineHeaders)(this.config.headers(), options.headers),
|
|
2101
|
+
body: {
|
|
2102
|
+
...body,
|
|
2103
|
+
stream: true
|
|
2104
|
+
},
|
|
2105
|
+
failedResponseHandler: openaiFailedResponseHandler,
|
|
2106
|
+
successfulResponseHandler: (0, import_provider_utils8.createEventSourceResponseHandler)(
|
|
2107
|
+
openaiResponsesChunkSchema
|
|
2108
|
+
),
|
|
2109
|
+
abortSignal: options.abortSignal,
|
|
2110
|
+
fetch: this.config.fetch
|
|
2111
|
+
});
|
|
2112
|
+
const self = this;
|
|
2113
|
+
let finishReason = "unknown";
|
|
2114
|
+
let promptTokens = NaN;
|
|
2115
|
+
let completionTokens = NaN;
|
|
2116
|
+
let cachedPromptTokens = null;
|
|
2117
|
+
let reasoningTokens = null;
|
|
2118
|
+
let responseId = null;
|
|
2119
|
+
const ongoingToolCalls = {};
|
|
2120
|
+
let hasToolCalls = false;
|
|
2121
|
+
return {
|
|
2122
|
+
stream: response.pipeThrough(
|
|
2123
|
+
new TransformStream({
|
|
2124
|
+
transform(chunk, controller) {
|
|
2125
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2126
|
+
if (!chunk.success) {
|
|
2127
|
+
finishReason = "error";
|
|
2128
|
+
controller.enqueue({ type: "error", error: chunk.error });
|
|
2129
|
+
return;
|
|
2130
|
+
}
|
|
2131
|
+
const value = chunk.value;
|
|
2132
|
+
if (isResponseOutputItemAddedChunk(value)) {
|
|
2133
|
+
if (value.item.type === "function_call") {
|
|
2134
|
+
ongoingToolCalls[value.output_index] = {
|
|
2135
|
+
toolName: value.item.name,
|
|
2136
|
+
toolCallId: value.item.call_id
|
|
2137
|
+
};
|
|
2138
|
+
controller.enqueue({
|
|
2139
|
+
type: "tool-call-delta",
|
|
2140
|
+
toolCallType: "function",
|
|
2141
|
+
toolCallId: value.item.call_id,
|
|
2142
|
+
toolName: value.item.name,
|
|
2143
|
+
argsTextDelta: value.item.arguments
|
|
2144
|
+
});
|
|
2145
|
+
}
|
|
2146
|
+
} else if (isResponseFunctionCallArgumentsDeltaChunk(value)) {
|
|
2147
|
+
const toolCall = ongoingToolCalls[value.output_index];
|
|
2148
|
+
if (toolCall != null) {
|
|
2149
|
+
controller.enqueue({
|
|
2150
|
+
type: "tool-call-delta",
|
|
2151
|
+
toolCallType: "function",
|
|
2152
|
+
toolCallId: toolCall.toolCallId,
|
|
2153
|
+
toolName: toolCall.toolName,
|
|
2154
|
+
argsTextDelta: value.delta
|
|
2155
|
+
});
|
|
2156
|
+
}
|
|
2157
|
+
} else if (isResponseCreatedChunk(value)) {
|
|
2158
|
+
responseId = value.response.id;
|
|
2159
|
+
controller.enqueue({
|
|
2160
|
+
type: "response-metadata",
|
|
2161
|
+
id: value.response.id,
|
|
2162
|
+
timestamp: new Date(value.response.created_at * 1e3),
|
|
2163
|
+
modelId: value.response.model
|
|
2164
|
+
});
|
|
2165
|
+
} else if (isTextDeltaChunk(value)) {
|
|
2166
|
+
controller.enqueue({
|
|
2167
|
+
type: "text-delta",
|
|
2168
|
+
textDelta: value.delta
|
|
2169
|
+
});
|
|
2170
|
+
} else if (isResponseOutputItemDoneChunk(value) && value.item.type === "function_call") {
|
|
2171
|
+
ongoingToolCalls[value.output_index] = void 0;
|
|
2172
|
+
hasToolCalls = true;
|
|
2173
|
+
controller.enqueue({
|
|
2174
|
+
type: "tool-call",
|
|
2175
|
+
toolCallType: "function",
|
|
2176
|
+
toolCallId: value.item.call_id,
|
|
2177
|
+
toolName: value.item.name,
|
|
2178
|
+
args: value.item.arguments
|
|
2179
|
+
});
|
|
2180
|
+
} else if (isResponseFinishedChunk(value)) {
|
|
2181
|
+
finishReason = mapOpenAIResponseFinishReason({
|
|
2182
|
+
finishReason: (_a = value.response.incomplete_details) == null ? void 0 : _a.reason,
|
|
2183
|
+
hasToolCalls
|
|
2184
|
+
});
|
|
2185
|
+
promptTokens = value.response.usage.input_tokens;
|
|
2186
|
+
completionTokens = value.response.usage.output_tokens;
|
|
2187
|
+
cachedPromptTokens = (_c = (_b = value.response.usage.input_tokens_details) == null ? void 0 : _b.cached_tokens) != null ? _c : cachedPromptTokens;
|
|
2188
|
+
reasoningTokens = (_e = (_d = value.response.usage.output_tokens_details) == null ? void 0 : _d.reasoning_tokens) != null ? _e : reasoningTokens;
|
|
2189
|
+
} else if (isResponseAnnotationAddedChunk(value)) {
|
|
2190
|
+
controller.enqueue({
|
|
2191
|
+
type: "source",
|
|
2192
|
+
source: {
|
|
2193
|
+
sourceType: "url",
|
|
2194
|
+
id: (_h = (_g = (_f = self.config).generateId) == null ? void 0 : _g.call(_f)) != null ? _h : (0, import_provider_utils8.generateId)(),
|
|
2195
|
+
url: value.annotation.url,
|
|
2196
|
+
title: value.annotation.title
|
|
2197
|
+
}
|
|
2198
|
+
});
|
|
2199
|
+
}
|
|
2200
|
+
},
|
|
2201
|
+
flush(controller) {
|
|
2202
|
+
controller.enqueue({
|
|
2203
|
+
type: "finish",
|
|
2204
|
+
finishReason,
|
|
2205
|
+
usage: { promptTokens, completionTokens },
|
|
2206
|
+
...(cachedPromptTokens != null || reasoningTokens != null) && {
|
|
2207
|
+
providerMetadata: {
|
|
2208
|
+
openai: {
|
|
2209
|
+
responseId,
|
|
2210
|
+
cachedPromptTokens,
|
|
2211
|
+
reasoningTokens
|
|
2212
|
+
}
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
});
|
|
2216
|
+
}
|
|
2217
|
+
})
|
|
2218
|
+
),
|
|
2219
|
+
rawCall: {
|
|
2220
|
+
rawPrompt: void 0,
|
|
2221
|
+
rawSettings: {}
|
|
2222
|
+
},
|
|
2223
|
+
rawResponse: { headers: responseHeaders },
|
|
2224
|
+
request: { body: JSON.stringify(body) },
|
|
2225
|
+
warnings
|
|
2226
|
+
};
|
|
2227
|
+
}
|
|
2228
|
+
};
|
|
2229
|
+
var usageSchema = import_zod6.z.object({
|
|
2230
|
+
input_tokens: import_zod6.z.number(),
|
|
2231
|
+
input_tokens_details: import_zod6.z.object({ cached_tokens: import_zod6.z.number().nullish() }).nullish(),
|
|
2232
|
+
output_tokens: import_zod6.z.number(),
|
|
2233
|
+
output_tokens_details: import_zod6.z.object({ reasoning_tokens: import_zod6.z.number().nullish() }).nullish()
|
|
2234
|
+
});
|
|
2235
|
+
var textDeltaChunkSchema = import_zod6.z.object({
|
|
2236
|
+
type: import_zod6.z.literal("response.output_text.delta"),
|
|
2237
|
+
delta: import_zod6.z.string()
|
|
2238
|
+
});
|
|
2239
|
+
var responseFinishedChunkSchema = import_zod6.z.object({
|
|
2240
|
+
type: import_zod6.z.enum(["response.completed", "response.incomplete"]),
|
|
2241
|
+
response: import_zod6.z.object({
|
|
2242
|
+
incomplete_details: import_zod6.z.object({ reason: import_zod6.z.string() }).nullish(),
|
|
2243
|
+
usage: usageSchema
|
|
2244
|
+
})
|
|
2245
|
+
});
|
|
2246
|
+
var responseCreatedChunkSchema = import_zod6.z.object({
|
|
2247
|
+
type: import_zod6.z.literal("response.created"),
|
|
2248
|
+
response: import_zod6.z.object({
|
|
2249
|
+
id: import_zod6.z.string(),
|
|
2250
|
+
created_at: import_zod6.z.number(),
|
|
2251
|
+
model: import_zod6.z.string()
|
|
2252
|
+
})
|
|
2253
|
+
});
|
|
2254
|
+
var responseOutputItemDoneSchema = import_zod6.z.object({
|
|
2255
|
+
type: import_zod6.z.literal("response.output_item.done"),
|
|
2256
|
+
output_index: import_zod6.z.number(),
|
|
2257
|
+
item: import_zod6.z.discriminatedUnion("type", [
|
|
2258
|
+
import_zod6.z.object({
|
|
2259
|
+
type: import_zod6.z.literal("message")
|
|
2260
|
+
}),
|
|
2261
|
+
import_zod6.z.object({
|
|
2262
|
+
type: import_zod6.z.literal("function_call"),
|
|
2263
|
+
id: import_zod6.z.string(),
|
|
2264
|
+
call_id: import_zod6.z.string(),
|
|
2265
|
+
name: import_zod6.z.string(),
|
|
2266
|
+
arguments: import_zod6.z.string(),
|
|
2267
|
+
status: import_zod6.z.literal("completed")
|
|
2268
|
+
})
|
|
2269
|
+
])
|
|
2270
|
+
});
|
|
2271
|
+
var responseFunctionCallArgumentsDeltaSchema = import_zod6.z.object({
|
|
2272
|
+
type: import_zod6.z.literal("response.function_call_arguments.delta"),
|
|
2273
|
+
item_id: import_zod6.z.string(),
|
|
2274
|
+
output_index: import_zod6.z.number(),
|
|
2275
|
+
delta: import_zod6.z.string()
|
|
2276
|
+
});
|
|
2277
|
+
var responseOutputItemAddedSchema = import_zod6.z.object({
|
|
2278
|
+
type: import_zod6.z.literal("response.output_item.added"),
|
|
2279
|
+
output_index: import_zod6.z.number(),
|
|
2280
|
+
item: import_zod6.z.discriminatedUnion("type", [
|
|
2281
|
+
import_zod6.z.object({
|
|
2282
|
+
type: import_zod6.z.literal("message")
|
|
2283
|
+
}),
|
|
2284
|
+
import_zod6.z.object({
|
|
2285
|
+
type: import_zod6.z.literal("function_call"),
|
|
2286
|
+
id: import_zod6.z.string(),
|
|
2287
|
+
call_id: import_zod6.z.string(),
|
|
2288
|
+
name: import_zod6.z.string(),
|
|
2289
|
+
arguments: import_zod6.z.string()
|
|
2290
|
+
})
|
|
2291
|
+
])
|
|
2292
|
+
});
|
|
2293
|
+
var responseAnnotationAddedSchema = import_zod6.z.object({
|
|
2294
|
+
type: import_zod6.z.literal("response.output_text.annotation.added"),
|
|
2295
|
+
annotation: import_zod6.z.object({
|
|
2296
|
+
type: import_zod6.z.literal("url_citation"),
|
|
2297
|
+
url: import_zod6.z.string(),
|
|
2298
|
+
title: import_zod6.z.string()
|
|
2299
|
+
})
|
|
2300
|
+
});
|
|
2301
|
+
var openaiResponsesChunkSchema = import_zod6.z.union([
|
|
2302
|
+
textDeltaChunkSchema,
|
|
2303
|
+
responseFinishedChunkSchema,
|
|
2304
|
+
responseCreatedChunkSchema,
|
|
2305
|
+
responseOutputItemDoneSchema,
|
|
2306
|
+
responseFunctionCallArgumentsDeltaSchema,
|
|
2307
|
+
responseOutputItemAddedSchema,
|
|
2308
|
+
responseAnnotationAddedSchema,
|
|
2309
|
+
import_zod6.z.object({ type: import_zod6.z.string() }).passthrough()
|
|
2310
|
+
// fallback for unknown chunks
|
|
2311
|
+
]);
|
|
2312
|
+
function isTextDeltaChunk(chunk) {
|
|
2313
|
+
return chunk.type === "response.output_text.delta";
|
|
2314
|
+
}
|
|
2315
|
+
function isResponseOutputItemDoneChunk(chunk) {
|
|
2316
|
+
return chunk.type === "response.output_item.done";
|
|
2317
|
+
}
|
|
2318
|
+
function isResponseFinishedChunk(chunk) {
|
|
2319
|
+
return chunk.type === "response.completed" || chunk.type === "response.incomplete";
|
|
2320
|
+
}
|
|
2321
|
+
function isResponseCreatedChunk(chunk) {
|
|
2322
|
+
return chunk.type === "response.created";
|
|
2323
|
+
}
|
|
2324
|
+
function isResponseFunctionCallArgumentsDeltaChunk(chunk) {
|
|
2325
|
+
return chunk.type === "response.function_call_arguments.delta";
|
|
2326
|
+
}
|
|
2327
|
+
function isResponseOutputItemAddedChunk(chunk) {
|
|
2328
|
+
return chunk.type === "response.output_item.added";
|
|
2329
|
+
}
|
|
2330
|
+
function isResponseAnnotationAddedChunk(chunk) {
|
|
2331
|
+
return chunk.type === "response.output_text.annotation.added";
|
|
2332
|
+
}
|
|
2333
|
+
function getResponsesModelConfig(modelId) {
|
|
2334
|
+
if (modelId.startsWith("o")) {
|
|
2335
|
+
if (modelId.startsWith("o1-mini") || modelId.startsWith("o1-preview")) {
|
|
2336
|
+
return {
|
|
2337
|
+
isReasoningModel: true,
|
|
2338
|
+
systemMessageMode: "remove",
|
|
2339
|
+
requiredAutoTruncation: false
|
|
2340
|
+
};
|
|
2341
|
+
}
|
|
2342
|
+
return {
|
|
2343
|
+
isReasoningModel: true,
|
|
2344
|
+
systemMessageMode: "developer",
|
|
2345
|
+
requiredAutoTruncation: false
|
|
2346
|
+
};
|
|
2347
|
+
}
|
|
2348
|
+
return {
|
|
2349
|
+
isReasoningModel: false,
|
|
2350
|
+
systemMessageMode: "system",
|
|
2351
|
+
requiredAutoTruncation: false
|
|
2352
|
+
};
|
|
2353
|
+
}
|
|
1599
2354
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1600
2355
|
0 && (module.exports = {
|
|
1601
2356
|
OpenAIChatLanguageModel,
|
|
1602
2357
|
OpenAICompletionLanguageModel,
|
|
1603
2358
|
OpenAIEmbeddingModel,
|
|
1604
2359
|
OpenAIImageModel,
|
|
2360
|
+
OpenAIResponsesLanguageModel,
|
|
1605
2361
|
modelMaxImagesPerCall
|
|
1606
2362
|
});
|
|
1607
2363
|
//# sourceMappingURL=index.js.map
|