diff --git a/.dockerignore b/.dockerignore index fcfafb0e7..cca33a81b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,7 +4,6 @@ **/server/storage/*.db **/server/storage/lancedb **/collector/hotdir/** -**/collector/v-env/** **/collector/outputs/** **/node_modules/ **/dist/ @@ -13,6 +12,7 @@ **/.env **/.env.* **/bundleinspector.html -!docker/.env.example -!frontend/.env.production **/tmp/** +**/.log +!docker/.env.example +!frontend/.env.production \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index e531e4c87..7f03318c1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -27,7 +27,9 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get install -yq --no-install-recommends nodejs && \ curl -LO https://github.com/yarnpkg/yarn/releases/download/v1.22.19/yarn_1.22.19_all.deb \ && dpkg -i yarn_1.22.19_all.deb \ - && rm yarn_1.22.19_all.deb + && rm yarn_1.22.19_all.deb && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* # Create a group and user with specific UID and GID RUN groupadd -g "$ARG_GID" anythingllm && \ @@ -85,7 +87,9 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get install -yq --no-install-recommends nodejs && \ curl -LO https://github.com/yarnpkg/yarn/releases/download/v1.22.19/yarn_1.22.19_all.deb \ && dpkg -i yarn_1.22.19_all.deb \ - && rm yarn_1.22.19_all.deb + && rm yarn_1.22.19_all.deb && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* # Create a group and user with specific UID and GID RUN groupadd -g "$ARG_GID" anythingllm && \ @@ -112,56 +116,58 @@ RUN echo "Running common build flow of AnythingLLM image for all architectures" USER anythingllm WORKDIR /app -# Install frontend dependencies -FROM build AS frontend-deps - -COPY ./frontend/package.json ./frontend/yarn.lock ./frontend/ +# Install & Build frontend layer +FROM build AS frontend-build +COPY --chown=anythingllm:anythingllm ./frontend /app/frontend/ WORKDIR /app/frontend RUN yarn install --network-timeout 100000 && yarn cache clean +RUN yarn build && \ + cp -r dist /tmp/frontend-build && \ + rm -rf * && \ + cp -r /tmp/frontend-build dist && \ + rm -rf /tmp/frontend-build WORKDIR /app -# Install server dependencies -FROM build AS server-deps -COPY ./server/package.json ./server/yarn.lock ./server/ +# Install server layer & build node-llama-cpp +FROM build AS server-build +COPY ./server /app/server/ WORKDIR /app/server RUN yarn install --production --network-timeout 100000 && yarn cache clean WORKDIR /app # Compile Llama.cpp bindings for node-llama-cpp for this operating system. +# Creates appropriate bindings for the OS USER root WORKDIR /app/server RUN npx --no node-llama-cpp download WORKDIR /app USER anythingllm -# Build the frontend -FROM frontend-deps AS build-stage -COPY ./frontend/ ./frontend/ -WORKDIR /app/frontend -RUN yarn build && yarn cache clean && rm -rf node_modules -WORKDIR /app - -# Setup the server -FROM server-deps AS production-stage -COPY --chown=anythingllm:anythingllm ./server/ ./server/ - -# Copy built static frontend files to the server public directory -COPY --chown=anythingllm:anythingllm --from=build-stage /app/frontend/dist ./server/public - -# Copy the collector -COPY --chown=anythingllm:anythingllm ./collector/ ./collector/ - -# Install collector dependencies +# Build collector deps (this also downloads proper chrome for collector in /app/.cache so that needs to be +# transferred properly in prod-build stage. +FROM build AS collector-build +COPY ./collector /app/collector WORKDIR /app/collector ENV PUPPETEER_DOWNLOAD_BASE_URL=https://storage.googleapis.com/chrome-for-testing-public RUN yarn install --production --network-timeout 100000 && yarn cache clean - -# Migrate and Run Prisma against known schema -WORKDIR /app/server -RUN npx prisma generate --schema=./prisma/schema.prisma && \ - npx prisma migrate deploy --schema=./prisma/schema.prisma WORKDIR /app +FROM build AS production-build +WORKDIR /app +# Copy the server +COPY --chown=anythingllm:anythingllm --from=server-build /app/server/ /app/server/ +# Copy built static frontend files to the server public directory +COPY --chown=anythingllm:anythingllm --from=frontend-build /app/frontend/dist /app/server/public +# Copy the collector +COPY --chown=anythingllm:anythingllm --from=collector-build /app/collector/ /app/collector/ +COPY --chown=anythingllm:anythingllm --from=collector-build /app/.cache/puppeteer /app/.cache/puppeteer + +# No longer needed? (deprecated) +# WORKDIR /app/server +# RUN npx prisma generate --schema=./prisma/schema.prisma && \ +# npx prisma migrate deploy --schema=./prisma/schema.prisma +# WORKDIR /app + # Setup the environment ENV NODE_ENV=production ENV ANYTHING_LLM_RUNTIME=docker @@ -174,4 +180,5 @@ HEALTHCHECK --interval=1m --timeout=10s --start-period=1m \ CMD /bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1 # Run the server +# CMD ["sh", "-c", "tail -f /dev/null"] # For development: keep container open ENTRYPOINT ["/bin/bash", "/usr/local/bin/docker-entrypoint.sh"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 313e4175b..b5782ee71 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - name: anythingllm networks: @@ -8,8 +6,7 @@ networks: services: anything-llm: - container_name: anything-llm - image: anything-llm:latest + container_name: anythingllm build: context: ../. dockerfile: ./docker/Dockerfile diff --git a/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx b/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx index a3c50cbab..da052b643 100644 --- a/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx +++ b/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx @@ -168,8 +168,8 @@ export default function ActiveWorkspaces() { isInWorkspaceSettings && workspace.slug === slug ? "#46C8FF" : gearHover[workspace.id] - ? "#FFFFFF" - : "#A7A8A9" + ? "#FFFFFF" + : "#A7A8A9" } weight="bold" className="h-[20px] w-[20px]" diff --git a/frontend/src/pages/Admin/ExperimentalFeatures/Features/LiveSync/toggle.jsx b/frontend/src/pages/Admin/ExperimentalFeatures/Features/LiveSync/toggle.jsx index 69a758d51..b8f30ad9e 100644 --- a/frontend/src/pages/Admin/ExperimentalFeatures/Features/LiveSync/toggle.jsx +++ b/frontend/src/pages/Admin/ExperimentalFeatures/Features/LiveSync/toggle.jsx @@ -9,9 +9,8 @@ export default function LiveSyncToggle({ enabled = false, onToggle }) { const [status, setStatus] = useState(enabled); async function toggleFeatureFlag() { - const updated = await System.experimentalFeatures.liveSync.toggleFeature( - !status - ); + const updated = + await System.experimentalFeatures.liveSync.toggleFeature(!status); if (!updated) { showToast("Failed to update status of feature.", "error", { clear: true, diff --git a/server/utils/AiProviders/perplexity/models.js b/server/utils/AiProviders/perplexity/models.js index 1990c4e70..e35068d4c 100644 --- a/server/utils/AiProviders/perplexity/models.js +++ b/server/utils/AiProviders/perplexity/models.js @@ -1,23 +1,23 @@ const MODELS = { - "sonar-small-chat": { - id: "sonar-small-chat", - name: "sonar-small-chat", - maxLength: 16384, + "llama-3-sonar-small-32k-online\\*": { + id: "llama-3-sonar-small-32k-online\\*", + name: "llama-3-sonar-small-32k-online\\*", + maxLength: 28000, }, - "sonar-small-online": { - id: "sonar-small-online", - name: "sonar-small-online", - maxLength: 12000, + "llama-3-sonar-small-32k-chat": { + id: "llama-3-sonar-small-32k-chat", + name: "llama-3-sonar-small-32k-chat", + maxLength: 32768, }, - "sonar-medium-chat": { - id: "sonar-medium-chat", - name: "sonar-medium-chat", - maxLength: 16384, + "llama-3-sonar-large-32k-online\\*": { + id: "llama-3-sonar-large-32k-online\\*", + name: "llama-3-sonar-large-32k-online\\*", + maxLength: 28000, }, - "sonar-medium-online": { - id: "sonar-medium-online", - name: "sonar-medium-online", - maxLength: 12000, + "llama-3-sonar-large-32k-chat": { + id: "llama-3-sonar-large-32k-chat", + name: "llama-3-sonar-large-32k-chat", + maxLength: 32768, }, "llama-3-8b-instruct": { id: "llama-3-8b-instruct", @@ -29,26 +29,11 @@ const MODELS = { name: "llama-3-70b-instruct", maxLength: 8192, }, - "codellama-70b-instruct": { - id: "codellama-70b-instruct", - name: "codellama-70b-instruct", - maxLength: 16384, - }, - "mistral-7b-instruct": { - id: "mistral-7b-instruct", - name: "mistral-7b-instruct", - maxLength: 16384, - }, "mixtral-8x7b-instruct": { id: "mixtral-8x7b-instruct", name: "mixtral-8x7b-instruct", maxLength: 16384, }, - "mixtral-8x22b-instruct": { - id: "mixtral-8x22b-instruct", - name: "mixtral-8x22b-instruct", - maxLength: 16384, - }, }; module.exports.MODELS = MODELS; diff --git a/server/utils/AiProviders/perplexity/scripts/chat_models.txt b/server/utils/AiProviders/perplexity/scripts/chat_models.txt index 2a620525b..e02af2551 100644 --- a/server/utils/AiProviders/perplexity/scripts/chat_models.txt +++ b/server/utils/AiProviders/perplexity/scripts/chat_models.txt @@ -1,12 +1,9 @@ -| Model | Parameter Count | Context Length | Model Type | -| :-------------------- | :-------------- | :------------- | :-------------- | -| `sonar-small-chat` | 7B | 16384 | Chat Completion | -| `sonar-small-online` | 7B | 12000 | Chat Completion | -| `sonar-medium-chat` | 8x7B | 16384 | Chat Completion | -| `sonar-medium-online` | 8x7B | 12000 | Chat Completion | -| `llama-3-8b-instruct` | 8B | 8192 | Chat Completion | -| `llama-3-70b-instruct` | 70B | 8192 | Chat Completion | -| `codellama-70b-instruct` | 70B | 16384 | Chat Completion | -| `mistral-7b-instruct` [1] | 7B | 16384 | Chat Completion | -| `mixtral-8x7b-instruct` | 8x7B | 16384 | Chat Completion | -| `mixtral-8x22b-instruct` | 8x22B | 16384 | Chat Completion | \ No newline at end of file +| Model | Parameter Count | Context Length | Model Type | +| :--------------------------------- | :-------------- | :------------- | :-------------- | +| `llama-3-sonar-small-32k-online`\* | 8B | 28,000 | Chat Completion | +| `llama-3-sonar-small-32k-chat` | 8B | 32,768 | Chat Completion | +| `llama-3-sonar-large-32k-online`\* | 70B | 28,000 | Chat Completion | +| `llama-3-sonar-large-32k-chat` | 70B | 32,768 | Chat Completion | +| `llama-3-8b-instruct` | 8B | 8,192 | Chat Completion | +| `llama-3-70b-instruct` | 70B | 8,192 | Chat Completion | +| `mixtral-8x7b-instruct` | 8x7B | 16,384 | Chat Completion | \ No newline at end of file diff --git a/server/utils/AiProviders/perplexity/scripts/parse.mjs b/server/utils/AiProviders/perplexity/scripts/parse.mjs index fcbbaf731..6dec22d96 100644 --- a/server/utils/AiProviders/perplexity/scripts/parse.mjs +++ b/server/utils/AiProviders/perplexity/scripts/parse.mjs @@ -8,7 +8,7 @@ // copy outputs into the export in ../models.js // Update the date below if you run this again because Perplexity added new models. -// Last Collected: Apr 25, 2024 +// Last Collected: Jul 19, 2024 import fs from "fs"; @@ -23,7 +23,7 @@ function parseChatModels() { .slice(1, -1) .map((text) => text.trim()); model = model.replace(/`|\s*\[\d+\]\s*/g, ""); - const maxLength = Number(contextLength.replace(/\s*\[\d+\]\s*/g, "")); + const maxLength = Number(contextLength.replace(/[^\d]/g, "")); if (model && maxLength) { models[model] = { id: model,