@ai-sdk/openai 4.0.91 → 4.0.93

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.
@@ -449,7 +449,7 @@ declare const openaiResponsesLocalShellCallSchema: z.ZodObject<{
449
449
  }, z.core.$strip>;
450
450
  }, z.core.$strip>;
451
451
  type OpenAIResponsesInput = Array<OpenAIResponsesInputItem>;
452
- type OpenAIResponsesInputItem = OpenAIResponsesSystemMessage | OpenAIResponsesUserMessage | OpenAIResponsesAssistantMessage | OpenAIResponsesFunctionCall | OpenAIResponsesFunctionCallOutput | OpenAIResponsesProgram | OpenAIResponsesProgramOutput | OpenAIResponsesCustomToolCall | OpenAIResponsesCustomToolCallOutput | OpenAIResponsesMcpApprovalResponse | OpenAIResponsesComputerCall | OpenAIResponsesComputerCallOutput | OpenAIResponsesLocalShellCall | OpenAIResponsesLocalShellCallOutput | OpenAIResponsesShellCall | OpenAIResponsesShellCallOutput | OpenAIResponsesApplyPatchCall | OpenAIResponsesApplyPatchCallOutput | OpenAIResponsesToolSearchCall | OpenAIResponsesToolSearchOutput | OpenAIResponsesReasoning | OpenAIResponsesItemReference | OpenAIResponsesCompactionItem | OpenAIResponsesConfigurationUpdate | OpenAIResponsesCompactionTrigger;
452
+ type OpenAIResponsesInputItem = OpenAIResponsesSystemMessage | OpenAIResponsesUserMessage | OpenAIResponsesAssistantMessage | OpenAIResponsesFunctionCall | OpenAIResponsesFunctionCallOutput | OpenAIResponsesProgram | OpenAIResponsesProgramOutput | OpenAIResponsesCustomToolCall | OpenAIResponsesCustomToolCallOutput | OpenAIResponsesMcpApprovalResponse | OpenAIResponsesComputerCall | OpenAIResponsesComputerCallOutput | OpenAIResponsesLocalShellCall | OpenAIResponsesLocalShellCallOutput | OpenAIResponsesShellCall | OpenAIResponsesShellCallOutput | OpenAIResponsesApplyPatchCall | OpenAIResponsesApplyPatchCallOutput | OpenAIResponsesToolSearchCall | OpenAIResponsesToolSearchOutput | OpenAIResponsesWebSearchCall | OpenAIResponsesReasoning | OpenAIResponsesItemReference | OpenAIResponsesCompactionItem | OpenAIResponsesConfigurationUpdate | OpenAIResponsesCompactionTrigger;
453
453
  type OpenAIResponsesIncludeValue = 'web_search_call.action.sources' | 'web_search_call.results' | 'code_interpreter_call.outputs' | 'computer_call_output.output.image_url' | 'file_search_call.results' | 'message.input_image.image_url' | 'message.output_text.logprobs' | 'reasoning.encrypted_content';
454
454
  type OpenAIResponsesIncludeOptions = Array<OpenAIResponsesIncludeValue> | undefined | null;
