Spaces:
Running
Running
File size: 1,302 Bytes
52b4c36 3ba9c0c 52b4c36 f80b091 52b4c36 a86b547 3ba9c0c 52b4c36 3ba9c0c 314f2dc f80b091 a86b547 f80b091 42501f7 f80b091 52b4c36 f80b091 58d7e55 f80b091 52b4c36 f80b091 52b4c36 f80b091 314f2dc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import { OpenAIStream, StreamingTextResponse } from 'ai';
import OpenAI from 'openai';
import { auth } from '@/auth';
import {
ChatCompletionMessageParam,
ChatCompletionContentPart,
} from 'openai/resources';
import { MessageBase } from '../../../lib/types';
export const runtime = 'edge';
export const POST = async (req: Request) => {
const json = await req.json();
const { messages } = json as {
messages: MessageBase[];
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);
};
|