Spaces:
Paused
Paused
fix auth on websearch (#410)
Browse files
src/lib/buildPrompt.ts
CHANGED
|
@@ -2,24 +2,42 @@ import type { BackendModel } from "./server/models";
|
|
| 2 |
import type { Message } from "./types/Message";
|
| 3 |
import { collections } from "$lib/server/database";
|
| 4 |
import { ObjectId } from "mongodb";
|
|
|
|
| 5 |
/**
|
| 6 |
* Convert [{user: "assistant", content: "hi"}, {user: "user", content: "hello"}] to:
|
| 7 |
*
|
| 8 |
* <|assistant|>hi<|endoftext|><|prompter|>hello<|endoftext|><|assistant|>
|
| 9 |
*/
|
| 10 |
|
| 11 |
-
|
| 12 |
-
messages: Pick<Message, "from" | "content">[]
|
| 13 |
-
model: BackendModel
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
if (webSearchId) {
|
| 18 |
const webSearch = await collections.webSearches.findOne({
|
| 19 |
_id: new ObjectId(webSearchId),
|
| 20 |
});
|
| 21 |
|
| 22 |
if (!webSearch) throw new Error("Web search not found");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
if (webSearch.summary) {
|
| 25 |
messages = [
|
|
|
|
| 2 |
import type { Message } from "./types/Message";
|
| 3 |
import { collections } from "$lib/server/database";
|
| 4 |
import { ObjectId } from "mongodb";
|
| 5 |
+
import { authCondition } from "./server/auth";
|
| 6 |
/**
|
| 7 |
* Convert [{user: "assistant", content: "hi"}, {user: "user", content: "hello"}] to:
|
| 8 |
*
|
| 9 |
* <|assistant|>hi<|endoftext|><|prompter|>hello<|endoftext|><|assistant|>
|
| 10 |
*/
|
| 11 |
|
| 12 |
+
interface buildPromptOptions {
|
| 13 |
+
messages: Pick<Message, "from" | "content">[];
|
| 14 |
+
model: BackendModel;
|
| 15 |
+
locals?: App.Locals;
|
| 16 |
+
webSearchId?: string;
|
| 17 |
+
preprompt?: string;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
export async function buildPrompt({
|
| 21 |
+
messages,
|
| 22 |
+
model,
|
| 23 |
+
locals,
|
| 24 |
+
webSearchId,
|
| 25 |
+
preprompt,
|
| 26 |
+
}: buildPromptOptions): Promise<string> {
|
| 27 |
if (webSearchId) {
|
| 28 |
const webSearch = await collections.webSearches.findOne({
|
| 29 |
_id: new ObjectId(webSearchId),
|
| 30 |
});
|
| 31 |
|
| 32 |
if (!webSearch) throw new Error("Web search not found");
|
| 33 |
+
if (!locals) throw new Error("User not authenticated");
|
| 34 |
+
|
| 35 |
+
const conversation = await collections.conversations.findOne({
|
| 36 |
+
_id: webSearch.convId,
|
| 37 |
+
...authCondition(locals),
|
| 38 |
+
});
|
| 39 |
+
|
| 40 |
+
if (!conversation) throw new Error("Conversation not found");
|
| 41 |
|
| 42 |
if (webSearch.summary) {
|
| 43 |
messages = [
|
src/routes/conversation/[id]/+server.ts
CHANGED
|
@@ -98,12 +98,13 @@ export async function POST({ request, fetch, locals, params }) {
|
|
| 98 |
];
|
| 99 |
})() satisfies Message[];
|
| 100 |
|
| 101 |
-
const prompt = await buildPrompt(
|
| 102 |
messages,
|
| 103 |
model,
|
| 104 |
-
web_search_id,
|
| 105 |
-
settings?.customPrompts?.[model.id]
|
| 106 |
-
|
|
|
|
| 107 |
|
| 108 |
const randomEndpoint = modelEndpoint(model);
|
| 109 |
|
|
|
|
| 98 |
];
|
| 99 |
})() satisfies Message[];
|
| 100 |
|
| 101 |
+
const prompt = await buildPrompt({
|
| 102 |
messages,
|
| 103 |
model,
|
| 104 |
+
webSearchId: web_search_id,
|
| 105 |
+
preprompt: settings?.customPrompts?.[model.id],
|
| 106 |
+
locals: locals,
|
| 107 |
+
});
|
| 108 |
|
| 109 |
const randomEndpoint = modelEndpoint(model);
|
| 110 |
|
src/routes/conversation/[id]/message/[messageId]/prompt/+server.ts
CHANGED
|
@@ -31,7 +31,10 @@ export async function GET({ params, locals }) {
|
|
| 31 |
throw error(404, "Conversation model not found");
|
| 32 |
}
|
| 33 |
|
| 34 |
-
const prompt = await buildPrompt(
|
|
|
|
|
|
|
|
|
|
| 35 |
|
| 36 |
return new Response(
|
| 37 |
JSON.stringify(
|
|
|
|
| 31 |
throw error(404, "Conversation model not found");
|
| 32 |
}
|
| 33 |
|
| 34 |
+
const prompt = await buildPrompt({
|
| 35 |
+
messages: conv.messages.slice(0, messageIndex + 1),
|
| 36 |
+
model: model,
|
| 37 |
+
});
|
| 38 |
|
| 39 |
return new Response(
|
| 40 |
JSON.stringify(
|
src/routes/conversation/[id]/summarize/+server.ts
CHANGED
|
@@ -24,7 +24,10 @@ export async function POST({ params, locals }) {
|
|
| 24 |
`Please summarize the following message as a single sentence of less than 5 words:\n` +
|
| 25 |
firstMessage?.content;
|
| 26 |
|
| 27 |
-
const prompt = await buildPrompt(
|
|
|
|
|
|
|
|
|
|
| 28 |
const generated_text = await generateFromDefaultEndpoint(prompt);
|
| 29 |
|
| 30 |
if (generated_text) {
|
|
|
|
| 24 |
`Please summarize the following message as a single sentence of less than 5 words:\n` +
|
| 25 |
firstMessage?.content;
|
| 26 |
|
| 27 |
+
const prompt = await buildPrompt({
|
| 28 |
+
messages: [{ from: "user", content: userPrompt }],
|
| 29 |
+
model: defaultModel,
|
| 30 |
+
});
|
| 31 |
const generated_text = await generateFromDefaultEndpoint(prompt);
|
| 32 |
|
| 33 |
if (generated_text) {
|
src/routes/r/[id]/message/[messageId]/prompt/+server.ts
CHANGED
|
@@ -26,7 +26,7 @@ export async function GET({ params }) {
|
|
| 26 |
throw error(404, "Conversation model not found");
|
| 27 |
}
|
| 28 |
|
| 29 |
-
const prompt = await buildPrompt(conv.messages.slice(0, messageIndex + 1), model);
|
| 30 |
|
| 31 |
return new Response(
|
| 32 |
JSON.stringify(
|
|
|
|
| 26 |
throw error(404, "Conversation model not found");
|
| 27 |
}
|
| 28 |
|
| 29 |
+
const prompt = await buildPrompt({ messages: conv.messages.slice(0, messageIndex + 1), model });
|
| 30 |
|
| 31 |
return new Response(
|
| 32 |
JSON.stringify(
|