Vercel seems to have abandoned or deprioritized their serverless functions offering (outside Next.js) because I couldn’t find any official documentation for setting up function streaming with CORS enabled.
Eventually this ended up being quite a hassle to figure out, so I decided to make this snippet for anyone who needs it.
import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";
export function OPTIONS() {
return new Response("OK", {
status: 200,
headers: {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT",
"Access-Control-Allow-Headers":
"X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version",
},
});
}
export async function GET() {
const response = streamText({
model: openai("gpt-4o-mini"),
messages: [{ role: "user", content: "Write a short poem" }],
});
return response.toTextStreamResponse({
headers: {
"Content-Type": "text/event-stream",
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT",
"Access-Control-Allow-Headers":
"X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version",
},
});
}
Top comments (0)