import mongoose, { Schema, Document, Types } from 'mongoose'; import { conversationPreset } from './defaults'; // @ts-ignore export interface IConversation extends Document { conversationId: string; title?: string; user?: string; messages?: Types.ObjectId[]; agentOptions?: unknown; // Fields provided by conversationPreset (adjust types as needed) endpoint?: string; endpointType?: string; model?: string; region?: string; chatGptLabel?: string; examples?: unknown[]; modelLabel?: string; promptPrefix?: string; temperature?: number; top_p?: number; topP?: number; topK?: number; maxOutputTokens?: number; maxTokens?: number; presence_penalty?: number; frequency_penalty?: number; file_ids?: string[]; resendImages?: boolean; promptCache?: boolean; thinking?: boolean; thinkingBudget?: number; system?: string; resendFiles?: boolean; imageDetail?: string; agent_id?: string; assistant_id?: string; instructions?: string; stop?: string[]; isArchived?: boolean; iconURL?: string; greeting?: string; spec?: string; tags?: string[]; tools?: string[]; maxContextTokens?: number; max_tokens?: number; reasoning_effort?: string; // Additional fields files?: string[]; expiredAt?: Date; createdAt?: Date; updatedAt?: Date; } const convoSchema: Schema = new 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 }, ); convoSchema.index({ expiredAt: 1 }, { expireAfterSeconds: 0 }); convoSchema.index({ createdAt: 1, updatedAt: 1 }); convoSchema.index({ conversationId: 1, user: 1 }, { unique: true }); export default convoSchema;