From dbe4dd96b4d4d23cf4db5c6063446a840aa40260 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Wed, 1 Oct 2025 23:30:47 -0400 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A7=B9=20chore:=20Cleanup=20Logger=20?= =?UTF-8?q?and=20Utility=20Imports=20(#9935)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🧹 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 --- api/app/clients/AnthropicClient.js | 5 ++-- api/app/clients/GoogleClient.js | 4 +-- api/app/clients/OpenAIClient.js | 8 ++--- api/app/clients/TextStream.js | 2 +- .../agents/CustomAgent/outputParser.js | 2 +- api/app/clients/chains/runTitleChain.js | 2 +- api/app/clients/memory/summaryBuffer.js | 2 +- api/app/clients/output_parsers/addImages.js | 2 +- .../clients/tools/structured/AzureAISearch.js | 4 +-- api/app/clients/tools/structured/FluxAPI.js | 4 +-- .../tools/structured/StableDiffusion.js | 2 +- .../tools/structured/TraversaalSearch.js | 5 ++-- api/app/clients/tools/structured/Wolfram.js | 4 +-- .../clients/tools/util/handleOpenAIErrors.js | 2 +- api/cache/clearPendingReq.js | 2 +- api/cache/keyvMongo.js | 2 +- api/cache/logViolation.js | 2 +- api/models/Categories.js | 2 +- api/models/spendTokens.js | 2 +- api/server/controllers/ModelController.js | 2 +- .../controllers/auth/LoginController.js | 2 +- .../controllers/auth/LogoutController.js | 6 ++-- api/server/middleware/canDeleteAccount.js | 4 +-- api/server/middleware/checkBan.js | 3 +- .../middleware/checkPeoplePickerAccess.js | 2 +- .../checkPeoplePickerAccess.spec.js | 5 ++-- api/server/middleware/concurrentLimiter.js | 2 +- api/server/middleware/logHeaders.js | 2 +- api/server/middleware/moderateText.js | 4 +-- api/server/middleware/optionalJwtAuth.js | 2 +- api/server/middleware/requireJwtAuth.js | 4 +-- api/server/middleware/requireLocalAuth.js | 2 +- .../middleware/validatePasswordReset.js | 4 +-- api/server/middleware/validateRegistration.js | 2 +- api/server/routes/__tests__/ldap.spec.js | 9 ++++-- api/server/routes/agents/index.js | 2 +- api/server/routes/edit/index.js | 24 +++++++-------- api/server/routes/files/files.js | 2 +- api/server/routes/files/speech/tts.js | 2 +- api/server/routes/presets.js | 4 +-- api/server/routes/search.js | 2 +- api/server/routes/static.js | 2 +- api/server/routes/tokenizer.js | 5 ++-- api/server/services/Config/ldap.js | 2 +- .../services/Endpoints/anthropic/title.js | 2 +- .../services/Endpoints/assistants/title.js | 2 +- api/server/services/Endpoints/openAI/title.js | 2 +- api/server/services/Files/Azure/crud.js | 2 +- api/server/services/Files/Azure/initialize.js | 2 +- .../services/Files/Firebase/initialize.js | 2 +- api/server/services/Files/OpenAI/crud.js | 4 +-- api/server/services/Files/S3/crud.js | 2 +- api/server/services/Files/S3/initialize.js | 2 +- api/server/services/Files/images/avatar.js | 2 +- api/server/services/Files/images/convert.js | 2 +- api/server/services/GraphTokenService.js | 8 ++--- api/server/services/Runs/RunManager.js | 2 +- api/server/services/Runs/handle.js | 4 +-- api/server/services/cleanup.js | 3 +- api/server/utils/countTokens.js | 2 +- api/server/utils/handleText.js | 29 ------------------- api/server/utils/import/fork.js | 2 +- api/server/utils/import/importBatchBuilder.js | 2 +- api/server/utils/queue.js | 11 ------- api/strategies/appleStrategy.js | 6 ++-- api/utils/deriveBaseURL.js | 2 +- api/utils/findMessageContent.js | 2 +- docker-compose.yml | 2 +- 68 files changed, 111 insertions(+), 146 deletions(-) diff --git a/api/app/clients/AnthropicClient.js b/api/app/clients/AnthropicClient.js index 834877bb4..43e546a0a 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 715f48ff5..9322778e7 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 2b254036c..17c4891dc 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 01809e87f..ea3d8980e 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 9d849519f..f75200e69 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 a020ffb8e..5c3d9738e 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 0555fc214..84ff34d15 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 7bef60259..4b5019279 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 e25da9442..55af3cdff 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 80f977220..9fa08a034 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 b08e42e7c..05687923e 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 e8ceeda13..d2ccc35c7 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 1b426298c..1f7fe6b1b 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 490f3882a..b3a7c2bfd 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 54db8e969..b4329b1f0 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 1606e98eb..efcce7675 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 16dc2e4ea..1ff65c6cc 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 5da1f4b2d..34bd2d8ed 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 65fadd789..cfd983f6b 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 7430655df..805d9eef2 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 226b5605c..930eee86b 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 1d18e4a94..02d3d0302 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 5f2479fb5..a91349528 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 ad4e4c86e..9f735592f 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 3f462362a..0e604272d 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 ddbf6f86a..52bf0e672 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 79de88609..96885e2fd 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 26ca04da3..398542747 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 ff1a9de85..775afbafb 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 953bc5402..2f59fdda4 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 c00b37ee0..ed83c4773 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 a71bd6c5b..e82388f29 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 7f5616722..b4acd66bb 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 07911bd9c..79b5caca2 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 6e0a95bfe..bc7efa785 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 a1cf5f751..b5e249b05 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 92a1e63f6..2ebc57a13 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 5d6e72ff2..5d9761fc6 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 1ee540874..ab1de205b 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 19214a3a7..b8be1b8f3 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 5c7846aee..2cd2fc353 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 952ca82fb..12dfc0ed4 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 e12a86bde..62eb31b70 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 96386d042..09091b78a 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 0f9a5e97d..cac39fa2b 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 605d17413..223d3badc 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 3b9e9c82b..f8624ef65 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 cb52de831..3e091d103 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 56df24d04..8c63b4812 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 67d923c44..efe66be12 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 9afe217f6..674c493a3 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 78220ed30..7b31a4d24 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 2daec2523..59a2568b4 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 8e81dea26..9ce11c04e 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 446de5ba1..d5f5c2893 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 d70e7c01c..d5cd6a94f 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 39e577fb5..7a3ec808d 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 abe933f92..c515fabfe 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 814c0ecc9..7d3dfdec1 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 641e38610..504de26a5 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 91c2ff25e..15c2db3fc 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 5aa2599fe..c4ce8cb5d 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 d20f20093..5e499043d 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 c32adaeff..73d819205 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 4dbac2e36..fbba2a1f4 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 c377ddf87..982c2c8c2 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 6ee516634..6aeed1a39 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 dfd11af09..9a3e4bbd5 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 From 341435fb258c0458e6640871b4f4fb5fe0876041 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 23:31:23 -0400 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=8C=8D=20i18n:=20Update=20translation?= =?UTF-8?q?.json=20with=20latest=20translations=20(#9932)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- client/src/locales/de/translation.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/src/locales/de/translation.json b/client/src/locales/de/translation.json index 24d431c86..2aeada60b 100644 --- a/client/src/locales/de/translation.json +++ b/client/src/locales/de/translation.json @@ -60,6 +60,7 @@ "com_agents_error_timeout_title": "Verbindungs-Timeout", "com_agents_error_title": "Es ist ein Fehler aufgetreten", "com_agents_file_context_disabled": "Der Agent muss vor dem Hochladen von Dateien für den Datei-Kontext erstellt werden.", + "com_agents_file_context_label": "Dateikontext", "com_agents_file_search_disabled": "Der Agent muss erstellt werden, bevor Dateien für die Dateisuche hochgeladen werden können.", "com_agents_file_search_info": "Wenn aktiviert, wird der Agent über die unten aufgelisteten exakten Dateinamen informiert und kann dadurch relevante Informationen aus diesen Dateien abrufen", "com_agents_grid_announcement": "Zeige {{count}} Agenten in der Kategorie {{category}}", @@ -845,7 +846,7 @@ "com_ui_download_error": "Fehler beim Herunterladen der Datei. Die Datei wurde möglicherweise gelöscht.", "com_ui_drag_drop": "Ziehe eine beliebige Datei hierher, um sie zur Unterhaltung hinzuzufügen.", "com_ui_dropdown_variables": "Dropdown-Variablen:", - "com_ui_dropdown_variables_info": "Erstelle benutzerdefinierte Dropdown-Menüs für deine Prompts:: `{{variable_name:option1|option2|option3}}`", + "com_ui_dropdown_variables_info": "Erstelle benutzerdefinierte Dropdown-Menüs für deine Prompts: `{{variable_name:option1|option2|option3}}`", "com_ui_duplicate": "Duplizieren", "com_ui_duplication_error": "Beim Duplizieren der Konversation ist ein Fehler aufgetreten", "com_ui_duplication_processing": "Konversation wird dupliziert...", @@ -1038,6 +1039,7 @@ "com_ui_oauth_error_missing_code": "Autorisierungscode fehlt. Bitte versuchen Sie es erneut.", "com_ui_oauth_error_missing_state": "Statusparameter fehlt. Bitte versuchen Sie es erneut.", "com_ui_oauth_error_title": "Authentifizierung fehlgeschlagen", + "com_ui_oauth_revoke": "Widerrufen", "com_ui_oauth_success_description": "Ihre Authentifizierung war erfolgreich. Dieses Fenster schliesst sich in", "com_ui_oauth_success_title": "Authentifizierung erfolgreich", "com_ui_of": "von",