Spaces:
Sleeping
Sleeping
File size: 1,637 Bytes
05c5ed5 | 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 | import { getSession } from "auth/server";
import {
UIMessage,
convertToModelMessages,
smoothStream,
streamText,
} from "ai";
import { customModelProvider } from "lib/ai/models";
import globalLogger from "logger";
import { buildUserSystemPrompt } from "lib/ai/prompts";
import { getUserPreferences } from "lib/user/server";
import { colorize } from "consola/utils";
const logger = globalLogger.withDefaults({
message: colorize("blackBright", `Temporary Chat API: `),
});
export async function POST(request: Request) {
try {
const json = await request.json();
const session = await getSession();
if (!session) {
return new Response("Unauthorized", { status: 401 });
}
const { messages, chatModel, instructions } = json as {
messages: UIMessage[];
chatModel?: {
provider: string;
model: string;
};
instructions?: string;
};
logger.info(`model: ${chatModel?.provider}/${chatModel?.model}`);
const userPreferences =
(await getUserPreferences(session.user.id)) || undefined;
const model = customModelProvider.getDynamicModel(chatModel, userPreferences);
return streamText({
model,
system: `${buildUserSystemPrompt(session.user, userPreferences)} ${
instructions ? `\n\n${instructions}` : ""
}`.trim(),
messages: convertToModelMessages(messages),
experimental_transform: smoothStream({ chunking: "word" }),
}).toUIMessageStreamResponse();
} catch (error: any) {
logger.error(error);
return new Response(error.message || "Oops, an error occured!", {
status: 500,
});
}
}
|