@ai-sdk/openai 2.0.0-canary.8 → 2.0.0
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 +663 -0
- package/README.md +2 -2
- package/dist/index.d.mts +84 -176
- package/dist/index.d.ts +84 -176
- package/dist/index.js +1323 -627
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1275 -575
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +85 -252
- package/dist/internal/index.d.ts +85 -252
- package/dist/internal/index.js +1315 -584
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +1266 -535
- package/dist/internal/index.mjs.map +1 -1
- package/internal.d.ts +1 -0
- package/package.json +11 -9
package/dist/index.mjs
CHANGED
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
createJsonResponseHandler,
|
|
15
15
|
generateId,
|
|
16
16
|
isParsableJson,
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
parseProviderOptions,
|
|
18
|
+
postJsonToApi
|
|
19
19
|
} from "@ai-sdk/provider-utils";
|
|
20
|
-
import { z as
|
|
20
|
+
import { z as z5 } from "zod/v4";
|
|
21
21
|
|
|
22
22
|
// src/convert-to-openai-chat-messages.ts
|
|
23
23
|
import {
|
|
@@ -124,7 +124,7 @@ function convertToOpenAIChatMessages({
|
|
|
124
124
|
type: "file",
|
|
125
125
|
file: {
|
|
126
126
|
filename: (_c = part.filename) != null ? _c : `part-${index}.pdf`,
|
|
127
|
-
file_data: `data:application/pdf;base64,${part.data}`
|
|
127
|
+
file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`
|
|
128
128
|
}
|
|
129
129
|
};
|
|
130
130
|
} else {
|
|
@@ -153,7 +153,7 @@ function convertToOpenAIChatMessages({
|
|
|
153
153
|
type: "function",
|
|
154
154
|
function: {
|
|
155
155
|
name: part.toolName,
|
|
156
|
-
arguments: JSON.stringify(part.
|
|
156
|
+
arguments: JSON.stringify(part.input)
|
|
157
157
|
}
|
|
158
158
|
});
|
|
159
159
|
break;
|
|
@@ -169,10 +169,23 @@ function convertToOpenAIChatMessages({
|
|
|
169
169
|
}
|
|
170
170
|
case "tool": {
|
|
171
171
|
for (const toolResponse of content) {
|
|
172
|
+
const output = toolResponse.output;
|
|
173
|
+
let contentValue;
|
|
174
|
+
switch (output.type) {
|
|
175
|
+
case "text":
|
|
176
|
+
case "error-text":
|
|
177
|
+
contentValue = output.value;
|
|
178
|
+
break;
|
|
179
|
+
case "content":
|
|
180
|
+
case "json":
|
|
181
|
+
case "error-json":
|
|
182
|
+
contentValue = JSON.stringify(output.value);
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
172
185
|
messages.push({
|
|
173
186
|
role: "tool",
|
|
174
187
|
tool_call_id: toolResponse.toolCallId,
|
|
175
|
-
content:
|
|
188
|
+
content: contentValue
|
|
176
189
|
});
|
|
177
190
|
}
|
|
178
191
|
break;
|
|
@@ -186,17 +199,17 @@ function convertToOpenAIChatMessages({
|
|
|
186
199
|
return { messages, warnings };
|
|
187
200
|
}
|
|
188
201
|
|
|
189
|
-
// src/
|
|
190
|
-
function
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
202
|
+
// src/get-response-metadata.ts
|
|
203
|
+
function getResponseMetadata({
|
|
204
|
+
id,
|
|
205
|
+
model,
|
|
206
|
+
created
|
|
207
|
+
}) {
|
|
208
|
+
return {
|
|
209
|
+
id: id != null ? id : void 0,
|
|
210
|
+
modelId: model != null ? model : void 0,
|
|
211
|
+
timestamp: created != null ? new Date(created * 1e3) : void 0
|
|
212
|
+
};
|
|
200
213
|
}
|
|
201
214
|
|
|
202
215
|
// src/map-openai-finish-reason.ts
|
|
@@ -217,7 +230,7 @@ function mapOpenAIFinishReason(finishReason) {
|
|
|
217
230
|
}
|
|
218
231
|
|
|
219
232
|
// src/openai-chat-options.ts
|
|
220
|
-
import { z } from "zod";
|
|
233
|
+
import { z } from "zod/v4";
|
|
221
234
|
var openaiProviderOptions = z.object({
|
|
222
235
|
/**
|
|
223
236
|
* Modify the likelihood of specified tokens appearing in the completion.
|
|
@@ -260,15 +273,36 @@ var openaiProviderOptions = z.object({
|
|
|
260
273
|
/**
|
|
261
274
|
* Metadata to associate with the request.
|
|
262
275
|
*/
|
|
263
|
-
metadata: z.record(z.string()).optional(),
|
|
276
|
+
metadata: z.record(z.string().max(64), z.string().max(512)).optional(),
|
|
264
277
|
/**
|
|
265
278
|
* Parameters for prediction mode.
|
|
266
279
|
*/
|
|
267
|
-
prediction: z.record(z.any()).optional()
|
|
280
|
+
prediction: z.record(z.string(), z.any()).optional(),
|
|
281
|
+
/**
|
|
282
|
+
* Whether to use structured outputs.
|
|
283
|
+
*
|
|
284
|
+
* @default true
|
|
285
|
+
*/
|
|
286
|
+
structuredOutputs: z.boolean().optional(),
|
|
287
|
+
/**
|
|
288
|
+
* Service tier for the request.
|
|
289
|
+
* - 'auto': Default service tier
|
|
290
|
+
* - 'flex': 50% cheaper processing at the cost of increased latency. Only available for o3 and o4-mini models.
|
|
291
|
+
* - 'priority': Higher-speed processing with predictably low latency at premium cost. Available for Enterprise customers.
|
|
292
|
+
*
|
|
293
|
+
* @default 'auto'
|
|
294
|
+
*/
|
|
295
|
+
serviceTier: z.enum(["auto", "flex", "priority"]).optional(),
|
|
296
|
+
/**
|
|
297
|
+
* Whether to use strict JSON schema validation.
|
|
298
|
+
*
|
|
299
|
+
* @default false
|
|
300
|
+
*/
|
|
301
|
+
strictJsonSchema: z.boolean().optional()
|
|
268
302
|
});
|
|
269
303
|
|
|
270
304
|
// src/openai-error.ts
|
|
271
|
-
import { z as z2 } from "zod";
|
|
305
|
+
import { z as z2 } from "zod/v4";
|
|
272
306
|
import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
|
|
273
307
|
var openaiErrorDataSchema = z2.object({
|
|
274
308
|
error: z2.object({
|
|
@@ -286,27 +320,103 @@ var openaiFailedResponseHandler = createJsonErrorResponseHandler({
|
|
|
286
320
|
errorToMessage: (data) => data.error.message
|
|
287
321
|
});
|
|
288
322
|
|
|
289
|
-
// src/get-response-metadata.ts
|
|
290
|
-
function getResponseMetadata({
|
|
291
|
-
id,
|
|
292
|
-
model,
|
|
293
|
-
created
|
|
294
|
-
}) {
|
|
295
|
-
return {
|
|
296
|
-
id: id != null ? id : void 0,
|
|
297
|
-
modelId: model != null ? model : void 0,
|
|
298
|
-
timestamp: created != null ? new Date(created * 1e3) : void 0
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
|
|
302
323
|
// src/openai-prepare-tools.ts
|
|
303
324
|
import {
|
|
304
325
|
UnsupportedFunctionalityError as UnsupportedFunctionalityError2
|
|
305
326
|
} from "@ai-sdk/provider";
|
|
327
|
+
|
|
328
|
+
// src/tool/file-search.ts
|
|
329
|
+
import { createProviderDefinedToolFactory } from "@ai-sdk/provider-utils";
|
|
330
|
+
import { z as z3 } from "zod/v4";
|
|
331
|
+
var comparisonFilterSchema = z3.object({
|
|
332
|
+
key: z3.string(),
|
|
333
|
+
type: z3.enum(["eq", "ne", "gt", "gte", "lt", "lte"]),
|
|
334
|
+
value: z3.union([z3.string(), z3.number(), z3.boolean()])
|
|
335
|
+
});
|
|
336
|
+
var compoundFilterSchema = z3.object({
|
|
337
|
+
type: z3.enum(["and", "or"]),
|
|
338
|
+
filters: z3.array(
|
|
339
|
+
z3.union([comparisonFilterSchema, z3.lazy(() => compoundFilterSchema)])
|
|
340
|
+
)
|
|
341
|
+
});
|
|
342
|
+
var filtersSchema = z3.union([comparisonFilterSchema, compoundFilterSchema]);
|
|
343
|
+
var fileSearchArgsSchema = z3.object({
|
|
344
|
+
/**
|
|
345
|
+
* List of vector store IDs to search through. If not provided, searches all available vector stores.
|
|
346
|
+
*/
|
|
347
|
+
vectorStoreIds: z3.array(z3.string()).optional(),
|
|
348
|
+
/**
|
|
349
|
+
* Maximum number of search results to return. Defaults to 10.
|
|
350
|
+
*/
|
|
351
|
+
maxNumResults: z3.number().optional(),
|
|
352
|
+
/**
|
|
353
|
+
* Ranking options for the search.
|
|
354
|
+
*/
|
|
355
|
+
ranking: z3.object({
|
|
356
|
+
ranker: z3.enum(["auto", "default-2024-08-21"]).optional()
|
|
357
|
+
}).optional(),
|
|
358
|
+
/**
|
|
359
|
+
* A filter to apply based on file attributes.
|
|
360
|
+
*/
|
|
361
|
+
filters: filtersSchema.optional()
|
|
362
|
+
});
|
|
363
|
+
var fileSearch = createProviderDefinedToolFactory({
|
|
364
|
+
id: "openai.file_search",
|
|
365
|
+
name: "file_search",
|
|
366
|
+
inputSchema: z3.object({
|
|
367
|
+
query: z3.string()
|
|
368
|
+
})
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
// src/tool/web-search-preview.ts
|
|
372
|
+
import { createProviderDefinedToolFactory as createProviderDefinedToolFactory2 } from "@ai-sdk/provider-utils";
|
|
373
|
+
import { z as z4 } from "zod/v4";
|
|
374
|
+
var webSearchPreviewArgsSchema = z4.object({
|
|
375
|
+
/**
|
|
376
|
+
* Search context size to use for the web search.
|
|
377
|
+
* - high: Most comprehensive context, highest cost, slower response
|
|
378
|
+
* - medium: Balanced context, cost, and latency (default)
|
|
379
|
+
* - low: Least context, lowest cost, fastest response
|
|
380
|
+
*/
|
|
381
|
+
searchContextSize: z4.enum(["low", "medium", "high"]).optional(),
|
|
382
|
+
/**
|
|
383
|
+
* User location information to provide geographically relevant search results.
|
|
384
|
+
*/
|
|
385
|
+
userLocation: z4.object({
|
|
386
|
+
/**
|
|
387
|
+
* Type of location (always 'approximate')
|
|
388
|
+
*/
|
|
389
|
+
type: z4.literal("approximate"),
|
|
390
|
+
/**
|
|
391
|
+
* Two-letter ISO country code (e.g., 'US', 'GB')
|
|
392
|
+
*/
|
|
393
|
+
country: z4.string().optional(),
|
|
394
|
+
/**
|
|
395
|
+
* City name (free text, e.g., 'Minneapolis')
|
|
396
|
+
*/
|
|
397
|
+
city: z4.string().optional(),
|
|
398
|
+
/**
|
|
399
|
+
* Region name (free text, e.g., 'Minnesota')
|
|
400
|
+
*/
|
|
401
|
+
region: z4.string().optional(),
|
|
402
|
+
/**
|
|
403
|
+
* IANA timezone (e.g., 'America/Chicago')
|
|
404
|
+
*/
|
|
405
|
+
timezone: z4.string().optional()
|
|
406
|
+
}).optional()
|
|
407
|
+
});
|
|
408
|
+
var webSearchPreview = createProviderDefinedToolFactory2({
|
|
409
|
+
id: "openai.web_search_preview",
|
|
410
|
+
name: "web_search_preview",
|
|
411
|
+
inputSchema: z4.object({})
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
// src/openai-prepare-tools.ts
|
|
306
415
|
function prepareTools({
|
|
307
416
|
tools,
|
|
308
417
|
toolChoice,
|
|
309
|
-
structuredOutputs
|
|
418
|
+
structuredOutputs,
|
|
419
|
+
strictJsonSchema
|
|
310
420
|
}) {
|
|
311
421
|
tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
|
|
312
422
|
const toolWarnings = [];
|
|
@@ -315,18 +425,48 @@ function prepareTools({
|
|
|
315
425
|
}
|
|
316
426
|
const openaiTools2 = [];
|
|
317
427
|
for (const tool of tools) {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
428
|
+
switch (tool.type) {
|
|
429
|
+
case "function":
|
|
430
|
+
openaiTools2.push({
|
|
431
|
+
type: "function",
|
|
432
|
+
function: {
|
|
433
|
+
name: tool.name,
|
|
434
|
+
description: tool.description,
|
|
435
|
+
parameters: tool.inputSchema,
|
|
436
|
+
strict: structuredOutputs ? strictJsonSchema : void 0
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
break;
|
|
440
|
+
case "provider-defined":
|
|
441
|
+
switch (tool.id) {
|
|
442
|
+
case "openai.file_search": {
|
|
443
|
+
const args = fileSearchArgsSchema.parse(tool.args);
|
|
444
|
+
openaiTools2.push({
|
|
445
|
+
type: "file_search",
|
|
446
|
+
vector_store_ids: args.vectorStoreIds,
|
|
447
|
+
max_num_results: args.maxNumResults,
|
|
448
|
+
ranking_options: args.ranking ? { ranker: args.ranking.ranker } : void 0,
|
|
449
|
+
filters: args.filters
|
|
450
|
+
});
|
|
451
|
+
break;
|
|
452
|
+
}
|
|
453
|
+
case "openai.web_search_preview": {
|
|
454
|
+
const args = webSearchPreviewArgsSchema.parse(tool.args);
|
|
455
|
+
openaiTools2.push({
|
|
456
|
+
type: "web_search_preview",
|
|
457
|
+
search_context_size: args.searchContextSize,
|
|
458
|
+
user_location: args.userLocation
|
|
459
|
+
});
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
default:
|
|
463
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
464
|
+
break;
|
|
328
465
|
}
|
|
329
|
-
|
|
466
|
+
break;
|
|
467
|
+
default:
|
|
468
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
469
|
+
break;
|
|
330
470
|
}
|
|
331
471
|
}
|
|
332
472
|
if (toolChoice == null) {
|
|
@@ -360,29 +500,18 @@ function prepareTools({
|
|
|
360
500
|
|
|
361
501
|
// src/openai-chat-language-model.ts
|
|
362
502
|
var OpenAIChatLanguageModel = class {
|
|
363
|
-
constructor(modelId,
|
|
503
|
+
constructor(modelId, config) {
|
|
364
504
|
this.specificationVersion = "v2";
|
|
505
|
+
this.supportedUrls = {
|
|
506
|
+
"image/*": [/^https?:\/\/.*$/]
|
|
507
|
+
};
|
|
365
508
|
this.modelId = modelId;
|
|
366
|
-
this.settings = settings;
|
|
367
509
|
this.config = config;
|
|
368
510
|
}
|
|
369
|
-
get supportsStructuredOutputs() {
|
|
370
|
-
var _a;
|
|
371
|
-
return (_a = this.settings.structuredOutputs) != null ? _a : isReasoningModel(this.modelId);
|
|
372
|
-
}
|
|
373
|
-
get defaultObjectGenerationMode() {
|
|
374
|
-
if (isAudioModel(this.modelId)) {
|
|
375
|
-
return "tool";
|
|
376
|
-
}
|
|
377
|
-
return this.supportsStructuredOutputs ? "json" : "tool";
|
|
378
|
-
}
|
|
379
511
|
get provider() {
|
|
380
512
|
return this.config.provider;
|
|
381
513
|
}
|
|
382
|
-
|
|
383
|
-
return !this.settings.downloadImages;
|
|
384
|
-
}
|
|
385
|
-
getArgs({
|
|
514
|
+
async getArgs({
|
|
386
515
|
prompt,
|
|
387
516
|
maxOutputTokens,
|
|
388
517
|
temperature,
|
|
@@ -397,20 +526,21 @@ var OpenAIChatLanguageModel = class {
|
|
|
397
526
|
toolChoice,
|
|
398
527
|
providerOptions
|
|
399
528
|
}) {
|
|
400
|
-
var _a, _b;
|
|
529
|
+
var _a, _b, _c, _d;
|
|
401
530
|
const warnings = [];
|
|
402
|
-
const openaiOptions = (_a = parseProviderOptions({
|
|
531
|
+
const openaiOptions = (_a = await parseProviderOptions({
|
|
403
532
|
provider: "openai",
|
|
404
533
|
providerOptions,
|
|
405
534
|
schema: openaiProviderOptions
|
|
406
535
|
})) != null ? _a : {};
|
|
536
|
+
const structuredOutputs = (_b = openaiOptions.structuredOutputs) != null ? _b : true;
|
|
407
537
|
if (topK != null) {
|
|
408
538
|
warnings.push({
|
|
409
539
|
type: "unsupported-setting",
|
|
410
540
|
setting: "topK"
|
|
411
541
|
});
|
|
412
542
|
}
|
|
413
|
-
if ((responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && !
|
|
543
|
+
if ((responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && !structuredOutputs) {
|
|
414
544
|
warnings.push({
|
|
415
545
|
type: "unsupported-setting",
|
|
416
546
|
setting: "responseFormat",
|
|
@@ -424,6 +554,7 @@ var OpenAIChatLanguageModel = class {
|
|
|
424
554
|
}
|
|
425
555
|
);
|
|
426
556
|
warnings.push(...messageWarnings);
|
|
557
|
+
const strictJsonSchema = (_c = openaiOptions.strictJsonSchema) != null ? _c : false;
|
|
427
558
|
const baseArgs = {
|
|
428
559
|
// model id:
|
|
429
560
|
model: this.modelId,
|
|
@@ -439,13 +570,12 @@ var OpenAIChatLanguageModel = class {
|
|
|
439
570
|
top_p: topP,
|
|
440
571
|
frequency_penalty: frequencyPenalty,
|
|
441
572
|
presence_penalty: presencePenalty,
|
|
442
|
-
|
|
443
|
-
response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? this.supportsStructuredOutputs && responseFormat.schema != null ? {
|
|
573
|
+
response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? structuredOutputs && responseFormat.schema != null ? {
|
|
444
574
|
type: "json_schema",
|
|
445
575
|
json_schema: {
|
|
446
576
|
schema: responseFormat.schema,
|
|
447
|
-
strict:
|
|
448
|
-
name: (
|
|
577
|
+
strict: strictJsonSchema,
|
|
578
|
+
name: (_d = responseFormat.name) != null ? _d : "response",
|
|
449
579
|
description: responseFormat.description
|
|
450
580
|
}
|
|
451
581
|
} : { type: "json_object" } : void 0,
|
|
@@ -458,6 +588,7 @@ var OpenAIChatLanguageModel = class {
|
|
|
458
588
|
metadata: openaiOptions.metadata,
|
|
459
589
|
prediction: openaiOptions.prediction,
|
|
460
590
|
reasoning_effort: openaiOptions.reasoningEffort,
|
|
591
|
+
service_tier: openaiOptions.serviceTier,
|
|
461
592
|
// messages:
|
|
462
593
|
messages
|
|
463
594
|
};
|
|
@@ -521,16 +652,32 @@ var OpenAIChatLanguageModel = class {
|
|
|
521
652
|
}
|
|
522
653
|
baseArgs.max_tokens = void 0;
|
|
523
654
|
}
|
|
524
|
-
} else if (this.modelId.startsWith("gpt-4o-search-preview")) {
|
|
655
|
+
} else if (this.modelId.startsWith("gpt-4o-search-preview") || this.modelId.startsWith("gpt-4o-mini-search-preview")) {
|
|
525
656
|
if (baseArgs.temperature != null) {
|
|
526
657
|
baseArgs.temperature = void 0;
|
|
527
658
|
warnings.push({
|
|
528
659
|
type: "unsupported-setting",
|
|
529
660
|
setting: "temperature",
|
|
530
|
-
details: "temperature is not supported for the
|
|
661
|
+
details: "temperature is not supported for the search preview models and has been removed."
|
|
531
662
|
});
|
|
532
663
|
}
|
|
533
664
|
}
|
|
665
|
+
if (openaiOptions.serviceTier === "flex" && !supportsFlexProcessing(this.modelId)) {
|
|
666
|
+
warnings.push({
|
|
667
|
+
type: "unsupported-setting",
|
|
668
|
+
setting: "serviceTier",
|
|
669
|
+
details: "flex processing is only available for o3 and o4-mini models"
|
|
670
|
+
});
|
|
671
|
+
baseArgs.service_tier = void 0;
|
|
672
|
+
}
|
|
673
|
+
if (openaiOptions.serviceTier === "priority" && !supportsPriorityProcessing(this.modelId)) {
|
|
674
|
+
warnings.push({
|
|
675
|
+
type: "unsupported-setting",
|
|
676
|
+
setting: "serviceTier",
|
|
677
|
+
details: "priority processing is only available for supported models (GPT-4, o3, o4-mini) and requires Enterprise access"
|
|
678
|
+
});
|
|
679
|
+
baseArgs.service_tier = void 0;
|
|
680
|
+
}
|
|
534
681
|
const {
|
|
535
682
|
tools: openaiTools2,
|
|
536
683
|
toolChoice: openaiToolChoice,
|
|
@@ -538,7 +685,8 @@ var OpenAIChatLanguageModel = class {
|
|
|
538
685
|
} = prepareTools({
|
|
539
686
|
tools,
|
|
540
687
|
toolChoice,
|
|
541
|
-
structuredOutputs
|
|
688
|
+
structuredOutputs,
|
|
689
|
+
strictJsonSchema
|
|
542
690
|
});
|
|
543
691
|
return {
|
|
544
692
|
args: {
|
|
@@ -550,8 +698,8 @@ var OpenAIChatLanguageModel = class {
|
|
|
550
698
|
};
|
|
551
699
|
}
|
|
552
700
|
async doGenerate(options) {
|
|
553
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
554
|
-
const { args: body, warnings } = this.getArgs(options);
|
|
701
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
702
|
+
const { args: body, warnings } = await this.getArgs(options);
|
|
555
703
|
const {
|
|
556
704
|
responseHeaders,
|
|
557
705
|
value: response,
|
|
@@ -579,33 +727,32 @@ var OpenAIChatLanguageModel = class {
|
|
|
579
727
|
for (const toolCall of (_a = choice.message.tool_calls) != null ? _a : []) {
|
|
580
728
|
content.push({
|
|
581
729
|
type: "tool-call",
|
|
582
|
-
toolCallType: "function",
|
|
583
730
|
toolCallId: (_b = toolCall.id) != null ? _b : generateId(),
|
|
584
731
|
toolName: toolCall.function.name,
|
|
585
|
-
|
|
732
|
+
input: toolCall.function.arguments
|
|
586
733
|
});
|
|
587
734
|
}
|
|
588
735
|
const completionTokenDetails = (_c = response.usage) == null ? void 0 : _c.completion_tokens_details;
|
|
589
736
|
const promptTokenDetails = (_d = response.usage) == null ? void 0 : _d.prompt_tokens_details;
|
|
590
737
|
const providerMetadata = { openai: {} };
|
|
591
|
-
if ((completionTokenDetails == null ? void 0 : completionTokenDetails.reasoning_tokens) != null) {
|
|
592
|
-
providerMetadata.openai.reasoningTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.reasoning_tokens;
|
|
593
|
-
}
|
|
594
738
|
if ((completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens) != null) {
|
|
595
739
|
providerMetadata.openai.acceptedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens;
|
|
596
740
|
}
|
|
597
741
|
if ((completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens) != null) {
|
|
598
742
|
providerMetadata.openai.rejectedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens;
|
|
599
743
|
}
|
|
600
|
-
if ((
|
|
601
|
-
providerMetadata.openai.
|
|
744
|
+
if (((_e = choice.logprobs) == null ? void 0 : _e.content) != null) {
|
|
745
|
+
providerMetadata.openai.logprobs = choice.logprobs.content;
|
|
602
746
|
}
|
|
603
747
|
return {
|
|
604
748
|
content,
|
|
605
749
|
finishReason: mapOpenAIFinishReason(choice.finish_reason),
|
|
606
750
|
usage: {
|
|
607
|
-
inputTokens: (
|
|
608
|
-
outputTokens: (
|
|
751
|
+
inputTokens: (_g = (_f = response.usage) == null ? void 0 : _f.prompt_tokens) != null ? _g : void 0,
|
|
752
|
+
outputTokens: (_i = (_h = response.usage) == null ? void 0 : _h.completion_tokens) != null ? _i : void 0,
|
|
753
|
+
totalTokens: (_k = (_j = response.usage) == null ? void 0 : _j.total_tokens) != null ? _k : void 0,
|
|
754
|
+
reasoningTokens: (_l = completionTokenDetails == null ? void 0 : completionTokenDetails.reasoning_tokens) != null ? _l : void 0,
|
|
755
|
+
cachedInputTokens: (_m = promptTokenDetails == null ? void 0 : promptTokenDetails.cached_tokens) != null ? _m : void 0
|
|
609
756
|
},
|
|
610
757
|
request: { body },
|
|
611
758
|
response: {
|
|
@@ -614,17 +761,17 @@ var OpenAIChatLanguageModel = class {
|
|
|
614
761
|
body: rawResponse
|
|
615
762
|
},
|
|
616
763
|
warnings,
|
|
617
|
-
logprobs: mapOpenAIChatLogProbsOutput(choice.logprobs),
|
|
618
764
|
providerMetadata
|
|
619
765
|
};
|
|
620
766
|
}
|
|
621
767
|
async doStream(options) {
|
|
622
|
-
const { args, warnings } = this.getArgs(options);
|
|
768
|
+
const { args, warnings } = await this.getArgs(options);
|
|
623
769
|
const body = {
|
|
624
770
|
...args,
|
|
625
771
|
stream: true,
|
|
626
|
-
|
|
627
|
-
|
|
772
|
+
stream_options: {
|
|
773
|
+
include_usage: true
|
|
774
|
+
}
|
|
628
775
|
};
|
|
629
776
|
const { responseHeaders, value: response } = await postJsonToApi({
|
|
630
777
|
url: this.config.url({
|
|
@@ -640,15 +787,15 @@ var OpenAIChatLanguageModel = class {
|
|
|
640
787
|
abortSignal: options.abortSignal,
|
|
641
788
|
fetch: this.config.fetch
|
|
642
789
|
});
|
|
643
|
-
const { messages: rawPrompt, ...rawSettings } = args;
|
|
644
790
|
const toolCalls = [];
|
|
645
791
|
let finishReason = "unknown";
|
|
646
792
|
const usage = {
|
|
647
793
|
inputTokens: void 0,
|
|
648
|
-
outputTokens: void 0
|
|
794
|
+
outputTokens: void 0,
|
|
795
|
+
totalTokens: void 0
|
|
649
796
|
};
|
|
650
|
-
let logprobs;
|
|
651
797
|
let isFirstChunk = true;
|
|
798
|
+
let isActiveText = false;
|
|
652
799
|
const providerMetadata = { openai: {} };
|
|
653
800
|
return {
|
|
654
801
|
stream: response.pipeThrough(
|
|
@@ -657,7 +804,10 @@ var OpenAIChatLanguageModel = class {
|
|
|
657
804
|
controller.enqueue({ type: "stream-start", warnings });
|
|
658
805
|
},
|
|
659
806
|
transform(chunk, controller) {
|
|
660
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
807
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
808
|
+
if (options.includeRawChunks) {
|
|
809
|
+
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
810
|
+
}
|
|
661
811
|
if (!chunk.success) {
|
|
662
812
|
finishReason = "error";
|
|
663
813
|
controller.enqueue({ type: "error", error: chunk.error });
|
|
@@ -677,48 +827,40 @@ var OpenAIChatLanguageModel = class {
|
|
|
677
827
|
});
|
|
678
828
|
}
|
|
679
829
|
if (value.usage != null) {
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
usage.outputTokens = completion_tokens != null ? completion_tokens : void 0;
|
|
688
|
-
if ((completion_tokens_details == null ? void 0 : completion_tokens_details.reasoning_tokens) != null) {
|
|
689
|
-
providerMetadata.openai.reasoningTokens = completion_tokens_details == null ? void 0 : completion_tokens_details.reasoning_tokens;
|
|
690
|
-
}
|
|
691
|
-
if ((completion_tokens_details == null ? void 0 : completion_tokens_details.accepted_prediction_tokens) != null) {
|
|
692
|
-
providerMetadata.openai.acceptedPredictionTokens = completion_tokens_details == null ? void 0 : completion_tokens_details.accepted_prediction_tokens;
|
|
830
|
+
usage.inputTokens = (_a = value.usage.prompt_tokens) != null ? _a : void 0;
|
|
831
|
+
usage.outputTokens = (_b = value.usage.completion_tokens) != null ? _b : void 0;
|
|
832
|
+
usage.totalTokens = (_c = value.usage.total_tokens) != null ? _c : void 0;
|
|
833
|
+
usage.reasoningTokens = (_e = (_d = value.usage.completion_tokens_details) == null ? void 0 : _d.reasoning_tokens) != null ? _e : void 0;
|
|
834
|
+
usage.cachedInputTokens = (_g = (_f = value.usage.prompt_tokens_details) == null ? void 0 : _f.cached_tokens) != null ? _g : void 0;
|
|
835
|
+
if (((_h = value.usage.completion_tokens_details) == null ? void 0 : _h.accepted_prediction_tokens) != null) {
|
|
836
|
+
providerMetadata.openai.acceptedPredictionTokens = (_i = value.usage.completion_tokens_details) == null ? void 0 : _i.accepted_prediction_tokens;
|
|
693
837
|
}
|
|
694
|
-
if ((completion_tokens_details == null ? void 0 :
|
|
695
|
-
providerMetadata.openai.rejectedPredictionTokens = completion_tokens_details == null ? void 0 :
|
|
696
|
-
}
|
|
697
|
-
if ((prompt_tokens_details == null ? void 0 : prompt_tokens_details.cached_tokens) != null) {
|
|
698
|
-
providerMetadata.openai.cachedPromptTokens = prompt_tokens_details == null ? void 0 : prompt_tokens_details.cached_tokens;
|
|
838
|
+
if (((_j = value.usage.completion_tokens_details) == null ? void 0 : _j.rejected_prediction_tokens) != null) {
|
|
839
|
+
providerMetadata.openai.rejectedPredictionTokens = (_k = value.usage.completion_tokens_details) == null ? void 0 : _k.rejected_prediction_tokens;
|
|
699
840
|
}
|
|
700
841
|
}
|
|
701
842
|
const choice = value.choices[0];
|
|
702
843
|
if ((choice == null ? void 0 : choice.finish_reason) != null) {
|
|
703
844
|
finishReason = mapOpenAIFinishReason(choice.finish_reason);
|
|
704
845
|
}
|
|
846
|
+
if (((_l = choice == null ? void 0 : choice.logprobs) == null ? void 0 : _l.content) != null) {
|
|
847
|
+
providerMetadata.openai.logprobs = choice.logprobs.content;
|
|
848
|
+
}
|
|
705
849
|
if ((choice == null ? void 0 : choice.delta) == null) {
|
|
706
850
|
return;
|
|
707
851
|
}
|
|
708
852
|
const delta = choice.delta;
|
|
709
853
|
if (delta.content != null) {
|
|
854
|
+
if (!isActiveText) {
|
|
855
|
+
controller.enqueue({ type: "text-start", id: "0" });
|
|
856
|
+
isActiveText = true;
|
|
857
|
+
}
|
|
710
858
|
controller.enqueue({
|
|
711
|
-
type: "text",
|
|
712
|
-
|
|
859
|
+
type: "text-delta",
|
|
860
|
+
id: "0",
|
|
861
|
+
delta: delta.content
|
|
713
862
|
});
|
|
714
863
|
}
|
|
715
|
-
const mappedLogprobs = mapOpenAIChatLogProbsOutput(
|
|
716
|
-
choice == null ? void 0 : choice.logprobs
|
|
717
|
-
);
|
|
718
|
-
if (mappedLogprobs == null ? void 0 : mappedLogprobs.length) {
|
|
719
|
-
if (logprobs === void 0) logprobs = [];
|
|
720
|
-
logprobs.push(...mappedLogprobs);
|
|
721
|
-
}
|
|
722
864
|
if (delta.tool_calls != null) {
|
|
723
865
|
for (const toolCallDelta of delta.tool_calls) {
|
|
724
866
|
const index = toolCallDelta.index;
|
|
@@ -735,39 +877,45 @@ var OpenAIChatLanguageModel = class {
|
|
|
735
877
|
message: `Expected 'id' to be a string.`
|
|
736
878
|
});
|
|
737
879
|
}
|
|
738
|
-
if (((
|
|
880
|
+
if (((_m = toolCallDelta.function) == null ? void 0 : _m.name) == null) {
|
|
739
881
|
throw new InvalidResponseDataError({
|
|
740
882
|
data: toolCallDelta,
|
|
741
883
|
message: `Expected 'function.name' to be a string.`
|
|
742
884
|
});
|
|
743
885
|
}
|
|
886
|
+
controller.enqueue({
|
|
887
|
+
type: "tool-input-start",
|
|
888
|
+
id: toolCallDelta.id,
|
|
889
|
+
toolName: toolCallDelta.function.name
|
|
890
|
+
});
|
|
744
891
|
toolCalls[index] = {
|
|
745
892
|
id: toolCallDelta.id,
|
|
746
893
|
type: "function",
|
|
747
894
|
function: {
|
|
748
895
|
name: toolCallDelta.function.name,
|
|
749
|
-
arguments: (
|
|
896
|
+
arguments: (_n = toolCallDelta.function.arguments) != null ? _n : ""
|
|
750
897
|
},
|
|
751
898
|
hasFinished: false
|
|
752
899
|
};
|
|
753
900
|
const toolCall2 = toolCalls[index];
|
|
754
|
-
if (((
|
|
901
|
+
if (((_o = toolCall2.function) == null ? void 0 : _o.name) != null && ((_p = toolCall2.function) == null ? void 0 : _p.arguments) != null) {
|
|
755
902
|
if (toolCall2.function.arguments.length > 0) {
|
|
756
903
|
controller.enqueue({
|
|
757
|
-
type: "tool-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
toolName: toolCall2.function.name,
|
|
761
|
-
argsTextDelta: toolCall2.function.arguments
|
|
904
|
+
type: "tool-input-delta",
|
|
905
|
+
id: toolCall2.id,
|
|
906
|
+
delta: toolCall2.function.arguments
|
|
762
907
|
});
|
|
763
908
|
}
|
|
764
909
|
if (isParsableJson(toolCall2.function.arguments)) {
|
|
910
|
+
controller.enqueue({
|
|
911
|
+
type: "tool-input-end",
|
|
912
|
+
id: toolCall2.id
|
|
913
|
+
});
|
|
765
914
|
controller.enqueue({
|
|
766
915
|
type: "tool-call",
|
|
767
|
-
|
|
768
|
-
toolCallId: (_e = toolCall2.id) != null ? _e : generateId(),
|
|
916
|
+
toolCallId: (_q = toolCall2.id) != null ? _q : generateId(),
|
|
769
917
|
toolName: toolCall2.function.name,
|
|
770
|
-
|
|
918
|
+
input: toolCall2.function.arguments
|
|
771
919
|
});
|
|
772
920
|
toolCall2.hasFinished = true;
|
|
773
921
|
}
|
|
@@ -778,23 +926,24 @@ var OpenAIChatLanguageModel = class {
|
|
|
778
926
|
if (toolCall.hasFinished) {
|
|
779
927
|
continue;
|
|
780
928
|
}
|
|
781
|
-
if (((
|
|
782
|
-
toolCall.function.arguments += (
|
|
929
|
+
if (((_r = toolCallDelta.function) == null ? void 0 : _r.arguments) != null) {
|
|
930
|
+
toolCall.function.arguments += (_t = (_s = toolCallDelta.function) == null ? void 0 : _s.arguments) != null ? _t : "";
|
|
783
931
|
}
|
|
784
932
|
controller.enqueue({
|
|
785
|
-
type: "tool-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
toolName: toolCall.function.name,
|
|
789
|
-
argsTextDelta: (_i = toolCallDelta.function.arguments) != null ? _i : ""
|
|
933
|
+
type: "tool-input-delta",
|
|
934
|
+
id: toolCall.id,
|
|
935
|
+
delta: (_u = toolCallDelta.function.arguments) != null ? _u : ""
|
|
790
936
|
});
|
|
791
|
-
if (((
|
|
937
|
+
if (((_v = toolCall.function) == null ? void 0 : _v.name) != null && ((_w = toolCall.function) == null ? void 0 : _w.arguments) != null && isParsableJson(toolCall.function.arguments)) {
|
|
938
|
+
controller.enqueue({
|
|
939
|
+
type: "tool-input-end",
|
|
940
|
+
id: toolCall.id
|
|
941
|
+
});
|
|
792
942
|
controller.enqueue({
|
|
793
943
|
type: "tool-call",
|
|
794
|
-
|
|
795
|
-
toolCallId: (_l = toolCall.id) != null ? _l : generateId(),
|
|
944
|
+
toolCallId: (_x = toolCall.id) != null ? _x : generateId(),
|
|
796
945
|
toolName: toolCall.function.name,
|
|
797
|
-
|
|
946
|
+
input: toolCall.function.arguments
|
|
798
947
|
});
|
|
799
948
|
toolCall.hasFinished = true;
|
|
800
949
|
}
|
|
@@ -802,10 +951,12 @@ var OpenAIChatLanguageModel = class {
|
|
|
802
951
|
}
|
|
803
952
|
},
|
|
804
953
|
flush(controller) {
|
|
954
|
+
if (isActiveText) {
|
|
955
|
+
controller.enqueue({ type: "text-end", id: "0" });
|
|
956
|
+
}
|
|
805
957
|
controller.enqueue({
|
|
806
958
|
type: "finish",
|
|
807
959
|
finishReason,
|
|
808
|
-
logprobs,
|
|
809
960
|
usage,
|
|
810
961
|
...providerMetadata != null ? { providerMetadata } : {}
|
|
811
962
|
});
|
|
@@ -817,96 +968,97 @@ var OpenAIChatLanguageModel = class {
|
|
|
817
968
|
};
|
|
818
969
|
}
|
|
819
970
|
};
|
|
820
|
-
var openaiTokenUsageSchema =
|
|
821
|
-
prompt_tokens:
|
|
822
|
-
completion_tokens:
|
|
823
|
-
|
|
824
|
-
|
|
971
|
+
var openaiTokenUsageSchema = z5.object({
|
|
972
|
+
prompt_tokens: z5.number().nullish(),
|
|
973
|
+
completion_tokens: z5.number().nullish(),
|
|
974
|
+
total_tokens: z5.number().nullish(),
|
|
975
|
+
prompt_tokens_details: z5.object({
|
|
976
|
+
cached_tokens: z5.number().nullish()
|
|
825
977
|
}).nullish(),
|
|
826
|
-
completion_tokens_details:
|
|
827
|
-
reasoning_tokens:
|
|
828
|
-
accepted_prediction_tokens:
|
|
829
|
-
rejected_prediction_tokens:
|
|
978
|
+
completion_tokens_details: z5.object({
|
|
979
|
+
reasoning_tokens: z5.number().nullish(),
|
|
980
|
+
accepted_prediction_tokens: z5.number().nullish(),
|
|
981
|
+
rejected_prediction_tokens: z5.number().nullish()
|
|
830
982
|
}).nullish()
|
|
831
983
|
}).nullish();
|
|
832
|
-
var openaiChatResponseSchema =
|
|
833
|
-
id:
|
|
834
|
-
created:
|
|
835
|
-
model:
|
|
836
|
-
choices:
|
|
837
|
-
|
|
838
|
-
message:
|
|
839
|
-
role:
|
|
840
|
-
content:
|
|
841
|
-
tool_calls:
|
|
842
|
-
|
|
843
|
-
id:
|
|
844
|
-
type:
|
|
845
|
-
function:
|
|
846
|
-
name:
|
|
847
|
-
arguments:
|
|
984
|
+
var openaiChatResponseSchema = z5.object({
|
|
985
|
+
id: z5.string().nullish(),
|
|
986
|
+
created: z5.number().nullish(),
|
|
987
|
+
model: z5.string().nullish(),
|
|
988
|
+
choices: z5.array(
|
|
989
|
+
z5.object({
|
|
990
|
+
message: z5.object({
|
|
991
|
+
role: z5.literal("assistant").nullish(),
|
|
992
|
+
content: z5.string().nullish(),
|
|
993
|
+
tool_calls: z5.array(
|
|
994
|
+
z5.object({
|
|
995
|
+
id: z5.string().nullish(),
|
|
996
|
+
type: z5.literal("function"),
|
|
997
|
+
function: z5.object({
|
|
998
|
+
name: z5.string(),
|
|
999
|
+
arguments: z5.string()
|
|
848
1000
|
})
|
|
849
1001
|
})
|
|
850
1002
|
).nullish()
|
|
851
1003
|
}),
|
|
852
|
-
index:
|
|
853
|
-
logprobs:
|
|
854
|
-
content:
|
|
855
|
-
|
|
856
|
-
token:
|
|
857
|
-
logprob:
|
|
858
|
-
top_logprobs:
|
|
859
|
-
|
|
860
|
-
token:
|
|
861
|
-
logprob:
|
|
1004
|
+
index: z5.number(),
|
|
1005
|
+
logprobs: z5.object({
|
|
1006
|
+
content: z5.array(
|
|
1007
|
+
z5.object({
|
|
1008
|
+
token: z5.string(),
|
|
1009
|
+
logprob: z5.number(),
|
|
1010
|
+
top_logprobs: z5.array(
|
|
1011
|
+
z5.object({
|
|
1012
|
+
token: z5.string(),
|
|
1013
|
+
logprob: z5.number()
|
|
862
1014
|
})
|
|
863
1015
|
)
|
|
864
1016
|
})
|
|
865
|
-
).
|
|
1017
|
+
).nullish()
|
|
866
1018
|
}).nullish(),
|
|
867
|
-
finish_reason:
|
|
1019
|
+
finish_reason: z5.string().nullish()
|
|
868
1020
|
})
|
|
869
1021
|
),
|
|
870
1022
|
usage: openaiTokenUsageSchema
|
|
871
1023
|
});
|
|
872
|
-
var openaiChatChunkSchema =
|
|
873
|
-
|
|
874
|
-
id:
|
|
875
|
-
created:
|
|
876
|
-
model:
|
|
877
|
-
choices:
|
|
878
|
-
|
|
879
|
-
delta:
|
|
880
|
-
role:
|
|
881
|
-
content:
|
|
882
|
-
tool_calls:
|
|
883
|
-
|
|
884
|
-
index:
|
|
885
|
-
id:
|
|
886
|
-
type:
|
|
887
|
-
function:
|
|
888
|
-
name:
|
|
889
|
-
arguments:
|
|
1024
|
+
var openaiChatChunkSchema = z5.union([
|
|
1025
|
+
z5.object({
|
|
1026
|
+
id: z5.string().nullish(),
|
|
1027
|
+
created: z5.number().nullish(),
|
|
1028
|
+
model: z5.string().nullish(),
|
|
1029
|
+
choices: z5.array(
|
|
1030
|
+
z5.object({
|
|
1031
|
+
delta: z5.object({
|
|
1032
|
+
role: z5.enum(["assistant"]).nullish(),
|
|
1033
|
+
content: z5.string().nullish(),
|
|
1034
|
+
tool_calls: z5.array(
|
|
1035
|
+
z5.object({
|
|
1036
|
+
index: z5.number(),
|
|
1037
|
+
id: z5.string().nullish(),
|
|
1038
|
+
type: z5.literal("function").nullish(),
|
|
1039
|
+
function: z5.object({
|
|
1040
|
+
name: z5.string().nullish(),
|
|
1041
|
+
arguments: z5.string().nullish()
|
|
890
1042
|
})
|
|
891
1043
|
})
|
|
892
1044
|
).nullish()
|
|
893
1045
|
}).nullish(),
|
|
894
|
-
logprobs:
|
|
895
|
-
content:
|
|
896
|
-
|
|
897
|
-
token:
|
|
898
|
-
logprob:
|
|
899
|
-
top_logprobs:
|
|
900
|
-
|
|
901
|
-
token:
|
|
902
|
-
logprob:
|
|
1046
|
+
logprobs: z5.object({
|
|
1047
|
+
content: z5.array(
|
|
1048
|
+
z5.object({
|
|
1049
|
+
token: z5.string(),
|
|
1050
|
+
logprob: z5.number(),
|
|
1051
|
+
top_logprobs: z5.array(
|
|
1052
|
+
z5.object({
|
|
1053
|
+
token: z5.string(),
|
|
1054
|
+
logprob: z5.number()
|
|
903
1055
|
})
|
|
904
1056
|
)
|
|
905
1057
|
})
|
|
906
|
-
).
|
|
1058
|
+
).nullish()
|
|
907
1059
|
}).nullish(),
|
|
908
|
-
finish_reason:
|
|
909
|
-
index:
|
|
1060
|
+
finish_reason: z5.string().nullish(),
|
|
1061
|
+
index: z5.number()
|
|
910
1062
|
})
|
|
911
1063
|
),
|
|
912
1064
|
usage: openaiTokenUsageSchema
|
|
@@ -914,10 +1066,13 @@ var openaiChatChunkSchema = z3.union([
|
|
|
914
1066
|
openaiErrorDataSchema
|
|
915
1067
|
]);
|
|
916
1068
|
function isReasoningModel(modelId) {
|
|
917
|
-
return modelId
|
|
1069
|
+
return modelId.startsWith("o");
|
|
1070
|
+
}
|
|
1071
|
+
function supportsFlexProcessing(modelId) {
|
|
1072
|
+
return modelId.startsWith("o3") || modelId.startsWith("o4-mini");
|
|
918
1073
|
}
|
|
919
|
-
function
|
|
920
|
-
return modelId.startsWith("gpt-
|
|
1074
|
+
function supportsPriorityProcessing(modelId) {
|
|
1075
|
+
return modelId.startsWith("gpt-4") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
|
|
921
1076
|
}
|
|
922
1077
|
function getSystemMessageMode(modelId) {
|
|
923
1078
|
var _a, _b;
|
|
@@ -939,11 +1094,23 @@ var reasoningModels = {
|
|
|
939
1094
|
"o1-preview-2024-09-12": {
|
|
940
1095
|
systemMessageMode: "remove"
|
|
941
1096
|
},
|
|
1097
|
+
o3: {
|
|
1098
|
+
systemMessageMode: "developer"
|
|
1099
|
+
},
|
|
1100
|
+
"o3-2025-04-16": {
|
|
1101
|
+
systemMessageMode: "developer"
|
|
1102
|
+
},
|
|
942
1103
|
"o3-mini": {
|
|
943
1104
|
systemMessageMode: "developer"
|
|
944
1105
|
},
|
|
945
1106
|
"o3-mini-2025-01-31": {
|
|
946
1107
|
systemMessageMode: "developer"
|
|
1108
|
+
},
|
|
1109
|
+
"o4-mini": {
|
|
1110
|
+
systemMessageMode: "developer"
|
|
1111
|
+
},
|
|
1112
|
+
"o4-mini-2025-04-16": {
|
|
1113
|
+
systemMessageMode: "developer"
|
|
947
1114
|
}
|
|
948
1115
|
};
|
|
949
1116
|
|
|
@@ -952,9 +1119,10 @@ import {
|
|
|
952
1119
|
combineHeaders as combineHeaders2,
|
|
953
1120
|
createEventSourceResponseHandler as createEventSourceResponseHandler2,
|
|
954
1121
|
createJsonResponseHandler as createJsonResponseHandler2,
|
|
1122
|
+
parseProviderOptions as parseProviderOptions2,
|
|
955
1123
|
postJsonToApi as postJsonToApi2
|
|
956
1124
|
} from "@ai-sdk/provider-utils";
|
|
957
|
-
import { z as
|
|
1125
|
+
import { z as z7 } from "zod/v4";
|
|
958
1126
|
|
|
959
1127
|
// src/convert-to-openai-completion-prompt.ts
|
|
960
1128
|
import {
|
|
@@ -963,13 +1131,9 @@ import {
|
|
|
963
1131
|
} from "@ai-sdk/provider";
|
|
964
1132
|
function convertToOpenAICompletionPrompt({
|
|
965
1133
|
prompt,
|
|
966
|
-
inputFormat,
|
|
967
1134
|
user = "user",
|
|
968
1135
|
assistant = "assistant"
|
|
969
1136
|
}) {
|
|
970
|
-
if (inputFormat === "prompt" && prompt.length === 1 && prompt[0].role === "user" && prompt[0].content.length === 1 && prompt[0].content[0].type === "text") {
|
|
971
|
-
return { prompt: prompt[0].content[0].text };
|
|
972
|
-
}
|
|
973
1137
|
let text = "";
|
|
974
1138
|
if (prompt[0].role === "system") {
|
|
975
1139
|
text += `${prompt[0].content}
|
|
@@ -1038,34 +1202,66 @@ ${user}:`]
|
|
|
1038
1202
|
};
|
|
1039
1203
|
}
|
|
1040
1204
|
|
|
1041
|
-
// src/
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1205
|
+
// src/openai-completion-options.ts
|
|
1206
|
+
import { z as z6 } from "zod/v4";
|
|
1207
|
+
var openaiCompletionProviderOptions = z6.object({
|
|
1208
|
+
/**
|
|
1209
|
+
Echo back the prompt in addition to the completion.
|
|
1210
|
+
*/
|
|
1211
|
+
echo: z6.boolean().optional(),
|
|
1212
|
+
/**
|
|
1213
|
+
Modify the likelihood of specified tokens appearing in the completion.
|
|
1214
|
+
|
|
1215
|
+
Accepts a JSON object that maps tokens (specified by their token ID in
|
|
1216
|
+
the GPT tokenizer) to an associated bias value from -100 to 100. You
|
|
1217
|
+
can use this tokenizer tool to convert text to token IDs. Mathematically,
|
|
1218
|
+
the bias is added to the logits generated by the model prior to sampling.
|
|
1219
|
+
The exact effect will vary per model, but values between -1 and 1 should
|
|
1220
|
+
decrease or increase likelihood of selection; values like -100 or 100
|
|
1221
|
+
should result in a ban or exclusive selection of the relevant token.
|
|
1222
|
+
|
|
1223
|
+
As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
|
|
1224
|
+
token from being generated.
|
|
1225
|
+
*/
|
|
1226
|
+
logitBias: z6.record(z6.string(), z6.number()).optional(),
|
|
1227
|
+
/**
|
|
1228
|
+
The suffix that comes after a completion of inserted text.
|
|
1229
|
+
*/
|
|
1230
|
+
suffix: z6.string().optional(),
|
|
1231
|
+
/**
|
|
1232
|
+
A unique identifier representing your end-user, which can help OpenAI to
|
|
1233
|
+
monitor and detect abuse. Learn more.
|
|
1234
|
+
*/
|
|
1235
|
+
user: z6.string().optional(),
|
|
1236
|
+
/**
|
|
1237
|
+
Return the log probabilities of the tokens. Including logprobs will increase
|
|
1238
|
+
the response size and can slow down response times. However, it can
|
|
1239
|
+
be useful to better understand how the model is behaving.
|
|
1240
|
+
Setting to true will return the log probabilities of the tokens that
|
|
1241
|
+
were generated.
|
|
1242
|
+
Setting to a number will return the log probabilities of the top n
|
|
1243
|
+
tokens that were generated.
|
|
1244
|
+
*/
|
|
1245
|
+
logprobs: z6.union([z6.boolean(), z6.number()]).optional()
|
|
1246
|
+
});
|
|
1054
1247
|
|
|
1055
1248
|
// src/openai-completion-language-model.ts
|
|
1056
1249
|
var OpenAICompletionLanguageModel = class {
|
|
1057
|
-
constructor(modelId,
|
|
1250
|
+
constructor(modelId, config) {
|
|
1058
1251
|
this.specificationVersion = "v2";
|
|
1059
|
-
this.
|
|
1252
|
+
this.supportedUrls = {
|
|
1253
|
+
// No URLs are supported for completion models.
|
|
1254
|
+
};
|
|
1060
1255
|
this.modelId = modelId;
|
|
1061
|
-
this.settings = settings;
|
|
1062
1256
|
this.config = config;
|
|
1063
1257
|
}
|
|
1258
|
+
get providerOptionsName() {
|
|
1259
|
+
return this.config.provider.split(".")[0].trim();
|
|
1260
|
+
}
|
|
1064
1261
|
get provider() {
|
|
1065
1262
|
return this.config.provider;
|
|
1066
1263
|
}
|
|
1067
|
-
getArgs({
|
|
1068
|
-
inputFormat,
|
|
1264
|
+
async getArgs({
|
|
1069
1265
|
prompt,
|
|
1070
1266
|
maxOutputTokens,
|
|
1071
1267
|
temperature,
|
|
@@ -1077,9 +1273,22 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1077
1273
|
responseFormat,
|
|
1078
1274
|
tools,
|
|
1079
1275
|
toolChoice,
|
|
1080
|
-
seed
|
|
1276
|
+
seed,
|
|
1277
|
+
providerOptions
|
|
1081
1278
|
}) {
|
|
1082
1279
|
const warnings = [];
|
|
1280
|
+
const openaiOptions = {
|
|
1281
|
+
...await parseProviderOptions2({
|
|
1282
|
+
provider: "openai",
|
|
1283
|
+
providerOptions,
|
|
1284
|
+
schema: openaiCompletionProviderOptions
|
|
1285
|
+
}),
|
|
1286
|
+
...await parseProviderOptions2({
|
|
1287
|
+
provider: this.providerOptionsName,
|
|
1288
|
+
providerOptions,
|
|
1289
|
+
schema: openaiCompletionProviderOptions
|
|
1290
|
+
})
|
|
1291
|
+
};
|
|
1083
1292
|
if (topK != null) {
|
|
1084
1293
|
warnings.push({ type: "unsupported-setting", setting: "topK" });
|
|
1085
1294
|
}
|
|
@@ -1096,18 +1305,18 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1096
1305
|
details: "JSON response format is not supported."
|
|
1097
1306
|
});
|
|
1098
1307
|
}
|
|
1099
|
-
const { prompt: completionPrompt, stopSequences } = convertToOpenAICompletionPrompt({ prompt
|
|
1308
|
+
const { prompt: completionPrompt, stopSequences } = convertToOpenAICompletionPrompt({ prompt });
|
|
1100
1309
|
const stop = [...stopSequences != null ? stopSequences : [], ...userStopSequences != null ? userStopSequences : []];
|
|
1101
1310
|
return {
|
|
1102
1311
|
args: {
|
|
1103
1312
|
// model id:
|
|
1104
1313
|
model: this.modelId,
|
|
1105
1314
|
// model specific settings:
|
|
1106
|
-
echo:
|
|
1107
|
-
logit_bias:
|
|
1108
|
-
logprobs:
|
|
1109
|
-
suffix:
|
|
1110
|
-
user:
|
|
1315
|
+
echo: openaiOptions.echo,
|
|
1316
|
+
logit_bias: openaiOptions.logitBias,
|
|
1317
|
+
logprobs: (openaiOptions == null ? void 0 : openaiOptions.logprobs) === true ? 0 : (openaiOptions == null ? void 0 : openaiOptions.logprobs) === false ? void 0 : openaiOptions == null ? void 0 : openaiOptions.logprobs,
|
|
1318
|
+
suffix: openaiOptions.suffix,
|
|
1319
|
+
user: openaiOptions.user,
|
|
1111
1320
|
// standardized settings:
|
|
1112
1321
|
max_tokens: maxOutputTokens,
|
|
1113
1322
|
temperature,
|
|
@@ -1124,7 +1333,8 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1124
1333
|
};
|
|
1125
1334
|
}
|
|
1126
1335
|
async doGenerate(options) {
|
|
1127
|
-
|
|
1336
|
+
var _a, _b, _c;
|
|
1337
|
+
const { args, warnings } = await this.getArgs(options);
|
|
1128
1338
|
const {
|
|
1129
1339
|
responseHeaders,
|
|
1130
1340
|
value: response,
|
|
@@ -1144,30 +1354,36 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1144
1354
|
fetch: this.config.fetch
|
|
1145
1355
|
});
|
|
1146
1356
|
const choice = response.choices[0];
|
|
1357
|
+
const providerMetadata = { openai: {} };
|
|
1358
|
+
if (choice.logprobs != null) {
|
|
1359
|
+
providerMetadata.openai.logprobs = choice.logprobs;
|
|
1360
|
+
}
|
|
1147
1361
|
return {
|
|
1148
1362
|
content: [{ type: "text", text: choice.text }],
|
|
1149
1363
|
usage: {
|
|
1150
|
-
inputTokens: response.usage.prompt_tokens,
|
|
1151
|
-
outputTokens: response.usage.completion_tokens
|
|
1364
|
+
inputTokens: (_a = response.usage) == null ? void 0 : _a.prompt_tokens,
|
|
1365
|
+
outputTokens: (_b = response.usage) == null ? void 0 : _b.completion_tokens,
|
|
1366
|
+
totalTokens: (_c = response.usage) == null ? void 0 : _c.total_tokens
|
|
1152
1367
|
},
|
|
1153
1368
|
finishReason: mapOpenAIFinishReason(choice.finish_reason),
|
|
1154
|
-
logprobs: mapOpenAICompletionLogProbs(choice.logprobs),
|
|
1155
1369
|
request: { body: args },
|
|
1156
1370
|
response: {
|
|
1157
1371
|
...getResponseMetadata(response),
|
|
1158
1372
|
headers: responseHeaders,
|
|
1159
1373
|
body: rawResponse
|
|
1160
1374
|
},
|
|
1375
|
+
providerMetadata,
|
|
1161
1376
|
warnings
|
|
1162
1377
|
};
|
|
1163
1378
|
}
|
|
1164
1379
|
async doStream(options) {
|
|
1165
|
-
const { args, warnings } = this.getArgs(options);
|
|
1380
|
+
const { args, warnings } = await this.getArgs(options);
|
|
1166
1381
|
const body = {
|
|
1167
1382
|
...args,
|
|
1168
1383
|
stream: true,
|
|
1169
|
-
|
|
1170
|
-
|
|
1384
|
+
stream_options: {
|
|
1385
|
+
include_usage: true
|
|
1386
|
+
}
|
|
1171
1387
|
};
|
|
1172
1388
|
const { responseHeaders, value: response } = await postJsonToApi2({
|
|
1173
1389
|
url: this.config.url({
|
|
@@ -1184,11 +1400,12 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1184
1400
|
fetch: this.config.fetch
|
|
1185
1401
|
});
|
|
1186
1402
|
let finishReason = "unknown";
|
|
1403
|
+
const providerMetadata = { openai: {} };
|
|
1187
1404
|
const usage = {
|
|
1188
1405
|
inputTokens: void 0,
|
|
1189
|
-
outputTokens: void 0
|
|
1406
|
+
outputTokens: void 0,
|
|
1407
|
+
totalTokens: void 0
|
|
1190
1408
|
};
|
|
1191
|
-
let logprobs;
|
|
1192
1409
|
let isFirstChunk = true;
|
|
1193
1410
|
return {
|
|
1194
1411
|
stream: response.pipeThrough(
|
|
@@ -1197,6 +1414,9 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1197
1414
|
controller.enqueue({ type: "stream-start", warnings });
|
|
1198
1415
|
},
|
|
1199
1416
|
transform(chunk, controller) {
|
|
1417
|
+
if (options.includeRawChunks) {
|
|
1418
|
+
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
1419
|
+
}
|
|
1200
1420
|
if (!chunk.success) {
|
|
1201
1421
|
finishReason = "error";
|
|
1202
1422
|
controller.enqueue({ type: "error", error: chunk.error });
|
|
@@ -1214,34 +1434,36 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1214
1434
|
type: "response-metadata",
|
|
1215
1435
|
...getResponseMetadata(value)
|
|
1216
1436
|
});
|
|
1437
|
+
controller.enqueue({ type: "text-start", id: "0" });
|
|
1217
1438
|
}
|
|
1218
1439
|
if (value.usage != null) {
|
|
1219
1440
|
usage.inputTokens = value.usage.prompt_tokens;
|
|
1220
1441
|
usage.outputTokens = value.usage.completion_tokens;
|
|
1442
|
+
usage.totalTokens = value.usage.total_tokens;
|
|
1221
1443
|
}
|
|
1222
1444
|
const choice = value.choices[0];
|
|
1223
1445
|
if ((choice == null ? void 0 : choice.finish_reason) != null) {
|
|
1224
1446
|
finishReason = mapOpenAIFinishReason(choice.finish_reason);
|
|
1225
1447
|
}
|
|
1226
|
-
if ((choice == null ? void 0 : choice.
|
|
1448
|
+
if ((choice == null ? void 0 : choice.logprobs) != null) {
|
|
1449
|
+
providerMetadata.openai.logprobs = choice.logprobs;
|
|
1450
|
+
}
|
|
1451
|
+
if ((choice == null ? void 0 : choice.text) != null && choice.text.length > 0) {
|
|
1227
1452
|
controller.enqueue({
|
|
1228
|
-
type: "text",
|
|
1229
|
-
|
|
1453
|
+
type: "text-delta",
|
|
1454
|
+
id: "0",
|
|
1455
|
+
delta: choice.text
|
|
1230
1456
|
});
|
|
1231
1457
|
}
|
|
1232
|
-
const mappedLogprobs = mapOpenAICompletionLogProbs(
|
|
1233
|
-
choice == null ? void 0 : choice.logprobs
|
|
1234
|
-
);
|
|
1235
|
-
if (mappedLogprobs == null ? void 0 : mappedLogprobs.length) {
|
|
1236
|
-
if (logprobs === void 0) logprobs = [];
|
|
1237
|
-
logprobs.push(...mappedLogprobs);
|
|
1238
|
-
}
|
|
1239
1458
|
},
|
|
1240
1459
|
flush(controller) {
|
|
1460
|
+
if (!isFirstChunk) {
|
|
1461
|
+
controller.enqueue({ type: "text-end", id: "0" });
|
|
1462
|
+
}
|
|
1241
1463
|
controller.enqueue({
|
|
1242
1464
|
type: "finish",
|
|
1243
1465
|
finishReason,
|
|
1244
|
-
|
|
1466
|
+
providerMetadata,
|
|
1245
1467
|
usage
|
|
1246
1468
|
});
|
|
1247
1469
|
}
|
|
@@ -1252,47 +1474,46 @@ var OpenAICompletionLanguageModel = class {
|
|
|
1252
1474
|
};
|
|
1253
1475
|
}
|
|
1254
1476
|
};
|
|
1255
|
-
var
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1477
|
+
var usageSchema = z7.object({
|
|
1478
|
+
prompt_tokens: z7.number(),
|
|
1479
|
+
completion_tokens: z7.number(),
|
|
1480
|
+
total_tokens: z7.number()
|
|
1481
|
+
});
|
|
1482
|
+
var openaiCompletionResponseSchema = z7.object({
|
|
1483
|
+
id: z7.string().nullish(),
|
|
1484
|
+
created: z7.number().nullish(),
|
|
1485
|
+
model: z7.string().nullish(),
|
|
1486
|
+
choices: z7.array(
|
|
1487
|
+
z7.object({
|
|
1488
|
+
text: z7.string(),
|
|
1489
|
+
finish_reason: z7.string(),
|
|
1490
|
+
logprobs: z7.object({
|
|
1491
|
+
tokens: z7.array(z7.string()),
|
|
1492
|
+
token_logprobs: z7.array(z7.number()),
|
|
1493
|
+
top_logprobs: z7.array(z7.record(z7.string(), z7.number())).nullish()
|
|
1267
1494
|
}).nullish()
|
|
1268
1495
|
})
|
|
1269
1496
|
),
|
|
1270
|
-
usage:
|
|
1271
|
-
prompt_tokens: z4.number(),
|
|
1272
|
-
completion_tokens: z4.number()
|
|
1273
|
-
})
|
|
1497
|
+
usage: usageSchema.nullish()
|
|
1274
1498
|
});
|
|
1275
|
-
var openaiCompletionChunkSchema =
|
|
1276
|
-
|
|
1277
|
-
id:
|
|
1278
|
-
created:
|
|
1279
|
-
model:
|
|
1280
|
-
choices:
|
|
1281
|
-
|
|
1282
|
-
text:
|
|
1283
|
-
finish_reason:
|
|
1284
|
-
index:
|
|
1285
|
-
logprobs:
|
|
1286
|
-
tokens:
|
|
1287
|
-
token_logprobs:
|
|
1288
|
-
top_logprobs:
|
|
1499
|
+
var openaiCompletionChunkSchema = z7.union([
|
|
1500
|
+
z7.object({
|
|
1501
|
+
id: z7.string().nullish(),
|
|
1502
|
+
created: z7.number().nullish(),
|
|
1503
|
+
model: z7.string().nullish(),
|
|
1504
|
+
choices: z7.array(
|
|
1505
|
+
z7.object({
|
|
1506
|
+
text: z7.string(),
|
|
1507
|
+
finish_reason: z7.string().nullish(),
|
|
1508
|
+
index: z7.number(),
|
|
1509
|
+
logprobs: z7.object({
|
|
1510
|
+
tokens: z7.array(z7.string()),
|
|
1511
|
+
token_logprobs: z7.array(z7.number()),
|
|
1512
|
+
top_logprobs: z7.array(z7.record(z7.string(), z7.number())).nullish()
|
|
1289
1513
|
}).nullish()
|
|
1290
1514
|
})
|
|
1291
1515
|
),
|
|
1292
|
-
usage:
|
|
1293
|
-
prompt_tokens: z4.number(),
|
|
1294
|
-
completion_tokens: z4.number()
|
|
1295
|
-
}).nullish()
|
|
1516
|
+
usage: usageSchema.nullish()
|
|
1296
1517
|
}),
|
|
1297
1518
|
openaiErrorDataSchema
|
|
1298
1519
|
]);
|
|
@@ -1304,32 +1525,45 @@ import {
|
|
|
1304
1525
|
import {
|
|
1305
1526
|
combineHeaders as combineHeaders3,
|
|
1306
1527
|
createJsonResponseHandler as createJsonResponseHandler3,
|
|
1528
|
+
parseProviderOptions as parseProviderOptions3,
|
|
1307
1529
|
postJsonToApi as postJsonToApi3
|
|
1308
1530
|
} from "@ai-sdk/provider-utils";
|
|
1309
|
-
import { z as
|
|
1531
|
+
import { z as z9 } from "zod/v4";
|
|
1532
|
+
|
|
1533
|
+
// src/openai-embedding-options.ts
|
|
1534
|
+
import { z as z8 } from "zod/v4";
|
|
1535
|
+
var openaiEmbeddingProviderOptions = z8.object({
|
|
1536
|
+
/**
|
|
1537
|
+
The number of dimensions the resulting output embeddings should have.
|
|
1538
|
+
Only supported in text-embedding-3 and later models.
|
|
1539
|
+
*/
|
|
1540
|
+
dimensions: z8.number().optional(),
|
|
1541
|
+
/**
|
|
1542
|
+
A unique identifier representing your end-user, which can help OpenAI to
|
|
1543
|
+
monitor and detect abuse. Learn more.
|
|
1544
|
+
*/
|
|
1545
|
+
user: z8.string().optional()
|
|
1546
|
+
});
|
|
1547
|
+
|
|
1548
|
+
// src/openai-embedding-model.ts
|
|
1310
1549
|
var OpenAIEmbeddingModel = class {
|
|
1311
|
-
constructor(modelId,
|
|
1550
|
+
constructor(modelId, config) {
|
|
1312
1551
|
this.specificationVersion = "v2";
|
|
1552
|
+
this.maxEmbeddingsPerCall = 2048;
|
|
1553
|
+
this.supportsParallelCalls = true;
|
|
1313
1554
|
this.modelId = modelId;
|
|
1314
|
-
this.settings = settings;
|
|
1315
1555
|
this.config = config;
|
|
1316
1556
|
}
|
|
1317
1557
|
get provider() {
|
|
1318
1558
|
return this.config.provider;
|
|
1319
1559
|
}
|
|
1320
|
-
get maxEmbeddingsPerCall() {
|
|
1321
|
-
var _a;
|
|
1322
|
-
return (_a = this.settings.maxEmbeddingsPerCall) != null ? _a : 2048;
|
|
1323
|
-
}
|
|
1324
|
-
get supportsParallelCalls() {
|
|
1325
|
-
var _a;
|
|
1326
|
-
return (_a = this.settings.supportsParallelCalls) != null ? _a : true;
|
|
1327
|
-
}
|
|
1328
1560
|
async doEmbed({
|
|
1329
1561
|
values,
|
|
1330
1562
|
headers,
|
|
1331
|
-
abortSignal
|
|
1563
|
+
abortSignal,
|
|
1564
|
+
providerOptions
|
|
1332
1565
|
}) {
|
|
1566
|
+
var _a;
|
|
1333
1567
|
if (values.length > this.maxEmbeddingsPerCall) {
|
|
1334
1568
|
throw new TooManyEmbeddingValuesForCallError({
|
|
1335
1569
|
provider: this.provider,
|
|
@@ -1338,6 +1572,11 @@ var OpenAIEmbeddingModel = class {
|
|
|
1338
1572
|
values
|
|
1339
1573
|
});
|
|
1340
1574
|
}
|
|
1575
|
+
const openaiOptions = (_a = await parseProviderOptions3({
|
|
1576
|
+
provider: "openai",
|
|
1577
|
+
providerOptions,
|
|
1578
|
+
schema: openaiEmbeddingProviderOptions
|
|
1579
|
+
})) != null ? _a : {};
|
|
1341
1580
|
const {
|
|
1342
1581
|
responseHeaders,
|
|
1343
1582
|
value: response,
|
|
@@ -1352,8 +1591,8 @@ var OpenAIEmbeddingModel = class {
|
|
|
1352
1591
|
model: this.modelId,
|
|
1353
1592
|
input: values,
|
|
1354
1593
|
encoding_format: "float",
|
|
1355
|
-
dimensions:
|
|
1356
|
-
user:
|
|
1594
|
+
dimensions: openaiOptions.dimensions,
|
|
1595
|
+
user: openaiOptions.user
|
|
1357
1596
|
},
|
|
1358
1597
|
failedResponseHandler: openaiFailedResponseHandler,
|
|
1359
1598
|
successfulResponseHandler: createJsonResponseHandler3(
|
|
@@ -1369,9 +1608,9 @@ var OpenAIEmbeddingModel = class {
|
|
|
1369
1608
|
};
|
|
1370
1609
|
}
|
|
1371
1610
|
};
|
|
1372
|
-
var openaiTextEmbeddingResponseSchema =
|
|
1373
|
-
data:
|
|
1374
|
-
usage:
|
|
1611
|
+
var openaiTextEmbeddingResponseSchema = z9.object({
|
|
1612
|
+
data: z9.array(z9.object({ embedding: z9.array(z9.number()) })),
|
|
1613
|
+
usage: z9.object({ prompt_tokens: z9.number() }).nullish()
|
|
1375
1614
|
});
|
|
1376
1615
|
|
|
1377
1616
|
// src/openai-image-model.ts
|
|
@@ -1380,25 +1619,26 @@ import {
|
|
|
1380
1619
|
createJsonResponseHandler as createJsonResponseHandler4,
|
|
1381
1620
|
postJsonToApi as postJsonToApi4
|
|
1382
1621
|
} from "@ai-sdk/provider-utils";
|
|
1383
|
-
import { z as
|
|
1622
|
+
import { z as z10 } from "zod/v4";
|
|
1384
1623
|
|
|
1385
1624
|
// src/openai-image-settings.ts
|
|
1386
1625
|
var modelMaxImagesPerCall = {
|
|
1387
1626
|
"dall-e-3": 1,
|
|
1388
|
-
"dall-e-2": 10
|
|
1627
|
+
"dall-e-2": 10,
|
|
1628
|
+
"gpt-image-1": 10
|
|
1389
1629
|
};
|
|
1630
|
+
var hasDefaultResponseFormat = /* @__PURE__ */ new Set(["gpt-image-1"]);
|
|
1390
1631
|
|
|
1391
1632
|
// src/openai-image-model.ts
|
|
1392
1633
|
var OpenAIImageModel = class {
|
|
1393
|
-
constructor(modelId,
|
|
1634
|
+
constructor(modelId, config) {
|
|
1394
1635
|
this.modelId = modelId;
|
|
1395
|
-
this.settings = settings;
|
|
1396
1636
|
this.config = config;
|
|
1397
|
-
this.specificationVersion = "
|
|
1637
|
+
this.specificationVersion = "v2";
|
|
1398
1638
|
}
|
|
1399
1639
|
get maxImagesPerCall() {
|
|
1400
|
-
var _a
|
|
1401
|
-
return (
|
|
1640
|
+
var _a;
|
|
1641
|
+
return (_a = modelMaxImagesPerCall[this.modelId]) != null ? _a : 1;
|
|
1402
1642
|
}
|
|
1403
1643
|
get provider() {
|
|
1404
1644
|
return this.config.provider;
|
|
@@ -1438,7 +1678,7 @@ var OpenAIImageModel = class {
|
|
|
1438
1678
|
n,
|
|
1439
1679
|
size,
|
|
1440
1680
|
...(_d = providerOptions.openai) != null ? _d : {},
|
|
1441
|
-
response_format: "b64_json"
|
|
1681
|
+
...!hasDefaultResponseFormat.has(this.modelId) ? { response_format: "b64_json" } : {}
|
|
1442
1682
|
},
|
|
1443
1683
|
failedResponseHandler: openaiFailedResponseHandler,
|
|
1444
1684
|
successfulResponseHandler: createJsonResponseHandler4(
|
|
@@ -1454,33 +1694,29 @@ var OpenAIImageModel = class {
|
|
|
1454
1694
|
timestamp: currentDate,
|
|
1455
1695
|
modelId: this.modelId,
|
|
1456
1696
|
headers: responseHeaders
|
|
1697
|
+
},
|
|
1698
|
+
providerMetadata: {
|
|
1699
|
+
openai: {
|
|
1700
|
+
images: response.data.map(
|
|
1701
|
+
(item) => item.revised_prompt ? {
|
|
1702
|
+
revisedPrompt: item.revised_prompt
|
|
1703
|
+
} : null
|
|
1704
|
+
)
|
|
1705
|
+
}
|
|
1457
1706
|
}
|
|
1458
1707
|
};
|
|
1459
1708
|
}
|
|
1460
1709
|
};
|
|
1461
|
-
var openaiImageResponseSchema =
|
|
1462
|
-
data:
|
|
1710
|
+
var openaiImageResponseSchema = z10.object({
|
|
1711
|
+
data: z10.array(
|
|
1712
|
+
z10.object({ b64_json: z10.string(), revised_prompt: z10.string().optional() })
|
|
1713
|
+
)
|
|
1463
1714
|
});
|
|
1464
1715
|
|
|
1465
1716
|
// src/openai-tools.ts
|
|
1466
|
-
import { z as z7 } from "zod";
|
|
1467
|
-
var WebSearchPreviewParameters = z7.object({});
|
|
1468
|
-
function webSearchPreviewTool({
|
|
1469
|
-
searchContextSize,
|
|
1470
|
-
userLocation
|
|
1471
|
-
} = {}) {
|
|
1472
|
-
return {
|
|
1473
|
-
type: "provider-defined",
|
|
1474
|
-
id: "openai.web_search_preview",
|
|
1475
|
-
args: {
|
|
1476
|
-
searchContextSize,
|
|
1477
|
-
userLocation
|
|
1478
|
-
},
|
|
1479
|
-
parameters: WebSearchPreviewParameters
|
|
1480
|
-
};
|
|
1481
|
-
}
|
|
1482
1717
|
var openaiTools = {
|
|
1483
|
-
|
|
1718
|
+
fileSearch,
|
|
1719
|
+
webSearchPreview
|
|
1484
1720
|
};
|
|
1485
1721
|
|
|
1486
1722
|
// src/openai-transcription-model.ts
|
|
@@ -1488,17 +1724,39 @@ import {
|
|
|
1488
1724
|
combineHeaders as combineHeaders5,
|
|
1489
1725
|
convertBase64ToUint8Array,
|
|
1490
1726
|
createJsonResponseHandler as createJsonResponseHandler5,
|
|
1491
|
-
parseProviderOptions as
|
|
1727
|
+
parseProviderOptions as parseProviderOptions4,
|
|
1492
1728
|
postFormDataToApi
|
|
1493
1729
|
} from "@ai-sdk/provider-utils";
|
|
1494
|
-
import { z as
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1730
|
+
import { z as z12 } from "zod/v4";
|
|
1731
|
+
|
|
1732
|
+
// src/openai-transcription-options.ts
|
|
1733
|
+
import { z as z11 } from "zod/v4";
|
|
1734
|
+
var openAITranscriptionProviderOptions = z11.object({
|
|
1735
|
+
/**
|
|
1736
|
+
* Additional information to include in the transcription response.
|
|
1737
|
+
*/
|
|
1738
|
+
include: z11.array(z11.string()).optional(),
|
|
1739
|
+
/**
|
|
1740
|
+
* The language of the input audio in ISO-639-1 format.
|
|
1741
|
+
*/
|
|
1742
|
+
language: z11.string().optional(),
|
|
1743
|
+
/**
|
|
1744
|
+
* An optional text to guide the model's style or continue a previous audio segment.
|
|
1745
|
+
*/
|
|
1746
|
+
prompt: z11.string().optional(),
|
|
1747
|
+
/**
|
|
1748
|
+
* The sampling temperature, between 0 and 1.
|
|
1749
|
+
* @default 0
|
|
1750
|
+
*/
|
|
1751
|
+
temperature: z11.number().min(0).max(1).default(0).optional(),
|
|
1752
|
+
/**
|
|
1753
|
+
* The timestamp granularities to populate for this transcription.
|
|
1754
|
+
* @default ['segment']
|
|
1755
|
+
*/
|
|
1756
|
+
timestampGranularities: z11.array(z11.enum(["word", "segment"])).default(["segment"]).optional()
|
|
1501
1757
|
});
|
|
1758
|
+
|
|
1759
|
+
// src/openai-transcription-model.ts
|
|
1502
1760
|
var languageMap = {
|
|
1503
1761
|
afrikaans: "af",
|
|
1504
1762
|
arabic: "ar",
|
|
@@ -1562,22 +1820,21 @@ var OpenAITranscriptionModel = class {
|
|
|
1562
1820
|
constructor(modelId, config) {
|
|
1563
1821
|
this.modelId = modelId;
|
|
1564
1822
|
this.config = config;
|
|
1565
|
-
this.specificationVersion = "
|
|
1823
|
+
this.specificationVersion = "v2";
|
|
1566
1824
|
}
|
|
1567
1825
|
get provider() {
|
|
1568
1826
|
return this.config.provider;
|
|
1569
1827
|
}
|
|
1570
|
-
getArgs({
|
|
1828
|
+
async getArgs({
|
|
1571
1829
|
audio,
|
|
1572
1830
|
mediaType,
|
|
1573
1831
|
providerOptions
|
|
1574
1832
|
}) {
|
|
1575
|
-
var _a, _b, _c, _d, _e;
|
|
1576
1833
|
const warnings = [];
|
|
1577
|
-
const openAIOptions =
|
|
1834
|
+
const openAIOptions = await parseProviderOptions4({
|
|
1578
1835
|
provider: "openai",
|
|
1579
1836
|
providerOptions,
|
|
1580
|
-
schema:
|
|
1837
|
+
schema: openAITranscriptionProviderOptions
|
|
1581
1838
|
});
|
|
1582
1839
|
const formData = new FormData();
|
|
1583
1840
|
const blob = audio instanceof Uint8Array ? new Blob([audio]) : new Blob([convertBase64ToUint8Array(audio)]);
|
|
@@ -1585,15 +1842,14 @@ var OpenAITranscriptionModel = class {
|
|
|
1585
1842
|
formData.append("file", new File([blob], "audio", { type: mediaType }));
|
|
1586
1843
|
if (openAIOptions) {
|
|
1587
1844
|
const transcriptionModelOptions = {
|
|
1588
|
-
include:
|
|
1589
|
-
language:
|
|
1590
|
-
prompt:
|
|
1591
|
-
temperature:
|
|
1592
|
-
timestamp_granularities:
|
|
1845
|
+
include: openAIOptions.include,
|
|
1846
|
+
language: openAIOptions.language,
|
|
1847
|
+
prompt: openAIOptions.prompt,
|
|
1848
|
+
temperature: openAIOptions.temperature,
|
|
1849
|
+
timestamp_granularities: openAIOptions.timestampGranularities
|
|
1593
1850
|
};
|
|
1594
|
-
for (const key
|
|
1595
|
-
|
|
1596
|
-
if (value !== void 0) {
|
|
1851
|
+
for (const [key, value] of Object.entries(transcriptionModelOptions)) {
|
|
1852
|
+
if (value != null) {
|
|
1597
1853
|
formData.append(key, String(value));
|
|
1598
1854
|
}
|
|
1599
1855
|
}
|
|
@@ -1606,7 +1862,7 @@ var OpenAITranscriptionModel = class {
|
|
|
1606
1862
|
async doGenerate(options) {
|
|
1607
1863
|
var _a, _b, _c, _d, _e, _f;
|
|
1608
1864
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
1609
|
-
const { formData, warnings } = this.getArgs(options);
|
|
1865
|
+
const { formData, warnings } = await this.getArgs(options);
|
|
1610
1866
|
const {
|
|
1611
1867
|
value: response,
|
|
1612
1868
|
responseHeaders,
|
|
@@ -1645,38 +1901,44 @@ var OpenAITranscriptionModel = class {
|
|
|
1645
1901
|
};
|
|
1646
1902
|
}
|
|
1647
1903
|
};
|
|
1648
|
-
var openaiTranscriptionResponseSchema =
|
|
1649
|
-
text:
|
|
1650
|
-
language:
|
|
1651
|
-
duration:
|
|
1652
|
-
words:
|
|
1653
|
-
|
|
1654
|
-
word:
|
|
1655
|
-
start:
|
|
1656
|
-
end:
|
|
1904
|
+
var openaiTranscriptionResponseSchema = z12.object({
|
|
1905
|
+
text: z12.string(),
|
|
1906
|
+
language: z12.string().nullish(),
|
|
1907
|
+
duration: z12.number().nullish(),
|
|
1908
|
+
words: z12.array(
|
|
1909
|
+
z12.object({
|
|
1910
|
+
word: z12.string(),
|
|
1911
|
+
start: z12.number(),
|
|
1912
|
+
end: z12.number()
|
|
1657
1913
|
})
|
|
1658
1914
|
).nullish()
|
|
1659
1915
|
});
|
|
1660
1916
|
|
|
1661
1917
|
// src/responses/openai-responses-language-model.ts
|
|
1918
|
+
import {
|
|
1919
|
+
APICallError
|
|
1920
|
+
} from "@ai-sdk/provider";
|
|
1662
1921
|
import {
|
|
1663
1922
|
combineHeaders as combineHeaders6,
|
|
1664
1923
|
createEventSourceResponseHandler as createEventSourceResponseHandler3,
|
|
1665
1924
|
createJsonResponseHandler as createJsonResponseHandler6,
|
|
1666
1925
|
generateId as generateId2,
|
|
1667
|
-
parseProviderOptions as
|
|
1926
|
+
parseProviderOptions as parseProviderOptions6,
|
|
1668
1927
|
postJsonToApi as postJsonToApi5
|
|
1669
1928
|
} from "@ai-sdk/provider-utils";
|
|
1670
|
-
import { z as
|
|
1929
|
+
import { z as z14 } from "zod/v4";
|
|
1671
1930
|
|
|
1672
1931
|
// src/responses/convert-to-openai-responses-messages.ts
|
|
1673
1932
|
import {
|
|
1674
1933
|
UnsupportedFunctionalityError as UnsupportedFunctionalityError4
|
|
1675
1934
|
} from "@ai-sdk/provider";
|
|
1676
|
-
|
|
1935
|
+
import { parseProviderOptions as parseProviderOptions5 } from "@ai-sdk/provider-utils";
|
|
1936
|
+
import { z as z13 } from "zod/v4";
|
|
1937
|
+
async function convertToOpenAIResponsesMessages({
|
|
1677
1938
|
prompt,
|
|
1678
1939
|
systemMessageMode
|
|
1679
1940
|
}) {
|
|
1941
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1680
1942
|
const messages = [];
|
|
1681
1943
|
const warnings = [];
|
|
1682
1944
|
for (const { role, content } of prompt) {
|
|
@@ -1711,7 +1973,7 @@ function convertToOpenAIResponsesMessages({
|
|
|
1711
1973
|
messages.push({
|
|
1712
1974
|
role: "user",
|
|
1713
1975
|
content: content.map((part, index) => {
|
|
1714
|
-
var
|
|
1976
|
+
var _a2, _b2, _c2;
|
|
1715
1977
|
switch (part.type) {
|
|
1716
1978
|
case "text": {
|
|
1717
1979
|
return { type: "input_text", text: part.text };
|
|
@@ -1723,7 +1985,7 @@ function convertToOpenAIResponsesMessages({
|
|
|
1723
1985
|
type: "input_image",
|
|
1724
1986
|
image_url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${part.data}`,
|
|
1725
1987
|
// OpenAI specific extension: image detail
|
|
1726
|
-
detail: (
|
|
1988
|
+
detail: (_b2 = (_a2 = part.providerOptions) == null ? void 0 : _a2.openai) == null ? void 0 : _b2.imageDetail
|
|
1727
1989
|
};
|
|
1728
1990
|
} else if (part.mediaType === "application/pdf") {
|
|
1729
1991
|
if (part.data instanceof URL) {
|
|
@@ -1733,7 +1995,7 @@ function convertToOpenAIResponsesMessages({
|
|
|
1733
1995
|
}
|
|
1734
1996
|
return {
|
|
1735
1997
|
type: "input_file",
|
|
1736
|
-
filename: (
|
|
1998
|
+
filename: (_c2 = part.filename) != null ? _c2 : `part-${index}.pdf`,
|
|
1737
1999
|
file_data: `data:application/pdf;base64,${part.data}`
|
|
1738
2000
|
};
|
|
1739
2001
|
} else {
|
|
@@ -1748,22 +2010,72 @@ function convertToOpenAIResponsesMessages({
|
|
|
1748
2010
|
break;
|
|
1749
2011
|
}
|
|
1750
2012
|
case "assistant": {
|
|
2013
|
+
const reasoningMessages = {};
|
|
1751
2014
|
for (const part of content) {
|
|
1752
2015
|
switch (part.type) {
|
|
1753
2016
|
case "text": {
|
|
1754
2017
|
messages.push({
|
|
1755
2018
|
role: "assistant",
|
|
1756
|
-
content: [{ type: "output_text", text: part.text }]
|
|
2019
|
+
content: [{ type: "output_text", text: part.text }],
|
|
2020
|
+
id: (_c = (_b = (_a = part.providerOptions) == null ? void 0 : _a.openai) == null ? void 0 : _b.itemId) != null ? _c : void 0
|
|
1757
2021
|
});
|
|
1758
2022
|
break;
|
|
1759
2023
|
}
|
|
1760
2024
|
case "tool-call": {
|
|
2025
|
+
if (part.providerExecuted) {
|
|
2026
|
+
break;
|
|
2027
|
+
}
|
|
1761
2028
|
messages.push({
|
|
1762
2029
|
type: "function_call",
|
|
1763
2030
|
call_id: part.toolCallId,
|
|
1764
2031
|
name: part.toolName,
|
|
1765
|
-
arguments: JSON.stringify(part.
|
|
2032
|
+
arguments: JSON.stringify(part.input),
|
|
2033
|
+
id: (_f = (_e = (_d = part.providerOptions) == null ? void 0 : _d.openai) == null ? void 0 : _e.itemId) != null ? _f : void 0
|
|
2034
|
+
});
|
|
2035
|
+
break;
|
|
2036
|
+
}
|
|
2037
|
+
case "tool-result": {
|
|
2038
|
+
warnings.push({
|
|
2039
|
+
type: "other",
|
|
2040
|
+
message: `tool result parts in assistant messages are not supported for OpenAI responses`
|
|
2041
|
+
});
|
|
2042
|
+
break;
|
|
2043
|
+
}
|
|
2044
|
+
case "reasoning": {
|
|
2045
|
+
const providerOptions = await parseProviderOptions5({
|
|
2046
|
+
provider: "openai",
|
|
2047
|
+
providerOptions: part.providerOptions,
|
|
2048
|
+
schema: openaiResponsesReasoningProviderOptionsSchema
|
|
1766
2049
|
});
|
|
2050
|
+
const reasoningId = providerOptions == null ? void 0 : providerOptions.itemId;
|
|
2051
|
+
if (reasoningId != null) {
|
|
2052
|
+
const existingReasoningMessage = reasoningMessages[reasoningId];
|
|
2053
|
+
const summaryParts = [];
|
|
2054
|
+
if (part.text.length > 0) {
|
|
2055
|
+
summaryParts.push({ type: "summary_text", text: part.text });
|
|
2056
|
+
} else if (existingReasoningMessage !== void 0) {
|
|
2057
|
+
warnings.push({
|
|
2058
|
+
type: "other",
|
|
2059
|
+
message: `Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(part)}.`
|
|
2060
|
+
});
|
|
2061
|
+
}
|
|
2062
|
+
if (existingReasoningMessage === void 0) {
|
|
2063
|
+
reasoningMessages[reasoningId] = {
|
|
2064
|
+
type: "reasoning",
|
|
2065
|
+
id: reasoningId,
|
|
2066
|
+
encrypted_content: providerOptions == null ? void 0 : providerOptions.reasoningEncryptedContent,
|
|
2067
|
+
summary: summaryParts
|
|
2068
|
+
};
|
|
2069
|
+
messages.push(reasoningMessages[reasoningId]);
|
|
2070
|
+
} else {
|
|
2071
|
+
existingReasoningMessage.summary.push(...summaryParts);
|
|
2072
|
+
}
|
|
2073
|
+
} else {
|
|
2074
|
+
warnings.push({
|
|
2075
|
+
type: "other",
|
|
2076
|
+
message: `Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(part)}.`
|
|
2077
|
+
});
|
|
2078
|
+
}
|
|
1767
2079
|
break;
|
|
1768
2080
|
}
|
|
1769
2081
|
}
|
|
@@ -1772,10 +2084,23 @@ function convertToOpenAIResponsesMessages({
|
|
|
1772
2084
|
}
|
|
1773
2085
|
case "tool": {
|
|
1774
2086
|
for (const part of content) {
|
|
2087
|
+
const output = part.output;
|
|
2088
|
+
let contentValue;
|
|
2089
|
+
switch (output.type) {
|
|
2090
|
+
case "text":
|
|
2091
|
+
case "error-text":
|
|
2092
|
+
contentValue = output.value;
|
|
2093
|
+
break;
|
|
2094
|
+
case "content":
|
|
2095
|
+
case "json":
|
|
2096
|
+
case "error-json":
|
|
2097
|
+
contentValue = JSON.stringify(output.value);
|
|
2098
|
+
break;
|
|
2099
|
+
}
|
|
1775
2100
|
messages.push({
|
|
1776
2101
|
type: "function_call_output",
|
|
1777
2102
|
call_id: part.toolCallId,
|
|
1778
|
-
output:
|
|
2103
|
+
output: contentValue
|
|
1779
2104
|
});
|
|
1780
2105
|
}
|
|
1781
2106
|
break;
|
|
@@ -1788,6 +2113,10 @@ function convertToOpenAIResponsesMessages({
|
|
|
1788
2113
|
}
|
|
1789
2114
|
return { messages, warnings };
|
|
1790
2115
|
}
|
|
2116
|
+
var openaiResponsesReasoningProviderOptionsSchema = z13.object({
|
|
2117
|
+
itemId: z13.string().nullish(),
|
|
2118
|
+
reasoningEncryptedContent: z13.string().nullish()
|
|
2119
|
+
});
|
|
1791
2120
|
|
|
1792
2121
|
// src/responses/map-openai-responses-finish-reason.ts
|
|
1793
2122
|
function mapOpenAIResponseFinishReason({
|
|
@@ -1814,7 +2143,7 @@ import {
|
|
|
1814
2143
|
function prepareResponsesTools({
|
|
1815
2144
|
tools,
|
|
1816
2145
|
toolChoice,
|
|
1817
|
-
|
|
2146
|
+
strictJsonSchema
|
|
1818
2147
|
}) {
|
|
1819
2148
|
tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
|
|
1820
2149
|
const toolWarnings = [];
|
|
@@ -1829,12 +2158,23 @@ function prepareResponsesTools({
|
|
|
1829
2158
|
type: "function",
|
|
1830
2159
|
name: tool.name,
|
|
1831
2160
|
description: tool.description,
|
|
1832
|
-
parameters: tool.
|
|
1833
|
-
strict:
|
|
2161
|
+
parameters: tool.inputSchema,
|
|
2162
|
+
strict: strictJsonSchema
|
|
1834
2163
|
});
|
|
1835
2164
|
break;
|
|
1836
2165
|
case "provider-defined":
|
|
1837
2166
|
switch (tool.id) {
|
|
2167
|
+
case "openai.file_search": {
|
|
2168
|
+
const args = fileSearchArgsSchema.parse(tool.args);
|
|
2169
|
+
openaiTools2.push({
|
|
2170
|
+
type: "file_search",
|
|
2171
|
+
vector_store_ids: args.vectorStoreIds,
|
|
2172
|
+
max_num_results: args.maxNumResults,
|
|
2173
|
+
ranking_options: args.ranking ? { ranker: args.ranking.ranker } : void 0,
|
|
2174
|
+
filters: args.filters
|
|
2175
|
+
});
|
|
2176
|
+
break;
|
|
2177
|
+
}
|
|
1838
2178
|
case "openai.web_search_preview":
|
|
1839
2179
|
openaiTools2.push({
|
|
1840
2180
|
type: "web_search_preview",
|
|
@@ -1864,7 +2204,7 @@ function prepareResponsesTools({
|
|
|
1864
2204
|
case "tool":
|
|
1865
2205
|
return {
|
|
1866
2206
|
tools: openaiTools2,
|
|
1867
|
-
toolChoice: toolChoice.toolName === "web_search_preview" ? { type: "web_search_preview" } : { type: "function", name: toolChoice.toolName },
|
|
2207
|
+
toolChoice: toolChoice.toolName === "file_search" ? { type: "file_search" } : toolChoice.toolName === "web_search_preview" ? { type: "web_search_preview" } : { type: "function", name: toolChoice.toolName },
|
|
1868
2208
|
toolWarnings
|
|
1869
2209
|
};
|
|
1870
2210
|
default: {
|
|
@@ -1880,14 +2220,16 @@ function prepareResponsesTools({
|
|
|
1880
2220
|
var OpenAIResponsesLanguageModel = class {
|
|
1881
2221
|
constructor(modelId, config) {
|
|
1882
2222
|
this.specificationVersion = "v2";
|
|
1883
|
-
this.
|
|
2223
|
+
this.supportedUrls = {
|
|
2224
|
+
"image/*": [/^https?:\/\/.*$/]
|
|
2225
|
+
};
|
|
1884
2226
|
this.modelId = modelId;
|
|
1885
2227
|
this.config = config;
|
|
1886
2228
|
}
|
|
1887
2229
|
get provider() {
|
|
1888
2230
|
return this.config.provider;
|
|
1889
2231
|
}
|
|
1890
|
-
getArgs({
|
|
2232
|
+
async getArgs({
|
|
1891
2233
|
maxOutputTokens,
|
|
1892
2234
|
temperature,
|
|
1893
2235
|
stopSequences,
|
|
@@ -1926,17 +2268,17 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
1926
2268
|
if (stopSequences != null) {
|
|
1927
2269
|
warnings.push({ type: "unsupported-setting", setting: "stopSequences" });
|
|
1928
2270
|
}
|
|
1929
|
-
const { messages, warnings: messageWarnings } = convertToOpenAIResponsesMessages({
|
|
2271
|
+
const { messages, warnings: messageWarnings } = await convertToOpenAIResponsesMessages({
|
|
1930
2272
|
prompt,
|
|
1931
2273
|
systemMessageMode: modelConfig.systemMessageMode
|
|
1932
2274
|
});
|
|
1933
2275
|
warnings.push(...messageWarnings);
|
|
1934
|
-
const openaiOptions =
|
|
2276
|
+
const openaiOptions = await parseProviderOptions6({
|
|
1935
2277
|
provider: "openai",
|
|
1936
2278
|
providerOptions,
|
|
1937
2279
|
schema: openaiResponsesProviderOptionsSchema
|
|
1938
2280
|
});
|
|
1939
|
-
const
|
|
2281
|
+
const strictJsonSchema = (_a = openaiOptions == null ? void 0 : openaiOptions.strictJsonSchema) != null ? _a : false;
|
|
1940
2282
|
const baseArgs = {
|
|
1941
2283
|
model: this.modelId,
|
|
1942
2284
|
input: messages,
|
|
@@ -1947,7 +2289,7 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
1947
2289
|
text: {
|
|
1948
2290
|
format: responseFormat.schema != null ? {
|
|
1949
2291
|
type: "json_schema",
|
|
1950
|
-
strict:
|
|
2292
|
+
strict: strictJsonSchema,
|
|
1951
2293
|
name: (_b = responseFormat.name) != null ? _b : "response",
|
|
1952
2294
|
description: responseFormat.description,
|
|
1953
2295
|
schema: responseFormat.schema
|
|
@@ -1961,9 +2303,18 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
1961
2303
|
store: openaiOptions == null ? void 0 : openaiOptions.store,
|
|
1962
2304
|
user: openaiOptions == null ? void 0 : openaiOptions.user,
|
|
1963
2305
|
instructions: openaiOptions == null ? void 0 : openaiOptions.instructions,
|
|
2306
|
+
service_tier: openaiOptions == null ? void 0 : openaiOptions.serviceTier,
|
|
2307
|
+
include: openaiOptions == null ? void 0 : openaiOptions.include,
|
|
1964
2308
|
// model-specific settings:
|
|
1965
|
-
...modelConfig.isReasoningModel && (openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null && {
|
|
1966
|
-
reasoning: {
|
|
2309
|
+
...modelConfig.isReasoningModel && ((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null || (openaiOptions == null ? void 0 : openaiOptions.reasoningSummary) != null) && {
|
|
2310
|
+
reasoning: {
|
|
2311
|
+
...(openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null && {
|
|
2312
|
+
effort: openaiOptions.reasoningEffort
|
|
2313
|
+
},
|
|
2314
|
+
...(openaiOptions == null ? void 0 : openaiOptions.reasoningSummary) != null && {
|
|
2315
|
+
summary: openaiOptions.reasoningSummary
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
1967
2318
|
},
|
|
1968
2319
|
...modelConfig.requiredAutoTruncation && {
|
|
1969
2320
|
truncation: "auto"
|
|
@@ -1986,6 +2337,37 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
1986
2337
|
details: "topP is not supported for reasoning models"
|
|
1987
2338
|
});
|
|
1988
2339
|
}
|
|
2340
|
+
} else {
|
|
2341
|
+
if ((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null) {
|
|
2342
|
+
warnings.push({
|
|
2343
|
+
type: "unsupported-setting",
|
|
2344
|
+
setting: "reasoningEffort",
|
|
2345
|
+
details: "reasoningEffort is not supported for non-reasoning models"
|
|
2346
|
+
});
|
|
2347
|
+
}
|
|
2348
|
+
if ((openaiOptions == null ? void 0 : openaiOptions.reasoningSummary) != null) {
|
|
2349
|
+
warnings.push({
|
|
2350
|
+
type: "unsupported-setting",
|
|
2351
|
+
setting: "reasoningSummary",
|
|
2352
|
+
details: "reasoningSummary is not supported for non-reasoning models"
|
|
2353
|
+
});
|
|
2354
|
+
}
|
|
2355
|
+
}
|
|
2356
|
+
if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "flex" && !supportsFlexProcessing2(this.modelId)) {
|
|
2357
|
+
warnings.push({
|
|
2358
|
+
type: "unsupported-setting",
|
|
2359
|
+
setting: "serviceTier",
|
|
2360
|
+
details: "flex processing is only available for o3 and o4-mini models"
|
|
2361
|
+
});
|
|
2362
|
+
delete baseArgs.service_tier;
|
|
2363
|
+
}
|
|
2364
|
+
if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "priority" && !supportsPriorityProcessing2(this.modelId)) {
|
|
2365
|
+
warnings.push({
|
|
2366
|
+
type: "unsupported-setting",
|
|
2367
|
+
setting: "serviceTier",
|
|
2368
|
+
details: "priority processing is only available for supported models (GPT-4, o3, o4-mini) and requires Enterprise access"
|
|
2369
|
+
});
|
|
2370
|
+
delete baseArgs.service_tier;
|
|
1989
2371
|
}
|
|
1990
2372
|
const {
|
|
1991
2373
|
tools: openaiTools2,
|
|
@@ -1994,7 +2376,7 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
1994
2376
|
} = prepareResponsesTools({
|
|
1995
2377
|
tools,
|
|
1996
2378
|
toolChoice,
|
|
1997
|
-
|
|
2379
|
+
strictJsonSchema
|
|
1998
2380
|
});
|
|
1999
2381
|
return {
|
|
2000
2382
|
args: {
|
|
@@ -2006,84 +2388,137 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2006
2388
|
};
|
|
2007
2389
|
}
|
|
2008
2390
|
async doGenerate(options) {
|
|
2009
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2010
|
-
const { args: body, warnings } = this.getArgs(options);
|
|
2391
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
2392
|
+
const { args: body, warnings } = await this.getArgs(options);
|
|
2393
|
+
const url = this.config.url({
|
|
2394
|
+
path: "/responses",
|
|
2395
|
+
modelId: this.modelId
|
|
2396
|
+
});
|
|
2011
2397
|
const {
|
|
2012
2398
|
responseHeaders,
|
|
2013
2399
|
value: response,
|
|
2014
2400
|
rawValue: rawResponse
|
|
2015
2401
|
} = await postJsonToApi5({
|
|
2016
|
-
url
|
|
2017
|
-
path: "/responses",
|
|
2018
|
-
modelId: this.modelId
|
|
2019
|
-
}),
|
|
2402
|
+
url,
|
|
2020
2403
|
headers: combineHeaders6(this.config.headers(), options.headers),
|
|
2021
2404
|
body,
|
|
2022
2405
|
failedResponseHandler: openaiFailedResponseHandler,
|
|
2023
2406
|
successfulResponseHandler: createJsonResponseHandler6(
|
|
2024
|
-
|
|
2025
|
-
id:
|
|
2026
|
-
created_at:
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2407
|
+
z14.object({
|
|
2408
|
+
id: z14.string(),
|
|
2409
|
+
created_at: z14.number(),
|
|
2410
|
+
error: z14.object({
|
|
2411
|
+
code: z14.string(),
|
|
2412
|
+
message: z14.string()
|
|
2413
|
+
}).nullish(),
|
|
2414
|
+
model: z14.string(),
|
|
2415
|
+
output: z14.array(
|
|
2416
|
+
z14.discriminatedUnion("type", [
|
|
2417
|
+
z14.object({
|
|
2418
|
+
type: z14.literal("message"),
|
|
2419
|
+
role: z14.literal("assistant"),
|
|
2420
|
+
id: z14.string(),
|
|
2421
|
+
content: z14.array(
|
|
2422
|
+
z14.object({
|
|
2423
|
+
type: z14.literal("output_text"),
|
|
2424
|
+
text: z14.string(),
|
|
2425
|
+
annotations: z14.array(
|
|
2426
|
+
z14.object({
|
|
2427
|
+
type: z14.literal("url_citation"),
|
|
2428
|
+
start_index: z14.number(),
|
|
2429
|
+
end_index: z14.number(),
|
|
2430
|
+
url: z14.string(),
|
|
2431
|
+
title: z14.string()
|
|
2044
2432
|
})
|
|
2045
2433
|
)
|
|
2046
2434
|
})
|
|
2047
2435
|
)
|
|
2048
2436
|
}),
|
|
2049
|
-
|
|
2050
|
-
type:
|
|
2051
|
-
call_id:
|
|
2052
|
-
name:
|
|
2053
|
-
arguments:
|
|
2437
|
+
z14.object({
|
|
2438
|
+
type: z14.literal("function_call"),
|
|
2439
|
+
call_id: z14.string(),
|
|
2440
|
+
name: z14.string(),
|
|
2441
|
+
arguments: z14.string(),
|
|
2442
|
+
id: z14.string()
|
|
2054
2443
|
}),
|
|
2055
|
-
|
|
2056
|
-
type:
|
|
2444
|
+
z14.object({
|
|
2445
|
+
type: z14.literal("web_search_call"),
|
|
2446
|
+
id: z14.string(),
|
|
2447
|
+
status: z14.string().optional()
|
|
2057
2448
|
}),
|
|
2058
|
-
|
|
2059
|
-
type:
|
|
2449
|
+
z14.object({
|
|
2450
|
+
type: z14.literal("computer_call"),
|
|
2451
|
+
id: z14.string(),
|
|
2452
|
+
status: z14.string().optional()
|
|
2060
2453
|
}),
|
|
2061
|
-
|
|
2062
|
-
type:
|
|
2454
|
+
z14.object({
|
|
2455
|
+
type: z14.literal("reasoning"),
|
|
2456
|
+
id: z14.string(),
|
|
2457
|
+
encrypted_content: z14.string().nullish(),
|
|
2458
|
+
summary: z14.array(
|
|
2459
|
+
z14.object({
|
|
2460
|
+
type: z14.literal("summary_text"),
|
|
2461
|
+
text: z14.string()
|
|
2462
|
+
})
|
|
2463
|
+
)
|
|
2063
2464
|
})
|
|
2064
2465
|
])
|
|
2065
2466
|
),
|
|
2066
|
-
incomplete_details:
|
|
2067
|
-
usage:
|
|
2467
|
+
incomplete_details: z14.object({ reason: z14.string() }).nullable(),
|
|
2468
|
+
usage: usageSchema2
|
|
2068
2469
|
})
|
|
2069
2470
|
),
|
|
2070
2471
|
abortSignal: options.abortSignal,
|
|
2071
2472
|
fetch: this.config.fetch
|
|
2072
2473
|
});
|
|
2474
|
+
if (response.error) {
|
|
2475
|
+
throw new APICallError({
|
|
2476
|
+
message: response.error.message,
|
|
2477
|
+
url,
|
|
2478
|
+
requestBodyValues: body,
|
|
2479
|
+
statusCode: 400,
|
|
2480
|
+
responseHeaders,
|
|
2481
|
+
responseBody: rawResponse,
|
|
2482
|
+
isRetryable: false
|
|
2483
|
+
});
|
|
2484
|
+
}
|
|
2073
2485
|
const content = [];
|
|
2074
2486
|
for (const part of response.output) {
|
|
2075
2487
|
switch (part.type) {
|
|
2488
|
+
case "reasoning": {
|
|
2489
|
+
if (part.summary.length === 0) {
|
|
2490
|
+
part.summary.push({ type: "summary_text", text: "" });
|
|
2491
|
+
}
|
|
2492
|
+
for (const summary of part.summary) {
|
|
2493
|
+
content.push({
|
|
2494
|
+
type: "reasoning",
|
|
2495
|
+
text: summary.text,
|
|
2496
|
+
providerMetadata: {
|
|
2497
|
+
openai: {
|
|
2498
|
+
itemId: part.id,
|
|
2499
|
+
reasoningEncryptedContent: (_a = part.encrypted_content) != null ? _a : null
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
});
|
|
2503
|
+
}
|
|
2504
|
+
break;
|
|
2505
|
+
}
|
|
2076
2506
|
case "message": {
|
|
2077
2507
|
for (const contentPart of part.content) {
|
|
2078
2508
|
content.push({
|
|
2079
2509
|
type: "text",
|
|
2080
|
-
text: contentPart.text
|
|
2510
|
+
text: contentPart.text,
|
|
2511
|
+
providerMetadata: {
|
|
2512
|
+
openai: {
|
|
2513
|
+
itemId: part.id
|
|
2514
|
+
}
|
|
2515
|
+
}
|
|
2081
2516
|
});
|
|
2082
2517
|
for (const annotation of contentPart.annotations) {
|
|
2083
2518
|
content.push({
|
|
2084
2519
|
type: "source",
|
|
2085
2520
|
sourceType: "url",
|
|
2086
|
-
id: (
|
|
2521
|
+
id: (_d = (_c = (_b = this.config).generateId) == null ? void 0 : _c.call(_b)) != null ? _d : generateId2(),
|
|
2087
2522
|
url: annotation.url,
|
|
2088
2523
|
title: annotation.title
|
|
2089
2524
|
});
|
|
@@ -2094,10 +2529,51 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2094
2529
|
case "function_call": {
|
|
2095
2530
|
content.push({
|
|
2096
2531
|
type: "tool-call",
|
|
2097
|
-
toolCallType: "function",
|
|
2098
2532
|
toolCallId: part.call_id,
|
|
2099
2533
|
toolName: part.name,
|
|
2100
|
-
|
|
2534
|
+
input: part.arguments,
|
|
2535
|
+
providerMetadata: {
|
|
2536
|
+
openai: {
|
|
2537
|
+
itemId: part.id
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
});
|
|
2541
|
+
break;
|
|
2542
|
+
}
|
|
2543
|
+
case "web_search_call": {
|
|
2544
|
+
content.push({
|
|
2545
|
+
type: "tool-call",
|
|
2546
|
+
toolCallId: part.id,
|
|
2547
|
+
toolName: "web_search_preview",
|
|
2548
|
+
input: "",
|
|
2549
|
+
providerExecuted: true
|
|
2550
|
+
});
|
|
2551
|
+
content.push({
|
|
2552
|
+
type: "tool-result",
|
|
2553
|
+
toolCallId: part.id,
|
|
2554
|
+
toolName: "web_search_preview",
|
|
2555
|
+
result: { status: part.status || "completed" },
|
|
2556
|
+
providerExecuted: true
|
|
2557
|
+
});
|
|
2558
|
+
break;
|
|
2559
|
+
}
|
|
2560
|
+
case "computer_call": {
|
|
2561
|
+
content.push({
|
|
2562
|
+
type: "tool-call",
|
|
2563
|
+
toolCallId: part.id,
|
|
2564
|
+
toolName: "computer_use",
|
|
2565
|
+
input: "",
|
|
2566
|
+
providerExecuted: true
|
|
2567
|
+
});
|
|
2568
|
+
content.push({
|
|
2569
|
+
type: "tool-result",
|
|
2570
|
+
toolCallId: part.id,
|
|
2571
|
+
toolName: "computer_use",
|
|
2572
|
+
result: {
|
|
2573
|
+
type: "computer_use_tool_result",
|
|
2574
|
+
status: part.status || "completed"
|
|
2575
|
+
},
|
|
2576
|
+
providerExecuted: true
|
|
2101
2577
|
});
|
|
2102
2578
|
break;
|
|
2103
2579
|
}
|
|
@@ -2106,12 +2582,15 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2106
2582
|
return {
|
|
2107
2583
|
content,
|
|
2108
2584
|
finishReason: mapOpenAIResponseFinishReason({
|
|
2109
|
-
finishReason: (
|
|
2585
|
+
finishReason: (_e = response.incomplete_details) == null ? void 0 : _e.reason,
|
|
2110
2586
|
hasToolCalls: content.some((part) => part.type === "tool-call")
|
|
2111
2587
|
}),
|
|
2112
2588
|
usage: {
|
|
2113
2589
|
inputTokens: response.usage.input_tokens,
|
|
2114
|
-
outputTokens: response.usage.output_tokens
|
|
2590
|
+
outputTokens: response.usage.output_tokens,
|
|
2591
|
+
totalTokens: response.usage.input_tokens + response.usage.output_tokens,
|
|
2592
|
+
reasoningTokens: (_g = (_f = response.usage.output_tokens_details) == null ? void 0 : _f.reasoning_tokens) != null ? _g : void 0,
|
|
2593
|
+
cachedInputTokens: (_i = (_h = response.usage.input_tokens_details) == null ? void 0 : _h.cached_tokens) != null ? _i : void 0
|
|
2115
2594
|
},
|
|
2116
2595
|
request: { body },
|
|
2117
2596
|
response: {
|
|
@@ -2123,16 +2602,14 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2123
2602
|
},
|
|
2124
2603
|
providerMetadata: {
|
|
2125
2604
|
openai: {
|
|
2126
|
-
responseId: response.id
|
|
2127
|
-
cachedPromptTokens: (_f = (_e = response.usage.input_tokens_details) == null ? void 0 : _e.cached_tokens) != null ? _f : null,
|
|
2128
|
-
reasoningTokens: (_h = (_g = response.usage.output_tokens_details) == null ? void 0 : _g.reasoning_tokens) != null ? _h : null
|
|
2605
|
+
responseId: response.id
|
|
2129
2606
|
}
|
|
2130
2607
|
},
|
|
2131
2608
|
warnings
|
|
2132
2609
|
};
|
|
2133
2610
|
}
|
|
2134
2611
|
async doStream(options) {
|
|
2135
|
-
const { args: body, warnings } = this.getArgs(options);
|
|
2612
|
+
const { args: body, warnings } = await this.getArgs(options);
|
|
2136
2613
|
const { responseHeaders, value: response } = await postJsonToApi5({
|
|
2137
2614
|
url: this.config.url({
|
|
2138
2615
|
path: "/responses",
|
|
@@ -2154,13 +2631,13 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2154
2631
|
let finishReason = "unknown";
|
|
2155
2632
|
const usage = {
|
|
2156
2633
|
inputTokens: void 0,
|
|
2157
|
-
outputTokens: void 0
|
|
2634
|
+
outputTokens: void 0,
|
|
2635
|
+
totalTokens: void 0
|
|
2158
2636
|
};
|
|
2159
|
-
let cachedPromptTokens = null;
|
|
2160
|
-
let reasoningTokens = null;
|
|
2161
2637
|
let responseId = null;
|
|
2162
2638
|
const ongoingToolCalls = {};
|
|
2163
2639
|
let hasToolCalls = false;
|
|
2640
|
+
const activeReasoning = {};
|
|
2164
2641
|
return {
|
|
2165
2642
|
stream: response.pipeThrough(
|
|
2166
2643
|
new TransformStream({
|
|
@@ -2168,7 +2645,10 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2168
2645
|
controller.enqueue({ type: "stream-start", warnings });
|
|
2169
2646
|
},
|
|
2170
2647
|
transform(chunk, controller) {
|
|
2171
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2648
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
2649
|
+
if (options.includeRawChunks) {
|
|
2650
|
+
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
2651
|
+
}
|
|
2172
2652
|
if (!chunk.success) {
|
|
2173
2653
|
finishReason = "error";
|
|
2174
2654
|
controller.enqueue({ type: "error", error: chunk.error });
|
|
@@ -2182,22 +2662,151 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2182
2662
|
toolCallId: value.item.call_id
|
|
2183
2663
|
};
|
|
2184
2664
|
controller.enqueue({
|
|
2185
|
-
type: "tool-
|
|
2186
|
-
|
|
2665
|
+
type: "tool-input-start",
|
|
2666
|
+
id: value.item.call_id,
|
|
2667
|
+
toolName: value.item.name
|
|
2668
|
+
});
|
|
2669
|
+
} else if (value.item.type === "web_search_call") {
|
|
2670
|
+
ongoingToolCalls[value.output_index] = {
|
|
2671
|
+
toolName: "web_search_preview",
|
|
2672
|
+
toolCallId: value.item.id
|
|
2673
|
+
};
|
|
2674
|
+
controller.enqueue({
|
|
2675
|
+
type: "tool-input-start",
|
|
2676
|
+
id: value.item.id,
|
|
2677
|
+
toolName: "web_search_preview"
|
|
2678
|
+
});
|
|
2679
|
+
} else if (value.item.type === "computer_call") {
|
|
2680
|
+
ongoingToolCalls[value.output_index] = {
|
|
2681
|
+
toolName: "computer_use",
|
|
2682
|
+
toolCallId: value.item.id
|
|
2683
|
+
};
|
|
2684
|
+
controller.enqueue({
|
|
2685
|
+
type: "tool-input-start",
|
|
2686
|
+
id: value.item.id,
|
|
2687
|
+
toolName: "computer_use"
|
|
2688
|
+
});
|
|
2689
|
+
} else if (value.item.type === "message") {
|
|
2690
|
+
controller.enqueue({
|
|
2691
|
+
type: "text-start",
|
|
2692
|
+
id: value.item.id,
|
|
2693
|
+
providerMetadata: {
|
|
2694
|
+
openai: {
|
|
2695
|
+
itemId: value.item.id
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
});
|
|
2699
|
+
} else if (isResponseOutputItemAddedReasoningChunk(value)) {
|
|
2700
|
+
activeReasoning[value.item.id] = {
|
|
2701
|
+
encryptedContent: value.item.encrypted_content,
|
|
2702
|
+
summaryParts: [0]
|
|
2703
|
+
};
|
|
2704
|
+
controller.enqueue({
|
|
2705
|
+
type: "reasoning-start",
|
|
2706
|
+
id: `${value.item.id}:0`,
|
|
2707
|
+
providerMetadata: {
|
|
2708
|
+
openai: {
|
|
2709
|
+
itemId: value.item.id,
|
|
2710
|
+
reasoningEncryptedContent: (_a = value.item.encrypted_content) != null ? _a : null
|
|
2711
|
+
}
|
|
2712
|
+
}
|
|
2713
|
+
});
|
|
2714
|
+
}
|
|
2715
|
+
} else if (isResponseOutputItemDoneChunk(value)) {
|
|
2716
|
+
if (value.item.type === "function_call") {
|
|
2717
|
+
ongoingToolCalls[value.output_index] = void 0;
|
|
2718
|
+
hasToolCalls = true;
|
|
2719
|
+
controller.enqueue({
|
|
2720
|
+
type: "tool-input-end",
|
|
2721
|
+
id: value.item.call_id
|
|
2722
|
+
});
|
|
2723
|
+
controller.enqueue({
|
|
2724
|
+
type: "tool-call",
|
|
2187
2725
|
toolCallId: value.item.call_id,
|
|
2188
2726
|
toolName: value.item.name,
|
|
2189
|
-
|
|
2727
|
+
input: value.item.arguments,
|
|
2728
|
+
providerMetadata: {
|
|
2729
|
+
openai: {
|
|
2730
|
+
itemId: value.item.id
|
|
2731
|
+
}
|
|
2732
|
+
}
|
|
2733
|
+
});
|
|
2734
|
+
} else if (value.item.type === "web_search_call") {
|
|
2735
|
+
ongoingToolCalls[value.output_index] = void 0;
|
|
2736
|
+
hasToolCalls = true;
|
|
2737
|
+
controller.enqueue({
|
|
2738
|
+
type: "tool-input-end",
|
|
2739
|
+
id: value.item.id
|
|
2740
|
+
});
|
|
2741
|
+
controller.enqueue({
|
|
2742
|
+
type: "tool-call",
|
|
2743
|
+
toolCallId: value.item.id,
|
|
2744
|
+
toolName: "web_search_preview",
|
|
2745
|
+
input: "",
|
|
2746
|
+
providerExecuted: true
|
|
2747
|
+
});
|
|
2748
|
+
controller.enqueue({
|
|
2749
|
+
type: "tool-result",
|
|
2750
|
+
toolCallId: value.item.id,
|
|
2751
|
+
toolName: "web_search_preview",
|
|
2752
|
+
result: {
|
|
2753
|
+
type: "web_search_tool_result",
|
|
2754
|
+
status: value.item.status || "completed"
|
|
2755
|
+
},
|
|
2756
|
+
providerExecuted: true
|
|
2757
|
+
});
|
|
2758
|
+
} else if (value.item.type === "computer_call") {
|
|
2759
|
+
ongoingToolCalls[value.output_index] = void 0;
|
|
2760
|
+
hasToolCalls = true;
|
|
2761
|
+
controller.enqueue({
|
|
2762
|
+
type: "tool-input-end",
|
|
2763
|
+
id: value.item.id
|
|
2764
|
+
});
|
|
2765
|
+
controller.enqueue({
|
|
2766
|
+
type: "tool-call",
|
|
2767
|
+
toolCallId: value.item.id,
|
|
2768
|
+
toolName: "computer_use",
|
|
2769
|
+
input: "",
|
|
2770
|
+
providerExecuted: true
|
|
2190
2771
|
});
|
|
2772
|
+
controller.enqueue({
|
|
2773
|
+
type: "tool-result",
|
|
2774
|
+
toolCallId: value.item.id,
|
|
2775
|
+
toolName: "computer_use",
|
|
2776
|
+
result: {
|
|
2777
|
+
type: "computer_use_tool_result",
|
|
2778
|
+
status: value.item.status || "completed"
|
|
2779
|
+
},
|
|
2780
|
+
providerExecuted: true
|
|
2781
|
+
});
|
|
2782
|
+
} else if (value.item.type === "message") {
|
|
2783
|
+
controller.enqueue({
|
|
2784
|
+
type: "text-end",
|
|
2785
|
+
id: value.item.id
|
|
2786
|
+
});
|
|
2787
|
+
} else if (isResponseOutputItemDoneReasoningChunk(value)) {
|
|
2788
|
+
const activeReasoningPart = activeReasoning[value.item.id];
|
|
2789
|
+
for (const summaryIndex of activeReasoningPart.summaryParts) {
|
|
2790
|
+
controller.enqueue({
|
|
2791
|
+
type: "reasoning-end",
|
|
2792
|
+
id: `${value.item.id}:${summaryIndex}`,
|
|
2793
|
+
providerMetadata: {
|
|
2794
|
+
openai: {
|
|
2795
|
+
itemId: value.item.id,
|
|
2796
|
+
reasoningEncryptedContent: (_b = value.item.encrypted_content) != null ? _b : null
|
|
2797
|
+
}
|
|
2798
|
+
}
|
|
2799
|
+
});
|
|
2800
|
+
}
|
|
2801
|
+
delete activeReasoning[value.item.id];
|
|
2191
2802
|
}
|
|
2192
2803
|
} else if (isResponseFunctionCallArgumentsDeltaChunk(value)) {
|
|
2193
2804
|
const toolCall = ongoingToolCalls[value.output_index];
|
|
2194
2805
|
if (toolCall != null) {
|
|
2195
2806
|
controller.enqueue({
|
|
2196
|
-
type: "tool-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
toolName: toolCall.toolName,
|
|
2200
|
-
argsTextDelta: value.delta
|
|
2807
|
+
type: "tool-input-delta",
|
|
2808
|
+
id: toolCall.toolCallId,
|
|
2809
|
+
delta: value.delta
|
|
2201
2810
|
});
|
|
2202
2811
|
}
|
|
2203
2812
|
} else if (isResponseCreatedChunk(value)) {
|
|
@@ -2210,36 +2819,57 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2210
2819
|
});
|
|
2211
2820
|
} else if (isTextDeltaChunk(value)) {
|
|
2212
2821
|
controller.enqueue({
|
|
2213
|
-
type: "text",
|
|
2214
|
-
|
|
2822
|
+
type: "text-delta",
|
|
2823
|
+
id: value.item_id,
|
|
2824
|
+
delta: value.delta
|
|
2215
2825
|
});
|
|
2216
|
-
} else if (
|
|
2217
|
-
|
|
2218
|
-
|
|
2826
|
+
} else if (isResponseReasoningSummaryPartAddedChunk(value)) {
|
|
2827
|
+
if (value.summary_index > 0) {
|
|
2828
|
+
(_c = activeReasoning[value.item_id]) == null ? void 0 : _c.summaryParts.push(
|
|
2829
|
+
value.summary_index
|
|
2830
|
+
);
|
|
2831
|
+
controller.enqueue({
|
|
2832
|
+
type: "reasoning-start",
|
|
2833
|
+
id: `${value.item_id}:${value.summary_index}`,
|
|
2834
|
+
providerMetadata: {
|
|
2835
|
+
openai: {
|
|
2836
|
+
itemId: value.item_id,
|
|
2837
|
+
reasoningEncryptedContent: (_e = (_d = activeReasoning[value.item_id]) == null ? void 0 : _d.encryptedContent) != null ? _e : null
|
|
2838
|
+
}
|
|
2839
|
+
}
|
|
2840
|
+
});
|
|
2841
|
+
}
|
|
2842
|
+
} else if (isResponseReasoningSummaryTextDeltaChunk(value)) {
|
|
2219
2843
|
controller.enqueue({
|
|
2220
|
-
type: "
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2844
|
+
type: "reasoning-delta",
|
|
2845
|
+
id: `${value.item_id}:${value.summary_index}`,
|
|
2846
|
+
delta: value.delta,
|
|
2847
|
+
providerMetadata: {
|
|
2848
|
+
openai: {
|
|
2849
|
+
itemId: value.item_id
|
|
2850
|
+
}
|
|
2851
|
+
}
|
|
2225
2852
|
});
|
|
2226
2853
|
} else if (isResponseFinishedChunk(value)) {
|
|
2227
2854
|
finishReason = mapOpenAIResponseFinishReason({
|
|
2228
|
-
finishReason: (
|
|
2855
|
+
finishReason: (_f = value.response.incomplete_details) == null ? void 0 : _f.reason,
|
|
2229
2856
|
hasToolCalls
|
|
2230
2857
|
});
|
|
2231
2858
|
usage.inputTokens = value.response.usage.input_tokens;
|
|
2232
2859
|
usage.outputTokens = value.response.usage.output_tokens;
|
|
2233
|
-
|
|
2234
|
-
reasoningTokens = (
|
|
2860
|
+
usage.totalTokens = value.response.usage.input_tokens + value.response.usage.output_tokens;
|
|
2861
|
+
usage.reasoningTokens = (_h = (_g = value.response.usage.output_tokens_details) == null ? void 0 : _g.reasoning_tokens) != null ? _h : void 0;
|
|
2862
|
+
usage.cachedInputTokens = (_j = (_i = value.response.usage.input_tokens_details) == null ? void 0 : _i.cached_tokens) != null ? _j : void 0;
|
|
2235
2863
|
} else if (isResponseAnnotationAddedChunk(value)) {
|
|
2236
2864
|
controller.enqueue({
|
|
2237
2865
|
type: "source",
|
|
2238
2866
|
sourceType: "url",
|
|
2239
|
-
id: (
|
|
2867
|
+
id: (_m = (_l = (_k = self.config).generateId) == null ? void 0 : _l.call(_k)) != null ? _m : generateId2(),
|
|
2240
2868
|
url: value.annotation.url,
|
|
2241
2869
|
title: value.annotation.title
|
|
2242
2870
|
});
|
|
2871
|
+
} else if (isErrorChunk(value)) {
|
|
2872
|
+
controller.enqueue({ type: "error", error: value });
|
|
2243
2873
|
}
|
|
2244
2874
|
},
|
|
2245
2875
|
flush(controller) {
|
|
@@ -2247,13 +2877,9 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2247
2877
|
type: "finish",
|
|
2248
2878
|
finishReason,
|
|
2249
2879
|
usage,
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
responseId,
|
|
2254
|
-
cachedPromptTokens,
|
|
2255
|
-
reasoningTokens
|
|
2256
|
-
}
|
|
2880
|
+
providerMetadata: {
|
|
2881
|
+
openai: {
|
|
2882
|
+
responseId
|
|
2257
2883
|
}
|
|
2258
2884
|
}
|
|
2259
2885
|
});
|
|
@@ -2265,87 +2891,141 @@ var OpenAIResponsesLanguageModel = class {
|
|
|
2265
2891
|
};
|
|
2266
2892
|
}
|
|
2267
2893
|
};
|
|
2268
|
-
var
|
|
2269
|
-
input_tokens:
|
|
2270
|
-
input_tokens_details:
|
|
2271
|
-
output_tokens:
|
|
2272
|
-
output_tokens_details:
|
|
2894
|
+
var usageSchema2 = z14.object({
|
|
2895
|
+
input_tokens: z14.number(),
|
|
2896
|
+
input_tokens_details: z14.object({ cached_tokens: z14.number().nullish() }).nullish(),
|
|
2897
|
+
output_tokens: z14.number(),
|
|
2898
|
+
output_tokens_details: z14.object({ reasoning_tokens: z14.number().nullish() }).nullish()
|
|
2899
|
+
});
|
|
2900
|
+
var textDeltaChunkSchema = z14.object({
|
|
2901
|
+
type: z14.literal("response.output_text.delta"),
|
|
2902
|
+
item_id: z14.string(),
|
|
2903
|
+
delta: z14.string()
|
|
2273
2904
|
});
|
|
2274
|
-
var
|
|
2275
|
-
type:
|
|
2276
|
-
|
|
2905
|
+
var errorChunkSchema = z14.object({
|
|
2906
|
+
type: z14.literal("error"),
|
|
2907
|
+
code: z14.string(),
|
|
2908
|
+
message: z14.string(),
|
|
2909
|
+
param: z14.string().nullish(),
|
|
2910
|
+
sequence_number: z14.number()
|
|
2277
2911
|
});
|
|
2278
|
-
var responseFinishedChunkSchema =
|
|
2279
|
-
type:
|
|
2280
|
-
response:
|
|
2281
|
-
incomplete_details:
|
|
2282
|
-
usage:
|
|
2912
|
+
var responseFinishedChunkSchema = z14.object({
|
|
2913
|
+
type: z14.enum(["response.completed", "response.incomplete"]),
|
|
2914
|
+
response: z14.object({
|
|
2915
|
+
incomplete_details: z14.object({ reason: z14.string() }).nullish(),
|
|
2916
|
+
usage: usageSchema2
|
|
2283
2917
|
})
|
|
2284
2918
|
});
|
|
2285
|
-
var responseCreatedChunkSchema =
|
|
2286
|
-
type:
|
|
2287
|
-
response:
|
|
2288
|
-
id:
|
|
2289
|
-
created_at:
|
|
2290
|
-
model:
|
|
2919
|
+
var responseCreatedChunkSchema = z14.object({
|
|
2920
|
+
type: z14.literal("response.created"),
|
|
2921
|
+
response: z14.object({
|
|
2922
|
+
id: z14.string(),
|
|
2923
|
+
created_at: z14.number(),
|
|
2924
|
+
model: z14.string()
|
|
2291
2925
|
})
|
|
2292
2926
|
});
|
|
2293
|
-
var
|
|
2294
|
-
type:
|
|
2295
|
-
output_index:
|
|
2296
|
-
item:
|
|
2297
|
-
|
|
2298
|
-
type:
|
|
2927
|
+
var responseOutputItemAddedSchema = z14.object({
|
|
2928
|
+
type: z14.literal("response.output_item.added"),
|
|
2929
|
+
output_index: z14.number(),
|
|
2930
|
+
item: z14.discriminatedUnion("type", [
|
|
2931
|
+
z14.object({
|
|
2932
|
+
type: z14.literal("message"),
|
|
2933
|
+
id: z14.string()
|
|
2299
2934
|
}),
|
|
2300
|
-
|
|
2301
|
-
type:
|
|
2302
|
-
id:
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2935
|
+
z14.object({
|
|
2936
|
+
type: z14.literal("reasoning"),
|
|
2937
|
+
id: z14.string(),
|
|
2938
|
+
encrypted_content: z14.string().nullish()
|
|
2939
|
+
}),
|
|
2940
|
+
z14.object({
|
|
2941
|
+
type: z14.literal("function_call"),
|
|
2942
|
+
id: z14.string(),
|
|
2943
|
+
call_id: z14.string(),
|
|
2944
|
+
name: z14.string(),
|
|
2945
|
+
arguments: z14.string()
|
|
2946
|
+
}),
|
|
2947
|
+
z14.object({
|
|
2948
|
+
type: z14.literal("web_search_call"),
|
|
2949
|
+
id: z14.string(),
|
|
2950
|
+
status: z14.string()
|
|
2951
|
+
}),
|
|
2952
|
+
z14.object({
|
|
2953
|
+
type: z14.literal("computer_call"),
|
|
2954
|
+
id: z14.string(),
|
|
2955
|
+
status: z14.string()
|
|
2307
2956
|
})
|
|
2308
2957
|
])
|
|
2309
2958
|
});
|
|
2310
|
-
var
|
|
2311
|
-
type:
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2959
|
+
var responseOutputItemDoneSchema = z14.object({
|
|
2960
|
+
type: z14.literal("response.output_item.done"),
|
|
2961
|
+
output_index: z14.number(),
|
|
2962
|
+
item: z14.discriminatedUnion("type", [
|
|
2963
|
+
z14.object({
|
|
2964
|
+
type: z14.literal("message"),
|
|
2965
|
+
id: z14.string()
|
|
2966
|
+
}),
|
|
2967
|
+
z14.object({
|
|
2968
|
+
type: z14.literal("reasoning"),
|
|
2969
|
+
id: z14.string(),
|
|
2970
|
+
encrypted_content: z14.string().nullish()
|
|
2971
|
+
}),
|
|
2972
|
+
z14.object({
|
|
2973
|
+
type: z14.literal("function_call"),
|
|
2974
|
+
id: z14.string(),
|
|
2975
|
+
call_id: z14.string(),
|
|
2976
|
+
name: z14.string(),
|
|
2977
|
+
arguments: z14.string(),
|
|
2978
|
+
status: z14.literal("completed")
|
|
2322
2979
|
}),
|
|
2323
|
-
|
|
2324
|
-
type:
|
|
2325
|
-
id:
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2980
|
+
z14.object({
|
|
2981
|
+
type: z14.literal("web_search_call"),
|
|
2982
|
+
id: z14.string(),
|
|
2983
|
+
status: z14.literal("completed")
|
|
2984
|
+
}),
|
|
2985
|
+
z14.object({
|
|
2986
|
+
type: z14.literal("computer_call"),
|
|
2987
|
+
id: z14.string(),
|
|
2988
|
+
status: z14.literal("completed")
|
|
2329
2989
|
})
|
|
2330
2990
|
])
|
|
2331
2991
|
});
|
|
2332
|
-
var
|
|
2333
|
-
type:
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2992
|
+
var responseFunctionCallArgumentsDeltaSchema = z14.object({
|
|
2993
|
+
type: z14.literal("response.function_call_arguments.delta"),
|
|
2994
|
+
item_id: z14.string(),
|
|
2995
|
+
output_index: z14.number(),
|
|
2996
|
+
delta: z14.string()
|
|
2997
|
+
});
|
|
2998
|
+
var responseAnnotationAddedSchema = z14.object({
|
|
2999
|
+
type: z14.literal("response.output_text.annotation.added"),
|
|
3000
|
+
annotation: z14.object({
|
|
3001
|
+
type: z14.literal("url_citation"),
|
|
3002
|
+
url: z14.string(),
|
|
3003
|
+
title: z14.string()
|
|
2338
3004
|
})
|
|
2339
3005
|
});
|
|
2340
|
-
var
|
|
3006
|
+
var responseReasoningSummaryPartAddedSchema = z14.object({
|
|
3007
|
+
type: z14.literal("response.reasoning_summary_part.added"),
|
|
3008
|
+
item_id: z14.string(),
|
|
3009
|
+
summary_index: z14.number()
|
|
3010
|
+
});
|
|
3011
|
+
var responseReasoningSummaryTextDeltaSchema = z14.object({
|
|
3012
|
+
type: z14.literal("response.reasoning_summary_text.delta"),
|
|
3013
|
+
item_id: z14.string(),
|
|
3014
|
+
summary_index: z14.number(),
|
|
3015
|
+
delta: z14.string()
|
|
3016
|
+
});
|
|
3017
|
+
var openaiResponsesChunkSchema = z14.union([
|
|
2341
3018
|
textDeltaChunkSchema,
|
|
2342
3019
|
responseFinishedChunkSchema,
|
|
2343
3020
|
responseCreatedChunkSchema,
|
|
3021
|
+
responseOutputItemAddedSchema,
|
|
2344
3022
|
responseOutputItemDoneSchema,
|
|
2345
3023
|
responseFunctionCallArgumentsDeltaSchema,
|
|
2346
|
-
responseOutputItemAddedSchema,
|
|
2347
3024
|
responseAnnotationAddedSchema,
|
|
2348
|
-
|
|
3025
|
+
responseReasoningSummaryPartAddedSchema,
|
|
3026
|
+
responseReasoningSummaryTextDeltaSchema,
|
|
3027
|
+
errorChunkSchema,
|
|
3028
|
+
z14.object({ type: z14.string() }).loose()
|
|
2349
3029
|
// fallback for unknown chunks
|
|
2350
3030
|
]);
|
|
2351
3031
|
function isTextDeltaChunk(chunk) {
|
|
@@ -2354,6 +3034,9 @@ function isTextDeltaChunk(chunk) {
|
|
|
2354
3034
|
function isResponseOutputItemDoneChunk(chunk) {
|
|
2355
3035
|
return chunk.type === "response.output_item.done";
|
|
2356
3036
|
}
|
|
3037
|
+
function isResponseOutputItemDoneReasoningChunk(chunk) {
|
|
3038
|
+
return isResponseOutputItemDoneChunk(chunk) && chunk.item.type === "reasoning";
|
|
3039
|
+
}
|
|
2357
3040
|
function isResponseFinishedChunk(chunk) {
|
|
2358
3041
|
return chunk.type === "response.completed" || chunk.type === "response.incomplete";
|
|
2359
3042
|
}
|
|
@@ -2366,11 +3049,23 @@ function isResponseFunctionCallArgumentsDeltaChunk(chunk) {
|
|
|
2366
3049
|
function isResponseOutputItemAddedChunk(chunk) {
|
|
2367
3050
|
return chunk.type === "response.output_item.added";
|
|
2368
3051
|
}
|
|
3052
|
+
function isResponseOutputItemAddedReasoningChunk(chunk) {
|
|
3053
|
+
return isResponseOutputItemAddedChunk(chunk) && chunk.item.type === "reasoning";
|
|
3054
|
+
}
|
|
2369
3055
|
function isResponseAnnotationAddedChunk(chunk) {
|
|
2370
3056
|
return chunk.type === "response.output_text.annotation.added";
|
|
2371
3057
|
}
|
|
3058
|
+
function isResponseReasoningSummaryPartAddedChunk(chunk) {
|
|
3059
|
+
return chunk.type === "response.reasoning_summary_part.added";
|
|
3060
|
+
}
|
|
3061
|
+
function isResponseReasoningSummaryTextDeltaChunk(chunk) {
|
|
3062
|
+
return chunk.type === "response.reasoning_summary_text.delta";
|
|
3063
|
+
}
|
|
3064
|
+
function isErrorChunk(chunk) {
|
|
3065
|
+
return chunk.type === "error";
|
|
3066
|
+
}
|
|
2372
3067
|
function getResponsesModelConfig(modelId) {
|
|
2373
|
-
if (modelId.startsWith("o")) {
|
|
3068
|
+
if (modelId.startsWith("o") || modelId.startsWith("codex-") || modelId.startsWith("computer-use")) {
|
|
2374
3069
|
if (modelId.startsWith("o1-mini") || modelId.startsWith("o1-preview")) {
|
|
2375
3070
|
return {
|
|
2376
3071
|
isReasoningModel: true,
|
|
@@ -2390,48 +3085,58 @@ function getResponsesModelConfig(modelId) {
|
|
|
2390
3085
|
requiredAutoTruncation: false
|
|
2391
3086
|
};
|
|
2392
3087
|
}
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
3088
|
+
function supportsFlexProcessing2(modelId) {
|
|
3089
|
+
return modelId.startsWith("o3") || modelId.startsWith("o4-mini");
|
|
3090
|
+
}
|
|
3091
|
+
function supportsPriorityProcessing2(modelId) {
|
|
3092
|
+
return modelId.startsWith("gpt-4") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
|
|
3093
|
+
}
|
|
3094
|
+
var openaiResponsesProviderOptionsSchema = z14.object({
|
|
3095
|
+
metadata: z14.any().nullish(),
|
|
3096
|
+
parallelToolCalls: z14.boolean().nullish(),
|
|
3097
|
+
previousResponseId: z14.string().nullish(),
|
|
3098
|
+
store: z14.boolean().nullish(),
|
|
3099
|
+
user: z14.string().nullish(),
|
|
3100
|
+
reasoningEffort: z14.string().nullish(),
|
|
3101
|
+
strictJsonSchema: z14.boolean().nullish(),
|
|
3102
|
+
instructions: z14.string().nullish(),
|
|
3103
|
+
reasoningSummary: z14.string().nullish(),
|
|
3104
|
+
serviceTier: z14.enum(["auto", "flex", "priority"]).nullish(),
|
|
3105
|
+
include: z14.array(z14.enum(["reasoning.encrypted_content", "file_search_call.results"])).nullish()
|
|
2402
3106
|
});
|
|
2403
3107
|
|
|
2404
3108
|
// src/openai-speech-model.ts
|
|
2405
3109
|
import {
|
|
2406
3110
|
combineHeaders as combineHeaders7,
|
|
2407
3111
|
createBinaryResponseHandler,
|
|
2408
|
-
parseProviderOptions as
|
|
3112
|
+
parseProviderOptions as parseProviderOptions7,
|
|
2409
3113
|
postJsonToApi as postJsonToApi6
|
|
2410
3114
|
} from "@ai-sdk/provider-utils";
|
|
2411
|
-
import { z as
|
|
2412
|
-
var OpenAIProviderOptionsSchema =
|
|
2413
|
-
instructions:
|
|
2414
|
-
speed:
|
|
3115
|
+
import { z as z15 } from "zod/v4";
|
|
3116
|
+
var OpenAIProviderOptionsSchema = z15.object({
|
|
3117
|
+
instructions: z15.string().nullish(),
|
|
3118
|
+
speed: z15.number().min(0.25).max(4).default(1).nullish()
|
|
2415
3119
|
});
|
|
2416
3120
|
var OpenAISpeechModel = class {
|
|
2417
3121
|
constructor(modelId, config) {
|
|
2418
3122
|
this.modelId = modelId;
|
|
2419
3123
|
this.config = config;
|
|
2420
|
-
this.specificationVersion = "
|
|
3124
|
+
this.specificationVersion = "v2";
|
|
2421
3125
|
}
|
|
2422
3126
|
get provider() {
|
|
2423
3127
|
return this.config.provider;
|
|
2424
3128
|
}
|
|
2425
|
-
getArgs({
|
|
3129
|
+
async getArgs({
|
|
2426
3130
|
text,
|
|
2427
3131
|
voice = "alloy",
|
|
2428
3132
|
outputFormat = "mp3",
|
|
2429
3133
|
speed,
|
|
2430
3134
|
instructions,
|
|
3135
|
+
language,
|
|
2431
3136
|
providerOptions
|
|
2432
3137
|
}) {
|
|
2433
3138
|
const warnings = [];
|
|
2434
|
-
const openAIOptions =
|
|
3139
|
+
const openAIOptions = await parseProviderOptions7({
|
|
2435
3140
|
provider: "openai",
|
|
2436
3141
|
providerOptions,
|
|
2437
3142
|
schema: OpenAIProviderOptionsSchema
|
|
@@ -2464,6 +3169,13 @@ var OpenAISpeechModel = class {
|
|
|
2464
3169
|
}
|
|
2465
3170
|
}
|
|
2466
3171
|
}
|
|
3172
|
+
if (language) {
|
|
3173
|
+
warnings.push({
|
|
3174
|
+
type: "unsupported-setting",
|
|
3175
|
+
setting: "language",
|
|
3176
|
+
details: `OpenAI speech models do not support language selection. Language parameter "${language}" was ignored.`
|
|
3177
|
+
});
|
|
3178
|
+
}
|
|
2467
3179
|
return {
|
|
2468
3180
|
requestBody,
|
|
2469
3181
|
warnings
|
|
@@ -2472,7 +3184,7 @@ var OpenAISpeechModel = class {
|
|
|
2472
3184
|
async doGenerate(options) {
|
|
2473
3185
|
var _a, _b, _c;
|
|
2474
3186
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
2475
|
-
const { requestBody, warnings } = this.getArgs(options);
|
|
3187
|
+
const { requestBody, warnings } = await this.getArgs(options);
|
|
2476
3188
|
const {
|
|
2477
3189
|
value: audio,
|
|
2478
3190
|
responseHeaders,
|
|
@@ -2507,10 +3219,9 @@ var OpenAISpeechModel = class {
|
|
|
2507
3219
|
|
|
2508
3220
|
// src/openai-provider.ts
|
|
2509
3221
|
function createOpenAI(options = {}) {
|
|
2510
|
-
var _a, _b
|
|
3222
|
+
var _a, _b;
|
|
2511
3223
|
const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.openai.com/v1";
|
|
2512
|
-
const
|
|
2513
|
-
const providerName = (_c = options.name) != null ? _c : "openai";
|
|
3224
|
+
const providerName = (_b = options.name) != null ? _b : "openai";
|
|
2514
3225
|
const getHeaders = () => ({
|
|
2515
3226
|
Authorization: `Bearer ${loadApiKey({
|
|
2516
3227
|
apiKey: options.apiKey,
|
|
@@ -2521,27 +3232,25 @@ function createOpenAI(options = {}) {
|
|
|
2521
3232
|
"OpenAI-Project": options.project,
|
|
2522
3233
|
...options.headers
|
|
2523
3234
|
});
|
|
2524
|
-
const createChatModel = (modelId
|
|
3235
|
+
const createChatModel = (modelId) => new OpenAIChatLanguageModel(modelId, {
|
|
2525
3236
|
provider: `${providerName}.chat`,
|
|
2526
3237
|
url: ({ path }) => `${baseURL}${path}`,
|
|
2527
3238
|
headers: getHeaders,
|
|
2528
|
-
compatibility,
|
|
2529
3239
|
fetch: options.fetch
|
|
2530
3240
|
});
|
|
2531
|
-
const createCompletionModel = (modelId
|
|
3241
|
+
const createCompletionModel = (modelId) => new OpenAICompletionLanguageModel(modelId, {
|
|
2532
3242
|
provider: `${providerName}.completion`,
|
|
2533
3243
|
url: ({ path }) => `${baseURL}${path}`,
|
|
2534
3244
|
headers: getHeaders,
|
|
2535
|
-
compatibility,
|
|
2536
3245
|
fetch: options.fetch
|
|
2537
3246
|
});
|
|
2538
|
-
const createEmbeddingModel = (modelId
|
|
3247
|
+
const createEmbeddingModel = (modelId) => new OpenAIEmbeddingModel(modelId, {
|
|
2539
3248
|
provider: `${providerName}.embedding`,
|
|
2540
3249
|
url: ({ path }) => `${baseURL}${path}`,
|
|
2541
3250
|
headers: getHeaders,
|
|
2542
3251
|
fetch: options.fetch
|
|
2543
3252
|
});
|
|
2544
|
-
const createImageModel = (modelId
|
|
3253
|
+
const createImageModel = (modelId) => new OpenAIImageModel(modelId, {
|
|
2545
3254
|
provider: `${providerName}.image`,
|
|
2546
3255
|
url: ({ path }) => `${baseURL}${path}`,
|
|
2547
3256
|
headers: getHeaders,
|
|
@@ -2559,19 +3268,13 @@ function createOpenAI(options = {}) {
|
|
|
2559
3268
|
headers: getHeaders,
|
|
2560
3269
|
fetch: options.fetch
|
|
2561
3270
|
});
|
|
2562
|
-
const createLanguageModel = (modelId
|
|
3271
|
+
const createLanguageModel = (modelId) => {
|
|
2563
3272
|
if (new.target) {
|
|
2564
3273
|
throw new Error(
|
|
2565
3274
|
"The OpenAI model function cannot be called with the new keyword."
|
|
2566
3275
|
);
|
|
2567
3276
|
}
|
|
2568
|
-
|
|
2569
|
-
return createCompletionModel(
|
|
2570
|
-
modelId,
|
|
2571
|
-
settings
|
|
2572
|
-
);
|
|
2573
|
-
}
|
|
2574
|
-
return createChatModel(modelId, settings);
|
|
3277
|
+
return createResponsesModel(modelId);
|
|
2575
3278
|
};
|
|
2576
3279
|
const createResponsesModel = (modelId) => {
|
|
2577
3280
|
return new OpenAIResponsesLanguageModel(modelId, {
|
|
@@ -2581,8 +3284,8 @@ function createOpenAI(options = {}) {
|
|
|
2581
3284
|
fetch: options.fetch
|
|
2582
3285
|
});
|
|
2583
3286
|
};
|
|
2584
|
-
const provider = function(modelId
|
|
2585
|
-
return createLanguageModel(modelId
|
|
3287
|
+
const provider = function(modelId) {
|
|
3288
|
+
return createLanguageModel(modelId);
|
|
2586
3289
|
};
|
|
2587
3290
|
provider.languageModel = createLanguageModel;
|
|
2588
3291
|
provider.chat = createChatModel;
|
|
@@ -2600,10 +3303,7 @@ function createOpenAI(options = {}) {
|
|
|
2600
3303
|
provider.tools = openaiTools;
|
|
2601
3304
|
return provider;
|
|
2602
3305
|
}
|
|
2603
|
-
var openai = createOpenAI(
|
|
2604
|
-
compatibility: "strict"
|
|
2605
|
-
// strict for OpenAI API
|
|
2606
|
-
});
|
|
3306
|
+
var openai = createOpenAI();
|
|
2607
3307
|
export {
|
|
2608
3308
|
createOpenAI,
|
|
2609
3309
|
openai
|