Spaces:
Running
Running
| 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" } } | |
| ); | |
| } | |