| import { EToolResources } from 'librechat-data-provider'; |
| import type { AgentToolResources, TFile } from 'librechat-data-provider'; |
|
|
| |
| |
| |
| |
| |
| |
| |
| export function convertOcrToContextInPlace(data: { |
| tool_resources?: AgentToolResources; |
| tools?: string[]; |
| }): void { |
| |
| if (data.tool_resources?.ocr) { |
| if (!data.tool_resources.context) { |
| data.tool_resources.context = data.tool_resources.ocr; |
| } else { |
| |
| if (data.tool_resources.ocr?.file_ids?.length) { |
| const existingFileIds = data.tool_resources.context.file_ids || []; |
| const ocrFileIds = data.tool_resources.ocr.file_ids || []; |
| data.tool_resources.context.file_ids = [...new Set([...existingFileIds, ...ocrFileIds])]; |
| } |
| if (data.tool_resources.ocr?.files?.length) { |
| const existingFiles = data.tool_resources.context.files || []; |
| const ocrFiles = data.tool_resources.ocr.files || []; |
| const filesMap = new Map<string, TFile>(); |
| [...existingFiles, ...ocrFiles].forEach((file) => { |
| if (file?.file_id) { |
| filesMap.set(file.file_id, file); |
| } |
| }); |
| data.tool_resources.context.files = Array.from(filesMap.values()); |
| } |
| } |
| delete data.tool_resources.ocr; |
| } |
|
|
| |
| if (data.tools?.includes(EToolResources.ocr)) { |
| data.tools = data.tools.map((tool) => |
| tool === EToolResources.ocr ? EToolResources.context : tool, |
| ); |
| data.tools = [...new Set(data.tools)]; |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function mergeAgentOcrConversion( |
| existingAgent: { tool_resources?: AgentToolResources; tools?: string[] }, |
| updateData: { tool_resources?: AgentToolResources; tools?: string[] }, |
| ): { tool_resources?: AgentToolResources; tools?: string[] } { |
| if (!existingAgent.tool_resources?.ocr) { |
| return {}; |
| } |
|
|
| const result: { tool_resources?: AgentToolResources; tools?: string[] } = {}; |
|
|
| |
| result.tool_resources = { ...existingAgent.tool_resources }; |
|
|
| if (!result.tool_resources.context) { |
| |
| result.tool_resources.context = result.tool_resources.ocr; |
| } else { |
| |
|
|
| |
| if (result.tool_resources.ocr?.file_ids?.length) { |
| const existingFileIds = result.tool_resources.context.file_ids || []; |
| const ocrFileIds = result.tool_resources.ocr.file_ids || []; |
| result.tool_resources.context.file_ids = [...new Set([...existingFileIds, ...ocrFileIds])]; |
| } |
|
|
| |
| if (result.tool_resources.ocr?.files?.length) { |
| const existingFiles = result.tool_resources.context.files || []; |
| const ocrFiles = result.tool_resources.ocr?.files || []; |
| |
| const filesMap = new Map<string, TFile>(); |
| [...existingFiles, ...ocrFiles].forEach((file) => { |
| if (file?.file_id) { |
| filesMap.set(file.file_id, file); |
| } |
| }); |
| result.tool_resources.context.files = Array.from(filesMap.values()); |
| } |
| } |
|
|
| |
| delete result.tool_resources.ocr; |
|
|
| |
| if (existingAgent.tools?.includes(EToolResources.ocr)) { |
| result.tools = existingAgent.tools.map((tool) => |
| tool === EToolResources.ocr ? EToolResources.context : tool, |
| ); |
| |
| result.tools = [...new Set(result.tools)]; |
| } |
|
|
| |
| if (updateData.tool_resources?.context && result.tool_resources.context) { |
| |
| const mergedContext = { ...result.tool_resources.context }; |
|
|
| |
| if (updateData.tool_resources.context.file_ids?.length) { |
| const existingIds = mergedContext.file_ids || []; |
| const newIds = updateData.tool_resources.context.file_ids || []; |
| mergedContext.file_ids = [...new Set([...existingIds, ...newIds])]; |
| } |
|
|
| |
| if (updateData.tool_resources.context.files?.length) { |
| const existingFiles = mergedContext.files || []; |
| const newFiles = updateData.tool_resources.context.files || []; |
| const filesMap = new Map<string, TFile>(); |
| [...existingFiles, ...newFiles].forEach((file) => { |
| if (file?.file_id) { |
| filesMap.set(file.file_id, file); |
| } |
| }); |
| mergedContext.files = Array.from(filesMap.values()); |
| } |
|
|
| result.tool_resources.context = mergedContext; |
| } |
|
|
| return result; |
| } |
|
|