mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-02-25 03:44:09 +01:00
* chore: saveToCloudStorage function and enhance error handling - Removed unnecessary parameters and streamlined the logic for saving images to cloud storage. - Introduced buffer handling for base64 image data and improved the integration with file strategy functions. - Enhanced error handling during local image saving to ensure robustness. - Updated the createGeminiImageTool function to reflect changes in the saveToCloudStorage implementation. * refactor: streamline image persistence logic in GeminiImageGen - Consolidated image saving functionality by renaming and refactoring the saveToCloudStorage function to persistGeneratedImage. - Improved error handling and logging for image persistence operations. - Enhanced the replaceUnwantedChars function to better sanitize input strings. - Updated createGeminiImageTool to reflect changes in image handling and ensure consistent behavior across storage strategies. * fix: clean up GeminiImageGen by removing unused functions and improving logging - Removed the getSafeFormat and persistGeneratedImage functions to streamline image handling. - Updated logging in createGeminiImageTool for clarity and consistency. - Consolidated imports by eliminating unused dependencies, enhancing code maintainability. * chore: update environment configuration and manifest for unused GEMINI_VERTEX_ENABLED - Removed the Vertex AI configuration option from .env.example to simplify setup. - Updated the manifest.json to reflect the removal of the Vertex AI dependency in the authentication field. - Cleaned up the createGeminiImageTool function by eliminating unused fields related to Vertex AI, streamlining the code. * fix: update loadAuthValues call in loadTools function for GeminiImageGen tool - Modified the loadAuthValues function call to include throwError: false, preventing exceptions on authentication failures. - Removed the unused processFileURL parameter from the tool context object, streamlining the code. * refactor: streamline GoogleGenAI initialization in GeminiImageGen - Removed unused file system access check for Google application credentials, simplifying the environment setup. - Added googleAuthOptions to the GoogleGenAI instantiation, enhancing the configuration for authentication. * fix: update Gemini API Key label and description in manifest.json - Changed the label to indicate that the Gemini API Key is optional. - Revised the description to clarify usage with Vertex AI and service accounts, enhancing user guidance. * fix: enhance abort signal handling in createGeminiImageTool - Introduced derivedSignal to manage abort events during image generation, improving responsiveness to cancellation requests. - Added an abortHandler to log when image generation is aborted, enhancing debugging capabilities. - Ensured proper cleanup of event listeners in the finally block to prevent memory leaks. * fix: update authentication handling for plugins to support optional fields - Added support for optional authentication fields in the manifest and PluginAuthForm. - Updated the checkPluginAuth function to correctly validate plugins with optional fields. - Enhanced tests to cover scenarios with optional authentication fields, ensuring accurate validation logic.
84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
import { AuthType, EToolResources } from 'librechat-data-provider';
|
|
import type { TPlugin } from 'librechat-data-provider';
|
|
|
|
/**
|
|
* Filters out duplicate plugins from the list of plugins.
|
|
*
|
|
* @param plugins The list of plugins to filter.
|
|
* @returns The list of plugins with duplicates removed.
|
|
*/
|
|
export const filterUniquePlugins = (plugins?: TPlugin[]): TPlugin[] => {
|
|
const seen = new Set();
|
|
return (
|
|
plugins?.filter((plugin) => {
|
|
const duplicate = seen.has(plugin.pluginKey);
|
|
seen.add(plugin.pluginKey);
|
|
return !duplicate;
|
|
}) || []
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Determines if a plugin is authenticated by checking if all required authentication fields have non-empty values.
|
|
* Supports alternate authentication fields, allowing validation against multiple possible environment variables.
|
|
*
|
|
* @param plugin The plugin object containing the authentication configuration.
|
|
* @returns True if the plugin is authenticated for all required fields, false otherwise.
|
|
*/
|
|
export const checkPluginAuth = (plugin?: TPlugin): boolean => {
|
|
if (!plugin?.authConfig || plugin.authConfig.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
return plugin.authConfig.every((authFieldObj) => {
|
|
if (authFieldObj.optional === true) {
|
|
return true;
|
|
}
|
|
|
|
const authFieldOptions = authFieldObj.authField.split('||');
|
|
let isFieldAuthenticated = false;
|
|
|
|
for (const fieldOption of authFieldOptions) {
|
|
const envValue = process.env[fieldOption];
|
|
if (envValue && envValue.trim() !== '' && envValue !== AuthType.USER_PROVIDED) {
|
|
isFieldAuthenticated = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return isFieldAuthenticated;
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @param toolkits
|
|
* @param toolName
|
|
* @returns toolKey
|
|
*/
|
|
export function getToolkitKey({
|
|
toolkits,
|
|
toolName,
|
|
}: {
|
|
toolkits: TPlugin[];
|
|
toolName?: string;
|
|
}): string | undefined {
|
|
let toolkitKey: string | undefined;
|
|
if (!toolName) {
|
|
return toolkitKey;
|
|
}
|
|
for (const toolkit of toolkits) {
|
|
if (toolName.startsWith(EToolResources.image_edit)) {
|
|
const splitMatches = toolkit.pluginKey.split('_');
|
|
const suffix = splitMatches[splitMatches.length - 1];
|
|
if (toolName.endsWith(suffix)) {
|
|
toolkitKey = toolkit.pluginKey;
|
|
break;
|
|
}
|
|
}
|
|
if (toolName.startsWith(toolkit.pluginKey)) {
|
|
toolkitKey = toolkit.pluginKey;
|
|
break;
|
|
}
|
|
}
|
|
return toolkitKey;
|
|
}
|