ai-sdk-next-openai/app/api/chat-openai-web-search/route.ts
2025-09-26 15:46:29 +00:00

53 lines
1.2 KiB
TypeScript

import { openai, OpenAIResponsesProviderOptions } from '@ai-sdk/openai';
import {
convertToModelMessages,
InferUITools,
streamText,
ToolSet,
UIDataTypes,
UIMessage,
validateUIMessages,
} from 'ai';
const tools = {
web_search: openai.tools.webSearch({
searchContextSize: 'low',
userLocation: {
type: 'approximate',
city: 'San Francisco',
region: 'California',
country: 'US',
},
}),
} satisfies ToolSet;
export type OpenAIWebSearchMessage = UIMessage<
never,
UIDataTypes,
InferUITools<typeof tools>
>;
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: {
store: false,
include: ['reasoning.encrypted_content'],
} satisfies OpenAIResponsesProviderOptions,
},
});
return result.toUIMessageStreamResponse({
sendSources: true,
});
}