@ai-sdk/openai-compatible 3.0.0-beta.3 → 3.0.0-beta.31

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.
@@ -1,340 +0,0 @@
1
- // src/chat/convert-to-openai-compatible-chat-messages.ts
2
- import {
3
- UnsupportedFunctionalityError
4
- } from "@ai-sdk/provider";
5
- import {
6
- convertBase64ToUint8Array,
7
- convertToBase64
8
- } from "@ai-sdk/provider-utils";
9
- function getOpenAIMetadata(message) {
10
- var _a, _b;
11
- return (_b = (_a = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a.openaiCompatible) != null ? _b : {};
12
- }
13
- function getAudioFormat(mediaType) {
14
- switch (mediaType) {
15
- case "audio/wav":
16
- return "wav";
17
- case "audio/mp3":
18
- case "audio/mpeg":
19
- return "mp3";
20
- default:
21
- return null;
22
- }
23
- }
24
- function convertToOpenAICompatibleChatMessages(prompt) {
25
- var _a, _b, _c;
26
- const messages = [];
27
- for (const { role, content, ...message } of prompt) {
28
- const metadata = getOpenAIMetadata({ ...message });
29
- switch (role) {
30
- case "system": {
31
- messages.push({ role: "system", content, ...metadata });
32
- break;
33
- }
34
- case "user": {
35
- if (content.length === 1 && content[0].type === "text") {
36
- messages.push({
37
- role: "user",
38
- content: content[0].text,
39
- ...getOpenAIMetadata(content[0])
40
- });
41
- break;
42
- }
43
- messages.push({
44
- role: "user",
45
- content: content.map((part) => {
46
- var _a2;
47
- const partMetadata = getOpenAIMetadata(part);
48
- switch (part.type) {
49
- case "text": {
50
- return { type: "text", text: part.text, ...partMetadata };
51
- }
52
- case "file": {
53
- if (part.mediaType.startsWith("image/")) {
54
- const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
55
- return {
56
- type: "image_url",
57
- image_url: {
58
- url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${convertToBase64(part.data)}`
59
- },
60
- ...partMetadata
61
- };
62
- }
63
- if (part.mediaType.startsWith("audio/")) {
64
- if (part.data instanceof URL) {
65
- throw new UnsupportedFunctionalityError({
66
- functionality: "audio file parts with URLs"
67
- });
68
- }
69
- const format = getAudioFormat(part.mediaType);
70
- if (format === null) {
71
- throw new UnsupportedFunctionalityError({
72
- functionality: `audio media type ${part.mediaType}`
73
- });
74
- }
75
- return {
76
- type: "input_audio",
77
- input_audio: {
78
- data: convertToBase64(part.data),
79
- format
80
- },
81
- ...partMetadata
82
- };
83
- }
84
- if (part.mediaType === "application/pdf") {
85
- if (part.data instanceof URL) {
86
- throw new UnsupportedFunctionalityError({
87
- functionality: "PDF file parts with URLs"
88
- });
89
- }
90
- return {
91
- type: "file",
92
- file: {
93
- filename: (_a2 = part.filename) != null ? _a2 : "document.pdf",
94
- file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`
95
- },
96
- ...partMetadata
97
- };
98
- }
99
- if (part.mediaType.startsWith("text/")) {
100
- const textContent = part.data instanceof URL ? part.data.toString() : typeof part.data === "string" ? new TextDecoder().decode(
101
- convertBase64ToUint8Array(part.data)
102
- ) : new TextDecoder().decode(part.data);
103
- return {
104
- type: "text",
105
- text: textContent,
106
- ...partMetadata
107
- };
108
- }
109
- throw new UnsupportedFunctionalityError({
110
- functionality: `file part media type ${part.mediaType}`
111
- });
112
- }
113
- }
114
- }),
115
- ...metadata
116
- });
117
- break;
118
- }
119
- case "assistant": {
120
- let text = "";
121
- let reasoning = "";
122
- const toolCalls = [];
123
- for (const part of content) {
124
- const partMetadata = getOpenAIMetadata(part);
125
- switch (part.type) {
126
- case "text": {
127
- text += part.text;
128
- break;
129
- }
130
- case "reasoning": {
131
- reasoning += part.text;
132
- break;
133
- }
134
- case "tool-call": {
135
- const thoughtSignature = (_b = (_a = part.providerOptions) == null ? void 0 : _a.google) == null ? void 0 : _b.thoughtSignature;
136
- toolCalls.push({
137
- id: part.toolCallId,
138
- type: "function",
139
- function: {
140
- name: part.toolName,
141
- arguments: JSON.stringify(part.input)
142
- },
143
- ...partMetadata,
144
- // Include extra_content for Google Gemini thought signatures
145
- ...thoughtSignature ? {
146
- extra_content: {
147
- google: {
148
- thought_signature: String(thoughtSignature)
149
- }
150
- }
151
- } : {}
152
- });
153
- break;
154
- }
155
- }
156
- }
157
- messages.push({
158
- role: "assistant",
159
- content: text,
160
- ...reasoning.length > 0 ? { reasoning_content: reasoning } : {},
161
- tool_calls: toolCalls.length > 0 ? toolCalls : void 0,
162
- ...metadata
163
- });
164
- break;
165
- }
166
- case "tool": {
167
- for (const toolResponse of content) {
168
- if (toolResponse.type === "tool-approval-response") {
169
- continue;
170
- }
171
- const output = toolResponse.output;
172
- let contentValue;
173
- switch (output.type) {
174
- case "text":
175
- case "error-text":
176
- contentValue = output.value;
177
- break;
178
- case "execution-denied":
179
- contentValue = (_c = output.reason) != null ? _c : "Tool execution denied.";
180
- break;
181
- case "content":
182
- case "json":
183
- case "error-json":
184
- contentValue = JSON.stringify(output.value);
185
- break;
186
- }
187
- const toolResponseMetadata = getOpenAIMetadata(toolResponse);
188
- messages.push({
189
- role: "tool",
190
- tool_call_id: toolResponse.toolCallId,
191
- content: contentValue,
192
- ...toolResponseMetadata
193
- });
194
- }
195
- break;
196
- }
197
- default: {
198
- const _exhaustiveCheck = role;
199
- throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
200
- }
201
- }
202
- }
203
- return messages;
204
- }
205
-
206
- // src/chat/convert-openai-compatible-chat-usage.ts
207
- function convertOpenAICompatibleChatUsage(usage) {
208
- var _a, _b, _c, _d, _e, _f;
209
- if (usage == null) {
210
- return {
211
- inputTokens: {
212
- total: void 0,
213
- noCache: void 0,
214
- cacheRead: void 0,
215
- cacheWrite: void 0
216
- },
217
- outputTokens: {
218
- total: void 0,
219
- text: void 0,
220
- reasoning: void 0
221
- },
222
- raw: void 0
223
- };
224
- }
225
- const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;
226
- const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;
227
- const cacheReadTokens = (_d = (_c = usage.prompt_tokens_details) == null ? void 0 : _c.cached_tokens) != null ? _d : 0;
228
- const reasoningTokens = (_f = (_e = usage.completion_tokens_details) == null ? void 0 : _e.reasoning_tokens) != null ? _f : 0;
229
- return {
230
- inputTokens: {
231
- total: promptTokens,
232
- noCache: promptTokens - cacheReadTokens,
233
- cacheRead: cacheReadTokens,
234
- cacheWrite: void 0
235
- },
236
- outputTokens: {
237
- total: completionTokens,
238
- text: completionTokens - reasoningTokens,
239
- reasoning: reasoningTokens
240
- },
241
- raw: usage
242
- };
243
- }
244
-
245
- // src/chat/map-openai-compatible-finish-reason.ts
246
- function mapOpenAICompatibleFinishReason(finishReason) {
247
- switch (finishReason) {
248
- case "stop":
249
- return "stop";
250
- case "length":
251
- return "length";
252
- case "content_filter":
253
- return "content-filter";
254
- case "function_call":
255
- case "tool_calls":
256
- return "tool-calls";
257
- default:
258
- return "other";
259
- }
260
- }
261
-
262
- // src/chat/get-response-metadata.ts
263
- function getResponseMetadata({
264
- id,
265
- model,
266
- created
267
- }) {
268
- return {
269
- id: id != null ? id : void 0,
270
- modelId: model != null ? model : void 0,
271
- timestamp: created != null ? new Date(created * 1e3) : void 0
272
- };
273
- }
274
-
275
- // src/chat/openai-compatible-prepare-tools.ts
276
- import {
277
- UnsupportedFunctionalityError as UnsupportedFunctionalityError2
278
- } from "@ai-sdk/provider";
279
- function prepareTools({
280
- tools,
281
- toolChoice
282
- }) {
283
- tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
284
- const toolWarnings = [];
285
- if (tools == null) {
286
- return { tools: void 0, toolChoice: void 0, toolWarnings };
287
- }
288
- const openaiCompatTools = [];
289
- for (const tool of tools) {
290
- if (tool.type === "provider") {
291
- toolWarnings.push({
292
- type: "unsupported",
293
- feature: `provider-defined tool ${tool.id}`
294
- });
295
- } else {
296
- openaiCompatTools.push({
297
- type: "function",
298
- function: {
299
- name: tool.name,
300
- description: tool.description,
301
- parameters: tool.inputSchema,
302
- ...tool.strict != null ? { strict: tool.strict } : {}
303
- }
304
- });
305
- }
306
- }
307
- if (toolChoice == null) {
308
- return { tools: openaiCompatTools, toolChoice: void 0, toolWarnings };
309
- }
310
- const type = toolChoice.type;
311
- switch (type) {
312
- case "auto":
313
- case "none":
314
- case "required":
315
- return { tools: openaiCompatTools, toolChoice: type, toolWarnings };
316
- case "tool":
317
- return {
318
- tools: openaiCompatTools,
319
- toolChoice: {
320
- type: "function",
321
- function: { name: toolChoice.toolName }
322
- },
323
- toolWarnings
324
- };
325
- default: {
326
- const _exhaustiveCheck = type;
327
- throw new UnsupportedFunctionalityError2({
328
- functionality: `tool choice type: ${_exhaustiveCheck}`
329
- });
330
- }
331
- }
332
- }
333
- export {
334
- convertOpenAICompatibleChatUsage,
335
- convertToOpenAICompatibleChatMessages,
336
- getResponseMetadata,
337
- mapOpenAICompatibleFinishReason,
338
- prepareTools
339
- };
340
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/chat/convert-to-openai-compatible-chat-messages.ts","../../src/chat/convert-openai-compatible-chat-usage.ts","../../src/chat/map-openai-compatible-finish-reason.ts","../../src/chat/get-response-metadata.ts","../../src/chat/openai-compatible-prepare-tools.ts"],"sourcesContent":["import {\n LanguageModelV4Prompt,\n SharedV4ProviderMetadata,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { OpenAICompatibleChatPrompt } from './openai-compatible-api-types';\nimport {\n convertBase64ToUint8Array,\n convertToBase64,\n} from '@ai-sdk/provider-utils';\n\nfunction getOpenAIMetadata(message: {\n providerOptions?: SharedV4ProviderMetadata;\n}) {\n return message?.providerOptions?.openaiCompatible ?? {};\n}\n\nfunction getAudioFormat(mediaType: string): 'wav' | 'mp3' | null {\n switch (mediaType) {\n case 'audio/wav':\n return 'wav';\n case 'audio/mp3':\n case 'audio/mpeg':\n return 'mp3';\n default:\n return null;\n }\n}\n\nexport function convertToOpenAICompatibleChatMessages(\n prompt: LanguageModelV4Prompt,\n): OpenAICompatibleChatPrompt {\n const messages: OpenAICompatibleChatPrompt = [];\n for (const { role, content, ...message } of prompt) {\n const metadata = getOpenAIMetadata({ ...message });\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content, ...metadata });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n ...getOpenAIMetadata(content[0]),\n });\n break;\n }\n\n messages.push({\n role: 'user',\n content: content.map(part => {\n const partMetadata = getOpenAIMetadata(part);\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text, ...partMetadata };\n }\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url',\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n ...partMetadata,\n };\n }\n\n if (part.mediaType.startsWith('audio/')) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n\n const format = getAudioFormat(part.mediaType);\n if (format === null) {\n throw new UnsupportedFunctionalityError({\n functionality: `audio media type ${part.mediaType}`,\n });\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n data: convertToBase64(part.data),\n format,\n },\n ...partMetadata,\n };\n }\n\n if (part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n\n return {\n type: 'file',\n file: {\n filename: part.filename ?? 'document.pdf',\n file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`,\n },\n ...partMetadata,\n };\n }\n\n if (part.mediaType.startsWith('text/')) {\n const textContent =\n part.data instanceof URL\n ? part.data.toString()\n : typeof part.data === 'string'\n ? new TextDecoder().decode(\n convertBase64ToUint8Array(part.data),\n )\n : new TextDecoder().decode(part.data);\n\n return {\n type: 'text',\n text: textContent,\n ...partMetadata,\n };\n }\n\n // Unsupported type\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n }\n }),\n ...metadata,\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoning = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n extra_content?: {\n google?: {\n thought_signature?: string;\n };\n };\n }> = [];\n\n for (const part of content) {\n const partMetadata = getOpenAIMetadata(part);\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'reasoning': {\n reasoning += part.text;\n break;\n }\n case 'tool-call': {\n // TODO: thoughtSignature should be abstracted once we add support for other providers\n const thoughtSignature =\n part.providerOptions?.google?.thoughtSignature;\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n ...partMetadata,\n // Include extra_content for Google Gemini thought signatures\n ...(thoughtSignature\n ? {\n extra_content: {\n google: {\n thought_signature: String(thoughtSignature),\n },\n },\n }\n : {}),\n });\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n ...(reasoning.length > 0 ? { reasoning_content: reasoning } : {}),\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n ...metadata,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\n const output = toolResponse.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n const toolResponseMetadata = getOpenAIMetadata(toolResponse);\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n ...toolResponseMetadata,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport function convertOpenAICompatibleChatUsage(\n usage:\n | {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n }\n | undefined\n | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n","import { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenAICompatibleFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["_a","UnsupportedFunctionalityError"]}