File size: 1,552 Bytes
aa2e6af | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | import type { TFile, Assistant, TPlugin } from 'librechat-data-provider';
import type { TPluginMap } from '~/common';
/** Maps Files by `file_id` for quick lookup */
export function mapFiles(files: TFile[]) {
const fileMap = {} as Record<string, TFile>;
for (const file of files) {
fileMap[file.file_id] = file;
}
return fileMap;
}
/** Maps Assistants by `id` for quick lookup */
export function mapAssistants(assistants: Assistant[]) {
const assistantMap = {} as Record<string, Assistant>;
for (const assistant of assistants) {
assistantMap[assistant.id] = assistant;
}
return assistantMap;
}
/** Maps Plugins by `pluginKey` for quick lookup */
export function mapPlugins(plugins: TPlugin[]): TPluginMap {
return plugins.reduce((acc, plugin) => {
acc[plugin.pluginKey] = plugin;
return acc;
}, {} as TPluginMap);
}
/** Transform query data to object with list and map fields */
export const selectPlugins = (
data: TPlugin[] | undefined,
): {
list: TPlugin[];
map: TPluginMap;
} => {
if (!data) {
return {
list: [],
map: {},
};
}
return {
list: data,
map: mapPlugins(data),
};
};
/** Transform array to TPlugin values */
export function processPlugins(tools: (string | TPlugin)[], allPlugins?: TPluginMap): TPlugin[] {
return tools
.map((tool: string | TPlugin) => {
if (typeof tool === 'string') {
return allPlugins?.[tool];
}
return tool;
})
.filter((tool: TPlugin | undefined): tool is TPlugin => tool !== undefined);
}
|