| | import type * as t from 'librechat-data-provider'; |
| | import type { TPluginMap } from '~/common'; |
| |
|
| | |
| | export function mapAttachments(attachments: Array<t.TAttachment | null | undefined>) { |
| | const attachmentMap: Record<string, t.TAttachment[] | undefined> = {}; |
| |
|
| | for (const attachment of attachments) { |
| | if (attachment === null || attachment === undefined) { |
| | continue; |
| | } |
| | const key = attachment.toolCallId || ''; |
| | if (key.length === 0) { |
| | continue; |
| | } |
| |
|
| | if (!attachmentMap[key]) { |
| | attachmentMap[key] = []; |
| | } |
| |
|
| | attachmentMap[key]?.push(attachment); |
| | } |
| |
|
| | return attachmentMap; |
| | } |
| |
|
| | |
| | export function mapFiles(files: t.TFile[]) { |
| | const fileMap = {} as Record<string, t.TFile>; |
| |
|
| | for (const file of files) { |
| | fileMap[file.file_id] = file; |
| | } |
| |
|
| | return fileMap; |
| | } |
| |
|
| | |
| | export function mapAssistants(assistants: t.Assistant[]) { |
| | const assistantMap = {} as Record<string, t.Assistant>; |
| |
|
| | for (const assistant of assistants) { |
| | assistantMap[assistant.id] = assistant; |
| | } |
| |
|
| | return assistantMap; |
| | } |
| |
|
| | |
| | export function mapAgents(agents: t.Agent[]) { |
| | const agentsMap = {} as Record<string, t.Agent>; |
| |
|
| | for (const agent of agents) { |
| | agentsMap[agent.id] = agent; |
| | } |
| |
|
| | return agentsMap; |
| | } |
| |
|
| | |
| | export function mapPlugins(plugins: t.TPlugin[]): TPluginMap { |
| | return plugins.reduce((acc, plugin) => { |
| | acc[plugin.pluginKey] = plugin; |
| | return acc; |
| | }, {} as TPluginMap); |
| | } |
| |
|
| | |
| | export const selectPlugins = ( |
| | data: t.TPlugin[] | undefined, |
| | ): { |
| | list: t.TPlugin[]; |
| | map: TPluginMap; |
| | } => { |
| | if (!data) { |
| | return { |
| | list: [], |
| | map: {}, |
| | }; |
| | } |
| |
|
| | return { |
| | list: data, |
| | map: mapPlugins(data), |
| | }; |
| | }; |
| |
|
| | |
| | export function processPlugins( |
| | tools: (string | t.TPlugin)[], |
| | allPlugins?: TPluginMap, |
| | ): t.TPlugin[] { |
| | return tools |
| | .map((tool: string | t.TPlugin) => { |
| | if (typeof tool === 'string') { |
| | return allPlugins?.[tool]; |
| | } |
| | return tool; |
| | }) |
| | .filter((tool: t.TPlugin | undefined): tool is t.TPlugin => tool !== undefined); |
| | } |
| |
|
| | export function mapToolCalls(toolCalls: t.ToolCallResults = []): { |
| | [key: string]: t.ToolCallResult[] | undefined; |
| | } { |
| | return toolCalls.reduce( |
| | (acc, call) => { |
| | const key = `${call.messageId}_${call.partIndex ?? 0}_${call.blockIndex ?? 0}_${call.toolId}`; |
| | const array = acc[key] ?? []; |
| | array.push(call); |
| | acc[key] = array; |
| |
|
| | return acc; |
| | }, |
| | {} as { [key: string]: t.ToolCallResult[] | undefined }, |
| | ); |
| | } |
| |
|