const mongoose = require('mongoose'); const mongoMeili = require('../plugins/mongoMeili'); const { conversationPreset } = require('./defaults'); const convoSchema = mongoose.Schema( { conversationId: { type: String, unique: true, required: true, index: true, meiliIndex: true, }, title: { type: String, default: 'New Chat', meiliIndex: true, }, user: { type: String, index: true, }, messages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Message' }], agentOptions: { type: mongoose.Schema.Types.Mixed, }, ...conversationPreset, agent_id: { type: String, }, tags: { type: [String], default: [], meiliIndex: true, }, files: { type: [String], }, expiredAt: { type: Date, }, }, { timestamps: true }, ); if (process.env.MEILI_HOST && process.env.MEILI_MASTER_KEY) { convoSchema.plugin(mongoMeili, { host: process.env.MEILI_HOST, apiKey: process.env.MEILI_MASTER_KEY, /** Note: Will get created automatically if it doesn't exist already */ indexName: 'convos', primaryKey: 'conversationId', }); } convoSchema.index({ expiredAt: 1 }, { expireAfterSeconds: 0 }); convoSchema.index({ createdAt: 1, updatedAt: 1 }); convoSchema.index({ conversationId: 1, user: 1 }, { unique: true }); const Conversation = mongoose.models.Conversation || mongoose.model('Conversation', convoSchema); module.exports = Conversation;