From 12f4dbb8c5603e30cc9928bdcceeafa4922389d7 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Thu, 10 Apr 2025 15:37:23 -0400 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9A=A1=20feat:=20Self-hosted=20Artifacts?= =?UTF-8?q?=20Static=20Bundler=20URL=20(#6827)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * v0.7.791 * feat: configuration via `SANDPACK_STATIC_BUNDLER_URL` env var and update bundlerURL logic in Artifact components * fix: update minimum length requirement for auth fields from 10 to 1 character --- api/server/routes/config.js | 1 + client/src/components/Artifacts/ArtifactCodeEditor.tsx | 4 ++-- client/src/components/Artifacts/ArtifactPreview.tsx | 10 +++++++--- client/src/components/Plugins/Store/PluginAuthForm.tsx | 4 ++-- package-lock.json | 2 +- packages/data-provider/package.json | 2 +- packages/data-provider/src/config.ts | 1 + 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/api/server/routes/config.js b/api/server/routes/config.js index e1e8ba763..ebafb05c3 100644 --- a/api/server/routes/config.js +++ b/api/server/routes/config.js @@ -82,6 +82,7 @@ router.get('/', async function (req, res) { analyticsGtmId: process.env.ANALYTICS_GTM_ID, instanceProjectId: instanceProject._id.toString(), bundlerURL: process.env.SANDPACK_BUNDLER_URL, + staticBundlerURL: process.env.SANDPACK_STATIC_BUNDLER_URL, }; if (ldap) { diff --git a/client/src/components/Artifacts/ArtifactCodeEditor.tsx b/client/src/components/Artifacts/ArtifactCodeEditor.tsx index c0b62c291..ecec01cdb 100644 --- a/client/src/components/Artifacts/ArtifactCodeEditor.tsx +++ b/client/src/components/Artifacts/ArtifactCodeEditor.tsx @@ -132,9 +132,9 @@ export const ArtifactCodeEditor = memo(function ({ } return { ...sharedOptions, - bundlerURL: config.bundlerURL, + bundlerURL: template === 'static' ? config.staticBundlerURL : config.bundlerURL, }; - }, [config]); + }, [config, template]); if (Object.keys(files).length === 0) { return null; diff --git a/client/src/components/Artifacts/ArtifactPreview.tsx b/client/src/components/Artifacts/ArtifactPreview.tsx index d3d147929..fdf435c3b 100644 --- a/client/src/components/Artifacts/ArtifactPreview.tsx +++ b/client/src/components/Artifacts/ArtifactPreview.tsx @@ -46,11 +46,15 @@ export const ArtifactPreview = memo(function ({ if (!config) { return sharedOptions; } - return { + const _options: typeof sharedOptions = { ...sharedOptions, - bundlerURL: config.bundlerURL, + bundlerURL: template === 'static' ? config.staticBundlerURL : config.bundlerURL, }; - }, [config]); + + return _options; + }, [config, template]); + + console.log(options); if (Object.keys(artifactFiles).length === 0) { return null; diff --git a/client/src/components/Plugins/Store/PluginAuthForm.tsx b/client/src/components/Plugins/Store/PluginAuthForm.tsx index c2d181710..2275bbe96 100644 --- a/client/src/components/Plugins/Store/PluginAuthForm.tsx +++ b/client/src/components/Plugins/Store/PluginAuthForm.tsx @@ -59,8 +59,8 @@ function PluginAuthForm({ plugin, onSubmit, isEntityTool }: TPluginAuthFormProps {...register(authField, { required: `${config.label} is required.`, minLength: { - value: 10, - message: `${config.label} must be at least 10 characters long`, + value: 1, + message: `${config.label} must be at least 1 character long`, }, })} className="flex h-10 max-h-10 w-full resize-none rounded-md border border-gray-200 bg-transparent px-3 py-2 text-sm text-gray-700 shadow-[0_0_10px_rgba(0,0,0,0.05)] outline-none placeholder:text-gray-400 focus:border-gray-400 focus:bg-gray-50 focus:outline-none focus:ring-0 focus:ring-gray-400 focus:ring-opacity-0 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-500 dark:bg-gray-700 dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:focus:border-gray-400 focus:dark:bg-gray-600 dark:focus:outline-none dark:focus:ring-0 dark:focus:ring-gray-400 dark:focus:ring-offset-0" diff --git a/package-lock.json b/package-lock.json index a28245e65..ec692aaa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43309,7 +43309,7 @@ }, "packages/data-provider": { "name": "librechat-data-provider", - "version": "0.7.790", + "version": "0.7.791", "license": "ISC", "dependencies": { "axios": "^1.8.2", diff --git a/packages/data-provider/package.json b/packages/data-provider/package.json index 64f120503..6437be5f1 100644 --- a/packages/data-provider/package.json +++ b/packages/data-provider/package.json @@ -1,6 +1,6 @@ { "name": "librechat-data-provider", - "version": "0.7.790", + "version": "0.7.791", "description": "data services for librechat apps", "main": "dist/index.js", "module": "dist/index.es.js", diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index 6e6291952..bfb169408 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -541,6 +541,7 @@ export type TStartupConfig = { analyticsGtmId?: string; instanceProjectId: string; bundlerURL?: string; + staticBundlerURL?: string; }; export enum OCRStrategy { From 1e6b1b9554601179e612123435c9ae394367d5ce Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 11 Apr 2025 00:42:32 -0400 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=B3=20feat:=20Add=20Jemalloc=20and?= =?UTF-8?q?=20UV=20to=20Docker=20Builds=20(#6836)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add `uv` for extended MCP support in Dockerfiles * feat: Install jemalloc and set environment variable to use it --- Dockerfile | 12 ++++++++++-- Dockerfile.multi | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index d9113eb65..e16b18a5d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,15 @@ # Base node image FROM node:20-alpine AS node -RUN apk --no-cache add curl +# Install jemalloc +RUN apk add --no-cache jemalloc + +# Set environment variable to use jemalloc +ENV LD_PRELOAD=/usr/lib/libjemalloc.so.2 + +# Add `uv` for extended MCP support +COPY --from=ghcr.io/astral-sh/uv:0.6.13 /uv /uvx /bin/ +RUN uv --version RUN mkdir -p /app && chown node:node /app WORKDIR /app @@ -38,4 +46,4 @@ CMD ["npm", "run", "backend"] # WORKDIR /usr/share/nginx/html # COPY --from=node /app/client/dist /usr/share/nginx/html # COPY client/nginx.conf /etc/nginx/conf.d/default.conf -# ENTRYPOINT ["nginx", "-g", "daemon off;"] +# ENTRYPOINT ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/Dockerfile.multi b/Dockerfile.multi index 40721137b..594ead8b0 100644 --- a/Dockerfile.multi +++ b/Dockerfile.multi @@ -3,6 +3,10 @@ # Base for all builds FROM node:20-alpine AS base-min +# Install jemalloc +RUN apk add --no-cache jemalloc +# Set environment variable to use jemalloc +ENV LD_PRELOAD=/usr/lib/libjemalloc.so.2 WORKDIR /app RUN apk --no-cache add curl RUN npm config set fetch-retry-maxtimeout 600000 && \ @@ -50,6 +54,9 @@ RUN npm run build # API setup (including client dist) FROM base-min AS api-build +# Add `uv` for extended MCP support +COPY --from=ghcr.io/astral-sh/uv:0.6.13 /uv /uvx /bin/ +RUN uv --version WORKDIR /app # Install only production deps RUN npm ci --omit=dev