Spaces:
Running
Running
import { RATE_LIMIT } from "$env/static/private"; | |
import { buildPrompt } from "$lib/buildPrompt"; | |
import { authCondition } from "$lib/server/auth"; | |
import { collections } from "$lib/server/database"; | |
import { generateFromDefaultEndpoint } from "$lib/server/generateFromDefaultEndpoint"; | |
import { defaultModel } from "$lib/server/models"; | |
import { ERROR_MESSAGES } from "$lib/stores/errors.js"; | |
import { error } from "@sveltejs/kit"; | |
import { ObjectId } from "mongodb"; | |
export async function POST({ params, locals, getClientAddress }) { | |
const convId = new ObjectId(params.id); | |
const conversation = await collections.conversations.findOne({ | |
_id: convId, | |
...authCondition(locals), | |
}); | |
if (!conversation) { | |
throw error(404, "Conversation not found"); | |
} | |
const userId = locals.user?._id ?? locals.sessionId; | |
await collections.messageEvents.insertOne({ | |
userId: userId, | |
createdAt: new Date(), | |
ip: getClientAddress(), | |
}); | |
const nEvents = Math.max( | |
await collections.messageEvents.countDocuments({ userId }), | |
await collections.messageEvents.countDocuments({ ip: getClientAddress() }) | |
); | |
if (RATE_LIMIT != "" && nEvents > parseInt(RATE_LIMIT)) { | |
throw error(429, ERROR_MESSAGES.rateLimited); | |
} | |
const firstMessage = conversation.messages.find((m) => m.from === "user"); | |
const userPrompt = | |
`Please summarize the following message as a single sentence of less than 5 words:\n` + | |
firstMessage?.content; | |
const prompt = await buildPrompt({ | |
messages: [{ from: "user", content: userPrompt }], | |
model: defaultModel, | |
}); | |
const generated_text = await generateFromDefaultEndpoint(prompt); | |
if (generated_text) { | |
await collections.conversations.updateOne( | |
{ | |
_id: convId, | |
...authCondition(locals), | |
}, | |
{ | |
$set: { title: generated_text }, | |
} | |
); | |
} | |
return new Response( | |
JSON.stringify( | |
generated_text | |
? { | |
title: generated_text, | |
} | |
: {} | |
), | |
{ headers: { "Content-Type": "application/json" } } | |
); | |
} | |