From 9eefa3e24c327bd5e9a47d8a05ebcc2c3f922bb1 Mon Sep 17 00:00:00 2001
From: Danny Avila <110412045+danny-avila@users.noreply.github.com>
Date: Fri, 7 Jul 2023 02:03:23 -0400
Subject: [PATCH] fix: add PaLM icon as SVG and improve meilisearch syncing to
prevent large indicing jobs (#600)
* feat(getIcon.jsx): replace palm.png with google-palm.svg as the icon for the 'google' endpoint
* fix(mongoMeili): improve syncing, prevent large indicing jobs from being queued
fix(gptPlugins.js, openAI.js): use unfinished and cancelled values when saving messages to help optimize syncing
---
api/app/clients/BaseClient.js | 8 ++--
api/models/plugins/mongoMeili.js | 56 ++++++++++++++++++----
api/server/routes/ask/gptPlugins.js | 4 +-
api/server/routes/ask/openAI.js | 4 +-
client/public/assets/google-palm.svg | 67 +++++++++++++++++++++++++++
client/public/assets/palm.png | Bin 1957 -> 0 bytes
client/src/utils/getIcon.jsx | 12 ++---
7 files changed, 127 insertions(+), 24 deletions(-)
create mode 100644 client/public/assets/google-palm.svg
delete mode 100644 client/public/assets/palm.png
diff --git a/api/app/clients/BaseClient.js b/api/app/clients/BaseClient.js
index f5d83c514e..3ecd7f45a1 100644
--- a/api/app/clients/BaseClient.js
+++ b/api/app/clients/BaseClient.js
@@ -71,7 +71,7 @@ class BaseClient {
};
}
- createUserMessage({ messageId, parentMessageId, conversationId, text}) {
+ createUserMessage({ messageId, parentMessageId, conversationId, text }) {
const userMessage = {
messageId,
parentMessageId,
@@ -293,7 +293,7 @@ class BaseClient {
};
}
- async handleContextStrategy({instructions, orderedMessages, formattedMessages}) {
+ async handleContextStrategy({ instructions, orderedMessages, formattedMessages }) {
let payload = this.addInstructions(formattedMessages, instructions);
let orderedWithInstructions = this.addInstructions(orderedMessages, instructions);
let {
@@ -350,7 +350,7 @@ class BaseClient {
}
if (index === refineIndex) {
- map.refined = { ...refinedMessage, messageId: message.messageId};
+ map.refined = { ...refinedMessage, messageId: message.messageId };
}
map[message.messageId] = payload[index].tokenCount;
@@ -457,7 +457,7 @@ class BaseClient {
}
async saveMessageToDatabase(message, endpointOptions, user = null) {
- await saveMessage({ ...message, unfinished: false });
+ await saveMessage({ ...message, unfinished: false, cancelled: false });
await saveConvo(user, {
conversationId: message.conversationId,
endpoint: this.options.endpoint,
diff --git a/api/models/plugins/mongoMeili.js b/api/models/plugins/mongoMeili.js
index d157eccacc..b123b3153b 100644
--- a/api/models/plugins/mongoMeili.js
+++ b/api/models/plugins/mongoMeili.js
@@ -190,19 +190,55 @@ module.exports = function mongoMeili(schema, options) {
schema.post('remove', function (doc) {
doc.postRemoveHook();
});
- schema.post('deleteMany', function () {
- // console.log('deleteMany hook', doc);
- if (Object.prototype.hasOwnProperty.call(schema.obj, 'messages')) {
- console.log('Syncing convos...');
- mongoose.model('Conversation').syncWithMeili();
- }
- if (Object.prototype.hasOwnProperty.call(schema.obj, 'messageId')) {
- console.log('Syncing messages...');
- mongoose.model('Message').syncWithMeili();
+ schema.pre('deleteMany', async function (next) {
+ try {
+ if (Object.prototype.hasOwnProperty.call(schema.obj, 'messages')) {
+ const convoIndex = client.index('convos');
+ const deletedConvos = await mongoose.model('Conversation').find(this._conditions).lean();
+ let promises = [];
+ for (const convo of deletedConvos) {
+ promises.push(convoIndex.deleteDocument(convo.conversationId));
+ }
+ await Promise.all(promises);
+ }
+
+ if (Object.prototype.hasOwnProperty.call(schema.obj, 'messageId')) {
+ const messageIndex = client.index('messages');
+ const deletedMessages = await mongoose.model('Message').find(this._conditions).lean();
+ let promises = [];
+ for (const message of deletedMessages) {
+ promises.push(messageIndex.deleteDocument(message.messageId));
+ }
+ await Promise.all(promises);
+ }
+ return next();
+ } catch (error) {
+ console.log('[Meilisearch] There was an issue deleting conversation indexes upon deletion, next startup may be slow due to syncing');
+ console.error(error);
+ return next(error);
}
});
- schema.post('findOneAndUpdate', function (doc) {
+
+ schema.post('findOneAndUpdate', async function (doc) {
+ if (doc.unfinished) {
+ return;
+ }
+
+ let meiliDoc;
+ // Doc is a Conversation
+ if (doc.messages) {
+ try {
+ meiliDoc = await client.index('convos').getDocument(doc.conversationId);
+ } catch (error) {
+ console.log('[Meilisearch] Convo not found and will index', doc.conversationId);
+ }
+ }
+
+ if (meiliDoc && meiliDoc.title === doc.title) {
+ return;
+ }
+
doc.postSaveHook();
});
};
diff --git a/api/server/routes/ask/gptPlugins.js b/api/server/routes/ask/gptPlugins.js
index 90792caea2..c672aacc86 100644
--- a/api/server/routes/ask/gptPlugins.js
+++ b/api/server/routes/ask/gptPlugins.js
@@ -117,8 +117,8 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
parentMessageId: overrideParentMessageId || userMessageId,
text: partialText,
model: endpointOption.modelOptions.model,
- unfinished: false,
- cancelled: true,
+ unfinished: true,
+ cancelled: false,
error: false
});
}
diff --git a/api/server/routes/ask/openAI.js b/api/server/routes/ask/openAI.js
index e123f462fa..d5baf81663 100644
--- a/api/server/routes/ask/openAI.js
+++ b/api/server/routes/ask/openAI.js
@@ -88,8 +88,8 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
parentMessageId: overrideParentMessageId || userMessageId,
text: partialText,
model: endpointOption.modelOptions.model,
- unfinished: false,
- cancelled: true,
+ unfinished: true,
+ cancelled: false,
error: false
});
}
diff --git a/client/public/assets/google-palm.svg b/client/public/assets/google-palm.svg
new file mode 100644
index 0000000000..5c345fe1c1
--- /dev/null
+++ b/client/public/assets/google-palm.svg
@@ -0,0 +1,67 @@
+
+
+
diff --git a/client/public/assets/palm.png b/client/public/assets/palm.png
deleted file mode 100644
index 3488a714574ee46cd3d0569d0f52724b2b603f73..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1957
zcmbVMc~Dc=9zNM*hYX_zmzq>midGZWqM%7we1HgHl@L}+k%V9_=x8VL!v7c$Rr+Ij!HJKz1z_xpa|@7z0c
zW=;t&{BL&FtE~Y5b|JxmQTU23zLq4M1;i>Z00;_RSWFOxVTK%<8Ccn%8E>4wiZ_`*
ziNEfE2XJ$Vov>1+QJQYZU2iHZniu&j6xSOig896yrh?pgae#l}?AvHg)W40lTfBlt
zzvTMN72o_*AW3?wUYz+b*W+>SJ-mgFkWV@Z&WU+dAK(_)Y7g89G)QE$ZhzQ=Jn~p))&&Ly`~*2N6$@vaQco_oKufW`1?+4${Iuw
z9+ClhnC+_ak?6D<%24Wo4W6C-@t*A`x9S4x`akPVsjc6e?^0a;a^*PdW_ydH-`|%<
z{!^j8^PgkXmulj!B=udJF#gxxwG^Ta(`k>tQYHC`wz52-K-5WDRjsfxRoM93$jj|I
zleJ|dn6nbnFqO!_7w6SXC8O_z7_6^nG{O?h&$G`(w@Y&;V!p>U~W
zy;$CoIy`mnYT6iP{SRl0FVZF7|90!ySWndR{3!kLYvYc5@waV9G;`?Ht+$cEqW+VY
zja*O1vT0B5`tzZ_VmN%GN7#HLI5y|65+r7TjZv~=fr<4oq<1pB1`1<7PQaSptv+;>
zPa}!LG56esXH
zCA61)aqVf&>=hQ!4SYFmd_EJod%&Cr<|HDf=M5y}XafNDSQ5q>O$L!SE|-
zYGJ22o~ZS&W6vET)G1F@*VxzTXSVCUdeu^)MVK9R2I;?oiPA1U$tdkN5jZdAs1N2f
zh{g9u#U$~NN4@JmDZQJa)ozS&$pX;&aHFv@pIotUuI2qqmo_rb?bvOBko@S
zby*o7ZIU#3be-4~e`Sm?{i?EO0Vy#Q1#FlqzY#k2WypLz;t@M;@E9MWylAP2OV%#P
z$%9D?lL3ZK#-xY)IM#`Z8`xY}b%7B)g{|r<)nmzuIDtmDaFm=7+cqY7snPvVML3fa
z+e&yk>;WPCm{|+fP77Y&H(HAW*%bKfe6g*bZNbmqlAAYXVyKrCww5u}Ym4IdN*xTqWm
ziNd)19QHCHcXVrN4cJty9Q+lblRA*EE`Pje_r*r8fkd`iN#qT$RD(TZsN>(kYzrax
zCAh5zS=%93B7;d`T?dZ@pzb}Wn~W~EfG0^|Cqb4sy4(idXBEFReW}J9n4D0GbI>!g
z!40yxSvpFdO#!s9743FY17O?8=EJ@!IU!N8Z)7z>Cw3rLI`GfqKO39gl`pc?O1g;G
zfXNc2>Qf7md~)1teKG!X50n0E`B$cT=e-(
zq#aJVn@zUFZ&(Nrh)aTRMeMq}9(mus$X<}XBV%*f1776npYt31N=ZQ_p2?nWq0K6)>!t>-k(JPpe4*^?Gg{my0+nWHwXy|4{Y-1Oa1^rci-y(
diff --git a/client/src/utils/getIcon.jsx b/client/src/utils/getIcon.jsx
index 35e4f4a577..d0a435f44f 100644
--- a/client/src/utils/getIcon.jsx
+++ b/client/src/utils/getIcon.jsx
@@ -14,7 +14,7 @@ const getIcon = (props) => {
width: size,
height: size
}}
- className={`relative flex items-center justify-center` + props?.className}
+ className={'relative flex items-center justify-center' + props?.className}
>
{
name = 'Plugins';
} else if (endpoint === 'google') {
const { modelLabel } = props;
- icon =
;
+ icon =
;
name = modelLabel || 'PaLM2';
} else if (endpoint === 'bingAI') {
const { jailbreak } = props;
icon = ;
- bg = jailbreak ? `radial-gradient(circle at 90% 110%, #F0F0FA, #D0E0F9)` : `transparent`;
+ bg = jailbreak ? 'radial-gradient(circle at 90% 110%, #F0F0FA, #D0E0F9)' : 'transparent';
name = jailbreak ? 'Sydney' : 'BingAI';
} else if (endpoint === 'chatGPTBrowser') {
icon = ;
@@ -67,11 +67,11 @@ const getIcon = (props) => {
name = 'ChatGPT';
} else if (endpoint === null) {
icon = ;
- bg = `grey`;
+ bg = 'grey';
name = 'N/A';
} else {
icon = ;
- bg = `grey`;
+ bg = 'grey';
name = 'UNKNOWN';
}
@@ -84,7 +84,7 @@ const getIcon = (props) => {
height: size
}}
className={
- `relative flex items-center justify-center rounded-sm text-white ` + props?.className
+ 'relative flex items-center justify-center rounded-sm text-white ' + props?.className
}
>
{icon}