| | const { logger } = require('@librechat/data-schemas'); |
| |
|
| | |
| | const requestDataMap = new WeakMap(); |
| |
|
| | const FinalizationRegistry = global.FinalizationRegistry || null; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | const clientRegistry = FinalizationRegistry |
| | ? new FinalizationRegistry((heldValue) => { |
| | try { |
| | |
| | if (heldValue && heldValue.userId) { |
| | logger.debug(`[FinalizationRegistry] Cleaning up client for user ${heldValue.userId}`); |
| | } else { |
| | logger.debug('[FinalizationRegistry] Cleaning up client'); |
| | } |
| | } catch { |
| | |
| | } |
| | }) |
| | : null; |
| |
|
| | const graphPropsToClean = [ |
| | 'handlerRegistry', |
| | 'runId', |
| | 'tools', |
| | 'signal', |
| | 'config', |
| | 'agentContexts', |
| | 'messages', |
| | 'contentData', |
| | 'stepKeyIds', |
| | 'contentIndexMap', |
| | 'toolCallStepIds', |
| | 'messageIdsByStepKey', |
| | 'messageStepHasToolCalls', |
| | 'prelimMessageIdsByStepKey', |
| | 'startIndex', |
| | 'defaultAgentId', |
| | 'dispatchReasoningDelta', |
| | 'compileOptions', |
| | 'invokedToolIds', |
| | 'overrideModel', |
| | ]; |
| |
|
| | const graphRunnablePropsToClean = [ |
| | 'lc_serializable', |
| | 'lc_kwargs', |
| | 'lc_runnable', |
| | 'name', |
| | 'lc_namespace', |
| | 'lg_is_pregel', |
| | 'nodes', |
| | 'channels', |
| | 'inputChannels', |
| | 'outputChannels', |
| | 'autoValidate', |
| | 'streamMode', |
| | 'streamChannels', |
| | 'interruptAfter', |
| | 'interruptBefore', |
| | 'stepTimeout', |
| | 'debug', |
| | 'checkpointer', |
| | 'retryPolicy', |
| | 'config', |
| | 'store', |
| | 'triggerToNodes', |
| | 'cache', |
| | 'description', |
| | 'metaRegistry', |
| | ]; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | function disposeClient(client) { |
| | if (!client) { |
| | return; |
| | } |
| |
|
| | try { |
| | if (client.user) { |
| | client.user = null; |
| | } |
| | if (client.apiKey) { |
| | client.apiKey = null; |
| | } |
| | if (client.azure) { |
| | client.azure = null; |
| | } |
| | if (client.conversationId) { |
| | client.conversationId = null; |
| | } |
| | if (client.responseMessageId) { |
| | client.responseMessageId = null; |
| | } |
| | if (client.parentMessageId) { |
| | client.parentMessageId = null; |
| | } |
| | if (client.message_file_map) { |
| | client.message_file_map = null; |
| | } |
| | if (client.clientName) { |
| | client.clientName = null; |
| | } |
| | if (client.sender) { |
| | client.sender = null; |
| | } |
| | if (client.model) { |
| | client.model = null; |
| | } |
| | if (client.maxContextTokens) { |
| | client.maxContextTokens = null; |
| | } |
| | if (client.contextStrategy) { |
| | client.contextStrategy = null; |
| | } |
| | if (client.currentDateString) { |
| | client.currentDateString = null; |
| | } |
| | if (client.inputTokensKey) { |
| | client.inputTokensKey = null; |
| | } |
| | if (client.outputTokensKey) { |
| | client.outputTokensKey = null; |
| | } |
| | if (client.skipSaveUserMessage !== undefined) { |
| | client.skipSaveUserMessage = null; |
| | } |
| | if (client.visionMode) { |
| | client.visionMode = null; |
| | } |
| | if (client.continued !== undefined) { |
| | client.continued = null; |
| | } |
| | if (client.fetchedConvo !== undefined) { |
| | client.fetchedConvo = null; |
| | } |
| | if (client.previous_summary) { |
| | client.previous_summary = null; |
| | } |
| | if (client.metadata) { |
| | client.metadata = null; |
| | } |
| | if (client.isVisionModel) { |
| | client.isVisionModel = null; |
| | } |
| | if (client.isChatCompletion !== undefined) { |
| | client.isChatCompletion = null; |
| | } |
| | if (client.contextHandlers) { |
| | client.contextHandlers = null; |
| | } |
| | if (client.augmentedPrompt) { |
| | client.augmentedPrompt = null; |
| | } |
| | if (client.systemMessage) { |
| | client.systemMessage = null; |
| | } |
| | if (client.azureEndpoint) { |
| | client.azureEndpoint = null; |
| | } |
| | if (client.langchainProxy) { |
| | client.langchainProxy = null; |
| | } |
| | if (client.isOmni !== undefined) { |
| | client.isOmni = null; |
| | } |
| | if (client.runManager) { |
| | client.runManager = null; |
| | } |
| | |
| | if (client.message_start) { |
| | client.message_start = null; |
| | } |
| | if (client.message_delta) { |
| | client.message_delta = null; |
| | } |
| | if (client.isClaudeLatest !== undefined) { |
| | client.isClaudeLatest = null; |
| | } |
| | if (client.useMessages !== undefined) { |
| | client.useMessages = null; |
| | } |
| | if (client.supportsCacheControl !== undefined) { |
| | client.supportsCacheControl = null; |
| | } |
| | |
| | if (client.serviceKey) { |
| | client.serviceKey = null; |
| | } |
| | if (client.project_id) { |
| | client.project_id = null; |
| | } |
| | if (client.client_email) { |
| | client.client_email = null; |
| | } |
| | if (client.private_key) { |
| | client.private_key = null; |
| | } |
| | if (client.access_token) { |
| | client.access_token = null; |
| | } |
| | if (client.reverseProxyUrl) { |
| | client.reverseProxyUrl = null; |
| | } |
| | if (client.authHeader) { |
| | client.authHeader = null; |
| | } |
| | if (client.isGenerativeModel !== undefined) { |
| | client.isGenerativeModel = null; |
| | } |
| | |
| | if (client.completionsUrl) { |
| | client.completionsUrl = null; |
| | } |
| | if (client.shouldSummarize !== undefined) { |
| | client.shouldSummarize = null; |
| | } |
| | if (client.isOllama !== undefined) { |
| | client.isOllama = null; |
| | } |
| | if (client.FORCE_PROMPT !== undefined) { |
| | client.FORCE_PROMPT = null; |
| | } |
| | if (client.isChatGptModel !== undefined) { |
| | client.isChatGptModel = null; |
| | } |
| | if (client.isUnofficialChatGptModel !== undefined) { |
| | client.isUnofficialChatGptModel = null; |
| | } |
| | if (client.useOpenRouter !== undefined) { |
| | client.useOpenRouter = null; |
| | } |
| | if (client.startToken) { |
| | client.startToken = null; |
| | } |
| | if (client.endToken) { |
| | client.endToken = null; |
| | } |
| | if (client.userLabel) { |
| | client.userLabel = null; |
| | } |
| | if (client.chatGptLabel) { |
| | client.chatGptLabel = null; |
| | } |
| | if (client.modelLabel) { |
| | client.modelLabel = null; |
| | } |
| | if (client.modelOptions) { |
| | client.modelOptions = null; |
| | } |
| | if (client.defaultVisionModel) { |
| | client.defaultVisionModel = null; |
| | } |
| | if (client.maxPromptTokens) { |
| | client.maxPromptTokens = null; |
| | } |
| | if (client.maxResponseTokens) { |
| | client.maxResponseTokens = null; |
| | } |
| | if (client.processMemory) { |
| | client.processMemory = null; |
| | } |
| |
|
| | if (client.run) { |
| | if (client.run.Graph) { |
| | client.run.Graph.resetValues(); |
| |
|
| | graphPropsToClean.forEach((prop) => { |
| | if (client.run.Graph[prop] !== undefined) { |
| | client.run.Graph[prop] = null; |
| | } |
| | }); |
| |
|
| | client.run.Graph = null; |
| | } |
| |
|
| | if (client.run.graphRunnable) { |
| | graphRunnablePropsToClean.forEach((prop) => { |
| | if (client.run.graphRunnable[prop] !== undefined) { |
| | client.run.graphRunnable[prop] = null; |
| | } |
| | }); |
| |
|
| | if (client.run.graphRunnable.builder) { |
| | if (client.run.graphRunnable.builder.nodes !== undefined) { |
| | client.run.graphRunnable.builder.nodes = null; |
| | } |
| | client.run.graphRunnable.builder = null; |
| | } |
| |
|
| | client.run.graphRunnable = null; |
| | } |
| |
|
| | const runPropsToClean = [ |
| | 'handlerRegistry', |
| | 'id', |
| | 'indexTokenCountMap', |
| | 'returnContent', |
| | 'tokenCounter', |
| | ]; |
| |
|
| | runPropsToClean.forEach((prop) => { |
| | if (client.run[prop] !== undefined) { |
| | client.run[prop] = null; |
| | } |
| | }); |
| |
|
| | client.run = null; |
| | } |
| |
|
| | if (client.sendMessage) { |
| | client.sendMessage = null; |
| | } |
| | if (client.savedMessageIds) { |
| | client.savedMessageIds.clear(); |
| | client.savedMessageIds = null; |
| | } |
| | if (client.currentMessages) { |
| | client.currentMessages = null; |
| | } |
| | if (client.streamHandler) { |
| | client.streamHandler = null; |
| | } |
| | if (client.contentParts) { |
| | client.contentParts = null; |
| | } |
| | if (client.abortController) { |
| | client.abortController = null; |
| | } |
| | if (client.collectedUsage) { |
| | client.collectedUsage = null; |
| | } |
| | if (client.indexTokenCountMap) { |
| | client.indexTokenCountMap = null; |
| | } |
| | if (client.agentConfigs) { |
| | client.agentConfigs = null; |
| | } |
| | if (client.agentIdMap) { |
| | client.agentIdMap = null; |
| | } |
| | if (client.artifactPromises) { |
| | client.artifactPromises = null; |
| | } |
| | if (client.usage) { |
| | client.usage = null; |
| | } |
| | if (typeof client.dispose === 'function') { |
| | client.dispose(); |
| | } |
| | if (client.options) { |
| | if (client.options.req) { |
| | client.options.req = null; |
| | } |
| | if (client.options.res) { |
| | client.options.res = null; |
| | } |
| | if (client.options.attachments) { |
| | client.options.attachments = null; |
| | } |
| | if (client.options.agent) { |
| | client.options.agent = null; |
| | } |
| | } |
| | client.options = null; |
| | } catch { |
| | |
| | } finally { |
| | logger.debug('[disposeClient] Client disposed'); |
| | } |
| | } |
| |
|
| | function processReqData(data = {}, context) { |
| | let { |
| | abortKey, |
| | userMessage, |
| | userMessagePromise, |
| | responseMessageId, |
| | promptTokens, |
| | conversationId, |
| | userMessageId, |
| | } = context; |
| | for (const key in data) { |
| | if (key === 'userMessage') { |
| | userMessage = data[key]; |
| | userMessageId = data[key].messageId; |
| | } else if (key === 'userMessagePromise') { |
| | userMessagePromise = data[key]; |
| | } else if (key === 'responseMessageId') { |
| | responseMessageId = data[key]; |
| | } else if (key === 'promptTokens') { |
| | promptTokens = data[key]; |
| | } else if (key === 'abortKey') { |
| | abortKey = data[key]; |
| | } else if (!conversationId && key === 'conversationId') { |
| | conversationId = data[key]; |
| | } |
| | } |
| | return { |
| | abortKey, |
| | userMessage, |
| | userMessagePromise, |
| | responseMessageId, |
| | promptTokens, |
| | conversationId, |
| | userMessageId, |
| | }; |
| | } |
| |
|
| | module.exports = { |
| | disposeClient, |
| | requestDataMap, |
| | clientRegistry, |
| | processReqData, |
| | }; |
| |
|