Spaces:
Sleeping
Sleeping
| import { OpenAIStream, StreamingTextResponse } from 'ai'; | |
| import OpenAI from 'openai'; | |
| import { auth } from '@/auth'; | |
| import { | |
| ChatCompletionMessageParam, | |
| ChatCompletionContentPart, | |
| } from 'openai/resources'; | |
| import { MessageUI } from '@/lib/types'; | |
| export const runtime = 'edge'; | |
| export const POST = async (req: Request) => { | |
| const json = await req.json(); | |
| const { messages } = json as { | |
| messages: MessageUI[]; | |
| id: string; | |
| url: string; | |
| }; | |
| const session = await auth(); | |
| if (!session?.user?.email) { | |
| return new Response('Unauthorized', { | |
| status: 401, | |
| }); | |
| } | |
| const formattedMessage: ChatCompletionMessageParam[] = messages.map( | |
| message => { | |
| const contentWithImage: ChatCompletionContentPart[] = [ | |
| { | |
| type: 'text', | |
| text: message.content as string, | |
| }, | |
| ]; | |
| return { | |
| role: 'user', | |
| content: contentWithImage, | |
| }; | |
| }, | |
| ); | |
| const openai = new OpenAI({ | |
| apiKey: process.env.OPENAI_API_KEY, | |
| }); | |
| const res = await openai.chat.completions.create({ | |
| model: 'gpt-4-vision-preview', | |
| messages: formattedMessage, | |
| temperature: 0.3, | |
| stream: true, | |
| max_tokens: 300, | |
| }); | |
| const stream = OpenAIStream(res); | |
| return new StreamingTextResponse(stream); | |
| }; | |