Skip to content

Commit df1dfa7

Browse files
authored
refactor: Use librechat-data-provider app-wide 🔄 (danny-avila#1326)
* chore: bump vite, vitejs/plugin-react, mark client package as esm, move react-query as a peer dep in data-provider * chore: import changes due to new data-provider export strategy, also fix type imports where applicable * chore: export react-query services as separate to avoid react dependencies in /api/ * chore: suppress sourcemap warnings and polyfill node:path which is used by filenamify TODO: replace filenamify with an alternative and REMOVE polyfill * chore: /api/ changes to support `librechat-data-provider` * refactor: rewrite Dockerfile.multi in light of /api/ changes to support `librechat-data-provider` * chore: remove volume mapping to node_modules directories in default compose file * chore: remove schemas from /api/ as is no longer needed with use of `librechat-data-provider` * fix(ci): jest `librechat-data-provider/react-query` module resolution
1 parent d4c846b commit df1dfa7

File tree

97 files changed

+1830
-1342
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+1830
-1342
lines changed

Dockerfile.multi

+16-19
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,33 @@
11
# Build API, Client and Data Provider
2-
FROM node:19-alpine AS base
2+
FROM node:20-alpine AS base
33

4-
# WORKDIR /app
5-
# COPY config/loader.js ./config/
6-
# RUN touch .env
7-
# RUN npm install dotenv
8-
9-
WORKDIR /app/api
10-
COPY api/package*.json ./
11-
COPY api/ ./
12-
RUN touch .env
4+
# Build data-provider
5+
FROM base AS data-provider-build
6+
WORKDIR /app/packages/data-provider
7+
COPY ./packages/data-provider ./
138
RUN npm install
9+
RUN npm run build
1410

1511
# React client build
16-
FROM base AS client-build
12+
FROM data-provider-build AS client-build
1713
WORKDIR /app/client
1814
COPY ./client/ ./
19-
20-
WORKDIR /app/packages/data-provider
21-
COPY ./packages/data-provider ./
22-
RUN npm install
23-
RUN npm run build
15+
# Copy data-provider to client's node_modules
2416
RUN mkdir -p /app/client/node_modules/librechat-data-provider/
2517
RUN cp -R /app/packages/data-provider/* /app/client/node_modules/librechat-data-provider/
26-
27-
WORKDIR /app/client
2818
RUN npm install
2919
ENV NODE_OPTIONS="--max-old-space-size=2048"
3020
RUN npm run build
3121

3222
# Node API setup
33-
FROM base AS api-build
23+
FROM data-provider-build AS api-build
24+
WORKDIR /app/api
25+
COPY api/package*.json ./
26+
COPY api/ ./
27+
# Copy data-provider to API's node_modules
28+
RUN mkdir -p /app/api/node_modules/librechat-data-provider/
29+
RUN cp -R /app/packages/data-provider/* /app/api/node_modules/librechat-data-provider/
30+
RUN npm install
3431
COPY --from=client-build /app/client/dist /app/client/dist
3532
EXPOSE 3080
3633
ENV HOST=0.0.0.0

api/app/clients/AnthropicClient.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const Anthropic = require('@anthropic-ai/sdk');
22
const { encoding_for_model: encodingForModel, get_encoding: getEncoding } = require('tiktoken');
3-
const { getResponseSender, EModelEndpoint } = require('~/server/services/Endpoints');
3+
const { getResponseSender, EModelEndpoint } = require('librechat-data-provider');
44
const { getModelMaxTokens } = require('~/utils');
55
const BaseClient = require('./BaseClient');
66

api/app/clients/GoogleClient.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@ const { GoogleVertexAI } = require('langchain/llms/googlevertexai');
44
const { ChatGoogleVertexAI } = require('langchain/chat_models/googlevertexai');
55
const { AIMessage, HumanMessage, SystemMessage } = require('langchain/schema');
66
const { encoding_for_model: encodingForModel, get_encoding: getEncoding } = require('tiktoken');
7-
const {
8-
getResponseSender,
9-
EModelEndpoint,
10-
endpointSettings,
11-
} = require('~/server/services/Endpoints');
7+
const { getResponseSender, EModelEndpoint, endpointSettings } = require('librechat-data-provider');
128
const { getModelMaxTokens } = require('~/utils');
139
const { formatMessage } = require('./prompts');
1410
const BaseClient = require('./BaseClient');

api/app/clients/OpenAIClient.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const OpenAI = require('openai');
22
const { HttpsProxyAgent } = require('https-proxy-agent');
33
const { encoding_for_model: encodingForModel, get_encoding: getEncoding } = require('tiktoken');
4-
const { getResponseSender, EModelEndpoint } = require('~/server/services/Endpoints');
4+
const { getResponseSender, EModelEndpoint } = require('librechat-data-provider');
55
const { encodeAndFormat, validateVisionModel } = require('~/server/services/Files/images');
66
const { getModelMaxTokens, genAzureChatCompletion, extractBaseURL } = require('~/utils');
77
const { truncateText, formatMessage, CUT_OFF_PROMPT } = require('./prompts');

api/app/clients/PluginsClient.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { CallbackManager } = require('langchain/callbacks');
33
const { BufferMemory, ChatMessageHistory } = require('langchain/memory');
44
const { initializeCustomAgent, initializeFunctionsAgent } = require('./agents');
55
const { addImages, buildErrorInput, buildPromptPrefix } = require('./output_parsers');
6-
const { EModelEndpoint } = require('~/server/services/Endpoints');
6+
const { EModelEndpoint } = require('librechat-data-provider');
77
const { formatLangChainMessages } = require('./prompts');
88
const checkBalance = require('~/models/checkBalance');
99
const { SelfReflectionTool } = require('./tools');

api/app/clients/callbacks/createStartHandler.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const { promptTokensEstimate } = require('openai-chat-tokens');
2-
const { EModelEndpoint } = require('~/server/services/Endpoints');
2+
const { EModelEndpoint } = require('librechat-data-provider');
33
const { formatFromLangChain } = require('~/app/clients/prompts');
44
const checkBalance = require('~/models/checkBalance');
55
const { isEnabled } = require('~/server/utils');

api/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"keyv": "^4.5.4",
5353
"keyv-file": "^0.2.0",
5454
"langchain": "^0.0.186",
55+
"librechat-data-provider": "*",
5556
"lodash": "^4.17.21",
5657
"meilisearch": "^0.33.0",
5758
"module-alias": "^2.2.3",

api/server/controllers/AskController.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { sendMessage, createOnProgress } = require('~/server/utils');
22
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
3-
const { getResponseSender } = require('~/server/services/Endpoints');
3+
const { getResponseSender } = require('librechat-data-provider');
44
const { createAbortController, handleAbortError } = require('~/server/middleware');
55

66
const AskController = async (req, res, next, initializeClient) => {

api/server/controllers/EditController.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { sendMessage, createOnProgress } = require('~/server/utils');
22
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
3-
const { getResponseSender } = require('~/server/services/Endpoints');
3+
const { getResponseSender } = require('librechat-data-provider');
44
const { createAbortController, handleAbortError } = require('~/server/middleware');
55

66
const EditController = async (req, res, next, initializeClient) => {

api/server/middleware/buildEndpointOption.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const openAI = require('~/server/services/Endpoints/openAI');
33
const google = require('~/server/services/Endpoints/google');
44
const anthropic = require('~/server/services/Endpoints/anthropic');
55
const gptPlugins = require('~/server/services/Endpoints/gptPlugins');
6-
const { parseConvo, EModelEndpoint } = require('~/server/services/Endpoints');
6+
const { parseConvo, EModelEndpoint } = require('librechat-data-provider');
77

88
const buildFunction = {
99
[EModelEndpoint.openAI]: openAI.buildOptions,

api/server/middleware/denyRequest.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const crypto = require('crypto');
22
const { saveMessage } = require('~/models');
33
const { sendMessage, sendError } = require('~/server/utils');
4-
const { getResponseSender } = require('~/server/services/Endpoints');
4+
const { getResponseSender } = require('librechat-data-provider');
55

66
/**
77
* Denies a request by sending an error message and optionally saves the user's message.

api/server/routes/ask/gptPlugins.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const express = require('express');
22
const router = express.Router();
3-
const { getResponseSender } = require('~/server/services/Endpoints');
3+
const { getResponseSender } = require('librechat-data-provider');
44
const { validateTools } = require('~/app');
55
const { addTitle } = require('~/server/services/Endpoints/openAI');
66
const { initializeClient } = require('~/server/services/Endpoints/gptPlugins');

api/server/routes/ask/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const anthropic = require('./anthropic');
66
const gptPlugins = require('./gptPlugins');
77
const askChatGPTBrowser = require('./askChatGPTBrowser');
88
const { isEnabled } = require('~/server/utils');
9-
const { EModelEndpoint } = require('~/server/services/Endpoints');
9+
const { EModelEndpoint } = require('librechat-data-provider');
1010
const {
1111
uaParser,
1212
checkBan,

api/server/routes/ask/openAI.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const express = require('express');
22
const router = express.Router();
33
const { sendMessage, createOnProgress } = require('~/server/utils');
44
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
5-
const { getResponseSender } = require('~/server/services/Endpoints');
5+
const { getResponseSender } = require('librechat-data-provider');
66
const { addTitle, initializeClient } = require('~/server/services/Endpoints/openAI');
77
const {
88
handleAbort,

api/server/routes/edit/gptPlugins.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const express = require('express');
22
const router = express.Router();
33
const { validateTools } = require('~/app');
44
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
5-
const { getResponseSender } = require('~/server/services/Endpoints');
5+
const { getResponseSender } = require('librechat-data-provider');
66
const { initializeClient } = require('~/server/services/Endpoints/gptPlugins');
77
const { sendMessage, createOnProgress, formatSteps, formatAction } = require('~/server/utils');
88
const {

api/server/routes/edit/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const google = require('./google');
44
const anthropic = require('./anthropic');
55
const gptPlugins = require('./gptPlugins');
66
const { isEnabled } = require('~/server/utils');
7-
const { EModelEndpoint } = require('~/server/services/Endpoints');
7+
const { EModelEndpoint } = require('librechat-data-provider');
88
const {
99
checkBan,
1010
uaParser,

api/server/routes/edit/openAI.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const express = require('express');
22
const router = express.Router();
3-
const { getResponseSender } = require('~/server/services/Endpoints');
3+
const { getResponseSender } = require('librechat-data-provider');
44
const { initializeClient } = require('~/server/services/Endpoints/openAI');
55
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
66
const { sendMessage, createOnProgress } = require('~/server/utils');

api/server/services/Config/EndpointService.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { EModelEndpoint } = require('~/server/services/Endpoints');
1+
const { EModelEndpoint } = require('librechat-data-provider');
22

33
const {
44
OPENAI_API_KEY: openAIApiKey,

api/server/services/Config/loadDefaultEConfig.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { EModelEndpoint } = require('~/server/services/Endpoints');
1+
const { EModelEndpoint } = require('librechat-data-provider');
22
const loadAsyncEndpoints = require('./loadAsyncEndpoints');
33
const { config } = require('./EndpointService');
44

api/server/services/Config/loadDefaultModels.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const {
33
getChatGPTBrowserModels,
44
getAnthropicModels,
55
} = require('~/server/services/ModelService');
6-
const { EModelEndpoint } = require('~/server/services/Endpoints');
6+
const { EModelEndpoint } = require('librechat-data-provider');
77
const { useAzurePlugins } = require('~/server/services/Config/EndpointService').config;
88

99
const fitlerAssistantModels = (str) => {

api/server/services/Endpoints/google/initializeClient.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const { GoogleClient } = require('~/app');
2-
const { EModelEndpoint } = require('~/server/services/Endpoints');
2+
const { EModelEndpoint } = require('librechat-data-provider');
33
const { getUserKey, checkUserKeyExpiry } = require('~/server/services/UserService');
44

55
const initializeClient = async ({ req, res, endpointOption }) => {

api/server/services/Endpoints/index.js

-5
This file was deleted.

0 commit comments

Comments
 (0)