Skip to content

Commit c8e89ef

Browse files
Mishigcoyotte508
andauthored
[Mongo] count messages (aggregate) only when needed (#863)
* [Mongo] count messages (aggregate) only when needed * more restrictive * even more stricter * Update src/routes/+layout.server.ts Co-authored-by: Eliott C. <coyotte508@gmail.com> * format --------- Co-authored-by: Eliott C. <coyotte508@gmail.com>
1 parent 8ffc49e commit c8e89ef

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/routes/+layout.server.ts

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,26 +46,6 @@ export const load: LayoutServerLoad = async ({ locals, depends }) => {
4646
});
4747
}
4848

49-
// get the number of messages where `from === "assistant"` across all conversations.
50-
const totalMessages =
51-
(
52-
await collections.conversations
53-
.aggregate([
54-
{ $match: authCondition(locals) },
55-
{ $project: { messages: 1 } },
56-
{ $unwind: "$messages" },
57-
{ $match: { "messages.from": "assistant" } },
58-
{ $count: "messages" },
59-
])
60-
.toArray()
61-
)[0]?.messages ?? 0;
62-
63-
const messagesBeforeLogin = MESSAGES_BEFORE_LOGIN ? parseInt(MESSAGES_BEFORE_LOGIN) : 0;
64-
65-
const userHasExceededMessages = messagesBeforeLogin > 0 && totalMessages > messagesBeforeLogin;
66-
67-
const loginRequired = requiresUser && !locals.user && userHasExceededMessages;
68-
6949
const enableAssistants = ENABLE_ASSISTANTS === "true";
7050

7151
const assistantActive = !models.map(({ id }) => id).includes(settings?.activeModel ?? "");
@@ -101,6 +81,29 @@ export const load: LayoutServerLoad = async ({ locals, depends }) => {
10181

10282
const assistants = await collections.assistants.find({ _id: { $in: assistantIds } }).toArray();
10383

84+
const messagesBeforeLogin = MESSAGES_BEFORE_LOGIN ? parseInt(MESSAGES_BEFORE_LOGIN) : 0;
85+
86+
let loginRequired = conversations.length > messagesBeforeLogin;
87+
88+
if (!loginRequired && messagesBeforeLogin && requiresUser && !locals.user) {
89+
// get the number of messages where `from === "assistant"` across all conversations.
90+
const totalMessages =
91+
(
92+
await collections.conversations
93+
.aggregate([
94+
{ $match: authCondition(locals), "messages.from": "assistant" },
95+
{ $project: { messages: 1 } },
96+
{ $limit: messagesBeforeLogin + 1 },
97+
{ $unwind: "$messages" },
98+
{ $match: { "messages.from": "assistant" } },
99+
{ $count: "messages" },
100+
])
101+
.toArray()
102+
)[0]?.messages ?? 0;
103+
104+
loginRequired = totalMessages > messagesBeforeLogin;
105+
}
106+
104107
return {
105108
conversations: conversations.map((conv) => {
106109
if (settings?.hideEmojiOnSidebar) {

0 commit comments

Comments
 (0)