🧹 chore: Cleanup Logger and Utility Imports (#9935)

* 🧹 chore: Update logger imports to use @librechat/data-schemas across multiple files and remove unused sleep function from queue.js (#9930)

* chore: Replace local isEnabled utility with @librechat/api import across multiple files, update test files

* chore: Replace local logger import with @librechat/data-schemas logger in countTokens.js and fork.js

* chore: Update logs volume path in docker-compose.yml to correct directory

* chore: import order of isEnabled in static.js
This commit is contained in:
Danny Avila 2025-10-01 23:30:47 -04:00 committed by GitHub
parent b7d13cec6f
commit dbe4dd96b4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
68 changed files with 111 additions and 146 deletions

View file

@ -1,4 +1,5 @@
const Anthropic = require('@anthropic-ai/sdk'); const Anthropic = require('@anthropic-ai/sdk');
const { logger } = require('@librechat/data-schemas');
const { HttpsProxyAgent } = require('https-proxy-agent'); const { HttpsProxyAgent } = require('https-proxy-agent');
const { const {
Constants, Constants,
@ -9,7 +10,7 @@ const {
getResponseSender, getResponseSender,
validateVisionModel, validateVisionModel,
} = require('librechat-data-provider'); } = require('librechat-data-provider');
const { SplitStreamHandler: _Handler } = require('@librechat/agents'); const { sleep, SplitStreamHandler: _Handler } = require('@librechat/agents');
const { const {
Tokenizer, Tokenizer,
createFetch, createFetch,
@ -31,9 +32,7 @@ const {
} = require('./prompts'); } = require('./prompts');
const { spendTokens, spendStructuredTokens } = require('~/models/spendTokens'); const { spendTokens, spendStructuredTokens } = require('~/models/spendTokens');
const { encodeAndFormat } = require('~/server/services/Files/images/encode'); const { encodeAndFormat } = require('~/server/services/Files/images/encode');
const { sleep } = require('~/server/utils');
const BaseClient = require('./BaseClient'); const BaseClient = require('./BaseClient');
const { logger } = require('~/config');
const HUMAN_PROMPT = '\n\nHuman:'; const HUMAN_PROMPT = '\n\nHuman:';
const AI_PROMPT = '\n\nAssistant:'; const AI_PROMPT = '\n\nAssistant:';

View file

@ -1,4 +1,6 @@
const { google } = require('googleapis'); const { google } = require('googleapis');
const { sleep } = require('@librechat/agents');
const { logger } = require('@librechat/data-schemas');
const { getModelMaxTokens } = require('@librechat/api'); const { getModelMaxTokens } = require('@librechat/api');
const { concat } = require('@langchain/core/utils/stream'); const { concat } = require('@langchain/core/utils/stream');
const { ChatVertexAI } = require('@langchain/google-vertexai'); const { ChatVertexAI } = require('@langchain/google-vertexai');
@ -22,8 +24,6 @@ const {
} = require('librechat-data-provider'); } = require('librechat-data-provider');
const { encodeAndFormat } = require('~/server/services/Files/images'); const { encodeAndFormat } = require('~/server/services/Files/images');
const { spendTokens } = require('~/models/spendTokens'); const { spendTokens } = require('~/models/spendTokens');
const { sleep } = require('~/server/utils');
const { logger } = require('~/config');
const { const {
formatMessage, formatMessage,
createContextHandlers, createContextHandlers,

View file

@ -1,6 +1,6 @@
const { OllamaClient } = require('./OllamaClient'); const { logger } = require('@librechat/data-schemas');
const { HttpsProxyAgent } = require('https-proxy-agent'); const { HttpsProxyAgent } = require('https-proxy-agent');
const { SplitStreamHandler, CustomOpenAIClient: OpenAI } = require('@librechat/agents'); const { sleep, SplitStreamHandler, CustomOpenAIClient: OpenAI } = require('@librechat/agents');
const { const {
isEnabled, isEnabled,
Tokenizer, Tokenizer,
@ -34,16 +34,16 @@ const {
createContextHandlers, createContextHandlers,
} = require('./prompts'); } = require('./prompts');
const { encodeAndFormat } = require('~/server/services/Files/images/encode'); const { encodeAndFormat } = require('~/server/services/Files/images/encode');
const { addSpaceIfNeeded, sleep } = require('~/server/utils');
const { spendTokens } = require('~/models/spendTokens'); const { spendTokens } = require('~/models/spendTokens');
const { addSpaceIfNeeded } = require('~/server/utils');
const { handleOpenAIErrors } = require('./tools/util'); const { handleOpenAIErrors } = require('./tools/util');
const { OllamaClient } = require('./OllamaClient');
const { summaryBuffer } = require('./memory'); const { summaryBuffer } = require('./memory');
const { runTitleChain } = require('./chains'); const { runTitleChain } = require('./chains');
const { extractBaseURL } = require('~/utils'); const { extractBaseURL } = require('~/utils');
const { tokenSplit } = require('./document'); const { tokenSplit } = require('./document');
const BaseClient = require('./BaseClient'); const BaseClient = require('./BaseClient');
const { createLLM } = require('./llm'); const { createLLM } = require('./llm');
const { logger } = require('~/config');
class OpenAIClient extends BaseClient { class OpenAIClient extends BaseClient {
constructor(apiKey, options = {}) { constructor(apiKey, options = {}) {

View file

@ -1,5 +1,5 @@
const { Readable } = require('stream'); const { Readable } = require('stream');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
class TextStream extends Readable { class TextStream extends Readable {
constructor(text, options = {}) { constructor(text, options = {}) {

View file

@ -1,5 +1,5 @@
const { logger } = require('@librechat/data-schemas');
const { ZeroShotAgentOutputParser } = require('langchain/agents'); const { ZeroShotAgentOutputParser } = require('langchain/agents');
const { logger } = require('~/config');
class CustomOutputParser extends ZeroShotAgentOutputParser { class CustomOutputParser extends ZeroShotAgentOutputParser {
constructor(fields) { constructor(fields) {

View file

@ -1,7 +1,7 @@
const { z } = require('zod'); const { z } = require('zod');
const { logger } = require('@librechat/data-schemas');
const { langPrompt, createTitlePrompt, escapeBraces, getSnippet } = require('../prompts'); const { langPrompt, createTitlePrompt, escapeBraces, getSnippet } = require('../prompts');
const { createStructuredOutputChainFromZod } = require('langchain/chains/openai_functions'); const { createStructuredOutputChainFromZod } = require('langchain/chains/openai_functions');
const { logger } = require('~/config');
const langSchema = z.object({ const langSchema = z.object({
language: z.string().describe('The language of the input text (full noun, no abbreviations).'), language: z.string().describe('The language of the input text (full noun, no abbreviations).'),

View file

@ -1,7 +1,7 @@
const { logger } = require('@librechat/data-schemas');
const { ConversationSummaryBufferMemory, ChatMessageHistory } = require('langchain/memory'); const { ConversationSummaryBufferMemory, ChatMessageHistory } = require('langchain/memory');
const { formatLangChainMessages, SUMMARY_PROMPT } = require('../prompts'); const { formatLangChainMessages, SUMMARY_PROMPT } = require('../prompts');
const { predictNewSummary } = require('../chains'); const { predictNewSummary } = require('../chains');
const { logger } = require('~/config');
const createSummaryBufferMemory = ({ llm, prompt, messages, ...rest }) => { const createSummaryBufferMemory = ({ llm, prompt, messages, ...rest }) => {
const chatHistory = new ChatMessageHistory(messages); const chatHistory = new ChatMessageHistory(messages);

View file

@ -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` * The `addImages` function corrects any erroneous image URLs in the `responseMessage.text`

View file

@ -1,7 +1,7 @@
const { z } = require('zod'); const { z } = require('zod');
const { Tool } = require('@langchain/core/tools'); const { Tool } = require('@langchain/core/tools');
const { logger } = require('@librechat/data-schemas');
const { SearchClient, AzureKeyCredential } = require('@azure/search-documents'); const { SearchClient, AzureKeyCredential } = require('@azure/search-documents');
const { logger } = require('~/config');
class AzureAISearch extends Tool { class AzureAISearch extends Tool {
// Constants for default values // Constants for default values
@ -18,7 +18,7 @@ class AzureAISearch extends Tool {
super(); super();
this.name = 'azure-ai-search'; this.name = 'azure-ai-search';
this.description = 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. */ /* Used to initialize the Tool without necessary variables. */
this.override = fields.override ?? false; this.override = fields.override ?? false;

View file

@ -3,12 +3,12 @@ const axios = require('axios');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const { v4: uuidv4 } = require('uuid'); const { v4: uuidv4 } = require('uuid');
const { Tool } = require('@langchain/core/tools'); const { Tool } = require('@langchain/core/tools');
const { logger } = require('@librechat/data-schemas');
const { HttpsProxyAgent } = require('https-proxy-agent'); const { HttpsProxyAgent } = require('https-proxy-agent');
const { FileContext, ContentTypes } = require('librechat-data-provider'); const { FileContext, ContentTypes } = require('librechat-data-provider');
const { logger } = require('~/config');
const displayMessage = 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. * FluxAPI - A tool for generating high-quality images from text prompts using the Flux API.

View file

@ -6,9 +6,9 @@ const axios = require('axios');
const sharp = require('sharp'); const sharp = require('sharp');
const { v4: uuidv4 } = require('uuid'); const { v4: uuidv4 } = require('uuid');
const { Tool } = require('@langchain/core/tools'); const { Tool } = require('@langchain/core/tools');
const { logger } = require('@librechat/data-schemas');
const { FileContext, ContentTypes } = require('librechat-data-provider'); const { FileContext, ContentTypes } = require('librechat-data-provider');
const paths = require('~/config/paths'); const paths = require('~/config/paths');
const { logger } = require('~/config');
const displayMessage = 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."; "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.";

View file

@ -1,7 +1,7 @@
const { z } = require('zod'); const { z } = require('zod');
const { Tool } = require('@langchain/core/tools'); const { Tool } = require('@langchain/core/tools');
const { logger } = require('@librechat/data-schemas');
const { getEnvironmentVariable } = require('@langchain/core/utils/env'); const { getEnvironmentVariable } = require('@langchain/core/utils/env');
const { logger } = require('~/config');
/** /**
* Tool for the Traversaal AI search API, Ares. * Tool for the Traversaal AI search API, Ares.
@ -21,7 +21,7 @@ class TraversaalSearch extends Tool {
query: z query: z
.string() .string()
.describe( .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; return apiKey;
} }
// eslint-disable-next-line no-unused-vars
async _call({ query }, _runManager) { async _call({ query }, _runManager) {
const body = { const body = {
query: [query], query: [query],

View file

@ -1,8 +1,8 @@
/* eslint-disable no-useless-escape */ /* eslint-disable no-useless-escape */
const axios = require('axios');
const { z } = require('zod'); const { z } = require('zod');
const axios = require('axios');
const { Tool } = require('@langchain/core/tools'); const { Tool } = require('@langchain/core/tools');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
class WolframAlphaAPI extends Tool { class WolframAlphaAPI extends Tool {
constructor(fields) { constructor(fields) {

View file

@ -1,5 +1,5 @@
const OpenAI = require('openai'); 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. * Handles errors that may occur when making requests to OpenAI's API.

View file

@ -1,5 +1,5 @@
const { isEnabled } = require('@librechat/api');
const { Time, CacheKeys } = require('librechat-data-provider'); const { Time, CacheKeys } = require('librechat-data-provider');
const { isEnabled } = require('~/server/utils');
const getLogStores = require('./getLogStores'); const getLogStores = require('./getLogStores');
const { USE_REDIS, LIMIT_CONCURRENT_MESSAGES } = process.env ?? {}; const { USE_REDIS, LIMIT_CONCURRENT_MESSAGES } = process.env ?? {};

View file

@ -2,7 +2,7 @@
const mongoose = require('mongoose'); const mongoose = require('mongoose');
const EventEmitter = require('events'); const EventEmitter = require('events');
const { GridFSBucket } = require('mongodb'); const { GridFSBucket } = require('mongodb');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
const storeMap = new Map(); const storeMap = new Map();

View file

@ -1,4 +1,4 @@
const { isEnabled } = require('~/server/utils'); const { isEnabled } = require('@librechat/api');
const { ViolationTypes } = require('librechat-data-provider'); const { ViolationTypes } = require('librechat-data-provider');
const getLogStores = require('./getLogStores'); const getLogStores = require('./getLogStores');
const banViolation = require('./banViolation'); const banViolation = require('./banViolation');

View file

@ -1,4 +1,4 @@
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
const options = [ const options = [
{ {

View file

@ -1,4 +1,4 @@
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
const { createTransaction, createStructuredTransaction } = require('./Transaction'); const { createTransaction, createStructuredTransaction } = require('./Transaction');
/** /**
* Creates up to two transactions to record the spending of tokens. * Creates up to two transactions to record the spending of tokens.

View file

@ -1,7 +1,7 @@
const { logger } = require('@librechat/data-schemas');
const { CacheKeys } = require('librechat-data-provider'); const { CacheKeys } = require('librechat-data-provider');
const { loadDefaultModels, loadConfigModels } = require('~/server/services/Config'); const { loadDefaultModels, loadConfigModels } = require('~/server/services/Config');
const { getLogStores } = require('~/cache'); const { getLogStores } = require('~/cache');
const { logger } = require('~/config');
/** /**
* @param {ServerRequest} req * @param {ServerRequest} req

View file

@ -1,6 +1,6 @@
const { logger } = require('@librechat/data-schemas');
const { generate2FATempToken } = require('~/server/services/twoFactorService'); const { generate2FATempToken } = require('~/server/services/twoFactorService');
const { setAuthTokens } = require('~/server/services/AuthService'); const { setAuthTokens } = require('~/server/services/AuthService');
const { logger } = require('~/config');
const loginController = async (req, res) => { const loginController = async (req, res) => {
try { try {

View file

@ -1,8 +1,8 @@
const cookies = require('cookie'); 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 { logoutUser } = require('~/server/services/AuthService');
const { isEnabled } = require('~/server/utils'); const { getOpenIdConfig } = require('~/strategies');
const { logger } = require('~/config');
const logoutController = async (req, res) => { const logoutController = async (req, res) => {
const refreshToken = req.headers.cookie ? cookies.parse(req.headers.cookie).refreshToken : null; const refreshToken = req.headers.cookie ? cookies.parse(req.headers.cookie).refreshToken : null;

View file

@ -1,6 +1,6 @@
const { isEnabled } = require('@librechat/api');
const { logger } = require('@librechat/data-schemas');
const { SystemRoles } = require('librechat-data-provider'); const { SystemRoles } = require('librechat-data-provider');
const { isEnabled } = require('~/server/utils');
const { logger } = require('~/config');
/** /**
* Checks if the user can delete their account * Checks if the user can delete their account

View file

@ -1,8 +1,9 @@
const { Keyv } = require('keyv'); const { Keyv } = require('keyv');
const uap = require('ua-parser-js'); const uap = require('ua-parser-js');
const { isEnabled } = require('@librechat/api');
const { logger } = require('@librechat/data-schemas'); const { logger } = require('@librechat/data-schemas');
const { ViolationTypes } = require('librechat-data-provider'); const { ViolationTypes } = require('librechat-data-provider');
const { isEnabled, removePorts } = require('~/server/utils'); const { removePorts } = require('~/server/utils');
const keyvMongo = require('~/cache/keyvMongo'); const keyvMongo = require('~/cache/keyvMongo');
const denyRequest = require('./denyRequest'); const denyRequest = require('./denyRequest');
const { getLogStores } = require('~/cache'); const { getLogStores } = require('~/cache');

View file

@ -1,6 +1,6 @@
const { logger } = require('@librechat/data-schemas');
const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider'); const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider');
const { getRoleByName } = require('~/models/Role'); const { getRoleByName } = require('~/models/Role');
const { logger } = require('~/config');
/** /**
* Middleware to check if user has permission to access people picker functionality * Middleware to check if user has permission to access people picker functionality

View file

@ -1,10 +1,11 @@
const { logger } = require('@librechat/data-schemas');
const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider'); const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider');
const { checkPeoplePickerAccess } = require('./checkPeoplePickerAccess'); const { checkPeoplePickerAccess } = require('./checkPeoplePickerAccess');
const { getRoleByName } = require('~/models/Role'); const { getRoleByName } = require('~/models/Role');
const { logger } = require('~/config');
jest.mock('~/models/Role'); jest.mock('~/models/Role');
jest.mock('~/config', () => ({ jest.mock('@librechat/data-schemas', () => ({
...jest.requireActual('@librechat/data-schemas'),
logger: { logger: {
error: jest.fn(), error: jest.fn(),
}, },

View file

@ -1,7 +1,7 @@
const { isEnabled } = require('@librechat/api');
const { Time, CacheKeys, ViolationTypes } = require('librechat-data-provider'); const { Time, CacheKeys, ViolationTypes } = require('librechat-data-provider');
const clearPendingReq = require('~/cache/clearPendingReq'); const clearPendingReq = require('~/cache/clearPendingReq');
const { logViolation, getLogStores } = require('~/cache'); const { logViolation, getLogStores } = require('~/cache');
const { isEnabled } = require('~/server/utils');
const denyRequest = require('./denyRequest'); const denyRequest = require('./denyRequest');
const { const {

View file

@ -1,4 +1,4 @@
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
/** /**
* Middleware to log Forwarded Headers * Middleware to log Forwarded Headers

View file

@ -1,8 +1,8 @@
const axios = require('axios'); const axios = require('axios');
const { isEnabled } = require('@librechat/api');
const { logger } = require('@librechat/data-schemas');
const { ErrorTypes } = require('librechat-data-provider'); const { ErrorTypes } = require('librechat-data-provider');
const { isEnabled } = require('~/server/utils');
const denyRequest = require('./denyRequest'); const denyRequest = require('./denyRequest');
const { logger } = require('~/config');
async function moderateText(req, res, next) { async function moderateText(req, res, next) {
if (!isEnabled(process.env.OPENAI_MODERATION)) { if (!isEnabled(process.env.OPENAI_MODERATION)) {

View file

@ -1,6 +1,6 @@
const cookies = require('cookie'); const cookies = require('cookie');
const { isEnabled } = require('~/server/utils');
const passport = require('passport'); const passport = require('passport');
const { isEnabled } = require('@librechat/api');
// This middleware does not require authentication, // This middleware does not require authentication,
// but if the user is authenticated, it will set the user object. // but if the user is authenticated, it will set the user object.

View file

@ -1,6 +1,6 @@
const passport = require('passport');
const cookies = require('cookie'); 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 * Custom Middleware to handle JWT authentication, with support for OpenID token reuse

View file

@ -1,5 +1,5 @@
const passport = require('passport'); const passport = require('passport');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
const requireLocalAuth = (req, res, next) => { const requireLocalAuth = (req, res, next) => {
passport.authenticate('local', (err, user, info) => { passport.authenticate('local', (err, user, info) => {

View file

@ -1,5 +1,5 @@
const { isEnabled } = require('~/server/utils'); const { isEnabled } = require('@librechat/api');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
function validatePasswordReset(req, res, next) { function validatePasswordReset(req, res, next) {
if (isEnabled(process.env.ALLOW_PASSWORD_RESET)) { if (isEnabled(process.env.ALLOW_PASSWORD_RESET)) {

View file

@ -1,4 +1,4 @@
const { isEnabled } = require('~/server/utils'); const { isEnabled } = require('@librechat/api');
function validateRegistration(req, res, next) { function validateRegistration(req, res, next) {
if (req.invite) { if (req.invite) {

View file

@ -1,10 +1,13 @@
const request = require('supertest');
const express = require('express'); const express = require('express');
const request = require('supertest');
const { isEnabled } = require('@librechat/api');
const { getLdapConfig } = require('~/server/services/Config/ldap'); const { getLdapConfig } = require('~/server/services/Config/ldap');
const { isEnabled } = require('~/server/utils');
jest.mock('~/server/services/Config/ldap'); jest.mock('~/server/services/Config/ldap');
jest.mock('~/server/utils'); jest.mock('@librechat/api', () => ({
...jest.requireActual('@librechat/api'),
isEnabled: jest.fn(),
}));
const app = express(); const app = express();

View file

@ -1,4 +1,5 @@
const express = require('express'); const express = require('express');
const { isEnabled } = require('@librechat/api');
const { const {
uaParser, uaParser,
checkBan, checkBan,
@ -8,7 +9,6 @@ const {
concurrentLimiter, concurrentLimiter,
messageUserLimiter, messageUserLimiter,
} = require('~/server/middleware'); } = require('~/server/middleware');
const { isEnabled } = require('~/server/utils');
const { v1 } = require('./v1'); const { v1 } = require('./v1');
const chat = require('./chat'); const chat = require('./chat');

View file

@ -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 express = require('express');
const openAI = require('./openAI'); const openAI = require('./openAI');
const custom = require('./custom'); const custom = require('./custom');
const google = require('./google'); 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 ?? {}; const { LIMIT_CONCURRENT_MESSAGES, LIMIT_MESSAGE_IP, LIMIT_MESSAGE_USER } = process.env ?? {};

View file

@ -1,6 +1,7 @@
const fs = require('fs').promises; const fs = require('fs').promises;
const express = require('express'); const express = require('express');
const { EnvVar } = require('@librechat/agents'); const { EnvVar } = require('@librechat/agents');
const { logger } = require('@librechat/data-schemas');
const { const {
Time, Time,
isUUID, isUUID,
@ -30,7 +31,6 @@ const { cleanFileName } = require('~/server/utils/files');
const { getAssistant } = require('~/models/Assistant'); const { getAssistant } = require('~/models/Assistant');
const { getAgent } = require('~/models/Agent'); const { getAgent } = require('~/models/Agent');
const { getLogStores } = require('~/cache'); const { getLogStores } = require('~/cache');
const { logger } = require('~/config');
const { Readable } = require('stream'); const { Readable } = require('stream');
const router = express.Router(); const router = express.Router();

View file

@ -1,9 +1,9 @@
const multer = require('multer'); const multer = require('multer');
const express = require('express'); const express = require('express');
const { logger } = require('@librechat/data-schemas');
const { CacheKeys } = require('librechat-data-provider'); const { CacheKeys } = require('librechat-data-provider');
const { getVoices, streamAudio, textToSpeech } = require('~/server/services/Files/Audio'); const { getVoices, streamAudio, textToSpeech } = require('~/server/services/Files/Audio');
const { getLogStores } = require('~/cache'); const { getLogStores } = require('~/cache');
const { logger } = require('~/config');
const router = express.Router(); const router = express.Router();
const upload = multer(); const upload = multer();

View file

@ -1,8 +1,8 @@
const express = require('express');
const crypto = require('crypto'); const crypto = require('crypto');
const express = require('express');
const { logger } = require('@librechat/data-schemas');
const { getPresets, savePreset, deletePresets } = require('~/models'); const { getPresets, savePreset, deletePresets } = require('~/models');
const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); const requireJwtAuth = require('~/server/middleware/requireJwtAuth');
const { logger } = require('~/config');
const router = express.Router(); const router = express.Router();
router.use(requireJwtAuth); router.use(requireJwtAuth);

View file

@ -1,7 +1,7 @@
const express = require('express'); const express = require('express');
const { MeiliSearch } = require('meilisearch'); const { MeiliSearch } = require('meilisearch');
const { isEnabled } = require('@librechat/api');
const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); const requireJwtAuth = require('~/server/middleware/requireJwtAuth');
const { isEnabled } = require('~/server/utils');
const router = express.Router(); const router = express.Router();

View file

@ -1,7 +1,7 @@
const express = require('express'); const express = require('express');
const { isEnabled } = require('@librechat/api');
const staticCache = require('../utils/staticCache'); const staticCache = require('../utils/staticCache');
const paths = require('~/config/paths'); const paths = require('~/config/paths');
const { isEnabled } = require('~/server/utils');
const skipGzipScan = !isEnabled(process.env.ENABLE_IMAGE_OUTPUT_GZIP_SCAN); const skipGzipScan = !isEnabled(process.env.ENABLE_IMAGE_OUTPUT_GZIP_SCAN);

View file

@ -1,8 +1,9 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const { logger } = require('@librechat/data-schemas');
const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); const requireJwtAuth = require('~/server/middleware/requireJwtAuth');
const { countTokens } = require('~/server/utils'); const { countTokens } = require('~/server/utils');
const { logger } = require('~/config');
const router = express.Router();
router.post('/', requireJwtAuth, async (req, res) => { router.post('/', requireJwtAuth, async (req, res) => {
try { try {

View file

@ -1,4 +1,4 @@
const { isEnabled } = require('~/server/utils'); const { isEnabled } = require('@librechat/api');
/** @returns {TStartupConfig['ldap'] | undefined} */ /** @returns {TStartupConfig['ldap'] | undefined} */
const getLdapConfig = () => { const getLdapConfig = () => {

View file

@ -1,6 +1,6 @@
const { isEnabled } = require('@librechat/api');
const { CacheKeys } = require('librechat-data-provider'); const { CacheKeys } = require('librechat-data-provider');
const getLogStores = require('~/cache/getLogStores'); const getLogStores = require('~/cache/getLogStores');
const { isEnabled } = require('~/server/utils');
const { saveConvo } = require('~/models'); const { saveConvo } = require('~/models');
const addTitle = async (req, { text, response, client }) => { const addTitle = async (req, { text, response, client }) => {

View file

@ -1,7 +1,7 @@
const { isEnabled } = require('@librechat/api');
const { CacheKeys } = require('librechat-data-provider'); const { CacheKeys } = require('librechat-data-provider');
const { saveConvo } = require('~/models/Conversation'); const { saveConvo } = require('~/models/Conversation');
const getLogStores = require('~/cache/getLogStores'); const getLogStores = require('~/cache/getLogStores');
const { isEnabled } = require('~/server/utils');
const addTitle = async (req, { text, responseText, conversationId, client }) => { const addTitle = async (req, { text, responseText, conversationId, client }) => {
const { TITLE_CONVO = 'true' } = process.env ?? {}; const { TITLE_CONVO = 'true' } = process.env ?? {};

View file

@ -1,6 +1,6 @@
const { isEnabled } = require('@librechat/api');
const { CacheKeys } = require('librechat-data-provider'); const { CacheKeys } = require('librechat-data-provider');
const getLogStores = require('~/cache/getLogStores'); const getLogStores = require('~/cache/getLogStores');
const { isEnabled } = require('~/server/utils');
const { saveConvo } = require('~/models'); const { saveConvo } = require('~/models');
const addTitle = async (req, { text, response, client }) => { const addTitle = async (req, { text, response, client }) => {

View file

@ -3,7 +3,7 @@ const path = require('path');
const mime = require('mime'); const mime = require('mime');
const axios = require('axios'); const axios = require('axios');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
const { getAzureContainerClient } = require('./initialize'); const { getAzureContainerClient } = require('./initialize');
const defaultBasePath = 'images'; const defaultBasePath = 'images';

View file

@ -1,5 +1,5 @@
const { logger } = require('@librechat/data-schemas');
const { BlobServiceClient } = require('@azure/storage-blob'); const { BlobServiceClient } = require('@azure/storage-blob');
const { logger } = require('~/config');
let blobServiceClient = null; let blobServiceClient = null;
let azureWarningLogged = false; let azureWarningLogged = false;

View file

@ -1,6 +1,6 @@
const firebase = require('firebase/app'); const firebase = require('firebase/app');
const { getStorage } = require('firebase/storage'); const { getStorage } = require('firebase/storage');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
let i = 0; let i = 0;
let firebaseApp = null; let firebaseApp = null;

View file

@ -1,7 +1,7 @@
const fs = require('fs'); const fs = require('fs');
const { sleep } = require('@librechat/agents');
const { logger } = require('@librechat/data-schemas');
const { FilePurpose } = require('librechat-data-provider'); 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. * Uploads a file that can be used across various OpenAI services.

View file

@ -1,5 +1,6 @@
const fs = require('fs'); const fs = require('fs');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const { logger } = require('@librechat/data-schemas');
const { FileSources } = require('librechat-data-provider'); const { FileSources } = require('librechat-data-provider');
const { const {
PutObjectCommand, PutObjectCommand,
@ -9,7 +10,6 @@ const {
} = require('@aws-sdk/client-s3'); } = require('@aws-sdk/client-s3');
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
const { initializeS3 } = require('./initialize'); const { initializeS3 } = require('./initialize');
const { logger } = require('~/config');
const bucketName = process.env.AWS_BUCKET_NAME; const bucketName = process.env.AWS_BUCKET_NAME;
const defaultBasePath = 'images'; const defaultBasePath = 'images';

View file

@ -1,5 +1,5 @@
const { S3Client } = require('@aws-sdk/client-s3'); const { S3Client } = require('@aws-sdk/client-s3');
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
let s3 = null; let s3 = null;

View file

@ -1,9 +1,9 @@
const sharp = require('sharp'); const sharp = require('sharp');
const fs = require('fs').promises; const fs = require('fs').promises;
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const { logger } = require('@librechat/data-schemas');
const { EImageOutputType } = require('librechat-data-provider'); const { EImageOutputType } = require('librechat-data-provider');
const { resizeAndConvert } = require('./resize'); 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), * Uploads an avatar image for a user. This function can handle various types of input (URL, Buffer, or File object),

View file

@ -1,9 +1,9 @@
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const sharp = require('sharp'); const sharp = require('sharp');
const { logger } = require('@librechat/data-schemas');
const { getStrategyFunctions } = require('../strategies'); const { getStrategyFunctions } = require('../strategies');
const { resizeImageBuffer } = require('./resize'); const { resizeImageBuffer } = require('./resize');
const { logger } = require('~/config');
/** /**
* Converts an image file or buffer to target output type with specified resolution. * Converts an image file or buffer to target output type with specified resolution.

View file

@ -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 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 * Get Microsoft Graph API token using existing token exchange mechanism

View file

@ -1,5 +1,5 @@
const { logger } = require('@librechat/data-schemas');
const { ToolCallTypes } = require('librechat-data-provider'); const { ToolCallTypes } = require('librechat-data-provider');
const { logger } = require('~/config');
/** /**
* @typedef {import('openai').OpenAI} OpenAI * @typedef {import('openai').OpenAI} OpenAI

View file

@ -1,9 +1,9 @@
const { sleep } = require('@librechat/agents');
const { logger } = require('@librechat/data-schemas');
const { RunStatus, defaultOrderQuery, CacheKeys } = require('librechat-data-provider'); const { RunStatus, defaultOrderQuery, CacheKeys } = require('librechat-data-provider');
const getLogStores = require('~/cache/getLogStores'); const getLogStores = require('~/cache/getLogStores');
const { retrieveRun } = require('./methods'); const { retrieveRun } = require('./methods');
const { sleep } = require('~/server/utils');
const RunManager = require('./RunManager'); const RunManager = require('./RunManager');
const { logger } = require('~/config');
async function withTimeout(promise, timeoutMs, timeoutMessage) { async function withTimeout(promise, timeoutMs, timeoutMessage) {
let timeoutHandle; let timeoutHandle;

View file

@ -1,5 +1,6 @@
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
const { deleteNullOrEmptyConversations } = require('~/models/Conversation'); const { deleteNullOrEmptyConversations } = require('~/models/Conversation');
const cleanup = async () => { const cleanup = async () => {
try { try {
await deleteNullOrEmptyConversations(); await deleteNullOrEmptyConversations();

View file

@ -1,7 +1,7 @@
const { Tiktoken } = require('tiktoken/lite'); const { Tiktoken } = require('tiktoken/lite');
const { logger } = require('@librechat/data-schemas');
const p50k_base = require('tiktoken/encoders/p50k_base.json'); const p50k_base = require('tiktoken/encoders/p50k_base.json');
const cl100k_base = require('tiktoken/encoders/cl100k_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. * Counts the number of tokens in a given text using a specified encoding model.

View file

@ -125,34 +125,6 @@ function formatAction(action) {
return formattedAction; 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'. * Checks if the provided value is 'user_provided'.
* *
@ -207,7 +179,6 @@ function generateConfig(key, baseURL, endpoint) {
} }
module.exports = { module.exports = {
isEnabled,
handleText, handleText,
formatSteps, formatSteps,
escapeRegExp, escapeRegExp,

View file

@ -1,10 +1,10 @@
const { v4: uuidv4 } = require('uuid'); const { v4: uuidv4 } = require('uuid');
const { logger } = require('@librechat/data-schemas');
const { EModelEndpoint, Constants, ForkOptions } = require('librechat-data-provider'); const { EModelEndpoint, Constants, ForkOptions } = require('librechat-data-provider');
const { createImportBatchBuilder } = require('./importBatchBuilder'); const { createImportBatchBuilder } = require('./importBatchBuilder');
const BaseClient = require('~/app/clients/BaseClient'); const BaseClient = require('~/app/clients/BaseClient');
const { getConvo } = require('~/models/Conversation'); const { getConvo } = require('~/models/Conversation');
const { getMessages } = require('~/models/Message'); const { getMessages } = require('~/models/Message');
const logger = require('~/config/winston');
/** /**
* Helper function to clone messages with proper parent-child relationships and timestamps * Helper function to clone messages with proper parent-child relationships and timestamps

View file

@ -1,9 +1,9 @@
const { v4: uuidv4 } = require('uuid'); const { v4: uuidv4 } = require('uuid');
const { logger } = require('@librechat/data-schemas');
const { EModelEndpoint, Constants, openAISettings } = require('librechat-data-provider'); const { EModelEndpoint, Constants, openAISettings } = require('librechat-data-provider');
const { bulkIncrementTagCounts } = require('~/models/ConversationTag'); const { bulkIncrementTagCounts } = require('~/models/ConversationTag');
const { bulkSaveConvos } = require('~/models/Conversation'); const { bulkSaveConvos } = require('~/models/Conversation');
const { bulkSaveMessages } = require('~/models/Message'); const { bulkSaveMessages } = require('~/models/Message');
const { logger } = require('~/config');
/** /**
* Factory function for creating an instance of ImportBatchBuilder. * Factory function for creating an instance of ImportBatchBuilder.

View file

@ -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<void>} A promise that resolves after the specified delay.
*/
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
module.exports = { module.exports = {
sleep,
LB_QueueAsyncCall, LB_QueueAsyncCall,
}; };

View file

@ -1,7 +1,7 @@
const socialLogin = require('./socialLogin');
const { Strategy: AppleStrategy } = require('passport-apple');
const { logger } = require('~/config');
const jwt = require('jsonwebtoken'); 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 * Extract profile details from the decoded idToken

View file

@ -1,4 +1,4 @@
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
/** /**
* Extracts the base URL from the provided URL. * Extracts the base URL from the provided URL.

View file

@ -1,4 +1,4 @@
const { logger } = require('~/config'); const { logger } = require('@librechat/data-schemas');
function findContent(obj) { function findContent(obj) {
if (obj && typeof obj === 'object') { if (obj && typeof obj === 'object') {

View file

@ -26,7 +26,7 @@ services:
target: /app/.env target: /app/.env
- ./images:/app/client/public/images - ./images:/app/client/public/images
- ./uploads:/app/uploads - ./uploads:/app/uploads
- ./logs:/app/api/logs - ./logs:/app/logs
mongodb: mongodb:
container_name: chat-mongodb container_name: chat-mongodb
image: mongo image: mongo