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