feat: api will plugin mongoMeili without a valid connection

This commit is contained in:
Daniel Avila 2023-03-21 20:06:27 -04:00
parent 94c0fbb525
commit 194051e424
7 changed files with 167 additions and 144 deletions

View file

@ -0,0 +1,53 @@
const mongoose = require('mongoose');
module.exports = mongoose.Schema(
{
conversationId: {
type: String,
unique: true,
required: true,
index: true,
meiliIndex: true
},
parentMessageId: {
type: String,
required: true
},
title: {
type: String,
default: 'New Chat',
meiliIndex: true
},
jailbreakConversationId: {
type: String,
default: null
},
conversationSignature: {
type: String,
default: null
},
clientId: {
type: String
},
invocationId: {
type: String
},
chatGptLabel: {
type: String,
default: null
},
promptPrefix: {
type: String,
default: null
},
model: {
type: String,
required: true
},
user: {
type: String
},
suggestions: [{ type: String }],
messages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Message' }]
},
{ timestamps: true }
);

View file

@ -0,0 +1,46 @@
const mongoose = require('mongoose');
const convoSchema = require('./convoSchema');
const messageSchema = require('./messageSchema');
const { MeiliSearch } = require('meilisearch');
const mongoMeili = require('../../lib/db/mongoMeili');
(async () => {
try {
const client = new MeiliSearch({
host: process.env.MEILI_HOST,
apiKey: process.env.MEILI_KEY
});
const { status } = await client.health();
console.log(`Meilisearch: ${status}`);
const result = status === 'available' && !!process.env.SEARCH;
if (!result) {
throw new Error('Meilisearch not available');
}
convoSchema.plugin(mongoMeili, {
host: process.env.MEILI_HOST,
apiKey: process.env.MEILI_KEY,
indexName: 'convos', // Will get created automatically if it doesn't exist already
primaryKey: 'conversationId'
});
messageSchema.plugin(mongoMeili, {
host: process.env.MEILI_HOST,
apiKey: process.env.MEILI_KEY,
indexName: 'messages',
primaryKey: 'messageId'
});
} catch (error) {
console.log('Meilisearch error, search will be disabled');
console.error(error);
}
})();
const Conversation =
mongoose.models.Conversation || mongoose.model('Conversation', convoSchema);
const Message = mongoose.models.Message || mongoose.model('Message', messageSchema);
module.exports = { Conversation, Message };

View file

@ -0,0 +1,54 @@
const mongoose = require('mongoose');
module.exports = mongoose.Schema({
messageId: {
type: String,
unique: true,
required: true,
index: true,
meiliIndex: true
},
conversationId: {
type: String,
required: true,
meiliIndex: true
},
conversationSignature: {
type: String,
// required: true
},
clientId: {
type: String,
},
invocationId: {
type: String,
},
parentMessageId: {
type: String,
// required: true
},
sender: {
type: String,
required: true,
meiliIndex: true
},
text: {
type: String,
required: true,
meiliIndex: true
},
isCreatedByUser: {
type: Boolean,
required: true,
default: false
},
error: {
type: Boolean,
default: false
},
_meiliIndex: {
type: Boolean,
required: false,
select: false,
default: false
}
}, { timestamps: true });