455
455
  type OpenAIResponsesSystemMessage = {
@@ -584,6 +584,12 @@ type OpenAIResponsesProgramOutput = {
584
584
  result: string;
585
585
  status: 'completed' | 'incomplete';
586
586
  };
587
+ type OpenAIResponsesWebSearchCall = {
588
+ type: 'web_search_call';
589
+ id: string;
590
+ status: 'completed';
591
+ action: OpenAIResponsesWebSearchAction;
592
+ };
587
593
  type OpenAIResponsesCustomToolCall = {
588
594
  type: 'custom_tool_call';
589
595
  id?: string;
@@ -2039,6 +2045,9 @@ export type OpenaiResponsesTextProviderMetadata = {
2039
2045
  openai: ResponsesTextProviderMetadata;
2040
2046
  };
2041
2047
  export type ResponsesSourceDocumentProviderMetadata = {
2048
+ type: 'file_search';
2049
+ fileId: string;
2050
+ } | {
2042
2051
  type: 'file_citation';
2043
2052
  fileId: string;
2044
2053
  index: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["TranscriptionModelV4StreamOptions","_$__openai_responses_api0.OpenAIResponsesTool","_$__openai_responses_api0.OpenAIResponsesAllowedTool","_$__openai_responses_api0.OpenAIResponsesInput"],"sources":["../../src/chat/openai-chat-language-model-options.ts","../../src/chat/openai-chat-language-model.ts","../../src/completion/openai-completion-language-model-options.ts","../../src/completion/openai-completion-language-model.ts","../../src/openai-config.ts","../../src/embedding/openai-embedding-model-options.ts","../../src/embedding/openai-embedding-model.ts","../../src/image/openai-image-model-options.ts","../../src/image/openai-image-model.ts","../../src/transcription/openai-transcription-model-options.ts","../../src/transcription/openai-transcription-model.ts","../../src/speech/openai-speech-model-options.ts","../../src/speech/openai-speech-model.ts","../../src/responses/openai-responses-api.ts","../../src/tool/web-search.ts","../../src/responses/openai-responses-language-model-options.ts","../../src/responses/openai-responses-language-model.ts","../../src/responses/openai-responses-provider-metadata.ts","../../src/tool/apply-patch.ts","../../src/tool/code-interpreter.ts","../../src/tool/file-search.ts","../../src/tool/image-generation.ts","../../src/tool/programmatic-tool-calling.ts","../../src/tool/web-search-preview.ts"],"mappings":"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,2BACR,+BACA,6BACA,kCACA,8BACA,oCACA,yBACA,+BACA,gCACA,sCACA,qCACA,8BACA,oCACA,gCACA,sCACA,2BACA,iCACA,gCACA,sCACA,gCACA,kCACA,2BACA,+BACA,gCACA,qCACA;KAEQ;KAUA,gCACR,MAAM;KAmBE;EACV;EACA;EACA,kBAEI;IACE;IACA;IACA;MAA4B;;;;KAIxB;EACV;EACA;EACA,SAAS;IAEH;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;;KAKxB;EACV;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS;;KAGC;EACV;EACA;EACA,iBAEI;IAEM;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;EAGtC,SAAS;;KAGC;EACN;;EACA;EAAiB;;KAEX;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA,QAAQ;;KAGE;EACV;EACA;EACA;;KAOU,8BAA8B,mBACjC;KAGG;EACV;EACA;EACA;IACE;IACA;IACA;IACA;;EAEF,6BAA6B;IAC3B;IACA;IACA;;;KAIQ,gCAAgC,mBACnC;KAGG;EACV;EACA;EACA;;;;;KAMU;EACV;EACA;EACA;EACA;EACA;IACE;IACA;IACA;;;KAIQ;EACV;EACA;EACA;EACA;EACA;EACA,QAAQ;IACN;IACA;IACA;MAAW;;MAAsB;MAAc;;;;KAIvC;EACV;EACA;EACA;EACA;EACA;IAEM;IACA;IACA;;IAGA;IACA;;IAGA;IACA;IACA;;;KAII;EACV;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA,OAAO,MAAM;;KAGH;EACV;EACA;;KAGU;EACV;EACA;EACA;;KAGU;EACV;EACA;IACE;;;KAIQ;EACV;;;;;KAMU;;;;EAIV;;;;EAKA;;;;EAKA;;;;;KAMU;;;;EAIV;;;;EAKA,SAAS,MACL,gDACA;;KAIM;EACV;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA,kBAAkB;EAClB,gBAAgB;;;;;;KAON;EACN;EAAkB;;EAClB;EAAgB;;EAChB;EAAa;;EAEb,MAAM,QACJ;;KAKI,sBACR;EAEE;EACA;EACA;EACA,OAAO,MAAM;;EAGb;;EAGA;;EAGA;EACA;EACA;IAEM;IACA;;EAGN;EACA;IAEM;IACA;IACA;IACA;IACA;;;EAKN;EACA;EACA;IAEM;IACA;IACA;IACA;IACA;;;EAKN;EACA;IAAsB;IAAc;;;EAGpC;EACA;EACA;EACA;IACM;IAAiB;;EAEvB,SACI,gDACA;;EAIJ;EACA;EACA;EACA;EACA;IAEM;IACA;;EAGN;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;EAaA;EACA;EACA;IAGM;IACA;;EAGN;EACA;EACA,SAAS;EACT;IAIM;MAAU;;;EAGhB;EACA;;EAGA;EACA;EACA;EACA;EACA;IAEM;IACA;IACA;;IAGA;;;EAIN;;EAGA;EACA;IAEM;IACA;IACA;IACA;MACM;;MAEA;MACA;MACA,iBAAiB;QACf;QACA;QACA;;;IAGR,SAAS;MAEH;MACA;MACA;;MAGA;MACA;MACA;MACA;QACE;QACA;QACA;;;;IAMR;IACA;;IAGA;IACA,SAAS;MACP;MACA;MACA;;;;EAKR;EACA;EACA;EACA,aAAa;;EAGb;;KAGM;EACV;EACA;EACA;EACA,SAAS;IACP;IACA;;;cA6GS,6DAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"index.d.ts","names":["TranscriptionModelV4StreamOptions","_$__openai_responses_api0.OpenAIResponsesTool","_$__openai_responses_api0.OpenAIResponsesAllowedTool","_$__openai_responses_api0.OpenAIResponsesInput"],"sources":["../../src/chat/openai-chat-language-model-options.ts","../../src/chat/openai-chat-language-model.ts","../../src/completion/openai-completion-language-model-options.ts","../../src/completion/openai-completion-language-model.ts","../../src/openai-config.ts","../../src/embedding/openai-embedding-model-options.ts","../../src/embedding/openai-embedding-model.ts","../../src/image/openai-image-model-options.ts","../../src/image/openai-image-model.ts","../../src/transcription/openai-transcription-model-options.ts","../../src/transcription/openai-transcription-model.ts","../../src/speech/openai-speech-model-options.ts","../../src/speech/openai-speech-model.ts","../../src/responses/openai-responses-api.ts","../../src/tool/web-search.ts","../../src/responses/openai-responses-language-model-options.ts","../../src/responses/openai-responses-language-model.ts","../../src/responses/openai-responses-provider-metadata.ts","../../src/tool/apply-patch.ts","../../src/tool/code-interpreter.ts","../../src/tool/file-search.ts","../../src/tool/image-generation.ts","../../src/tool/programmatic-tool-calling.ts","../../src/tool/web-search-preview.ts"],"mappings":"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,2BACR,+BACA,6BACA,kCACA,8BACA,oCACA,yBACA,+BACA,gCACA,sCACA,qCACA,8BACA,oCACA,gCACA,sCACA,2BACA,iCACA,gCACA,sCACA,gCACA,kCACA,+BACA,2BACA,+BACA,gCACA,qCACA;KAEQ;KAUA,gCACR,MAAM;KAmBE;EACV;EACA;EACA,kBAEI;IACE;IACA;IACA;MAA4B;;;;KAIxB;EACV;EACA;EACA,SAAS;IAEH;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;;KAKxB;EACV;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS;;KAGC;EACV;EACA;EACA,iBAEI;IAEM;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;IAG5B;IACA;IACA;MAA4B;;;EAGtC,SAAS;;KAGC;EACN;;EACA;EAAiB;;KAEX;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA,QAAQ;;KAGE;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA,QAAQ;;KAGE;EACV;EACA;EACA;;KAOU,8BAA8B,mBACjC;KAGG;EACV;EACA;EACA;IACE;IACA;IACA;IACA;;EAEF,6BAA6B;IAC3B;IACA;IACA;;;KAIQ,gCAAgC,mBACnC;KAGG;EACV;EACA;EACA;;;;;KAMU;EACV;EACA;EACA;EACA;EACA;IACE;IACA;IACA;;;KAIQ;EACV;EACA;EACA;EACA;EACA;EACA,QAAQ;IACN;IACA;IACA;MAAW;;MAAsB;MAAc;;;;KAIvC;EACV;EACA;EACA;EACA;EACA;IAEM;IACA;IACA;;IAGA;IACA;;IAGA;IACA;IACA;;;KAII;EACV;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA,OAAO,MAAM;;KAGH;EACV;EACA;;KAGU;EACV;EACA;EACA;;KAGU;EACV;EACA;IACE;;;KAIQ;EACV;;;;;KAMU;;;;EAIV;;;;EAKA;;;;EAKA;;;;;KAMU;;;;EAIV;;;;EAKA,SAAS,MACL,gDACA;;KAIM;EACV;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA,kBAAkB;EAClB,gBAAgB;;;;;;KAON;EACN;EAAkB;;EAClB;EAAgB;;EAChB;EAAa;;EAEb,MAAM,QACJ;;KAKI,sBACR;EAEE;EACA;EACA;EACA,OAAO,MAAM;;EAGb;;EAGA;;EAGA;EACA;EACA;IAEM;IACA;;EAGN;EACA;IAEM;IACA;IACA;IACA;IACA;;;EAKN;EACA;EACA;IAEM;IACA;IACA;IACA;IACA;;;EAKN;EACA;IAAsB;IAAc;;;EAGpC;EACA;EACA;EACA;IACM;IAAiB;;EAEvB,SACI,gDACA;;EAIJ;EACA;EACA;EACA;EACA;IAEM;IACA;;EAGN;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;EAaA;EACA;EACA;IAGM;IACA;;EAGN;EACA;EACA,SAAS;EACT;IAIM;MAAU;;;EAGhB;EACA;;EAGA;EACA;EACA;EACA;EACA;IAEM;IACA;IACA;;IAGA;;;EAIN;;EAGA;EACA;IAEM;IACA;IACA;IACA;MACM;;MAEA;MACA;MACA,iBAAiB;QACf;QACA;QACA;;;IAGR,SAAS;MAEH;MACA;MACA;;MAGA;MACA;MACA;MACA;QACE;QACA;QACA;;;;IAMR;IACA;;IAGA;IACA,SAAS;MACP;MACA;MACA;;;;EAKR;EACA;EACA;EACA,aAAa;;EAGb;;KAGM;EACV;EACA;EACA;EACA,SAAS;IACP;IACA;;;cA6GS,6DAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -1,5 +1,5 @@
1
1
  import { APICallError, InvalidPromptError, InvalidResponseDataError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError, isJSONObject } from "@ai-sdk/provider";
2
- import { EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL, StreamingToolCallTracker, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, connectToWebSocket, convertBase64ToUint8Array, convertToBase64, convertToFormData, createBinaryResponseHandler, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createLanguageModelResponseMetadata, createLanguageModelResponseMetadata as getResponseMetadata, createNullLanguageModelUsage, createProviderDefinedToolFactory, createProviderDefinedToolFactoryWithOutputSchema, createProviderExecutedToolFactory, createProviderStreamError, createToolNameMapping, downloadBlob, experimental_toolCaller, generateId, getTopLevelMediaType, isCustomReasoning, isNonNullable, isRecord, lazySchema, mediaTypeToExtension, parseJSON, parseProviderOptions, postFormDataToApi, postJsonToApi, resolveFullMediaType, resolveProviderReference, safeParseJSON, serializeModelOptions, toWebSocketUrl, validateTypes, waitForWebSocketBufferDrain, zodSchema } from "@ai-sdk/provider-utils";
2
+ import { EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL, StreamingToolCallTracker, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, connectToWebSocket, convertBase64ToUint8Array, convertToBase64, convertToFormData, createBinaryResponseHandler, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createLanguageModelResponseMetadata, createLanguageModelResponseMetadata as getResponseMetadata, createNullLanguageModelUsage, createProviderDefinedToolFactory, createProviderDefinedToolFactoryWithOutputSchema, createProviderExecutedToolFactory, createProviderStreamError, createToolNameMapping, downloadBlob, experimental_toolCaller, generateId, getTopLevelMediaType, isCustomReasoning, isNonNullable, isRecord, lazySchema, mediaTypeToExtension, parseJSON, parseProviderOptions, postFormDataToApi, postJsonToApi, resolveFullMediaType, resolveProviderReference, safeParseJSON, safeValidateTypes, serializeModelOptions, toWebSocketUrl, validateTypes, waitForWebSocketBufferDrain, zodSchema } from "@ai-sdk/provider-utils";
3
3
  import { z } from "zod/v4";
4
4
  //#region src/openai-error.ts
5
5
  const openaiErrorDataSchema = z.object({ error: z.object({
@@ -3243,6 +3243,59 @@ const programmaticToolCalling = () => experimental_toolCaller(programmaticToolCa
3243
3243
  }
3244
3244
  });
3245
3245
  //#endregion
3246
+ //#region src/tool/web-search.ts
3247
+ const webSearchArgsSchema = lazySchema(() => zodSchema(z.object({
3248
+ externalWebAccess: z.boolean().optional(),
3249
+ filters: z.object({
3250
+ allowedDomains: z.array(z.string()).optional(),
3251
+ blockedDomains: z.array(z.string()).optional()
3252
+ }).optional(),
3253
+ searchContextSize: z.enum([
3254
+ "low",
3255
+ "medium",
3256
+ "high"
3257
+ ]).optional(),
3258
+ userLocation: z.object({
3259
+ type: z.literal("approximate"),
3260
+ country: z.string().optional(),
3261
+ city: z.string().optional(),
3262
+ region: z.string().optional(),
3263
+ timezone: z.string().optional()
3264
+ }).optional()
3265
+ })));
3266
+ const webSearchInputSchema = lazySchema(() => zodSchema(z.object({})));
3267
+ const webSearchOutputSchema = lazySchema(() => zodSchema(z.object({
3268
+ action: z.discriminatedUnion("type", [
3269
+ z.object({
3270
+ type: z.literal("search"),
3271
+ query: z.string().optional(),
3272
+ queries: z.array(z.string()).optional()
3273
+ }),
3274
+ z.object({
3275
+ type: z.literal("openPage"),
3276
+ url: z.string().nullish()
3277
+ }),
3278
+ z.object({
3279
+ type: z.literal("findInPage"),
3280
+ url: z.string().nullish(),
3281
+ pattern: z.string().nullish()
3282
+ })
3283
+ ]).optional(),
3284
+ sources: z.array(z.discriminatedUnion("type", [z.object({
3285
+ type: z.literal("url"),
3286
+ url: z.string()
3287
+ }), z.object({
3288
+ type: z.literal("api"),
3289
+ name: z.string()
3290
+ })])).optional()
3291
+ })));
3292
+ const webSearchToolFactory = createProviderExecutedToolFactory({
3293
+ id: "openai.web_search",
3294
+ inputSchema: webSearchInputSchema,
3295
+ outputSchema: webSearchOutputSchema
3296
+ });
3297
+ const webSearch = (args = {}) => webSearchToolFactory(args);
3298
+ //#endregion
3246
3299
  //#region src/responses/expand-parallel-tool-call.ts
3247
3300
  const parallelToolName = "parallel";
3248
3301
  const recipientNamePrefix = "functions.";
@@ -3305,6 +3358,47 @@ function mapToolCaller(caller) {
3305
3358
  caller_id: caller.callerId
3306
3359
  } : caller;
3307
3360
  }
3361
+ async function convertWebSearchToolResultOutput({ output, id }) {
3362
+ if (output.type !== "json") return;
3363
+ const validation = await safeValidateTypes({
3364
+ value: output.value,
3365
+ schema: webSearchOutputSchema
3366
+ });
3367
+ if (!validation.success || validation.value.action == null) return;
3368
+ const { action, sources } = validation.value;
3369
+ switch (action.type) {
3370
+ case "search": return {
3371
+ type: "web_search_call",
3372
+ id,
3373
+ status: "completed",
3374
+ action: {
3375
+ type: "search",
3376
+ ...action.query != null && { query: action.query },
3377
+ ...action.queries != null && { queries: action.queries },
3378
+ ...sources != null && { sources }
3379
+ }
3380
+ };
3381
+ case "openPage": return {
3382
+ type: "web_search_call",
3383
+ id,
3384
+ status: "completed",
3385
+ action: {
3386
+ type: "open_page",
3387
+ url: action.url
3388
+ }
3389
+ };
3390
+ case "findInPage": return {
3391
+ type: "web_search_call",
3392
+ id,
3393
+ status: "completed",
3394
+ action: {
3395
+ type: "find_in_page",
3396
+ url: action.url,
3397
+ pattern: action.pattern
3398
+ }
3399
+ };
3400
+ }
3401
+ }
3308
3402
  async function convertFunctionToolResultOutput({ output, toolName, outputSchemaToolNames, promptCacheBreakpoint, providerOptionsName, warnings }) {
3309
3403
  const hasOutputSchema = outputSchemaToolNames?.has(toolName);
3310
3404
  const convertScalarOutput = (value) => promptCacheBreakpoint == null ? value : [{
@@ -3450,7 +3544,7 @@ function isFileId(data, prefixes) {
3450
3544
  if (!prefixes) return false;
3451
3545
  return prefixes.some((prefix) => data.startsWith(prefix));
3452
3546
  }
3453
- async function convertToOpenAIResponsesInput({ prompt, toolNameMapping, systemMessageMode, providerOptionsName, explicitMessageItemType = false, fileIdPrefixes, passThroughUnsupportedFiles = false, store, hasConversation = false, hasPreviousResponseId = false, hasLocalShellTool = false, hasShellTool = false, hasApplyPatchTool = false, hasComputerTool = false, toolSearchToolName, customProviderToolNames, outputSchemaToolNames, configurationUpdateUnsupportedReason }) {
3547
+ async function convertToOpenAIResponsesInput({ prompt, toolNameMapping, systemMessageMode, providerOptionsName, explicitMessageItemType = false, fileIdPrefixes, passThroughUnsupportedFiles = false, store, isReasoningModel = false, hasConversation = false, hasPreviousResponseId = false, hasLocalShellTool = false, hasShellTool = false, hasApplyPatchTool = false, hasComputerTool = false, toolSearchToolName, customProviderToolNames, outputSchemaToolNames, configurationUpdateUnsupportedReason }) {
3454
3548
  let input = [];
3455
3549
  const warnings = [];
3456
3550
  const processedApprovalIds = /* @__PURE__ */ new Set();
@@ -3591,13 +3685,14 @@ async function convertToOpenAIResponsesInput({ prompt, toolNameMapping, systemMe
3591
3685
  case "assistant": {
3592
3686
  const reasoningMessages = {};
3593
3687
  const emittedTextItemIds = /* @__PURE__ */ new Set();
3688
+ let hasPrecedingReasoning = false;
3594
3689
  for (const part of content) switch (part.type) {
3595
3690
  case "text": {
3596
3691
  const providerOptions = part.providerOptions?.[providerOptionsName];
3597
3692
  const id = providerOptions?.itemId;
3598
3693
  const phase = providerOptions?.phase;
3599
3694
  if (hasConversation && id != null) break;
3600
- if (store && id != null) {
3695
+ if (store && id != null && (!isReasoningModel || hasPrecedingReasoning)) {
3601
3696
  if (!emittedTextItemIds.has(id)) {
3602
3697
  emittedTextItemIds.add(id);
3603
3698
  input.push({
@@ -3822,6 +3917,24 @@ async function convertToOpenAIResponsesInput({ prompt, toolNameMapping, systemMe
3822
3917
  if (part.output.type === "execution-denied" || part.output.type === "json" && typeof part.output.value === "object" && part.output.value != null && "type" in part.output.value && part.output.value.type === "execution-denied") break;
3823
3918
  if (hasConversation) break;
3824
3919
  const resolvedResultToolName = toolNameMapping.toProviderToolName(part.toolName);
3920
+ if (resolvedResultToolName === "web_search" || resolvedResultToolName === "web_search_preview") {
3921
+ const itemId = (part.providerOptions?.[providerOptionsName])?.itemId ?? part.toolCallId;
3922
+ if (store) {
3923
+ input.push({
3924
+ type: "item_reference",
3925
+ id: itemId
3926
+ });
3927
+ break;
3928
+ }
3929
+ const webSearchCall = await convertWebSearchToolResultOutput({
3930
+ output: part.output,
3931
+ id: itemId
3932
+ });
3933
+ if (webSearchCall != null) {
3934
+ input.push(webSearchCall);
3935
+ break;
3936
+ }
3937
+ }
3825
3938
  if (part.toolName === toolSearchToolName) {
3826
3939
  const itemId = part.providerOptions?.[providerOptionsName]?.itemId ?? part.providerMetadata?.[providerOptionsName]?.itemId ?? part.toolCallId;
3827
3940
  if (store) input.push({
@@ -3899,6 +4012,7 @@ async function convertToOpenAIResponsesInput({ prompt, toolNameMapping, systemMe
3899
4012
  break;
3900
4013
  }
3901
4014
  case "reasoning": {
4015
+ hasPrecedingReasoning = true;
3902
4016
  const providerOptions = await parseProviderOptions({
3903
4017
  provider: providerOptionsName,
3904
4018
  providerOptions: part.providerOptions,
@@ -4257,6 +4371,40 @@ const openaiResponsesReasoningProviderOptionsSchema = z.object({
4257
4371
  reasoningEncryptedContent: z.string().nullish()
4258
4372
  });
4259
4373
  //#endregion
4374
+ //#region src/responses/map-openai-responses-annotation.ts
4375
+ function mapOpenAIResponsesAnnotationSource(annotation, providerOptionsName, id) {
4376
+ if (annotation.type === "url_citation") return {
4377
+ type: "source",
4378
+ sourceType: "url",
4379
+ id,
4380
+ url: annotation.url,
4381
+ title: annotation.title
4382
+ };
4383
+ const filename = annotation.type === "file_path" ? annotation.file_id : annotation.filename;
4384
+ return {
4385
+ type: "source",
4386
+ sourceType: "document",
4387
+ id,
4388
+ mediaType: annotation.type === "file_path" ? "application/octet-stream" : "text/plain",
4389
+ title: filename,
4390
+ filename,
4391
+ providerMetadata: { [providerOptionsName]: {
4392
+ type: annotation.type,
4393
+ fileId: annotation.file_id,
4394
+ ...annotation.type === "container_file_citation" ? { containerId: annotation.container_id } : { index: annotation.index }
4395
+ } }
4396
+ };
4397
+ }
4398
+ function mapOpenAIResponsesCitations(annotations, providerOptionsName) {
4399
+ return annotations.flatMap((annotation) => annotation.type === "file_path" ? [] : [{
4400
+ source: mapOpenAIResponsesAnnotationSource(annotation, providerOptionsName, annotation.type === "url_citation" ? annotation.url : annotation.file_id),
4401
+ ..."start_index" in annotation ? {
4402
+ startIndex: annotation.start_index,
4403
+ endIndex: annotation.end_index
4404
+ } : {}
4405
+ }]);
4406
+ }
4407
+ //#endregion
4260
4408
  //#region src/responses/map-openai-responses-finish-reason.ts
4261
4409
  function mapOpenAIResponseFinishReason({ finishReason, hasFunctionCall }) {
4262
4410
  switch (finishReason) {
@@ -5472,59 +5620,6 @@ createProviderExecutedToolFactory({
5472
5620
  outputSchema: mcpOutputSchema
5473
5621
  });
5474
5622
  //#endregion
5475
- //#region src/tool/web-search.ts
5476
- const webSearchArgsSchema = lazySchema(() => zodSchema(z.object({
5477
- externalWebAccess: z.boolean().optional(),
5478
- filters: z.object({
5479
- allowedDomains: z.array(z.string()).optional(),
5480
- blockedDomains: z.array(z.string()).optional()
5481
- }).optional(),
5482
- searchContextSize: z.enum([
5483
- "low",
5484
- "medium",
5485
- "high"
5486
- ]).optional(),
5487
- userLocation: z.object({
5488
- type: z.literal("approximate"),
5489
- country: z.string().optional(),
5490
- city: z.string().optional(),
5491
- region: z.string().optional(),
5492
- timezone: z.string().optional()
5493
- }).optional()
5494
- })));
5495
- const webSearchInputSchema = lazySchema(() => zodSchema(z.object({})));
5496
- const webSearchOutputSchema = lazySchema(() => zodSchema(z.object({
5497
- action: z.discriminatedUnion("type", [
5498
- z.object({
5499
- type: z.literal("search"),
5500
- query: z.string().optional(),
5501
- queries: z.array(z.string()).optional()
5502
- }),
5503
- z.object({
5504
- type: z.literal("openPage"),
5505
- url: z.string().nullish()
5506
- }),
5507
- z.object({
5508
- type: z.literal("findInPage"),
5509
- url: z.string().nullish(),
5510
- pattern: z.string().nullish()
5511
- })
5512
- ]).optional(),
5513
- sources: z.array(z.discriminatedUnion("type", [z.object({
5514
- type: z.literal("url"),
5515
- url: z.string()
5516
- }), z.object({
5517
- type: z.literal("api"),
5518
- name: z.string()
5519
- })])).optional()
5520
- })));
5521
- const webSearchToolFactory = createProviderExecutedToolFactory({
5522
- id: "openai.web_search",
5523
- inputSchema: webSearchInputSchema,
5524
- outputSchema: webSearchOutputSchema
5525
- });
5526
- const webSearch = (args = {}) => webSearchToolFactory(args);
5527
- //#endregion
5528
5623
  //#region src/tool/web-search-preview.ts
5529
5624
  const webSearchPreviewArgsSchema = lazySchema(() => zodSchema(z.object({
5530
5625
  searchContextSize: z.enum([
@@ -6209,6 +6304,7 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6209
6304
  fileIdPrefixes: config.fileIdPrefixes,
6210
6305
  passThroughUnsupportedFiles: openaiOptions?.passThroughUnsupportedFiles ?? false,
6211
6306
  store: openaiOptions?.store ?? true,
6307
+ isReasoningModel,
6212
6308
  hasConversation: openaiOptions?.conversation != null,
6213
6309
  hasPreviousResponseId: openaiOptions?.previousResponseId != null,
6214
6310
  hasLocalShellTool: hasOpenAITool("openai.local_shell"),
@@ -6448,6 +6544,9 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6448
6544
  const content = [];
6449
6545
  const logprobs = [];
6450
6546
  const functionTools = options.tools?.filter((tool) => tool.type === "function") ?? [];
6547
+ const hasWebSearchActionSources = response.output.some((part) => part.type === "web_search_call" && part.action?.type === "search" && part.action.sources?.some((source) => source.type === "url"));
6548
+ const hasFileSearchResults = response.output.some((part) => part.type === "file_search_call" && (part.results?.length ?? 0) > 0);
6549
+ const retrievedFileIds = /* @__PURE__ */ new Set();
6451
6550
  let hasFunctionCall = false;
6452
6551
  const hostedToolSearchCallIds = [];
6453
6552
  for (const part of response.output) switch (part.type) {
@@ -6553,54 +6652,13 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6553
6652
  content.push({
6554
6653
  type: "text",
6555
6654
  text: contentPart.text,
6655
+ ...contentPart.annotations.some((annotation) => annotation.type !== "file_path") && { citations: mapOpenAIResponsesCitations(contentPart.annotations, providerOptionsName) },
6556
6656
  providerMetadata: { [providerOptionsName]: providerMetadata }
6557
6657
  });
6558
- for (const annotation of contentPart.annotations) if (annotation.type === "url_citation") content.push({
6559
- type: "source",
6560
- sourceType: "url",
6561
- id: this.config.generateId?.() ?? generateId(),
6562
- url: annotation.url,
6563
- title: annotation.title
6564
- });
6565
- else if (annotation.type === "file_citation") content.push({
6566
- type: "source",
6567
- sourceType: "document",
6568
- id: this.config.generateId?.() ?? generateId(),
6569
- mediaType: "text/plain",
6570
- title: annotation.filename,
6571
- filename: annotation.filename,
6572
- providerMetadata: { [providerOptionsName]: {
6573
- type: annotation.type,
6574
- fileId: annotation.file_id,
6575
- index: annotation.index
6576
- } }
6577
- });
6578
- else if (annotation.type === "container_file_citation") content.push({
6579
- type: "source",
6580
- sourceType: "document",
6581
- id: this.config.generateId?.() ?? generateId(),
6582
- mediaType: "text/plain",
6583
- title: annotation.filename,
6584
- filename: annotation.filename,
6585
- providerMetadata: { [providerOptionsName]: {
6586
- type: annotation.type,
6587
- fileId: annotation.file_id,
6588
- containerId: annotation.container_id
6589
- } }
6590
- });
6591
- else if (annotation.type === "file_path") content.push({
6592
- type: "source",
6593
- sourceType: "document",
6594
- id: this.config.generateId?.() ?? generateId(),
6595
- mediaType: "application/octet-stream",
6596
- title: annotation.file_id,
6597
- filename: annotation.file_id,
6598
- providerMetadata: { [providerOptionsName]: {
6599
- type: annotation.type,
6600
- fileId: annotation.file_id,
6601
- index: annotation.index
6602
- } }
6603
- });
6658
+ for (const annotation of contentPart.annotations) {
6659
+ if (annotation.type === "url_citation" && hasWebSearchActionSources || annotation.type === "file_citation" && hasFileSearchResults) continue;
6660
+ content.push(mapOpenAIResponsesAnnotationSource(annotation, providerOptionsName, this.config.generateId?.() ?? generateId()));
6661
+ }
6604
6662
  }
6605
6663
  break;
6606
6664
  case "function_call": {
@@ -6693,6 +6751,14 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6693
6751
  result: { status: part.status }
6694
6752
  } : { result: mapWebSearchOutput(part.action) }
6695
6753
  });
6754
+ if (part.action?.type === "search") {
6755
+ for (const source of part.action.sources ?? []) if (source.type === "url") content.push({
6756
+ type: "source",
6757
+ sourceType: "url",
6758
+ id: this.config.generateId?.() ?? generateId(),
6759
+ url: source.url
6760
+ });
6761
+ }
6696
6762
  break;
6697
6763
  case "mcp_call": {
6698
6764
  const toolCallId = part.approval_request_id != null ? approvalRequestIdToDummyToolCallIdFromPrompt[part.approval_request_id] ?? part.id : part.id;
@@ -6795,6 +6861,22 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6795
6861
  })) ?? null
6796
6862
  }
6797
6863
  });
6864
+ for (const result of part.results ?? []) {
6865
+ if (retrievedFileIds.has(result.file_id)) continue;
6866
+ retrievedFileIds.add(result.file_id);
6867
+ content.push({
6868
+ type: "source",
6869
+ sourceType: "document",
6870
+ id: this.config.generateId?.() ?? generateId(),
6871
+ mediaType: "text/plain",
6872
+ title: result.filename,
6873
+ filename: result.filename,
6874
+ providerMetadata: { [providerOptionsName]: {
6875
+ type: "file_search",
6876
+ fileId: result.file_id
6877
+ } }
6878
+ });
6879
+ }
6798
6880
  break;
6799
6881
  case "code_interpreter_call":
6800
6882
  content.push({
@@ -6905,7 +6987,11 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6905
6987
  const logprobs = [];
6906
6988
  let responseId = null;
6907
6989
  const ongoingToolCalls = {};
6908
- const ongoingAnnotations = [];
6990
+ let ongoingAnnotations = [];
6991
+ let hasWebSearchActionSources = false;
6992
+ let hasFileSearchResults = false;
6993
+ const retrievedFileIds = /* @__PURE__ */ new Set();
6994
+ const fallbackAnnotations = [];
6909
6995
  let activeMessagePhase;
6910
6996
  let hasFunctionCall = false;
6911
6997
  const activeReasoning = {};
@@ -6978,6 +7064,11 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
6978
7064
  id: value.item.call_id,
6979
7065
  toolName
6980
7066
  });
7067
+ controller.enqueue({
7068
+ type: "tool-input-delta",
7069
+ id: value.item.call_id,
7070
+ delta: "\""
7071
+ });
6981
7072
  } else if (value.item.type === "web_search_call") {
6982
7073
  ongoingToolCalls[value.output_index] = {
6983
7074
  toolName: toolNameMapping.toCustomToolName(webSearchToolName ?? "web_search"),
@@ -7097,7 +7188,7 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7097
7188
  };
7098
7189
  else if (value.item.type === "shell_call_output") {} else if (value.item.type === "message") {
7099
7190
  activeOutputItemIds[value.output_index] = value.item.id;
7100
- ongoingAnnotations.splice(0);
7191
+ ongoingAnnotations = [];
7101
7192
  activeMessagePhase = value.item.phase ?? void 0;
7102
7193
  controller.enqueue({
7103
7194
  type: "text-start",
@@ -7133,6 +7224,7 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7133
7224
  controller.enqueue({
7134
7225
  type: "text-end",
7135
7226
  id: itemId,
7227
+ ...ongoingAnnotations.some((annotation) => annotation.type !== "file_path") && { citations: mapOpenAIResponsesCitations(ongoingAnnotations, providerOptionsName) },
7136
7228
  providerMetadata: { [providerOptionsName]: {
7137
7229
  itemId,
7138
7230
  ...phase != null && { phase },
@@ -7251,6 +7343,11 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7251
7343
  ongoingToolCalls[value.output_index] = void 0;
7252
7344
  hasFunctionCall = true;
7253
7345
  const toolName = toolNameMapping.toCustomToolName(value.item.name);
7346
+ controller.enqueue({
7347
+ type: "tool-input-delta",
7348
+ id: value.item.call_id,
7349
+ delta: "\""
7350
+ });
7254
7351
  controller.enqueue({
7255
7352
  type: "tool-input-end",
7256
7353
  id: value.item.call_id
@@ -7276,6 +7373,17 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7276
7373
  result: { status: value.item.status }
7277
7374
  } : { result: mapWebSearchOutput(value.item.action) }
7278
7375
  });
7376
+ if (value.item.action?.type === "search") {
7377
+ for (const source of value.item.action.sources ?? []) if (source.type === "url") {
7378
+ hasWebSearchActionSources = true;
7379
+ controller.enqueue({
7380
+ type: "source",
7381
+ sourceType: "url",
7382
+ id: self.config.generateId?.() ?? generateId(),
7383
+ url: source.url
7384
+ });
7385
+ }
7386
+ }
7279
7387
  } else if (value.item.type === "computer_call") {
7280
7388
  ongoingToolCalls[value.output_index] = void 0;
7281
7389
  if (value.item.call_id == null) {
@@ -7337,6 +7445,23 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7337
7445
  })) ?? null
7338
7446
  }
7339
7447
  });
7448
+ for (const result of value.item.results ?? []) {
7449
+ hasFileSearchResults = true;
7450
+ if (retrievedFileIds.has(result.file_id)) continue;
7451
+ retrievedFileIds.add(result.file_id);
7452
+ controller.enqueue({
7453
+ type: "source",
7454
+ sourceType: "document",
7455
+ id: self.config.generateId?.() ?? generateId(),
7456
+ mediaType: "text/plain",
7457
+ title: result.filename,
7458
+ filename: result.filename,
7459
+ providerMetadata: { [providerOptionsName]: {
7460
+ type: "file_search",
7461
+ fileId: result.file_id
7462
+ } }
7463
+ });
7464
+ }
7340
7465
  } else if (value.item.type === "code_interpreter_call") {
7341
7466
  ongoingToolCalls[value.output_index] = void 0;
7342
7467
  controller.enqueue({
@@ -7550,7 +7675,7 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7550
7675
  if (toolCall != null) controller.enqueue({
7551
7676
  type: "tool-input-delta",
7552
7677
  id: toolCall.toolCallId,
7553
- delta: value.delta
7678
+ delta: escapeJSONDelta(value.delta)
7554
7679
  });
7555
7680
  } else if (isResponseApplyPatchCallOperationDiffDeltaChunk(value)) {
7556
7681
  const toolCall = ongoingToolCalls[value.output_index];
@@ -7734,52 +7859,8 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7734
7859
  }
7735
7860
  } else if (isResponseAnnotationAddedChunk(value)) {
7736
7861
  ongoingAnnotations.push(value.annotation);
7737
- if (value.annotation.type === "url_citation") controller.enqueue({
7738
- type: "source",
7739
- sourceType: "url",
7740
- id: self.config.generateId?.() ?? generateId(),
7741
- url: value.annotation.url,
7742
- title: value.annotation.title
7743
- });
7744
- else if (value.annotation.type === "file_citation") controller.enqueue({
7745
- type: "source",
7746
- sourceType: "document",
7747
- id: self.config.generateId?.() ?? generateId(),
7748
- mediaType: "text/plain",
7749
- title: value.annotation.filename,
7750
- filename: value.annotation.filename,
7751
- providerMetadata: { [providerOptionsName]: {
7752
- type: value.annotation.type,
7753
- fileId: value.annotation.file_id,
7754
- index: value.annotation.index
7755
- } }
7756
- });
7757
- else if (value.annotation.type === "container_file_citation") controller.enqueue({
7758
- type: "source",
7759
- sourceType: "document",
7760
- id: self.config.generateId?.() ?? generateId(),
7761
- mediaType: "text/plain",
7762
- title: value.annotation.filename,
7763
- filename: value.annotation.filename,
7764
- providerMetadata: { [providerOptionsName]: {
7765
- type: value.annotation.type,
7766
- fileId: value.annotation.file_id,
7767
- containerId: value.annotation.container_id
7768
- } }
7769
- });
7770
- else if (value.annotation.type === "file_path") controller.enqueue({
7771
- type: "source",
7772
- sourceType: "document",
7773
- id: self.config.generateId?.() ?? generateId(),
7774
- mediaType: "application/octet-stream",
7775
- title: value.annotation.file_id,
7776
- filename: value.annotation.file_id,
7777
- providerMetadata: { [providerOptionsName]: {
7778
- type: value.annotation.type,
7779
- fileId: value.annotation.file_id,
7780
- index: value.annotation.index
7781
- } }
7782
- });
7862
+ if (value.annotation.type === "url_citation" || value.annotation.type === "file_citation") fallbackAnnotations.push(value.annotation);
7863
+ else controller.enqueue(mapOpenAIResponsesAnnotationSource(value.annotation, providerOptionsName, self.config.generateId?.() ?? generateId()));
7783
7864
  } else if (isErrorChunk(value)) {
7784
7865
  encounteredStreamError = true;
7785
7866
  finishReason = {
@@ -7793,6 +7874,10 @@ var OpenAIResponsesLanguageModel = class OpenAIResponsesLanguageModel {
7793
7874
  }
7794
7875
  },
7795
7876
  flush(controller) {
7877
+ for (const annotation of fallbackAnnotations) {
7878
+ if (annotation.type === "url_citation" && hasWebSearchActionSources || annotation.type === "file_citation" && hasFileSearchResults) continue;
7879
+ controller.enqueue(mapOpenAIResponsesAnnotationSource(annotation, providerOptionsName, self.config.generateId?.() ?? generateId()));
7880
+ }
7796
7881
  for (const toolCall of Object.values(ongoingToolCalls)) {
7797
7882
  if (!toolCall?.suppressInputStreaming) continue;
7798
7883
  controller.enqueue({