import { openai, OpenAIResponsesProviderOptions } from '@ai-sdk/openai'; import { convertToModelMessages, InferUITools, streamText, ToolSet, UIDataTypes, UIMessage, validateUIMessages, } from 'ai'; export const maxDuration = 30; const tools = { file_search: openai.tools.fileSearch({ vectorStoreIds: ['vs_68caad8bd5d88191ab766cf043d89a18'], }), } satisfies ToolSet; export type OpenAIFileSearchMessage = UIMessage< never, UIDataTypes, InferUITools >; export async function POST(req: Request) { const { messages } = await req.json(); const uiMessages = await validateUIMessages({ messages }); const result = streamText({ model: openai('gpt-5-nano'), tools, messages: convertToModelMessages(uiMessages), onStepFinish: ({ request }) => { console.log(JSON.stringify(request.body, null, 2)); }, providerOptions: { openai: { include: ['file_search_call.results'], } satisfies OpenAIResponsesProviderOptions, }, }); return result.toUIMessageStreamResponse({ sendSources: true, }); }