Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/just-cameron/letta-libre. A fork of libre chat for Letta.
Something went wrong. Try again.
2.1 kB · 56 lines
JavaScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657const { FileSources, FileContext } = require('librechat-data-provider');
/** * Determines the appropriate file storage strategy based on file type and configuration. * * @param {AppConfig} appConfig - App configuration object containing fileStrategy and fileStrategies * @param {Object} options - File context options * @param {boolean} options.isAvatar - Whether this is an avatar upload * @param {boolean} options.isImage - Whether this is an image upload * @param {string} options.context - File context from FileContext enum * @returns {string} Storage strategy to use (e.g., FileSources.local, 's3', 'azure') * * @example * // Legacy single strategy * getFileStrategy({ fileStrategy: 's3' }) // Returns 's3' * * @example * // Granular strategies * getFileStrategy( * { * fileStrategy: 's3', * fileStrategies: { avatar: FileSources.local, document: 's3' } * }, * { isAvatar: true } * ) // Returns FileSources.local */function getFileStrategy(appConfig, { isAvatar = false, isImage = false, context = null } = {}) { // Fallback to legacy single strategy if no granular config if (!appConfig?.fileStrategies) { return appConfig.fileStrategy || FileSources.local; // Default to FileSources.local if undefined }
const strategies = appConfig.fileStrategies; const defaultStrategy = strategies.default || appConfig.fileStrategy || FileSources.local;
// Priority order for strategy selection: // 1. Specific file type strategy // 2. Default strategy from fileStrategies // 3. Legacy fileStrategy // 4. FileSources.local as final fallback
let selectedStrategy;
if (isAvatar || context === FileContext.avatar) { selectedStrategy = strategies.avatar || defaultStrategy; } else if (isImage || context === FileContext.image_generation) { selectedStrategy = strategies.image || defaultStrategy; } else { // All other files (documents, attachments, etc.) selectedStrategy = strategies.document || defaultStrategy; }
return selectedStrategy || FileSources.local; // Final fallback to FileSources.local}
module.exports = { getFileStrategy };