Skip to content

Commit

Permalink
refactor: Use librechat-data-provider app-wide 🔄 (danny-avila#1326)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
danny-avila authored Dec 11, 2023
1 parent d4c846b commit df1dfa7
Show file tree
Hide file tree
Showing 97 changed files with 1,830 additions and 1,342 deletions.
35 changes: 16 additions & 19 deletions Dockerfile.multi
Original file line number Diff line number Diff line change
@@ -1,36 +1,33 @@
# Build API, Client and Data Provider
FROM node:19-alpine AS base
FROM node:20-alpine AS base

# WORKDIR /app
# COPY config/loader.js ./config/
# RUN touch .env
# RUN npm install dotenv

WORKDIR /app/api
COPY api/package*.json ./
COPY api/ ./
RUN touch .env
# Build data-provider
FROM base AS data-provider-build
WORKDIR /app/packages/data-provider
COPY ./packages/data-provider ./
RUN npm install
RUN npm run build

# React client build
FROM base AS client-build
FROM data-provider-build AS client-build
WORKDIR /app/client
COPY ./client/ ./

WORKDIR /app/packages/data-provider
COPY ./packages/data-provider ./
RUN npm install
RUN npm run build
# Copy data-provider to client's node_modules
RUN mkdir -p /app/client/node_modules/librechat-data-provider/
RUN cp -R /app/packages/data-provider/* /app/client/node_modules/librechat-data-provider/

WORKDIR /app/client
RUN npm install
ENV NODE_OPTIONS="--max-old-space-size=2048"
RUN npm run build

# Node API setup
FROM base AS api-build
FROM data-provider-build AS api-build
WORKDIR /app/api
COPY api/package*.json ./
COPY api/ ./
# Copy data-provider to API's node_modules
RUN mkdir -p /app/api/node_modules/librechat-data-provider/
RUN cp -R /app/packages/data-provider/* /app/api/node_modules/librechat-data-provider/
RUN npm install
COPY --from=client-build /app/client/dist /app/client/dist
EXPOSE 3080
ENV HOST=0.0.0.0
Expand Down
2 changes: 1 addition & 1 deletion api/app/clients/AnthropicClient.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const Anthropic = require('@anthropic-ai/sdk');
const { encoding_for_model: encodingForModel, get_encoding: getEncoding } = require('tiktoken');
const { getResponseSender, EModelEndpoint } = require('~/server/services/Endpoints');
const { getResponseSender, EModelEndpoint } = require('librechat-data-provider');
const { getModelMaxTokens } = require('~/utils');
const BaseClient = require('./BaseClient');

Expand Down
6 changes: 1 addition & 5 deletions api/app/clients/GoogleClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ const { GoogleVertexAI } = require('langchain/llms/googlevertexai');
const { ChatGoogleVertexAI } = require('langchain/chat_models/googlevertexai');
const { AIMessage, HumanMessage, SystemMessage } = require('langchain/schema');
const { encoding_for_model: encodingForModel, get_encoding: getEncoding } = require('tiktoken');
const {
getResponseSender,
EModelEndpoint,
endpointSettings,
} = require('~/server/services/Endpoints');
const { getResponseSender, EModelEndpoint, endpointSettings } = require('librechat-data-provider');
const { getModelMaxTokens } = require('~/utils');
const { formatMessage } = require('./prompts');
const BaseClient = require('./BaseClient');
Expand Down
2 changes: 1 addition & 1 deletion api/app/clients/OpenAIClient.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const OpenAI = require('openai');
const { HttpsProxyAgent } = require('https-proxy-agent');
const { encoding_for_model: encodingForModel, get_encoding: getEncoding } = require('tiktoken');
const { getResponseSender, EModelEndpoint } = require('~/server/services/Endpoints');
const { getResponseSender, EModelEndpoint } = require('librechat-data-provider');
const { encodeAndFormat, validateVisionModel } = require('~/server/services/Files/images');
const { getModelMaxTokens, genAzureChatCompletion, extractBaseURL } = require('~/utils');
const { truncateText, formatMessage, CUT_OFF_PROMPT } = require('./prompts');
Expand Down
2 changes: 1 addition & 1 deletion api/app/clients/PluginsClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const { CallbackManager } = require('langchain/callbacks');
const { BufferMemory, ChatMessageHistory } = require('langchain/memory');
const { initializeCustomAgent, initializeFunctionsAgent } = require('./agents');
const { addImages, buildErrorInput, buildPromptPrefix } = require('./output_parsers');
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const { formatLangChainMessages } = require('./prompts');
const checkBalance = require('~/models/checkBalance');
const { SelfReflectionTool } = require('./tools');
Expand Down
2 changes: 1 addition & 1 deletion api/app/clients/callbacks/createStartHandler.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { promptTokensEstimate } = require('openai-chat-tokens');
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const { formatFromLangChain } = require('~/app/clients/prompts');
const checkBalance = require('~/models/checkBalance');
const { isEnabled } = require('~/server/utils');
Expand Down
1 change: 1 addition & 0 deletions api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"keyv": "^4.5.4",
"keyv-file": "^0.2.0",
"langchain": "^0.0.186",
"librechat-data-provider": "*",
"lodash": "^4.17.21",
"meilisearch": "^0.33.0",
"module-alias": "^2.2.3",
Expand Down
2 changes: 1 addition & 1 deletion api/server/controllers/AskController.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { sendMessage, createOnProgress } = require('~/server/utils');
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');
const { createAbortController, handleAbortError } = require('~/server/middleware');

const AskController = async (req, res, next, initializeClient) => {
Expand Down
2 changes: 1 addition & 1 deletion api/server/controllers/EditController.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { sendMessage, createOnProgress } = require('~/server/utils');
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');
const { createAbortController, handleAbortError } = require('~/server/middleware');

const EditController = async (req, res, next, initializeClient) => {
Expand Down
2 changes: 1 addition & 1 deletion api/server/middleware/buildEndpointOption.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const openAI = require('~/server/services/Endpoints/openAI');
const google = require('~/server/services/Endpoints/google');
const anthropic = require('~/server/services/Endpoints/anthropic');
const gptPlugins = require('~/server/services/Endpoints/gptPlugins');
const { parseConvo, EModelEndpoint } = require('~/server/services/Endpoints');
const { parseConvo, EModelEndpoint } = require('librechat-data-provider');

const buildFunction = {
[EModelEndpoint.openAI]: openAI.buildOptions,
Expand Down
2 changes: 1 addition & 1 deletion api/server/middleware/denyRequest.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const crypto = require('crypto');
const { saveMessage } = require('~/models');
const { sendMessage, sendError } = require('~/server/utils');
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');

/**
* Denies a request by sending an error message and optionally saves the user's message.
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/ask/gptPlugins.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const express = require('express');
const router = express.Router();
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');
const { validateTools } = require('~/app');
const { addTitle } = require('~/server/services/Endpoints/openAI');
const { initializeClient } = require('~/server/services/Endpoints/gptPlugins');
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/ask/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const anthropic = require('./anthropic');
const gptPlugins = require('./gptPlugins');
const askChatGPTBrowser = require('./askChatGPTBrowser');
const { isEnabled } = require('~/server/utils');
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const {
uaParser,
checkBan,
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/ask/openAI.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
const { sendMessage, createOnProgress } = require('~/server/utils');
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');
const { addTitle, initializeClient } = require('~/server/services/Endpoints/openAI');
const {
handleAbort,
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/edit/gptPlugins.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
const { validateTools } = require('~/app');
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');
const { initializeClient } = require('~/server/services/Endpoints/gptPlugins');
const { sendMessage, createOnProgress, formatSteps, formatAction } = require('~/server/utils');
const {
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/edit/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const google = require('./google');
const anthropic = require('./anthropic');
const gptPlugins = require('./gptPlugins');
const { isEnabled } = require('~/server/utils');
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const {
checkBan,
uaParser,
Expand Down
2 changes: 1 addition & 1 deletion api/server/routes/edit/openAI.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const express = require('express');
const router = express.Router();
const { getResponseSender } = require('~/server/services/Endpoints');
const { getResponseSender } = require('librechat-data-provider');
const { initializeClient } = require('~/server/services/Endpoints/openAI');
const { saveMessage, getConvoTitle, getConvo } = require('~/models');
const { sendMessage, createOnProgress } = require('~/server/utils');
Expand Down
2 changes: 1 addition & 1 deletion api/server/services/Config/EndpointService.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');

const {
OPENAI_API_KEY: openAIApiKey,
Expand Down
2 changes: 1 addition & 1 deletion api/server/services/Config/loadDefaultEConfig.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const loadAsyncEndpoints = require('./loadAsyncEndpoints');
const { config } = require('./EndpointService');

Expand Down
2 changes: 1 addition & 1 deletion api/server/services/Config/loadDefaultModels.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const {
getChatGPTBrowserModels,
getAnthropicModels,
} = require('~/server/services/ModelService');
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const { useAzurePlugins } = require('~/server/services/Config/EndpointService').config;

const fitlerAssistantModels = (str) => {
Expand Down
2 changes: 1 addition & 1 deletion api/server/services/Endpoints/google/initializeClient.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { GoogleClient } = require('~/app');
const { EModelEndpoint } = require('~/server/services/Endpoints');
const { EModelEndpoint } = require('librechat-data-provider');
const { getUserKey, checkUserKeyExpiry } = require('~/server/services/UserService');

const initializeClient = async ({ req, res, endpointOption }) => {
Expand Down
5 changes: 0 additions & 5 deletions api/server/services/Endpoints/index.js

This file was deleted.

Loading

0 comments on commit df1dfa7

Please sign in to comment.