import { HF_TOKEN } from "$env/static/private"; import { PUBLIC_MODEL_ENDPOINT } from "$env/static/public"; import { buildPrompt } from "$lib/buildPrompt"; import { collections } from "$lib/server/database.js"; import { error } from "@sveltejs/kit"; import { ObjectId } from "mongodb"; export async function POST({ params, locals }) { const convId = new ObjectId(params.id); const conversation = await collections.conversations.findOne({ _id: convId, sessionId: locals.sessionId, }); if (!conversation) { throw error(404, "Conversation not found"); } const firstMessage = conversation.messages.find((m) => m.from === "user"); const userPrompt = `You are a summarizing assistant. Please summarize the following message as a single sentence of less than 5 words:\n` + firstMessage?.content; const prompt = buildPrompt([{ from: "user", content: userPrompt }]); const resp = await fetch(PUBLIC_MODEL_ENDPOINT, { headers: { "Content-Type": "application/json", Authorization: `Basic ${HF_TOKEN}`, }, method: "POST", body: JSON.stringify({ inputs: prompt, parameters: { temperature: 0.9, top_p: 0.95, repetition_penalty: 1.2, top_k: 50, watermark: false, max_new_tokens: 1024, stop: ["<|endoftext|>"], return_full_text: false, }, }), }); const response = await resp.json(); let generatedTitle: string | undefined; try { if (typeof response[0].generated_text === "string") { generatedTitle = response[0].generated_text; } } catch { console.error("summarization failed"); } if (generatedTitle) { await collections.conversations.updateOne( { _id: convId, sessionId: locals.sessionId, }, { $set: { title: generatedTitle }, } ); } return new Response( JSON.stringify( generatedTitle ? { title: generatedTitle, } : {} ), { headers: { "Content-Type": "application/json" } } ); }