diff --git a/api/app/clients/AnthropicClient.js b/api/app/clients/AnthropicClient.js index 834877bb42..43e546a0a3 100644 --- a/api/app/clients/AnthropicClient.js +++ b/api/app/clients/AnthropicClient.js @@ -1,4 +1,5 @@ const Anthropic = require('@anthropic-ai/sdk'); +const { logger } = require('@librechat/data-schemas'); const { HttpsProxyAgent } = require('https-proxy-agent'); const { Constants, @@ -9,7 +10,7 @@ const { getResponseSender, validateVisionModel, } = require('librechat-data-provider'); -const { SplitStreamHandler: _Handler } = require('@librechat/agents'); +const { sleep, SplitStreamHandler: _Handler } = require('@librechat/agents'); const { Tokenizer, createFetch, @@ -31,9 +32,7 @@ const { } = require('./prompts'); const { spendTokens, spendStructuredTokens } = require('~/models/spendTokens'); const { encodeAndFormat } = require('~/server/services/Files/images/encode'); -const { sleep } = require('~/server/utils'); const BaseClient = require('./BaseClient'); -const { logger } = require('~/config'); const HUMAN_PROMPT = '\n\nHuman:'; const AI_PROMPT = '\n\nAssistant:'; diff --git a/api/app/clients/GoogleClient.js b/api/app/clients/GoogleClient.js index 715f48ff5a..9322778e73 100644 --- a/api/app/clients/GoogleClient.js +++ b/api/app/clients/GoogleClient.js @@ -1,4 +1,6 @@ const { google } = require('googleapis'); +const { sleep } = require('@librechat/agents'); +const { logger } = require('@librechat/data-schemas'); const { getModelMaxTokens } = require('@librechat/api'); const { concat } = require('@langchain/core/utils/stream'); const { ChatVertexAI } = require('@langchain/google-vertexai'); @@ -22,8 +24,6 @@ const { } = require('librechat-data-provider'); const { encodeAndFormat } = require('~/server/services/Files/images'); const { spendTokens } = require('~/models/spendTokens'); -const { sleep } = require('~/server/utils'); -const { logger } = require('~/config'); const { formatMessage, createContextHandlers, diff --git a/api/app/clients/OpenAIClient.js b/api/app/clients/OpenAIClient.js index 2b254036c5..17c4891dcd 100644 --- a/api/app/clients/OpenAIClient.js +++ b/api/app/clients/OpenAIClient.js @@ -1,6 +1,6 @@ -const { OllamaClient } = require('./OllamaClient'); +const { logger } = require('@librechat/data-schemas'); const { HttpsProxyAgent } = require('https-proxy-agent'); -const { SplitStreamHandler, CustomOpenAIClient: OpenAI } = require('@librechat/agents'); +const { sleep, SplitStreamHandler, CustomOpenAIClient: OpenAI } = require('@librechat/agents'); const { isEnabled, Tokenizer, @@ -34,16 +34,16 @@ const { createContextHandlers, } = require('./prompts'); const { encodeAndFormat } = require('~/server/services/Files/images/encode'); -const { addSpaceIfNeeded, sleep } = require('~/server/utils'); const { spendTokens } = require('~/models/spendTokens'); +const { addSpaceIfNeeded } = require('~/server/utils'); const { handleOpenAIErrors } = require('./tools/util'); +const { OllamaClient } = require('./OllamaClient'); const { summaryBuffer } = require('./memory'); const { runTitleChain } = require('./chains'); const { extractBaseURL } = require('~/utils'); const { tokenSplit } = require('./document'); const BaseClient = require('./BaseClient'); const { createLLM } = require('./llm'); -const { logger } = require('~/config'); class OpenAIClient extends BaseClient { constructor(apiKey, options = {}) { diff --git a/api/app/clients/TextStream.js b/api/app/clients/TextStream.js index 01809e87fa..ea3d8980e9 100644 --- a/api/app/clients/TextStream.js +++ b/api/app/clients/TextStream.js @@ -1,5 +1,5 @@ const { Readable } = require('stream'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); class TextStream extends Readable { constructor(text, options = {}) { diff --git a/api/app/clients/agents/CustomAgent/outputParser.js b/api/app/clients/agents/CustomAgent/outputParser.js index 9d849519f5..f75200e692 100644 --- a/api/app/clients/agents/CustomAgent/outputParser.js +++ b/api/app/clients/agents/CustomAgent/outputParser.js @@ -1,5 +1,5 @@ +const { logger } = require('@librechat/data-schemas'); const { ZeroShotAgentOutputParser } = require('langchain/agents'); -const { logger } = require('~/config'); class CustomOutputParser extends ZeroShotAgentOutputParser { constructor(fields) { diff --git a/api/app/clients/chains/runTitleChain.js b/api/app/clients/chains/runTitleChain.js index a020ffb8e3..5c3d9738e1 100644 --- a/api/app/clients/chains/runTitleChain.js +++ b/api/app/clients/chains/runTitleChain.js @@ -1,7 +1,7 @@ const { z } = require('zod'); +const { logger } = require('@librechat/data-schemas'); const { langPrompt, createTitlePrompt, escapeBraces, getSnippet } = require('../prompts'); const { createStructuredOutputChainFromZod } = require('langchain/chains/openai_functions'); -const { logger } = require('~/config'); const langSchema = z.object({ language: z.string().describe('The language of the input text (full noun, no abbreviations).'), diff --git a/api/app/clients/memory/summaryBuffer.js b/api/app/clients/memory/summaryBuffer.js index 0555fc214e..84ff34d151 100644 --- a/api/app/clients/memory/summaryBuffer.js +++ b/api/app/clients/memory/summaryBuffer.js @@ -1,7 +1,7 @@ +const { logger } = require('@librechat/data-schemas'); const { ConversationSummaryBufferMemory, ChatMessageHistory } = require('langchain/memory'); const { formatLangChainMessages, SUMMARY_PROMPT } = require('../prompts'); const { predictNewSummary } = require('../chains'); -const { logger } = require('~/config'); const createSummaryBufferMemory = ({ llm, prompt, messages, ...rest }) => { const chatHistory = new ChatMessageHistory(messages); diff --git a/api/app/clients/output_parsers/addImages.js b/api/app/clients/output_parsers/addImages.js index 7bef60259c..4b5019279a 100644 --- a/api/app/clients/output_parsers/addImages.js +++ b/api/app/clients/output_parsers/addImages.js @@ -1,4 +1,4 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); /** * The `addImages` function corrects any erroneous image URLs in the `responseMessage.text` diff --git a/api/app/clients/tools/structured/AzureAISearch.js b/api/app/clients/tools/structured/AzureAISearch.js index e25da94426..55af3cdff5 100644 --- a/api/app/clients/tools/structured/AzureAISearch.js +++ b/api/app/clients/tools/structured/AzureAISearch.js @@ -1,7 +1,7 @@ const { z } = require('zod'); const { Tool } = require('@langchain/core/tools'); +const { logger } = require('@librechat/data-schemas'); const { SearchClient, AzureKeyCredential } = require('@azure/search-documents'); -const { logger } = require('~/config'); class AzureAISearch extends Tool { // Constants for default values @@ -18,7 +18,7 @@ class AzureAISearch extends Tool { super(); this.name = 'azure-ai-search'; this.description = - 'Use the \'azure-ai-search\' tool to retrieve search results relevant to your input'; + "Use the 'azure-ai-search' tool to retrieve search results relevant to your input"; /* Used to initialize the Tool without necessary variables. */ this.override = fields.override ?? false; diff --git a/api/app/clients/tools/structured/FluxAPI.js b/api/app/clients/tools/structured/FluxAPI.js index 80f9772200..9fa08a0343 100644 --- a/api/app/clients/tools/structured/FluxAPI.js +++ b/api/app/clients/tools/structured/FluxAPI.js @@ -3,12 +3,12 @@ const axios = require('axios'); const fetch = require('node-fetch'); const { v4: uuidv4 } = require('uuid'); const { Tool } = require('@langchain/core/tools'); +const { logger } = require('@librechat/data-schemas'); const { HttpsProxyAgent } = require('https-proxy-agent'); const { FileContext, ContentTypes } = require('librechat-data-provider'); -const { logger } = require('~/config'); const displayMessage = - 'Flux displayed an image. All generated images are already plainly visible, so don\'t repeat the descriptions in detail. Do not list download links as they are available in the UI already. The user may download the images by clicking on them, but do not mention anything about downloading to the user.'; + "Flux displayed an image. All generated images are already plainly visible, so don't repeat the descriptions in detail. Do not list download links as they are available in the UI already. The user may download the images by clicking on them, but do not mention anything about downloading to the user."; /** * FluxAPI - A tool for generating high-quality images from text prompts using the Flux API. diff --git a/api/app/clients/tools/structured/StableDiffusion.js b/api/app/clients/tools/structured/StableDiffusion.js index b08e42e7c1..05687923e6 100644 --- a/api/app/clients/tools/structured/StableDiffusion.js +++ b/api/app/clients/tools/structured/StableDiffusion.js @@ -6,9 +6,9 @@ const axios = require('axios'); const sharp = require('sharp'); const { v4: uuidv4 } = require('uuid'); const { Tool } = require('@langchain/core/tools'); +const { logger } = require('@librechat/data-schemas'); const { FileContext, ContentTypes } = require('librechat-data-provider'); const paths = require('~/config/paths'); -const { logger } = require('~/config'); const displayMessage = "Stable Diffusion displayed an image. All generated images are already plainly visible, so don't repeat the descriptions in detail. Do not list download links as they are available in the UI already. The user may download the images by clicking on them, but do not mention anything about downloading to the user."; diff --git a/api/app/clients/tools/structured/TraversaalSearch.js b/api/app/clients/tools/structured/TraversaalSearch.js index e8ceeda134..d2ccc35c75 100644 --- a/api/app/clients/tools/structured/TraversaalSearch.js +++ b/api/app/clients/tools/structured/TraversaalSearch.js @@ -1,7 +1,7 @@ const { z } = require('zod'); const { Tool } = require('@langchain/core/tools'); +const { logger } = require('@librechat/data-schemas'); const { getEnvironmentVariable } = require('@langchain/core/utils/env'); -const { logger } = require('~/config'); /** * Tool for the Traversaal AI search API, Ares. @@ -21,7 +21,7 @@ class TraversaalSearch extends Tool { query: z .string() .describe( - 'A properly written sentence to be interpreted by an AI to search the web according to the user\'s request.', + "A properly written sentence to be interpreted by an AI to search the web according to the user's request.", ), }); @@ -38,7 +38,6 @@ class TraversaalSearch extends Tool { return apiKey; } - // eslint-disable-next-line no-unused-vars async _call({ query }, _runManager) { const body = { query: [query], diff --git a/api/app/clients/tools/structured/Wolfram.js b/api/app/clients/tools/structured/Wolfram.js index 1b426298cc..1f7fe6b1b7 100644 --- a/api/app/clients/tools/structured/Wolfram.js +++ b/api/app/clients/tools/structured/Wolfram.js @@ -1,8 +1,8 @@ /* eslint-disable no-useless-escape */ -const axios = require('axios'); const { z } = require('zod'); +const axios = require('axios'); const { Tool } = require('@langchain/core/tools'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); class WolframAlphaAPI extends Tool { constructor(fields) { diff --git a/api/app/clients/tools/util/handleOpenAIErrors.js b/api/app/clients/tools/util/handleOpenAIErrors.js index 490f3882a8..b3a7c2bfdc 100644 --- a/api/app/clients/tools/util/handleOpenAIErrors.js +++ b/api/app/clients/tools/util/handleOpenAIErrors.js @@ -1,5 +1,5 @@ const OpenAI = require('openai'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); /** * Handles errors that may occur when making requests to OpenAI's API. diff --git a/api/cache/clearPendingReq.js b/api/cache/clearPendingReq.js index 54db8e9690..b4329b1f06 100644 --- a/api/cache/clearPendingReq.js +++ b/api/cache/clearPendingReq.js @@ -1,5 +1,5 @@ +const { isEnabled } = require('@librechat/api'); const { Time, CacheKeys } = require('librechat-data-provider'); -const { isEnabled } = require('~/server/utils'); const getLogStores = require('./getLogStores'); const { USE_REDIS, LIMIT_CONCURRENT_MESSAGES } = process.env ?? {}; diff --git a/api/cache/keyvMongo.js b/api/cache/keyvMongo.js index 1606e98eb8..efcce76752 100644 --- a/api/cache/keyvMongo.js +++ b/api/cache/keyvMongo.js @@ -2,7 +2,7 @@ const mongoose = require('mongoose'); const EventEmitter = require('events'); const { GridFSBucket } = require('mongodb'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); const storeMap = new Map(); diff --git a/api/cache/logViolation.js b/api/cache/logViolation.js index 16dc2e4eae..1ff65c6ccd 100644 --- a/api/cache/logViolation.js +++ b/api/cache/logViolation.js @@ -1,4 +1,4 @@ -const { isEnabled } = require('~/server/utils'); +const { isEnabled } = require('@librechat/api'); const { ViolationTypes } = require('librechat-data-provider'); const getLogStores = require('./getLogStores'); const banViolation = require('./banViolation'); diff --git a/api/models/Categories.js b/api/models/Categories.js index 5da1f4b2da..34bd2d8ed2 100644 --- a/api/models/Categories.js +++ b/api/models/Categories.js @@ -1,4 +1,4 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); const options = [ { diff --git a/api/models/spendTokens.js b/api/models/spendTokens.js index 65fadd7896..cfd983f6bb 100644 --- a/api/models/spendTokens.js +++ b/api/models/spendTokens.js @@ -1,4 +1,4 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); const { createTransaction, createStructuredTransaction } = require('./Transaction'); /** * Creates up to two transactions to record the spending of tokens. diff --git a/api/server/controllers/ModelController.js b/api/server/controllers/ModelController.js index 7430655df3..805d9eef27 100644 --- a/api/server/controllers/ModelController.js +++ b/api/server/controllers/ModelController.js @@ -1,7 +1,7 @@ +const { logger } = require('@librechat/data-schemas'); const { CacheKeys } = require('librechat-data-provider'); const { loadDefaultModels, loadConfigModels } = require('~/server/services/Config'); const { getLogStores } = require('~/cache'); -const { logger } = require('~/config'); /** * @param {ServerRequest} req diff --git a/api/server/controllers/auth/LoginController.js b/api/server/controllers/auth/LoginController.js index 226b5605cc..930eee86be 100644 --- a/api/server/controllers/auth/LoginController.js +++ b/api/server/controllers/auth/LoginController.js @@ -1,6 +1,6 @@ +const { logger } = require('@librechat/data-schemas'); const { generate2FATempToken } = require('~/server/services/twoFactorService'); const { setAuthTokens } = require('~/server/services/AuthService'); -const { logger } = require('~/config'); const loginController = async (req, res) => { try { diff --git a/api/server/controllers/auth/LogoutController.js b/api/server/controllers/auth/LogoutController.js index 1d18e4a94d..02d3d0302d 100644 --- a/api/server/controllers/auth/LogoutController.js +++ b/api/server/controllers/auth/LogoutController.js @@ -1,8 +1,8 @@ const cookies = require('cookie'); -const { getOpenIdConfig } = require('~/strategies'); +const { isEnabled } = require('@librechat/api'); +const { logger } = require('@librechat/data-schemas'); const { logoutUser } = require('~/server/services/AuthService'); -const { isEnabled } = require('~/server/utils'); -const { logger } = require('~/config'); +const { getOpenIdConfig } = require('~/strategies'); const logoutController = async (req, res) => { const refreshToken = req.headers.cookie ? cookies.parse(req.headers.cookie).refreshToken : null; diff --git a/api/server/middleware/canDeleteAccount.js b/api/server/middleware/canDeleteAccount.js index 5f2479fb54..a913495287 100644 --- a/api/server/middleware/canDeleteAccount.js +++ b/api/server/middleware/canDeleteAccount.js @@ -1,6 +1,6 @@ +const { isEnabled } = require('@librechat/api'); +const { logger } = require('@librechat/data-schemas'); const { SystemRoles } = require('librechat-data-provider'); -const { isEnabled } = require('~/server/utils'); -const { logger } = require('~/config'); /** * Checks if the user can delete their account diff --git a/api/server/middleware/checkBan.js b/api/server/middleware/checkBan.js index ad4e4c86ec..9f735592f5 100644 --- a/api/server/middleware/checkBan.js +++ b/api/server/middleware/checkBan.js @@ -1,8 +1,9 @@ const { Keyv } = require('keyv'); const uap = require('ua-parser-js'); +const { isEnabled } = require('@librechat/api'); const { logger } = require('@librechat/data-schemas'); const { ViolationTypes } = require('librechat-data-provider'); -const { isEnabled, removePorts } = require('~/server/utils'); +const { removePorts } = require('~/server/utils'); const keyvMongo = require('~/cache/keyvMongo'); const denyRequest = require('./denyRequest'); const { getLogStores } = require('~/cache'); diff --git a/api/server/middleware/checkPeoplePickerAccess.js b/api/server/middleware/checkPeoplePickerAccess.js index 3f462362a1..0e604272db 100644 --- a/api/server/middleware/checkPeoplePickerAccess.js +++ b/api/server/middleware/checkPeoplePickerAccess.js @@ -1,6 +1,6 @@ +const { logger } = require('@librechat/data-schemas'); const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider'); const { getRoleByName } = require('~/models/Role'); -const { logger } = require('~/config'); /** * Middleware to check if user has permission to access people picker functionality diff --git a/api/server/middleware/checkPeoplePickerAccess.spec.js b/api/server/middleware/checkPeoplePickerAccess.spec.js index ddbf6f86a9..52bf0e6724 100644 --- a/api/server/middleware/checkPeoplePickerAccess.spec.js +++ b/api/server/middleware/checkPeoplePickerAccess.spec.js @@ -1,10 +1,11 @@ +const { logger } = require('@librechat/data-schemas'); const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider'); const { checkPeoplePickerAccess } = require('./checkPeoplePickerAccess'); const { getRoleByName } = require('~/models/Role'); -const { logger } = require('~/config'); jest.mock('~/models/Role'); -jest.mock('~/config', () => ({ +jest.mock('@librechat/data-schemas', () => ({ + ...jest.requireActual('@librechat/data-schemas'), logger: { error: jest.fn(), }, diff --git a/api/server/middleware/concurrentLimiter.js b/api/server/middleware/concurrentLimiter.js index 79de88609b..96885e2fd4 100644 --- a/api/server/middleware/concurrentLimiter.js +++ b/api/server/middleware/concurrentLimiter.js @@ -1,7 +1,7 @@ +const { isEnabled } = require('@librechat/api'); const { Time, CacheKeys, ViolationTypes } = require('librechat-data-provider'); const clearPendingReq = require('~/cache/clearPendingReq'); const { logViolation, getLogStores } = require('~/cache'); -const { isEnabled } = require('~/server/utils'); const denyRequest = require('./denyRequest'); const { diff --git a/api/server/middleware/logHeaders.js b/api/server/middleware/logHeaders.js index 26ca04da38..398542747a 100644 --- a/api/server/middleware/logHeaders.js +++ b/api/server/middleware/logHeaders.js @@ -1,4 +1,4 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); /** * Middleware to log Forwarded Headers diff --git a/api/server/middleware/moderateText.js b/api/server/middleware/moderateText.js index ff1a9de856..775afbafbf 100644 --- a/api/server/middleware/moderateText.js +++ b/api/server/middleware/moderateText.js @@ -1,8 +1,8 @@ const axios = require('axios'); +const { isEnabled } = require('@librechat/api'); +const { logger } = require('@librechat/data-schemas'); const { ErrorTypes } = require('librechat-data-provider'); -const { isEnabled } = require('~/server/utils'); const denyRequest = require('./denyRequest'); -const { logger } = require('~/config'); async function moderateText(req, res, next) { if (!isEnabled(process.env.OPENAI_MODERATION)) { diff --git a/api/server/middleware/optionalJwtAuth.js b/api/server/middleware/optionalJwtAuth.js index 953bc54029..2f59fdda4a 100644 --- a/api/server/middleware/optionalJwtAuth.js +++ b/api/server/middleware/optionalJwtAuth.js @@ -1,6 +1,6 @@ const cookies = require('cookie'); -const { isEnabled } = require('~/server/utils'); const passport = require('passport'); +const { isEnabled } = require('@librechat/api'); // This middleware does not require authentication, // but if the user is authenticated, it will set the user object. diff --git a/api/server/middleware/requireJwtAuth.js b/api/server/middleware/requireJwtAuth.js index c00b37ee0b..ed83c4773e 100644 --- a/api/server/middleware/requireJwtAuth.js +++ b/api/server/middleware/requireJwtAuth.js @@ -1,6 +1,6 @@ -const passport = require('passport'); const cookies = require('cookie'); -const { isEnabled } = require('~/server/utils'); +const passport = require('passport'); +const { isEnabled } = require('@librechat/api'); /** * Custom Middleware to handle JWT authentication, with support for OpenID token reuse diff --git a/api/server/middleware/requireLocalAuth.js b/api/server/middleware/requireLocalAuth.js index a71bd6c5b0..e82388f298 100644 --- a/api/server/middleware/requireLocalAuth.js +++ b/api/server/middleware/requireLocalAuth.js @@ -1,5 +1,5 @@ const passport = require('passport'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); const requireLocalAuth = (req, res, next) => { passport.authenticate('local', (err, user, info) => { diff --git a/api/server/middleware/validatePasswordReset.js b/api/server/middleware/validatePasswordReset.js index 7f5616722a..b4acd66bb1 100644 --- a/api/server/middleware/validatePasswordReset.js +++ b/api/server/middleware/validatePasswordReset.js @@ -1,5 +1,5 @@ -const { isEnabled } = require('~/server/utils'); -const { logger } = require('~/config'); +const { isEnabled } = require('@librechat/api'); +const { logger } = require('@librechat/data-schemas'); function validatePasswordReset(req, res, next) { if (isEnabled(process.env.ALLOW_PASSWORD_RESET)) { diff --git a/api/server/middleware/validateRegistration.js b/api/server/middleware/validateRegistration.js index 07911bd9c7..79b5caca2d 100644 --- a/api/server/middleware/validateRegistration.js +++ b/api/server/middleware/validateRegistration.js @@ -1,4 +1,4 @@ -const { isEnabled } = require('~/server/utils'); +const { isEnabled } = require('@librechat/api'); function validateRegistration(req, res, next) { if (req.invite) { diff --git a/api/server/routes/__tests__/ldap.spec.js b/api/server/routes/__tests__/ldap.spec.js index 6e0a95bfe4..bc7efa7859 100644 --- a/api/server/routes/__tests__/ldap.spec.js +++ b/api/server/routes/__tests__/ldap.spec.js @@ -1,10 +1,13 @@ -const request = require('supertest'); const express = require('express'); +const request = require('supertest'); +const { isEnabled } = require('@librechat/api'); const { getLdapConfig } = require('~/server/services/Config/ldap'); -const { isEnabled } = require('~/server/utils'); jest.mock('~/server/services/Config/ldap'); -jest.mock('~/server/utils'); +jest.mock('@librechat/api', () => ({ + ...jest.requireActual('@librechat/api'), + isEnabled: jest.fn(), +})); const app = express(); diff --git a/api/server/routes/agents/index.js b/api/server/routes/agents/index.js index a1cf5f751a..b5e249b059 100644 --- a/api/server/routes/agents/index.js +++ b/api/server/routes/agents/index.js @@ -1,4 +1,5 @@ const express = require('express'); +const { isEnabled } = require('@librechat/api'); const { uaParser, checkBan, @@ -8,7 +9,6 @@ const { concurrentLimiter, messageUserLimiter, } = require('~/server/middleware'); -const { isEnabled } = require('~/server/utils'); const { v1 } = require('./v1'); const chat = require('./chat'); diff --git a/api/server/routes/edit/index.js b/api/server/routes/edit/index.js index 92a1e63f63..2ebc57a13f 100644 --- a/api/server/routes/edit/index.js +++ b/api/server/routes/edit/index.js @@ -1,19 +1,19 @@ +const { isEnabled } = require('@librechat/api'); +const { EModelEndpoint } = require('librechat-data-provider'); +const { + validateConvoAccess, + messageUserLimiter, + concurrentLimiter, + messageIpLimiter, + requireJwtAuth, + checkBan, + uaParser, +} = require('~/server/middleware'); +const anthropic = require('./anthropic'); const express = require('express'); const openAI = require('./openAI'); const custom = require('./custom'); const google = require('./google'); -const anthropic = require('./anthropic'); -const { isEnabled } = require('~/server/utils'); -const { EModelEndpoint } = require('librechat-data-provider'); -const { - checkBan, - uaParser, - requireJwtAuth, - messageIpLimiter, - concurrentLimiter, - messageUserLimiter, - validateConvoAccess, -} = require('~/server/middleware'); const { LIMIT_CONCURRENT_MESSAGES, LIMIT_MESSAGE_IP, LIMIT_MESSAGE_USER } = process.env ?? {}; diff --git a/api/server/routes/files/files.js b/api/server/routes/files/files.js index 5d6e72ff2d..5d9761fc6d 100644 --- a/api/server/routes/files/files.js +++ b/api/server/routes/files/files.js @@ -1,6 +1,7 @@ const fs = require('fs').promises; const express = require('express'); const { EnvVar } = require('@librechat/agents'); +const { logger } = require('@librechat/data-schemas'); const { Time, isUUID, @@ -30,7 +31,6 @@ const { cleanFileName } = require('~/server/utils/files'); const { getAssistant } = require('~/models/Assistant'); const { getAgent } = require('~/models/Agent'); const { getLogStores } = require('~/cache'); -const { logger } = require('~/config'); const { Readable } = require('stream'); const router = express.Router(); diff --git a/api/server/routes/files/speech/tts.js b/api/server/routes/files/speech/tts.js index 1ee540874f..ab1de205b7 100644 --- a/api/server/routes/files/speech/tts.js +++ b/api/server/routes/files/speech/tts.js @@ -1,9 +1,9 @@ const multer = require('multer'); const express = require('express'); +const { logger } = require('@librechat/data-schemas'); const { CacheKeys } = require('librechat-data-provider'); const { getVoices, streamAudio, textToSpeech } = require('~/server/services/Files/Audio'); const { getLogStores } = require('~/cache'); -const { logger } = require('~/config'); const router = express.Router(); const upload = multer(); diff --git a/api/server/routes/presets.js b/api/server/routes/presets.js index 19214a3a7d..b8be1b8f3a 100644 --- a/api/server/routes/presets.js +++ b/api/server/routes/presets.js @@ -1,8 +1,8 @@ -const express = require('express'); const crypto = require('crypto'); +const express = require('express'); +const { logger } = require('@librechat/data-schemas'); const { getPresets, savePreset, deletePresets } = require('~/models'); const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); -const { logger } = require('~/config'); const router = express.Router(); router.use(requireJwtAuth); diff --git a/api/server/routes/search.js b/api/server/routes/search.js index 5c7846aee1..2cd2fc3534 100644 --- a/api/server/routes/search.js +++ b/api/server/routes/search.js @@ -1,7 +1,7 @@ const express = require('express'); const { MeiliSearch } = require('meilisearch'); +const { isEnabled } = require('@librechat/api'); const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); -const { isEnabled } = require('~/server/utils'); const router = express.Router(); diff --git a/api/server/routes/static.js b/api/server/routes/static.js index 952ca82fb2..12dfc0ed49 100644 --- a/api/server/routes/static.js +++ b/api/server/routes/static.js @@ -1,7 +1,7 @@ const express = require('express'); +const { isEnabled } = require('@librechat/api'); const staticCache = require('../utils/staticCache'); const paths = require('~/config/paths'); -const { isEnabled } = require('~/server/utils'); const skipGzipScan = !isEnabled(process.env.ENABLE_IMAGE_OUTPUT_GZIP_SCAN); diff --git a/api/server/routes/tokenizer.js b/api/server/routes/tokenizer.js index e12a86bde1..62eb31b70e 100644 --- a/api/server/routes/tokenizer.js +++ b/api/server/routes/tokenizer.js @@ -1,8 +1,9 @@ const express = require('express'); -const router = express.Router(); +const { logger } = require('@librechat/data-schemas'); const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); const { countTokens } = require('~/server/utils'); -const { logger } = require('~/config'); + +const router = express.Router(); router.post('/', requireJwtAuth, async (req, res) => { try { diff --git a/api/server/services/Config/ldap.js b/api/server/services/Config/ldap.js index 96386d0426..09091b78a4 100644 --- a/api/server/services/Config/ldap.js +++ b/api/server/services/Config/ldap.js @@ -1,4 +1,4 @@ -const { isEnabled } = require('~/server/utils'); +const { isEnabled } = require('@librechat/api'); /** @returns {TStartupConfig['ldap'] | undefined} */ const getLdapConfig = () => { diff --git a/api/server/services/Endpoints/anthropic/title.js b/api/server/services/Endpoints/anthropic/title.js index 0f9a5e97d0..cac39fa2be 100644 --- a/api/server/services/Endpoints/anthropic/title.js +++ b/api/server/services/Endpoints/anthropic/title.js @@ -1,6 +1,6 @@ +const { isEnabled } = require('@librechat/api'); const { CacheKeys } = require('librechat-data-provider'); const getLogStores = require('~/cache/getLogStores'); -const { isEnabled } = require('~/server/utils'); const { saveConvo } = require('~/models'); const addTitle = async (req, { text, response, client }) => { diff --git a/api/server/services/Endpoints/assistants/title.js b/api/server/services/Endpoints/assistants/title.js index 605d174130..223d3badc6 100644 --- a/api/server/services/Endpoints/assistants/title.js +++ b/api/server/services/Endpoints/assistants/title.js @@ -1,7 +1,7 @@ +const { isEnabled } = require('@librechat/api'); const { CacheKeys } = require('librechat-data-provider'); const { saveConvo } = require('~/models/Conversation'); const getLogStores = require('~/cache/getLogStores'); -const { isEnabled } = require('~/server/utils'); const addTitle = async (req, { text, responseText, conversationId, client }) => { const { TITLE_CONVO = 'true' } = process.env ?? {}; diff --git a/api/server/services/Endpoints/openAI/title.js b/api/server/services/Endpoints/openAI/title.js index 3b9e9c82b7..f8624ef657 100644 --- a/api/server/services/Endpoints/openAI/title.js +++ b/api/server/services/Endpoints/openAI/title.js @@ -1,6 +1,6 @@ +const { isEnabled } = require('@librechat/api'); const { CacheKeys } = require('librechat-data-provider'); const getLogStores = require('~/cache/getLogStores'); -const { isEnabled } = require('~/server/utils'); const { saveConvo } = require('~/models'); const addTitle = async (req, { text, response, client }) => { diff --git a/api/server/services/Files/Azure/crud.js b/api/server/services/Files/Azure/crud.js index cb52de8317..3e091d1031 100644 --- a/api/server/services/Files/Azure/crud.js +++ b/api/server/services/Files/Azure/crud.js @@ -3,7 +3,7 @@ const path = require('path'); const mime = require('mime'); const axios = require('axios'); const fetch = require('node-fetch'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); const { getAzureContainerClient } = require('./initialize'); const defaultBasePath = 'images'; diff --git a/api/server/services/Files/Azure/initialize.js b/api/server/services/Files/Azure/initialize.js index 56df24d04a..8c63b48122 100644 --- a/api/server/services/Files/Azure/initialize.js +++ b/api/server/services/Files/Azure/initialize.js @@ -1,5 +1,5 @@ +const { logger } = require('@librechat/data-schemas'); const { BlobServiceClient } = require('@azure/storage-blob'); -const { logger } = require('~/config'); let blobServiceClient = null; let azureWarningLogged = false; diff --git a/api/server/services/Files/Firebase/initialize.js b/api/server/services/Files/Firebase/initialize.js index 67d923c44f..efe66be120 100644 --- a/api/server/services/Files/Firebase/initialize.js +++ b/api/server/services/Files/Firebase/initialize.js @@ -1,6 +1,6 @@ const firebase = require('firebase/app'); const { getStorage } = require('firebase/storage'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); let i = 0; let firebaseApp = null; diff --git a/api/server/services/Files/OpenAI/crud.js b/api/server/services/Files/OpenAI/crud.js index 9afe217f60..674c493a34 100644 --- a/api/server/services/Files/OpenAI/crud.js +++ b/api/server/services/Files/OpenAI/crud.js @@ -1,7 +1,7 @@ const fs = require('fs'); +const { sleep } = require('@librechat/agents'); +const { logger } = require('@librechat/data-schemas'); const { FilePurpose } = require('librechat-data-provider'); -const { sleep } = require('~/server/utils'); -const { logger } = require('~/config'); /** * Uploads a file that can be used across various OpenAI services. diff --git a/api/server/services/Files/S3/crud.js b/api/server/services/Files/S3/crud.js index 78220ed30b..7b31a4d24b 100644 --- a/api/server/services/Files/S3/crud.js +++ b/api/server/services/Files/S3/crud.js @@ -1,5 +1,6 @@ const fs = require('fs'); const fetch = require('node-fetch'); +const { logger } = require('@librechat/data-schemas'); const { FileSources } = require('librechat-data-provider'); const { PutObjectCommand, @@ -9,7 +10,6 @@ const { } = require('@aws-sdk/client-s3'); const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); const { initializeS3 } = require('./initialize'); -const { logger } = require('~/config'); const bucketName = process.env.AWS_BUCKET_NAME; const defaultBasePath = 'images'; diff --git a/api/server/services/Files/S3/initialize.js b/api/server/services/Files/S3/initialize.js index 2daec25235..59a2568b47 100644 --- a/api/server/services/Files/S3/initialize.js +++ b/api/server/services/Files/S3/initialize.js @@ -1,5 +1,5 @@ const { S3Client } = require('@aws-sdk/client-s3'); -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); let s3 = null; diff --git a/api/server/services/Files/images/avatar.js b/api/server/services/Files/images/avatar.js index 8e81dea26c..9ce11c04ec 100644 --- a/api/server/services/Files/images/avatar.js +++ b/api/server/services/Files/images/avatar.js @@ -1,9 +1,9 @@ const sharp = require('sharp'); const fs = require('fs').promises; const fetch = require('node-fetch'); +const { logger } = require('@librechat/data-schemas'); const { EImageOutputType } = require('librechat-data-provider'); const { resizeAndConvert } = require('./resize'); -const { logger } = require('~/config'); /** * Uploads an avatar image for a user. This function can handle various types of input (URL, Buffer, or File object), diff --git a/api/server/services/Files/images/convert.js b/api/server/services/Files/images/convert.js index 446de5ba1c..d5f5c2893b 100644 --- a/api/server/services/Files/images/convert.js +++ b/api/server/services/Files/images/convert.js @@ -1,9 +1,9 @@ const fs = require('fs'); const path = require('path'); const sharp = require('sharp'); +const { logger } = require('@librechat/data-schemas'); const { getStrategyFunctions } = require('../strategies'); const { resizeImageBuffer } = require('./resize'); -const { logger } = require('~/config'); /** * Converts an image file or buffer to target output type with specified resolution. diff --git a/api/server/services/GraphTokenService.js b/api/server/services/GraphTokenService.js index d70e7c01c5..d5cd6a94f2 100644 --- a/api/server/services/GraphTokenService.js +++ b/api/server/services/GraphTokenService.js @@ -1,8 +1,8 @@ -const { getOpenIdConfig } = require('~/strategies/openidStrategy'); -const { logger } = require('~/config'); -const { CacheKeys } = require('librechat-data-provider'); -const getLogStores = require('~/cache/getLogStores'); const client = require('openid-client'); +const { logger } = require('@librechat/data-schemas'); +const { CacheKeys } = require('librechat-data-provider'); +const { getOpenIdConfig } = require('~/strategies/openidStrategy'); +const getLogStores = require('~/cache/getLogStores'); /** * Get Microsoft Graph API token using existing token exchange mechanism diff --git a/api/server/services/Runs/RunManager.js b/api/server/services/Runs/RunManager.js index 39e577fb51..7a3ec808df 100644 --- a/api/server/services/Runs/RunManager.js +++ b/api/server/services/Runs/RunManager.js @@ -1,5 +1,5 @@ +const { logger } = require('@librechat/data-schemas'); const { ToolCallTypes } = require('librechat-data-provider'); -const { logger } = require('~/config'); /** * @typedef {import('openai').OpenAI} OpenAI diff --git a/api/server/services/Runs/handle.js b/api/server/services/Runs/handle.js index abe933f92a..c515fabfe4 100644 --- a/api/server/services/Runs/handle.js +++ b/api/server/services/Runs/handle.js @@ -1,9 +1,9 @@ +const { sleep } = require('@librechat/agents'); +const { logger } = require('@librechat/data-schemas'); const { RunStatus, defaultOrderQuery, CacheKeys } = require('librechat-data-provider'); const getLogStores = require('~/cache/getLogStores'); const { retrieveRun } = require('./methods'); -const { sleep } = require('~/server/utils'); const RunManager = require('./RunManager'); -const { logger } = require('~/config'); async function withTimeout(promise, timeoutMs, timeoutMessage) { let timeoutHandle; diff --git a/api/server/services/cleanup.js b/api/server/services/cleanup.js index 814c0ecc94..7d3dfdec12 100644 --- a/api/server/services/cleanup.js +++ b/api/server/services/cleanup.js @@ -1,5 +1,6 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); const { deleteNullOrEmptyConversations } = require('~/models/Conversation'); + const cleanup = async () => { try { await deleteNullOrEmptyConversations(); diff --git a/api/server/utils/countTokens.js b/api/server/utils/countTokens.js index 641e386101..504de26a5e 100644 --- a/api/server/utils/countTokens.js +++ b/api/server/utils/countTokens.js @@ -1,7 +1,7 @@ const { Tiktoken } = require('tiktoken/lite'); +const { logger } = require('@librechat/data-schemas'); const p50k_base = require('tiktoken/encoders/p50k_base.json'); const cl100k_base = require('tiktoken/encoders/cl100k_base.json'); -const logger = require('~/config/winston'); /** * Counts the number of tokens in a given text using a specified encoding model. diff --git a/api/server/utils/handleText.js b/api/server/utils/handleText.js index 91c2ff25ec..15c2db3fcc 100644 --- a/api/server/utils/handleText.js +++ b/api/server/utils/handleText.js @@ -125,34 +125,6 @@ function formatAction(action) { return formattedAction; } -/** - * Checks if the given value is truthy by being either the boolean `true` or a string - * that case-insensitively matches 'true'. - * - * @function - * @param {string|boolean|null|undefined} value - The value to check. - * @returns {boolean} Returns `true` if the value is the boolean `true` or a case-insensitive - * match for the string 'true', otherwise returns `false`. - * @example - * - * isEnabled("True"); // returns true - * isEnabled("TRUE"); // returns true - * isEnabled(true); // returns true - * isEnabled("false"); // returns false - * isEnabled(false); // returns false - * isEnabled(null); // returns false - * isEnabled(); // returns false - */ -function isEnabled(value) { - if (typeof value === 'boolean') { - return value; - } - if (typeof value === 'string') { - return value.toLowerCase().trim() === 'true'; - } - return false; -} - /** * Checks if the provided value is 'user_provided'. * @@ -207,7 +179,6 @@ function generateConfig(key, baseURL, endpoint) { } module.exports = { - isEnabled, handleText, formatSteps, escapeRegExp, diff --git a/api/server/utils/import/fork.js b/api/server/utils/import/fork.js index 5aa2599fe3..c4ce8cb5d4 100644 --- a/api/server/utils/import/fork.js +++ b/api/server/utils/import/fork.js @@ -1,10 +1,10 @@ const { v4: uuidv4 } = require('uuid'); +const { logger } = require('@librechat/data-schemas'); const { EModelEndpoint, Constants, ForkOptions } = require('librechat-data-provider'); const { createImportBatchBuilder } = require('./importBatchBuilder'); const BaseClient = require('~/app/clients/BaseClient'); const { getConvo } = require('~/models/Conversation'); const { getMessages } = require('~/models/Message'); -const logger = require('~/config/winston'); /** * Helper function to clone messages with proper parent-child relationships and timestamps diff --git a/api/server/utils/import/importBatchBuilder.js b/api/server/utils/import/importBatchBuilder.js index d20f200939..5e499043d2 100644 --- a/api/server/utils/import/importBatchBuilder.js +++ b/api/server/utils/import/importBatchBuilder.js @@ -1,9 +1,9 @@ const { v4: uuidv4 } = require('uuid'); +const { logger } = require('@librechat/data-schemas'); const { EModelEndpoint, Constants, openAISettings } = require('librechat-data-provider'); const { bulkIncrementTagCounts } = require('~/models/ConversationTag'); const { bulkSaveConvos } = require('~/models/Conversation'); const { bulkSaveMessages } = require('~/models/Message'); -const { logger } = require('~/config'); /** * Factory function for creating an instance of ImportBatchBuilder. diff --git a/api/server/utils/queue.js b/api/server/utils/queue.js index c32adaeffd..73d819205c 100644 --- a/api/server/utils/queue.js +++ b/api/server/utils/queue.js @@ -53,17 +53,6 @@ function LB_QueueAsyncCall(asyncFunc, args, callback) { } } -/** - * Delays the execution for a specified number of milliseconds. - * - * @param {number} ms - The number of milliseconds to delay. - * @return {Promise} A promise that resolves after the specified delay. - */ -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - module.exports = { - sleep, LB_QueueAsyncCall, }; diff --git a/api/strategies/appleStrategy.js b/api/strategies/appleStrategy.js index 4dbac2e364..fbba2a1f41 100644 --- a/api/strategies/appleStrategy.js +++ b/api/strategies/appleStrategy.js @@ -1,7 +1,7 @@ -const socialLogin = require('./socialLogin'); -const { Strategy: AppleStrategy } = require('passport-apple'); -const { logger } = require('~/config'); const jwt = require('jsonwebtoken'); +const { logger } = require('@librechat/data-schemas'); +const { Strategy: AppleStrategy } = require('passport-apple'); +const socialLogin = require('./socialLogin'); /** * Extract profile details from the decoded idToken diff --git a/api/utils/deriveBaseURL.js b/api/utils/deriveBaseURL.js index c377ddf874..982c2c8c2e 100644 --- a/api/utils/deriveBaseURL.js +++ b/api/utils/deriveBaseURL.js @@ -1,4 +1,4 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); /** * Extracts the base URL from the provided URL. diff --git a/api/utils/findMessageContent.js b/api/utils/findMessageContent.js index 6ee5166348..6aeed1a395 100644 --- a/api/utils/findMessageContent.js +++ b/api/utils/findMessageContent.js @@ -1,4 +1,4 @@ -const { logger } = require('~/config'); +const { logger } = require('@librechat/data-schemas'); function findContent(obj) { if (obj && typeof obj === 'object') { diff --git a/docker-compose.yml b/docker-compose.yml index dfd11af09f..9a3e4bbd5c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,7 +26,7 @@ services: target: /app/.env - ./images:/app/client/public/images - ./uploads:/app/uploads - - ./logs:/app/api/logs + - ./logs:/app/logs mongodb: container_name: chat-mongodb image: mongo