|
import { buildPrompt } from "$lib/buildPrompt"; |
|
import { PUBLIC_SEP_TOKEN } from "$lib/constants/publicSepToken"; |
|
import { authCondition } from "$lib/server/auth"; |
|
import { collections } from "$lib/server/database"; |
|
import { modelEndpoint } from "$lib/server/modelEndpoint"; |
|
import { defaultModel } from "$lib/server/models"; |
|
import { trimPrefix } from "$lib/utils/trimPrefix"; |
|
import { trimSuffix } from "$lib/utils/trimSuffix"; |
|
import { textGeneration } from "@huggingface/inference"; |
|
import { error } from "@sveltejs/kit"; |
|
import { ObjectId } from "mongodb"; |
|
|
|
export async function POST({ params, locals, fetch }) { |
|
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 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 = buildPrompt([{ from: "user", content: userPrompt }], defaultModel); |
|
|
|
const parameters = { |
|
...defaultModel.parameters, |
|
return_full_text: false, |
|
}; |
|
|
|
const endpoint = modelEndpoint(defaultModel); |
|
let { generated_text } = await textGeneration( |
|
{ |
|
model: endpoint.url, |
|
inputs: prompt, |
|
parameters, |
|
}, |
|
{ |
|
fetch: (url, options) => |
|
fetch(url, { |
|
...options, |
|
headers: { ...options?.headers, Authorization: endpoint.authorization }, |
|
}), |
|
} |
|
); |
|
|
|
generated_text = trimSuffix(trimPrefix(generated_text, "<|startoftext|>"), PUBLIC_SEP_TOKEN); |
|
|
|
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" } } |
|
); |
|
} |
|
|