const { FileSources } = require('librechat-data-provider'); const mongoose = require('mongoose'); /** * @typedef {Object} MongoFile * @property {ObjectId} [_id] - MongoDB Document ID * @property {number} [__v] - MongoDB Version Key * @property {ObjectId} user - User ID * @property {string} [conversationId] - Optional conversation ID * @property {string} file_id - File identifier * @property {string} [temp_file_id] - Temporary File identifier * @property {number} bytes - Size of the file in bytes * @property {string} filename - Name of the file * @property {string} filepath - Location of the file * @property {'file'} object - Type of object, always 'file' * @property {string} type - Type of file * @property {number} [usage=0] - Number of uses of the file * @property {string} [context] - Context of the file origin * @property {boolean} [embedded=false] - Whether or not the file is embedded in vector db * @property {string} [model] - The model to identify the group region of the file (for Azure OpenAI hosting) * @property {string} [source] - The source of the file (e.g., from FileSources) * @property {number} [width] - Optional width of the file * @property {number} [height] - Optional height of the file * @property {Date} [expiresAt] - Optional expiration date of the file * @property {Date} [createdAt] - Date when the file was created * @property {Date} [updatedAt] - Date when the file was updated */ /** @type {MongooseSchema} */ const fileSchema = mongoose.Schema( { user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', index: true, required: true, }, conversationId: { type: String, ref: 'Conversation', index: true, }, file_id: { type: String, // required: true, index: true, }, temp_file_id: { type: String, // required: true, }, bytes: { type: Number, required: true, }, filename: { type: String, required: true, }, filepath: { type: String, required: true, }, object: { type: String, required: true, default: 'file', }, embedded: { type: Boolean, }, type: { type: String, required: true, }, context: { type: String, // required: true, }, usage: { type: Number, required: true, default: 0, }, source: { type: String, default: FileSources.local, }, model: { type: String, }, width: Number, height: Number, expiresAt: { type: Date, expires: 3600, // 1 hour in seconds }, }, { timestamps: true, }, ); fileSchema.index({ createdAt: 1, updatedAt: 1 }); module.exports = fileSchema;