From 73af7a4a4f68eaff6b00e7258b17f27e6c150803 Mon Sep 17 00:00:00 2001 From: Sylar Chen <43306063+sylarchen1389@users.noreply.github.com> Date: Thu, 13 Nov 2025 10:54:41 +0800 Subject: [PATCH 01/12] Create docker-image.yml Updated Docker CI workflow to improve readability and maintainability. Added environment variables and enhanced steps for building and exporting Docker images. --- .github/workflows/docker-image.yml | 137 +++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 .github/workflows/docker-image.yml diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000000..3e256993b2 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,137 @@ +name: Docker Image CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: # 允许手动触发 + +env: + IMAGE_NAME: open-webui-next + OUTPUT_DIR: /tmp/docker-images + KEEP_VERSIONS: 2 + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: 检出代码 + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: 设置环境变量 + run: | + echo "IMAGE_TAG=${{ github.run_number }}" >> $GITHUB_ENV + echo "BUILD_NUMBER=${{ github.run_number }}" >> $GITHUB_ENV + echo "✓ 代码检出完成" + ls -la + + - name: 验证 Dockerfile + run: | + if [ ! -f "Dockerfile" ]; then + echo "❌ 找不到 Dockerfile" + exit 1 + fi + echo "✓ Dockerfile 存在" + head -10 Dockerfile + + - name: 设置 Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: 构建 Docker 镜像 + uses: docker/build-push-action@v5 + with: + context: . + load: true + tags: | + ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + ${{ env.IMAGE_NAME }}:latest + build-args: | + USE_SLIM=true + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: 验证镜像构建 + run: | + echo "✓ 镜像构建完成" + docker images | grep ${{ env.IMAGE_NAME }} + + - name: 创建输出目录 + run: | + mkdir -p ${{ env.OUTPUT_DIR }} + echo "输出目录: ${{ env.OUTPUT_DIR }}" + + - name: 导出镜像 + run: | + echo "导出镜像..." + docker save ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} | gzip > ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}.tar.gz + docker save ${{ env.IMAGE_NAME }}:latest | gzip > ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-latest.tar.gz + echo "✓ 镜像导出完成" + ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz + + - name: 上传镜像制品 + uses: actions/upload-artifact@v4 + with: + name: docker-images-${{ env.IMAGE_TAG }} + path: | + ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}.tar.gz + ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-latest.tar.gz + retention-days: 30 + + - name: 清理本地资源 + if: always() + run: | + echo "=========================================" + echo "当前构建: ${{ env.BUILD_NUMBER }}" + VERSION_TO_DELETE=$((BUILD_NUMBER - 2)) + echo "准备清理版本: ${VERSION_TO_DELETE}" + echo "=========================================" + + # 清理旧版本的 Docker 镜像 + echo "清理 Docker 镜像..." + docker rmi ${{ env.IMAGE_NAME }}:${VERSION_TO_DELETE} 2>/dev/null || echo "镜像 ${VERSION_TO_DELETE} 不存在或已清理" + + # 清理旧版本的 tar.gz 文件 + echo "清理导出文件..." + rm -f ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${VERSION_TO_DELETE}.tar.gz + + # 清理未使用的 Docker 资源 + echo "清理未使用的 Docker 资源..." + docker image prune -f + + echo "✓ 清理完成" + echo "" + echo "剩余镜像:" + docker images | grep ${{ env.IMAGE_NAME }} || echo "无相关镜像" + echo "" + echo "剩余文件:" + ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz 2>/dev/null || echo "无相关文件" + + - name: 显示磁盘使用情况 + if: always() + run: | + echo "最终磁盘使用情况:" + df -h ${{ env.OUTPUT_DIR }} + + - name: 构建摘要 + if: success() + run: | + echo "=========================================" >> $GITHUB_STEP_SUMMARY + echo "✅ 构建成功!" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**镜像信息:**" >> $GITHUB_STEP_SUMMARY + echo "- 镜像名称: \`${{ env.IMAGE_NAME }}\`" >> $GITHUB_STEP_SUMMARY + echo "- 镜像标签: \`${{ env.IMAGE_TAG }}\`, \`latest\`" >> $GITHUB_STEP_SUMMARY + echo "- 构建编号: \`${{ github.run_number }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**导出文件:**" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "=========================================" >> $GITHUB_STEP_SUMMARY From 88396a16e68700682ec1aed4b8584a6e307c7010 Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Thu, 13 Nov 2025 11:13:13 +0800 Subject: [PATCH 02/12] revert useless dockfile change --- .claude/settings.local.json | 5 +- .github/workflows/docker-image.yml | 137 ---- Dockerfile | 234 ++----- Jenkinsfile | 168 ----- LOCAL_SETUP.md | 291 -------- TROUBLESHOOTING.md | 90 +-- .../open_webui/static/apple-touch-icon.png | Bin 0 -> 1658 bytes backend/open_webui/static/custom.css | 0 backend/open_webui/static/favicon-96x96.png | Bin 0 -> 3826 bytes backend/open_webui/static/favicon-dark.png | Bin 0 -> 15919 bytes backend/open_webui/static/favicon.ico | Bin 0 -> 15086 bytes backend/open_webui/static/favicon.png | Bin 0 -> 10655 bytes backend/open_webui/static/favicon.svg | 3 + backend/open_webui/static/loader.js | 0 backend/open_webui/static/logo.png | Bin 0 -> 5367 bytes backend/open_webui/static/site.webmanifest | 21 + backend/open_webui/static/splash-dark.png | Bin 0 -> 5419 bytes backend/open_webui/static/splash.png | Bin 0 -> 5239 bytes backend/open_webui/static/user-import.csv | 1 + backend/open_webui/static/user.png | Bin 0 -> 7858 bytes .../static/web-app-manifest-192x192.png | Bin 0 -> 8349 bytes .../static/web-app-manifest-512x512.png | Bin 0 -> 30105 bytes package-lock.json | 646 +++++++++++++++--- package.json | 1 - 24 files changed, 653 insertions(+), 944 deletions(-) delete mode 100644 .github/workflows/docker-image.yml delete mode 100644 Jenkinsfile delete mode 100644 LOCAL_SETUP.md create mode 100644 backend/open_webui/static/apple-touch-icon.png create mode 100644 backend/open_webui/static/custom.css create mode 100644 backend/open_webui/static/favicon-96x96.png create mode 100644 backend/open_webui/static/favicon-dark.png create mode 100644 backend/open_webui/static/favicon.ico create mode 100644 backend/open_webui/static/favicon.png create mode 100644 backend/open_webui/static/favicon.svg create mode 100644 backend/open_webui/static/loader.js create mode 100644 backend/open_webui/static/logo.png create mode 100644 backend/open_webui/static/site.webmanifest create mode 100644 backend/open_webui/static/splash-dark.png create mode 100644 backend/open_webui/static/splash.png create mode 100644 backend/open_webui/static/user-import.csv create mode 100644 backend/open_webui/static/user.png create mode 100644 backend/open_webui/static/web-app-manifest-192x192.png create mode 100644 backend/open_webui/static/web-app-manifest-512x512.png diff --git a/.claude/settings.local.json b/.claude/settings.local.json index d5cc4588ec..6435e5e35e 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,10 +1,7 @@ { "permissions": { "allow": [ - "Bash(tree:*)", - "Bash(node:*)", - "Bash(npm --version:*)", - "Bash(test:*)" + "Bash(tree:*)" ], "deny": [], "ask": [] diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml deleted file mode 100644 index 3e256993b2..0000000000 --- a/.github/workflows/docker-image.yml +++ /dev/null @@ -1,137 +0,0 @@ -name: Docker Image CI - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - workflow_dispatch: # 允许手动触发 - -env: - IMAGE_NAME: open-webui-next - OUTPUT_DIR: /tmp/docker-images - KEEP_VERSIONS: 2 - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: 检出代码 - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: 设置环境变量 - run: | - echo "IMAGE_TAG=${{ github.run_number }}" >> $GITHUB_ENV - echo "BUILD_NUMBER=${{ github.run_number }}" >> $GITHUB_ENV - echo "✓ 代码检出完成" - ls -la - - - name: 验证 Dockerfile - run: | - if [ ! -f "Dockerfile" ]; then - echo "❌ 找不到 Dockerfile" - exit 1 - fi - echo "✓ Dockerfile 存在" - head -10 Dockerfile - - - name: 设置 Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: 构建 Docker 镜像 - uses: docker/build-push-action@v5 - with: - context: . - load: true - tags: | - ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - ${{ env.IMAGE_NAME }}:latest - build-args: | - USE_SLIM=true - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: 验证镜像构建 - run: | - echo "✓ 镜像构建完成" - docker images | grep ${{ env.IMAGE_NAME }} - - - name: 创建输出目录 - run: | - mkdir -p ${{ env.OUTPUT_DIR }} - echo "输出目录: ${{ env.OUTPUT_DIR }}" - - - name: 导出镜像 - run: | - echo "导出镜像..." - docker save ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} | gzip > ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}.tar.gz - docker save ${{ env.IMAGE_NAME }}:latest | gzip > ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-latest.tar.gz - echo "✓ 镜像导出完成" - ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz - - - name: 上传镜像制品 - uses: actions/upload-artifact@v4 - with: - name: docker-images-${{ env.IMAGE_TAG }} - path: | - ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}.tar.gz - ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-latest.tar.gz - retention-days: 30 - - - name: 清理本地资源 - if: always() - run: | - echo "=========================================" - echo "当前构建: ${{ env.BUILD_NUMBER }}" - VERSION_TO_DELETE=$((BUILD_NUMBER - 2)) - echo "准备清理版本: ${VERSION_TO_DELETE}" - echo "=========================================" - - # 清理旧版本的 Docker 镜像 - echo "清理 Docker 镜像..." - docker rmi ${{ env.IMAGE_NAME }}:${VERSION_TO_DELETE} 2>/dev/null || echo "镜像 ${VERSION_TO_DELETE} 不存在或已清理" - - # 清理旧版本的 tar.gz 文件 - echo "清理导出文件..." - rm -f ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}-${VERSION_TO_DELETE}.tar.gz - - # 清理未使用的 Docker 资源 - echo "清理未使用的 Docker 资源..." - docker image prune -f - - echo "✓ 清理完成" - echo "" - echo "剩余镜像:" - docker images | grep ${{ env.IMAGE_NAME }} || echo "无相关镜像" - echo "" - echo "剩余文件:" - ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz 2>/dev/null || echo "无相关文件" - - - name: 显示磁盘使用情况 - if: always() - run: | - echo "最终磁盘使用情况:" - df -h ${{ env.OUTPUT_DIR }} - - - name: 构建摘要 - if: success() - run: | - echo "=========================================" >> $GITHUB_STEP_SUMMARY - echo "✅ 构建成功!" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "**镜像信息:**" >> $GITHUB_STEP_SUMMARY - echo "- 镜像名称: \`${{ env.IMAGE_NAME }}\`" >> $GITHUB_STEP_SUMMARY - echo "- 镜像标签: \`${{ env.IMAGE_TAG }}\`, \`latest\`" >> $GITHUB_STEP_SUMMARY - echo "- 构建编号: \`${{ github.run_number }}\`" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "**导出文件:**" >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY - ls -lh ${{ env.OUTPUT_DIR }}/${{ env.IMAGE_NAME }}*.tar.gz >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY - echo "=========================================" >> $GITHUB_STEP_SUMMARY diff --git a/Dockerfile b/Dockerfile index 7704b14829..ad393338d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,92 +1,45 @@ # syntax=docker/dockerfile:1 # Initialize device type args +# use build args in the docker build command with --build-arg="BUILDARG=true" ARG USE_CUDA=false ARG USE_OLLAMA=false ARG USE_SLIM=false ARG USE_PERMISSION_HARDENING=false +# Tested with cu117 for CUDA 11 and cu121 for CUDA 12 (default) ARG USE_CUDA_VER=cu128 +# any sentence transformer model; models to use can be found at https://huggingface.co/models?library=sentence-transformers +# Leaderboard: https://huggingface.co/spaces/mteb/leaderboard +# for better performance and multilangauge support use "intfloat/multilingual-e5-large" (~2.5GB) or "intfloat/multilingual-e5-base" (~1.5GB) +# IMPORTANT: If you change the embedding model (sentence-transformers/all-MiniLM-L6-v2) and vice versa, you aren't able to use RAG Chat with your previous documents loaded in the WebUI! You need to re-embed them. ARG USE_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 ARG USE_RERANKING_MODEL="" + +# Tiktoken encoding name; models to use can be found at https://huggingface.co/models?library=tiktoken ARG USE_TIKTOKEN_ENCODING_NAME="cl100k_base" + ARG BUILD_HASH=dev-build +# Override at your own risk - non-root configurations are untested ARG UID=0 ARG GID=0 ######## WebUI frontend ######## -FROM --platform=$BUILDPLATFORM node:20-alpine3.20 AS build +FROM --platform=$BUILDPLATFORM node:22-alpine3.20 AS build ARG BUILD_HASH -# ========== 配置 Alpine 镜像源 ========== -RUN echo "https://mirrors.aliyun.com/alpine/v3.20/main" > /etc/apk/repositories && \ - echo "https://mirrors.aliyun.com/alpine/v3.20/community" >> /etc/apk/repositories && \ - apk update - -# ========== 增加 Node.js 堆内存限制 ========== -ENV NODE_OPTIONS="--max-old-space-size=4096" - -# ========== 配置 npm 镜像源 ========== -RUN npm config set registry https://registry.npmmirror.com && \ - npm config set fetch-timeout 120000 && \ - npm config set fetch-retries 5 && \ - npm config set fetch-retry-mintimeout 20000 && \ - npm config set fetch-retry-maxtimeout 120000 && \ - npm config set maxsockets 5 - -# ========== 配置二进制包镜像 ========== -ENV ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ \ - SASS_BINARY_SITE=https://npmmirror.com/mirrors/node-sass/ \ - PHANTOMJS_CDNURL=https://nppmirror.com/mirrors/phantomjs/ \ - CHROMEDRIVER_CDNURL=https://npmmirror.com/mirrors/chromedriver/ \ - OPERADRIVER_CDNURL=https://npmmirror.com/mirrors/operadriver/ \ - PYTHON_MIRROR=https://npmmirror.com/mirrors/python/ - -# ========== 配置代理(可选)========== -ARG HTTP_PROXY -ARG HTTPS_PROXY -ENV HTTP_PROXY=${HTTP_PROXY} -ENV HTTPS_PROXY=${HTTPS_PROXY} -ENV NO_PROXY=localhost,127.0.0.1,mirrors.aliyun.com,registry.nppmirror.com,nppmirror.com - -# ========== 安装必要工具 ========== -RUN apk add --no-cache git python3 make g++ && \ - if [ -n "$HTTP_PROXY" ]; then \ - git config --global http.proxy ${HTTP_PROXY} && \ - git config --global https.proxy ${HTTPS_PROXY} && \ - git config --global http.sslVerify false; \ - fi +# Set Node.js options (heap limit Allocation failed - JavaScript heap out of memory) +# ENV NODE_OPTIONS="--max-old-space-size=4096" WORKDIR /app -# ========== 安装依赖(不使用 --ignore-scripts)========== +# to store git revision in build +RUN apk add --no-cache git + COPY package.json package-lock.json ./ +RUN npm ci --force -RUN echo "==================================" && \ - echo "Starting npm install" && \ - echo "Time: $(date)" && \ - echo "==================================" && \ - npm cache clean --force && \ - npm install --legacy-peer-deps --no-audit --no-fund || \ - (echo "First attempt failed, retrying..." && \ - rm -rf node_modules package-lock.json && \ - npm install --legacy-peer-deps --no-audit --no-fund) && \ - echo "==================================" && \ - echo "npm install completed" && \ - echo "Time: $(date)" && \ - echo "==================================" - -# ========== 构建前端 ========== COPY . . ENV APP_BUILD_HASH=${BUILD_HASH} - -RUN echo "==================================" && \ - echo "Starting frontend build" && \ - echo "Time: $(date)" && \ - echo "==================================" && \ - npm run build && \ - echo "==================================" && \ - echo "Build completed" && \ - echo "Time: $(date)" && \ - echo "==================================" +RUN npm run build ######## WebUI backend ######## FROM python:3.11-slim-bookworm AS base @@ -105,6 +58,7 @@ ARG GID ## Basis ## ENV ENV=prod \ PORT=8080 \ + # pass build args to the build USE_OLLAMA_DOCKER=${USE_OLLAMA} \ USE_CUDA_DOCKER=${USE_CUDA} \ USE_SLIM_DOCKER=${USE_SLIM} \ @@ -124,23 +78,31 @@ ENV OPENAI_API_KEY="" \ ANONYMIZED_TELEMETRY=false #### Other models ######################################################### +## whisper TTS model settings ## ENV WHISPER_MODEL="base" \ - WHISPER_MODEL_DIR="/app/backend/data/cache/whisper/models" \ - RAG_EMBEDDING_MODEL="$USE_EMBEDDING_MODEL_DOCKER" \ - RAG_RERANKING_MODEL="$USE_RERANKING_MODEL_DOCKER" \ - SENTENCE_TRANSFORMERS_HOME="/app/backend/data/cache/embedding/models" \ - TIKTOKEN_ENCODING_NAME="cl100k_base" \ - TIKTOKEN_CACHE_DIR="/app/backend/data/cache/tiktoken" \ - HF_HOME="/app/backend/data/cache/embedding/models" + WHISPER_MODEL_DIR="/app/backend/data/cache/whisper/models" -# ========== 配置 Hugging Face 镜像 ========== -ENV HF_ENDPOINT=https://hf-mirror.com +## RAG Embedding model settings ## +ENV RAG_EMBEDDING_MODEL="$USE_EMBEDDING_MODEL_DOCKER" \ + RAG_RERANKING_MODEL="$USE_RERANKING_MODEL_DOCKER" \ + SENTENCE_TRANSFORMERS_HOME="/app/backend/data/cache/embedding/models" + +## Tiktoken model settings ## +ENV TIKTOKEN_ENCODING_NAME="cl100k_base" \ + TIKTOKEN_CACHE_DIR="/app/backend/data/cache/tiktoken" + +## Hugging Face download cache ## +ENV HF_HOME="/app/backend/data/cache/embedding/models" + +## Torch Extensions ## +# ENV TORCH_EXTENSIONS_DIR="/.cache/torch_extensions" + +#### Other models ########################################################## WORKDIR /app/backend ENV HOME=/root - -# ========== 创建用户和组 ========== +# Create user and group if not root RUN if [ $UID -ne 0 ]; then \ if [ $GID -ne 0 ]; then \ addgroup --gid $GID app; \ @@ -148,15 +110,13 @@ RUN if [ $UID -ne 0 ]; then \ adduser --uid $UID --gid $GID --home $HOME --disabled-password --no-create-home app; \ fi -RUN mkdir -p $HOME/.cache/chroma && \ - echo -n 00000000-0000-0000-0000-000000000000 > $HOME/.cache/chroma/telemetry_user_id && \ - chown -R $UID:$GID /app $HOME +RUN mkdir -p $HOME/.cache/chroma +RUN echo -n 00000000-0000-0000-0000-000000000000 > $HOME/.cache/chroma/telemetry_user_id -# ========== 配置 Debian 镜像源 ========== -RUN sed -i 's@deb.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list.d/debian.sources && \ - sed -i 's@security.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list.d/debian.sources +# Make sure the user has access to the app and root directory +RUN chown -R $UID:$GID /app $HOME -# ========== 安装系统依赖 ========== +# Install common system dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ git build-essential pandoc gcc netcat-openbsd curl jq \ @@ -164,100 +124,56 @@ RUN apt-get update && \ ffmpeg libsm6 libxext6 \ && rm -rf /var/lib/apt/lists/* -# ========== 配置 pip 镜像源 ========== -RUN pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \ - pip3 config set install.trusted-host mirrors.aliyun.com && \ - pip3 config set global.timeout 600 - -# ========== 配置 uv 使用镜像源 ========== -ENV UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \ - UV_EXTRA_INDEX_URL="" \ - UV_NO_CACHE=0 - -# ========== 安装 Python 依赖 ========== +# install python dependencies COPY --chown=$UID:$GID ./backend/requirements.txt ./requirements.txt -RUN echo "==================================" && \ - echo "Installing Python dependencies" && \ - echo "Time: $(date)" && \ - echo "==================================" && \ - pip3 install uv && \ +RUN pip3 install --no-cache-dir uv && \ if [ "$USE_CUDA" = "true" ]; then \ - echo "Installing PyTorch with CUDA support..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://mirrors.aliyun.com/pypi/simple/ \ - --trusted-host mirrors.aliyun.com || \ - (echo "Aliyun failed, trying Tsinghua mirror..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ \ - --trusted-host pypi.tuna.tsinghua.edu.cn) || \ - (echo "Mirrors failed, trying official PyTorch repo..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://download.pytorch.org/whl/$USE_CUDA_DOCKER_VER) && \ - echo "Installing other requirements with uv..." && \ - uv pip install --system -r requirements.txt \ - --index-url https://mirrors.aliyun.com/pypi/simple/ && \ - if [ "$USE_SLIM" != "true" ]; then \ - echo "Downloading models..." && \ - python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \ - python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])" && \ - python -c "import os; import tiktoken; tiktoken.get_encoding(os.environ['TIKTOKEN_ENCODING_NAME'])"; \ - fi; \ + # If you use CUDA the whisper and embedding model will be downloaded on first use + pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/$USE_CUDA_DOCKER_VER --no-cache-dir && \ + uv pip install --system -r requirements.txt --no-cache-dir && \ + python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \ + python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \ + python -c "import os; import tiktoken; tiktoken.get_encoding(os.environ['TIKTOKEN_ENCODING_NAME'])"; \ else \ - echo "Installing PyTorch CPU version..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://mirrors.aliyun.com/pypi/simple/ \ - --trusted-host mirrors.aliyun.com || \ - (echo "Aliyun failed, trying Tsinghua mirror..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ \ - --trusted-host pypi.tuna.tsinghua.edu.cn) || \ - (echo "Tsinghua failed, trying USTC mirror..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://mirrors.ustc.edu.cn/pypi/web/simple/ \ - --trusted-host mirrors.ustc.edu.cn) || \ - (echo "All mirrors failed, trying official PyTorch CPU repo..." && \ - pip3 install torch torchvision torchaudio \ - --index-url https://download.pytorch.org/whl/cpu) && \ - echo "Installing other requirements with uv..." && \ - uv pip install --system -r requirements.txt \ - --index-url https://mirrors.aliyun.com/pypi/simple/ && \ - if [ "$USE_SLIM" != "true" ]; then \ - echo "Downloading models..." && \ - python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \ - python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])" && \ - python -c "import os; import tiktoken; tiktoken.get_encoding(os.environ['TIKTOKEN_ENCODING_NAME'])"; \ - fi; \ - fi && \ + pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --no-cache-dir && \ + uv pip install --system -r requirements.txt --no-cache-dir && \ + if [ "$USE_SLIM" != "true" ]; then \ + python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \ + python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \ + python -c "import os; import tiktoken; tiktoken.get_encoding(os.environ['TIKTOKEN_ENCODING_NAME'])"; \ + fi; \ + fi; \ mkdir -p /app/backend/data && chown -R $UID:$GID /app/backend/data/ && \ - echo "==================================" && \ - echo "Python dependencies installed" && \ - echo "Time: $(date)" && \ - echo "==================================" + rm -rf /var/lib/apt/lists/*; -# ========== 安装 Ollama ========== +# Install Ollama if requested RUN if [ "$USE_OLLAMA" = "true" ]; then \ date +%s > /tmp/ollama_build_hash && \ - echo "Installing Ollama..." && \ - export HF_ENDPOINT=https://hf-mirror.com && \ - curl -fsSL https://ollama.com/install.sh | sh || \ - (echo "Ollama installation failed, trying with proxy..." && \ - export http_proxy=http://host.docker.internal:7897 && \ - export https_proxy=http://host.docker.internal:7897 && \ - curl -fsSL https://ollama.com/install.sh | sh); \ + echo "Cache broken at timestamp: `cat /tmp/ollama_build_hash`" && \ + curl -fsSL https://ollama.com/install.sh | sh && \ + rm -rf /var/lib/apt/lists/*; \ fi -# ========== 复制构建文件 ========== +# copy embedding weight from build +# RUN mkdir -p /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2 +# COPY --from=build /app/onnx /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx + +# copy built frontend files COPY --chown=$UID:$GID --from=build /app/build /app/build COPY --chown=$UID:$GID --from=build /app/CHANGELOG.md /app/CHANGELOG.md COPY --chown=$UID:$GID --from=build /app/package.json /app/package.json + +# copy backend files COPY --chown=$UID:$GID ./backend . EXPOSE 8080 HEALTHCHECK CMD curl --silent --fail http://localhost:${PORT:-8080}/health | jq -ne 'input.status == true' || exit 1 -# ========== 权限加固 ========== +# Minimal, atomic permission hardening for OpenShift (arbitrary UID): +# - Group 0 owns /app and /root +# - Directories are group-writable and have SGID so new files inherit GID 0 RUN if [ "$USE_PERMISSION_HARDENING" = "true" ]; then \ set -eux; \ chgrp -R 0 /app /root || true; \ @@ -272,4 +188,4 @@ ARG BUILD_HASH ENV WEBUI_BUILD_VERSION=${BUILD_HASH} ENV DOCKER=true -CMD [ "bash", "start.sh"] \ No newline at end of file +CMD [ "bash", "start.sh"] diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 51072bbf68..0000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,168 +0,0 @@ -pipeline { - agent any - - environment { - REPO_URL = 'git@github.com:ai-friend-coming/open-webui-next.git' - IMAGE_NAME = 'open-webui-custom' - IMAGE_TAG = "${BUILD_NUMBER}" - OUTPUT_DIR = '/var/docker-images' - DOCKER_FILE_PATH = 'Dockerfile' - } - - options { - buildDiscarder(logRotator(numToKeepStr: '10')) - timeout(time: 1, unit: 'HOURS') - timestamps() - } - - stages { - stage('准备工作') { - steps { - script { - echo "=========================================" - echo "开始构建 Build #${BUILD_NUMBER}" - echo "仓库: ${REPO_URL}" - echo "镜像: ${IMAGE_NAME}:${IMAGE_TAG}" - echo "=========================================" - - // 检查Docker是否可用 - sh 'docker --version' - sh 'docker info' - } - } - } - - stage('检出代码') { - steps { - script { - echo "从 ${REPO_URL} 检出代码..." - } - - // 使用更简单的checkout方式 - checkout([ - $class: 'GitSCM', - branches: [[name: '*/main']], - userRemoteConfigs: [[ - url: "${REPO_URL}", - credentialsId: 'github-ssh' // 改成你实际创建的凭据ID - ]] - ]) - - script { - echo "代码检出完成" - sh 'ls -la' - sh 'git log --oneline -1 || echo "无法获取git日志"' - } - } - } - - stage('验证 Dockerfile') { - steps { - script { - echo "检查 Dockerfile..." - sh """ - if [ ! -f "${DOCKER_FILE_PATH}" ]; then - echo "错误: 找不到 Dockerfile: ${DOCKER_FILE_PATH}" - echo "当前目录内容:" - ls -la - exit 1 - fi - echo "Dockerfile 存在" - echo "--- Dockerfile 内容 (前20行) ---" - head -20 "${DOCKER_FILE_PATH}" - """ - } - } - } - - stage('创建输出目录') { - steps { - script { - echo "创建输出目录: ${OUTPUT_DIR}" - sh """ - sudo mkdir -p ${OUTPUT_DIR} - sudo chmod 777 ${OUTPUT_DIR} - ls -ld ${OUTPUT_DIR} - """ - } - } - } - - stage('构建 Docker 镜像') { - steps { - script { - echo "开始构建镜像: ${IMAGE_NAME}:${IMAGE_TAG}" - sh """ - docker build \ - -t ${IMAGE_NAME}:${IMAGE_TAG} \ - -t ${IMAGE_NAME}:latest \ - -f ${DOCKER_FILE_PATH} \ - . - - echo "镜像构建完成" - docker images | grep ${IMAGE_NAME} || echo "未找到镜像" - """ - } - } - } - - stage('导出镜像') { - steps { - script { - echo "导出镜像到 ${OUTPUT_DIR}" - sh """ - echo "导出 ${IMAGE_NAME}:${IMAGE_TAG}..." - docker save ${IMAGE_NAME}:${IMAGE_TAG} | gzip > ${OUTPUT_DIR}/${IMAGE_NAME}-${IMAGE_TAG}.tar.gz - - echo "导出 ${IMAGE_NAME}:latest..." - docker save ${IMAGE_NAME}:latest | gzip > ${OUTPUT_DIR}/${IMAGE_NAME}-latest.tar.gz - - echo "导出完成" - ls -lh ${OUTPUT_DIR}/${IMAGE_NAME}*.tar.gz - """ - } - } - } - - stage('清理旧镜像') { - steps { - script { - echo "清理本地镜像..." - sh """ - docker rmi ${IMAGE_NAME}:${IMAGE_TAG} 2>/dev/null || echo "镜像已删除或不存在" - - # 保留latest标签,方便下次使用 - # docker rmi ${IMAGE_NAME}:latest 2>/dev/null || true - - # 清理悬空镜像 - docker image prune -f --filter "dangling=true" || true - - echo "清理完成" - """ - } - } - } - } - - post { - success { - script { - echo "=========================================" - echo "✅ 构建成功!" - echo "镜像文件位置: ${OUTPUT_DIR}" - sh "ls -lh ${OUTPUT_DIR}/${IMAGE_NAME}*.tar.gz || true" - echo "=========================================" - } - } - failure { - echo "❌ 构建失败,请检查上方日志" - } - always { - script { - echo "流水线执行完成" - // 可选:清理工作空间(注释掉以便调试) - // cleanWs() - } - } - } -} \ No newline at end of file diff --git a/LOCAL_SETUP.md b/LOCAL_SETUP.md deleted file mode 100644 index aa8b55218f..0000000000 --- a/LOCAL_SETUP.md +++ /dev/null @@ -1,291 +0,0 @@ -# Open WebUI 本地开发环境搭建指南 - -本指南提供 Open WebUI 项目的本地开发环境配置和运行步骤。 - -## 系统要求 - -- **Node.js**: v20.19.5 或更高版本 -- **Python**: 3.12.x (推荐使用 pyenv 管理) -- **npm**: 10.8.2 或更高版本 -- **操作系统**: macOS / Linux / Windows - -## 技术栈 - -### 前端 -- **框架**: SvelteKit 4 + TypeScript -- **构建工具**: Vite 5 -- **样式**: Tailwind CSS 4 - -### 后端 -- **语言**: Python 3.12 -- **框架**: FastAPI -- **数据库**: SQLite (开发环境) / PostgreSQL (生产环境) -- **ORM**: SQLAlchemy + Peewee - -## 环境准备 - -### 1. 安装 pyenv (如果系统 Python 版本不是 3.12) - -```bash -# macOS (使用 Homebrew) -brew install pyenv - -# 配置 shell 环境变量 (添加到 ~/.zshrc 或 ~/.bash_profile) -export PATH="$HOME/.pyenv/bin:$PATH" -eval "$(pyenv init -)" -``` - -### 2. 安装 Python 3.12 - -```bash -# 使用 pyenv 安装 Python 3.12 -pyenv install 3.12 - -# 验证安装 -pyenv versions -``` - -## 安装依赖 - -### 前端依赖 - -```bash -# 在项目根目录执行 -npm install --legacy-peer-deps -``` - -**注意**: 需要使用 `--legacy-peer-deps` 标志来解决 @tiptap 包的版本冲突问题。 - -### 后端依赖 - -```bash -# 进入后端目录 -cd backend - -# 创建 Python 3.12 虚拟环境 -/Users/你的用户名/.pyenv/versions/3.12.12/bin/python3 -m venv venv - -# 或者,如果系统 Python 已是 3.12 -python3 -m venv venv - -# 激活虚拟环境 -source venv/bin/activate # macOS/Linux -# 或 -venv\Scripts\activate # Windows - -# 升级 pip -pip install --upgrade pip - -# 安装依赖 -pip install -r requirements.txt -``` - -## 运行开发服务器 - -### 启动后端服务 (端口 8080) - -```bash -# 在 backend 目录下,激活虚拟环境后 -cd backend -source venv/bin/activate -python -m uvicorn open_webui.main:app --reload --port 8080 --host 0.0.0.0 -``` - -后端服务将运行在: **http://localhost:8080** - -后端启动时会自动: -- 运行数据库迁移 (Alembic) -- 初始化 SQLite 数据库 -- 配置向量数据库 (ChromaDB) - -### 启动前端服务 (端口 5050) - -```bash -# 在项目根目录 -npm run dev:5050 -``` - -前端服务将运行在: **http://localhost:5050** - -首次启动时会自动: -- 下载 Pyodide 包 (浏览器内 Python 运行时) -- 预加载常用 Python 包 (numpy, pandas, matplotlib 等) - -## 访问应用 - -打开浏览器访问: **http://localhost:5050** - -前端会通过 Vite 代理将 API 请求转发到后端 (8080 端口)。 - -## 开发工作流 - -### 目录结构 - -``` -open-webui-next/ -├── src/ # 前端源码 -│ ├── routes/ # SvelteKit 路由 -│ ├── lib/ -│ │ ├── apis/ # API 客户端 -│ │ ├── components/ # Svelte 组件 -│ │ ├── stores/ # 全局状态管理 -│ │ └── i18n/ # 国际化 -├── backend/ # 后端源码 -│ ├── open_webui/ -│ │ ├── main.py # FastAPI 入口 -│ │ ├── routers/ # API 路由 -│ │ ├── models/ # 数据模型 -│ │ ├── utils/ # 工具函数 -│ │ └── migrations/ # 数据库迁移 -│ ├── requirements.txt -│ └── venv/ # Python 虚拟环境 -└── package.json -``` - -### 常用开发命令 - -#### 前端 - -```bash -npm run dev # 启动开发服务器 (默认端口 5173) -npm run dev:5050 # 启动开发服务器 (端口 5050) -npm run build # 构建生产版本 -npm run lint # 代码检查 -npm run format # 代码格式化 -npm run test:frontend # 运行单元测试 -npm run i18n:parse # 解析并更新翻译文件 -``` - -#### 后端 - -```bash -# 在 backend 目录下,激活虚拟环境后 - -# 启动开发服务器 (自动重载) -python -m uvicorn open_webui.main:app --reload --port 8080 - -# 代码格式化 -black . - -# 数据库迁移 -cd backend -alembic revision --autogenerate -m "描述" # 生成迁移脚本 -alembic upgrade head # 执行迁移 -``` - -### 热重载 - -- **前端**: Vite 自动检测文件变化并热重载 -- **后端**: uvicorn 的 `--reload` 参数自动检测 Python 代码变化并重启 - -## 常见问题 - -### 1. npm install 失败 - -**问题**: 依赖版本冲突 - -**解决方案**: -```bash -npm install --legacy-peer-deps -``` - -### 2. 后端 Python 版本不兼容 - -**问题**: `unstructured` 包不支持 Python 3.13+ - -**解决方案**: 使用 Python 3.12: -```bash -pyenv install 3.12 -cd backend -rm -rf venv -/Users/你的用户名/.pyenv/versions/3.12.12/bin/python3 -m venv venv -source venv/bin/activate -pip install -r requirements.txt -``` - -### 3. 端口被占用 - -**问题**: 8080 或 5050 端口已被使用 - -**解决方案**: -```bash -# 查找占用端口的进程 -lsof -i :8080 -lsof -i :5050 - -# 终止进程 -kill -9 - -# 或者使用不同端口 -# 前端: -npm run dev -- --port 3000 - -# 后端: -python -m uvicorn open_webui.main:app --reload --port 8000 -``` - -### 4. 前端 Pyodide 下载慢 - -**问题**: 首次启动下载 Pyodide 包较慢 - -**解决方案**: 耐心等待,包会缓存在 `node_modules` 中,后续启动会很快。 - -### 5. 数据库迁移错误 - -**问题**: Alembic 迁移失败 - -**解决方案**: -```bash -# 删除数据库重新初始化 (仅开发环境) -rm backend/data/webui.db -python -m uvicorn open_webui.main:app --reload --port 8080 -``` - -## 环境变量配置 - -后端可通过环境变量配置,创建 `backend/.env` 文件: - -```bash -# 数据库 -DATABASE_URL=sqlite:///data/webui.db - -# 向量数据库 -VECTOR_DB=chroma -EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 - -# CORS (开发环境) -CORS_ALLOW_ORIGIN=* - -# 日志级别 -LOG_LEVEL=INFO -``` - -## 生产部署 - -生产环境使用 Docker 部署,详见项目根目录的 `Dockerfile` 和 `docker-compose.yaml`。 - -```bash -# 构建镜像 -docker build -t open-webui . - -# 运行容器 -docker run -d -p 8080:8080 -v open-webui:/app/backend/data open-webui -``` - -## 更多资源 - -- **项目文档**: [CLAUDE.md](./CLAUDE.md) -- **API 文档**: http://localhost:8080/docs (启动后端后访问) -- **官方仓库**: https://github.com/open-webui/open-webui - -## 贡献指南 - -1. Fork 项目 -2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) -3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) -4. 推送到分支 (`git push origin feature/AmazingFeature`) -5. 创建 Pull Request - ---- - -**最后更新**: 2025-11-08 diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index af41ec99f0..83251a3a91 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -1,88 +1,36 @@ -# 本地开发故障排除 +# Open WebUI Troubleshooting Guide -## 问题: "Open WebUI 需要后端服务" 错误 +## Understanding the Open WebUI Architecture -### 🔧 快速解决方案 +The Open WebUI system is designed to streamline interactions between the client (your browser) and the Ollama API. At the heart of this design is a backend reverse proxy, enhancing security and resolving CORS issues. -**请在浏览器中进行硬刷新:** +- **How it Works**: The Open WebUI is designed to interact with the Ollama API through a specific route. When a request is made from the WebUI to Ollama, it is not directly sent to the Ollama API. Initially, the request is sent to the Open WebUI backend via `/ollama` route. From there, the backend is responsible for forwarding the request to the Ollama API. This forwarding is accomplished by using the route specified in the `OLLAMA_BASE_URL` environment variable. Therefore, a request made to `/ollama` in the WebUI is effectively the same as making a request to `OLLAMA_BASE_URL` in the backend. For instance, a request to `/ollama/api/tags` in the WebUI is equivalent to `OLLAMA_BASE_URL/api/tags` in the backend. -- **macOS**: `Cmd + Shift + R` -- **Windows/Linux**: `Ctrl + Shift + R` +- **Security Benefits**: This design prevents direct exposure of the Ollama API to the frontend, safeguarding against potential CORS (Cross-Origin Resource Sharing) issues and unauthorized access. Requiring authentication to access the Ollama API further enhances this security layer. -然后检查是否解决问题。 +## Open WebUI: Server Connection Error -### 📋 详细排查步骤 +If you're experiencing connection issues, it’s often due to the WebUI docker container not being able to reach the Ollama server at 127.0.0.1:11434 (host.docker.internal:11434) inside the container . Use the `--network=host` flag in your docker command to resolve this. Note that the port changes from 3000 to 8080, resulting in the link: `http://localhost:8080`. -#### 1. 打开浏览器开发者工具 - -- **macOS**: `Cmd + Option + I` -- **Windows/Linux**: `F12` - -#### 2. 检查 Console (控制台) - -查找是否有错误消息,特别是: -- 红色的错误信息 -- 网络请求失败 -- CORS 相关错误 - -#### 3. 检查 Network (网络) 标签 - -1. 切换到 Network 标签 -2. 刷新页面 -3. 查找对 `http://localhost:8080/api/config` 的请求 -4. 如果找到,点击查看: - - **Status** 应该是 `200` - - **Response** 应该包含 JSON 配置 - -#### 4. 清除本地存储 - -1. 在开发者工具中,转到 **Application** 标签 -2. 左侧找到 **Local Storage** -3. 展开并点击 `http://localhost:5050` -4. 点击右键 → **Clear** -5. 刷新页面 - -### ✅ 验证服务状态 - -在终端运行: +**Example Docker Command**: ```bash -# 测试后端 API -curl http://localhost:8080/api/config - -# 检查端口占用 -lsof -i :8080 -i :5050 | grep LISTEN +docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main ``` -如果 curl 命令返回 JSON 配置,说明后端正常运行。 +### Error on Slow Responses for Ollama -### 🔄 重启服务 (如果需要) +Open WebUI has a default timeout of 5 minutes for Ollama to finish generating the response. If needed, this can be adjusted via the environment variable AIOHTTP_CLIENT_TIMEOUT, which sets the timeout in seconds. -如果上述方法无效,停止当前服务 (`Ctrl + C`) 并重新启动: +### General Connection Errors -**后端:** -```bash -cd backend -source venv/bin/activate -python -m uvicorn open_webui.main:app --reload --port 8080 --host 0.0.0.0 -``` +**Ensure Ollama Version is Up-to-Date**: Always start by checking that you have the latest version of Ollama. Visit [Ollama's official site](https://ollama.com/) for the latest updates. -**前端:** -```bash -npm run dev:5050 -``` +**Troubleshooting Steps**: -### 🌐 尝试不同端口 +1. **Verify Ollama URL Format**: + - When running the Web UI container, ensure the `OLLAMA_BASE_URL` is correctly set. (e.g., `http://192.168.1.1:11434` for different host setups). + - In the Open WebUI, navigate to "Settings" > "General". + - Confirm that the Ollama Server URL is correctly set to `[OLLAMA URL]` (e.g., `http://localhost:11434`). -如果端口冲突,可以使用不同端口: - -**前端:** -```bash -npm run dev -- --port 3000 -``` - -然后访问 `http://localhost:3000` - ---- - -**还有问题?** 查看 `/Users/sylar/my_ws/open-webui-next/LOCAL_SETUP.md` 获取完整设置指南。 +By following these enhanced troubleshooting steps, connection issues should be effectively resolved. For further assistance or queries, feel free to reach out to us on our community Discord. diff --git a/backend/open_webui/static/apple-touch-icon.png b/backend/open_webui/static/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9807373436540a5b80ae43960cd3cb86f31eec4f GIT binary patch literal 1658 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 literal 0 HcmV?d00001 diff --git a/backend/open_webui/static/favicon-dark.png b/backend/open_webui/static/favicon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..08627a23f7934510cfcc442d1a6ee943e748af7e GIT binary patch literal 15919 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 literal 0 HcmV?d00001 diff --git a/backend/open_webui/static/favicon.ico b/backend/open_webui/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..14c5f9c6d437ed109a8579031cf181ee52bdf30e GIT binary patch literal 15086 zcmdU#S!h(*7KTrZG2)mu&SMnCE4H+@a(!vJR}o)CRD4h{Vyig3L=?n_esG@K2~;E< z<4EM9_@Fr4t0)m?X(z;aNEB4Wc^>1s>)X~oT_<&_QdK!xU5otLr_R}HuYa#S4~~=J zWIEluI~wLW|LNp7|8yKDFE8{v$8m1!yBrPqKB=bTEYJx5&^W5%{Hoynw-6D@R5Vny zQ4CZpR~%H_RJ>GFgupZJ__jq)1fIL62RR_Pr{j(y~0tdLn zRSp`D`cAo}((h{CBXEIJmF+>}&~8#u-_>kPfm5$obxFU|N7DBHt^&8HeXD+>@BJQq zWU~H&+i!klpzj%1zvbAJEa%F4aP*AR`a46x_?<3NqD0;Kl0GwkDpMpRZ{NO^YuB#H z@#Dv3TNkY15_|%$_}4?%ur{4~H_1 z^b_?+L*~HD0TY^wUAlBhCQh6vZQ8VvtgI{{DT^94YDi8_jtm<%Otx;_DxW|54(&BK%Q;$DuUyIi?sJu@>?YS*qUwQAM!%@bu+xg4s=AI@+esEA7r zA3iLtTD9`&a0QKLp?d_XAx{&25| zNg(tQyWw^D_3PL1sF^aFIdi6~OB>j+V~5cVfIr;Roqt^QhyF0!|7B%maryt%t5-5) z$PibTay)qOU{L;tdtB{zK#pwU; z+_~fFKijr#E9cIgi>{zwDk>_ZYuBzWck+!NtOQX1;m#OPr7(W=@891ue)aC%+th`R zA3u8Z;eGY$RT(^Zu!lQyi(|+BTHXb~pRqTt`2&4D^|nQe79LJbnlv#!U9ez*Y~Q|J zii(P4{P^+GxpQYvUhzHi>u?ExKiu0W9)+hH?V0)8vSrJB=WjJ@)->Z3{bP7Lx6h+S zjS}?3rJDTV40qj>6Dtmjyh+I_JKeFpR+cCF2N)vlXZdsOTGjC^q% zc9-P6WtBb z{QNt~EXaiME9JNHE+-7jPv!htKUlxm(E82wqxGxxvqr@4+|$Za{96&kJuR&d%@z5I zBE_GI$BNGi7Qa06j&H>{+@SyBhE7gIzJ~%LUn&o{I1}D ziG2Fm)Yra3Ty)SSjUN)>q4DX1E-B~(6S1q&J%TQ2kd`@Dtcr)m>!Y}@fPYXzTBO-0 zmVNzBzKKUU1}&sX+P;3!_mnq&3NqiCoJU9-8xi$E-%(G37&kSUn1YSp!^=T`)5fT) z)v0T$9+zMPTW;IbXWD8^zdw8SOm5t`Av<^Olx^F#$;FEo(D{5i*@9Jo`FfPHLY+qdjF1Lh1K`=zC&5qAVE;memVo4t4LdQ6xw zAyNCZ1K)O6**<3ve!@N{d(MeQ)G{l8|-8smTJ;Fc|063suh z|5QZOKkfi^@7~?yi+Zqc-#&A$Ykff5#7AAabTMT_$XR{@)b_{yBW%}>_kWoIQJ19zA*#(Jm7mf3$rw2BmcT4RJ`>{3B#PrSq>4hm_4f zv5#n7=%Yx<{QD~d!vQ~}Wc?Awf%=e=^_S&9s2uG2lm3D}i+GE(MsS z+Xui&P^?~QD4lXmleDpcEo@?&eTp1Ko+6Qb3eDp$ibBOT1#23>bD`oFP0m;JTdv{{ z#Y+YLqs*+>^5YwEa>Enhx8i?__X@u{ps$VajX1=0)6i$qQ4PndZG_a7KX&zw19?r4x^NYKHj z*A&KAoMUtEi8;sl^XJW3e7A1h%>6O=a2JI6b4buZ_k(@GJrM3b*}DhKGscY@C;j^M zGx@2cj~coj{h>pLy86t;NV9L>zOnS-;Niby$r5v)yQHK<;Lkmk82k%W-}ukY`|%(5 zjoRy7%*Bfrn>APr|3#D^KBla=3u))q(aJAW2a>KoA^mFA->@{2YCq^(QD53RNx4wA bfagL*MEiZNd%>mb_i9fBsuCLy9d!Q>dBe1} literal 0 HcmV?d00001 diff --git a/backend/open_webui/static/favicon.png b/backend/open_webui/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..63735ad4616fa452325af0fe351139dca01ca0ab GIT binary patch literal 10655 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 \ No newline at end of file diff --git a/backend/open_webui/static/loader.js b/backend/open_webui/static/loader.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backend/open_webui/static/logo.png b/backend/open_webui/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a652a5fb87acf0f253a727d0ed9d672b9837a780 GIT binary patch literal 5367 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 literal 0 HcmV?d00001 diff --git a/backend/open_webui/static/splash.png b/backend/open_webui/static/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..389196ca6a364b9e4b7daa0fc13be463b914b251 GIT binary patch literal 5239 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 GEB_DGHk4cd literal 0 HcmV?d00001 diff --git a/backend/open_webui/static/user-import.csv b/backend/open_webui/static/user-import.csv new file mode 100644 index 0000000000..918a92aad7 --- /dev/null +++ b/backend/open_webui/static/user-import.csv @@ -0,0 +1 @@ +Name,Email,Password,Role diff --git a/backend/open_webui/static/user.png b/backend/open_webui/static/user.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdc70d159cfb0a032bec208e3775ab82755b299 GIT binary patch literal 7858 zcmY*-2{e@N`~Dc)*oTs}j5kZ!36U_vU_{84E&G~%mwk(&Fr(~bn?ypE>`O5iAsIr} zlI0_z8TapoaemfzV7FKp6h+jd*0{1t|S9JEhc(ydJqW2q>Vxvf%?X_^Bh(PxmZ_GVZ|8-~b#*eM@ zbKLeOf2JumUu~VFF^f*}CKS>(hpdwBG}z<+mgyn-l;u$9~7c{PI#{V$#W z&bjr!_*g>!KS6r~jCllHH98)0K^=Kf!T%qIcD7UE4Kx7YC}fbUiyPq7wB@l>vsZ)L ztH~$O89Q#>e4h+BUG8~N#?b@A%MUrO zu&^*Q>qnlwn_S;L8W{a_w$e9kDDG^0&s{(sIn-ySg9drGQaGY*SAw(=4v-|)mtdoc zjm^yht9exwS)05hG8(kUMa1Hve z#+kvt9|n`1ni~$oBkDS=M6Uy|TK>if?lO?fjt#v9Wx5?W#n*G|U{amD`bBuL;1a1~ zA6R@O0-T-ZRV5CNEkBjHUP~&L=tM+a{gU zJ0E$>=X=zAdC2$}0#i@4LrRQDK2pYc-=0?z1}eO>5}6s?IG78Q(F*&=VFMG>?ShTV zAQ@X@^P6>y_hKI1Y4$uyJuu)tJ8E^uHPJq!!KUz6wLC{6ivl@0_pD^!@qdMXt11j0 zR=pi*09{RAtt{Qupm~ioXgdCMm={A3N3UdGcj8#jO6l@C`6!4);ui`%zo^r3mUhu7 zQY;;V#<6cVA9Y5w&!OPR*}=nH4XRW5W;$4hChlYPcp*M4OUMf;h#O{UV2 z=;F`6<$jL<>5W>mZi`xmP7%CWV#8TniJUDiG%^)WZ^qrDU=xw3ujW-Ah#qAs-);?4 zlvVu*6LEShm&*VvJh7Kg5XFUTob;yfAeWXso__QRJN-C+rCPn-@l3~|H(meiB%R;hFF5`7L=#UmK19Ut`ZIa4t;M^2wKi1XbhSSq%dIreJ0D{aFjWNvth+`i9Rs7oc_3siS< z-qid7vNv~cYZV64b&DQ&vwRnfP^{)>>mG{Z6q2fR8S!3gc~MbkmHv5f0Bi^12k@Wg z>zf5gWcko9mj&+6o7Pwdak_?vnfG*OczlEXveG!cF_{Bk~j!{>kIJ6@1t z0y-PQz6k=W47tzwzkW~C5@Lx33CWvTbZj`ZOMy^np4x4sR(KVb&KXKY@m;3;btsUI zbD&%sNK{5$V4Rrtb{^n6gcf3V7UamG2yf8M<#Q_dBA9_h2mCtw*xP%lNPh@5`+6P?GrPD z@gk{OKJb5*6`|i0%=3`(j_n_+OEyjS(j@vD7ASV`@Q;2;L9ZM^P%b$_zsUV1=U%q# z9LfqGZE>4j)!=WQR?@tL{`IOC>%S_Gh@1p!x#611N zcc|S1y8Tix>AZ}#!}{IFKOgw976-d+{$pB_l{3xu=*weWe3sBH?nLP!UPAtyHyXEQ z3p)>Tpru~>BY@UNZf3gFd`?~&(I93rf)}+Ih@(2L$+(&23d%!?;_CH4&DUs9YC%Kz zR)+xBduhHK>20@Y+*hPh>&}XtS=6YwlQL_jZ_OW4k^o|JC4X)ApG&JUv=sK^A4%rN zB>yZ`s4zgBmSJUe?!qZiKzl4^UN^bmh`g~Otk~^CwrM&XwUdogv9!hT)|-t!*+fCS z(rQQ4cN+A~V|>dHB74fUBWU^2G3yMk{BMc-M#3B>o~Zt(w6*wmwoTu@bdy^sN#0IK z>q$Ab%X|VtC6Kgv_r%$l6LZlSqgXzq998uq+fn}Ye_`MJu}d#9x_#rCB`j3}+a&bbIf4yCFt0_i&Mck;PIx#6W<-Nc zvf|*`qJ#lIMw-e}FBi~WpzPM&u2aFwSUznu9)7IeGz5oYr=&J@xd`-J_Zy8RgdjXB z0qG4aV!6ziK-iK(G6O^n>GA89a0U8>8^!lAIImWj4-Br0^4;z0*uC+FYKb>yKtuwD z<}V_5*B^(nOtr_{wX~IOjfQz}zONhi+ZxCnqX0~7hYjvRhco3&Gv^v *S`Cr$hj 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 literal 0 HcmV?d00001 diff --git a/backend/open_webui/static/web-app-manifest-192x192.png b/backend/open_webui/static/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd2eab6e2b8bcd7c510fca905f432c93a4f2ebc GIT binary patch literal 8349 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.1.90" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@cypress/request": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", @@ -1861,7 +2000,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1875,7 +2013,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1884,7 +2021,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1898,7 +2034,6 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2336,7 +2471,6 @@ "version": "1.0.0-next.28", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "dev": true, "license": "MIT" }, "node_modules/@popperjs/core": { @@ -2735,7 +2869,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", - "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" @@ -2781,7 +2914,6 @@ "version": "2.22.4", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.4.tgz", "integrity": "sha512-BXK9hTbP8AeQIfoz6+P3uoyVYStVHc5CIKqoTSF7hXm3Q5P9BwFMdEus4jsQuhaYmXGHzukcGlxe2QrsE8BJfQ==", - "dev": true, "license": "MIT", "dependencies": { "@sveltejs/acorn-typescript": "^1.0.5", @@ -2819,7 +2951,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", "integrity": "sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==", - "dev": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", "debug": "^4.3.4", @@ -2841,7 +2972,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", - "dev": true, "dependencies": { "debug": "^4.3.4" }, @@ -3255,6 +3385,23 @@ "lowlight": "^2 || ^3" } }, + "node_modules/@tiptap/extension-collaboration": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-3.4.5.tgz", + "integrity": "sha512-JyPXTYkYi2XzUWsmObv2cogMrs7huAvfq6l7d5hAwsU2FnA1vMycaa48N4uekogySP6VBkiQNDf9B4T09AwwqA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.4.5", + "@tiptap/pm": "^3.4.5", + "@tiptap/y-tiptap": "^3.0.0-beta.3", + "yjs": "^13" + } + }, "node_modules/@tiptap/extension-document": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.0.7.tgz", @@ -3497,6 +3644,21 @@ "@tiptap/suggestion": "^3.0.9" } }, + "node_modules/@tiptap/extension-node-range": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@tiptap/extension-node-range/-/extension-node-range-3.4.5.tgz", + "integrity": "sha512-mHCjdJZX8DZCpnw9wBqioanANy6tRoy20/OcJxMW1T7naeRCuCU4sFjwO37yb/tmYk1BQA2/L1/H2r0fVoZwtA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.4.5", + "@tiptap/pm": "^3.4.5" + } + }, "node_modules/@tiptap/extension-ordered-list": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.0.7.tgz", @@ -3563,6 +3725,20 @@ "@tiptap/core": "^3.0.7" } }, + "node_modules/@tiptap/extension-text-style": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.0.7.tgz", + "integrity": "sha512-naJ1XxlbFJ1qlpA+i54lQYKuhWP1dnkUslM86OT0TZt0zJBeu7LIrqSOVGmMB++lF/btnQLMnYkYSSnkLgIw3A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.0.7" + } + }, "node_modules/@tiptap/extension-typography": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-3.0.7.tgz", @@ -3696,11 +3872,31 @@ "@tiptap/pm": "^3.4.2" } }, + "node_modules/@tiptap/y-tiptap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tiptap/y-tiptap/-/y-tiptap-3.0.0.tgz", + "integrity": "sha512-HIeJZCj+KYJde2x6fONzo4o6kd7gW7eonwhQsv2p2VQnUgwNXMVhN+D6Z3AH/2i541Sq33y1PO4U/1ThCPjqbA==", + "license": "MIT", + "peer": true, + "dependencies": { + "lib0": "^0.2.100" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.7.1", + "prosemirror-state": "^1.2.3", + "prosemirror-view": "^1.9.10", + "y-protocols": "^1.0.1", + "yjs": "^13.5.38" + } + }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dev": true + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/d3": { "version": "7.4.3", @@ -4453,6 +4649,18 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4598,7 +4806,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -4691,7 +4898,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", - "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -4967,7 +5173,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", - "dev": true, + "devOptional": true, "license": "MIT/X11" }, "node_modules/buffer-crc32": { @@ -5500,7 +5706,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1", @@ -5513,7 +5718,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -5621,7 +5825,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/colors": { @@ -5690,7 +5894,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -5782,7 +5985,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -5816,6 +6018,31 @@ "node": ">=4" } }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/cypress": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", @@ -6471,6 +6698,22 @@ "node": ">=0.10" } }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", @@ -6493,6 +6736,15 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/deep-eql": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", @@ -6583,8 +6835,7 @@ "node_modules/devalue": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", - "dev": true + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==" }, "node_modules/devlop": { "version": "1.1.0", @@ -7128,7 +7379,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "dev": true, "license": "MIT" }, "node_modules/espree": { @@ -7876,7 +8126,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -7988,6 +8238,21 @@ "node": ">=12.0.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/html-entities": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.3.tgz", @@ -8056,6 +8321,22 @@ "entities": "^4.5.0" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -8070,6 +8351,22 @@ "node": ">=0.10" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -8200,7 +8497,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -8418,6 +8715,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -8521,6 +8827,73 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "node_modules/jsdom": { + "version": "24.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", + "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -8643,7 +9016,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, "engines": { "node": ">=6" } @@ -8762,7 +9134,7 @@ "version": "1.29.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", - "dev": true, + "devOptional": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^1.0.3" @@ -8794,7 +9166,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8815,7 +9186,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8836,7 +9206,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8857,7 +9226,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8878,7 +9246,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8899,7 +9266,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8920,7 +9286,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8941,7 +9306,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8962,7 +9326,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8983,7 +9346,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9001,7 +9363,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" @@ -9120,8 +9482,7 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" }, "node_modules/locate-path": { "version": "6.0.0", @@ -9380,8 +9741,7 @@ "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" }, "node_modules/mdurl": { "version": "2.0.0", @@ -9655,7 +10015,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, "engines": { "node": ">=4" } @@ -9664,7 +10023,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -9749,6 +10107,15 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -10098,7 +10465,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", @@ -10109,7 +10475,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -10118,7 +10483,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dev": true, "dependencies": { "@types/estree": "*" } @@ -10214,7 +10578,6 @@ "version": "8.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -10345,7 +10708,6 @@ "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, "funding": [ { "type": "github", @@ -11142,6 +11504,15 @@ "points-on-path": "^0.2.1" } }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -11183,7 +11554,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, + "devOptional": true, "dependencies": { "tslib": "^2.1.0" } @@ -11192,7 +11563,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, "dependencies": { "mri": "^1.1.0" }, @@ -11282,7 +11652,7 @@ "version": "1.81.0", "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.81.0.tgz", "integrity": "sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@bufbuild/protobuf": "^2.0.0", @@ -11330,7 +11700,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11347,7 +11716,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11364,7 +11732,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11381,7 +11748,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11398,7 +11764,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11415,7 +11780,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11432,7 +11796,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11449,7 +11812,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11466,7 +11828,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11483,7 +11844,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11500,7 +11860,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11517,7 +11876,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11534,7 +11892,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11551,7 +11908,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11568,7 +11924,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11585,7 +11940,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11602,7 +11956,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11619,7 +11972,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11636,7 +11988,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11653,7 +12004,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11667,7 +12017,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11679,6 +12029,21 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -11693,8 +12058,7 @@ "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, "node_modules/set-function-length": { "version": "1.2.2", @@ -11817,7 +12181,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", - "dev": true, "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", @@ -11908,7 +12271,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12168,7 +12530,6 @@ "version": "4.2.19", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -12249,7 +12610,6 @@ "version": "0.16.0", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", - "dev": true, "engines": { "node": "^12.20 || ^14.13.1 || >= 16" }, @@ -12332,7 +12692,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -12341,7 +12700,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dev": true, "dependencies": { "@types/estree": "*" } @@ -12356,6 +12714,15 @@ "node": ">=12.0.0" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/symlink-or-copy": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", @@ -12366,7 +12733,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "sync-message-port": "^1.0.0" @@ -12379,7 +12746,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=16.0.0" @@ -12588,7 +12955,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12618,6 +12984,21 @@ "node": ">= 4.0.0" } }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -12844,7 +13225,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/vega": { @@ -13353,7 +13734,6 @@ "version": "5.4.19", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", @@ -13457,7 +13837,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "aix" @@ -13473,7 +13852,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -13489,7 +13867,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -13505,7 +13882,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -13521,7 +13897,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -13537,7 +13912,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -13553,7 +13927,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -13569,7 +13942,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -13585,7 +13957,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13601,7 +13972,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13617,7 +13987,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13633,7 +14002,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13649,7 +14017,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13665,7 +14032,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13681,7 +14047,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13697,7 +14062,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13713,7 +14077,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -13729,7 +14092,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -13745,7 +14107,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -13761,7 +14122,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -13777,7 +14137,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -13793,7 +14152,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -13809,7 +14167,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -13822,7 +14179,6 @@ "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -13860,7 +14216,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", - "dev": true, "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, @@ -14112,6 +14467,21 @@ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/walk-sync": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", @@ -14150,6 +14520,18 @@ "node": "*" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -14173,6 +14555,22 @@ "node": ">=18" } }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/wheel": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", @@ -14320,6 +14718,27 @@ } } }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/xmlhttprequest-ssl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", @@ -14366,6 +14785,7 @@ "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", "license": "MIT", + "peer": true, "dependencies": { "lib0": "^0.2.85" }, diff --git a/package.json b/package.json index a5dce94bc5..6d0aa8f5d5 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,6 @@ "vega-lite": "^6.4.1", "vite-plugin-static-copy": "^2.2.0", "y-prosemirror": "^1.3.7", - "y-protocols": "^1.0.6", "yaml": "^2.7.1", "yjs": "^13.6.27" }, From 4f6de989094c155c39d0f36f77e10325f296e32b Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Sat, 15 Nov 2025 09:01:45 +0800 Subject: [PATCH 03/12] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8github=20workfl?= =?UTF-8?q?ow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 7 +- .github/workflows/docker-build.yaml | 741 +---------- .../build-release.yml | 0 .../codespell.disabled | 0 .../deploy-to-hf-spaces.yml | 0 .github/workflows_bak/docker-build.yaml | 800 ++++++++++++ .../format-backend.yaml | 0 .../format-build-frontend.yaml | 0 .../integration-test.disabled | 0 .../lint-backend.disabled | 0 .../lint-frontend.disabled | 0 .../release-pypi.yml | 0 .gitignore | 1 + Dockerfile | 2 +- docs/DOCKER-DEPLOYMENT.md | 1088 +++++++++++++++++ docs/LOCAL-PUSH-GUIDE.md | 676 ++++++++++ scripts/README.md | 322 +++++ scripts/build-and-push.sh | 215 ++++ scripts/quick-build.sh | 29 + scripts/simulate-workflow.sh | 181 +++ 20 files changed, 3340 insertions(+), 722 deletions(-) rename .github/{workflows => workflows_bak}/build-release.yml (100%) rename .github/{workflows => workflows_bak}/codespell.disabled (100%) rename .github/{workflows => workflows_bak}/deploy-to-hf-spaces.yml (100%) create mode 100644 .github/workflows_bak/docker-build.yaml rename .github/{workflows => workflows_bak}/format-backend.yaml (100%) rename .github/{workflows => workflows_bak}/format-build-frontend.yaml (100%) rename .github/{workflows => workflows_bak}/integration-test.disabled (100%) rename .github/{workflows => workflows_bak}/lint-backend.disabled (100%) rename .github/{workflows => workflows_bak}/lint-frontend.disabled (100%) rename .github/{workflows => workflows_bak}/release-pypi.yml (100%) create mode 100644 docs/DOCKER-DEPLOYMENT.md create mode 100644 docs/LOCAL-PUSH-GUIDE.md create mode 100644 scripts/README.md create mode 100755 scripts/build-and-push.sh create mode 100755 scripts/quick-build.sh create mode 100755 scripts/simulate-workflow.sh diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6435e5e35e..4f9852e81a 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,7 +1,12 @@ { "permissions": { "allow": [ - "Bash(tree:*)" + "Bash(tree:*)", + "Bash(pip show:*)", + "Bash(git rev-parse:*)", + "Bash(chmod:*)", + "Bash(test:*)", + "Bash(lsof:*)" ], "deny": [], "ask": [] diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index a8f9266e9d..f6216b10f7 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -1,11 +1,10 @@ -name: Create and publish Docker images with specific build args +name: Build and Push Docker Image (Production) on: workflow_dispatch: push: branches: - main - - dev tags: - v* @@ -13,429 +12,14 @@ env: REGISTRY: ghcr.io jobs: - build-main-image: - runs-on: ${{ matrix.runner }} - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-24.04-arm - - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@v5 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (default latest tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - - - name: Extract metadata for Docker cache - id: cache-meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} - flavor: | - prefix=cache-${{ matrix.platform }}- - latest=false - - - name: Build Docker image (latest) - uses: docker/build-push-action@v5 - id: build - with: - context: . - push: true - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} - cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max - build-args: | - BUILD_HASH=${{ github.sha }} - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-main-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - build-cuda-image: - runs-on: ${{ matrix.runner }} - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-24.04-arm - - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@v5 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (cuda tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-cuda,onlatest=true - - - name: Extract metadata for Docker cache - id: cache-meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} - flavor: | - prefix=cache-cuda-${{ matrix.platform }}- - latest=false - - - name: Build Docker image (cuda) - uses: docker/build-push-action@v5 - id: build - with: - context: . - push: true - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} - cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max - build-args: | - BUILD_HASH=${{ github.sha }} - USE_CUDA=true - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-cuda-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - build-cuda126-image: - runs-on: ${{ matrix.runner }} - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-24.04-arm - - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@v5 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (cuda126 tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda126 - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-cuda126,onlatest=true - - - name: Extract metadata for Docker cache - id: cache-meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} - flavor: | - prefix=cache-cuda126-${{ matrix.platform }}- - latest=false - - - name: Build Docker image (cuda126) - uses: docker/build-push-action@v5 - id: build - with: - context: . - push: true - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} - cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max - build-args: | - BUILD_HASH=${{ github.sha }} - USE_CUDA=true - USE_CUDA_VER=cu126 - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-cuda126-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - build-ollama-image: - runs-on: ${{ matrix.runner }} - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-24.04-arm - - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@v5 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (ollama tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=ollama - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-ollama,onlatest=true - - - name: Extract metadata for Docker cache - id: cache-meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} - flavor: | - prefix=cache-ollama-${{ matrix.platform }}- - latest=false - - - name: Build Docker image (ollama) - uses: docker/build-push-action@v5 - id: build - with: - context: . - push: true - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} - cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max - build-args: | - BUILD_HASH=${{ github.sha }} - USE_OLLAMA=true - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-ollama-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - build-slim-image: - runs-on: ${{ matrix.runner }} + name: Build Slim Image (amd64) + runs-on: ubuntu-latest permissions: contents: read packages: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-24.04-arm steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - name: Set repository and image name to lowercase run: | echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} @@ -443,28 +27,20 @@ jobs: env: IMAGE_NAME: '${{ github.repository }}' - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - name: Checkout repository uses: actions/checkout@v5 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Log in to the Container registry + - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata for Docker images (slim tag) + - name: Extract metadata for Docker images id: meta uses: docker/metadata-action@v5 with: @@ -489,312 +65,37 @@ jobs: type=ref,event=branch ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} flavor: | - prefix=cache-slim-${{ matrix.platform }}- + prefix=cache-slim-linux-amd64- latest=false - - name: Build Docker image (slim) + - name: Build and push Docker image (slim) uses: docker/build-push-action@v5 - id: build with: context: . push: true - platforms: ${{ matrix.platform }} + platforms: linux/amd64 + tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max build-args: | BUILD_HASH=${{ github.sha }} USE_SLIM=true - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-slim-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - merge-main-images: - runs-on: ubuntu-latest - needs: [build-main-image] - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Download digests - uses: actions/download-artifact@v5 - with: - pattern: digests-main-* - path: /tmp/digests - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (default latest tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) - - name: Inspect image run: | docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} - merge-cuda-images: - runs-on: ubuntu-latest - needs: [build-cuda-image] - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase + - name: Output image tags run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Download digests - uses: actions/download-artifact@v5 - with: - pattern: digests-cuda-* - path: /tmp/digests - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (default latest tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-cuda,onlatest=true - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} - - merge-cuda126-images: - runs-on: ubuntu-latest - needs: [build-cuda126-image] - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Download digests - uses: actions/download-artifact@v5 - with: - pattern: digests-cuda126-* - path: /tmp/digests - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (default latest tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda126 - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-cuda126,onlatest=true - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} - - merge-ollama-images: - runs-on: ubuntu-latest - needs: [build-ollama-image] - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Download digests - uses: actions/download-artifact@v5 - with: - pattern: digests-ollama-* - path: /tmp/digests - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (default ollama tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=ollama - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-ollama,onlatest=true - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} - - merge-slim-images: - runs-on: ubuntu-latest - needs: [build-slim-image] - steps: - # GitHub Packages requires the entire repository name to be in lowercase - # although the repository owner has a lowercase username, this prevents some people from running actions after forking - - name: Set repository and image name to lowercase - run: | - echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} - echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} - env: - IMAGE_NAME: '${{ github.repository }}' - - - name: Download digests - uses: actions/download-artifact@v5 - with: - pattern: digests-slim-* - path: /tmp/digests - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker images (default slim tag) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.FULL_IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=sha,prefix=git- - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=slim - flavor: | - latest=${{ github.ref == 'refs/heads/main' }} - suffix=-slim,onlatest=true - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} + echo "## 🐳 Docker 镜像构建成功" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**镜像标签:**" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**拉取命令:**" >> $GITHUB_STEP_SUMMARY + echo '```bash' >> $GITHUB_STEP_SUMMARY + echo "docker pull ${{ env.FULL_IMAGE_NAME }}:slim" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/build-release.yml b/.github/workflows_bak/build-release.yml similarity index 100% rename from .github/workflows/build-release.yml rename to .github/workflows_bak/build-release.yml diff --git a/.github/workflows/codespell.disabled b/.github/workflows_bak/codespell.disabled similarity index 100% rename from .github/workflows/codespell.disabled rename to .github/workflows_bak/codespell.disabled diff --git a/.github/workflows/deploy-to-hf-spaces.yml b/.github/workflows_bak/deploy-to-hf-spaces.yml similarity index 100% rename from .github/workflows/deploy-to-hf-spaces.yml rename to .github/workflows_bak/deploy-to-hf-spaces.yml diff --git a/.github/workflows_bak/docker-build.yaml b/.github/workflows_bak/docker-build.yaml new file mode 100644 index 0000000000..a8f9266e9d --- /dev/null +++ b/.github/workflows_bak/docker-build.yaml @@ -0,0 +1,800 @@ +name: Create and publish Docker images with specific build args + +on: + workflow_dispatch: + push: + branches: + - main + - dev + tags: + - v* + +env: + REGISTRY: ghcr.io + +jobs: + build-main-image: + runs-on: ${{ matrix.runner }} + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-24.04-arm + + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (default latest tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + + - name: Extract metadata for Docker cache + id: cache-meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} + flavor: | + prefix=cache-${{ matrix.platform }}- + latest=false + + - name: Build Docker image (latest) + uses: docker/build-push-action@v5 + id: build + with: + context: . + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} + cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max + build-args: | + BUILD_HASH=${{ github.sha }} + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-main-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + build-cuda-image: + runs-on: ${{ matrix.runner }} + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-24.04-arm + + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (cuda tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-cuda,onlatest=true + + - name: Extract metadata for Docker cache + id: cache-meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} + flavor: | + prefix=cache-cuda-${{ matrix.platform }}- + latest=false + + - name: Build Docker image (cuda) + uses: docker/build-push-action@v5 + id: build + with: + context: . + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} + cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max + build-args: | + BUILD_HASH=${{ github.sha }} + USE_CUDA=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-cuda-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + build-cuda126-image: + runs-on: ${{ matrix.runner }} + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-24.04-arm + + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (cuda126 tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda126 + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-cuda126,onlatest=true + + - name: Extract metadata for Docker cache + id: cache-meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} + flavor: | + prefix=cache-cuda126-${{ matrix.platform }}- + latest=false + + - name: Build Docker image (cuda126) + uses: docker/build-push-action@v5 + id: build + with: + context: . + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} + cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max + build-args: | + BUILD_HASH=${{ github.sha }} + USE_CUDA=true + USE_CUDA_VER=cu126 + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-cuda126-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + build-ollama-image: + runs-on: ${{ matrix.runner }} + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-24.04-arm + + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (ollama tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=ollama + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-ollama,onlatest=true + + - name: Extract metadata for Docker cache + id: cache-meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} + flavor: | + prefix=cache-ollama-${{ matrix.platform }}- + latest=false + + - name: Build Docker image (ollama) + uses: docker/build-push-action@v5 + id: build + with: + context: . + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} + cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max + build-args: | + BUILD_HASH=${{ github.sha }} + USE_OLLAMA=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-ollama-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + build-slim-image: + runs-on: ${{ matrix.runner }} + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-24.04-arm + + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (slim tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=slim + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-slim,onlatest=true + + - name: Extract metadata for Docker cache + id: cache-meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + ${{ github.ref_type == 'tag' && 'type=raw,value=main' || '' }} + flavor: | + prefix=cache-slim-${{ matrix.platform }}- + latest=false + + - name: Build Docker image (slim) + uses: docker/build-push-action@v5 + id: build + with: + context: . + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.FULL_IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }} + cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max + build-args: | + BUILD_HASH=${{ github.sha }} + USE_SLIM=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-slim-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge-main-images: + runs-on: ubuntu-latest + needs: [build-main-image] + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Download digests + uses: actions/download-artifact@v5 + with: + pattern: digests-main-* + path: /tmp/digests + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (default latest tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} + + merge-cuda-images: + runs-on: ubuntu-latest + needs: [build-cuda-image] + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Download digests + uses: actions/download-artifact@v5 + with: + pattern: digests-cuda-* + path: /tmp/digests + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (default latest tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-cuda,onlatest=true + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} + + merge-cuda126-images: + runs-on: ubuntu-latest + needs: [build-cuda126-image] + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Download digests + uses: actions/download-artifact@v5 + with: + pattern: digests-cuda126-* + path: /tmp/digests + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (default latest tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=cuda126 + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-cuda126,onlatest=true + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} + + merge-ollama-images: + runs-on: ubuntu-latest + needs: [build-ollama-image] + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Download digests + uses: actions/download-artifact@v5 + with: + pattern: digests-ollama-* + path: /tmp/digests + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (default ollama tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=ollama + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-ollama,onlatest=true + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} + + merge-slim-images: + runs-on: ubuntu-latest + needs: [build-slim-image] + steps: + # GitHub Packages requires the entire repository name to be in lowercase + # although the repository owner has a lowercase username, this prevents some people from running actions after forking + - name: Set repository and image name to lowercase + run: | + echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV} + echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV} + env: + IMAGE_NAME: '${{ github.repository }}' + + - name: Download digests + uses: actions/download-artifact@v5 + with: + pattern: digests-slim-* + path: /tmp/digests + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker images (default slim tag) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.FULL_IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha,prefix=git- + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,enable=${{ github.ref == 'refs/heads/main' }},prefix=,suffix=,value=slim + flavor: | + latest=${{ github.ref == 'refs/heads/main' }} + suffix=-slim,onlatest=true + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.FULL_IMAGE_NAME }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.FULL_IMAGE_NAME }}:${{ steps.meta.outputs.version }} diff --git a/.github/workflows/format-backend.yaml b/.github/workflows_bak/format-backend.yaml similarity index 100% rename from .github/workflows/format-backend.yaml rename to .github/workflows_bak/format-backend.yaml diff --git a/.github/workflows/format-build-frontend.yaml b/.github/workflows_bak/format-build-frontend.yaml similarity index 100% rename from .github/workflows/format-build-frontend.yaml rename to .github/workflows_bak/format-build-frontend.yaml diff --git a/.github/workflows/integration-test.disabled b/.github/workflows_bak/integration-test.disabled similarity index 100% rename from .github/workflows/integration-test.disabled rename to .github/workflows_bak/integration-test.disabled diff --git a/.github/workflows/lint-backend.disabled b/.github/workflows_bak/lint-backend.disabled similarity index 100% rename from .github/workflows/lint-backend.disabled rename to .github/workflows_bak/lint-backend.disabled diff --git a/.github/workflows/lint-frontend.disabled b/.github/workflows_bak/lint-frontend.disabled similarity index 100% rename from .github/workflows/lint-frontend.disabled rename to .github/workflows_bak/lint-frontend.disabled diff --git a/.github/workflows/release-pypi.yml b/.github/workflows_bak/release-pypi.yml similarity index 100% rename from .github/workflows/release-pypi.yml rename to .github/workflows_bak/release-pypi.yml diff --git a/.gitignore b/.gitignore index 0d048b2624..15c359e794 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ share/python-wheels/ .installed.cfg *.egg MANIFEST +data # PyInstaller # Usually these files are written by a python script from a template diff --git a/Dockerfile b/Dockerfile index ad393338d8..7555433aaf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ FROM --platform=$BUILDPLATFORM node:22-alpine3.20 AS build ARG BUILD_HASH # Set Node.js options (heap limit Allocation failed - JavaScript heap out of memory) -# ENV NODE_OPTIONS="--max-old-space-size=4096" +ENV NODE_OPTIONS="--max-old-space-size=4096" WORKDIR /app diff --git a/docs/DOCKER-DEPLOYMENT.md b/docs/DOCKER-DEPLOYMENT.md new file mode 100644 index 0000000000..b63b408476 --- /dev/null +++ b/docs/DOCKER-DEPLOYMENT.md @@ -0,0 +1,1088 @@ +# Open WebUI Docker 生产环境部署指南 + +本指南介绍如何在生产环境中部署 Open WebUI Docker 镜像,并连接到外部 MySQL 数据库。 + +## 目录 + +- [镜像说明](#镜像说明) +- [镜像获取方式](#镜像获取方式) +- [前置准备](#前置准备) +- [快速开始](#快速开始) +- [MySQL 数据库配置](#mysql-数据库配置) +- [环境变量完整列表](#环境变量完整列表) +- [高级配置](#高级配置) +- [故障排查](#故障排查) + +--- + +## 镜像说明 + +### 镜像仓库 +``` +ghcr.io//open-webui-next:slim +``` + +### 镜像特性 +- **架构**: linux/amd64 (x86_64) +- **变体**: Slim 精简版(不预装 AI 模型,首次运行时自动下载) +- **包含**: 前端 (SvelteKit) + 后端 (FastAPI) +- **不包含**: 数据库服务(需要外部 MySQL) + +### 镜像标签规则 + +| 标签 | 说明 | 示例 | +|------|------|------| +| `slim` | 主分支最新精简版 | `ghcr.io/user/repo:slim` | +| `main-slim` | 主分支最新构建 | `ghcr.io/user/repo:main-slim` | +| `v1.2.3-slim` | 版本标签 | `ghcr.io/user/repo:v1.2.3-slim` | +| `git-abc1234-slim` | Git commit SHA | `ghcr.io/user/repo:git-abc1234-slim` | + +--- + +## 镜像获取方式 + +### 从 GitHub Container Registry (GHCR) 拉取 + +#### 方式一:拉取公开镜像(推荐) + +如果仓库是公开的,直接拉取即可: + +```bash +# 拉取最新 slim 版本 +docker pull ghcr.io//open-webui-next:slim + +# 拉取特定版本标签 +docker pull ghcr.io//open-webui-next:v1.2.3-slim + +# 拉取特定 Git commit +docker pull ghcr.io//open-webui-next:git-abc1234-slim +``` + +验证镜像拉取成功: + +```bash +# 查看本地镜像列表 +docker images | grep open-webui-next + +# 查看镜像详细信息 +docker inspect ghcr.io//open-webui-next:slim +``` + +#### 方式二:拉取私有镜像(需要认证) + +如果仓库是私有的,需要先登录 GHCR: + +**步骤 1: 创建 GitHub Personal Access Token (PAT)** + +1. 访问 GitHub Settings → Developer settings → Personal access tokens → Tokens (classic) +2. 点击 "Generate new token (classic)" +3. 设置以下权限: + - `read:packages` - 读取容器镜像 + - `write:packages` - (可选) 推送镜像 +4. 生成并保存 Token (只显示一次) + +**步骤 2: 登录 GHCR** + +```bash +# 使用 PAT 登录 +echo "YOUR_PERSONAL_ACCESS_TOKEN" | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin + +# 或交互式输入密码 +docker login ghcr.io -u YOUR_GITHUB_USERNAME +# Password: [输入 PAT] +``` + +登录成功后会显示: +``` +Login Succeeded +``` + +**步骤 3: 拉取镜像** + +```bash +docker pull ghcr.io//open-webui-next:slim +``` + +**步骤 4: 退出登录(可选)** + +```bash +docker logout ghcr.io +``` + +### 生产服务器部署流程 + +#### 场景一:单服务器部署 + +```bash +# 1. SSH 登录生产服务器 +ssh user@production-server + +# 2. 登录 GHCR (如果是私有仓库) +echo "YOUR_PAT" | docker login ghcr.io -u YOUR_USERNAME --password-stdin + +# 3. 拉取最新镜像 +docker pull ghcr.io//open-webui-next:slim + +# 4. 停止旧容器 (如果存在) +docker stop open-webui || true +docker rm open-webui || true + +# 5. 启动新容器 +docker run -d \ + --name open-webui \ + --restart unless-stopped \ + -p 8080:8080 \ + -e DATABASE_URL="mysql://..." \ + -v /data/open-webui/data:/app/backend/data \ + ghcr.io//open-webui-next:slim + +# 6. 验证部署 +docker ps | grep open-webui +curl -f http://localhost:8080/health || echo "Health check failed" +``` + +#### 场景二:CI/CD 自动化部署 + +**GitHub Actions 自动部署示例**: + +```yaml +# .github/workflows/deploy.yml +name: Deploy to Production + +on: + workflow_run: + workflows: ["Build and Push Docker Image (Production)"] + types: + - completed + +jobs: + deploy: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + + steps: + - name: Deploy to server + uses: appleboy/ssh-action@v1.0.0 + with: + host: ${{ secrets.PROD_SERVER_HOST }} + username: ${{ secrets.PROD_SERVER_USER }} + key: ${{ secrets.PROD_SERVER_SSH_KEY }} + script: | + # 拉取最新镜像 + docker pull ghcr.io/${{ github.repository }}:slim + + # 滚动更新 + docker stop open-webui || true + docker rm open-webui || true + + docker run -d \ + --name open-webui \ + --restart unless-stopped \ + -p 8080:8080 \ + --env-file /opt/openwebui/.env \ + -v /data/open-webui/data:/app/backend/data \ + ghcr.io/${{ github.repository }}:slim + + # 健康检查 + sleep 10 + docker ps | grep open-webui + curl -f http://localhost:8080/health +``` + +#### 场景三:多服务器部署(使用镜像同步) + +如果有多台服务器,可以先拉取到一台,然后导出/导入: + +```bash +# 服务器 A: 从 GHCR 拉取 +docker pull ghcr.io//open-webui-next:slim + +# 导出镜像到文件 +docker save ghcr.io//open-webui-next:slim | gzip > open-webui-slim.tar.gz + +# 传输到其他服务器 +scp open-webui-slim.tar.gz user@server-b:/tmp/ +scp open-webui-slim.tar.gz user@server-c:/tmp/ + +# 服务器 B/C: 导入镜像 +gunzip -c /tmp/open-webui-slim.tar.gz | docker load +``` + +### 镜像更新策略 + +#### 自动更新(使用 Watchtower) + +```bash +# 部署 Watchtower 容器监控镜像更新 +docker run -d \ + --name watchtower \ + --restart unless-stopped \ + -v /var/run/docker.sock:/var/run/docker.sock \ + containrrr/watchtower \ + --interval 3600 \ + --cleanup \ + open-webui +``` + +Watchtower 会每小时检查一次 `open-webui` 容器的镜像更新,如果有新版本会自动拉取并重启容器。 + +#### 手动更新(推荐生产环境) + +```bash +# 1. 拉取最新镜像 +docker pull ghcr.io//open-webui-next:slim + +# 2. 检查镜像是否有更新 +OLD_ID=$(docker inspect --format='{{.Image}}' open-webui) +NEW_ID=$(docker inspect --format='{{.Id}}' ghcr.io//open-webui-next:slim) + +if [ "$OLD_ID" != "$NEW_ID" ]; then + echo "New image available, updating..." + + # 3. 备份当前容器配置 + docker inspect open-webui > /backup/open-webui-config-$(date +%Y%m%d).json + + # 4. 停止并删除旧容器 + docker stop open-webui + docker rm open-webui + + # 5. 启动新容器 + docker run -d \ + --name open-webui \ + --restart unless-stopped \ + -p 8080:8080 \ + --env-file /opt/openwebui/.env \ + -v /data/open-webui/data:/app/backend/data \ + ghcr.io//open-webui-next:slim + + # 6. 清理旧镜像 + docker image prune -f +else + echo "Already up to date" +fi +``` + +### 镜像访问故障排查 + +#### 问题 1: 拉取失败 - 认证错误 + +``` +Error response from daemon: unauthorized: authentication required +``` + +**解决方案**: +- 检查是否已登录: `docker info | grep Username` +- 重新登录: `docker login ghcr.io -u YOUR_USERNAME` +- 确认 PAT 有 `read:packages` 权限 +- 确认仓库可见性(公开/私有) + +#### 问题 2: 拉取失败 - 网络超时 + +``` +Error response from daemon: Get https://ghcr.io/v2/: dial tcp: i/o timeout +``` + +**解决方案**: +```bash +# 检查 DNS 解析 +nslookup ghcr.io + +# 检查网络连接 +ping ghcr.io +curl -I https://ghcr.io + +# 配置 Docker 镜像代理(如果在国内服务器) +# /etc/docker/daemon.json +{ + "registry-mirrors": [ + "https://mirror.gcr.io" + ] +} + +# 重启 Docker +sudo systemctl restart docker +``` + +#### 问题 3: 拉取失败 - 镜像不存在 + +``` +Error response from daemon: manifest for ghcr.io/user/repo:slim not found +``` + +**解决方案**: +- 确认镜像名称和标签拼写正确 +- 检查 GitHub Actions 构建是否成功 +- 查看仓库 Packages 页面确认镜像已发布 +- 使用 `docker search ghcr.io/` 搜索可用镜像 + +#### 问题 4: 权限不足 + +``` +Error response from daemon: pull access denied for ghcr.io/user/repo +``` + +**解决方案**: +- 确认 GitHub 用户有仓库访问权限 +- 如果是组织仓库,确认用户在组织中 +- 管理员在仓库 Settings → Actions → General → Workflow permissions 中启用 "Read and write permissions" + +--- + +## 前置准备 + +### 1. MySQL 数据库准备 + +在您的 MySQL 服务器上创建数据库和用户: + +```sql +-- 创建数据库 +CREATE DATABASE openwebui CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- 创建用户并授权(替换密码) +CREATE USER 'openwebui'@'%' IDENTIFIED BY 'your_secure_password'; +GRANT ALL PRIVILEGES ON openwebui.* TO 'openwebui'@'%'; +FLUSH PRIVILEGES; + +-- 验证创建 +SHOW DATABASES LIKE 'openwebui'; +SELECT User, Host FROM mysql.user WHERE User = 'openwebui'; +``` + +**安全建议**: +- 生产环境使用强密码(至少 16 位,包含大小写字母、数字、特殊字符) +- 如果 MySQL 和 Docker 在同一网络,限制 `Host` 为具体 IP 而非 `%` +- 启用 MySQL SSL 连接(见高级配置) + +### 2. 网络连通性检查 + +确保 Docker 容器可以访问 MySQL 服务器: + +```bash +# 在 Docker 宿主机测试 MySQL 连接 +mysql -h -P 3306 -u openwebui -p + +# 或使用 telnet 测试端口 +telnet 3306 +``` + +### 3. 数据持久化目录 + +创建用于挂载的数据目录: + +```bash +mkdir -p /data/open-webui/data +chmod 755 /data/open-webui/data +``` + +--- + +## 快速开始 + +### 方式一:使用环境变量(推荐) + +```bash +docker run -d \ + --name open-webui \ + --restart unless-stopped \ + -p 8080:8080 \ + -e DATABASE_URL="mysql://openwebui:your_secure_password@mysql.example.com:3306/openwebui" \ + -v /data/open-webui/data:/app/backend/data \ + ghcr.io//open-webui-next:slim +``` + +### 方式二:使用分离的数据库环境变量 + +```bash +docker run -d \ + --name open-webui \ + --restart unless-stopped \ + -p 8080:8080 \ + -e DATABASE_TYPE="mysql" \ + -e DATABASE_HOST="mysql.example.com" \ + -e DATABASE_PORT="3306" \ + -e DATABASE_NAME="openwebui" \ + -e DATABASE_USER="openwebui" \ + -e DATABASE_PASSWORD="your_secure_password" \ + -v /data/open-webui/data:/app/backend/data \ + ghcr.io//open-webui-next:slim +``` + +### 方式三:使用 .env 文件(推荐生产环境) + +创建 `.env` 文件: + +```bash +# .env +DATABASE_URL=mysql://openwebui:your_secure_password@mysql.example.com:3306/openwebui +WEBUI_NAME=Open WebUI Production +WEBUI_SECRET_KEY=your_random_secret_key_here +``` + +运行容器: + +```bash +docker run -d \ + --name open-webui \ + --restart unless-stopped \ + -p 8080:8080 \ + --env-file .env \ + -v /data/open-webui/data:/app/backend/data \ + ghcr.io//open-webui-next:slim +``` + +--- + +## MySQL 数据库配置 + +### 数据库连接方式 + +#### 选项 1: 使用完整 DATABASE_URL(推荐) + +```bash +# 标准 MySQL 连接 +DATABASE_URL=mysql://username:password@host:port/database + +# 带参数的连接(UTF-8 编码) +DATABASE_URL=mysql://username:password@host:port/database?charset=utf8mb4 + +# MySQL 8.0+ 使用 PyMySQL 驱动 +DATABASE_URL=mysql+pymysql://username:password@host:port/database + +# SSL 连接 +DATABASE_URL=mysql://username:password@host:port/database?ssl=true +``` + +#### 选项 2: 使用分离的环境变量 + +```bash +DATABASE_TYPE=mysql # 数据库类型 +DATABASE_HOST=mysql.example.com # 主机地址 +DATABASE_PORT=3306 # 端口 +DATABASE_NAME=openwebui # 数据库名 +DATABASE_USER=openwebui # 用户名 +DATABASE_PASSWORD=password # 密码 +``` + +### 支持的数据库类型 + +| 数据库 | DATABASE_TYPE | 驱动 | 示例 URL | +|--------|---------------|------|----------| +| MySQL 5.7+ | `mysql` | mysqlclient | `mysql://user:pass@host/db` | +| MySQL 8.0+ | `mysql+pymysql` | pymysql | `mysql+pymysql://user:pass@host/db` | +| PostgreSQL | `postgresql` | psycopg2 | `postgresql://user:pass@host/db` | +| SQLite | `sqlite` | 内置 | `sqlite:///path/to/db.db` | + +### 数据库性能优化 + +#### 连接池配置 + +```bash +# 连接池大小(默认:10) +DATABASE_POOL_SIZE=20 + +# 最大溢出连接数(默认:0) +DATABASE_POOL_MAX_OVERFLOW=10 + +# 连接回收时间(秒,防止断线) +DATABASE_POOL_RECYCLE=3600 + +# 连接超时时间(秒) +DATABASE_CONNECT_TIMEOUT=10 +``` + +#### MySQL 特定优化 + +在 MySQL 服务器配置文件 `my.cnf` 中: + +```ini +[mysqld] +# 连接数限制 +max_connections = 500 + +# InnoDB 缓冲池大小(推荐物理内存的 50-70%) +innodb_buffer_pool_size = 2G + +# 字符集 +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci + +# 二进制日志(用于备份和恢复) +log_bin = /var/log/mysql/mysql-bin.log +expire_logs_days = 7 +``` + +--- + +## 环境变量完整列表 + +### 数据库配置 + +| 环境变量 | 说明 | 默认值 | 示例 | +|---------|------|--------|------| +| `DATABASE_URL` | 完整数据库连接 URL | `sqlite:///{DATA_DIR}/webui.db` | `mysql://user:pass@host/db` | +| `DATABASE_TYPE` | 数据库类型 | - | `mysql`, `postgresql` | +| `DATABASE_HOST` | 数据库主机 | - | `mysql.example.com` | +| `DATABASE_PORT` | 数据库端口 | - | `3306` | +| `DATABASE_NAME` | 数据库名称 | - | `openwebui` | +| `DATABASE_USER` | 数据库用户名 | - | `openwebui` | +| `DATABASE_PASSWORD` | 数据库密码 | - | `password` | +| `DATABASE_SCHEMA` | 数据库 Schema | - | `public` | +| `DATABASE_POOL_SIZE` | 连接池大小 | `10` | `20` | +| `DATABASE_POOL_MAX_OVERFLOW` | 最大溢出连接 | `0` | `10` | + +### 应用基础配置 + +| 环境变量 | 说明 | 默认值 | 示例 | +|---------|------|--------|------| +| `WEBUI_NAME` | 应用名称 | `Open WebUI` | `My AI Platform` | +| `WEBUI_URL` | 外部访问 URL | `http://localhost:8080` | `https://ai.example.com` | +| `WEBUI_SECRET_KEY` | JWT 密钥(必须设置) | 自动生成 | 随机字符串 | +| `PORT` | 服务端口 | `8080` | `8080` | +| `HOST` | 监听地址 | `0.0.0.0` | `0.0.0.0` | +| `DATA_DIR` | 数据目录 | `/app/backend/data` | - | + +### 认证与安全 + +| 环境变量 | 说明 | 默认值 | 示例 | +|---------|------|--------|------| +| `WEBUI_AUTH` | 启用认证 | `true` | `true`, `false` | +| `WEBUI_AUTH_TRUSTED_EMAIL_HEADER` | 信任的邮箱 Header | - | `X-User-Email` | +| `DEFAULT_USER_ROLE` | 默认用户角色 | `pending` | `user`, `admin` | +| `ENABLE_SIGNUP` | 允许注册 | `true` | `true`, `false` | +| `JWT_EXPIRES_IN` | JWT 过期时间 | `30d` | `7d`, `24h` | + +### LLM 提供商配置 + +| 环境变量 | 说明 | 默认值 | +|---------|------|--------| +| `OPENAI_API_BASE_URL` | OpenAI API 基础 URL | `https://api.openai.com/v1` | +| `OPENAI_API_KEY` | OpenAI API 密钥 | - | +| `OLLAMA_BASE_URL` | Ollama 服务地址 | `http://localhost:11434` | +| `ANTHROPIC_API_KEY` | Claude API 密钥 | - | +| `GOOGLE_API_KEY` | Gemini API 密钥 | - | + +### RAG(向量数据库)配置 + +| 环境变量 | 说明 | 默认值 | +|---------|------|--------| +| `VECTOR_DB` | 向量数据库类型 | `chroma` | +| `CHROMA_DATA_PATH` | ChromaDB 数据路径 | `{DATA_DIR}/vector_db` | +| `QDRANT_URI` | Qdrant 连接地址 | - | +| `OPENSEARCH_URI` | OpenSearch 连接地址 | - | + +### 日志配置 + +| 环境变量 | 说明 | 默认值 | +|---------|------|--------| +| `GLOBAL_LOG_LEVEL` | 全局日志级别 | `INFO` | +| `LOG_LEVEL` | 应用日志级别 | `INFO` | +| `UVICORN_LOG_LEVEL` | Uvicorn 日志级别 | `info` | + +--- + +## 高级配置 + +### 1. 使用 Docker Compose(推荐) + +创建 `docker-compose.yml`: + +```yaml +version: '3.8' + +services: + open-webui: + image: ghcr.io//open-webui-next:slim + container_name: open-webui + restart: unless-stopped + ports: + - "8080:8080" + environment: + # 数据库配置 + DATABASE_URL: mysql://openwebui:${DB_PASSWORD}@mysql.example.com:3306/openwebui + + # 应用配置 + WEBUI_NAME: "Open WebUI Production" + WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY} + WEBUI_URL: https://ai.example.com + + # 认证配置 + ENABLE_SIGNUP: "false" + DEFAULT_USER_ROLE: "pending" + + # LLM 配置 + OPENAI_API_KEY: ${OPENAI_API_KEY} + OLLAMA_BASE_URL: http://ollama:11434 + + # 日志配置 + GLOBAL_LOG_LEVEL: INFO + + volumes: + - /data/open-webui/data:/app/backend/data + + # 健康检查 + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + # 资源限制 + deploy: + resources: + limits: + cpus: '2' + memory: 4G + reservations: + cpus: '1' + memory: 2G + + # 可选:如果需要在同一网络部署 Ollama + ollama: + image: ollama/ollama:latest + container_name: ollama + restart: unless-stopped + volumes: + - /data/ollama:/root/.ollama + deploy: + resources: + limits: + memory: 8G +``` + +创建 `.env` 文件(不要提交到 Git): + +```bash +# .env +DB_PASSWORD=your_secure_mysql_password +WEBUI_SECRET_KEY=your_random_secret_key_here +OPENAI_API_KEY=sk-your-openai-key +``` + +启动服务: + +```bash +docker-compose up -d +``` + +### 2. MySQL SSL 连接 + +如果 MySQL 启用了 SSL,配置连接: + +```bash +# 方式 1: 在 DATABASE_URL 中指定 +DATABASE_URL="mysql://user:pass@host/db?ssl=true&ssl_ca=/path/to/ca-cert.pem" + +# 方式 2: 使用环境变量 +DATABASE_SSL=true +DATABASE_SSL_CA=/path/to/ca-cert.pem +DATABASE_SSL_CERT=/path/to/client-cert.pem +DATABASE_SSL_KEY=/path/to/client-key.pem +``` + +挂载证书到容器: + +```bash +docker run -d \ + -v /path/to/certs:/certs:ro \ + -e DATABASE_URL="mysql://user:pass@host/db?ssl_ca=/certs/ca-cert.pem" \ + ghcr.io//open-webui-next:slim +``` + +### 3. 反向代理(Nginx) + +生产环境推荐在 Docker 前配置 Nginx 反向代理: + +```nginx +# /etc/nginx/sites-available/openwebui +upstream open_webui { + server 127.0.0.1:8080; +} + +server { + listen 80; + server_name ai.example.com; + + # HTTPS 重定向 + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl http2; + server_name ai.example.com; + + # SSL 证书 + ssl_certificate /etc/nginx/ssl/cert.pem; + ssl_certificate_key /etc/nginx/ssl/key.pem; + + # SSL 配置 + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers HIGH:!aNULL:!MD5; + + # 日志 + access_log /var/log/nginx/openwebui_access.log; + error_log /var/log/nginx/openwebui_error.log; + + # 客户端最大请求体大小(上传文件) + client_max_body_size 100M; + + location / { + proxy_pass http://open_webui; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # WebSocket 支持(用于实时聊天) + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # 超时配置 + proxy_connect_timeout 60s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } +} +``` + +启用配置: + +```bash +sudo ln -s /etc/nginx/sites-available/openwebui /etc/nginx/sites-enabled/ +sudo nginx -t +sudo systemctl reload nginx +``` + +### 4. 数据备份策略 + +#### MySQL 数据库备份 + +```bash +#!/bin/bash +# backup-mysql.sh + +BACKUP_DIR="/backup/mysql" +DATE=$(date +%Y%m%d_%H%M%S) +BACKUP_FILE="$BACKUP_DIR/openwebui_$DATE.sql.gz" + +# 创建备份目录 +mkdir -p $BACKUP_DIR + +# 备份数据库 +mysqldump -h mysql.example.com -u openwebui -p openwebui | gzip > $BACKUP_FILE + +# 删除 7 天前的备份 +find $BACKUP_DIR -name "openwebui_*.sql.gz" -mtime +7 -delete + +echo "Backup completed: $BACKUP_FILE" +``` + +设置 cron 定时任务: + +```bash +# 每天凌晨 2 点备份 +0 2 * * * /path/to/backup-mysql.sh +``` + +#### 数据目录备份 + +```bash +#!/bin/bash +# backup-data.sh + +BACKUP_DIR="/backup/openwebui" +DATE=$(date +%Y%m%d_%H%M%S) +DATA_DIR="/data/open-webui/data" + +mkdir -p $BACKUP_DIR + +# 备份数据目录(包含上传的文件、模型等) +tar -czf "$BACKUP_DIR/data_$DATE.tar.gz" -C "$DATA_DIR" . + +# 删除 30 天前的备份 +find $BACKUP_DIR -name "data_*.tar.gz" -mtime +30 -delete + +echo "Data backup completed: $BACKUP_DIR/data_$DATE.tar.gz" +``` + +### 5. 监控与告警 + +#### 健康检查脚本 + +```bash +#!/bin/bash +# healthcheck.sh + +HEALTH_URL="http://localhost:8080/health" +MAX_RETRIES=3 +RETRY_COUNT=0 + +while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do + HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL) + + if [ $HTTP_CODE -eq 200 ]; then + echo "Health check passed" + exit 0 + fi + + RETRY_COUNT=$((RETRY_COUNT + 1)) + sleep 5 +done + +echo "Health check failed after $MAX_RETRIES retries" +exit 1 +``` + +#### Docker 健康检查 + +在 `docker-compose.yml` 中已配置健康检查: + +```bash +# 查看健康状态 +docker ps | grep open-webui + +# 查看健康检查日志 +docker inspect --format='{{json .State.Health}}' open-webui | jq +``` + +--- + +## 故障排查 + +### 1. 数据库连接失败 + +**症状**: 容器启动后立即退出,日志显示数据库连接错误 + +**排查步骤**: + +```bash +# 查看容器日志 +docker logs open-webui + +# 进入容器测试数据库连接 +docker exec -it open-webui bash +apt-get update && apt-get install -y mysql-client +mysql -h mysql.example.com -u openwebui -p +``` + +**常见问题**: +- ✅ 确认 MySQL 用户权限:`GRANT ALL PRIVILEGES ON openwebui.* TO 'openwebui'@'%'` +- ✅ 确认防火墙规则:允许 Docker 容器 IP 访问 MySQL 3306 端口 +- ✅ 确认 `DATABASE_URL` 格式正确 +- ✅ 如果使用 MySQL 8.0,尝试 `mysql+pymysql://` 驱动 + +### 2. 模型下载失败(Slim 镜像首次运行) + +**症状**: 应用启动缓慢,日志显示模型下载错误 + +**解决方案**: + +```bash +# 方式 1: 预先下载模型到挂载目录 +# 在宿主机上执行 +mkdir -p /data/open-webui/data/cache +cd /data/open-webui/data/cache + +# 下载 sentence-transformers 模型 +wget https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/pytorch_model.bin + +# 方式 2: 设置 HuggingFace 镜像 +docker run -d \ + -e HF_ENDPOINT=https://hf-mirror.com \ + ... +``` + +### 3. 容器内存不足 + +**症状**: 容器频繁重启,日志显示 OOM (Out of Memory) + +**解决方案**: + +```bash +# 限制容器内存使用 +docker run -d \ + --memory="4g" \ + --memory-swap="4g" \ + ... + +# 或在 docker-compose.yml 中配置资源限制(见高级配置) +``` + +### 4. 文件上传失败 + +**症状**: 上传大文件时出现 413 错误 + +**解决方案**: + +```bash +# 如果使用 Nginx 反向代理,增加上传大小限制 +# /etc/nginx/nginx.conf +http { + client_max_body_size 100M; +} + +# 重启 Nginx +sudo systemctl reload nginx +``` + +### 5. WebSocket 连接断开 + +**症状**: 实时聊天功能不工作,日志显示 WebSocket 错误 + +**解决方案**: + +检查 Nginx 配置是否支持 WebSocket: + +```nginx +location / { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + ... +} +``` + +### 6. 数据库迁移错误 + +**症状**: 从 SQLite 迁移到 MySQL 后数据丢失 + +**解决方案**: + +Open WebUI 不支持自动数据迁移,需要手动导出导入: + +```bash +# 1. 从旧容器导出数据(使用 SQLite) +docker exec old-container python -m open_webui.utils.export_data > data.json + +# 2. 启动新容器(使用 MySQL) +docker run -d \ + -e DATABASE_URL=mysql://... \ + --name new-container \ + ghcr.io//open-webui-next:slim + +# 3. 导入数据 +docker exec -i new-container python -m open_webui.utils.import_data < data.json +``` + +--- + +## 维护操作 + +### 更新镜像 + +```bash +# 拉取最新镜像 +docker pull ghcr.io//open-webui-next:slim + +# 停止并删除旧容器 +docker stop open-webui +docker rm open-webui + +# 启动新容器(数据卷保留) +docker run -d \ + --name open-webui \ + ... # 相同参数 + ghcr.io//open-webui-next:slim +``` + +### 查看日志 + +```bash +# 实时查看日志 +docker logs -f open-webui + +# 查看最近 100 行日志 +docker logs --tail 100 open-webui + +# 查看特定时间范围日志 +docker logs --since "2024-01-01T00:00:00" open-webui +``` + +### 进入容器调试 + +```bash +# 进入容器 bash +docker exec -it open-webui bash + +# 查看环境变量 +docker exec open-webui env + +# 查看进程 +docker exec open-webui ps aux +``` + +--- + +## 安全建议 + +1. **不要在 DATABASE_URL 中明文暴露密码** + - 使用 Docker secrets 或环境变量文件 + - `.env` 文件添加到 `.gitignore` + +2. **定期更新镜像** + - 订阅 GitHub 仓库 Release 通知 + - 定期执行 `docker pull` 更新 + +3. **限制容器权限** + ```bash + docker run -d \ + --security-opt=no-new-privileges \ + --cap-drop=ALL \ + --read-only \ + --tmpfs /tmp \ + ... + ``` + +4. **使用 HTTPS** + - 生产环境必须使用 HTTPS(Nginx + Let's Encrypt) + - 设置 `WEBUI_URL=https://...` + +5. **禁用不必要的功能** + ```bash + -e ENABLE_SIGNUP=false # 禁止公开注册 + -e ENABLE_API_KEY=true # 启用 API Key 认证 + ``` + +--- + +## 性能优化建议 + +### 1. 数据库优化 + +- 使用 MySQL 8.0+ 以获得更好性能 +- 启用 InnoDB 缓冲池:`innodb_buffer_pool_size = 2G` +- 定期执行 `OPTIMIZE TABLE` 优化表 + +### 2. 应用优化 + +```bash +# 增加 Worker 数量(根据 CPU 核心数) +-e UVICORN_WORKERS=4 + +# 增加数据库连接池 +-e DATABASE_POOL_SIZE=20 +-e DATABASE_POOL_MAX_OVERFLOW=10 +``` + +### 3. 缓存优化 + +```bash +# 启用 Redis 缓存(可选) +-e REDIS_URL=redis://redis:6379/0 + +# 增加 AI 模型缓存 +-v /data/open-webui/cache:/root/.cache +``` + +--- + +## 联系与支持 + +- **文档**: 项目 README.md 和 CLAUDE.md +- **问题反馈**: GitHub Issues +- **社区讨论**: GitHub Discussions + +--- + +**最后更新**: 2024-11-14 diff --git a/docs/LOCAL-PUSH-GUIDE.md b/docs/LOCAL-PUSH-GUIDE.md new file mode 100644 index 0000000000..f6746c2fce --- /dev/null +++ b/docs/LOCAL-PUSH-GUIDE.md @@ -0,0 +1,676 @@ +# 本地镜像构建与推送指南 + +本指南介绍如何在本地构建 Docker 镜像并手动推送到 GitHub Container Registry (GHCR)。 + +## 当前仓库信息 + +- **仓库**: `ai-friend-coming/open-webui-next` +- **镜像仓库**: `ghcr.io/ai-friend-coming/open-webui-next` +- **当前分支**: `main` +- **当前 commit**: `88396a16e` + +--- + +## 前置准备 + +### 1. 登录 GitHub Container Registry + +#### 创建 Personal Access Token (PAT) + +1. 访问 https://github.com/settings/tokens +2. 点击 "Generate new token" → "Generate new token (classic)" +3. 设置权限: + - `write:packages` - 推送容器镜像 + - `read:packages` - 拉取容器镜像 + - `delete:packages` - (可选) 删除镜像 +4. 生成并保存 Token + +#### 登录 GHCR + +```bash +# 方式 1: 使用 PAT 登录 (推荐) +export CR_PAT=YOUR_PERSONAL_ACCESS_TOKEN +echo $CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin + +# 方式 2: 交互式登录 +docker login ghcr.io -u ai-friend-coming +# Password: [输入 PAT] +``` + +成功登录后会显示: +``` +Login Succeeded +``` + +### 2. 验证 Docker 环境 + +```bash +# 检查 Docker 版本 +docker --version +# 推荐: Docker version 24.0.0 或更高 + +# 检查 Buildx 插件 +docker buildx version +# 推荐: v0.11.0 或更高 + +# 创建 Buildx builder (如果不存在) +docker buildx create --name multiarch-builder --use +docker buildx inspect --bootstrap +``` + +--- + +## 构建与推送流程 + +### 方式一: 模拟 GitHub Actions 流程 (推荐) + +完全模拟 `.github/workflows/docker-build.yaml` 的构建流程: + +```bash +#!/bin/bash +# build-and-push.sh + +set -e # 遇到错误立即退出 + +# ============ 配置变量 ============ +REGISTRY="ghcr.io" +IMAGE_NAME="ai-friend-coming/open-webui-next" +FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}" + +# 获取 Git 信息 +BUILD_HASH=$(git rev-parse HEAD) +SHORT_HASH=$(git rev-parse --short HEAD) +BRANCH=$(git branch --show-current) +TIMESTAMP=$(date +%Y%m%d-%H%M%S) + +echo "=========================================" +echo "构建信息:" +echo " 仓库: ${IMAGE_NAME}" +echo " 分支: ${BRANCH}" +echo " Commit: ${SHORT_HASH}" +echo " 时间: ${TIMESTAMP}" +echo "=========================================" + +# ============ 镜像标签生成 ============ +TAGS=( + "${FULL_IMAGE_NAME}:slim" # 主标签 + "${FULL_IMAGE_NAME}:${BRANCH}-slim" # 分支标签 + "${FULL_IMAGE_NAME}:git-${SHORT_HASH}-slim" # Git commit 标签 + "${FULL_IMAGE_NAME}:${TIMESTAMP}-slim" # 时间戳标签 +) + +# 如果在 main 分支,添加 latest-slim 标签 +if [ "$BRANCH" = "main" ]; then + TAGS+=("${FULL_IMAGE_NAME}:latest-slim") +fi + +# 构建标签参数 +TAG_ARGS="" +for tag in "${TAGS[@]}"; do + TAG_ARGS="${TAG_ARGS} -t ${tag}" +done + +echo "" +echo "将构建以下标签:" +for tag in "${TAGS[@]}"; do + echo " - ${tag}" +done +echo "" + +# ============ 构建镜像 ============ +echo "开始构建镜像..." +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${BUILD_HASH}" \ + --build-arg USE_SLIM=true \ + ${TAG_ARGS} \ + --load \ + . + +echo "" +echo "✅ 镜像构建成功!" +echo "" + +# ============ 推送镜像 ============ +read -p "是否推送镜像到 GHCR? (y/n): " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "开始推送镜像..." + + for tag in "${TAGS[@]}"; do + echo "推送: ${tag}" + docker push "${tag}" + done + + echo "" + echo "✅ 所有镜像推送成功!" + echo "" + echo "拉取命令:" + echo " docker pull ${FULL_IMAGE_NAME}:slim" + echo "" + echo "查看镜像:" + echo " https://github.com/${IMAGE_NAME}/pkgs/container/open-webui-next" +else + echo "跳过推送" +fi + +# ============ 清理 ============ +echo "" +read -p "是否清理本地构建缓存? (y/n): " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "清理构建缓存..." + docker builder prune -f + echo "✅ 缓存清理完成" +fi +``` + +**使用方法**: + +```bash +# 添加执行权限 +chmod +x build-and-push.sh + +# 执行构建 +./build-and-push.sh +``` + +### 方式二: 手动分步执行 + +#### 1. 构建镜像 + +```bash +# 获取当前 commit SHA +BUILD_HASH=$(git rev-parse HEAD) +SHORT_HASH=$(git rev-parse --short HEAD) + +# 构建镜像 +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${BUILD_HASH}" \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + -t ghcr.io/ai-friend-coming/open-webui-next:main-slim \ + -t ghcr.io/ai-friend-coming/open-webui-next:git-${SHORT_HASH}-slim \ + --load \ + . +``` + +**构建参数说明**: +- `--platform linux/amd64`: 构建 x86_64 架构镜像 +- `--build-arg BUILD_HASH`: 传入 Git commit SHA +- `--build-arg USE_SLIM=true`: 构建精简版 (不预装模型) +- `-t`: 指定镜像标签 (可以多个) +- `--load`: 加载到本地 Docker (用于单平台构建) + +#### 2. 验证镜像 + +```bash +# 查看镜像大小 +docker images | grep open-webui-next + +# 查看镜像详细信息 +docker inspect ghcr.io/ai-friend-coming/open-webui-next:slim + +# 测试运行 +docker run --rm -p 8080:8080 ghcr.io/ai-friend-coming/open-webui-next:slim +``` + +#### 3. 推送镜像 + +```bash +# 推送所有标签 +docker push ghcr.io/ai-friend-coming/open-webui-next:slim +docker push ghcr.io/ai-friend-coming/open-webui-next:main-slim +docker push ghcr.io/ai-friend-coming/open-webui-next:git-${SHORT_HASH}-slim +``` + +或批量推送: + +```bash +# 批量推送 +docker images | grep "ghcr.io/ai-friend-coming/open-webui-next" | awk '{print $1":"$2}' | xargs -I {} docker push {} +``` + +#### 4. 验证推送 + +```bash +# 从 GHCR 拉取验证 +docker pull ghcr.io/ai-friend-coming/open-webui-next:slim + +# 访问 GitHub Packages 页面 +# https://github.com/ai-friend-coming/open-webui-next/pkgs/container/open-webui-next +``` + +--- + +## 构建不同镜像变体 + +### Slim 版本 (默认, 推荐) + +```bash +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + --load \ + . +``` + +**特点**: +- 镜像较小 (~7.8GB) +- 首次运行时自动下载 AI 模型 +- 适合生产环境 + +### 标准版本 (预装模型) + +```bash +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_SLIM=false \ + -t ghcr.io/ai-friend-coming/open-webui-next:latest \ + --load \ + . +``` + +**特点**: +- 镜像较大 (~10GB) +- 预装 AI 模型,启动更快 +- 适合离线环境 + +### CUDA 版本 (GPU 加速) + +```bash +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_CUDA=true \ + --build-arg USE_CUDA_VER=cu128 \ + -t ghcr.io/ai-friend-coming/open-webui-next:cuda \ + --load \ + . +``` + +**特点**: +- 支持 NVIDIA GPU 加速 +- 需要宿主机安装 NVIDIA Docker runtime +- 镜像更大 (~15GB) + +--- + +## 高级功能 + +### 1. 多架构构建 (amd64 + arm64) + +```bash +# 创建 multiarch builder +docker buildx create --name multiarch --use +docker buildx inspect --bootstrap + +# 构建并推送多架构镜像 +docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + --push \ + . +``` + +**注意**: +- 多架构构建会自动推送 (不支持 `--load`) +- ARM64 构建可能需要 1-2 小时 + +### 2. 使用缓存加速构建 + +```bash +# 第一次构建: 导出缓存 +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + --cache-to type=registry,ref=ghcr.io/ai-friend-coming/open-webui-next:cache-slim-amd64 \ + --load \ + . + +# 后续构建: 使用缓存 +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + --cache-from type=registry,ref=ghcr.io/ai-friend-coming/open-webui-next:cache-slim-amd64 \ + --load \ + . +``` + +**效果**: 构建时间从 5 分钟降低到 1-2 分钟 + +### 3. 本地缓存 (更快) + +```bash +# 使用本地缓存 +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH=$(git rev-parse HEAD) \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + --cache-to type=local,dest=/tmp/docker-cache \ + --cache-from type=local,src=/tmp/docker-cache \ + --load \ + . +``` + +--- + +## 故障排查 + +### 1. 构建内存不足 + +**错误**: +``` +FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory +``` + +**解决方案**: +- ✅ 确认 Dockerfile 第 30 行已取消注释: `ENV NODE_OPTIONS="--max-old-space-size=4096"` +- ✅ 增加 Docker 内存限制: Docker Desktop → Settings → Resources → Memory (建议 8GB+) + +### 2. 推送权限被拒绝 + +**错误**: +``` +denied: permission_denied: write_package +``` + +**解决方案**: +```bash +# 检查登录状态 +docker info | grep Username + +# 重新登录 +docker logout ghcr.io +echo $CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin + +# 确认 PAT 有 write:packages 权限 +``` + +### 3. 镜像推送超时 + +**错误**: +``` +error: timeout exceeded +``` + +**解决方案**: +```bash +# 增加 Docker 推送超时 +export DOCKER_CLIENT_TIMEOUT=300 +export COMPOSE_HTTP_TIMEOUT=300 + +# 或分别推送每个标签 +docker push ghcr.io/ai-friend-coming/open-webui-next:slim +``` + +### 4. Buildx 不可用 + +**错误**: +``` +ERROR: buildx: command not found +``` + +**解决方案**: +```bash +# 更新 Docker Desktop 到最新版本 +# 或手动安装 Buildx 插件 +mkdir -p ~/.docker/cli-plugins +curl -Lo ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64 +chmod +x ~/.docker/cli-plugins/docker-buildx +``` + +--- + +## 清理与维护 + +### 清理本地镜像 + +```bash +# 删除 dangling 镜像 +docker image prune -f + +# 删除所有未使用的镜像 +docker image prune -a -f + +# 删除特定镜像 +docker rmi ghcr.io/ai-friend-coming/open-webui-next:slim +``` + +### 清理构建缓存 + +```bash +# 清理 Buildx 缓存 +docker buildx prune -f + +# 清理所有 Docker 缓存 (谨慎使用) +docker system prune -a --volumes -f +``` + +### 查看镜像层信息 + +```bash +# 使用 dive 工具分析镜像 +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + wagoodman/dive:latest \ + ghcr.io/ai-friend-coming/open-webui-next:slim +``` + +--- + +## 自动化脚本示例 + +### 完整的 CI/CD 本地模拟脚本 + +保存为 `scripts/local-build.sh`: + +```bash +#!/bin/bash +# scripts/local-build.sh +# 完整的本地构建、测试、推送流程 + +set -e + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +echo_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +echo_error() { echo -e "${RED}[ERROR]${NC} $1"; } + +# 配置 +REGISTRY="ghcr.io" +IMAGE_NAME="ai-friend-coming/open-webui-next" +FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}" +VARIANT="slim" + +# Git 信息 +BUILD_HASH=$(git rev-parse HEAD) +SHORT_HASH=$(git rev-parse --short HEAD) +BRANCH=$(git branch --show-current) + +# 检查工作目录 +if [ ! -f "Dockerfile" ]; then + echo_error "请在项目根目录运行此脚本" + exit 1 +fi + +# 检查未提交的更改 +if [ -n "$(git status --porcelain)" ]; then + echo_warn "存在未提交的更改:" + git status --short + read -p "继续构建? (y/n): " -n 1 -r + echo + [[ ! $REPLY =~ ^[Yy]$ ]] && exit 1 +fi + +echo_info "=========================================" +echo_info "构建配置:" +echo_info " 仓库: ${IMAGE_NAME}" +echo_info " 分支: ${BRANCH}" +echo_info " Commit: ${SHORT_HASH}" +echo_info " 变体: ${VARIANT}" +echo_info "=========================================" + +# 1. 构建镜像 +echo_info "步骤 1/5: 构建镜像..." +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${BUILD_HASH}" \ + --build-arg USE_SLIM=true \ + -t ${FULL_IMAGE_NAME}:${VARIANT} \ + -t ${FULL_IMAGE_NAME}:git-${SHORT_HASH}-${VARIANT} \ + --load \ + . + +# 2. 验证镜像大小 +echo_info "步骤 2/5: 验证镜像..." +IMAGE_SIZE=$(docker images ${FULL_IMAGE_NAME}:${VARIANT} --format "{{.Size}}") +echo_info " 镜像大小: ${IMAGE_SIZE}" + +# 3. 测试镜像 +echo_info "步骤 3/5: 测试镜像..." +CONTAINER_ID=$(docker run -d -p 8081:8080 ${FULL_IMAGE_NAME}:${VARIANT}) +echo_info " 测试容器 ID: ${CONTAINER_ID}" + +# 等待健康检查 +echo_info " 等待服务启动 (最多 60 秒)..." +for i in {1..60}; do + if curl -sf http://localhost:8081/health > /dev/null 2>&1; then + echo_info " ✅ 健康检查通过" + break + fi + sleep 1 + [ $i -eq 60 ] && echo_error "健康检查超时" && docker logs ${CONTAINER_ID} && exit 1 +done + +# 清理测试容器 +docker stop ${CONTAINER_ID} > /dev/null +docker rm ${CONTAINER_ID} > /dev/null +echo_info " 测试容器已清理" + +# 4. 推送镜像 +echo_info "步骤 4/5: 推送镜像到 GHCR..." +read -p "确认推送? (y/n): " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + # 检查登录状态 + if ! docker info | grep -q "Username: ai-friend-coming"; then + echo_error "未登录 GHCR,请先登录:" + echo " echo \$CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin" + exit 1 + fi + + docker push ${FULL_IMAGE_NAME}:${VARIANT} + docker push ${FULL_IMAGE_NAME}:git-${SHORT_HASH}-${VARIANT} + echo_info " ✅ 推送成功" +else + echo_warn "跳过推送" +fi + +# 5. 清理 +echo_info "步骤 5/5: 清理..." +docker builder prune -f > /dev/null +echo_info " 构建缓存已清理" + +echo_info "=========================================" +echo_info "✅ 构建流程完成!" +echo_info "" +echo_info "拉取命令:" +echo_info " docker pull ${FULL_IMAGE_NAME}:${VARIANT}" +echo_info "" +echo_info "查看镜像:" +echo_info " https://github.com/${IMAGE_NAME}/pkgs/container/open-webui-next" +echo_info "=========================================" +``` + +**使用方法**: + +```bash +chmod +x scripts/local-build.sh +./scripts/local-build.sh +``` + +--- + +## 最佳实践 + +### 1. 构建前检查清单 + +- [ ] 代码已提交到 Git +- [ ] Docker 有足够内存 (8GB+) +- [ ] 已登录 GHCR +- [ ] 磁盘空间充足 (20GB+) + +### 2. 标签命名规范 + +```bash +# 生产环境 +ghcr.io/ai-friend-coming/open-webui-next:v1.2.3-slim + +# 测试环境 +ghcr.io/ai-friend-coming/open-webui-next:dev-slim + +# 特性分支 +ghcr.io/ai-friend-coming/open-webui-next:feature-auth-slim +``` + +### 3. 安全建议 + +- 不要在脚本中硬编码 PAT +- 使用环境变量: `export CR_PAT=xxx` +- 定期轮换 PAT (90 天) +- 使用 `.gitignore` 排除敏感文件 + +### 4. 性能优化 + +- 使用 `--cache-from` 复用缓存 +- 本地缓存构建结果到 `/tmp` +- 使用 SSD 存储 Docker 数据 +- 增大 Docker 内存限制 + +--- + +## 常用命令速查 + +```bash +# 构建 +docker buildx build -t IMAGE:TAG --load . + +# 推送 +docker push IMAGE:TAG + +# 拉取 +docker pull IMAGE:TAG + +# 登录 +echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin + +# 清理 +docker system prune -a -f + +# 查看镜像 +docker images | grep open-webui-next + +# 测试镜像 +docker run --rm -p 8080:8080 IMAGE:TAG +``` + +--- + +**最后更新**: 2024-11-14 diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000000..df4196c1fa --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,322 @@ +# 构建脚本使用指南 + +本目录包含用于本地构建和推送 Docker 镜像的自动化脚本。 + +## 脚本列表 + +### 1. `build-and-push.sh` - 完整构建和推送流程 (推荐) + +**功能**: 完整的构建、测试、推送流程,包含健康检查 + +**使用方法**: +```bash +# 1. 登录 GHCR (如需推送) +export CR_PAT=YOUR_PERSONAL_ACCESS_TOKEN +echo $CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin + +# 2. 运行脚本 +./scripts/build-and-push.sh +``` + +**流程**: +1. 检查 Git 状态和未提交更改 +2. 构建 Docker 镜像 (slim 版本) +3. 验证镜像大小和 ID +4. 运行健康检查测试 (可选) +5. 推送镜像到 GHCR (需确认) +6. 清理构建缓存 (可选) + +**适用场景**: 正式发布前的完整测试和推送 + +--- + +### 2. `quick-build.sh` - 快速本地构建 + +**功能**: 快速构建镜像用于本地测试,不推送 + +**使用方法**: +```bash +./scripts/quick-build.sh +``` + +**特点**: +- 无交互式确认 +- 仅构建,不推送 +- 构建速度快 (如有缓存) + +**适用场景**: 本地开发和快速测试 + +--- + +### 3. `simulate-workflow.sh` - 模拟 GitHub Actions + +**功能**: 完整模拟 `.github/workflows/docker-build.yaml` 的执行流程 + +**使用方法**: +```bash +# 设置 CR_PAT (可选) +export CR_PAT=YOUR_PERSONAL_ACCESS_TOKEN + +# 运行模拟 +./scripts/simulate-workflow.sh +``` + +**特点**: +- 模拟 GitHub Actions 环境变量 +- 创建独立的 Buildx builder +- 使用 registry 缓存 +- 输出格式与 GitHub Actions 一致 + +**适用场景**: +- 测试 workflow 配置 +- 在推送代码前验证构建流程 +- 排查 CI/CD 问题 + +--- + +## 使用示例 + +### 场景 1: 本地快速测试 + +```bash +# 1. 快速构建 +./scripts/quick-build.sh + +# 2. 运行测试 +docker run -d -p 8080:8080 ghcr.io/ai-friend-coming/open-webui-next:slim + +# 3. 验证 +curl http://localhost:8080/health +``` + +### 场景 2: 发布新版本 + +```bash +# 1. 确保代码已提交 +git add . +git commit -m "feat: add new feature" +git push + +# 2. 登录 GHCR +export CR_PAT=ghp_xxxxxxxxxxxx +echo $CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin + +# 3. 构建和推送 +./scripts/build-and-push.sh +# 按提示操作: 运行健康检查 → 确认推送 → 清理缓存 + +# 4. 验证推送成功 +docker pull ghcr.io/ai-friend-coming/open-webui-next:slim +``` + +### 场景 3: 测试 GitHub Actions workflow + +```bash +# 1. 模拟 workflow 执行 +export CR_PAT=ghp_xxxxxxxxxxxx +./scripts/simulate-workflow.sh + +# 2. 查看构建结果 +docker images | grep open-webui-next + +# 3. 如果成功,推送代码触发真实 workflow +git push origin main +``` + +--- + +## 环境要求 + +### 必需软件 + +- **Docker**: 24.0.0+ +- **Docker Buildx**: v0.11.0+ +- **Git**: 任意版本 +- **Bash**: 4.0+ + +### 系统要求 + +- **内存**: 建议 8GB+ +- **磁盘空间**: 至少 20GB 可用空间 +- **网络**: 需要访问 ghcr.io + +### Docker 配置 + +确保 Docker 有足够的资源: + +```bash +# Docker Desktop 配置 (推荐): +# - Memory: 8GB +# - Swap: 2GB +# - Disk image size: 64GB +``` + +--- + +## 常见问题 + +### 1. 构建失败 - 内存不足 + +**错误信息**: +``` +FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory +``` + +**解决方案**: +- 确认 `Dockerfile` 第 30 行已启用: `ENV NODE_OPTIONS="--max-old-space-size=4096"` +- 增加 Docker Desktop 内存限制到 8GB+ + +### 2. 推送失败 - 未登录 + +**错误信息**: +``` +unauthorized: authentication required +``` + +**解决方案**: +```bash +# 设置 PAT +export CR_PAT=ghp_your_token_here + +# 登录 GHCR +echo $CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin +``` + +### 3. 脚本无执行权限 + +**错误信息**: +``` +Permission denied +``` + +**解决方案**: +```bash +chmod +x scripts/*.sh +``` + +### 4. Buildx 不可用 + +**错误信息**: +``` +ERROR: buildx: command not found +``` + +**解决方案**: +```bash +# 安装 Buildx 插件 +docker buildx install + +# 或更新 Docker Desktop 到最新版本 +``` + +--- + +## 标签规则 + +所有脚本都会生成以下标签: + +| 标签格式 | 示例 | 说明 | +|---------|------|------| +| `slim` | `ghcr.io/ai-friend-coming/open-webui-next:slim` | 主标签 (main 分支) | +| `latest-slim` | `ghcr.io/ai-friend-coming/open-webui-next:latest-slim` | 最新版本 (仅 main 分支) | +| `{branch}-slim` | `ghcr.io/ai-friend-coming/open-webui-next:main-slim` | 分支标签 | +| `git-{sha}-slim` | `ghcr.io/ai-friend-coming/open-webui-next:git-88396a1-slim` | Git commit 标签 | + +--- + +## 安全最佳实践 + +### PAT (Personal Access Token) 管理 + +1. **权限设置**: 仅授予 `read:packages` 和 `write:packages` +2. **存储位置**: 使用环境变量,不要硬编码到脚本 +3. **轮换周期**: 建议每 90 天轮换一次 +4. **作用域**: 为不同用途创建不同的 PAT + +### 环境变量设置 + +```bash +# 临时设置 (当前会话) +export CR_PAT=ghp_xxxxxxxxxxxx + +# 永久设置 (添加到 ~/.bashrc 或 ~/.zshrc) +echo 'export CR_PAT=ghp_xxxxxxxxxxxx' >> ~/.bashrc +source ~/.bashrc +``` + +**注意**: 不要提交 PAT 到 Git 仓库 + +--- + +## 性能优化 + +### 使用构建缓存 + +```bash +# 第一次构建会较慢 (5-10 分钟) +./scripts/build-and-push.sh + +# 后续构建会使用缓存 (1-2 分钟) +# 前提: 没有清理缓存 +``` + +### 并行构建 (高级) + +如果需要同时构建多个变体: + +```bash +# 构建 slim 和 cuda 版本 +docker buildx build --build-arg USE_SLIM=true -t IMAGE:slim . & +docker buildx build --build-arg USE_CUDA=true -t IMAGE:cuda . & +wait +``` + +--- + +## 清理命令 + +### 清理所有本地镜像 + +```bash +# 删除所有 open-webui-next 镜像 +docker images | grep open-webui-next | awk '{print $3}' | xargs docker rmi -f + +# 清理悬空镜像 +docker image prune -f + +# 清理所有未使用的镜像 +docker image prune -a -f +``` + +### 清理构建缓存 + +```bash +# 清理 Buildx 缓存 +docker buildx prune -f + +# 清理所有 Docker 数据 (谨慎使用) +docker system prune -a --volumes -f +``` + +--- + +## 相关文档 + +- [本地推送完整指南](../docs/LOCAL-PUSH-GUIDE.md) +- [Docker 部署指南](../docs/DOCKER-DEPLOYMENT.md) +- [GitHub Actions Workflow](../.github/workflows/docker-build.yaml) + +--- + +## 获取帮助 + +如果遇到问题: + +1. 查看脚本输出的错误信息 +2. 参考本文档的"常见问题"部分 +3. 查看详细文档: `docs/LOCAL-PUSH-GUIDE.md` +4. 提交 Issue: https://github.com/ai-friend-coming/open-webui-next/issues + +--- + +**最后更新**: 2024-11-14 diff --git a/scripts/build-and-push.sh b/scripts/build-and-push.sh new file mode 100755 index 0000000000..f766545856 --- /dev/null +++ b/scripts/build-and-push.sh @@ -0,0 +1,215 @@ +#!/bin/bash +# build-and-push.sh - 本地构建并推送镜像到 GHCR +# 使用方法: ./scripts/build-and-push.sh + +set -e # 遇到错误立即退出 + +# ============ 颜色输出 ============ +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +echo_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +echo_error() { echo -e "${RED}[ERROR]${NC} $1"; } +echo_step() { echo -e "${BLUE}[STEP]${NC} $1"; } + +# ============ 配置变量 ============ +REGISTRY="ghcr.io" +IMAGE_NAME="ai-friend-coming/open-webui-next" +FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}" + +# 获取 Git 信息 +BUILD_HASH=$(git rev-parse HEAD) +SHORT_HASH=$(git rev-parse --short HEAD) +BRANCH=$(git branch --show-current) +TIMESTAMP=$(date +%Y%m%d-%H%M%S) + +# 检查工作目录 +if [ ! -f "Dockerfile" ]; then + echo_error "请在项目根目录运行此脚本" + exit 1 +fi + +echo_info "=========================================" +echo_info "构建信息:" +echo_info " 仓库: ${IMAGE_NAME}" +echo_info " 分支: ${BRANCH}" +echo_info " Commit: ${SHORT_HASH} (${BUILD_HASH:0:40}...)" +echo_info " 时间: ${TIMESTAMP}" +echo_info "=========================================" +echo "" + +# 检查未提交的更改 +if [ -n "$(git status --porcelain)" ]; then + echo_warn "存在未提交的更改:" + git status --short + echo "" + read -p "继续构建? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo_info "已取消" + exit 0 + fi +fi + +# ============ 镜像标签生成 ============ +TAGS=( + "${FULL_IMAGE_NAME}:slim" # 主标签 + "${FULL_IMAGE_NAME}:${BRANCH}-slim" # 分支标签 + "${FULL_IMAGE_NAME}:git-${SHORT_HASH}-slim" # Git commit 标签 +) + +# 如果在 main 分支,添加 latest-slim 标签 +if [ "$BRANCH" = "main" ]; then + TAGS+=("${FULL_IMAGE_NAME}:latest-slim") +fi + +# 构建标签参数 +TAG_ARGS="" +for tag in "${TAGS[@]}"; do + TAG_ARGS="${TAG_ARGS} -t ${tag}" +done + +echo_info "将构建以下标签:" +for tag in "${TAGS[@]}"; do + echo " - ${tag}" +done +echo "" + +# ============ 构建镜像 ============ +echo_step "步骤 1/4: 构建 Docker 镜像" +echo_info "开始构建镜像 (这可能需要 5-10 分钟)..." +echo "" + +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${BUILD_HASH}" \ + --build-arg USE_SLIM=true \ + ${TAG_ARGS} \ + --load \ + . + +echo "" +echo_info "✅ 镜像构建成功!" +echo "" + +# ============ 验证镜像 ============ +echo_step "步骤 2/4: 验证镜像" + +IMAGE_SIZE=$(docker images ${FULL_IMAGE_NAME}:slim --format "{{.Size}}") +IMAGE_ID=$(docker images ${FULL_IMAGE_NAME}:slim --format "{{.ID}}") + +echo_info "镜像信息:" +echo " - ID: ${IMAGE_ID}" +echo " - 大小: ${IMAGE_SIZE}" +echo "" + +# ============ 测试镜像 ============ +echo_step "步骤 3/4: 测试镜像" +read -p "是否运行健康检查测试? (y/n): " -n 1 -r +echo + +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo_info "启动测试容器 (端口 8081)..." + + CONTAINER_ID=$(docker run -d -p 8081:8080 ${FULL_IMAGE_NAME}:slim) + echo_info "容器 ID: ${CONTAINER_ID}" + echo "" + + echo_info "等待服务启动 (最多 120 秒)..." + HEALTH_CHECK_PASSED=false + + for i in {1..120}; do + if curl -sf http://localhost:8081/health > /dev/null 2>&1; then + echo_info "✅ 健康检查通过 (耗时 ${i} 秒)" + HEALTH_CHECK_PASSED=true + break + fi + + # 每 10 秒显示一次进度 + if [ $((i % 10)) -eq 0 ]; then + echo_info " 等待中... (${i}/120 秒)" + fi + + sleep 1 + done + + if [ "$HEALTH_CHECK_PASSED" = false ]; then + echo_error "健康检查超时!" + echo_error "容器日志:" + docker logs ${CONTAINER_ID} | tail -50 + docker stop ${CONTAINER_ID} > /dev/null + docker rm ${CONTAINER_ID} > /dev/null + exit 1 + fi + + # 清理测试容器 + echo_info "清理测试容器..." + docker stop ${CONTAINER_ID} > /dev/null + docker rm ${CONTAINER_ID} > /dev/null + echo "" +else + echo_warn "跳过健康检查" + echo "" +fi + +# ============ 推送镜像 ============ +echo_step "步骤 4/4: 推送镜像到 GHCR" +echo_info "将推送 ${#TAGS[@]} 个标签到 ${REGISTRY}" +echo "" + +read -p "确认推送? (y/n): " -n 1 -r +echo + +if [[ $REPLY =~ ^[Yy]$ ]]; then + # 检查登录状态 + if ! docker info 2>/dev/null | grep -q "Username"; then + echo_error "未登录 GHCR!" + echo_error "请先执行:" + echo " export CR_PAT=YOUR_PERSONAL_ACCESS_TOKEN" + echo " echo \$CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin" + exit 1 + fi + + echo_info "开始推送镜像..." + echo "" + + for tag in "${TAGS[@]}"; do + echo_info "推送: ${tag}" + docker push "${tag}" + done + + echo "" + echo_info "✅ 所有镜像推送成功!" + echo "" + echo_info "拉取命令:" + echo " docker pull ${FULL_IMAGE_NAME}:slim" + echo "" + echo_info "查看镜像:" + echo " https://github.com/${IMAGE_NAME}/pkgs/container/open-webui-next" + echo "" +else + echo_warn "跳过推送" + echo "" +fi + +# ============ 清理 ============ +echo_info "清理选项:" +read -p "是否清理本地构建缓存? (y/n): " -n 1 -r +echo + +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo_info "清理构建缓存..." + docker builder prune -f + echo_info "✅ 缓存清理完成" +else + echo_warn "保留构建缓存 (下次构建会更快)" +fi + +echo "" +echo_info "=========================================" +echo_info "✅ 构建流程完成!" +echo_info "=========================================" diff --git a/scripts/quick-build.sh b/scripts/quick-build.sh new file mode 100755 index 0000000000..f492ba3bca --- /dev/null +++ b/scripts/quick-build.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# quick-build.sh - 快速本地构建 (不推送) +# 使用方法: ./scripts/quick-build.sh + +set -e + +# 获取 Git 信息 +BUILD_HASH=$(git rev-parse HEAD) +SHORT_HASH=$(git rev-parse --short HEAD) + +echo "🏗️ 开始快速构建..." +echo "📋 Commit: ${SHORT_HASH}" +echo "" + +# 构建镜像 +docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${BUILD_HASH}" \ + --build-arg USE_SLIM=true \ + -t ghcr.io/ai-friend-coming/open-webui-next:slim \ + -t ghcr.io/ai-friend-coming/open-webui-next:dev \ + --load \ + . + +echo "" +echo "✅ 构建完成!" +echo "" +echo "🚀 运行命令:" +echo " docker run -d -p 8080:8080 ghcr.io/ai-friend-coming/open-webui-next:slim" diff --git a/scripts/simulate-workflow.sh b/scripts/simulate-workflow.sh new file mode 100755 index 0000000000..51627f9c7d --- /dev/null +++ b/scripts/simulate-workflow.sh @@ -0,0 +1,181 @@ +#!/bin/bash +# simulate-workflow.sh - 模拟 GitHub Actions workflow 完整流程 +# 使用方法: ./scripts/simulate-workflow.sh + +set -e + +# 颜色 +GREEN='\033[0;32m' +BLUE='\033[0;34m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo_job() { echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"; echo -e "${BLUE}[JOB]${NC} $1"; } +echo_step() { echo -e "${GREEN}[STEP]${NC} $1"; } +echo_info() { echo -e " $1"; } + +# ============ 模拟 GitHub Actions 环境变量 ============ +export GITHUB_REPOSITORY="ai-friend-coming/open-webui-next" +export GITHUB_SHA=$(git rev-parse HEAD) +export GITHUB_REF=$(git symbolic-ref HEAD) +export GITHUB_REF_NAME=$(git branch --show-current) +export IMAGE_NAME="${GITHUB_REPOSITORY,,}" # 转小写 +export FULL_IMAGE_NAME="ghcr.io/${IMAGE_NAME}" + +echo_job "Build Slim Image (amd64)" +echo "" + +# ============ Step 1: Set repository and image name ============ +echo_step "Set repository and image name to lowercase" +echo_info "IMAGE_NAME=${IMAGE_NAME}" +echo_info "FULL_IMAGE_NAME=${FULL_IMAGE_NAME}" +echo "" + +# ============ Step 2: Checkout repository ============ +echo_step "Checkout repository" +echo_info "Repository: ${GITHUB_REPOSITORY}" +echo_info "Branch: ${GITHUB_REF_NAME}" +echo_info "Commit: ${GITHUB_SHA:0:7}" +echo "" + +# ============ Step 3: Set up Docker Buildx ============ +echo_step "Set up Docker Buildx" +if ! docker buildx inspect github-actions > /dev/null 2>&1; then + docker buildx create --name github-actions --use + echo_info "Created new builder: github-actions" +else + docker buildx use github-actions + echo_info "Using existing builder: github-actions" +fi +docker buildx inspect --bootstrap +echo "" + +# ============ Step 4: Log in to GitHub Container Registry ============ +echo_step "Log in to GitHub Container Registry" +echo_info "Registry: ghcr.io" +echo_info "Username: $(whoami)" + +if [ -z "$CR_PAT" ]; then + echo -e "${YELLOW}[WARN]${NC} CR_PAT 环境变量未设置,跳过登录" + echo_info "如需推送,请设置: export CR_PAT=YOUR_PERSONAL_ACCESS_TOKEN" + SKIP_PUSH=true +else + echo $CR_PAT | docker login ghcr.io -u ai-friend-coming --password-stdin > /dev/null 2>&1 + echo_info "✅ Login Succeeded" + SKIP_PUSH=false +fi +echo "" + +# ============ Step 5: Extract metadata for Docker images ============ +echo_step "Extract metadata for Docker images" + +# 生成标签 +if [ "$GITHUB_REF_NAME" = "main" ]; then + TAGS=( + "${FULL_IMAGE_NAME}:slim" + "${FULL_IMAGE_NAME}:latest-slim" + "${FULL_IMAGE_NAME}:${GITHUB_REF_NAME}-slim" + "${FULL_IMAGE_NAME}:git-${GITHUB_SHA:0:7}-slim" + ) +else + TAGS=( + "${FULL_IMAGE_NAME}:${GITHUB_REF_NAME}-slim" + "${FULL_IMAGE_NAME}:git-${GITHUB_SHA:0:7}-slim" + ) +fi + +echo_info "Tags:" +for tag in "${TAGS[@]}"; do + echo_info " - ${tag}" +done +echo "" + +# 构建标签参数 +TAG_ARGS="" +for tag in "${TAGS[@]}"; do + TAG_ARGS="${TAG_ARGS} --tag ${tag}" +done + +# ============ Step 6: Extract metadata for Docker cache ============ +echo_step "Extract metadata for Docker cache" +CACHE_TAG="${FULL_IMAGE_NAME}:cache-slim-linux-amd64-${GITHUB_REF_NAME}" +echo_info "Cache: ${CACHE_TAG}" +echo "" + +# ============ Step 7: Build and push Docker image ============ +echo_step "Build and push Docker image (slim)" +echo_info "Platform: linux/amd64" +echo_info "Build args: BUILD_HASH=${GITHUB_SHA}, USE_SLIM=true" +echo "" + +if [ "$SKIP_PUSH" = true ]; then + # 仅构建,不推送 + docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${GITHUB_SHA}" \ + --build-arg USE_SLIM=true \ + ${TAG_ARGS} \ + --cache-from type=registry,ref=${CACHE_TAG} \ + --load \ + . + echo "" + echo -e "${YELLOW}[WARN]${NC} 跳过推送 (CR_PAT 未设置)" +else + # 构建并推送 + read -p "确认推送到 GHCR? (y/n): " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${GITHUB_SHA}" \ + --build-arg USE_SLIM=true \ + ${TAG_ARGS} \ + --cache-from type=registry,ref=${CACHE_TAG} \ + --cache-to type=registry,ref=${CACHE_TAG},mode=max \ + --push \ + . + echo "" + echo_info "✅ Image pushed successfully" + else + docker buildx build \ + --platform linux/amd64 \ + --build-arg BUILD_HASH="${GITHUB_SHA}" \ + --build-arg USE_SLIM=true \ + ${TAG_ARGS} \ + --cache-from type=registry,ref=${CACHE_TAG} \ + --load \ + . + echo "" + echo -e "${YELLOW}[WARN]${NC} 用户取消推送" + fi +fi +echo "" + +# ============ Step 8: Inspect image ============ +echo_step "Inspect image" +if [ "$SKIP_PUSH" = false ] && [[ $REPLY =~ ^[Yy]$ ]]; then + docker buildx imagetools inspect ${FULL_IMAGE_NAME}:slim +else + docker images | grep open-webui-next | head -5 +fi +echo "" + +# ============ Step 9: Output image tags ============ +echo_step "Output image tags" +echo "" +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo -e "${GREEN}🐳 Docker 镜像构建成功${NC}" +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo "" +echo "📦 镜像标签:" +for tag in "${TAGS[@]}"; do + echo " ${tag}" +done +echo "" +echo "🚀 拉取命令:" +echo " docker pull ${FULL_IMAGE_NAME}:slim" +echo "" +echo "🌐 查看镜像:" +echo " https://github.com/${GITHUB_REPOSITORY}/pkgs/container/open-webui-next" +echo "" +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" From 574da93e1ae1fb723702df14a0a5de8abf35e596 Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Thu, 20 Nov 2025 09:01:49 +0800 Subject: [PATCH 04/12] =?UTF-8?q?feat:=20=E5=B1=8F=E8=94=BD=E9=80=89?= =?UTF-8?q?=E9=A1=B9=E4=B8=AD=E7=9A=84=E9=83=A8=E5=88=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=90=AF=E7=94=A8=E8=AE=B0=E5=BF=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/open_webui/models/users.py | 1 + src/lib/components/chat/Settings/Account.svelte | 6 ++++-- src/lib/components/chat/SettingsModal.svelte | 3 +++ src/lib/components/layout/Overlay/AccountPending.svelte | 3 +++ src/lib/components/layout/Sidebar/SearchInput.svelte | 3 +++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 05000744dd..8338d17500 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -168,6 +168,7 @@ class UsersTable: "email": email, "role": role, "profile_image_url": profile_image_url, + "settings": {"ui": {"memory": True}}, "last_active_at": int(time.time()), "created_at": int(time.time()), "updated_at": int(time.time()), diff --git a/src/lib/components/chat/Settings/Account.svelte b/src/lib/components/chat/Settings/Account.svelte index 510910e365..e71af97baf 100644 --- a/src/lib/components/chat/Settings/Account.svelte +++ b/src/lib/components/chat/Settings/Account.svelte @@ -241,8 +241,10 @@ {/if} - - {#if ($config?.features?.enable_api_key ?? true) || $user?.role === 'admin'} + + + {#if $user?.role === 'admin'} +
{$i18n.t('API keys')}
+ {/if} {:else if tabId === 'audio'}
From 9413b15ace96d8311a0c67ffcdb8fe179090c8da Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Thu, 20 Nov 2025 09:38:03 +0800 Subject: [PATCH 05/12] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=90=8D=20&=20=E8=A1=A5=E5=85=85=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/open_webui/__init__.py | 2 +- backend/open_webui/config.py | 2 +- backend/open_webui/env.py | 6 +- backend/open_webui/main.py | 6 +- backend/open_webui/models/users.py | 1 + .../retrieval/loaders/external_web.py | 2 +- .../vector/dbs/milvus_multitenancy.py | 4 +- .../vector/dbs/qdrant_multitenancy.py | 4 +- .../retrieval/vector/dbs/s3vector.py | 6 +- backend/open_webui/retrieval/web/external.py | 2 +- backend/open_webui/retrieval/web/firecrawl.py | 2 +- backend/open_webui/retrieval/web/searxng.py | 2 +- backend/open_webui/retrieval/web/yacy.py | 2 +- backend/open_webui/routers/audio.py | 12 +-- backend/open_webui/routers/ollama.py | 22 ++--- backend/open_webui/routers/openai.py | 16 ++-- backend/open_webui/routers/scim.py | 2 +- backend/open_webui/utils/oauth.py | 2 +- backend/open_webui/utils/telemetry/metrics.py | 2 +- hatch_build.py | 4 +- src/app.html | 2 +- src/lib/components/AddToolServerModal.svelte | 2 +- .../admin/Evaluations/Feedbacks.svelte | 4 +- src/lib/components/admin/Functions.svelte | 4 +- .../components/admin/Settings/Audio.svelte | 4 +- .../components/admin/Settings/General.svelte | 2 +- .../components/admin/Users/UserList.svelte | 2 +- src/lib/components/channel/Channel.svelte | 2 +- src/lib/components/chat/Settings/About.svelte | 8 +- .../chat/Settings/Connections.svelte | 2 +- .../components/chat/Settings/General.svelte | 2 +- src/lib/components/chat/Settings/Tools.svelte | 2 +- src/lib/components/chat/SettingsModal.svelte | 2 +- src/lib/components/chat/ShareChatModal.svelte | 4 +- .../components/chat/ToolServersModal.svelte | 2 +- src/lib/components/layout/Sidebar.svelte | 95 +++++++++++++++++++ src/lib/components/workspace/Models.svelte | 4 +- src/lib/components/workspace/Prompts.svelte | 4 +- src/lib/components/workspace/Tools.svelte | 4 +- .../workspace/common/ManifestModal.svelte | 2 +- src/lib/constants.ts | 2 +- src/lib/i18n/locales/ar-BH/translation.json | 22 ++--- src/lib/i18n/locales/ar/translation.json | 22 ++--- src/lib/i18n/locales/bg-BG/translation.json | 22 ++--- src/lib/i18n/locales/bn-BD/translation.json | 22 ++--- src/lib/i18n/locales/bo-TB/translation.json | 22 ++--- src/lib/i18n/locales/bs-BA/translation.json | 22 ++--- src/lib/i18n/locales/ca-ES/translation.json | 22 ++--- src/lib/i18n/locales/ceb-PH/translation.json | 22 ++--- src/lib/i18n/locales/cs-CZ/translation.json | 22 ++--- src/lib/i18n/locales/da-DK/translation.json | 22 ++--- src/lib/i18n/locales/de-DE/translation.json | 22 ++--- src/lib/i18n/locales/dg-DG/translation.json | 22 ++--- src/lib/i18n/locales/el-GR/translation.json | 22 ++--- src/lib/i18n/locales/en-GB/translation.json | 22 ++--- src/lib/i18n/locales/en-US/translation.json | 22 ++--- src/lib/i18n/locales/es-ES/translation.json | 22 ++--- src/lib/i18n/locales/et-EE/translation.json | 22 ++--- src/lib/i18n/locales/eu-ES/translation.json | 22 ++--- src/lib/i18n/locales/fa-IR/translation.json | 22 ++--- src/lib/i18n/locales/fi-FI/translation.json | 22 ++--- src/lib/i18n/locales/fr-CA/translation.json | 22 ++--- src/lib/i18n/locales/fr-FR/translation.json | 22 ++--- src/lib/i18n/locales/gl-ES/translation.json | 22 ++--- src/lib/i18n/locales/he-IL/translation.json | 22 ++--- src/lib/i18n/locales/hi-IN/translation.json | 22 ++--- src/lib/i18n/locales/hr-HR/translation.json | 22 ++--- src/lib/i18n/locales/hu-HU/translation.json | 22 ++--- src/lib/i18n/locales/id-ID/translation.json | 22 ++--- src/lib/i18n/locales/ie-GA/translation.json | 22 ++--- src/lib/i18n/locales/it-IT/translation.json | 22 ++--- src/lib/i18n/locales/ja-JP/translation.json | 22 ++--- src/lib/i18n/locales/ka-GE/translation.json | 22 ++--- src/lib/i18n/locales/kab-DZ/translation.json | 22 ++--- src/lib/i18n/locales/ko-KR/translation.json | 22 ++--- src/lib/i18n/locales/lt-LT/translation.json | 22 ++--- src/lib/i18n/locales/ms-MY/translation.json | 22 ++--- src/lib/i18n/locales/nb-NO/translation.json | 22 ++--- src/lib/i18n/locales/nl-NL/translation.json | 22 ++--- src/lib/i18n/locales/pa-IN/translation.json | 22 ++--- src/lib/i18n/locales/pl-PL/translation.json | 22 ++--- src/lib/i18n/locales/pt-BR/translation.json | 22 ++--- src/lib/i18n/locales/pt-PT/translation.json | 22 ++--- src/lib/i18n/locales/ro-RO/translation.json | 22 ++--- src/lib/i18n/locales/ru-RU/translation.json | 22 ++--- src/lib/i18n/locales/sk-SK/translation.json | 22 ++--- src/lib/i18n/locales/sr-RS/translation.json | 22 ++--- src/lib/i18n/locales/sv-SE/translation.json | 22 ++--- src/lib/i18n/locales/th-TH/translation.json | 22 ++--- src/lib/i18n/locales/tk-TM/translation.json | 22 ++--- src/lib/i18n/locales/tr-TR/translation.json | 22 ++--- src/lib/i18n/locales/ug-CN/translation.json | 22 ++--- src/lib/i18n/locales/uk-UA/translation.json | 22 ++--- src/lib/i18n/locales/ur-PK/translation.json | 22 ++--- .../i18n/locales/uz-Cyrl-UZ/translation.json | 22 ++--- .../i18n/locales/uz-Latn-Uz/translation.json | 22 ++--- src/lib/i18n/locales/vi-VN/translation.json | 22 ++--- src/lib/i18n/locales/zh-CN/translation.json | 22 ++--- src/lib/i18n/locales/zh-TW/translation.json | 22 ++--- .../(app)/admin/functions/create/+page.svelte | 2 +- .../(app)/admin/functions/edit/+page.svelte | 2 +- .../(app)/workspace/tools/create/+page.svelte | 2 +- .../(app)/workspace/tools/edit/+page.svelte | 2 +- src/routes/+layout.svelte | 4 +- 104 files changed, 820 insertions(+), 724 deletions(-) diff --git a/backend/open_webui/__init__.py b/backend/open_webui/__init__.py index 967a49de8f..11c01c298a 100644 --- a/backend/open_webui/__init__.py +++ b/backend/open_webui/__init__.py @@ -17,7 +17,7 @@ def version_callback(value: bool): if value: from open_webui.env import VERSION - typer.echo(f"Open WebUI version: {VERSION}") + typer.echo(f"CyberLover version: {VERSION}") raise typer.Exit() diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index f7926abe85..d08e37f5a4 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -975,7 +975,7 @@ if OLLAMA_BASE_URL == "" and OLLAMA_API_BASE_URL != "": if ENV == "prod": if OLLAMA_BASE_URL == "/ollama" and not K8S_FLAG: if USE_OLLAMA_DOCKER.lower() == "true": - # if you use all-in-one docker container (Open WebUI + Ollama) + # if you use all-in-one docker container (CyberLover + Ollama) # with the docker build arg USE_OLLAMA=true (--build-arg="USE_OLLAMA=true") this only works with http://localhost:11434 OLLAMA_BASE_URL = "http://localhost:11434" else: diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index 8f9c1fbc44..4c813a8ae6 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -110,9 +110,9 @@ for source in log_sources: log.setLevel(SRC_LOG_LEVELS["CONFIG"]) -WEBUI_NAME = os.environ.get("WEBUI_NAME", "Open WebUI") -if WEBUI_NAME != "Open WebUI": - WEBUI_NAME += " (Open WebUI)" +WEBUI_NAME = os.environ.get("WEBUI_NAME", "CyberLover") +if WEBUI_NAME != "CyberLover": + WEBUI_NAME += " (CyberLover)" WEBUI_FAVICON_URL = "https://openwebui.com/favicon.png" diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index 9998af0e73..c3ccf2547f 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -609,14 +609,14 @@ async def lifespan(app: FastAPI): app = FastAPI( - title="Open WebUI", + title="CyberLover", docs_url="/docs" if ENV == "dev" else None, openapi_url="/openapi.json" if ENV == "dev" else None, redoc_url=None, lifespan=lifespan, ) -# For Open WebUI OIDC/OAuth2 +# For CyberLover OIDC/OAuth2 oauth_manager = OAuthManager(app) app.state.oauth_manager = oauth_manager @@ -1916,7 +1916,7 @@ async def get_app_changelog(): @app.get("/api/usage") async def get_current_usage(user=Depends(get_verified_user)): """ - Get current usage statistics for Open WebUI. + Get current usage statistics for CyberLover. This is an experimental endpoint and subject to change. """ try: diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 8338d17500..d54ed4a72c 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -168,6 +168,7 @@ class UsersTable: "email": email, "role": role, "profile_image_url": profile_image_url, + # AI-Friend, 默认启用记忆功能 "settings": {"ui": {"memory": True}}, "last_active_at": int(time.time()), "created_at": int(time.time()), diff --git a/backend/open_webui/retrieval/loaders/external_web.py b/backend/open_webui/retrieval/loaders/external_web.py index 68ed66162b..ccd62141d4 100644 --- a/backend/open_webui/retrieval/loaders/external_web.py +++ b/backend/open_webui/retrieval/loaders/external_web.py @@ -32,7 +32,7 @@ class ExternalWebLoader(BaseLoader): response = requests.post( self.external_url, headers={ - "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) External Web Loader", + "User-Agent": "CyberLover (https://github.com/open-webui/open-webui) External Web Loader", "Authorization": f"Bearer {self.external_api_key}", }, json={ diff --git a/backend/open_webui/retrieval/vector/dbs/milvus_multitenancy.py b/backend/open_webui/retrieval/vector/dbs/milvus_multitenancy.py index 5c80d155d3..04d5b263b4 100644 --- a/backend/open_webui/retrieval/vector/dbs/milvus_multitenancy.py +++ b/backend/open_webui/retrieval/vector/dbs/milvus_multitenancy.py @@ -63,8 +63,8 @@ class MilvusClient(VectorDBBase): """ Maps the traditional collection name to multi-tenant collection and resource ID. - WARNING: This mapping relies on current Open WebUI naming conventions for - collection names. If Open WebUI changes how it generates collection names + WARNING: This mapping relies on current CyberLover naming conventions for + collection names. If CyberLover changes how it generates collection names (e.g., "user-memory-" prefix, "file-" prefix, web search patterns, or hash formats), this mapping will break and route data to incorrect collections. POTENTIALLY CAUSING HUGE DATA CORRUPTION, DATA CONSISTENCY ISSUES AND INCORRECT diff --git a/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py b/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py index e9fa03d459..5000fc7263 100644 --- a/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py +++ b/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py @@ -106,8 +106,8 @@ class QdrantClient(VectorDBBase): Returns: tuple: (collection_name, tenant_id) - WARNING: This mapping relies on current Open WebUI naming conventions for - collection names. If Open WebUI changes how it generates collection names + WARNING: This mapping relies on current CyberLover naming conventions for + collection names. If CyberLover changes how it generates collection names (e.g., "user-memory-" prefix, "file-" prefix, web search patterns, or hash formats), this mapping will break and route data to incorrect collections. POTENTIALLY CAUSING HUGE DATA CORRUPTION, DATA CONSISTENCY ISSUES AND INCORRECT diff --git a/backend/open_webui/retrieval/vector/dbs/s3vector.py b/backend/open_webui/retrieval/vector/dbs/s3vector.py index 519ee5abad..066226b755 100644 --- a/backend/open_webui/retrieval/vector/dbs/s3vector.py +++ b/backend/open_webui/retrieval/vector/dbs/s3vector.py @@ -17,7 +17,7 @@ log.setLevel(SRC_LOG_LEVELS["RAG"]) class S3VectorClient(VectorDBBase): """ - AWS S3 Vector integration for Open WebUI Knowledge. + AWS S3 Vector integration for CyberLover Knowledge. """ def __init__(self): @@ -80,7 +80,7 @@ class S3VectorClient(VectorDBBase): if not isinstance(metadata, dict) or len(metadata) <= 10: return metadata - # Keep only the first 10 keys, prioritizing important ones based on actual Open WebUI metadata + # Keep only the first 10 keys, prioritizing important ones based on actual CyberLover metadata important_keys = [ "text", # The actual document content "file_id", # File ID @@ -570,7 +570,7 @@ class S3VectorClient(VectorDBBase): ) # Return in GetResult format - # The Open WebUI GetResult expects lists of lists, so we wrap each list + # The CyberLover GetResult expects lists of lists, so we wrap each list if all_ids: return GetResult( ids=[all_ids], documents=[all_documents], metadatas=[all_metadatas] diff --git a/backend/open_webui/retrieval/web/external.py b/backend/open_webui/retrieval/web/external.py index a5c8003e47..22989f785a 100644 --- a/backend/open_webui/retrieval/web/external.py +++ b/backend/open_webui/retrieval/web/external.py @@ -20,7 +20,7 @@ def search_external( response = requests.post( external_url, headers={ - "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", + "User-Agent": "CyberLover (https://github.com/open-webui/open-webui) RAG Bot", "Authorization": f"Bearer {external_api_key}", }, json={ diff --git a/backend/open_webui/retrieval/web/firecrawl.py b/backend/open_webui/retrieval/web/firecrawl.py index a85fc51fbd..872d730496 100644 --- a/backend/open_webui/retrieval/web/firecrawl.py +++ b/backend/open_webui/retrieval/web/firecrawl.py @@ -22,7 +22,7 @@ def search_firecrawl( response = requests.post( firecrawl_search_url, headers={ - "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", + "User-Agent": "CyberLover (https://github.com/open-webui/open-webui) RAG Bot", "Authorization": f"Bearer {firecrawl_api_key}", }, json={ diff --git a/backend/open_webui/retrieval/web/searxng.py b/backend/open_webui/retrieval/web/searxng.py index 15e3c098a9..7703302bc5 100644 --- a/backend/open_webui/retrieval/web/searxng.py +++ b/backend/open_webui/retrieval/web/searxng.py @@ -67,7 +67,7 @@ def search_searxng( response = requests.get( query_url, headers={ - "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", + "User-Agent": "CyberLover (https://github.com/open-webui/open-webui) RAG Bot", "Accept": "text/html", "Accept-Encoding": "gzip, deflate", "Accept-Language": "en-US,en;q=0.5", diff --git a/backend/open_webui/retrieval/web/yacy.py b/backend/open_webui/retrieval/web/yacy.py index bc61425cbc..7b4a07aded 100644 --- a/backend/open_webui/retrieval/web/yacy.py +++ b/backend/open_webui/retrieval/web/yacy.py @@ -61,7 +61,7 @@ def search_yacy( query_url, auth=yacy_auth, headers={ - "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot", + "User-Agent": "CyberLover (https://github.com/open-webui/open-webui) RAG Bot", "Accept": "text/html", "Accept-Encoding": "gzip, deflate", "Accept-Language": "en-US,en;q=0.5", diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index cb7a57b5b7..df44c69295 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -381,7 +381,7 @@ async def speech(request: Request, user=Depends(get_verified_user)): detail = None status_code = 500 - detail = f"Open WebUI: Server Connection Error" + detail = f"CyberLover: Server Connection Error" if r is not None: status_code = r.status @@ -450,7 +450,7 @@ async def speech(request: Request, user=Depends(get_verified_user)): raise HTTPException( status_code=getattr(r, "status", 500) if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) elif request.app.state.config.TTS_ENGINE == "azure": @@ -509,7 +509,7 @@ async def speech(request: Request, user=Depends(get_verified_user)): raise HTTPException( status_code=getattr(r, "status", 500) if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) elif request.app.state.config.TTS_ENGINE == "transformers": @@ -637,7 +637,7 @@ def transcription_handler(request, file_path, metadata): except Exception: detail = f"External: {e}" - raise Exception(detail if detail else "Open WebUI: Server Connection Error") + raise Exception(detail if detail else "CyberLover: Server Connection Error") elif request.app.state.config.STT_ENGINE == "deepgram": try: @@ -708,7 +708,7 @@ def transcription_handler(request, file_path, metadata): detail = f"External: {res['error'].get('message', '')}" except Exception: detail = f"External: {e}" - raise Exception(detail if detail else "Open WebUI: Server Connection Error") + raise Exception(detail if detail else "CyberLover: Server Connection Error") elif request.app.state.config.STT_ENGINE == "azure": # Check file exists and size @@ -825,7 +825,7 @@ def transcription_handler(request, file_path, metadata): raise HTTPException( status_code=getattr(r, "status_code", 500) if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) diff --git a/backend/open_webui/routers/ollama.py b/backend/open_webui/routers/ollama.py index 64b0687afa..518054d4ed 100644 --- a/backend/open_webui/routers/ollama.py +++ b/backend/open_webui/routers/ollama.py @@ -170,7 +170,7 @@ async def send_post_request( log.error(f"Failed to parse error response: {e}") raise HTTPException( status_code=r.status, - detail=f"Open WebUI: Server Connection Error", + detail=f"CyberLover: Server Connection Error", ) r.raise_for_status() # Raises an error for bad responses (4xx, 5xx) @@ -199,7 +199,7 @@ async def send_post_request( raise HTTPException( status_code=r.status if r else 500, - detail=detail if e else "Open WebUI: Server Connection Error", + detail=detail if e else "CyberLover: Server Connection Error", ) finally: if not stream: @@ -276,7 +276,7 @@ async def verify_connection( except aiohttp.ClientError as e: log.exception(f"Client error: {str(e)}") raise HTTPException( - status_code=500, detail="Open WebUI: Server Connection Error" + status_code=500, detail="CyberLover: Server Connection Error" ) except Exception as e: log.exception(f"Unexpected error: {e}") @@ -503,7 +503,7 @@ async def get_ollama_tags( raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) if user.role == "user" and not BYPASS_MODEL_ACCESS_CONTROL: @@ -641,7 +641,7 @@ async def get_ollama_versions(request: Request, url_idx: Optional[int] = None): raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) else: return {"version": False} @@ -875,7 +875,7 @@ async def copy_model( raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) @@ -945,7 +945,7 @@ async def delete_model( raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) @@ -1009,7 +1009,7 @@ async def show_model_info( raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) @@ -1101,7 +1101,7 @@ async def embed( raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) @@ -1188,7 +1188,7 @@ async def embeddings( raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) @@ -1611,7 +1611,7 @@ async def get_openai_models( ] except Exception as e: log.exception(e) - error_detail = "Open WebUI: Server Connection Error" + error_detail = "CyberLover: Server Connection Error" if r is not None: try: res = r.json() diff --git a/backend/open_webui/routers/openai.py b/backend/open_webui/routers/openai.py index 8c5e3da736..47b6ac601a 100644 --- a/backend/open_webui/routers/openai.py +++ b/backend/open_webui/routers/openai.py @@ -135,7 +135,7 @@ async def get_headers_and_cookies( **( { "HTTP-Referer": "https://openwebui.com/", - "X-Title": "Open WebUI", + "X-Title": "CyberLover", } if "openrouter.ai" in url else {} @@ -349,7 +349,7 @@ async def speech(request: Request, user=Depends(get_verified_user)): raise HTTPException( status_code=r.status_code if r else 500, - detail=detail if detail else "Open WebUI: Server Connection Error", + detail=detail if detail else "CyberLover: Server Connection Error", ) except ValueError: @@ -623,7 +623,7 @@ async def get_models( # ClientError covers all aiohttp requests issues log.exception(f"Client error: {str(e)}") raise HTTPException( - status_code=500, detail="Open WebUI: Server Connection Error" + status_code=500, detail="CyberLover: Server Connection Error" ) except Exception as e: log.exception(f"Unexpected error: {e}") @@ -720,12 +720,12 @@ async def verify_connection( # ClientError covers all aiohttp requests issues log.exception(f"Client error: {str(e)}") raise HTTPException( - status_code=500, detail="Open WebUI: Server Connection Error" + status_code=500, detail="CyberLover: Server Connection Error" ) except Exception as e: log.exception(f"Unexpected error: {e}") raise HTTPException( - status_code=500, detail="Open WebUI: Server Connection Error" + status_code=500, detail="CyberLover: Server Connection Error" ) @@ -973,7 +973,7 @@ async def generate_chat_completion( raise HTTPException( status_code=r.status if r else 500, - detail="Open WebUI: Server Connection Error", + detail="CyberLover: Server Connection Error", ) finally: if not streaming: @@ -1055,7 +1055,7 @@ async def embeddings(request: Request, form_data: dict, user): log.exception(e) raise HTTPException( status_code=r.status if r else 500, - detail="Open WebUI: Server Connection Error", + detail="CyberLover: Server Connection Error", ) finally: if not streaming: @@ -1148,7 +1148,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)): log.exception(e) raise HTTPException( status_code=r.status if r else 500, - detail="Open WebUI: Server Connection Error", + detail="CyberLover: Server Connection Error", ) finally: if not streaming: diff --git a/backend/open_webui/routers/scim.py b/backend/open_webui/routers/scim.py index de1b979c86..7b66e1da82 100644 --- a/backend/open_webui/routers/scim.py +++ b/backend/open_webui/routers/scim.py @@ -1,5 +1,5 @@ """ -Experimental SCIM 2.0 Implementation for Open WebUI +Experimental SCIM 2.0 Implementation for CyberLover Provides System for Cross-domain Identity Management endpoints for users and groups NOTE: This is an experimental implementation and may not fully comply with SCIM 2.0 standards, and is subject to change. diff --git a/backend/open_webui/utils/oauth.py b/backend/open_webui/utils/oauth.py index e0bf7582c6..730a77ff49 100644 --- a/backend/open_webui/utils/oauth.py +++ b/backend/open_webui/utils/oauth.py @@ -241,7 +241,7 @@ async def get_oauth_client_info_with_dynamic_client_registration( ).rstrip("/") oauth_client_metadata = OAuthClientMetadata( - client_name="Open WebUI", + client_name="CyberLover", redirect_uris=[f"{redirect_base_url}/oauth/clients/{client_id}/callback"], grant_types=["authorization_code", "refresh_token"], response_types=["code"], diff --git a/backend/open_webui/utils/telemetry/metrics.py b/backend/open_webui/utils/telemetry/metrics.py index c7b47c0231..c1aacd503d 100644 --- a/backend/open_webui/utils/telemetry/metrics.py +++ b/backend/open_webui/utils/telemetry/metrics.py @@ -1,4 +1,4 @@ -"""OpenTelemetry metrics bootstrap for Open WebUI. +"""OpenTelemetry metrics bootstrap for CyberLover. This module initialises a MeterProvider that sends metrics to an OTLP collector. The collector is responsible for exposing a Prometheus diff --git a/hatch_build.py b/hatch_build.py index 28aad1b6cd..f1d6a70726 100644 --- a/hatch_build.py +++ b/hatch_build.py @@ -10,11 +10,11 @@ from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomBuildHook(BuildHookInterface): def initialize(self, version, build_data): super().initialize(version, build_data) - stderr.write(">>> Building Open Webui frontend\n") + stderr.write(">>> Building CyberLover frontend\n") npm = shutil.which("npm") if npm is None: raise RuntimeError( - "NodeJS `npm` is required for building Open Webui but it was not found" + "NodeJS `npm` is required for building CyberLover but it was not found" ) stderr.write("### npm install\n") subprocess.run([npm, "install", "--force"], check=True) # noqa: S603 diff --git a/src/app.html b/src/app.html index 6c1c362005..f2cc75625c 100644 --- a/src/app.html +++ b/src/app.html @@ -108,7 +108,7 @@ })(); - Open WebUI + CyberLover %sveltekit.head% diff --git a/src/lib/components/AddToolServerModal.svelte b/src/lib/components/AddToolServerModal.svelte index 21ce63f014..4d58fcd14e 100644 --- a/src/lib/components/AddToolServerModal.svelte +++ b/src/lib/components/AddToolServerModal.svelte @@ -746,7 +746,7 @@ {$i18n.t('Warning')}: {$i18n.t( - 'MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.' + 'MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.' )}
{ - toast.success($i18n.t('Redirecting you to Open WebUI Community')); + toast.success($i18n.t('Redirecting you to CyberLover Community')); // remove snapshot from feedbacks const feedbacksToShare = feedbacks.map((f) => { @@ -407,7 +407,7 @@ }} >
- {$i18n.t('Share to Open WebUI Community')} + {$i18n.t('Share to CyberLover Community')}
diff --git a/src/lib/components/admin/Functions.svelte b/src/lib/components/admin/Functions.svelte index 4bbcebd15f..b4d9f6acfb 100644 --- a/src/lib/components/admin/Functions.svelte +++ b/src/lib/components/admin/Functions.svelte @@ -99,7 +99,7 @@ return null; }); - toast.success($i18n.t('Redirecting you to Open WebUI Community')); + toast.success($i18n.t('Redirecting you to CyberLover Community')); const url = 'https://openwebui.com'; @@ -594,7 +594,7 @@ {#if $config?.features.enable_community_sharing} diff --git a/src/lib/components/admin/Users/UserList.svelte b/src/lib/components/admin/Users/UserList.svelte index 219ad3a842..f7862bf51b 100644 --- a/src/lib/components/admin/Users/UserList.svelte +++ b/src/lib/components/admin/Users/UserList.svelte @@ -478,7 +478,7 @@ > > It looks like you have over 50 users, that usually falls under organizational usage. > -> Open WebUI is completely free to use as-is, with no restrictions or hidden limits, and we'd love to keep it that way. 🌱 +> CyberLover is completely free to use as-is, with no restrictions or hidden limits, and we'd love to keep it that way. 🌱 > > By supporting the project through sponsorship or an enterprise license, you’re not only helping us stay independent, you’re also helping us ship new features faster, improve stability, and grow the project for the long haul. With an *enterprise license*, you also get additional perks like dedicated support, customization options, and more, all at a fraction of what it would cost to build and maintain internally. > diff --git a/src/lib/components/channel/Channel.svelte b/src/lib/components/channel/Channel.svelte index 40ce02f3fe..1df44b627b 100644 --- a/src/lib/components/channel/Channel.svelte +++ b/src/lib/components/channel/Channel.svelte @@ -202,7 +202,7 @@ - #{channel?.name ?? 'Channel'} • Open WebUI + #{channel?.name ?? 'Channel'} • CyberLover
- {#if !$WEBUI_NAME.includes('Open WebUI')} + {#if !$WEBUI_NAME.includes('CyberLover')} {$WEBUI_NAME} - {/if} @@ -157,7 +157,7 @@ class="text-xs text-gray-400 dark:text-gray-500">Copyright (c) {new Date().getFullYear()} Open WebUI (Timothy Jaeryang Baek)CyberLover (Timothy Jaeryang Baek) All rights reserved. @@ -175,9 +175,9 @@ modification, are permitted provided that the following conditions are met: contributors may be used to endorse or promote products derived from this software without specific prior written permission. -4. Notwithstanding any other provision of this License, and as a material condition of the rights granted herein, licensees are strictly prohibited from altering, removing, obscuring, or replacing any "Open WebUI" branding, including but not limited to the name, logo, or any visual, textual, or symbolic identifiers that distinguish the software and its interfaces, in any deployment or distribution, regardless of the number of users, except as explicitly set forth in Clauses 5 and 6 below. +4. Notwithstanding any other provision of this License, and as a material condition of the rights granted herein, licensees are strictly prohibited from altering, removing, obscuring, or replacing any "CyberLover" branding, including but not limited to the name, logo, or any visual, textual, or symbolic identifiers that distinguish the software and its interfaces, in any deployment or distribution, regardless of the number of users, except as explicitly set forth in Clauses 5 and 6 below. -5. The branding restriction enumerated in Clause 4 shall not apply in the following limited circumstances: (i) deployments or distributions where the total number of end users (defined as individual natural persons with direct access to the application) does not exceed fifty (50) within any rolling thirty (30) day period; (ii) cases in which the licensee is an official contributor to the codebase—with a substantive code change successfully merged into the main branch of the official codebase maintained by the copyright holder—who has obtained specific prior written permission for branding adjustment from the copyright holder; or (iii) where the licensee has obtained a duly executed enterprise license expressly permitting such modification. For all other cases, any removal or alteration of the "Open WebUI" branding shall constitute a material breach of license. +5. The branding restriction enumerated in Clause 4 shall not apply in the following limited circumstances: (i) deployments or distributions where the total number of end users (defined as individual natural persons with direct access to the application) does not exceed fifty (50) within any rolling thirty (30) day period; (ii) cases in which the licensee is an official contributor to the codebase—with a substantive code change successfully merged into the main branch of the official codebase maintained by the copyright holder—who has obtained specific prior written permission for branding adjustment from the copyright holder; or (iii) where the licensee has obtained a duly executed enterprise license expressly permitting such modification. For all other cases, any removal or alteration of the "CyberLover" branding shall constitute a material breach of license. 6. All code, modifications, or derivative works incorporated into this project prior to the incorporation of this branding clause remain licensed under the BSD 3-Clause License, and prior contributors retain all BSD-3 rights therein; if any such contributor requests the removal of their BSD-3-licensed code, the copyright holder will do so, and any replacement code will be licensed under the project's primary license then in effect. By contributing after this clause's adoption, you agree to the project's Contributor License Agreement (CLA) and to these updated terms for all new contributions. diff --git a/src/lib/components/chat/Settings/Connections.svelte b/src/lib/components/chat/Settings/Connections.svelte index df3c959038..4df4ea5d53 100644 --- a/src/lib/components/chat/Settings/Connections.svelte +++ b/src/lib/components/chat/Settings/Connections.svelte @@ -135,7 +135,7 @@ {$i18n.t('Connect to your own OpenAI compatible API endpoints.')}
{$i18n.t( - 'CORS must be properly configured by the provider to allow requests from Open WebUI.' + 'CORS must be properly configured by the provider to allow requests from CyberLover.' )}
diff --git a/src/lib/components/chat/Settings/General.svelte b/src/lib/components/chat/Settings/General.svelte index 1d8862b7df..73865cc1f5 100644 --- a/src/lib/components/chat/Settings/General.svelte +++ b/src/lib/components/chat/Settings/General.svelte @@ -250,7 +250,7 @@ href="https://github.com/open-webui/open-webui/blob/main/docs/CONTRIBUTING.md#-translations-and-internationalization" target="_blank" > - Help us translate Open WebUI! + Help us translate CyberLover! {/if} diff --git a/src/lib/components/chat/Settings/Tools.svelte b/src/lib/components/chat/Settings/Tools.svelte index 74852b07f8..591d4f5500 100644 --- a/src/lib/components/chat/Settings/Tools.svelte +++ b/src/lib/components/chat/Settings/Tools.svelte @@ -111,7 +111,7 @@ {$i18n.t('Connect to your own OpenAPI compatible external tool servers.')}
{$i18n.t( - 'CORS must be properly configured by the provider to allow requests from Open WebUI.' + 'CORS must be properly configured by the provider to allow requests from CyberLover.' )} diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index c8255bcd49..0f11a79363 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -424,7 +424,7 @@ keywords: [ 'about app', 'about me', - 'about open webui', + 'about CyberLover', 'about page', 'about us', 'aboutapp', diff --git a/src/lib/components/chat/ShareChatModal.svelte b/src/lib/components/chat/ShareChatModal.svelte index f9f0f723ea..f62a87c334 100644 --- a/src/lib/components/chat/ShareChatModal.svelte +++ b/src/lib/components/chat/ShareChatModal.svelte @@ -31,7 +31,7 @@ const _chat = chat.chat; console.log('share', _chat); - toast.success($i18n.t('Redirecting you to Open WebUI Community')); + toast.success($i18n.t('Redirecting you to CyberLover Community')); const url = 'https://openwebui.com'; // const url = 'http://localhost:5173'; @@ -135,7 +135,7 @@ show = false; }} > - {$i18n.t('Share to Open WebUI Community')} + {$i18n.t('Share to CyberLover Community')} {/if} diff --git a/src/lib/components/chat/ToolServersModal.svelte b/src/lib/components/chat/ToolServersModal.svelte index 5b9276541e..6f8846916a 100644 --- a/src/lib/components/chat/ToolServersModal.svelte +++ b/src/lib/components/chat/ToolServersModal.svelte @@ -74,7 +74,7 @@
- {$i18n.t('Open WebUI can use tools provided by any OpenAPI server.')}
{$i18n.t('Learn more about OpenAPI tool servers.')} { const folderList = await getFolders(localStorage.token).catch((error) => { toast.error(`${error}`); @@ -349,6 +354,55 @@ selectedChatId = null; }; + // Import Chats handler + $: if (importFiles) { + console.log(importFiles); + + let reader = new FileReader(); + reader.onload = (event) => { + let chats = JSON.parse(event.target.result); + console.log(chats); + if (getImportOrigin(chats) == 'openai') { + try { + chats = convertOpenAIChats(chats); + } catch (error) { + console.log('Unable to import chats:', error); + } + } + importChatsHandler(chats); + }; + + if (importFiles.length > 0) { + reader.readAsText(importFiles[0]); + } + } + + const importChatsHandler = async (_chats) => { + for (const chat of _chats) { + console.log(chat); + + if (chat.chat) { + await importChat( + localStorage.token, + chat.chat, + chat.meta ?? {}, + false, + null, + chat?.created_at ?? null, + chat?.updated_at ?? null + ); + } else { + // Legacy format + await importChat(localStorage.token, chat, {}, false, null); + } + } + + currentChatPage.set(1); + await chats.set(await getChatList(localStorage.token, $currentChatPage)); + pinnedChats.set(await getPinnedChatList(localStorage.token)); + scrollPaginationEnabled.set(true); + }; + let unsubscribers = []; onMount(async () => { showPinnedChat = localStorage?.showPinnedChat ? localStorage.showPinnedChat === 'true' : true; @@ -1203,6 +1257,47 @@ + + + + + + + +
+
{#if $user !== undefined && $user !== null} { - toast.success($i18n.t('Redirecting you to Open WebUI Community')); + toast.success($i18n.t('Redirecting you to CyberLover Community')); const url = 'https://openwebui.com'; @@ -612,7 +612,7 @@ {#if $config?.features.enable_community_sharing}
- {$i18n.t('Made by Open WebUI Community')} + {$i18n.t('Made by CyberLover Community')}
{ - toast.success($i18n.t('Redirecting you to Open WebUI Community')); + toast.success($i18n.t('Redirecting you to CyberLover Community')); const url = 'https://openwebui.com'; @@ -408,7 +408,7 @@ {#if $config?.features.enable_community_sharing} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index d92f336718..293bab2465 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -1,7 +1,7 @@ import { browser, dev } from '$app/environment'; // import { version } from '../../package.json'; -export const APP_NAME = 'Open WebUI'; +export const APP_NAME = 'CyberLover'; export const WEBUI_HOSTNAME = browser ? (dev ? `${location.hostname}:8080` : ``) : ''; export const WEBUI_BASE_URL = browser ? (dev ? `http://${WEBUI_HOSTNAME}` : ``) : ``; diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 4ac0acda6c..de3092c9b4 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -337,7 +337,7 @@ "Copy Link": "أنسخ الرابط", "Copy to clipboard": "", "Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "إنشاء نموذج", @@ -432,7 +432,7 @@ "Discover a model": "اكتشف نموذجا", "Discover a prompt": "اكتشاف موجه", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "من جهة اليسار إلى اليمين", - "Made by Open WebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ", + "Made by CyberLover Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ", "Make password visible in the user interface": "", "Make sure to enclose them with": "تأكد من إرفاقها", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.", "May": "مايو", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "سيتم عرض الذكريات التي يمكن الوصول إليها بواسطة LLMs هنا.", "Memory": "الذاكرة", @@ -1139,10 +1139,10 @@ "Open new chat": "فتح محادثة جديده", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API إعدادات", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "سجل صوت", - "Redirecting you to Open WebUI Community": "OpenWebUI إعادة توجيهك إلى مجتمع ", + "Redirecting you to CyberLover Community": "OpenWebUI إعادة توجيهك إلى مجتمع ", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1438,7 +1438,7 @@ "Settings saved successfully!": "تم حفظ الاعدادات بنجاح", "Share": "كشاركة", "Share Chat": "مشاركة الدردشة", - "Share to Open WebUI Community": "OpenWebUI شارك في مجتمع", + "Share to CyberLover Community": "OpenWebUI شارك في مجتمع", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1758,7 +1758,7 @@ "You're now logged in.": "لقد قمت الآن بتسجيل الدخول.", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/ar/translation.json b/src/lib/i18n/locales/ar/translation.json index 372367ed4d..727b393c90 100644 --- a/src/lib/i18n/locales/ar/translation.json +++ b/src/lib/i18n/locales/ar/translation.json @@ -337,7 +337,7 @@ "Copy Link": "نسخ الرابط", "Copy to clipboard": "نسخ إلى الحافظة", "Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "يجب أن يتم تكوين CORS بشكل صحيح من قبل المزود للسماح بالطلبات من Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "يجب أن يتم تكوين CORS بشكل صحيح من قبل المزود للسماح بالطلبات من CyberLover.", "Create": "إنشاء", "Create a knowledge base": "إنشاء قاعدة معرفة", "Create a model": "إنشاء نموذج", @@ -432,7 +432,7 @@ "Discover a model": "اكتشف نموذجا", "Discover a prompt": "اكتشاف موجه", "Discover a tool": "اكتشف أداة", - "Discover how to use Open WebUI and seek support from the community.": "اكتشف كيفية استخدام Open WebUI واطلب الدعم من المجتمع.", + "Discover how to use CyberLover and seek support from the community.": "اكتشف كيفية استخدام CyberLover واطلب الدعم من المجتمع.", "Discover wonders": "اكتشف العجائب", "Discover, download, and explore custom functions": "اكتشف، حمّل، واستعرض الوظائف المخصصة", "Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة", @@ -958,7 +958,7 @@ "Lost": "ضائع", "Low": "", "LTR": "من جهة اليسار إلى اليمين", - "Made by Open WebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ", + "Made by CyberLover Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ", "Make password visible in the user interface": "", "Make sure to enclose them with": "تأكد من إرفاقها", "Make sure to export a workflow.json file as API format from ComfyUI.": "تأكد من تصدير ملف workflow.json بصيغة API من ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.", "May": "مايو", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "سيتم عرض الذكريات التي يمكن الوصول إليها بواسطة LLMs هنا.", "Memory": "الذاكرة", @@ -1139,10 +1139,10 @@ "Open new chat": "فتح محادثة جديده", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "تستخدم واجهة WebUI أداة faster-whisper داخليًا.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "تستخدم WebUI نموذج SpeechT5 وتضمينات صوتية من CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "إصدار WebUI الحالي (v{{OPEN_WEBUI_VERSION}}) أقل من الإصدار المطلوب (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "تستخدم واجهة WebUI أداة faster-whisper داخليًا.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "تستخدم WebUI نموذج SpeechT5 وتضمينات صوتية من CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "إصدار WebUI الحالي (v{{OPEN_WEBUI_VERSION}}) أقل من الإصدار المطلوب (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API إعدادات", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "سجل صوت", - "Redirecting you to Open WebUI Community": "OpenWebUI إعادة توجيهك إلى مجتمع ", + "Redirecting you to CyberLover Community": "OpenWebUI إعادة توجيهك إلى مجتمع ", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "يقلل من احتمال توليد إجابات غير منطقية. القيم الأعلى (مثل 100) تعطي إجابات أكثر تنوعًا، بينما القيم الأدنى (مثل 10) تكون أكثر تحفظًا.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "أشر إلى نفسك باسم \"المستخدم\" (مثل: \"المستخدم يتعلم الإسبانية\")", "Reference Chats": "", @@ -1438,7 +1438,7 @@ "Settings saved successfully!": "تم حفظ الاعدادات بنجاح", "Share": "كشاركة", "Share Chat": "مشاركة الدردشة", - "Share to Open WebUI Community": "OpenWebUI شارك في مجتمع", + "Share to CyberLover Community": "OpenWebUI شارك في مجتمع", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1758,7 +1758,7 @@ "You're now logged in.": "لقد قمت الآن بتسجيل الدخول.", "Your Account": "", "Your account status is currently pending activation.": "حالة حسابك حالياً بانتظار التفعيل.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "سيتم توجيه كامل مساهمتك مباشرة إلى مطور المكون الإضافي؛ لا تأخذ Open WebUI أي نسبة. ومع ذلك، قد تفرض منصة التمويل المختارة رسومًا خاصة بها.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "سيتم توجيه كامل مساهمتك مباشرة إلى مطور المكون الإضافي؛ لا تأخذ CyberLover أي نسبة. ومع ذلك، قد تفرض منصة التمويل المختارة رسومًا خاصة بها.", "YouTube": "Youtube", "Youtube Language": "لغة YouTube", "Youtube Proxy URL": "رابط بروكسي YouTube" diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 031d898a3d..17fd4049ba 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Копиране на връзка", "Copy to clipboard": "Копиране в клипборда", "Copying to clipboard was successful!": "Копирането в клипборда беше успешно!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS трябва да бъде правилно конфигуриран от доставчика, за да позволи заявки от Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS трябва да бъде правилно конфигуриран от доставчика, за да позволи заявки от CyberLover.", "Create": "Създай", "Create a knowledge base": "Създаване на база знания", "Create a model": "Създаване на модел", @@ -432,7 +432,7 @@ "Discover a model": "Открийте модел", "Discover a prompt": "Откриване на промпт", "Discover a tool": "Открийте инструмент", - "Discover how to use Open WebUI and seek support from the community.": "Открийте как да използвате Open WebUI и потърсете подкрепа от общността.", + "Discover how to use CyberLover and seek support from the community.": "Открийте как да използвате CyberLover и потърсете подкрепа от общността.", "Discover wonders": "Открийте чудеса", "Discover, download, and explore custom functions": "Открийте, изтеглете и разгледайте персонализирани функции", "Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове", @@ -958,7 +958,7 @@ "Lost": "Изгубено", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Направено от OpenWebUI общността", + "Made by CyberLover Community": "Направено от OpenWebUI общността", "Make password visible in the user interface": "", "Make sure to enclose them with": "Уверете се, че сте заключени с", "Make sure to export a workflow.json file as API format from ComfyUI.": "Уверете се, че експортирате файл workflow.json като API формат от ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модела могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.", "May": "Май", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Мемории достъпни от LLMs ще бъдат показани тук.", "Memory": "Памет", @@ -1139,10 +1139,10 @@ "Open new chat": "Отвори нов чат", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI използва вътрешно по-бързо-whisper.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI използва SpeechT5 и CMU Arctic говорителни вграждания.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версията на Open WebUI (v{{OPEN_WEBUI_VERSION}}) е по-ниска от необходимата версия (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover използва вътрешно по-бързо-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover използва SpeechT5 и CMU Arctic говорителни вграждания.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версията на CyberLover (v{{OPEN_WEBUI_VERSION}}) е по-ниска от необходимата версия (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API на OpenAI", "OpenAI API Config": "OpenAI API конфигурация", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Запиши", "Record voice": "Записване на глас", - "Redirecting you to Open WebUI Community": "Пренасочване към OpenWebUI общността", + "Redirecting you to CyberLover Community": "Пренасочване към OpenWebUI общността", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Отнасяйте се към себе си като \"Потребител\" (напр. \"Потребителят учи испански\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Настройките са запазени успешно!", "Share": "Подели", "Share Chat": "Подели Чат", - "Share to Open WebUI Community": "Споделете с OpenWebUI Общността", + "Share to CyberLover Community": "Споделете с OpenWebUI Общността", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Права за споделяне", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Сега вие влязохте в системата.", "Your Account": "", "Your account status is currently pending activation.": "Статусът на вашия акаунт в момента очаква активиране.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Цялата ви вноска ще отиде директно при разработчика на плъгина; Open WebUI не взима никакъв процент. Въпреки това, избраната платформа за финансиране може да има свои собствени такси.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Цялата ви вноска ще отиде директно при разработчика на плъгина; CyberLover не взима никакъв процент. Въпреки това, избраната платформа за финансиране може да има свои собствени такси.", "YouTube": "Youtube", "Youtube Language": "Youtube език", "Youtube Proxy URL": "Youtube Прокси URL" diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 0dbbc3bc25..c7f7514dda 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -337,7 +337,7 @@ "Copy Link": "লিংক কপি করুন", "Copy to clipboard": "", "Copying to clipboard was successful!": "ক্লিপবোর্ডে কপি করা সফল হয়েছে", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "একটি মডেল তৈরি করুন", @@ -432,7 +432,7 @@ "Discover a model": "একটি মডেল আবিষ্কার করুন", "Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত", + "Made by CyberLover Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত", "Make password visible in the user interface": "", "Make sure to enclose them with": "এটা দিয়ে বন্ধনী দিতে ভুলবেন না", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "একসঙ্গে সর্বোচ্চ তিনটি মডেল ডাউনলোড করা যায়। দয়া করে পরে আবার চেষ্টা করুন।", "May": "মে", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLMs দ্বারা অ্যাক্সেসযোগ্য মেমোরিগুলি এখানে দেখানো হবে।", "Memory": "মেমোরি", @@ -1139,10 +1139,10 @@ "Open new chat": "নতুন চ্যাট খুলুন", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI এপিআই", "OpenAI API Config": "OpenAI এপিআই কনফিগ", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "ভয়েস রেকর্ড করুন", - "Redirecting you to Open WebUI Community": "আপনাকে OpenWebUI কমিউনিটিতে পাঠানো হচ্ছে", + "Redirecting you to CyberLover Community": "আপনাকে OpenWebUI কমিউনিটিতে পাঠানো হচ্ছে", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে", "Share": "শেয়ার করুন", "Share Chat": "চ্যাট শেয়ার করুন", - "Share to Open WebUI Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন", + "Share to CyberLover Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "আপনি এখন লগইন করা অবস্থায় আছেন", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "YouTube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/bo-TB/translation.json b/src/lib/i18n/locales/bo-TB/translation.json index 4f977ca681..fae9cb6896 100644 --- a/src/lib/i18n/locales/bo-TB/translation.json +++ b/src/lib/i18n/locales/bo-TB/translation.json @@ -337,7 +337,7 @@ "Copy Link": "སྦྲེལ་ཐག་འདྲ་བཤུས།", "Copy to clipboard": "སྦྱར་སྡེར་དུ་འདྲ་བཤུས།", "Copying to clipboard was successful!": "སྦྱར་སྡེར་དུ་འདྲ་བཤུས་བྱེད་པ་ལེགས་འགྲུབ་བྱུང་།", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUI ནས་རེ་ཞུ་གཏོང་བར་གནང་བ་སྤྲོད་ཆེད། CORS ངེས་པར་དུ་མཁོ་སྤྲོད་པས་འགྲིག་པོར་སྒྲིག་འགོད་བྱེད་དགོས།", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CyberLover ནས་རེ་ཞུ་གཏོང་བར་གནང་བ་སྤྲོད་ཆེད། CORS ངེས་པར་དུ་མཁོ་སྤྲོད་པས་འགྲིག་པོར་སྒྲིག་འགོད་བྱེད་དགོས།", "Create": "གསར་བཟོ།", "Create a knowledge base": "ཤེས་བྱའི་རྟེན་གཞི་ཞིག་གསར་བཟོ་བྱེད་པ།", "Create a model": "དཔེ་དབྱིབས་ཤིག་གསར་བཟོ་བྱེད་པ།", @@ -432,7 +432,7 @@ "Discover a model": "དཔེ་དབྱིབས་ཤིག་རྙེད་པ།", "Discover a prompt": "འགུལ་སློང་ཞིག་རྙེད་པ།", "Discover a tool": "ལག་ཆ་ཞིག་རྙེད་པ།", - "Discover how to use Open WebUI and seek support from the community.": "Open WebUI ཇི་ལྟར་བེད་སྤྱོད་གཏོང་ཚུལ་རྙེད་པ་དང་སྤྱི་ཚོགས་ནས་རྒྱབ་སྐྱོར་འཚོལ་བ།", + "Discover how to use CyberLover and seek support from the community.": "CyberLover ཇི་ལྟར་བེད་སྤྱོད་གཏོང་ཚུལ་རྙེད་པ་དང་སྤྱི་ཚོགས་ནས་རྒྱབ་སྐྱོར་འཚོལ་བ།", "Discover wonders": "ངོ་མཚར་རྙེད་པ།", "Discover, download, and explore custom functions": "སྲོལ་བཟོས་ལས་འགན་རྙེད་པ། ཕབ་ལེན་བྱེད་པ། དང་བརྟག་ཞིབ་བྱེད་པ།", "Discover, download, and explore custom prompts": "སྲོལ་བཟོས་འགུལ་སློང་རྙེད་པ། ཕབ་ལེན་བྱེད་པ། དང་བརྟག་ཞིབ་བྱེད་པ།", @@ -958,7 +958,7 @@ "Lost": "བརླགས།", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Open WebUI སྤྱི་ཚོགས་ཀྱིས་བཟོས།", + "Made by CyberLover Community": "CyberLover སྤྱི་ཚོགས་ཀྱིས་བཟོས།", "Make password visible in the user interface": "", "Make sure to enclose them with": "དེ་དག་འདིས་བསྐོར་བ་ཁག་ཐེག་བྱེད་པ།", "Make sure to export a workflow.json file as API format from ComfyUI.": "ComfyUI ནས་ workflow.json ཡིག་ཆ་ API བཀོད་པའི་ཐོག་ཕྱིར་གཏོང་བྱེད་པ་ཁག་ཐེག་བྱེད་པ།", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "དཔེ་དབྱིབས་ ༣ ལས་མང་བ་མཉམ་དུ་ཕབ་ལེན་བྱེད་མི་ཐུབ། རྗེས་སུ་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད་རོགས།", "May": "ཟླ་བ་ལྔ་པ།", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLMs ཀྱིས་འཛུལ་སྤྱོད་ཐུབ་པའི་དྲན་ཤེས་དག་འདིར་སྟོན་ངེས།", "Memory": "དྲན་ཤེས།", @@ -1139,10 +1139,10 @@ "Open new chat": "ཁ་བརྡ་གསར་པ་ཁ་ཕྱེ་བ།", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI ཡིས་ནང་ཁུལ་དུ་ faster-whisper བེད་སྤྱོད་བྱེད།", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI ཡིས་ SpeechT5 དང་ CMU Arctic གཏམ་བཤད་པའི་ཚུད་འཇུག་བེད་སྤྱོད་བྱེད།", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI པར་གཞི། (v{{OPEN_WEBUI_VERSION}}) དེ་དགོས་ངེས་ཀྱི་པར་གཞི་ (v{{REQUIRED_VERSION}}) ལས་དམའ་བ།", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover ཡིས་ནང་ཁུལ་དུ་ faster-whisper བེད་སྤྱོད་བྱེད།", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover ཡིས་ SpeechT5 དང་ CMU Arctic གཏམ་བཤད་པའི་ཚུད་འཇུག་བེད་སྤྱོད་བྱེད།", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover པར་གཞི། (v{{OPEN_WEBUI_VERSION}}) དེ་དགོས་ངེས་ཀྱི་པར་གཞི་ (v{{REQUIRED_VERSION}}) ལས་དམའ་བ།", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API Config", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "སྐད་སྒྲ་ཕབ་པ།", - "Redirecting you to Open WebUI Community": "ཁྱེད་ Open WebUI སྤྱི་ཚོགས་ལ་ཁ་ཕྱོགས་སྒྱུར་བཞིན་པ།", + "Redirecting you to CyberLover Community": "ཁྱེད་ CyberLover སྤྱི་ཚོགས་ལ་ཁ་ཕྱོགས་སྒྱུར་བཞིན་པ།", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "དོན་མེད་བཟོ་བའི་ཆགས་ཚུལ་ཉུང་དུ་གཏོང་བ། རིན་ཐང་མཐོ་བ་ (དཔེར་ན། ༡༠༠) ཡིས་ལན་སྣ་ཚོགས་ཆེ་བ་སྤྲོད་ངེས། དེ་བཞིན་དུ་རིན་ཐང་དམའ་བ་ (དཔེར་ན། ༡༠) ཡིས་སྲུང་འཛིན་ཆེ་བ་ཡོང་ངེས།", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "ཁྱེད་རང་ལ་ \"བེད་སྤྱོད་མཁན་\" ཞེས་འབོད་པ། (དཔེར་ན། \"བེད་སྤྱོད་མཁན་གྱིས་སི་པན་གྱི་སྐད་ཡིག་སྦྱོང་བཞིན་པ།\")", "Reference Chats": "", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "སྒྲིག་འགོད་ལེགས་པར་ཉར་ཚགས་བྱས།", "Share": "མཉམ་སྤྱོད།", "Share Chat": "ཁ་བརྡ་མཉམ་སྤྱོད།", - "Share to Open WebUI Community": "Open WebUI སྤྱི་ཚོགས་ལ་མཉམ་སྤྱོད།", + "Share to CyberLover Community": "CyberLover སྤྱི་ཚོགས་ལ་མཉམ་སྤྱོད།", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "མཉམ་སྤྱོད་དབང་ཚད།", @@ -1753,7 +1753,7 @@ "You're now logged in.": "ཁྱེད་ད་ལྟ་ནང་འཛུལ་བྱས་ཟིན།", "Your Account": "", "Your account status is currently pending activation.": "ཁྱེད་ཀྱི་རྩིས་ཁྲའི་གནས་སྟངས་ད་ལྟ་སྒུལ་བསྐྱོད་སྒུག་བཞིན་པ།", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "ཁྱེད་ཀྱི་ཞལ་འདེབས་ཆ་ཚང་ཐད་ཀར་ plugin གསར་སྤེལ་བ་ལ་འགྲོ་ངེས། Open WebUI ཡིས་བརྒྱ་ཆ་གང་ཡང་མི་ལེན། འོན་ཀྱང་། གདམ་ཟིན་པའི་མ་དངུལ་གཏོང་བའི་སྟེགས་བུ་ལ་དེའི་རང་གི་འགྲོ་གྲོན་ཡོད་སྲིད།", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "ཁྱེད་ཀྱི་ཞལ་འདེབས་ཆ་ཚང་ཐད་ཀར་ plugin གསར་སྤེལ་བ་ལ་འགྲོ་ངེས། CyberLover ཡིས་བརྒྱ་ཆ་གང་ཡང་མི་ལེན། འོན་ཀྱང་། གདམ་ཟིན་པའི་མ་དངུལ་གཏོང་བའི་སྟེགས་བུ་ལ་དེའི་རང་གི་འགྲོ་གྲོན་ཡོད་སྲིད།", "YouTube": "Youtube", "Youtube Language": "Youtube སྐད་ཡིག", "Youtube Proxy URL": "Youtube Proxy URL" diff --git a/src/lib/i18n/locales/bs-BA/translation.json b/src/lib/i18n/locales/bs-BA/translation.json index 01fe72327e..9d6ae02948 100644 --- a/src/lib/i18n/locales/bs-BA/translation.json +++ b/src/lib/i18n/locales/bs-BA/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopiraj vezu", "Copy to clipboard": "", "Copying to clipboard was successful!": "Kopiranje u međuspremnik je uspješno!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Izradite model", @@ -432,7 +432,7 @@ "Discover a model": "Otkrijte model", "Discover a prompt": "Otkrijte prompt", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "Saznaj kako koristiti Open WEBUI i nadji podrsku od zajednice", + "Discover how to use CyberLover and seek support from the community.": "Saznaj kako koristiti CyberLover i nadji podrsku od zajednice", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Otkrijte, preuzmite i istražite prilagođene prompte", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Izradio OpenWebUI Community", + "Made by CyberLover Community": "Izradio OpenWebUI Community", "Make password visible in the user interface": "", "Make sure to enclose them with": "Provjerite da ih zatvorite s", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimalno 3 modela se mogu preuzeti istovremeno. Pokušajte ponovo kasnije.", "May": "Maj", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Ovdje će biti prikazana memorija kojoj mogu pristupiti LLM-ovi.", "Memory": "Memorija", @@ -1139,10 +1139,10 @@ "Open new chat": "Otvorite novi razgovor", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguracija", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Snimanje glasa", - "Redirecting you to Open WebUI Community": "Preusmjeravanje na OpenWebUI zajednicu", + "Redirecting you to CyberLover Community": "Preusmjeravanje na OpenWebUI zajednicu", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Nazivajte se \"Korisnik\" (npr. \"Korisnik uči španjolski\")", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Postavke su uspješno spremljene!", "Share": "Podijeli", "Share Chat": "Podijeli razgovor", - "Share to Open WebUI Community": "Podijeli u OpenWebUI zajednici", + "Share to CyberLover Community": "Podijeli u OpenWebUI zajednici", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Sada ste prijavljeni.", "Your Account": "", "Your account status is currently pending activation.": "Status vašeg računa trenutno čeka aktivaciju.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "YouTube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 8a31d0f7f7..8e8b44d40d 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copiar l'enllaç", "Copy to clipboard": "Copiar al porta-retalls", "Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat correctament", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS ha de ser configurat correctament pel proveïdor per permetre les sol·licituds d'Open WebUI", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS ha de ser configurat correctament pel proveïdor per permetre les sol·licituds d'CyberLover", "Create": "Crear", "Create a knowledge base": "Crear una base de coneixement", "Create a model": "Crear un model", @@ -432,7 +432,7 @@ "Discover a model": "Descobrir un model", "Discover a prompt": "Descobrir una indicació", "Discover a tool": "Descobrir una eina", - "Discover how to use Open WebUI and seek support from the community.": "Descobreix com utilitzar Open WebUI i demana suport a la comunitat.", + "Discover how to use CyberLover and seek support from the community.": "Descobreix com utilitzar CyberLover i demana suport a la comunitat.", "Discover wonders": "Descobrir meravelles", "Discover, download, and explore custom functions": "Descobrir, descarregar i explorar funcions personalitzades", "Discover, download, and explore custom prompts": "Descobrir, descarregar i explorar indicacions personalitzades", @@ -958,7 +958,7 @@ "Lost": "Perdut", "Low": "Baix", "LTR": "LTR", - "Made by Open WebUI Community": "Creat per la Comunitat OpenWebUI", + "Made by CyberLover Community": "Creat per la Comunitat OpenWebUI", "Make password visible in the user interface": "Fer que la contrasenya sigui visible a la interficie d'usuari", "Make sure to enclose them with": "Assegura't d'envoltar-los amb", "Make sure to export a workflow.json file as API format from ComfyUI.": "Assegura't d'exportar un fitxer workflow.json com a format API des de ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es poden descarregar un màxim de 3 models simultàniament. Si us plau, prova-ho més tard.", "May": "Maig", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "El suport per a MCP és experimental i la seva especificació canvia sovint, cosa que pot provocar incompatibilitats. El suport per a l'especificació d'OpenAPI el manté directament l'equip d'Open WebUI, cosa que el converteix en l'opció més fiable per a la compatibilitat.", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "El suport per a MCP és experimental i la seva especificació canvia sovint, cosa que pot provocar incompatibilitats. El suport per a l'especificació d'OpenAPI el manté directament l'equip d'CyberLover, cosa que el converteix en l'opció més fiable per a la compatibilitat.", "Medium": "Mig", "Memories accessible by LLMs will be shown here.": "Les memòries accessibles pels models de llenguatge es mostraran aquí.", "Memory": "Memòria", @@ -1139,10 +1139,10 @@ "Open new chat": "Obre un xat nou", "Open Sidebar": "Obre la barra lateral", "Open User Profile Menu": "Obre el menú de perfil d'usuari", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI pot utilitzar eines de servidors OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI utilitza faster-whisper internament.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI utilitza incrustacions de SpeechT5 i CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versió d'Open WebUI (v{{OPEN_WEBUI_VERSION}}) és inferior a la versió requerida (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover pot utilitzar eines de servidors OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilitza faster-whisper internament.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilitza incrustacions de SpeechT5 i CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versió d'CyberLover (v{{OPEN_WEBUI_VERSION}}) és inferior a la versió requerida (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API d'OpenAI", "OpenAI API Config": "Configuració de l'API d'OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Etiqueta de raonament", "Record": "Enregistrar", "Record voice": "Enregistrar la veu", - "Redirecting you to Open WebUI Community": "Redirigint-te a la comunitat OpenWebUI", + "Redirecting you to CyberLover Community": "Redirigint-te a la comunitat OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Redueix la probabilitat de generar ximpleries. Un valor més alt (p. ex. 100) donarà respostes més diverses, mentre que un valor més baix (p. ex. 10) serà més conservador.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Fes referència a tu mateix com a \"Usuari\" (p. ex., \"L'usuari està aprenent espanyol\")", "Reference Chats": "Xats de referència", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Les preferències s'han desat correctament", "Share": "Compartir", "Share Chat": "Compartir el xat", - "Share to Open WebUI Community": "Compartir amb la comunitat OpenWebUI", + "Share to CyberLover Community": "Compartir amb la comunitat OpenWebUI", "Share your background and interests": "Compartir la teva informació i interessos", "Shared with you": "Compartit amb tu", "Sharing Permissions": "Compartir els permisos", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Ara estàs connectat.", "Your Account": "El teu compte", "Your account status is currently pending activation.": "El compte està actualment pendent d'activació", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Tota la teva contribució anirà directament al desenvolupador del complement; Open WebUI no se'n queda cap percentatge. Tanmateix, la plataforma de finançament escollida pot tenir les seves pròpies comissions.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Tota la teva contribució anirà directament al desenvolupador del complement; CyberLover no se'n queda cap percentatge. Tanmateix, la plataforma de finançament escollida pot tenir les seves pròpies comissions.", "YouTube": "Youtube", "Youtube Language": "Idioma de YouTube", "Youtube Proxy URL": "URL de Proxy de Youtube" diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 330fe8d48d..e02ea20ca4 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -337,7 +337,7 @@ "Copy Link": "", "Copy to clipboard": "", "Copying to clipboard was successful!": "Ang pagkopya sa clipboard malampuson!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "", @@ -432,7 +432,7 @@ "Discover a model": "", "Discover a prompt": "Pagkaplag usa ka prompt", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "", - "Made by Open WebUI Community": "Gihimo sa komunidad sa OpenWebUI", + "Made by CyberLover Community": "Gihimo sa komunidad sa OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Siguruha nga palibutan sila", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Ang labing taas nga 3 nga mga disenyo mahimong ma-download nga dungan. ", "May": "", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "", "Memory": "", @@ -1139,10 +1139,10 @@ "Open new chat": "Ablihi ang bag-ong diskusyon", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "OpenAI API", "OpenAI API Config": "", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Irekord ang tingog", - "Redirecting you to Open WebUI Community": "Gi-redirect ka sa komunidad sa OpenWebUI", + "Redirecting you to CyberLover Community": "Gi-redirect ka sa komunidad sa OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Malampuson nga na-save ang mga setting!", "Share": "", "Share Chat": "", - "Share to Open WebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI", + "Share to CyberLover Community": "Ipakigbahin sa komunidad sa OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Konektado ka na karon.", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/cs-CZ/translation.json b/src/lib/i18n/locales/cs-CZ/translation.json index ccee29d517..fbd25709b8 100644 --- a/src/lib/i18n/locales/cs-CZ/translation.json +++ b/src/lib/i18n/locales/cs-CZ/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopírovat odkaz", "Copy to clipboard": "Kopírovat do schránky", "Copying to clipboard was successful!": "Kopírování do schránky bylo úspěšné!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS musí být správně nakonfigurován poskytovatelem, aby povolil požadavky z Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS musí být správně nakonfigurován poskytovatelem, aby povolil požadavky z CyberLover.", "Create": "Vytvořit", "Create a knowledge base": "Vytvořit znalostní bázi", "Create a model": "Vytvořit model", @@ -432,7 +432,7 @@ "Discover a model": "Objevit model", "Discover a prompt": "Objevit instrukci", "Discover a tool": "Objevit nástroj", - "Discover how to use Open WebUI and seek support from the community.": "Zjistěte, jak používat Open WebUI, a vyhledejte podporu od komunity.", + "Discover how to use CyberLover and seek support from the community.": "Zjistěte, jak používat CyberLover, a vyhledejte podporu od komunity.", "Discover wonders": "Objevujte zázraky", "Discover, download, and explore custom functions": "Objevujte, stahujte a zkoumejte vlastní funkce", "Discover, download, and explore custom prompts": "Objevujte, stahujte a prozkoumávejte vlastní instrukce", @@ -958,7 +958,7 @@ "Lost": "Prohrál", "Low": "Nízká", "LTR": "LTR", - "Made by Open WebUI Community": "Vytvořeno komunitou Open WebUI", + "Made by CyberLover Community": "Vytvořeno komunitou CyberLover", "Make password visible in the user interface": "Zviditelnit heslo v uživatelském rozhraní", "Make sure to enclose them with": "Ujistěte se, že jsou uzavřeny v", "Make sure to export a workflow.json file as API format from ComfyUI.": "Ujistěte se, že exportujete soubor workflow.json ve formátu API z ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Současně lze stahovat maximálně 3 modely. Zkuste to prosím později.", "May": "Květen", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "Střední", "Memories accessible by LLMs will be shown here.": "Zde se zobrazí vzpomínky přístupné pro LLM.", "Memory": "Paměť", @@ -1139,10 +1139,10 @@ "Open new chat": "Otevřít novou konverzaci", "Open Sidebar": "Otevřít postranní panel", "Open User Profile Menu": "Otevřít nabídku profilu uživatele", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI může používat nástroje poskytované jakýmkoli serverem OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI interně používá faster-whisper.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI používá SpeechT5 a vektorizaci mluvčích CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verze Open WebUI (v{{OPEN_WEBUI_VERSION}}) je nižší než požadovaná verze (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover může používat nástroje poskytované jakýmkoli serverem OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover interně používá faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover používá SpeechT5 a vektorizaci mluvčích CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verze CyberLover (v{{OPEN_WEBUI_VERSION}}) je nižší než požadovaná verze (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Konfigurace OpenAI API", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "reasoning tags", "Record": "Nahrát", "Record voice": "Nahrát hlas", - "Redirecting you to Open WebUI Community": "Přesměrovávám vás do komunity Open WebUI", + "Redirecting you to CyberLover Community": "Přesměrovávám vás do komunity CyberLover", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Odkazujte na sebe jako na \"Uživatele\" (např. \"Uživatel se učí španělsky\").", "Reference Chats": "Připojit chat", @@ -1436,7 +1436,7 @@ "Settings saved successfully!": "Nastavení byla úspěšně uložena!", "Share": "Sdílet", "Share Chat": "Sdílet konverzaci", - "Share to Open WebUI Community": "Sdílet s komunitou Open WebUI", + "Share to CyberLover Community": "Sdílet s komunitou CyberLover", "Share your background and interests": "Sdílejte své zkušenosti a zájmy", "Shared with you": "Sdíleno s vámi", "Sharing Permissions": "Oprávnění pro sdílení", @@ -1756,7 +1756,7 @@ "You're now logged in.": "Nyní jste přihlášeni.", "Your Account": "Váš účet", "Your account status is currently pending activation.": "Stav vašeho účtu aktuálně čeká na aktivaci.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Celý váš příspěvek půjde přímo vývojáři pluginu; Open WebUI si nebere žádné procento. Zvolená platforma pro financování však může mít vlastní poplatky.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Celý váš příspěvek půjde přímo vývojáři pluginu; CyberLover si nebere žádné procento. Zvolená platforma pro financování však může mít vlastní poplatky.", "YouTube": "YouTube", "Youtube Language": "Jazyk YouTube", "Youtube Proxy URL": "Proxy URL pro YouTube" diff --git a/src/lib/i18n/locales/da-DK/translation.json b/src/lib/i18n/locales/da-DK/translation.json index 40d040e8e0..a4f31623eb 100644 --- a/src/lib/i18n/locales/da-DK/translation.json +++ b/src/lib/i18n/locales/da-DK/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopier link", "Copy to clipboard": "Kopier til udklipsholder", "Copying to clipboard was successful!": "Kopieret til udklipsholder!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS skal være korrekt konfigureret af udbyderen for at tillade anmodninger fra Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS skal være korrekt konfigureret af udbyderen for at tillade anmodninger fra CyberLover.", "Create": "Opret", "Create a knowledge base": "Opret en videnbase", "Create a model": "Lav en model", @@ -432,7 +432,7 @@ "Discover a model": "Find en model", "Discover a prompt": "Find en prompt", "Discover a tool": "Find et værktøj", - "Discover how to use Open WebUI and seek support from the community.": "Opdag hvordan du bruger Open WebUI og søg støtte fra fællesskabet.", + "Discover how to use CyberLover and seek support from the community.": "Opdag hvordan du bruger CyberLover og søg støtte fra fællesskabet.", "Discover wonders": "Opdag underværker", "Discover, download, and explore custom functions": "Find, download og udforsk unikke funktioner", "Discover, download, and explore custom prompts": "Find, download og udforsk unikke prompts", @@ -958,7 +958,7 @@ "Lost": "Tabt", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Lavet af OpenWebUI Community", + "Made by CyberLover Community": "Lavet af OpenWebUI Community", "Make password visible in the user interface": "Gør adgangskode synlig i brugergrænsefladen", "Make sure to enclose them with": "Sørg for at omslutte dem med", "Make sure to export a workflow.json file as API format from ComfyUI.": "Sørg for at eksportere en workflow.json-fil som API-format fra ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Højst 3 modeller kan downloades samtidigt. Prøv igen senere.", "May": "Maj", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Minder, der er tilgængelige for LLM'er, vises her.", "Memory": "Hukommelse", @@ -1139,10 +1139,10 @@ "Open new chat": "Åbn ny chat", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI kan bruge værktøjer leveret af enhver OpenAPI server.", - "Open WebUI uses faster-whisper internally.": "Open WebUI bruger faster-whisper internt.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI bruger SpeechT5 og CMU Arctic taler embeddings.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI-version (v{{OPEN_WEBUI_VERSION}}) er lavere end den krævede version (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kan bruge værktøjer leveret af enhver OpenAPI server.", + "CyberLover uses faster-whisper internally.": "CyberLover bruger faster-whisper internt.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover bruger SpeechT5 og CMU Arctic taler embeddings.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-version (v{{OPEN_WEBUI_VERSION}}) er lavere end den krævede version (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API-konfiguration", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Optag", "Record voice": "Optag stemme", - "Redirecting you to Open WebUI Community": "Omdirigerer dig til OpenWebUI Community", + "Redirecting you to CyberLover Community": "Omdirigerer dig til OpenWebUI Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reducerer sandsynligheden for at generere vrøvl. En højere værdi (f.eks. 100) vil give mere varierede svar, mens en lavere værdi (f.eks. 10) vil være mere konservativ.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referer til dig selv som \"Bruger\" (f.eks. \"Bruger lærer spansk\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Indstillinger gemt!", "Share": "Del", "Share Chat": "Del chat", - "Share to Open WebUI Community": "Del til OpenWebUI Community", + "Share to CyberLover Community": "Del til OpenWebUI Community", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Delingstilladelser", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Du er nu logget ind.", "Your Account": "", "Your account status is currently pending activation.": "Din kontostatus afventer i øjeblikket aktivering.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Hele dit bidrag går direkte til plugin-udvikleren; Open WebUI tager ikke nogen procentdel. Den valgte finansieringsplatform kan dog have sine egne gebyrer.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Hele dit bidrag går direkte til plugin-udvikleren; CyberLover tager ikke nogen procentdel. Den valgte finansieringsplatform kan dog have sine egne gebyrer.", "YouTube": "Youtube", "Youtube Language": "Youtube sprog", "Youtube Proxy URL": "Youtube Proxy URL" diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 077ddbd5c3..c5e46f080d 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Link kopieren", "Copy to clipboard": "In die Zwischenablage kopieren", "Copying to clipboard was successful!": "Das Kopieren in die Zwischenablage war erfolgreich!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS muss vom Anbieter korrekt konfiguriert werden, um Anfragen von Open WebUI zuzulassen.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS muss vom Anbieter korrekt konfiguriert werden, um Anfragen von CyberLover zuzulassen.", "Create": "Erstellen", "Create a knowledge base": "Wissensspeicher erstellen", "Create a model": "Modell erstellen", @@ -432,7 +432,7 @@ "Discover a model": "Entdecken Sie weitere Modelle", "Discover a prompt": "Entdecken Sie weitere Prompts", "Discover a tool": "Entdecken Sie weitere Werkzeuge", - "Discover how to use Open WebUI and seek support from the community.": "Entdecken Sie, wie Sie Open WebUI nutzen und Unterstützung von der Community erhalten können.", + "Discover how to use CyberLover and seek support from the community.": "Entdecken Sie, wie Sie CyberLover nutzen und Unterstützung von der Community erhalten können.", "Discover wonders": "Entdecken Sie Wunder", "Discover, download, and explore custom functions": "Entdecken und beziehen Sie benutzerdefinierte Funktionen", "Discover, download, and explore custom prompts": "Entdecken und beziehen Sie benutzerdefinierte Prompts", @@ -958,7 +958,7 @@ "Lost": "Verloren", "Low": "Niedrig", "LTR": "LTR", - "Made by Open WebUI Community": "Von der OpenWebUI-Community", + "Made by CyberLover Community": "Von der OpenWebUI-Community", "Make password visible in the user interface": "Passwort im Benutzerinterface sichtbar machen", "Make sure to enclose them with": "Umschließen Sie Variablen mit", "Make sure to export a workflow.json file as API format from ComfyUI.": "Stellen Sie sicher, dass sie eine workflow.json-Datei im API-Format von ComfyUI exportieren.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es können maximal 3 Modelle gleichzeitig heruntergeladen werden. Bitte versuchen Sie es später erneut.", "May": "Mai", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "Die MCP-Unterstützung ist experimentell und ihre Spezifikation ändert sich häufig, was zu Inkompatibilitäten führen kann. Die Unterstützung der OpenAPI-Spezifikation wird direkt vom Open‑WebUI‑Team gepflegt und ist daher die verlässlichere Option in Bezug auf Kompatibilität.", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "Die MCP-Unterstützung ist experimentell und ihre Spezifikation ändert sich häufig, was zu Inkompatibilitäten führen kann. Die Unterstützung der OpenAPI-Spezifikation wird direkt vom Open‑WebUI‑Team gepflegt und ist daher die verlässlichere Option in Bezug auf Kompatibilität.", "Medium": "Mittel", "Memories accessible by LLMs will be shown here.": "Erinnerungen, die für Modelle zugänglich sind, werden hier angezeigt.", "Memory": "Erinnerungen", @@ -1139,10 +1139,10 @@ "Open new chat": "Neuen Chat öffnen", "Open Sidebar": "Seitenleiste öffnen", "Open User Profile Menu": "Benutzerprofilmenü öffnen", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI kann Werkzeuge verwenden, die von irgendeinem OpenAPI-Server bereitgestellt werden.", - "Open WebUI uses faster-whisper internally.": "Open WebUI verwendet intern faster-whisper.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI verwendet SpeechT5 und CMU Arctic Sprecher-Embeddings.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Die installierte Open-WebUI-Version (v{{OPEN_WEBUI_VERSION}}) ist niedriger als die erforderliche Version (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kann Werkzeuge verwenden, die von irgendeinem OpenAPI-Server bereitgestellt werden.", + "CyberLover uses faster-whisper internally.": "CyberLover verwendet intern faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover verwendet SpeechT5 und CMU Arctic Sprecher-Embeddings.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Die installierte Open-WebUI-Version (v{{OPEN_WEBUI_VERSION}}) ist niedriger als die erforderliche Version (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI-API", "OpenAI API Config": "OpenAI-API-Konfiguration", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Reasoning Tags", "Record": "Aufzeichnen", "Record voice": "Stimme aufnehmen", - "Redirecting you to Open WebUI Community": "Sie werden zur OpenWebUI-Community weitergeleitet", + "Redirecting you to CyberLover Community": "Sie werden zur OpenWebUI-Community weitergeleitet", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Verringert die Wahrscheinlichkeit, Unsinn zu generieren. Ein höherer Wert (z.\u202fB. 100) führt zu vielfältigeren Antworten, während ein niedrigerer Wert (z.\u202fB. 10) konservativer ist.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Beziehen Sie sich auf sich selbst als \"Benutzer\" (z. B. \"Benutzer lernt Spanisch\")", "Reference Chats": "Chats referenzieren", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Einstellungen erfolgreich gespeichert!", "Share": "Teilen", "Share Chat": "Chat teilen", - "Share to Open WebUI Community": "Mit OpenWebUI Community teilen", + "Share to CyberLover Community": "Mit OpenWebUI Community teilen", "Share your background and interests": "Teilen Sie Ihren Hintergrund und Ihre Interessen", "Shared with you": "Mit dir geteilt", "Sharing Permissions": "Berechtigungen teilen", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Sie sind jetzt eingeloggt.", "Your Account": "Ihr Konto", "Your account status is currently pending activation.": "Ihr Kontostatus ist derzeit ausstehend und wartet auf Aktivierung.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Ihr gesamter Beitrag geht direkt an den Plugin-Entwickler; Open WebUI behält keinen Prozentsatz ein. Die gewählte Finanzierungsplattform kann jedoch eigene Gebühren haben.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Ihr gesamter Beitrag geht direkt an den Plugin-Entwickler; CyberLover behält keinen Prozentsatz ein. Die gewählte Finanzierungsplattform kann jedoch eigene Gebühren haben.", "YouTube": "YouTube", "Youtube Language": "YouTube Sprache", "Youtube Proxy URL": "YouTube Proxy URL" diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index ef808bb31c..7c110cc807 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -337,7 +337,7 @@ "Copy Link": "", "Copy to clipboard": "", "Copying to clipboard was successful!": "Copying to clipboard was success! Very success!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "", @@ -432,7 +432,7 @@ "Discover a model": "", "Discover a prompt": "Discover a prompt", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Discover, download, and explore custom prompts", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "", - "Made by Open WebUI Community": "Made by Open WebUI Community", + "Made by CyberLover Community": "Made by CyberLover Community", "Make password visible in the user interface": "", "Make sure to enclose them with": "Make sure to enclose them with", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximum of 3 models can be downloaded simultaneously. Please try again later.", "May": "", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "", "Memory": "", @@ -1139,10 +1139,10 @@ "Open new chat": "Open new bark", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "OpenAI API", "OpenAI API Config": "", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Record Bark", - "Redirecting you to Open WebUI Community": "Redirecting you to Open WebUI Community", + "Redirecting you to CyberLover Community": "Redirecting you to CyberLover Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Settings saved successfully! Very success!", "Share": "", "Share Chat": "", - "Share to Open WebUI Community": "Share to Open WebUI Community much community", + "Share to CyberLover Community": "Share to CyberLover Community much community", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "You're now logged in. Much logged.", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/el-GR/translation.json b/src/lib/i18n/locales/el-GR/translation.json index 1005c5ab88..39e2c4cead 100644 --- a/src/lib/i18n/locales/el-GR/translation.json +++ b/src/lib/i18n/locales/el-GR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Αντιγραφή Συνδέσμου", "Copy to clipboard": "Αντιγραφή στο πρόχειρο", "Copying to clipboard was successful!": "Η αντιγραφή στο πρόχειρο ήταν επιτυχής!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "Δημιουργία", "Create a knowledge base": "Δημιουργία βάσης γνώσης", "Create a model": "Δημιουργία μοντέλου", @@ -432,7 +432,7 @@ "Discover a model": "Ανακάλυψη μοντέλου", "Discover a prompt": "Ανακάλυψη προτροπής", "Discover a tool": "Ανακάλυψη εργαλείου", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "Ανακάλυψη θαυμάτων", "Discover, download, and explore custom functions": "Ανακαλύψτε, κατεβάστε και εξερευνήστε προσαρμοσμένες λειτουργίες", "Discover, download, and explore custom prompts": "Ανακαλύψτε, κατεβάστε και εξερευνήστε προσαρμοσμένες προτροπές", @@ -958,7 +958,7 @@ "Lost": "Χαμένος", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Δημιουργήθηκε από την Κοινότητα OpenWebUI", + "Made by CyberLover Community": "Δημιουργήθηκε από την Κοινότητα OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Βεβαιωθείτε ότι τα περικλείετε με", "Make sure to export a workflow.json file as API format from ComfyUI.": "Βεβαιωθείτε ότι εξάγετε ένα αρχείο workflow.json ως μορφή API από το ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Μέγιστο των 3 μοντέλων μπορούν να κατεβούν ταυτόχρονα. Παρακαλώ δοκιμάστε ξανά αργότερα.", "May": "Μάιος", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Οι αναμνήσεις προσβάσιμες από τα LLMs θα εμφανιστούν εδώ.", "Memory": "Μνήμη", @@ -1139,10 +1139,10 @@ "Open new chat": "Άνοιγμα νέας συνομιλίας", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Το Open WebUI χρησιμοποιεί το faster-whisper εσωτερικά.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Το Open WebUI χρησιμοποιεί τα SpeechT5 και CMU Arctic embeddings ομιλητών.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Η έκδοση Open WebUI (v{{OPEN_WEBUI_VERSION}}) είναι χαμηλότερη από την απαιτούμενη έκδοση (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "Το CyberLover χρησιμοποιεί το faster-whisper εσωτερικά.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Το CyberLover χρησιμοποιεί τα SpeechT5 και CMU Arctic embeddings ομιλητών.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Η έκδοση CyberLover (v{{OPEN_WEBUI_VERSION}}) είναι χαμηλότερη από την απαιτούμενη έκδοση (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Διαμόρφωση API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Εγγραφή φωνής", - "Redirecting you to Open WebUI Community": "Μετακατεύθυνση στην Κοινότητα OpenWebUI", + "Redirecting you to CyberLover Community": "Μετακατεύθυνση στην Κοινότητα OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Αναφέρεστε στον εαυτό σας ως \"User\" (π.χ., \"User μαθαίνει Ισπανικά\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Οι Ρυθμίσεις αποθηκεύτηκαν με επιτυχία!", "Share": "Κοινή Χρήση", "Share Chat": "Κοινή Χρήση Συνομιλίας", - "Share to Open WebUI Community": "Κοινή Χρήση στην Κοινότητα OpenWebUI", + "Share to CyberLover Community": "Κοινή Χρήση στην Κοινότητα OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Τώρα είστε συνδεδεμένοι.", "Your Account": "", "Your account status is currently pending activation.": "Η κατάσταση του λογαριασμού σας είναι αυτή τη στιγμή σε εκκρεμότητα ενεργοποίησης.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Η ολόκληρη η συνεισφορά σας θα πάει απευθείας στον προγραμματιστή του plugin· το Open WebUI δεν παίρνει κανένα ποσοστό. Ωστόσο, η επιλεγμένη πλατφόρμα χρηματοδότησης μπορεί να έχει τα δικά της τέλη.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Η ολόκληρη η συνεισφορά σας θα πάει απευθείας στον προγραμματιστή του plugin· το CyberLover δεν παίρνει κανένα ποσοστό. Ωστόσο, η επιλεγμένη πλατφόρμα χρηματοδότησης μπορεί να έχει τα δικά της τέλη.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index e2a7b6fbdf..5d982c8a1b 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -337,7 +337,7 @@ "Copy Link": "", "Copy to clipboard": "", "Copying to clipboard was successful!": "", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "", @@ -432,7 +432,7 @@ "Discover a model": "", "Discover a prompt": "", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "", - "Made by Open WebUI Community": "", + "Made by CyberLover Community": "", "Make password visible in the user interface": "", "Make sure to enclose them with": "", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "", "May": "", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "", "Memory": "", @@ -1139,10 +1139,10 @@ "Open new chat": "", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "", "OpenAI API Config": "", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "", - "Redirecting you to Open WebUI Community": "", + "Redirecting you to CyberLover Community": "", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "", "Share": "", "Share Chat": "", - "Share to Open WebUI Community": "", + "Share to CyberLover Community": "", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 0ed731795f..99604c1ba5 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -337,7 +337,7 @@ "Copy Link": "", "Copy to clipboard": "", "Copying to clipboard was successful!": "", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "", @@ -432,7 +432,7 @@ "Discover a model": "", "Discover a prompt": "", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "", - "Made by Open WebUI Community": "", + "Made by CyberLover Community": "", "Make password visible in the user interface": "", "Make sure to enclose them with": "", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "", "May": "", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "", "Memory": "", @@ -1139,10 +1139,10 @@ "Open new chat": "", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "", "OpenAI API Config": "", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "", - "Redirecting you to Open WebUI Community": "", + "Redirecting you to CyberLover Community": "", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "", "Share": "", "Share Chat": "", - "Share to Open WebUI Community": "", + "Share to CyberLover Community": "", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index a78ad5b9b2..0cacab6550 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copiar enlace", "Copy to clipboard": "Copia a portapapeles", "Copying to clipboard was successful!": "¡La copia al portapapeles se ha realizado correctamente!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "El protocolo CORS debe estar configurado correctamente por el proveedor para permitir solicitudes desde Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "El protocolo CORS debe estar configurado correctamente por el proveedor para permitir solicitudes desde CyberLover.", "Create": "Crear", "Create a knowledge base": "Crear Base de Conocimiento", "Create a model": "Crear Modelo", @@ -432,7 +432,7 @@ "Discover a model": "Descubrir Modelos", "Discover a prompt": "Descubrir Indicadores", "Discover a tool": "Descubrir Herramientas", - "Discover how to use Open WebUI and seek support from the community.": "Descubre cómo usar Open WebUI y busca Soporte Comunitario.", + "Discover how to use CyberLover and seek support from the community.": "Descubre cómo usar CyberLover y busca Soporte Comunitario.", "Discover wonders": "Descubre Maravillas", "Discover, download, and explore custom functions": "Descubre, descarga y explora funciones personalizadas", "Discover, download, and explore custom prompts": "Descubre, descarga, y explora indicadores personalizados", @@ -958,7 +958,7 @@ "Lost": "Perdido", "Low": "Bajo", "LTR": "LTR", - "Made by Open WebUI Community": "Creado por la Comunidad Open-WebUI", + "Made by CyberLover Community": "Creado por la Comunidad Open-WebUI", "Make password visible in the user interface": "Hacer visible la contraseña en la interfaz del usuario.", "Make sure to enclose them with": "Asegúrate de delimitarlos con", "Make sure to export a workflow.json file as API format from ComfyUI.": "Asegúrate de exportar un archivo workflow.json en formato API desde ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Se puede descargar un máximo de 3 modelos simultáneamente. Por favor, reinténtelo más tarde.", "May": "Mayo", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "El soporte de MCP es experimental y su especificación cambia con frecuencia, lo que puede generar incompatibilidades. El equipo de Open WebUI mantiene directamente la compatibilidad con la especificación OpenAPI, lo que la convierte en la opción más fiable para la compatibilidad.", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "El soporte de MCP es experimental y su especificación cambia con frecuencia, lo que puede generar incompatibilidades. El equipo de CyberLover mantiene directamente la compatibilidad con la especificación OpenAPI, lo que la convierte en la opción más fiable para la compatibilidad.", "Medium": "Medio", "Memories accessible by LLMs will be shown here.": "Las memorias accesibles por los LLMs se mostrarán aquí.", "Memory": "Memoria", @@ -1139,10 +1139,10 @@ "Open new chat": "Abrir nuevo chat", "Open Sidebar": "Abrir Barra Lateral", "Open User Profile Menu": "Abrir Menu de Perfiles de Usuario", - "Open WebUI can use tools provided by any OpenAPI server.": "Open-WebUI puede usar herramientas proporcionadas por cualquier servidor OpenAPI", - "Open WebUI uses faster-whisper internally.": "Open-WebUI usa faster-whisper internamente.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open-WebUI usa SpeechT5 y la incrustración de locutores de CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versión de Open-WebUI (v{{OPEN_WEBUI_VERSION}}) es inferior a la versión (v{{REQUIRED_VERSION}}) requerida", + "CyberLover can use tools provided by any OpenAPI server.": "Open-WebUI puede usar herramientas proporcionadas por cualquier servidor OpenAPI", + "CyberLover uses faster-whisper internally.": "Open-WebUI usa faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Open-WebUI usa SpeechT5 y la incrustración de locutores de CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versión de Open-WebUI (v{{OPEN_WEBUI_VERSION}}) es inferior a la versión (v{{REQUIRED_VERSION}}) requerida", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Config API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Etiquetas de Razonamiento", "Record": "Grabar", "Record voice": "Grabar voz", - "Redirecting you to Open WebUI Community": "Redireccionando a la Comunidad Open-WebUI", + "Redirecting you to CyberLover Community": "Redireccionando a la Comunidad Open-WebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reduce la probabilidad de generación sin sentido. Un valor más alto (p.ej. 100) dará respuestas más diversas, mientras que un valor más bajo (p.ej. 10) será más conservador.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referir a ti mismo como \"Usuario\" (p.ej. \"Usuario está aprendiendo Español\")", "Reference Chats": "Referenciar Chats", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "¡Ajustes guardados correctamente!", "Share": "Compartir", "Share Chat": "Compartir Chat", - "Share to Open WebUI Community": "Compartir con la Comunidad Open-WebUI", + "Share to CyberLover Community": "Compartir con la Comunidad Open-WebUI", "Share your background and interests": "Compartir tus antecedentes e intereses", "Shared with you": "Compartido contigo", "Sharing Permissions": "Permisos al Compartir", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Has iniciado sesión.", "Your Account": "Tu Cuenta", "Your account status is currently pending activation.": "Tu cuenta está pendiente de activación.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Tu entera contribución irá directamente al desarrollador del complemento; Open-WebUI no recibe ningún porcentaje. Sin embargo, la plataforma de financiación elegida podría tener sus propias tarifas.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Tu entera contribución irá directamente al desarrollador del complemento; Open-WebUI no recibe ningún porcentaje. Sin embargo, la plataforma de financiación elegida podría tener sus propias tarifas.", "YouTube": "Youtube", "Youtube Language": "Youtube Idioma", "Youtube Proxy URL": "Youtube URL Proxy" diff --git a/src/lib/i18n/locales/et-EE/translation.json b/src/lib/i18n/locales/et-EE/translation.json index ffb0e87b44..6ba61c4922 100644 --- a/src/lib/i18n/locales/et-EE/translation.json +++ b/src/lib/i18n/locales/et-EE/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopeeri link", "Copy to clipboard": "Kopeeri lõikelauale", "Copying to clipboard was successful!": "Lõikelauale kopeerimine õnnestus!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Teenusepakkuja peab nõuetekohaselt konfigureerima CORS-i, et lubada päringuid Open WebUI-lt.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Teenusepakkuja peab nõuetekohaselt konfigureerima CORS-i, et lubada päringuid CyberLover-lt.", "Create": "Loo", "Create a knowledge base": "Loo teadmiste baas", "Create a model": "Loo mudel", @@ -432,7 +432,7 @@ "Discover a model": "Avasta mudel", "Discover a prompt": "Avasta vihje", "Discover a tool": "Avasta tööriist", - "Discover how to use Open WebUI and seek support from the community.": "Avastage, kuidas kasutada Open WebUI-d ja otsige tuge kogukonnalt.", + "Discover how to use CyberLover and seek support from the community.": "Avastage, kuidas kasutada CyberLover-d ja otsige tuge kogukonnalt.", "Discover wonders": "Avasta imesid", "Discover, download, and explore custom functions": "Avasta, laadi alla ja uuri kohandatud funktsioone", "Discover, download, and explore custom prompts": "Avasta, laadi alla ja uuri kohandatud vihjeid", @@ -958,7 +958,7 @@ "Lost": "Kaotanud", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Loodud Open WebUI kogukonna poolt", + "Made by CyberLover Community": "Loodud CyberLover kogukonna poolt", "Make password visible in the user interface": "", "Make sure to enclose them with": "Veenduge, et need on ümbritsetud järgmisega:", "Make sure to export a workflow.json file as API format from ComfyUI.": "Veenduge, et ekspordite workflow.json faili API formaadis ComfyUI-st.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Korraga saab alla laadida maksimaalselt 3 mudelit. Palun proovige hiljem uuesti.", "May": "Mai", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLM-idele ligipääsetavad mälestused kuvatakse siin.", "Memory": "Mälu", @@ -1139,10 +1139,10 @@ "Open new chat": "Ava uus vestlus", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI kasutab sisemiselt faster-whisper'it.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI kasutab SpeechT5 ja CMU Arctic kõneleja manustamisi.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI versioon (v{{OPEN_WEBUI_VERSION}}) on madalam kui nõutav versioon (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover kasutab sisemiselt faster-whisper'it.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover kasutab SpeechT5 ja CMU Arctic kõneleja manustamisi.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover versioon (v{{OPEN_WEBUI_VERSION}}) on madalam kui nõutav versioon (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API seadistus", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Salvesta hääl", - "Redirecting you to Open WebUI Community": "Suunamine Open WebUI kogukonda", + "Redirecting you to CyberLover Community": "Suunamine CyberLover kogukonda", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Vähendab mõttetuste genereerimise tõenäosust. Kõrgem väärtus (nt 100) annab mitmekesisemaid vastuseid, samas kui madalam väärtus (nt 10) on konservatiivsem.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Viita endale kui \"Kasutaja\" (nt \"Kasutaja õpib hispaania keelt\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Seaded edukalt salvestatud!", "Share": "Jaga", "Share Chat": "Jaga vestlust", - "Share to Open WebUI Community": "Jaga Open WebUI kogukonnaga", + "Share to CyberLover Community": "Jaga CyberLover kogukonnaga", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Olete nüüd sisse logitud.", "Your Account": "", "Your account status is currently pending activation.": "Teie konto staatus on praegu ootel aktiveerimist.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Kogu teie toetus läheb otse pistikprogrammi arendajale; Open WebUI ei võta mingit protsenti. Kuid valitud rahastamisplatvormil võivad olla oma tasud.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Kogu teie toetus läheb otse pistikprogrammi arendajale; CyberLover ei võta mingit protsenti. Kuid valitud rahastamisplatvormil võivad olla oma tasud.", "YouTube": "Youtube", "Youtube Language": "Youtube keel", "Youtube Proxy URL": "Youtube puhverserveri URL" diff --git a/src/lib/i18n/locales/eu-ES/translation.json b/src/lib/i18n/locales/eu-ES/translation.json index 7ba3570f04..3592933f30 100644 --- a/src/lib/i18n/locales/eu-ES/translation.json +++ b/src/lib/i18n/locales/eu-ES/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopiatu Esteka", "Copy to clipboard": "Kopiatu arbelera", "Copying to clipboard was successful!": "Arbelera kopiatzea arrakastatsua izan da!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "Sortu", "Create a knowledge base": "Sortu ezagutza-base bat", "Create a model": "Sortu eredu bat", @@ -432,7 +432,7 @@ "Discover a model": "Aurkitu eredu bat", "Discover a prompt": "Aurkitu prompt bat", "Discover a tool": "Aurkitu tresna bat", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "Aurkitu mirariak", "Discover, download, and explore custom functions": "Aurkitu, deskargatu eta esploratu funtzio pertsonalizatuak", "Discover, download, and explore custom prompts": "Aurkitu, deskargatu eta esploratu prompt pertsonalizatuak", @@ -958,7 +958,7 @@ "Lost": "Galduta", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "OpenWebUI Komunitateak egina", + "Made by CyberLover Community": "OpenWebUI Komunitateak egina", "Make password visible in the user interface": "", "Make sure to enclose them with": "Ziurtatu hauek gehitzen dituzula", "Make sure to export a workflow.json file as API format from ComfyUI.": "Ziurtatu workflow.json fitxategia API formatu gisa esportatzen duzula ComfyUI-tik.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Gehienez 3 modelo deskarga daitezke aldi berean. Saiatu berriro geroago.", "May": "Maiatza", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLMek atzitu ditzaketen memoriak hemen erakutsiko dira.", "Memory": "Memoria", @@ -1139,10 +1139,10 @@ "Open new chat": "Ireki txat berria", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI-k faster-whisper erabiltzen du barnean.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI-k SpeechT5 eta CMU Arctic hiztun txertaketak erabiltzen ditu.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI bertsioa (v{{OPEN_WEBUI_VERSION}}) beharrezko bertsioa (v{{REQUIRED_VERSION}}) baino baxuagoa da", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover-k faster-whisper erabiltzen du barnean.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover-k SpeechT5 eta CMU Arctic hiztun txertaketak erabiltzen ditu.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover bertsioa (v{{OPEN_WEBUI_VERSION}}) beharrezko bertsioa (v{{REQUIRED_VERSION}}) baino baxuagoa da", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfigurazioa", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Grabatu ahotsa", - "Redirecting you to Open WebUI Community": "OpenWebUI Komunitatera berbideratzen", + "Redirecting you to CyberLover Community": "OpenWebUI Komunitatera berbideratzen", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Egin erreferentzia zure buruari \"Erabiltzaile\" gisa (adib., \"Erabiltzailea gaztelania ikasten ari da\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Ezarpenak ongi gorde dira!", "Share": "Partekatu", "Share Chat": "Partekatu txata", - "Share to Open WebUI Community": "Partekatu OpenWebUI komunitatearekin", + "Share to CyberLover Community": "Partekatu OpenWebUI komunitatearekin", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Orain saioa hasita duzu.", "Your Account": "", "Your account status is currently pending activation.": "Zure kontuaren egoera aktibazio zain dago.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Zure ekarpen osoa zuzenean plugin garatzaileari joango zaio; Open WebUI-k ez du ehunekorik hartzen. Hala ere, aukeratutako finantzaketa plataformak bere komisioak izan ditzake.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Zure ekarpen osoa zuzenean plugin garatzaileari joango zaio; CyberLover-k ez du ehunekorik hartzen. Hala ere, aukeratutako finantzaketa plataformak bere komisioak izan ditzake.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 4bd2735e28..8b198078f3 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "کپی لینک", "Copy to clipboard": "کپی به کلیپ\u200cبورد", "Copying to clipboard was successful!": "کپی کردن در کلیپ بورد با موفقیت انجام شد!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS باید توسط ارائه\u200cدهنده به درستی پیکربندی شود تا درخواست\u200cها از Open WebUI مجاز باشند.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS باید توسط ارائه\u200cدهنده به درستی پیکربندی شود تا درخواست\u200cها از CyberLover مجاز باشند.", "Create": "ایجاد", "Create a knowledge base": "ایجاد یک پایگاه دانش", "Create a model": "ایجاد یک مدل", @@ -432,7 +432,7 @@ "Discover a model": "کشف یک مدل", "Discover a prompt": "یک اعلان را کشف کنید", "Discover a tool": "کشف یک ابزار", - "Discover how to use Open WebUI and seek support from the community.": "نحوه استفاده از Open WebUI را کشف کنید و از انجمن پشتیبانی بگیرید.", + "Discover how to use CyberLover and seek support from the community.": "نحوه استفاده از CyberLover را کشف کنید و از انجمن پشتیبانی بگیرید.", "Discover wonders": "کشف شگفتی\u200cها", "Discover, download, and explore custom functions": "کشف، دانلود و کاوش توابع سفارشی", "Discover, download, and explore custom prompts": "پرامپت\u200cهای سفارشی را کشف، دانلود و کاوش کنید", @@ -958,7 +958,7 @@ "Lost": "گم شده", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "ساخته شده توسط OpenWebUI Community", + "Made by CyberLover Community": "ساخته شده توسط OpenWebUI Community", "Make password visible in the user interface": "", "Make sure to enclose them with": "مطمئن شوید که آنها را با این محصور کنید:", "Make sure to export a workflow.json file as API format from ComfyUI.": "مطمئن شوید که یک فایل workflow.json را به عنوان قالب API از ComfyUI صادر کنید.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.", "May": "ماهی", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "حافظه های دسترسی به LLMs در اینجا نمایش داده می شوند.", "Memory": "حافظه", @@ -1139,10 +1139,10 @@ "Open new chat": "باز کردن گپ جدید", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI می\u200cتواند از ابزارهای ارائه شده توسط هر سرور OpenAPI استفاده کند.", - "Open WebUI uses faster-whisper internally.": "Open WebUI به صورت داخلی از faster-whisper استفاده می\u200cکند.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI از SpeechT5 و جاسازی\u200cهای گوینده CMU Arctic استفاده می\u200cکند.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "نسخه Open WebUI (v{{OPEN_WEBUI_VERSION}}) پایین\u200cتر از نسخه مورد نیاز (v{{REQUIRED_VERSION}}) است", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover می\u200cتواند از ابزارهای ارائه شده توسط هر سرور OpenAPI استفاده کند.", + "CyberLover uses faster-whisper internally.": "CyberLover به صورت داخلی از faster-whisper استفاده می\u200cکند.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover از SpeechT5 و جاسازی\u200cهای گوینده CMU Arctic استفاده می\u200cکند.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "نسخه CyberLover (v{{OPEN_WEBUI_VERSION}}) پایین\u200cتر از نسخه مورد نیاز (v{{REQUIRED_VERSION}}) است", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API تنظیمات", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "ضبط صدا", - "Redirecting you to Open WebUI Community": "در حال هدایت به OpenWebUI Community", + "Redirecting you to CyberLover Community": "در حال هدایت به OpenWebUI Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "احتمال تولید محتوای بی\u200cمعنی را کاهش می\u200cدهد. مقدار بالاتر (مثلاً 100) پاسخ\u200cهای متنوع\u200cتری می\u200cدهد، در حالی که مقدار پایین\u200cتر (مثلاً 10) محافظه\u200cکارانه\u200cتر خواهد بود.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "به خود به عنوان \"کاربر\" اشاره کنید (مثلاً، \"کاربر در حال یادگیری اسپانیایی است\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "تنظیمات با موفقیت ذخیره شد!", "Share": "اشتراک\u200cگذاری", "Share Chat": "اشتراک\u200cگذاری چت", - "Share to Open WebUI Community": "اشتراک گذاری با OpenWebUI Community", + "Share to CyberLover Community": "اشتراک گذاری با OpenWebUI Community", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "مجوزهای اشتراک\u200cگذاری", @@ -1754,7 +1754,7 @@ "You're now logged in.": "شما اکنون وارد شده\u200cاید.", "Your Account": "", "Your account status is currently pending activation.": "وضعیت حساب شما در حال حاضر در انتظار فعال\u200cسازی است.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "تمام مشارکت شما مستقیماً به توسعه\u200cدهنده افزونه می\u200cرسد؛ Open WebUI هیچ درصدی دریافت نمی\u200cکند. با این حال، پلتفرم تأمین مالی انتخاب شده ممکن است کارمزد خود را داشته باشد.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "تمام مشارکت شما مستقیماً به توسعه\u200cدهنده افزونه می\u200cرسد؛ CyberLover هیچ درصدی دریافت نمی\u200cکند. با این حال، پلتفرم تأمین مالی انتخاب شده ممکن است کارمزد خود را داشته باشد.", "YouTube": "یوتیوب", "Youtube Language": "زبان یوتیوب", "Youtube Proxy URL": "آدرس پراکسی یوتیوب" diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index b3d61ab624..f6c681558b 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopioi linkki", "Copy to clipboard": "Kopioi leikepöydälle", "Copying to clipboard was successful!": "Kopioiminen leikepöydälle onnistui!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS täytyy olla konfiguroitu palveluntarjoajan toimesta pyyntöjen hyväksymiseksi Open WebUI:sta.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS täytyy olla konfiguroitu palveluntarjoajan toimesta pyyntöjen hyväksymiseksi CyberLover:sta.", "Create": "Luo", "Create a knowledge base": "Luo tietokanta", "Create a model": "Luo malli", @@ -432,7 +432,7 @@ "Discover a model": "Tutustu malliin", "Discover a prompt": "Löydä kehote", "Discover a tool": "Löydä työkalu", - "Discover how to use Open WebUI and seek support from the community.": "Tutustu Open WebUI:n käyttöön ja pyydä tukea yhteisöltä.", + "Discover how to use CyberLover and seek support from the community.": "Tutustu CyberLover:n käyttöön ja pyydä tukea yhteisöltä.", "Discover wonders": "Löydä ihmeellisiä asioita", "Discover, download, and explore custom functions": "Etsi, lataa ja tutki mukautettuja toimintoja", "Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita", @@ -958,7 +958,7 @@ "Lost": "Mennyt", "Low": "Matala", "LTR": "LTR", - "Made by Open WebUI Community": "Tehnyt OpenWebUI-yhteisö", + "Made by CyberLover Community": "Tehnyt OpenWebUI-yhteisö", "Make password visible in the user interface": "Näytä salasana käyttöliittymässä", "Make sure to enclose them with": "Varmista, että suljet ne", "Make sure to export a workflow.json file as API format from ComfyUI.": "Muista viedä workflow.json-tiedosto API-muodossa ComfyUI:sta.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Enintään 3 mallia voidaan ladata samanaikaisesti. Yritä myöhemmin uudelleen.", "May": "toukokuu", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "MCP-tuki on kokeellinen ja sen määritykset muuttuvat usein, mikä voi johtaa yhteensopivuus ongelmiin. OpenAPI-määritysten tuesta vastaa suoraan Open WebUI -tiimi, joten se on luotettavampi vaihtoehto yhteensopivuuden kannalta.", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "MCP-tuki on kokeellinen ja sen määritykset muuttuvat usein, mikä voi johtaa yhteensopivuus ongelmiin. OpenAPI-määritysten tuesta vastaa suoraan CyberLover -tiimi, joten se on luotettavampi vaihtoehto yhteensopivuuden kannalta.", "Medium": "Keskitaso", "Memories accessible by LLMs will be shown here.": "Muistitiedostot, joita LLM-ohjelmat käyttävät, näkyvät tässä.", "Memory": "Muisti", @@ -1139,10 +1139,10 @@ "Open new chat": "Avaa uusi keskustelu", "Open Sidebar": "Avaa sivupalkki", "Open User Profile Menu": "Avaa käyttäjäprofiili ikkuna", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI voi käyttää minkä tahansa OpenAPI-palvelimen tarjoamia työkaluja.", - "Open WebUI uses faster-whisper internally.": "Open WebUI käyttää faster-whisperia sisäisesti.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI käyttää SpeechT5:tä ja CMU Arctic -kaiuttimen upotuksia.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI -versio (v{{OPEN_WEBUI_VERSION}}) on alempi kuin vaadittu versio (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover voi käyttää minkä tahansa OpenAPI-palvelimen tarjoamia työkaluja.", + "CyberLover uses faster-whisper internally.": "CyberLover käyttää faster-whisperia sisäisesti.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover käyttää SpeechT5:tä ja CMU Arctic -kaiuttimen upotuksia.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover -versio (v{{OPEN_WEBUI_VERSION}}) on alempi kuin vaadittu versio (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API -asetukset", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Päättely tagit", "Record": "Nauhoita", "Record voice": "Nauhoita ääntä", - "Redirecting you to Open WebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön", + "Redirecting you to CyberLover Community": "Ohjataan sinut OpenWebUI-yhteisöön", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Vähentää hölynpölyn tuottamisen todennäköisyyttä. Korkeampi arvo (esim. 100) antaa monipuolisempia vastauksia, kun taas matalampi arvo (esim. 10) on varovaisempi.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Viittaa itseen \"Käyttäjänä\" (esim. \"Käyttäjä opiskelee espanjaa\")", "Reference Chats": "Viitekeskustelut", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Asetukset tallennettu onnistuneesti!", "Share": "Jaa", "Share Chat": "Jaa keskustelu", - "Share to Open WebUI Community": "Jaa OpenWebUI-yhteisöön", + "Share to CyberLover Community": "Jaa OpenWebUI-yhteisöön", "Share your background and interests": "Jaa taustasi ja kiinnostuksen kohteesi", "Shared with you": "Jaettu kanssasi", "Sharing Permissions": "Jako oikeudet", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Olet nyt kirjautunut sisään.", "Your Account": "Tilisi", "Your account status is currently pending activation.": "Tilisi tila on tällä hetkellä odottaa aktivointia.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Koko panoksesi menee suoraan lisäosan kehittäjälle; Open WebUI ei pidätä prosenttiosuutta. Valittu rahoitusalusta voi kuitenkin periä omia maksujaan.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Koko panoksesi menee suoraan lisäosan kehittäjälle; CyberLover ei pidätä prosenttiosuutta. Valittu rahoitusalusta voi kuitenkin periä omia maksujaan.", "YouTube": "YouTube", "Youtube Language": "Youtube kieli", "Youtube Proxy URL": "Youtube-välityspalvelimen verkko-osoite" diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 92c95f6e43..6ca659309b 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copier le lien", "Copy to clipboard": "Copier dans le presse-papiers", "Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Le réglage CORS doit être correctement configuré par le fournisseur pour autoriser les requêtes provenant de l'Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Le réglage CORS doit être correctement configuré par le fournisseur pour autoriser les requêtes provenant de l'CyberLover.", "Create": "Créer", "Create a knowledge base": "Créer une base de connaissances", "Create a model": "Créer un modèle", @@ -432,7 +432,7 @@ "Discover a model": "Trouvez un modèle", "Discover a prompt": "Trouvez un prompt", "Discover a tool": "Trouvez un outil", - "Discover how to use Open WebUI and seek support from the community.": "Découvrez comment utiliser Open WebUI et obtenir de l'aide de la communauté.", + "Discover how to use CyberLover and seek support from the community.": "Découvrez comment utiliser CyberLover et obtenir de l'aide de la communauté.", "Discover wonders": "Découvrir des merveilles", "Discover, download, and explore custom functions": "Découvrez, téléchargez et explorez des fonctions personnalisées", "Discover, download, and explore custom prompts": "Découvrez, téléchargez et explorez des prompts personnalisés", @@ -958,7 +958,7 @@ "Lost": "Perdu", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Réalisé par la communauté OpenWebUI", + "Made by CyberLover Community": "Réalisé par la communauté OpenWebUI", "Make password visible in the user interface": "Rendre visible les mots de passe dans l'interface", "Make sure to enclose them with": "Assurez-vous de les inclure dans", "Make sure to export a workflow.json file as API format from ComfyUI.": "Veillez à exporter un fichier workflow.json au format API depuis ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé en même temps. Veuillez réessayer ultérieurement.", "May": "Mai", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Les souvenirs accessibles par les LLMs seront affichées ici.", "Memory": "Mémoire", @@ -1139,10 +1139,10 @@ "Open new chat": "Ouvrir une nouvelle conversation", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI utilise faster-whisper en interne.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version Open WebUI (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilise faster-whisper en interne.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version CyberLover (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API compatibles OpenAI", "OpenAI API Config": "Configuration de l'API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Enregistrement", "Record voice": "Enregistrer la voix", - "Redirecting you to Open WebUI Community": "Redirection vers la communauté OpenWebUI", + "Redirecting you to CyberLover Community": "Redirection vers la communauté OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Réduit la probabilité de générer du contenu incohérent. Une valeur plus élevée (ex. : 100) produira des réponses plus variées, tandis qu'une valeur plus faible (ex. : 10) sera plus conservatrice.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Désignez-vous comme « Utilisateur » (par ex. « L'utilisateur apprend l'espagnol »)", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Réglages enregistrés avec succès !", "Share": "Partager", "Share Chat": "Partage de conversation", - "Share to Open WebUI Community": "Partager avec la communauté OpenWebUI", + "Share to CyberLover Community": "Partager avec la communauté OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Autorisation de partage", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Vous êtes désormais connecté.", "Your Account": "", "Your account status is currently pending activation.": "Votre statut de compte est actuellement en attente d'activation.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "L'intégralité de votre contribution ira directement au développeur du plugin ; Open WebUI ne prend aucun pourcentage. Cependant, la plateforme de financement choisie peut avoir ses propres frais.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "L'intégralité de votre contribution ira directement au développeur du plugin ; CyberLover ne prend aucun pourcentage. Cependant, la plateforme de financement choisie peut avoir ses propres frais.", "YouTube": "YouTube", "Youtube Language": "Langue de Youtube", "Youtube Proxy URL": "URL du proxy YouTube" diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 6836db111f..2d7895086c 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copier le lien", "Copy to clipboard": "Copier dans le presse-papiers", "Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Le réglage CORS doit être correctement configuré par le fournisseur pour autoriser les requêtes provenant de l'Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Le réglage CORS doit être correctement configuré par le fournisseur pour autoriser les requêtes provenant de l'CyberLover.", "Create": "Créer", "Create a knowledge base": "Créer une base de connaissances", "Create a model": "Créer un modèle", @@ -432,7 +432,7 @@ "Discover a model": "Trouvez un modèle", "Discover a prompt": "Trouvez un prompt", "Discover a tool": "Trouvez un outil", - "Discover how to use Open WebUI and seek support from the community.": "Découvrez comment utiliser Open WebUI et obtenir de l'aide de la communauté.", + "Discover how to use CyberLover and seek support from the community.": "Découvrez comment utiliser CyberLover et obtenir de l'aide de la communauté.", "Discover wonders": "Découvrir des merveilles", "Discover, download, and explore custom functions": "Découvrez, téléchargez et explorez des fonctions personnalisées", "Discover, download, and explore custom prompts": "Découvrez, téléchargez et explorez des prompts personnalisés", @@ -958,7 +958,7 @@ "Lost": "Perdu", "Low": "Faible", "LTR": "LTR", - "Made by Open WebUI Community": "Réalisé par la communauté OpenWebUI", + "Made by CyberLover Community": "Réalisé par la communauté OpenWebUI", "Make password visible in the user interface": "Rendre visible les mots de passe dans l'interface", "Make sure to enclose them with": "Assurez-vous de les inclure dans", "Make sure to export a workflow.json file as API format from ComfyUI.": "Veillez à exporter un fichier workflow.json au format API depuis ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé en même temps. Veuillez réessayer ultérieurement.", "May": "Mai", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "Moyen", "Memories accessible by LLMs will be shown here.": "Les souvenirs accessibles par les LLMs seront affichées ici.", "Memory": "Mémoire", @@ -1139,10 +1139,10 @@ "Open new chat": "Ouvrir une nouvelle conversation", "Open Sidebar": "Ouvrir la barre latérale", "Open User Profile Menu": "Ouvrir le menu du profil utilisateur", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI utilise faster-whisper en interne.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version Open WebUI (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilise faster-whisper en interne.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version CyberLover (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API compatibles OpenAI", "OpenAI API Config": "Configuration de l'API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Mots-clés de raisonnement", "Record": "Enregistrement", "Record voice": "Enregistrer la voix", - "Redirecting you to Open WebUI Community": "Redirection vers la communauté OpenWebUI", + "Redirecting you to CyberLover Community": "Redirection vers la communauté OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Réduit la probabilité de générer du contenu incohérent. Une valeur plus élevée (ex. : 100) produira des réponses plus variées, tandis qu'une valeur plus faible (ex. : 10) sera plus conservatrice.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Désignez-vous comme « Utilisateur » (par ex. « L'utilisateur apprend l'espagnol »)", "Reference Chats": "Discussions de référence", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Réglages enregistrés avec succès !", "Share": "Partager", "Share Chat": "Partage de conversation", - "Share to Open WebUI Community": "Partager avec la communauté OpenWebUI", + "Share to CyberLover Community": "Partager avec la communauté OpenWebUI", "Share your background and interests": "Partagez votre parcours et vos intérêts", "Shared with you": "", "Sharing Permissions": "Autorisation de partage", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Vous êtes désormais connecté.", "Your Account": "Votre compte", "Your account status is currently pending activation.": "Votre statut de compte est actuellement en attente d'activation.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "L'intégralité de votre contribution ira directement au développeur du plugin ; Open WebUI ne prend aucun pourcentage. Cependant, la plateforme de financement choisie peut avoir ses propres frais.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "L'intégralité de votre contribution ira directement au développeur du plugin ; CyberLover ne prend aucun pourcentage. Cependant, la plateforme de financement choisie peut avoir ses propres frais.", "YouTube": "YouTube", "Youtube Language": "Langue de Youtube", "Youtube Proxy URL": "URL du proxy YouTube" diff --git a/src/lib/i18n/locales/gl-ES/translation.json b/src/lib/i18n/locales/gl-ES/translation.json index 6d06146035..08f663d455 100644 --- a/src/lib/i18n/locales/gl-ES/translation.json +++ b/src/lib/i18n/locales/gl-ES/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copiar enlace", "Copy to clipboard": "Copiado o portapapeis", "Copying to clipboard was successful!": "!A copia o portapapeis realizouse correctamente!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "O CORS debe estar debidamente configurado polo provedor para permitir solicitudes desde Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "O CORS debe estar debidamente configurado polo provedor para permitir solicitudes desde CyberLover.", "Create": "Xerar", "Create a knowledge base": "Xerar base de conocemento", "Create a model": "Xerar un modelo", @@ -432,7 +432,7 @@ "Discover a model": "Descubrir un modelo", "Discover a prompt": "Descubre un Prompt", "Discover a tool": "Descubre unha ferramenta", - "Discover how to use Open WebUI and seek support from the community.": "Descubra como usar Open WebUI e busque apoio na comunidade.", + "Discover how to use CyberLover and seek support from the community.": "Descubra como usar CyberLover e busque apoio na comunidade.", "Discover wonders": "Descubre maravillas", "Discover, download, and explore custom functions": "Descubre, descarga y explora funcións personalizadas", "Discover, download, and explore custom prompts": "Descubre, descarga, y explora Prompts personalizados", @@ -958,7 +958,7 @@ "Lost": "Perdido", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Feito por a comunidad de OpenWebUI", + "Made by CyberLover Community": "Feito por a comunidad de OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Asegúrese de adxuntarlos con", "Make sure to export a workflow.json file as API format from ComfyUI.": "Asegúrese de exportar un Arquivo workflow.json en formato API desde ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Podense descargar un máximo de 3 modelos simultáneamente. Por favor, intenteo de novo mais tarde.", "May": "Mayo", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "As memorias accesibles por os LLMs mostraránse aquí.", "Memory": "Memoria", @@ -1139,10 +1139,10 @@ "Open new chat": "Abrir novo chat", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI usa faster-whisper internamente.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI usa SpeechT5 y embeddings de locutores CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Aversión de Open WebUI (v{{OPEN_WEBUI_VERSION}}) es inferior a aversión requerida (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover usa faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover usa SpeechT5 y embeddings de locutores CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Aversión de CyberLover (v{{OPEN_WEBUI_VERSION}}) es inferior a aversión requerida (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Configuración de OpenAI API", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Grabar voz", - "Redirecting you to Open WebUI Community": "Redireccionándote a a comunidad OpenWebUI", + "Redirecting you to CyberLover Community": "Redireccionándote a a comunidad OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referirse a vostede mismo como \"Usuario\" (por Exemplo, \"O usuario está aprendiendo Español\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "¡Configuración gardada con éxito!", "Share": "Compartir", "Share Chat": "Compartir Chat", - "Share to Open WebUI Community": "Compartir coa comunidads OpenWebUI", + "Share to CyberLover Community": "Compartir coa comunidads OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Vostede ahora está conectado.", "Your Account": "", "Your account status is currently pending activation.": "O estado da sua conta actualmente encontrase pendente de activación.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "A sua contribución completa irá directamente o desarrollador do plugin; Open WebUI non toma ningun porcentaxe. Sin embargo, a plataforma de financiación elegida podría ter as suas propias tarifas.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "A sua contribución completa irá directamente o desarrollador do plugin; CyberLover non toma ningun porcentaxe. Sin embargo, a plataforma de financiación elegida podría ter as suas propias tarifas.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index e0dac4a161..6a13d39c8e 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -337,7 +337,7 @@ "Copy Link": "העתק קישור", "Copy to clipboard": "", "Copying to clipboard was successful!": "ההעתקה ללוח הייתה מוצלחת!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "יצירת מודל", @@ -432,7 +432,7 @@ "Discover a model": "גלה מודל", "Discover a prompt": "גלה פקודה", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "גלה, הורד, וחקור פקודות מותאמות אישית", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "נוצר על ידי קהילת OpenWebUI", + "Made by CyberLover Community": "נוצר על ידי קהילת OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "ודא להקיף אותם עם", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ניתן להוריד מקסימום 3 מודלים בו זמנית. אנא נסה שוב מאוחר יותר.", "May": "מאי", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "מזכירים נגישים על ידי LLMs יוצגו כאן.", "Memory": "זיכרון", @@ -1139,10 +1139,10 @@ "Open new chat": "פתח צ'אט חדש", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API של OpenAI", "OpenAI API Config": "תצורת API של OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "הקלט קול", - "Redirecting you to Open WebUI Community": "מפנה אותך לקהילת OpenWebUI", + "Redirecting you to CyberLover Community": "מפנה אותך לקהילת OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "ההגדרות נשמרו בהצלחה!", "Share": "שתף", "Share Chat": "שתף צ'אט", - "Share to Open WebUI Community": "שתף לקהילת OpenWebUI", + "Share to CyberLover Community": "שתף לקהילת OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1755,7 +1755,7 @@ "You're now logged in.": "כעת אתה מחובר.", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 2432339391..c15c55aaf6 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -337,7 +337,7 @@ "Copy Link": "लिंक को कॉपी करें", "Copy to clipboard": "", "Copying to clipboard was successful!": "क्लिपबोर्ड पर कॉपी बनाना सफल रहा!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "एक मॉडल बनाएं", @@ -432,7 +432,7 @@ "Discover a model": "एक मॉडल की खोज करें", "Discover a prompt": "प्रॉम्प्ट खोजें", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "कस्टम प्रॉम्प्ट को खोजें, डाउनलोड करें और एक्सप्लोर करें", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "OpenWebUI समुदाय द्वारा निर्मित", + "Made by CyberLover Community": "OpenWebUI समुदाय द्वारा निर्मित", "Make password visible in the user interface": "", "Make sure to enclose them with": "उन्हें संलग्न करना सुनिश्चित करें", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "अधिकतम 3 मॉडल एक साथ डाउनलोड किये जा सकते हैं। कृपया बाद में पुन: प्रयास करें।", "May": "मेई", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "एलएलएम द्वारा सुलभ यादें यहां दिखाई जाएंगी।", "Memory": "मेमोरी", @@ -1139,10 +1139,10 @@ "Open new chat": "नई चैट खोलें", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API कॉन्फिग", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "आवाज रिकॉर्ड करना", - "Redirecting you to Open WebUI Community": "आपको OpenWebUI समुदाय पर पुनर्निर्देशित किया जा रहा है", + "Redirecting you to CyberLover Community": "आपको OpenWebUI समुदाय पर पुनर्निर्देशित किया जा रहा है", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "सेटिंग्स सफलतापूर्वक सहेजी गईं!", "Share": "साझा करें", "Share Chat": "चैट साझा करें", - "Share to Open WebUI Community": "OpenWebUI समुदाय में साझा करें", + "Share to CyberLover Community": "OpenWebUI समुदाय में साझा करें", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "अब आप लॉग इन हो गए हैं", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index eb9a7e748e..8782a43d46 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopiraj vezu", "Copy to clipboard": "", "Copying to clipboard was successful!": "Kopiranje u međuspremnik je uspješno!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Izradite model", @@ -432,7 +432,7 @@ "Discover a model": "Otkrijte model", "Discover a prompt": "Otkrijte prompt", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Otkrijte, preuzmite i istražite prilagođene prompte", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Izradio OpenWebUI Community", + "Made by CyberLover Community": "Izradio OpenWebUI Community", "Make password visible in the user interface": "", "Make sure to enclose them with": "Provjerite da ih zatvorite s", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimalno 3 modela se mogu preuzeti istovremeno. Pokušajte ponovo kasnije.", "May": "Svibanj", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Ovdje će biti prikazana memorija kojoj mogu pristupiti LLM-ovi.", "Memory": "Memorija", @@ -1139,10 +1139,10 @@ "Open new chat": "Otvorite novi razgovor", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguracija", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Snimanje glasa", - "Redirecting you to Open WebUI Community": "Preusmjeravanje na OpenWebUI zajednicu", + "Redirecting you to CyberLover Community": "Preusmjeravanje na OpenWebUI zajednicu", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Nazivajte se \"Korisnik\" (npr. \"Korisnik uči španjolski\")", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Postavke su uspješno spremljene!", "Share": "Podijeli", "Share Chat": "Podijeli razgovor", - "Share to Open WebUI Community": "Podijeli u OpenWebUI zajednici", + "Share to CyberLover Community": "Podijeli u OpenWebUI zajednici", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Sada ste prijavljeni.", "Your Account": "", "Your account status is currently pending activation.": "Status vašeg računa trenutno čeka aktivaciju.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "YouTube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/hu-HU/translation.json b/src/lib/i18n/locales/hu-HU/translation.json index b2cc9ae03e..31206dc6d1 100644 --- a/src/lib/i18n/locales/hu-HU/translation.json +++ b/src/lib/i18n/locales/hu-HU/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Link másolása", "Copy to clipboard": "Másolás a vágólapra", "Copying to clipboard was successful!": "Sikeres másolás a vágólapra!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "A CORS-t megfelelően kell konfigurálnia a szolgáltatónak, hogy engedélyezze az Open WebUI-ból érkező kéréseket.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "A CORS-t megfelelően kell konfigurálnia a szolgáltatónak, hogy engedélyezze az CyberLover-ból érkező kéréseket.", "Create": "Létrehozás", "Create a knowledge base": "Tudásbázis létrehozása", "Create a model": "Modell létrehozása", @@ -432,7 +432,7 @@ "Discover a model": "Modell felfedezése", "Discover a prompt": "Prompt felfedezése", "Discover a tool": "Eszköz felfedezése", - "Discover how to use Open WebUI and seek support from the community.": "Fedezd fel, hogyan használd az Open WebUI-t és kérj támogatást a közösségtől.", + "Discover how to use CyberLover and seek support from the community.": "Fedezd fel, hogyan használd az CyberLover-t és kérj támogatást a közösségtől.", "Discover wonders": "Csodák felfedezése", "Discover, download, and explore custom functions": "Fedezz fel, tölts le és fedezz fel egyéni funkciókat", "Discover, download, and explore custom prompts": "Fedezz fel, tölts le és fedezz fel egyéni promptokat", @@ -958,7 +958,7 @@ "Lost": "Elveszett", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Az OpenWebUI közösség által készítve", + "Made by CyberLover Community": "Az OpenWebUI közösség által készítve", "Make password visible in the user interface": "", "Make sure to enclose them with": "Győződjön meg róla, hogy körülveszi őket", "Make sure to export a workflow.json file as API format from ComfyUI.": "Győződjön meg róla, hogy exportál egy workflow.json fájlt API formátumban a ComfyUI-ból.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximum 3 modell tölthető le egyszerre. Kérjük, próbálja újra később.", "May": "Május", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Az LLM-ek által elérhető emlékek itt jelennek meg.", "Memory": "Memória", @@ -1139,10 +1139,10 @@ "Open new chat": "Új beszélgetés megnyitása", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Az Open WebUI bármely OpenAPI szerver által biztosított eszközöket használhat.", - "Open WebUI uses faster-whisper internally.": "Az Open WebUI belsőleg a faster-whispert használja.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Az Open WebUI a SpeechT5-öt és a CMU Arctic hangszóró beágyazásokat használja.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Az Open WebUI verzió (v{{OPEN_WEBUI_VERSION}}) alacsonyabb, mint a szükséges verzió (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "Az CyberLover bármely OpenAPI szerver által biztosított eszközöket használhat.", + "CyberLover uses faster-whisper internally.": "Az CyberLover belsőleg a faster-whispert használja.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Az CyberLover a SpeechT5-öt és a CMU Arctic hangszóró beágyazásokat használja.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Az CyberLover verzió (v{{OPEN_WEBUI_VERSION}}) alacsonyabb, mint a szükséges verzió (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguráció", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Hang rögzítése", - "Redirecting you to Open WebUI Community": "Átirányítás az OpenWebUI közösséghez", + "Redirecting you to CyberLover Community": "Átirányítás az OpenWebUI közösséghez", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Csökkenti a ostobaság generálásának valószínűségét. Magasabb érték (pl. 100) változatosabb válaszokat ad, míg alacsonyabb érték (pl. 10) konzervatívabb lesz.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Hivatkozzon magára \"Felhasználó\"-ként (pl. \"A Felhasználó spanyolul tanul\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Beállítások sikeresen mentve!", "Share": "Megosztás", "Share Chat": "Beszélgetés megosztása", - "Share to Open WebUI Community": "Megosztás az OpenWebUI közösséggel", + "Share to CyberLover Community": "Megosztás az OpenWebUI közösséggel", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Megosztási engedélyek", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Sikeresen bejelentkezett.", "Your Account": "", "Your account status is currently pending activation.": "Fiókja jelenleg aktiválásra vár.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "A teljes hozzájárulása közvetlenül a bővítmény fejlesztőjéhez kerül; az Open WebUI nem vesz le százalékot. Azonban a választott támogatási platformnak lehetnek saját díjai.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "A teljes hozzájárulása közvetlenül a bővítmény fejlesztőjéhez kerül; az CyberLover nem vesz le százalékot. Azonban a választott támogatási platformnak lehetnek saját díjai.", "YouTube": "YouTube", "Youtube Language": "YouTube nyelv", "Youtube Proxy URL": "YouTube proxy URL" diff --git a/src/lib/i18n/locales/id-ID/translation.json b/src/lib/i18n/locales/id-ID/translation.json index 0567a4685f..06ca8053e9 100644 --- a/src/lib/i18n/locales/id-ID/translation.json +++ b/src/lib/i18n/locales/id-ID/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Salin Tautan", "Copy to clipboard": "", "Copying to clipboard was successful!": "Penyalinan ke papan klip berhasil!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Buat model", @@ -432,7 +432,7 @@ "Discover a model": "Menemukan sebuah model", "Discover a prompt": "Temukan petunjuk", "Discover a tool": "Menemukan alat", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "Menemukan, mengunduh, dan menjelajahi fungsi khusus", "Discover, download, and explore custom prompts": "Temukan, unduh, dan jelajahi prompt khusus", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Dibuat oleh Komunitas OpenWebUI", + "Made by CyberLover Community": "Dibuat oleh Komunitas OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Pastikan untuk melampirkannya dengan", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimal 3 model dapat diunduh secara bersamaan. Silakan coba lagi nanti.", "May": "Mei", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Memori yang dapat diakses oleh LLM akan ditampilkan di sini.", "Memory": "Memori", @@ -1139,10 +1139,10 @@ "Open new chat": "Buka obrolan baru", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Konfigurasi API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Rekam suara", - "Redirecting you to Open WebUI Community": "Mengarahkan Anda ke Komunitas OpenWebUI", + "Redirecting you to CyberLover Community": "Mengarahkan Anda ke Komunitas OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Merujuk diri Anda sebagai \"Pengguna\" (misalnya, \"Pengguna sedang belajar bahasa Spanyol\")", "Reference Chats": "", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "Pengaturan berhasil disimpan!", "Share": "Berbagi", "Share Chat": "Bagikan Obrolan", - "Share to Open WebUI Community": "Bagikan ke Komunitas OpenWebUI", + "Share to CyberLover Community": "Bagikan ke Komunitas OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1753,7 +1753,7 @@ "You're now logged in.": "Anda sekarang sudah masuk.", "Your Account": "", "Your account status is currently pending activation.": "Status akun Anda saat ini sedang menunggu aktivasi.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/ie-GA/translation.json b/src/lib/i18n/locales/ie-GA/translation.json index 9a80ca9acb..9a08a5c4ca 100644 --- a/src/lib/i18n/locales/ie-GA/translation.json +++ b/src/lib/i18n/locales/ie-GA/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Cóipeáil Nasc", "Copy to clipboard": "Cóipeáil chuig an ngearrthaisce", "Copying to clipboard was successful!": "D'éirigh le cóipeáil chuig an ngearrthaisce!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Ní mór don soláthraí CORS a chumrú i gceart chun iarratais ó Open WebUI a cheadú.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Ní mór don soláthraí CORS a chumrú i gceart chun iarratais ó CyberLover a cheadú.", "Create": "Cruthaigh", "Create a knowledge base": "Cruthaigh bonn eolais", "Create a model": "Cruthaigh samhail", @@ -432,7 +432,7 @@ "Discover a model": "Faigh amach samhail", "Discover a prompt": "Faigh amach leid", "Discover a tool": "Faigh amach uirlis", - "Discover how to use Open WebUI and seek support from the community.": "Faigh amach conas Open WebUI a úsáid agus lorg tacaíocht ón bpobal.", + "Discover how to use CyberLover and seek support from the community.": "Faigh amach conas CyberLover a úsáid agus lorg tacaíocht ón bpobal.", "Discover wonders": "Faigh amach iontais", "Discover, download, and explore custom functions": "Faigh amach, íoslódáil agus iniúchadh feidhmeanna saincheaptha", "Discover, download, and explore custom prompts": "Leideanna saincheaptha a fháil amach, a íoslódáil agus a iniúchadh", @@ -958,7 +958,7 @@ "Lost": "Cailleadh", "Low": "Íseal", "LTR": "LTR", - "Made by Open WebUI Community": "Déanta ag OpenWebUI Community", + "Made by CyberLover Community": "Déanta ag OpenWebUI Community", "Make password visible in the user interface": "Déan an focal faire le feiceáil sa chomhéadan úsáideora", "Make sure to enclose them with": "Déan cinnte iad a cheangal le", "Make sure to export a workflow.json file as API format from ComfyUI.": "Déan cinnte comhad workflow.json a onnmhairiú mar fhormáid API ó ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Is féidir uasmhéid de 3 samhail a íoslódáil ag an am Bain triail as arís níos déanaí.", "May": "Bealtaine", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "Meánach", "Memories accessible by LLMs will be shown here.": "Taispeánfar cuimhní atá inrochtana ag LLManna anseo.", "Memory": "Cuimhne", @@ -1139,10 +1139,10 @@ "Open new chat": "Oscail comhrá nua", "Open Sidebar": "Oscail an Barra Taoibh", "Open User Profile Menu": "Oscail Roghchlár Próifíl Úsáideora", - "Open WebUI can use tools provided by any OpenAPI server.": "Is féidir le WebUI Oscailte uirlisí a úsáid a sholáthraíonn aon fhreastalaí OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Úsáideann Open WebUI cogar níos tapúla go hinmheánach.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann Open WebUI úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "Is féidir le WebUI Oscailte uirlisí a úsáid a sholáthraíonn aon fhreastalaí OpenAPI.", + "CyberLover uses faster-whisper internally.": "Úsáideann CyberLover cogar níos tapúla go hinmheánach.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann CyberLover úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Cumraíocht API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Clibeanna Réasúnaíochta", "Record": "Taifead", "Record voice": "Taifead guth", - "Redirecting you to Open WebUI Community": "Tú a atreorú chuig OpenWebUI Community", + "Redirecting you to CyberLover Community": "Tú a atreorú chuig OpenWebUI Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Laghdaíonn sé an dóchúlacht go giniúint nonsense. Tabharfaidh luach níos airde (m.sh. 100) freagraí níos éagsúla, agus beidh luach níos ísle (m.sh. 10) níos coimeádaí.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Tagairt duit féin mar \"Úsáideoir\" (m.sh., \"Tá an úsáideoir ag foghlaim Spáinnis\")", "Reference Chats": "Comhráite Tagartha", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Socruithe sábhálta go rathúil!", "Share": "Comhroinn", "Share Chat": "Comhroinn Comhrá", - "Share to Open WebUI Community": "Comhroinn le Pobal OpenWebUI", + "Share to CyberLover Community": "Comhroinn le Pobal OpenWebUI", "Share your background and interests": "Roinn do chúlra agus do leasanna", "Shared with you": "", "Sharing Permissions": "Ceadanna a Roinnt", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Tá tú logáilte isteach anois.", "Your Account": "Do Chuntas", "Your account status is currently pending activation.": "Tá stádas do chuntais ar feitheamh faoi ghníomhachtú.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Rachaidh do ranníocaíocht iomlán go díreach chuig an bhforbróir breiseán; Ní ghlacann Open WebUI aon chéatadán. Mar sin féin, d'fhéadfadh a tháillí féin a bheith ag an ardán maoinithe roghnaithe.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Rachaidh do ranníocaíocht iomlán go díreach chuig an bhforbróir breiseán; Ní ghlacann CyberLover aon chéatadán. Mar sin féin, d'fhéadfadh a tháillí féin a bheith ag an ardán maoinithe roghnaithe.", "YouTube": "Youtube", "Youtube Language": "Teanga Youtube", "Youtube Proxy URL": "URL Seachfhreastalaí YouTube" diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 3c8aed3041..b92026d435 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copia link", "Copy to clipboard": "Copia negli appunti", "Copying to clipboard was successful!": "Copia negli appunti riuscita!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS deve essere configurato correttamente dal fornitore per consentire le richieste da Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS deve essere configurato correttamente dal fornitore per consentire le richieste da CyberLover.", "Create": "Crea", "Create a knowledge base": "Crea una base di conoscenze", "Create a model": "Creare un modello", @@ -432,7 +432,7 @@ "Discover a model": "Scopri un modello", "Discover a prompt": "Scopri un prompt", "Discover a tool": "Scopri uno strumento", - "Discover how to use Open WebUI and seek support from the community.": "Scopri come utilizzare Open WebUI e cerca supporto dalla community.", + "Discover how to use CyberLover and seek support from the community.": "Scopri come utilizzare CyberLover e cerca supporto dalla community.", "Discover wonders": "Scopri meraviglie", "Discover, download, and explore custom functions": "Scopri, scarica ed esplora funzioni personalizzate", "Discover, download, and explore custom prompts": "Scopri, scarica ed esplora prompt personalizzati", @@ -958,7 +958,7 @@ "Lost": "Perso", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Realizzato dalla Comunità Open WebUI", + "Made by CyberLover Community": "Realizzato dalla Comunità CyberLover", "Make password visible in the user interface": "Rendi la password visibile nella interfaccia utente", "Make sure to enclose them with": "Assicurati di racchiuderli con", "Make sure to export a workflow.json file as API format from ComfyUI.": "Assicurati di esportare un file workflow.json come formato API da ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "È possibile scaricare un massimo di 3 modelli contemporaneamente. Riprova più tardi.", "May": "Maggio", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "I memori accessibili ai LLM saranno mostrati qui.", "Memory": "Memoria", @@ -1139,10 +1139,10 @@ "Open new chat": "Apri nuova chat", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI può utilizzare tool forniti da qualsiasi server OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI utilizza faster-whisper internamente.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI utilizza le incorporazioni vocali di SpeechT5 e CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versione di Open WebUI (v{{OPEN_WEBUI_VERSION}}) è inferiore alla versione richiesta (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover può utilizzare tool forniti da qualsiasi server OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilizza faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilizza le incorporazioni vocali di SpeechT5 e CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versione di CyberLover (v{{OPEN_WEBUI_VERSION}}) è inferiore alla versione richiesta (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configurazione API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Registra", "Record voice": "Registra voce", - "Redirecting you to Open WebUI Community": "Reindirizzamento alla comunità OpenWebUI", + "Redirecting you to CyberLover Community": "Reindirizzamento alla comunità OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Riduce la probabilità di generare sciocchezze. Un valore più alto (ad esempio 100) darà risposte più varie, mentre un valore più basso (ad esempio 10) sarà più conservativo.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Riferisciti a te stesso come \"Utente\" (ad esempio, \"L'utente sta imparando lo spagnolo\")", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Impostazioni salvate con successo!", "Share": "Condividi", "Share Chat": "Condividi chat", - "Share to Open WebUI Community": "Condividi con la comunità OpenWebUI", + "Share to CyberLover Community": "Condividi con la comunità OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Condivisione dei permessi", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Ora hai effettuato l'accesso.", "Your Account": "", "Your account status is currently pending activation.": "Lo stato del tuo account è attualmente in attesa di attivazione.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Il tuo intero contributo andrà direttamente allo sviluppatore del plugin; Open WebUI non prende alcuna percentuale. Tuttavia, la piattaforma di finanziamento scelta potrebbe avere le proprie commissioni.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Il tuo intero contributo andrà direttamente allo sviluppatore del plugin; CyberLover non prende alcuna percentuale. Tuttavia, la piattaforma di finanziamento scelta potrebbe avere le proprie commissioni.", "YouTube": "Youtube", "Youtube Language": "Lingua Youtube", "Youtube Proxy URL": "URL proxy Youtube" diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index cff6239e1d..76dc08ce12 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -337,7 +337,7 @@ "Copy Link": "リンクをコピー", "Copy to clipboard": "クリップボードにコピー", "Copying to clipboard was successful!": "クリップボードへのコピーが成功しました!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUIからのリクエストを許可するために、プロバイダーによってCORSが適切に設定されている必要があります。", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Open WebUIからのリクエストを許可するために、プロバイダーによってCORSが適切に設定されている必要があります。", "Create": "作成", "Create a knowledge base": "ナレッジベースを作成する", "Create a model": "モデルを作成する", @@ -432,7 +432,7 @@ "Discover a model": "モデルを探す", "Discover a prompt": "プロンプトを探す", "Discover a tool": "ツールを探す", - "Discover how to use Open WebUI and seek support from the community.": "Open WebUIの使用方法を探し、コミュニティからサポートを求めてください。", + "Discover how to use CyberLover and seek support from the community.": "Open WebUIの使用方法を探し、コミュニティからサポートを求めてください。", "Discover wonders": "不思議を発見", "Discover, download, and explore custom functions": "カスタムFunctionを探してダウンロードする", "Discover, download, and explore custom prompts": "カスタムプロンプトを探してダウンロードする", @@ -958,7 +958,7 @@ "Lost": "負け", "Low": "低", "LTR": "LTR", - "Made by Open WebUI Community": "OpenWebUI コミュニティによって作成", + "Made by CyberLover Community": "OpenWebUI コミュニティによって作成", "Make password visible in the user interface": "UIでパスワードを可視にする", "Make sure to enclose them with": "必ず次で囲んでください", "Make sure to export a workflow.json file as API format from ComfyUI.": "ComfyUIからAPI形式でworkflow.jsonファイルをエクスポートしてください。", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。", "May": "5月", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "中", "Memories accessible by LLMs will be shown here.": "LLM がアクセスできるメモリはここに表示されます。", "Memory": "メモリ", @@ -1139,10 +1139,10 @@ "Open new chat": "新しいチャットを開く", "Open Sidebar": "サイドバーを開く", "Open User Profile Menu": "ユーザープロフィールメニューを開く", - "Open WebUI can use tools provided by any OpenAPI server.": "OpenWebUI は任意のOpenAPI サーバーが提供するツールを使用できます。", - "Open WebUI uses faster-whisper internally.": "OpenWebUI は内部でfaster-whisperを使用します。", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "OpenWebUI は SpeechT5とCMU Arctic スピーカー埋め込みを使用します。", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "OpenWebUI のバージョン (v{{OPEN_WEBUI_VERSION}}) は要求されたバージョン (v{{REQUIRED_VERSION}}) より低いです。", + "CyberLover can use tools provided by any OpenAPI server.": "OpenWebUI は任意のOpenAPI サーバーが提供するツールを使用できます。", + "CyberLover uses faster-whisper internally.": "OpenWebUI は内部でfaster-whisperを使用します。", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "OpenWebUI は SpeechT5とCMU Arctic スピーカー埋め込みを使用します。", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "OpenWebUI のバージョン (v{{OPEN_WEBUI_VERSION}}) は要求されたバージョン (v{{REQUIRED_VERSION}}) より低いです。", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 設定", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "録音", "Record voice": "音声を録音", - "Redirecting you to Open WebUI Community": "OpenWebUI コミュニティにリダイレクトしています", + "Redirecting you to CyberLover Community": "OpenWebUI コミュニティにリダイレクトしています", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "無意味な生成の確率を減少させます。高い値(例:100)はより多様な回答を提供し、低い値(例:10)ではより保守的になります。", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "あなたのことは「User」としてください(例:「User はスペイン語を学んでいます」)", "Reference Chats": "", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "設定が正常に保存されました!", "Share": "共有", "Share Chat": "チャットを共有", - "Share to Open WebUI Community": "OpenWebUI コミュニティに共有", + "Share to CyberLover Community": "OpenWebUI コミュニティに共有", "Share your background and interests": "あなたの背景情報と興味を教えてください", "Shared with you": "", "Sharing Permissions": "共有に関する権限", @@ -1753,7 +1753,7 @@ "You're now logged in.": "ログインしました。", "Your Account": "あなたのアカウント", "Your account status is currently pending activation.": "あなたのアカウント状態は現在登録認証待ちです。", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "あなたの全ての寄付はプラグイン開発者へ直接送られます。Open WebUI は手数料を一切取りません。ただし、選択した資金提供プラットフォーム側に手数料が発生する場合があります。", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "あなたの全ての寄付はプラグイン開発者へ直接送られます。CyberLover は手数料を一切取りません。ただし、選択した資金提供プラットフォーム側に手数料が発生する場合があります。", "YouTube": "YouTube", "Youtube Language": "YouTubeの言語", "Youtube Proxy URL": "YouTubeのプロキシURL" diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 00469500f7..0d0b158cc1 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -337,7 +337,7 @@ "Copy Link": "ბმულის კოპირება", "Copy to clipboard": "ბუფერში კოპირება", "Copying to clipboard was successful!": "გაცვლის ბუფერში კოპირება წარმატებულია!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "შექმნა", "Create a knowledge base": "ცოდნის ბაზის შექმნა", "Create a model": "მოდელის შექმნა", @@ -432,7 +432,7 @@ "Discover a model": "აღმოაჩინეთ მოდელი", "Discover a prompt": "აღმოაჩინეთ მოთხოვნა", "Discover a tool": "აღმოაჩინეთ ხელსაწყო", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "აღმოაჩინეთ, გადმოწერეთ და შეისწავლეთ მორგებული მოთხოვნები", @@ -958,7 +958,7 @@ "Lost": "წაგება", "Low": "დაბალი", "LTR": "LTR", - "Made by Open WebUI Community": "შექმნილია OpenWebUI საზოგადოების მიერ", + "Made by CyberLover Community": "შექმნილია OpenWebUI საზოგადოების მიერ", "Make password visible in the user interface": "პაროლის მომხმარებლის ინტერფეისში ჩვენება", "Make sure to enclose them with": "დარწმუნდით, რომ ჩასვით ისინი", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ერთდროულად მაქსიმუმ 3 მოდელის ჩამოტვირთვაა შესაძლებელია. მოგვიანებით სცადეთ.", "May": "მაისი", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "საშუალო", "Memories accessible by LLMs will be shown here.": "LLM-ებისთვის ხელმისაწვდომი მეხსიერებები აქ გამოჩნდება.", "Memory": "მეხსიერება", @@ -1139,10 +1139,10 @@ "Open new chat": "ახალი ჩატის გახსნა", "Open Sidebar": "გვერდითი ზოლის გახსნა", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API პარამეტრები", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "ჩაწერა", "Record voice": "ხმის ჩაწერა", - "Redirecting you to Open WebUI Community": "მიმდინარეობს გადამისამართება OpenWebUI-ის საზოგადოების საიტზე", + "Redirecting you to CyberLover Community": "მიმდინარეობს გადამისამართება OpenWebUI-ის საზოგადოების საიტზე", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "პარამეტრები შენახვა წარმატებულია!", "Share": "გაზიარება", "Share Chat": "ჩატის გაზიარება", - "Share to Open WebUI Community": "გაზიარება Open WebUI-ის საზოგადოებასთან", + "Share to CyberLover Community": "გაზიარება CyberLover-ის საზოგადოებასთან", "Share your background and interests": "", "Shared with you": "გაზიარებულია თქვენთვის", "Sharing Permissions": "გაზიარების წვდომები", @@ -1754,7 +1754,7 @@ "You're now logged in.": "ახლა შესული ბრძანდებით.", "Your Account": "თქვენი ანგარიში", "Your account status is currently pending activation.": "თქვენი ანგარიშის სტატუსი ამჟამად ელოდება აქტივაციას.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Youtube", "Youtube Language": "Youtube-ის ენა", "Youtube Proxy URL": "Youtube-ის პროქსის URL" diff --git a/src/lib/i18n/locales/kab-DZ/translation.json b/src/lib/i18n/locales/kab-DZ/translation.json index 98a87a738b..f77c037320 100644 --- a/src/lib/i18n/locales/kab-DZ/translation.json +++ b/src/lib/i18n/locales/kab-DZ/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Nɣel aseɣwen", "Copy to clipboard": "Nɣel ɣef afus", "Copying to clipboard was successful!": "Yessaweḍ unɣel ɣer tfelwit n uklip!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS ilaq ad yeswel akken iwata sɣur usaǧǧaw akken ad yeǧǧ issutren seg WebUI yeldin.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS ilaq ad yeswel akken iwata sɣur usaǧǧaw akken ad yeǧǧ issutren seg WebUI yeldin.", "Create": "Snulfu-d", "Create a knowledge base": "Rnu taffa n tmussniwin", "Create a model": "Snulfu-d tamudemt", @@ -432,7 +432,7 @@ "Discover a model": "Snirem tamudemt", "Discover a prompt": "Snirem aneftaɣ", "Discover a tool": "Snirem kra n ufecku", - "Discover how to use Open WebUI and seek support from the community.": "Wali amek ara tesqedceḍ Open WebUI udiɣ amek ara ad tnadiḍ tallelt ar temɣiwant.", + "Discover how to use CyberLover and seek support from the community.": "Wali amek ara tesqedceḍ CyberLover udiɣ amek ara ad tnadiḍ tallelt ar temɣiwant.", "Discover wonders": "Snirem imakunen", "Discover, download, and explore custom functions": "Af-d, zdem-d, tesnirmeḍ tisɣunin yemganen", "Discover, download, and explore custom prompts": "Af-d, zdem-d, tesnirmeḍ-d ineftaɣen udmawanen", @@ -958,7 +958,7 @@ "Lost": "Iruḥ", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Texdem-it-id temɣiwant n Open WebUI", + "Made by CyberLover Community": "Texdem-it-id temɣiwant n CyberLover", "Make password visible in the user interface": "Sken-d awal n uɛeddi deg ugrudem n useqdac", "Make sure to enclose them with": "Ur ttettu ara ad ten-tɣunzuḍ", "Make sure to export a workflow.json file as API format from ComfyUI.": "Ur ttettumt ara ad tessiǧwemt aman n umahil. afaylu json d amasal API seg ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximum n 3 n tmudmin yezmer ad d-yettwasider seg-a ɣer da. Ttxil-k, ɛreḍ tikkelt niḍen ticki.", "May": "Mayyu", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Da ara d-banent teḥkayin ara yaweḍ yiwen ɣer LLMs.", "Memory": "Takatut", @@ -1139,10 +1139,10 @@ "Open new chat": "Ldi asqerdec amaynut", "Open Sidebar": "Ldi agalis adisan", "Open User Profile Menu": "Ldi umuɣ n umaɣnu n useqdac", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI yezmer ad yesseqdec ifecka i d-yettak yal aqeddac OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI yesseqdac faster-whisper sdaxel-is.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Ldi WebUI yesseqdac SpeechT5 akked CMU Arktik.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover yezmer ad yesseqdec ifecka i d-yettak yal aqeddac OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover yesseqdac faster-whisper sdaxel-is.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Ldi WebUI yesseqdac SpeechT5 akked CMU Arktik.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Tawila n API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Aklas", "Record voice": "Sekles taɣect", - "Redirecting you to Open WebUI Community": "Aseḍfeṛ ar Temɣiwant n Open WebUI", + "Redirecting you to CyberLover Community": "Aseḍfeṛ ar Temɣiwant n CyberLover", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Err iman-ik d \"Aseqdac\" (amedya, \"Aseqdac ilemmed taspenyulit\")", "Reference Chats": "Mselɣu idiwenniyen", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Iɣewwaṛen ttwakelsen akken iwata!", "Share": "Bḍu", "Share Chat": "Bḍu asqerdec", - "Share to Open WebUI Community": "Bḍu i tkebbanit WebUI yeldin", + "Share to CyberLover Community": "Bḍu i tkebbanit WebUI yeldin", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Tisirag n beṭṭu", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Aql-ik teqqned imir-a.", "Your Account": "Amiḍan-ik·im", "Your account status is currently pending activation.": "Addad-nnem n umiḍan atan yettṛaju armad.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "YouTube", "Youtube Language": "Tutlayt n Youtube", "Youtube Proxy URL": "Tansa URL n upṛuksi Youtube" diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 822c75b751..8d1ec8edc9 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "링크 복사", "Copy to clipboard": "클립보드에 복사", "Copying to clipboard was successful!": "성공적으로 클립보드에 복사되었습니다!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUI의 요청을 허용하려면 공급자가 CORS를 올바르게 구성해야 합니다.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Open WebUI의 요청을 허용하려면 공급자가 CORS를 올바르게 구성해야 합니다.", "Create": "생성", "Create a knowledge base": "지식 기반 생성", "Create a model": "모델 생성", @@ -432,7 +432,7 @@ "Discover a model": "모델 검색", "Discover a prompt": "프롬프트 검색", "Discover a tool": "도구 검색", - "Discover how to use Open WebUI and seek support from the community.": "Open WebUI 사용 방법을 알아보고 커뮤니티에서 지원을 받으세요.", + "Discover how to use CyberLover and seek support from the community.": "CyberLover 사용 방법을 알아보고 커뮤니티에서 지원을 받으세요.", "Discover wonders": "놀라움을 체험하세요", "Discover, download, and explore custom functions": "사용자 정의 함수 검색, 다운로드 및 탐색", "Discover, download, and explore custom prompts": "사용자 정의 프롬프트 검색, 다운로드 및 탐색", @@ -958,7 +958,7 @@ "Lost": "패배", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "OpenWebUI 커뮤니티에 의해 개발됨", + "Made by CyberLover Community": "OpenWebUI 커뮤니티에 의해 개발됨", "Make password visible in the user interface": "비밀번호 보이기", "Make sure to enclose them with": "꼭 다음으로 감싸세요:", "Make sure to export a workflow.json file as API format from ComfyUI.": "꼭 workflow.json 파일을 ComfyUI의 API 형식대로 내보내세요", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "최대 3개의 모델을 동시에 다운로드할 수 있습니다. 나중에 다시 시도하세요.", "May": "5월", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "MCP 지원은 실험적이며 명세가 자주 변경되므로, 호환성 문제가 발생할 수 있습니다. Open WebUI 팀이 OpenAPI 명세 지원을 직접 유지·관리하고 있어, 호환성 측면에서는 더 신뢰할 수 있는 선택입니다.", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "MCP 지원은 실험적이며 명세가 자주 변경되므로, 호환성 문제가 발생할 수 있습니다. CyberLover 팀이 OpenAPI 명세 지원을 직접 유지·관리하고 있어, 호환성 측면에서는 더 신뢰할 수 있는 선택입니다.", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLM에서 접근할 수 있는 메모리는 여기에 표시됩니다.", "Memory": "메모리", @@ -1139,10 +1139,10 @@ "Open new chat": "새 채팅 열기", "Open Sidebar": "사이드바 열기", "Open User Profile Menu": "사용자 프로필 메뉴 열기", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI는 모든 OpenAPI 서버에서 제공하는 도구를 사용할 수 있습니다.", - "Open WebUI uses faster-whisper internally.": "Open WebUI는 내부적으로 패스트 위스퍼를 사용합니다.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI는 SpeechT5와 CMU Arctic 스피커 임베딩을 사용합니다.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "열린 WebUI 버젼(v{{OPEN_WEBUI_VERSION}})은 최소 버젼 (v{{REQUIRED_VERSION}})보다 낮습니다", + "CyberLover can use tools provided by any OpenAPI server.": "Open WebUI는 모든 OpenAPI 서버에서 제공하는 도구를 사용할 수 있습니다.", + "CyberLover uses faster-whisper internally.": "Open WebUI는 내부적으로 패스트 위스퍼를 사용합니다.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI는 SpeechT5와 CMU Arctic 스피커 임베딩을 사용합니다.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "열린 WebUI 버젼(v{{OPEN_WEBUI_VERSION}})은 최소 버젼 (v{{REQUIRED_VERSION}})보다 낮습니다", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 설정", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "추론 태그", "Record": "녹음", "Record voice": "음성 녹음", - "Redirecting you to Open WebUI Community": "OpenWebUI 커뮤니티로 리디렉션 중", + "Redirecting you to CyberLover Community": "OpenWebUI 커뮤니티로 리디렉션 중", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "넌센스를 생성할 확률을 줄입니다. 값이 높을수록(예: 100) 더 다양한 답변을 제공하는 반면, 값이 낮을수록(예: 10) 더 보수적입니다.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "스스로를 \"사용자\" 라고 지칭하세요. (예: \"사용자는 영어를 배우고 있습니다\")", "Reference Chats": "채팅 참조", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "설정이 성공적으로 저장되었습니다!", "Share": "공유", "Share Chat": "채팅 공유", - "Share to Open WebUI Community": "OpenWebUI 커뮤니티에 공유", + "Share to CyberLover Community": "OpenWebUI 커뮤니티에 공유", "Share your background and interests": "당신의 배경과 관심사를 공유하세요", "Shared with you": "", "Sharing Permissions": "권한 공유", @@ -1753,7 +1753,7 @@ "You're now logged in.": "로그인되었습니다.", "Your Account": "계정", "Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "당신의 모든 기여는 곧바로 플러그인 개발자에게 갑니다; Open WebUI는 수수료를 받지 않습니다. 다만, 선택한 후원 플랫폼은 수수료를 가져갈 수 있습니다.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "당신의 모든 기여는 곧바로 플러그인 개발자에게 갑니다; Open WebUI는 수수료를 받지 않습니다. 다만, 선택한 후원 플랫폼은 수수료를 가져갈 수 있습니다.", "YouTube": "유튜브", "Youtube Language": "Youtube 언어", "Youtube Proxy URL": "Youtube 프록시 URL" diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 6166fb0e19..6e98dcdfbb 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopijuoti nuorodą", "Copy to clipboard": "", "Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Sukurti modelį", @@ -432,7 +432,7 @@ "Discover a model": "Atrasti modelį", "Discover a prompt": "Atrasti užklausas", "Discover a tool": "Atrasti įrankį", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "Atrasti, atsisiųsti arba rasti naujas funkcijas", "Discover, download, and explore custom prompts": "Atrasti ir parsisiųsti užklausas", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Sukurta OpenWebUI bendruomenės", + "Made by CyberLover Community": "Sukurta OpenWebUI bendruomenės", "Make password visible in the user interface": "", "Make sure to enclose them with": "Užtikrinktie, kad įtraukiate viduje:", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Daugiausiai trys modeliai gali būti parsisiunčiami vienu metu.", "May": "gegužė", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Atminitis prieinama kalbos modelio bus rodoma čia.", "Memory": "Atmintis", @@ -1139,10 +1139,10 @@ "Open new chat": "Atverti naują pokalbį", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tortue Chat versija per sena. Reikalinga (v{{REQUIRED_VERSION}}) versija.", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tortue Chat versija per sena. Reikalinga (v{{REQUIRED_VERSION}}) versija.", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Open AI API nustatymai", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Įrašyti balsą", - "Redirecting you to Open WebUI Community": "Perkeliam Jus į OpenWebUI bendruomenę", + "Redirecting you to CyberLover Community": "Perkeliam Jus į OpenWebUI bendruomenę", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Vadinkite save Naudotoju (pvz. Naudotojas mokosi prancūzų kalbos)", "Reference Chats": "", @@ -1436,7 +1436,7 @@ "Settings saved successfully!": "Parametrai sėkmingai išsaugoti!", "Share": "Dalintis", "Share Chat": "Dalintis pokalbiu", - "Share to Open WebUI Community": "Dalintis su OpenWebUI bendruomene", + "Share to CyberLover Community": "Dalintis su OpenWebUI bendruomene", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1756,7 +1756,7 @@ "You're now logged in.": "Esate prisijungę.", "Your Account": "", "Your account status is currently pending activation.": "Jūsų paskyra laukia administratoriaus patvirtinimo.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Jūsų finansinis prisidėjimas tiesiogiai keliaus modulio kūrėjui.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Jūsų finansinis prisidėjimas tiesiogiai keliaus modulio kūrėjui.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/ms-MY/translation.json b/src/lib/i18n/locales/ms-MY/translation.json index 5d95d2ad03..232a0d42b8 100644 --- a/src/lib/i18n/locales/ms-MY/translation.json +++ b/src/lib/i18n/locales/ms-MY/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Salin Pautan", "Copy to clipboard": "", "Copying to clipboard was successful!": "Menyalin ke papan klip berjaya!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Cipta model", @@ -432,7 +432,7 @@ "Discover a model": "Temui model", "Discover a prompt": "Temui gesaan", "Discover a tool": "Temui alat", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "Temui, muat turun dan teroka fungsi tersuai", "Discover, download, and explore custom prompts": "Temui, muat turun dan teroka gesaan tersuai", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Dicipta oleh Komuniti OpenWebUI", + "Made by CyberLover Community": "Dicipta oleh Komuniti OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Pastikan untuk melampirkannya dengan", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimum 3 model boleh dimuat turun serentak. Sila cuba sebentar lagi.", "May": "Mei", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Memori yang boleh diakses oleh LLM akan ditunjukkan di sini.", "Memory": "Memori", @@ -1139,10 +1139,10 @@ "Open new chat": "Buka perbualan baru", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) adalah lebih rendah daripada versi yang diperlukan iaitu (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover version (v{{OPEN_WEBUI_VERSION}}) adalah lebih rendah daripada versi yang diperlukan iaitu (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Tetapan API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Rakam suara", - "Redirecting you to Open WebUI Community": "Membawa anda ke Komuniti OpenWebUI", + "Redirecting you to CyberLover Community": "Membawa anda ke Komuniti OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Rujuk diri anda sebagai \"User\" (cth, \"Pengguna sedang belajar bahasa Sepanyol\")", "Reference Chats": "", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "Tetapan berjaya disimpan!", "Share": "Kongsi", "Share Chat": "Kongsi Perbualan", - "Share to Open WebUI Community": "Kongsi kepada Komuniti OpenWebUI", + "Share to CyberLover Community": "Kongsi kepada Komuniti OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1753,7 +1753,7 @@ "You're now logged in.": "Anda kini telah log masuk.", "Your Account": "", "Your account status is currently pending activation.": "Status akaun anda ialah sedang menunggu pengaktifan.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Seluruh sumbangan anda akan dihantar terus kepada pembangun 'plugin'; Open WebUI tidak mengambil sebarang peratusan keuntungan daripadanya. Walau bagaimanapun, platform pembiayaan yang dipilih mungkin mempunyai caj tersendiri.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Seluruh sumbangan anda akan dihantar terus kepada pembangun 'plugin'; CyberLover tidak mengambil sebarang peratusan keuntungan daripadanya. Walau bagaimanapun, platform pembiayaan yang dipilih mungkin mempunyai caj tersendiri.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 77bebdad77..431e5046d6 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopier lenke", "Copy to clipboard": "Kopier til utklippstavle", "Copying to clipboard was successful!": "Kopiert til utklippstavlen!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS må være riktig konfigurert av leverandøren for å kunne godkjenne forespørsler fra Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS må være riktig konfigurert av leverandøren for å kunne godkjenne forespørsler fra CyberLover.", "Create": "Opprett", "Create a knowledge base": "Opprett en kunnskapsbase", "Create a model": "Opprett en modell", @@ -432,7 +432,7 @@ "Discover a model": "Oppdag en modell", "Discover a prompt": "Oppdag en ledetekst", "Discover a tool": "Oppdag et verktøy", - "Discover how to use Open WebUI and seek support from the community.": "Finn ut hvordan du bruker Open WebUI, og få støtte fra fellesskapet.", + "Discover how to use CyberLover and seek support from the community.": "Finn ut hvordan du bruker CyberLover, og få støtte fra fellesskapet.", "Discover wonders": "Oppdag ", "Discover, download, and explore custom functions": "Oppdag, last ned og utforsk tilpassede funksjoner", "Discover, download, and explore custom prompts": "Oppdag, last ned og utforsk tilpassede ledetekster", @@ -958,7 +958,7 @@ "Lost": "Tapt", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Laget av OpenWebUI-fellesskapet", + "Made by CyberLover Community": "Laget av OpenWebUI-fellesskapet", "Make password visible in the user interface": "", "Make sure to enclose them with": "Sørg for å omslutte dem med", "Make sure to export a workflow.json file as API format from ComfyUI.": "Sørg for å eksportere en workflow.json-fil i API-formatet fra ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimalt tre modeller kan lastes ned samtidig. Prøv igjen senere.", "May": "mai", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Språkmodellers tilgjengelige minner vises her.", "Memory": "Minne", @@ -1139,10 +1139,10 @@ "Open new chat": "Åpne ny chat", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI bruker faster-whisper internt.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI bruker SpeechT5 og CMU Arctic-høytalerinnbygginger", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI-versjonen (v{{OPEN_WEBUI_VERSION}}) er lavere enn den påkrevde versjonen (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover bruker faster-whisper internt.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover bruker SpeechT5 og CMU Arctic-høytalerinnbygginger", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-versjonen (v{{OPEN_WEBUI_VERSION}}) er lavere enn den påkrevde versjonen (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI-API", "OpenAI API Config": "API-konfigurasjon for OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Ta opp tale", - "Redirecting you to Open WebUI Community": "Omdirigerer deg til OpenWebUI-fellesskapet", + "Redirecting you to CyberLover Community": "Omdirigerer deg til OpenWebUI-fellesskapet", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Omtal deg selv som \"Bruker\" (f.eks. \"Bruker lærer spansk\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Innstillinger lagret!", "Share": "Del", "Share Chat": "Del chat", - "Share to Open WebUI Community": "Del med OpenWebUI-fellesskapet", + "Share to CyberLover Community": "Del med OpenWebUI-fellesskapet", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Du er nå logget inn.", "Your Account": "", "Your account status is currently pending activation.": "Status på kontoen din er for øyeblikket ventende på aktivering.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Hele beløpet går uavkortet til utvikleren av tillegget. Open WebUI mottar ikke deler av beløpet. Den valgte betalingsplattformen kan ha gebyrer.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Hele beløpet går uavkortet til utvikleren av tillegget. CyberLover mottar ikke deler av beløpet. Den valgte betalingsplattformen kan ha gebyrer.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index fb6455c078..2cfa95896b 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopieer link", "Copy to clipboard": "Kopieer naar klembord", "Copying to clipboard was successful!": "Kopiëren naar klembord was succesvol!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS moet goed geconfigureerd zijn bij de provider om verzoeken van Open WebUI toe te staan", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS moet goed geconfigureerd zijn bij de provider om verzoeken van CyberLover toe te staan", "Create": "Aanmaken", "Create a knowledge base": "Maak een kennisbasis aan", "Create a model": "Een model maken", @@ -432,7 +432,7 @@ "Discover a model": "Ontdek een model", "Discover a prompt": "Ontdek een prompt", "Discover a tool": "Ontdek een tool", - "Discover how to use Open WebUI and seek support from the community.": "Ontdek hoe je Open WebUI gebruikt en zoek ondersteuning van de community.", + "Discover how to use CyberLover and seek support from the community.": "Ontdek hoe je CyberLover gebruikt en zoek ondersteuning van de community.", "Discover wonders": "Ontdek wonderen", "Discover, download, and explore custom functions": "Ontdek, download en verken aangepaste functies", "Discover, download, and explore custom prompts": "Ontdek, download en verken aangepaste prompts", @@ -958,7 +958,7 @@ "Lost": "Verloren", "Low": "", "LTR": "LNR", - "Made by Open WebUI Community": "Gemaakt door OpenWebUI Community", + "Made by CyberLover Community": "Gemaakt door OpenWebUI Community", "Make password visible in the user interface": "", "Make sure to enclose them with": "Zorg ervoor dat je ze omringt met", "Make sure to export a workflow.json file as API format from ComfyUI.": "Zorg ervoor dat je een workflow.json-bestand als API-formaat exporteert vanuit ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximaal 3 modellen kunnen tegelijkertijd worden gedownload. Probeer het later opnieuw.", "May": "Mei", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Geheugen toegankelijk voor LLMs wordt hier getoond.", "Memory": "Geheugen", @@ -1139,10 +1139,10 @@ "Open new chat": "Open nieuwe chat", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI gebruikt faster-whisper intern", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI gebruikt SpeechT5 en CMU Arctic spreker-embeddings", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI versie (v{{OPEN_WEBUI_VERSION}}) is kleiner dan de benodigde versie (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover gebruikt faster-whisper intern", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover gebruikt SpeechT5 en CMU Arctic spreker-embeddings", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover versie (v{{OPEN_WEBUI_VERSION}}) is kleiner dan de benodigde versie (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API-configuratie", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Neem stem op", - "Redirecting you to Open WebUI Community": "Je wordt doorgestuurd naar OpenWebUI Community", + "Redirecting you to CyberLover Community": "Je wordt doorgestuurd naar OpenWebUI Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Vermindert de kans op het genereren van onzin. Een hogere waarde (bijv. 100) zal meer diverse antwoorden geven, terwijl een lagere waarde (bijv. 10) conservatiever zal zijn.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refereer naar jezelf als \"user\" (bv. \"User is Spaans aan het leren\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Instellingen succesvol opgeslagen!", "Share": "Delen", "Share Chat": "Deel chat", - "Share to Open WebUI Community": "Deel naar OpenWebUI-community", + "Share to CyberLover Community": "Deel naar OpenWebUI-community", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Deeltoestemmingen", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Je bent nu ingelogd.", "Your Account": "", "Your account status is currently pending activation.": "Je accountstatus wacht nu op activatie", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Je volledige bijdrage gaat direct naar de ontwikkelaar van de plugin; Open WebUI neemt hier geen deel van. Het gekozen financieringsplatform kan echter wel zijn eigen kosten hebben.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Je volledige bijdrage gaat direct naar de ontwikkelaar van de plugin; CyberLover neemt hier geen deel van. Het gekozen financieringsplatform kan echter wel zijn eigen kosten hebben.", "YouTube": "Youtube", "Youtube Language": "Youtube-taal", "Youtube Proxy URL": "Youtube-proxy-URL" diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 8af4f8bbfd..bda8390978 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -337,7 +337,7 @@ "Copy Link": "ਲਿੰਕ ਕਾਪੀ ਕਰੋ", "Copy to clipboard": "", "Copying to clipboard was successful!": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰਨਾ ਸਫਲ ਰਿਹਾ!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "ਇੱਕ ਮਾਡਲ ਬਣਾਓ", @@ -432,7 +432,7 @@ "Discover a model": "ਇੱਕ ਮਾਡਲ ਲੱਭੋ", "Discover a prompt": "ਇੱਕ ਪ੍ਰੰਪਟ ਖੋਜੋ", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "ਕਸਟਮ ਪ੍ਰੰਪਟਾਂ ਨੂੰ ਖੋਜੋ, ਡਾਊਨਲੋਡ ਕਰੋ ਅਤੇ ਪੜਚੋਲ ਕਰੋ", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ", + "Made by CyberLover Community": "ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ", "Make password visible in the user interface": "", "Make sure to enclose them with": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਉਨ੍ਹਾਂ ਨੂੰ ਘੇਰੋ", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਵੱਧ ਤੋਂ ਵੱਧ 3 ਮਾਡਲ ਡਾਊਨਲੋਡ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।", "May": "ਮਈ", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLMs ਲਈ ਸਮਰੱਥ ਕਾਰਨ ਇੱਕ ਸੂਚਨਾ ਨੂੰ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਹੈ।", "Memory": "ਮੀਮਰ", @@ -1139,10 +1139,10 @@ "Open new chat": "ਨਵੀਂ ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "ਓਪਨਏਆਈ", "OpenAI API": "ਓਪਨਏਆਈ API", "OpenAI API Config": "ਓਪਨਏਆਈ API ਕਨਫਿਗ", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "ਆਵਾਜ਼ ਰਿਕਾਰਡ ਕਰੋ", - "Redirecting you to Open WebUI Community": "ਤੁਹਾਨੂੰ ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਵੱਲ ਰੀਡਾਇਰੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", + "Redirecting you to CyberLover Community": "ਤੁਹਾਨੂੰ ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਵੱਲ ਰੀਡਾਇਰੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "ਸੈਟਿੰਗਾਂ ਸਫਲਤਾਪੂਰਵਕ ਸੰਭਾਲੀਆਂ ਗਈਆਂ!", "Share": "ਸਾਂਝਾ ਕਰੋ", "Share Chat": "ਗੱਲਬਾਤ ਸਾਂਝੀ ਕਰੋ", - "Share to Open WebUI Community": "ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਨਾਲ ਸਾਂਝਾ ਕਰੋ", + "Share to CyberLover Community": "ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਨਾਲ ਸਾਂਝਾ ਕਰੋ", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "ਤੁਸੀਂ ਹੁਣ ਲੌਗ ਇਨ ਹੋ ਗਏ ਹੋ।", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "ਯੂਟਿਊਬ", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index d641107a57..9300fcf5cc 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Skopiuj link", "Copy to clipboard": "Wklej do schowka", "Copying to clipboard was successful!": "Kopiowanie do schowka zakończyło się sukcesem!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS musi być prawidłowo skonfigurowany przez dostawcę, aby umożliwić żądania z Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS musi być prawidłowo skonfigurowany przez dostawcę, aby umożliwić żądania z CyberLover.", "Create": "Utwórz", "Create a knowledge base": "Utwórz bazę wiedzy", "Create a model": "Utwórz model", @@ -432,7 +432,7 @@ "Discover a model": "Odkrywaj model", "Discover a prompt": "Odkrywaj prompty", "Discover a tool": "Odkrywaj narzędzia", - "Discover how to use Open WebUI and seek support from the community.": "Odkryj, jak korzystać z Open WebUI i szukaj wsparcia w społeczności.", + "Discover how to use CyberLover and seek support from the community.": "Odkryj, jak korzystać z CyberLover i szukaj wsparcia w społeczności.", "Discover wonders": "Odkrywaj cuda", "Discover, download, and explore custom functions": "Odkryj, pobierz i eksploruj niestandardowe funkcje", "Discover, download, and explore custom prompts": "Odkryj, pobierz i eksploruj niestandardowe prompty", @@ -958,7 +958,7 @@ "Lost": "Przegrał", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Opracowane przez społeczność Open WebUI", + "Made by CyberLover Community": "Opracowane przez społeczność CyberLover", "Make password visible in the user interface": "", "Make sure to enclose them with": "Upewnij się, że są one zawarte w", "Make sure to export a workflow.json file as API format from ComfyUI.": "Upewnij się, że wyeksportowałeś plik workflow.json w formacie API z ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksymalnie 3 modele można pobierać jednocześnie. Proszę spróbować ponownie później.", "May": "Maj", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Wspomnienia dostępne za pomocą LLM zostaną wyświetlone tutaj.", "Memory": "Pamięć", @@ -1139,10 +1139,10 @@ "Open new chat": "Otwórz nową rozmowę", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI może używać narzędzi dostarczanych przez serwery OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI korzysta wewnętrznie z szybszego faster-whisper.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Otwarta WebUI wykorzystuje SpeechT5 i wbudowane zbiory danych mówcy CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Wersja Open WebUI (v{{OPEN_WEBUI_VERSION}}) jest niższa niż wymagana wersja (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover może używać narzędzi dostarczanych przez serwery OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover korzysta wewnętrznie z szybszego faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Otwarta WebUI wykorzystuje SpeechT5 i wbudowane zbiory danych mówcy CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Wersja CyberLover (v{{OPEN_WEBUI_VERSION}}) jest niższa niż wymagana wersja (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "Interfejs API OpenAI", "OpenAI API Config": "Konfiguracja interfejsu API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Nagraj", "Record voice": "Nagraj swój głos", - "Redirecting you to Open WebUI Community": "Przekierowujemy Cię do społeczności Open WebUI", + "Redirecting you to CyberLover Community": "Przekierowujemy Cię do społeczności CyberLover", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Odnoś się do mnie jako \"Użytkownik\" (np. \"Użytkownik uczy się hiszpańskiego\")", "Reference Chats": "", @@ -1436,7 +1436,7 @@ "Settings saved successfully!": "Ustawienia zostały zapisane pomyślnie!", "Share": "Udostępnij", "Share Chat": "Udostępnij rozmowę", - "Share to Open WebUI Community": "Udostępnij w społeczności OpenWebUI", + "Share to CyberLover Community": "Udostępnij w społeczności OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Uprawnienia udostępniania", @@ -1756,7 +1756,7 @@ "You're now logged in.": "Jesteś teraz zalogowany.", "Your Account": "", "Your account status is currently pending activation.": "Twoje konto oczekuje obecnie na aktywację.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Cała Twoja wpłata trafi bezpośrednio do dewelopera wtyczki; Open WebUI nie pobiera żadnej prowizji. Należy jednak pamiętać, że wybrana platforma finansowania może mieć własne opłaty.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Cała Twoja wpłata trafi bezpośrednio do dewelopera wtyczki; CyberLover nie pobiera żadnej prowizji. Należy jednak pamiętać, że wybrana platforma finansowania może mieć własne opłaty.", "YouTube": "Youtube", "Youtube Language": "Język Youtube", "Youtube Proxy URL": "URL proxy Youtube" diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 1cc44e33fb..659fd862dc 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copiar Link", "Copy to clipboard": "Copiar para a área de transferência", "Copying to clipboard was successful!": "Cópia para a área de transferência bem-sucedida!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "O CORS deve ser configurado corretamente pelo provedor para permitir solicitações do Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "O CORS deve ser configurado corretamente pelo provedor para permitir solicitações do CyberLover.", "Create": "Criar", "Create a knowledge base": "Criar uma Base de Conhecimento", "Create a model": "Criar um Modelo", @@ -432,7 +432,7 @@ "Discover a model": "Descubra um modelo", "Discover a prompt": "Descubra um prompt", "Discover a tool": "Descubra uma ferramenta", - "Discover how to use Open WebUI and seek support from the community.": "Descubra como usar o Open WebUI e busque suporte da comunidade.", + "Discover how to use CyberLover and seek support from the community.": "Descubra como usar o CyberLover e busque suporte da comunidade.", "Discover wonders": "Descobrir maravilhas", "Discover, download, and explore custom functions": "Descubra, baixe e explore funções personalizadas", "Discover, download, and explore custom prompts": "Descubra, baixe e explore prompts personalizados", @@ -958,7 +958,7 @@ "Lost": "Perdeu", "Low": "Baixo", "LTR": "Esquerda para Direita", - "Made by Open WebUI Community": "Feito pela Comunidade OpenWebUI", + "Made by CyberLover Community": "Feito pela Comunidade OpenWebUI", "Make password visible in the user interface": "Tornar a senha visível na interface do usuário", "Make sure to enclose them with": "Certifique-se de encerrá-los com", "Make sure to export a workflow.json file as API format from ComfyUI.": "Certifique-se de exportar um arquivo workflow.json como o formato API do ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Por favor, tente novamente mais tarde.", "May": "Maio", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "O suporte ao MCP é experimental e suas especificações mudam com frequência, o que pode levar a incompatibilidades. O suporte à especificação OpenAPI é mantido diretamente pela equipe do Open WebUI, tornando-o a opção mais confiável para compatibilidade.", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "O suporte ao MCP é experimental e suas especificações mudam com frequência, o que pode levar a incompatibilidades. O suporte à especificação OpenAPI é mantido diretamente pela equipe do CyberLover, tornando-o a opção mais confiável para compatibilidade.", "Medium": "Médio", "Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.", "Memory": "Memória", @@ -1139,10 +1139,10 @@ "Open new chat": "Abrir novo chat", "Open Sidebar": "Abrir barra lateral", "Open User Profile Menu": "Abrir menu de perfil do usuário", - "Open WebUI can use tools provided by any OpenAPI server.": "O Open WebUI pode usar ferramentas fornecidas por qualquer servidor OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI usa faster-whisper internamente.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "A Open WebUI usa os embeddings de voz do SpeechT5 e do CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "A versão do Open WebUI (v{{OPEN_WEBUI_VERSION}}) é inferior à versão necessária (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "O CyberLover pode usar ferramentas fornecidas por qualquer servidor OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover usa faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "A CyberLover usa os embeddings de voz do SpeechT5 e do CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "A versão do CyberLover (v{{OPEN_WEBUI_VERSION}}) é inferior à versão necessária (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configuração da API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Tags de raciocínio", "Record": "Registro", "Record voice": "Gravar voz", - "Redirecting you to Open WebUI Community": "Redirecionando você para a Comunidade OpenWebUI", + "Redirecting you to CyberLover Community": "Redirecionando você para a Comunidade OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reduz a probabilidade de gerar respostas sem sentido. Um valor mais alto (por exemplo, 100) resultará em respostas mais diversas, enquanto um valor mais baixo (por exemplo, 10) será mais conservador.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refira-se como \"Usuário\" (por exemplo, \"Usuário está aprendendo espanhol\")", "Reference Chats": "Chats Anteriores", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Configurações salvas com sucesso!", "Share": "Compartilhar", "Share Chat": "Compartilhar Chat", - "Share to Open WebUI Community": "Compartilhar com a Comunidade OpenWebUI", + "Share to CyberLover Community": "Compartilhar com a Comunidade OpenWebUI", "Share your background and interests": "Fale sobre você e seus interesses", "Shared with you": "Compartilhado com você", "Sharing Permissions": "Permissões de compartilhamento", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Você agora está logado.", "Your Account": "Sua conta", "Your account status is currently pending activation.": "O status da sua conta está atualmente aguardando ativação.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Toda a sua contribuição irá diretamente para o desenvolvedor do plugin; o Open WebUI não retém nenhuma porcentagem. No entanto, a plataforma de financiamento escolhida pode ter suas próprias taxas.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Toda a sua contribuição irá diretamente para o desenvolvedor do plugin; o CyberLover não retém nenhuma porcentagem. No entanto, a plataforma de financiamento escolhida pode ter suas próprias taxas.", "YouTube": "", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 9a1d33bc6b..ea16d10c5c 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copiar link", "Copy to clipboard": "", "Copying to clipboard was successful!": "Cópia para a área de transferência bem-sucedida!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Criar um modelo", @@ -432,7 +432,7 @@ "Discover a model": "Descubra um modelo", "Discover a prompt": "Descobrir um prompt", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Descubra, descarregue e explore prompts personalizados", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Feito pela Comunidade OpenWebUI", + "Made by CyberLover Community": "Feito pela Comunidade OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Certifique-se de colocá-los entre", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "O máximo de 3 modelos podem ser descarregados simultaneamente. Tente novamente mais tarde.", "May": "Maio", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.", "Memory": "Memória", @@ -1139,10 +1139,10 @@ "Open new chat": "Abrir nova conversa", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configuração da API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Gravar voz", - "Redirecting you to Open WebUI Community": "Redirecionando-o para a Comunidade OpenWebUI", + "Redirecting you to CyberLover Community": "Redirecionando-o para a Comunidade OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refera-se a si próprio como \"User\" (por exemplo, \"User está a aprender Espanhol\")", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Configurações guardadas com sucesso!", "Share": "Partilhar", "Share Chat": "Partilhar Conversa", - "Share to Open WebUI Community": "Partilhar com a Comunidade OpenWebUI", + "Share to CyberLover Community": "Partilhar com a Comunidade OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Você agora está conectado.", "Your Account": "", "Your account status is currently pending activation.": "O status da sua conta está atualmente com a ativação pendente.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/ro-RO/translation.json b/src/lib/i18n/locales/ro-RO/translation.json index 25714597a8..adef0ab3ad 100644 --- a/src/lib/i18n/locales/ro-RO/translation.json +++ b/src/lib/i18n/locales/ro-RO/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Copiază Link", "Copy to clipboard": "Copiază în clipboard", "Copying to clipboard was successful!": "Copierea în clipboard a fost realizată cu succes!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "Creează", "Create a knowledge base": "", "Create a model": "Creează un model", @@ -432,7 +432,7 @@ "Discover a model": "Descoperă un model", "Discover a prompt": "Descoperă un prompt", "Discover a tool": "Descoperă un instrument", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "Descoperă, descarcă și explorează funcții personalizate", "Discover, download, and explore custom prompts": "Descoperă, descarcă și explorează prompturi personalizate", @@ -958,7 +958,7 @@ "Lost": "Pierdut", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Realizat de Comunitatea OpenWebUI", + "Made by CyberLover Community": "Realizat de Comunitatea OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Asigurați-vă că le închideți cu", "Make sure to export a workflow.json file as API format from ComfyUI.": "Asigură-te că exporți un fișier {{workflow.json}} în format API din {{ComfyUI}}.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maxim 3 modele pot fi descărcate simultan. Vă rugăm să încercați din nou mai târziu.", "May": "Mai", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Memoriile accesibile de LLM-uri vor fi afișate aici.", "Memory": "Memorie", @@ -1139,10 +1139,10 @@ "Open new chat": "Deschide conversație nouă", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI folosește faster-whisper intern.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Versiunea Open WebUI (v{{OPEN_WEBUI_VERSION}}) este mai mică decât versiunea necesară (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover folosește faster-whisper intern.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Versiunea CyberLover (v{{OPEN_WEBUI_VERSION}}) este mai mică decât versiunea necesară (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configurația API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Înregistrează vocea", - "Redirecting you to Open WebUI Community": "Vă redirecționăm către Comunitatea OpenWebUI", + "Redirecting you to CyberLover Community": "Vă redirecționăm către Comunitatea OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referiți-vă la dvs. ca \"Utilizator\" (de ex., \"Utilizatorul învață spaniolă\")", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Setările au fost salvate cu succes!", "Share": "Partajează", "Share Chat": "Partajează Conversația", - "Share to Open WebUI Community": "Partajează cu Comunitatea OpenWebUI", + "Share to CyberLover Community": "Partajează cu Comunitatea OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Acum ești autentificat.", "Your Account": "", "Your account status is currently pending activation.": "Statusul contului dvs. este în așteptare pentru activare.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Întreaga dvs. contribuție va merge direct la dezvoltatorul plugin-ului; Open WebUI nu ia niciun procent. Cu toate acestea, platforma de finanțare aleasă ar putea avea propriile taxe.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Întreaga dvs. contribuție va merge direct la dezvoltatorul plugin-ului; CyberLover nu ia niciun procent. Cu toate acestea, platforma de finanțare aleasă ar putea avea propriile taxe.", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 16d68dcd02..19b00a9dfb 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Копировать ссылку", "Copy to clipboard": "Скопировать в буфер обмена", "Copying to clipboard was successful!": "Копирование в буфер обмена прошло успешно!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS должен быть должным образом настроен провайдером, чтобы разрешать запросы из Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS должен быть должным образом настроен провайдером, чтобы разрешать запросы из CyberLover.", "Create": "Создать", "Create a knowledge base": "Создайте базу знаний", "Create a model": "Создание модели", @@ -432,7 +432,7 @@ "Discover a model": "Найти модель", "Discover a prompt": "Найти промпт", "Discover a tool": "Найти инструмент", - "Discover how to use Open WebUI and seek support from the community.": "Узнайте, как использовать Open WebUI, и обратитесь за поддержкой к сообществу.", + "Discover how to use CyberLover and seek support from the community.": "Узнайте, как использовать CyberLover, и обратитесь за поддержкой к сообществу.", "Discover wonders": "Откройте для себя чудеса", "Discover, download, and explore custom functions": "Открывайте для себя, загружайте и исследуйте пользовательские функции", "Discover, download, and explore custom prompts": "Открывайте для себя, загружайте и исследуйте пользовательские промпты", @@ -958,7 +958,7 @@ "Lost": "Поражение", "Low": "Низкий", "LTR": "LTR", - "Made by Open WebUI Community": "Сделано сообществом OpenWebUI", + "Made by CyberLover Community": "Сделано сообществом OpenWebUI", "Make password visible in the user interface": "Показать пароль в пользовательском интерфейсе", "Make sure to enclose them with": "Убедитесь, что они заключены в", "Make sure to export a workflow.json file as API format from ComfyUI.": "Убедитесь, что экспортируете файл workflow.json в формате API из ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимальное количество моделей для загрузки одновременно - 3. Пожалуйста, попробуйте позже.", "May": "Май", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "Средний", "Memories accessible by LLMs will be shown here.": "Воспоминания, доступные LLMs, будут отображаться здесь.", "Memory": "Воспоминания", @@ -1139,10 +1139,10 @@ "Open new chat": "Открыть новый чат", "Open Sidebar": "Открыть боковую панель", "Open User Profile Menu": "Открыть меню профиля пользователя", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI может использовать инструменты, предоставляемые любым сервером OpenAPI.", - "Open WebUI uses faster-whisper internally.": "Open WebUI использует более быстрый внутренний интерфейс whisper.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "В Open WebUI используются встраиваемые движки генерации речи SpeechT5 и CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версия Open WebUI (v{{OPEN_WEBUI_VERSION}}) ниже требуемой версии (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover может использовать инструменты, предоставляемые любым сервером OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover использует более быстрый внутренний интерфейс whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "В CyberLover используются встраиваемые движки генерации речи SpeechT5 и CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версия CyberLover (v{{OPEN_WEBUI_VERSION}}) ниже требуемой версии (v{{REQUIRED_VERSION}})", "OpenAI": "Open AI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Конфигурация API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "Теги рассуждения", "Record": "Запись", "Record voice": "Записать голос", - "Redirecting you to Open WebUI Community": "Перенаправляем вас в сообщество OpenWebUI", + "Redirecting you to CyberLover Community": "Перенаправляем вас в сообщество OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Снижает вероятность появления бессмыслицы. Большее значение (например, 100) даст более разнообразные ответы, в то время как меньшее значение (например, 10) будет более консервативным.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Называйте себя \"User\" (например, \"User is learning Spanish\").", "Reference Chats": "Справочные чаты", @@ -1436,7 +1436,7 @@ "Settings saved successfully!": "Настройки успешно сохранены!", "Share": "Поделиться", "Share Chat": "Поделиться чатом", - "Share to Open WebUI Community": "Поделиться с сообществом OpenWebUI", + "Share to CyberLover Community": "Поделиться с сообществом OpenWebUI", "Share your background and interests": "Расскажите о своём опыте и интересах", "Shared with you": "", "Sharing Permissions": "Разрешения на общий доступ", @@ -1756,7 +1756,7 @@ "You're now logged in.": "Вы вошли в систему.", "Your Account": "Ваш аккаунт", "Your account status is currently pending activation.": "В настоящее время ваша учетная запись ожидает активации.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Весь ваш взнос будет направлен непосредственно разработчику плагина; Open WebUI не взимает никаких процентов. Однако выбранная платформа финансирования может иметь свои собственные сборы.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Весь ваш взнос будет направлен непосредственно разработчику плагина; CyberLover не взимает никаких процентов. Однако выбранная платформа финансирования может иметь свои собственные сборы.", "YouTube": "YouTube", "Youtube Language": "Язык YouTube", "Youtube Proxy URL": "URL прокси для YouTube" diff --git a/src/lib/i18n/locales/sk-SK/translation.json b/src/lib/i18n/locales/sk-SK/translation.json index 18df7bd500..defd92d41f 100644 --- a/src/lib/i18n/locales/sk-SK/translation.json +++ b/src/lib/i18n/locales/sk-SK/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopírovať odkaz", "Copy to clipboard": "Kopírovať do schránky", "Copying to clipboard was successful!": "Kopírovanie do schránky bolo úspešné!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "Vytvoriť", "Create a knowledge base": "Vytvoriť knowledge base", "Create a model": "Vytvoriť model", @@ -432,7 +432,7 @@ "Discover a model": "Objaviť model", "Discover a prompt": "Objaviť prompt", "Discover a tool": "Objaviť nástroj", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "Objavujte, sťahujte a preskúmajte vlastné funkcie", "Discover, download, and explore custom prompts": "Objavte, stiahnite a preskúmajte vlastné prompty.", @@ -958,7 +958,7 @@ "Lost": "Stratený", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Vytvorené komunitou OpenWebUI", + "Made by CyberLover Community": "Vytvorené komunitou OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Uistite sa, že sú uzavreté pomocou", "Make sure to export a workflow.json file as API format from ComfyUI.": "Uistite sa, že exportujete súbor workflow.json vo formáte API z ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximálne 3 modely môžu byť stiahnuté súčasne. Prosím skúste to znova neskôr.", "May": "Máj", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Spomienky prístupné LLM budú zobrazené tu.", "Memory": "Pamäť", @@ -1139,10 +1139,10 @@ "Open new chat": "Otvoriť nový chat", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI interne používa faster-whisper.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verzia Open WebUI (v{{OPEN_WEBUI_VERSION}}) je nižšia ako požadovaná verzia (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover interne používa faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verzia CyberLover (v{{OPEN_WEBUI_VERSION}}) je nižšia ako požadovaná verzia (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI je výskumná organizácia zameraná na umelú inteligenciu, ktorá je známa vývojom pokročilých jazykových modelov, ako je napríklad GPT. Tieto modely sa využívajú v rôznych aplikáciách, vrátane konverzačných agentov a jazykových nástrojov.", "OpenAI API": "OpenAI API je rozhranie aplikačného programovania, ktoré umožňuje vývojárom integrovať pokročilé jazykové modely do svojich aplikácií.", "OpenAI API Config": "Konfigurácia API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Nahrať hlas", - "Redirecting you to Open WebUI Community": "Presmerovanie na komunitu OpenWebUI", + "Redirecting you to CyberLover Community": "Presmerovanie na komunitu OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Odkazujte na seba ako na \"užívateľa\" (napr. \"Užívateľ sa učí španielsky\").", "Reference Chats": "", @@ -1436,7 +1436,7 @@ "Settings saved successfully!": "Nastavenia boli úspešne uložené!", "Share": "Zdieľať", "Share Chat": "Zdieľať chat", - "Share to Open WebUI Community": "Zdieľať s komunitou OpenWebUI", + "Share to CyberLover Community": "Zdieľať s komunitou OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1756,7 +1756,7 @@ "You're now logged in.": "Teraz ste prihlásený(-á).", "Your Account": "", "Your account status is currently pending activation.": "Stav vášho účtu je aktuálne čakajúci na aktiváciu.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Celý váš príspevok pôjde priamo vývojárovi pluginu; Open WebUI si neberie žiadne percento. Zvolená platforma na financovanie však môže mať vlastné poplatky.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Celý váš príspevok pôjde priamo vývojárovi pluginu; CyberLover si neberie žiadne percento. Zvolená platforma na financovanie však môže mať vlastné poplatky.", "YouTube": "YouTube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 4793b7c677..27f9200e76 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Копирај везу", "Copy to clipboard": "Копирај у оставу", "Copying to clipboard was successful!": "Успешно копирање у оставу!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "Направи", "Create a knowledge base": "Направи базу знања", "Create a model": "Креирање модела", @@ -432,7 +432,7 @@ "Discover a model": "Откријте модел", "Discover a prompt": "Откриј упит", "Discover a tool": "Откријте алат", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "Откријте чудеса", "Discover, download, and explore custom functions": "Откријте, преузмите и истражите прилагођене функције", "Discover, download, and explore custom prompts": "Откријте, преузмите и истражите прилагођене упите", @@ -958,7 +958,7 @@ "Lost": "Пораза", "Low": "", "LTR": "ЛНД", - "Made by Open WebUI Community": "Израдила OpenWebUI заједница", + "Made by CyberLover Community": "Израдила OpenWebUI заједница", "Make password visible in the user interface": "", "Make sure to enclose them with": "Уверите се да их затворите са", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Највише 3 модела могу бити преузета истовремено. Покушајте поново касније.", "May": "Мај", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Памћења које ће бити појављена од овог LLM-а ће бити приказана овде.", "Memory": "Сећања", @@ -1139,10 +1139,10 @@ "Open new chat": "Покрени ново ћаскање", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Подешавање OpenAI API-ја", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Сними глас", - "Redirecting you to Open WebUI Community": "Преусмеравање на OpenWebUI заједницу", + "Redirecting you to CyberLover Community": "Преусмеравање на OpenWebUI заједницу", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1435,7 +1435,7 @@ "Settings saved successfully!": "Подешавања успешно сачувана!", "Share": "Подели", "Share Chat": "Подели ћаскање", - "Share to Open WebUI Community": "Подели са OpenWebUI заједницом", + "Share to CyberLover Community": "Подели са OpenWebUI заједницом", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1755,7 +1755,7 @@ "You're now logged in.": "Сада сте пријављени.", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "Јутјуб", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index e7f0dc351d..a094f16fa0 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Kopiera länk", "Copy to clipboard": "Kopiera till urklipp", "Copying to clipboard was successful!": "Kopiering till urklipp lyckades!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS måste vara korrekt konfigurerad av leverantören för att tillåta förfrågningar från Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS måste vara korrekt konfigurerad av leverantören för att tillåta förfrågningar från CyberLover.", "Create": "Skapa", "Create a knowledge base": "Skapa en kunskapsbas", "Create a model": "Skapa en modell", @@ -432,7 +432,7 @@ "Discover a model": "Upptäck en modell", "Discover a prompt": "Upptäck en instruktion", "Discover a tool": "Upptäck ett verktyg", - "Discover how to use Open WebUI and seek support from the community.": "Upptäck hur du använder Open WebUI och sök stöd från communityn.", + "Discover how to use CyberLover and seek support from the community.": "Upptäck hur du använder CyberLover och sök stöd från communityn.", "Discover wonders": "Upptäck underverk", "Discover, download, and explore custom functions": "Upptäck, ladda ner och utforska anpassade funktioner", "Discover, download, and explore custom prompts": "Upptäck, ladda ner och utforska anpassade instruktioner", @@ -958,7 +958,7 @@ "Lost": "Förlorad", "Low": "", "LTR": "Vänster till höger", - "Made by Open WebUI Community": "Skapad av OpenWebUI Community", + "Made by CyberLover Community": "Skapad av OpenWebUI Community", "Make password visible in the user interface": "Gör lösenordet synligt i användargränssnittet", "Make sure to enclose them with": "Se till att bifoga dem med", "Make sure to export a workflow.json file as API format from ComfyUI.": "Se till att exportera en workflow.json-fil som API-format från ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Högst 3 modeller kan laddas ner samtidigt. Vänligen försök igen senare.", "May": "maj", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Minnen som är tillgängliga för LLM:er visas här.", "Memory": "Minne", @@ -1139,10 +1139,10 @@ "Open new chat": "Öppna ny chatt", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI kan använda verktyg från alla OpenAPI-servrar.", - "Open WebUI uses faster-whisper internally.": "Open WebUI använder faster-whisper internt.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI använder SpeechT5 och CMU Arctic högtalarinbäddningar.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI-versionen (v{{OPEN_WEBUI_VERSION}}) är lägre än den version som krävs (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kan använda verktyg från alla OpenAPI-servrar.", + "CyberLover uses faster-whisper internally.": "CyberLover använder faster-whisper internt.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover använder SpeechT5 och CMU Arctic högtalarinbäddningar.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-versionen (v{{OPEN_WEBUI_VERSION}}) är lägre än den version som krävs (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API-konfig", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Spela in", "Record voice": "Spela in röst", - "Redirecting you to Open WebUI Community": "Omdirigerar dig till OpenWebUI Community", + "Redirecting you to CyberLover Community": "Omdirigerar dig till OpenWebUI Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Minskar sannolikheten för att generera nonsens. Ett högre värde (t.ex. 100) ger mer varierande svar, medan ett lägre värde (t.ex. 10) är mer konservativt.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referera till dig själv som \"Användare\" (t.ex. \"Användaren lär sig spanska\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Inställningar sparades framgångsrikt!", "Share": "Dela", "Share Chat": "Dela chatt", - "Share to Open WebUI Community": "Dela till OpenWebUI Community", + "Share to CyberLover Community": "Dela till OpenWebUI Community", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Delningsbehörigheter", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Du är nu inloggad.", "Your Account": "", "Your account status is currently pending activation.": "Ditt konto väntar på att bli aktiverat", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Hela ditt bidrag går direkt till pluginutvecklaren; Open WebUI tar ingen procentandel. Däremot kan den valda finansieringsplattformen ha egna avgifter.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Hela ditt bidrag går direkt till pluginutvecklaren; CyberLover tar ingen procentandel. Däremot kan den valda finansieringsplattformen ha egna avgifter.", "YouTube": "Youtube", "Youtube Language": "Youtube-språk", "Youtube Proxy URL": "Youtube Proxy URL" diff --git a/src/lib/i18n/locales/th-TH/translation.json b/src/lib/i18n/locales/th-TH/translation.json index 498fbe5609..bdc830a15d 100644 --- a/src/lib/i18n/locales/th-TH/translation.json +++ b/src/lib/i18n/locales/th-TH/translation.json @@ -337,7 +337,7 @@ "Copy Link": "คัดลอกลิงก์", "Copy to clipboard": "", "Copying to clipboard was successful!": "คัดลอกไปยังคลิปบอร์ดสำเร็จแล้ว!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "สร้างโมเดล", @@ -432,7 +432,7 @@ "Discover a model": "ค้นหาโมเดล", "Discover a prompt": "ค้นหาพรอมต์", "Discover a tool": "ค้นหาเครื่องมือ", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "ค้นหา ดาวน์โหลด และสำรวจฟังก์ชันที่กำหนดเอง", "Discover, download, and explore custom prompts": "ค้นหา ดาวน์โหลด และสำรวจพรอมต์ที่กำหนดเอง", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "สร้างโดยชุมชน OpenWebUI", + "Made by CyberLover Community": "สร้างโดยชุมชน OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "สามารถดาวน์โหลดโมเดลได้สูงสุด 3 โมเดลในเวลาเดียวกัน โปรดลองอีกครั้งในภายหลัง", "May": "พฤษภาคม", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "", "Memory": "ความจำ", @@ -1139,10 +1139,10 @@ "Open new chat": "เปิดแชทใหม่", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "เวอร์ชั่น Open WebUI (v{{OPEN_WEBUI_VERSION}}) ต่ำกว่าเวอร์ชั่นที่ต้องการ (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "เวอร์ชั่น CyberLover (v{{OPEN_WEBUI_VERSION}}) ต่ำกว่าเวอร์ชั่นที่ต้องการ (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "การตั้งค่า OpenAI API", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "บันทึกเสียง", - "Redirecting you to Open WebUI Community": "กำลังเปลี่ยนเส้นทางคุณไปยังชุมชน OpenWebUI", + "Redirecting you to CyberLover Community": "กำลังเปลี่ยนเส้นทางคุณไปยังชุมชน OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "เรียกตัวเองว่า \"ผู้ใช้\" (เช่น \"ผู้ใช้กำลังเรียนภาษาสเปน\")", "Reference Chats": "", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "บันทึกการตั้งค่าเรียบร้อยแล้ว!", "Share": "แชร์", "Share Chat": "แชร์แชท", - "Share to Open WebUI Community": "แชร์ไปยังชุมชน OpenWebUI", + "Share to CyberLover Community": "แชร์ไปยังชุมชน OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1753,7 +1753,7 @@ "You're now logged in.": "คุณเข้าสู่ระบบแล้ว", "Your Account": "", "Your account status is currently pending activation.": "สถานะบัญชีของคุณกำลังรอการเปิดใช้งาน", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "การสนับสนุนทั้งหมดของคุณจะไปยังนักพัฒนาปลั๊กอินโดยตรง; Open WebUI ไม่รับส่วนแบ่งใด ๆ อย่างไรก็ตาม แพลตฟอร์มการระดมทุนที่เลือกอาจมีค่าธรรมเนียมของตัวเอง", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "การสนับสนุนทั้งหมดของคุณจะไปยังนักพัฒนาปลั๊กอินโดยตรง; CyberLover ไม่รับส่วนแบ่งใด ๆ อย่างไรก็ตาม แพลตฟอร์มการระดมทุนที่เลือกอาจมีค่าธรรมเนียมของตัวเอง", "YouTube": "Youtube", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/tk-TM/translation.json b/src/lib/i18n/locales/tk-TM/translation.json index f75466abe3..57fcc7e7d3 100644 --- a/src/lib/i18n/locales/tk-TM/translation.json +++ b/src/lib/i18n/locales/tk-TM/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Baglanyşygy Göçür", "Copy to clipboard": "", "Copying to clipboard was successful!": "Buferine göçürmek üstünlikli boldy!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "Model döret", @@ -432,7 +432,7 @@ "Discover a model": "", "Discover a prompt": "", "Discover a tool": "", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "", @@ -958,7 +958,7 @@ "Lost": "", "Low": "", "LTR": "", - "Made by Open WebUI Community": "", + "Made by CyberLover Community": "", "Make password visible in the user interface": "", "Make sure to enclose them with": "", "Make sure to export a workflow.json file as API format from ComfyUI.": "", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "", "May": "Maý", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "", "Memory": "Ýat", @@ -1139,10 +1139,10 @@ "Open new chat": "", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "", "OpenAI API Config": "", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "", - "Redirecting you to Open WebUI Community": "", + "Redirecting you to CyberLover Community": "", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "", "Share": "Paýlaş", "Share Chat": "Çaty Paýlaş", - "Share to Open WebUI Community": "", + "Share to CyberLover Community": "", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "", "Your Account": "", "Your account status is currently pending activation.": "", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "", "YouTube": "", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index d52c151daf..fb8f319505 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Bağlantıyı Kopyala", "Copy to clipboard": "Panoya kopyala", "Copying to clipboard was successful!": "Panoya kopyalama başarılı!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUI’dan gelen isteklerin kabul edilebilmesi için sağlayıcının CORS yapılandırmasının doğru şekilde yapılmış olması gerekir.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CyberLover’dan gelen isteklerin kabul edilebilmesi için sağlayıcının CORS yapılandırmasının doğru şekilde yapılmış olması gerekir.", "Create": "Oluştur", "Create a knowledge base": "Bir bilgi tabanı oluştur", "Create a model": "Bir model oluştur", @@ -432,7 +432,7 @@ "Discover a model": "Bir model keşfedin", "Discover a prompt": "Bir prompt keşfedin", "Discover a tool": "Bir araç keşfedin", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "Harikaları keşfedin", "Discover, download, and explore custom functions": "Özel fonksiyonları keşfedin, indirin ve inceleyin", "Discover, download, and explore custom prompts": "Özel promptları keşfedin, indirin ve inceleyin", @@ -958,7 +958,7 @@ "Lost": "Kayıp", "Low": "", "LTR": "Soldan Sağa", - "Made by Open WebUI Community": "OpenWebUI Topluluğu tarafından yapılmıştır", + "Made by CyberLover Community": "OpenWebUI Topluluğu tarafından yapılmıştır", "Make password visible in the user interface": "", "Make sure to enclose them with": "Değişkenlerinizi şu şekilde biçimlendirin:", "Make sure to export a workflow.json file as API format from ComfyUI.": "ComfyUI'dan API formatında bir workflow.json dosyası olarak dışa aktardığınızdan emin olun.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Aynı anda en fazla 3 model indirilebilir. Lütfen daha sonra tekrar deneyin.", "May": "Mayıs", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLM'ler tarafından erişilebilen bellekler burada gösterilecektir.", "Memory": "Bellek", @@ -1139,10 +1139,10 @@ "Open new chat": "Yeni sohbet aç", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI OpenAPI tarafından sağlanan araçları kullanabilir", - "Open WebUI uses faster-whisper internally.": "Open WebUI, dahili olarak daha hızlı-fısıltı kullanır.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI, SpeechT5 ve CMU Arctic konuşmacı gömme kullanır.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open-WebUI sürümü (v{{OPEN_WEBUI_VERSION}}) gerekli sürümden (v{{REQUIRED_VERSION}}) düşük", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover OpenAPI tarafından sağlanan araçları kullanabilir", + "CyberLover uses faster-whisper internally.": "CyberLover, dahili olarak daha hızlı-fısıltı kullanır.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover, SpeechT5 ve CMU Arctic konuşmacı gömme kullanır.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open-WebUI sürümü (v{{OPEN_WEBUI_VERSION}}) gerekli sürümden (v{{REQUIRED_VERSION}}) düşük", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API Konfigürasyonu", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Kaydet", "Record voice": "Ses kaydı yap", - "Redirecting you to Open WebUI Community": "OpenWebUI Topluluğuna yönlendiriliyorsunuz", + "Redirecting you to CyberLover Community": "OpenWebUI Topluluğuna yönlendiriliyorsunuz", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Kendinizden \"User\" olarak bahsedin (örneğin, \"User İspanyolca öğreniyor\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Ayarlar başarıyla kaydedildi!", "Share": "Paylaş", "Share Chat": "Sohbeti Paylaş", - "Share to Open WebUI Community": "OpenWebUI Topluluğu ile Paylaş", + "Share to CyberLover Community": "OpenWebUI Topluluğu ile Paylaş", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Şimdi giriş yaptınız.", "Your Account": "Hesabınız", "Your account status is currently pending activation.": "Hesap durumunuz şu anda etkinleştirilmeyi bekliyor.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Tüm katkınız doğrudan eklenti geliştiricisine gidecektir; Open WebUI herhangi bir yüzde almaz. Ancak seçilen finansman platformunun kendi ücretleri olabilir.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Tüm katkınız doğrudan eklenti geliştiricisine gidecektir; CyberLover herhangi bir yüzde almaz. Ancak seçilen finansman platformunun kendi ücretleri olabilir.", "YouTube": "Youtube", "Youtube Language": "Youtube Dili", "Youtube Proxy URL": "Youtube Vekil URL'si" diff --git a/src/lib/i18n/locales/ug-CN/translation.json b/src/lib/i18n/locales/ug-CN/translation.json index e79ada8693..5e0cbc206c 100644 --- a/src/lib/i18n/locales/ug-CN/translation.json +++ b/src/lib/i18n/locales/ug-CN/translation.json @@ -337,7 +337,7 @@ "Copy Link": "ئۇلانما كۆچۈرۈش", "Copy to clipboard": "چاپلاش تاختىسىغا كۆچۈرۈش", "Copying to clipboard was successful!": "چاپلاش تاختىسىغا كۆچۈرۈش مۇۋەپپەقىيەتلىك بولدى!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUIنىڭ تەلىپكە ئىجازەت بېرىش ئۈچۈن CORS توغرا تەڭشىلىشى كېرەك.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "Open WebUIنىڭ تەلىپكە ئىجازەت بېرىش ئۈچۈن CORS توغرا تەڭشىلىشى كېرەك.", "Create": "قۇرۇش", "Create a knowledge base": "بىلىم ئاساسى قۇرۇش", "Create a model": "مودېل قۇرۇش", @@ -432,7 +432,7 @@ "Discover a model": "مودېل تاپ", "Discover a prompt": "تۈرتكە تاپ", "Discover a tool": "قورال تاپ", - "Discover how to use Open WebUI and seek support from the community.": "Open WebUI ئىشلىتىشنى ئۈگىنڭ ۋە جەمئىيەتتىن ياردەم سوراڭ.", + "Discover how to use CyberLover and seek support from the community.": "CyberLover ئىشلىتىشنى ئۈگىنڭ ۋە جەمئىيەتتىن ياردەم سوراڭ.", "Discover wonders": "مۆجىزىلەرنى بايقاڭ", "Discover, download, and explore custom functions": "ئۆزلۈك فۇنكسىيەسىنى تاپ، چۈشۈر، تەتقىق قىل", "Discover, download, and explore custom prompts": "ئۆزلۈك تۈرتكەسىنى تاپ، چۈشۈر، تەتقىق قىل", @@ -958,7 +958,7 @@ "Lost": "يوقاپ كەتتى", "Low": "", "LTR": "LTR (سولدىن ئوڭغا)", - "Made by Open WebUI Community": "Open WebUI جەمئىيىتى تەرىپىدىن قۇرۇلغان", + "Made by CyberLover Community": "CyberLover جەمئىيىتى تەرىپىدىن قۇرۇلغان", "Make password visible in the user interface": "ئىشلەتكۈچى ئۈستىلىدە پارول كۆرسىتىش", "Make sure to enclose them with": "ئۇلارنى تۆۋەندىكىدەك قىستۇرۇڭ", "Make sure to export a workflow.json file as API format from ComfyUI.": "ComfyUI دىن API قېلىپىدا workflow.json ھۆججىتى چىقىرىڭ.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "بىر ۋاقىتتا ئەڭ كۆپ 3 مودېل چۈشۈرۈلىدۇ. كىيىنچە قايتا سىناڭ.", "May": "ماي", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLM ئىشلىتەلەيدىن ئەسلەتمىلەر بۇ يەردە كۆرۈنىدۇ.", "Memory": "ئەسلەتمە", @@ -1139,10 +1139,10 @@ "Open new chat": "يېڭى سۆھبەت ئېچىش", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI ھەر قانداق OpenAPI مۇلازىمېتىرلىرىدىكى قوراللارنى ئىشلىتەلىدۇ.", - "Open WebUI uses faster-whisper internally.": "Open WebUI ئىچىدە faster-whisper ئىشلىتىدۇ.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI SpeechT5 ۋە CMU Arctic ئاۋاز سىڭدۈرۈش ئىشلىتىدۇ.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI نەشرى (v{{OPEN_WEBUI_VERSION}}) تەلەپ قىلىنغان نەشردىن (v{{REQUIRED_VERSION}}) تۆۋەن.", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover ھەر قانداق OpenAPI مۇلازىمېتىرلىرىدىكى قوراللارنى ئىشلىتەلىدۇ.", + "CyberLover uses faster-whisper internally.": "CyberLover ئىچىدە faster-whisper ئىشلىتىدۇ.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover SpeechT5 ۋە CMU Arctic ئاۋاز سىڭدۈرۈش ئىشلىتىدۇ.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover نەشرى (v{{OPEN_WEBUI_VERSION}}) تەلەپ قىلىنغان نەشردىن (v{{REQUIRED_VERSION}}) تۆۋەن.", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API تەڭشىكى", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "خاتىرىلەش", "Record voice": "ئاۋاز خاتىرىلەش", - "Redirecting you to Open WebUI Community": "Open WebUI جەمئىيىتىگە يوللاندى", + "Redirecting you to CyberLover Community": "CyberLover جەمئىيىتىگە يوللاندى", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "ئاساسسىز ئىنكاس چىقىرىشىنىڭ ئېھتىماللىقىنى ئازايتىدۇ. چوڭ قىممەت (مەسىلەن: 100) كۆپ خىل ئىنكاس، كىچىك قىممەت (مەسىلەن: 10) تېخىمۇ مۇقىم ئىنكاس بېرىدۇ.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "ئۆزىڭىزنى \"ئىشلەتكۈچى\" دەپ ئاتىڭ (مەسىلەن: \"ئىشلەتكۈچى ئىسپانچە ئۆگىنىۋاتىدۇ\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "تەڭشەك مۇۋەپپەقىيەتلىك ساقلاندى!", "Share": "ھەمبەھىرلەش", "Share Chat": "سۆھبەت ھەمبەھىرلەش", - "Share to Open WebUI Community": "Open WebUI جەمئىيىتىگە ھەمبەھىرلەش", + "Share to CyberLover Community": "CyberLover جەمئىيىتىگە ھەمبەھىرلەش", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "ھەمبەھىرلەش ھوقۇقى", @@ -1754,7 +1754,7 @@ "You're now logged in.": "سىز كىرىپ بولدىڭىز.", "Your Account": "", "Your account status is currently pending activation.": "ھېساباتىڭىزنىڭ ھازىرقى ھالىتى ئاكتىپلىنىشنى كۈتۈۋاتىدۇ.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "تۆلەم پۇلىڭىز بىۋاسىتە قىستۇرما تەرەققىياتچىسىغا بېرىلىدۇ؛ Open WebUI ھېچقانداق پىرسېنت ئالمايدۇ. بىراق تاللانغان مالىيە پلاتفورمىسىنىڭ ئۆزىنىڭ ھەققى بولۇشى مۇمكىن.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "تۆلەم پۇلىڭىز بىۋاسىتە قىستۇرما تەرەققىياتچىسىغا بېرىلىدۇ؛ CyberLover ھېچقانداق پىرسېنت ئالمايدۇ. بىراق تاللانغان مالىيە پلاتفورمىسىنىڭ ئۆزىنىڭ ھەققى بولۇشى مۇمكىن.", "YouTube": "Youtube", "Youtube Language": "Youtube تىلى", "Youtube Proxy URL": "Youtube ۋاكالەتچى URL" diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index b35006a726..3d596b54be 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Копіювати посилання", "Copy to clipboard": "Копіювати в буфер обміну", "Copying to clipboard was successful!": "Копіювання в буфер обміну виконано успішно!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS має бути правильно налаштований постачальником, щоб дозволити запити з Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS має бути правильно налаштований постачальником, щоб дозволити запити з CyberLover.", "Create": "Створити", "Create a knowledge base": "Створити базу знань", "Create a model": "Створити модель", @@ -432,7 +432,7 @@ "Discover a model": "Знайдіть модель", "Discover a prompt": "Знайдіть промт", "Discover a tool": "Знайдіть інструмент", - "Discover how to use Open WebUI and seek support from the community.": "Дізнайтесь, як використовувати Open WebUI, та звертайтесь за підтримкою до спільноти.", + "Discover how to use CyberLover and seek support from the community.": "Дізнайтесь, як використовувати CyberLover, та звертайтесь за підтримкою до спільноти.", "Discover wonders": "Відкривайте чудеса", "Discover, download, and explore custom functions": "Знайдіть, завантажте та досліджуйте налаштовані функції", "Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти", @@ -958,7 +958,7 @@ "Lost": "Втрачене", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Зроблено спільнотою OpenWebUI", + "Made by CyberLover Community": "Зроблено спільнотою OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Переконайтеся, що вони закриті", "Make sure to export a workflow.json file as API format from ComfyUI.": "Обов'язково експортуйте файл workflow.json у форматі API з ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 моделі можна завантажити одночасно. Будь ласка, спробуйте пізніше.", "May": "Травень", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Пам'ять, яка доступна LLM, буде показана тут.", "Memory": "Пам'ять", @@ -1139,10 +1139,10 @@ "Open new chat": "Відкрити новий чат", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI використовує faster-whisper внутрішньо.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI використовує вбудовування голосів SpeechT5 та CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover використовує faster-whisper внутрішньо.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover використовує вбудовування голосів SpeechT5 та CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Конфігурація OpenAI API", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Записати голос", - "Redirecting you to Open WebUI Community": "Перенаправляємо вас до спільноти OpenWebUI", + "Redirecting you to CyberLover Community": "Перенаправляємо вас до спільноти OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Зменшує ймовірність генерування нісенітниць. Вищий показник (напр., 100) забезпечить більше різноманітних відповідей, тоді як нижчий показник (напр., 10) буде більш обережним.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Називайте себе \"Користувач\" (напр., \"Користувач вивчає іспанську мову\")", "Reference Chats": "", @@ -1436,7 +1436,7 @@ "Settings saved successfully!": "Налаштування успішно збережено!", "Share": "Поділитися", "Share Chat": "Поділитися чатом", - "Share to Open WebUI Community": "Поділитися зі спільнотою OpenWebUI", + "Share to CyberLover Community": "Поділитися зі спільнотою OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Дозволи на обмін", @@ -1756,7 +1756,7 @@ "You're now logged in.": "Ви увійшли в систему.", "Your Account": "", "Your account status is currently pending activation.": "Статус вашого облікового запису наразі очікує на активацію.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Весь ваш внесок піде безпосередньо розробнику плагіна; Open WebUI не бере жодних відсотків. Однак, обрана платформа фінансування може мати свої власні збори.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Весь ваш внесок піде безпосередньо розробнику плагіна; CyberLover не бере жодних відсотків. Однак, обрана платформа фінансування може мати свої власні збори.", "YouTube": "Youtube", "Youtube Language": "Мова YouTube", "Youtube Proxy URL": "URL проксі-сервера YouTube" diff --git a/src/lib/i18n/locales/ur-PK/translation.json b/src/lib/i18n/locales/ur-PK/translation.json index 952569cf18..6769d3bef7 100644 --- a/src/lib/i18n/locales/ur-PK/translation.json +++ b/src/lib/i18n/locales/ur-PK/translation.json @@ -337,7 +337,7 @@ "Copy Link": "لنک کاپی کریں", "Copy to clipboard": "کلپ بورڈ پر کاپی کریں", "Copying to clipboard was successful!": "کلپ بورڈ میں کاپی کامیاب ہوئی!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "", "Create": "", "Create a knowledge base": "", "Create a model": "ماڈل بنائیں", @@ -432,7 +432,7 @@ "Discover a model": "ایک ماڈل دریافت کریں", "Discover a prompt": "ایک اشارہ دریافت کریں", "Discover a tool": "ایک ٹول دریافت کریں", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use CyberLover and seek support from the community.": "", "Discover wonders": "", "Discover, download, and explore custom functions": "دریافت کریں، ڈاؤن لوڈ کریں، اور کسٹم فنکشنز کو دریافت کریں", "Discover, download, and explore custom prompts": "دریافت کریں، ڈاؤن لوڈ کریں، اور حسب ضرورت پرامپٹس کو دریافت کریں", @@ -958,7 +958,7 @@ "Lost": "گم شدہ", "Low": "", "LTR": "بائیں سے دائیں", - "Made by Open WebUI Community": "اوپن ویب یو آئی کمیونٹی کی جانب سے تیار کردہ", + "Made by CyberLover Community": "اوپن ویب یو آئی کمیونٹی کی جانب سے تیار کردہ", "Make password visible in the user interface": "", "Make sure to enclose them with": "انہیں کے ساتھ شامل کریں", "Make sure to export a workflow.json file as API format from ComfyUI.": "یقینی بنائیں کہ ComfyUI سے workflow.json فائل کو API فارمیٹ میں ایکسپورٹ کریں", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "بیک وقت زیادہ سے زیادہ 3 ماڈل ڈاؤن لوڈ کیے جا سکتے ہیں براہ کرم بعد میں دوبارہ کوشش کریں", "May": "مئی", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "یہاں LLMs کے ذریعہ قابل رسائی یادیں دکھائی جائیں گی", "Memory": "میموری", @@ -1139,10 +1139,10 @@ "Open new chat": "نیا چیٹ کھولیں", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "اوپن ویب یو آئی اندرونی طور پر فاسٹر وِسپر استعمال کرتا ہے", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "اوپن WebUI ورژن (v{{OPEN_WEBUI_VERSION}}) مطلوبہ ورژن (v{{REQUIRED_VERSION}}) سے کم ہے", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "اوپن ویب یو آئی اندرونی طور پر فاسٹر وِسپر استعمال کرتا ہے", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "اوپن WebUI ورژن (v{{OPEN_WEBUI_VERSION}}) مطلوبہ ورژن (v{{REQUIRED_VERSION}}) سے کم ہے", "OpenAI": "اوپن اے آئی", "OpenAI API": "اوپن اے آئی اے پی آئی\n", "OpenAI API Config": "اوپن اے آئی API ترتیب", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "صوت ریکارڈ کریں", - "Redirecting you to Open WebUI Community": "آپ کو اوپن ویب یو آئی کمیونٹی کی طرف ری ڈائریکٹ کیا جا رہا ہے", + "Redirecting you to CyberLover Community": "آپ کو اوپن ویب یو آئی کمیونٹی کی طرف ری ڈائریکٹ کیا جا رہا ہے", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "خود کو \"صارف\" کے طور پر حوالہ دیں (جیسے، \"صارف ہسپانوی سیکھ رہا ہے\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "ترتیبات کامیابی کے ساتھ محفوظ ہو گئیں!", "Share": "اشتراک کریں", "Share Chat": "چیٹ شیئر کریں", - "Share to Open WebUI Community": "اوپن ویب یوآئی کمیونٹی کے ساتھ شیئر کریں\n", + "Share to CyberLover Community": "اوپن ویب یوآئی کمیونٹی کے ساتھ شیئر کریں\n", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "", @@ -1754,7 +1754,7 @@ "You're now logged in.": "آپ اب لاگ ان ہو چکے ہیں", "Your Account": "", "Your account status is currently pending activation.": "آپ کے اکاؤنٹ کی حالت فی الحال فعال ہونے کے منتظر ہے", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "آپ کی پوری شراکت براہ راست پلگ ان ڈیولپر کو جائے گی؛ اوپن ویب یو آئی کوئی فیصد نہیں لیتی تاہم، منتخب کردہ فنڈنگ پلیٹ فارم کی اپنی فیس ہو سکتی ہیں", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "آپ کی پوری شراکت براہ راست پلگ ان ڈیولپر کو جائے گی؛ اوپن ویب یو آئی کوئی فیصد نہیں لیتی تاہم، منتخب کردہ فنڈنگ پلیٹ فارم کی اپنی فیس ہو سکتی ہیں", "YouTube": "یوٹیوب", "Youtube Language": "", "Youtube Proxy URL": "" diff --git a/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json b/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json index 43d564edd8..1ddb3cf913 100644 --- a/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json +++ b/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Ҳаволани нусхалаш", "Copy to clipboard": "Буферга нусхалаш", "Copying to clipboard was successful!": "Буферга нусхалаш муваффақиятли бўлди!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUI сўровларига рухсат бериш учун CORS провайдер томонидан тўғри созланган бўлиши керак.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CyberLover сўровларига рухсат бериш учун CORS провайдер томонидан тўғри созланган бўлиши керак.", "Create": "Яратиш", "Create a knowledge base": "Билимлар базасини яратинг", "Create a model": "Модел яратиш", @@ -432,7 +432,7 @@ "Discover a model": "Моделни кашф қилинг", "Discover a prompt": "Кўрсатмани кашф қилинг", "Discover a tool": "Асбобни кашф қилинг", - "Discover how to use Open WebUI and seek support from the community.": "Open WebUIдан қандай фойдаланишни билиб олинг ва ҳамжамиятдан ёрдам сўранг.", + "Discover how to use CyberLover and seek support from the community.": "Open WebUIдан қандай фойдаланишни билиб олинг ва ҳамжамиятдан ёрдам сўранг.", "Discover wonders": "Мўъжизаларни кашф этинг", "Discover, download, and explore custom functions": "Махсус функцияларни кашф этинг, юклаб олинг ва ўрганинг", "Discover, download, and explore custom prompts": "Махсус таклифларни кашф қилинг, юклаб олинг ва ўрганинг", @@ -958,7 +958,7 @@ "Lost": "Йўқотилган", "Low": "", "LTR": "ЛТР", - "Made by Open WebUI Community": "Опен WебУИ ҳамжамияти томонидан яратилган", + "Made by CyberLover Community": "Опен WебУИ ҳамжамияти томонидан яратилган", "Make password visible in the user interface": "", "Make sure to enclose them with": "Уларни ўраб қўйганингизга ишонч ҳосил қилинг", "Make sure to export a workflow.json file as API format from ComfyUI.": "Wоркфлоw.жсон файлини CомфюИъдан АПИ формати сифатида экспорт қилганингизга ишонч ҳосил қилинг.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Бир вақтнинг ўзида максимал 3 та моделни юклаб олиш мумкин. Кейинроқ қайта уриниб кўринг.", "May": "май", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "ЛЛМлар кириши мумкин бўлган хотиралар бу эрда кўрсатилади.", "Memory": "Хотира", @@ -1139,10 +1139,10 @@ "Open new chat": "Янги чат очинг", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Опен WебУИ ҳар қандай ОпенАПИ сервери томонидан тақдим этилган воситалардан фойдаланиши мумкин.", - "Open WebUI uses faster-whisper internally.": "Опен WебУИ ички тез шивирлашдан фойдаланади.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Опен WебУИ СпеэчТ5 ва CМУ Арcтиc динамик ўрнатишларидан фойдаланади.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Очиқ WебУИ версияси (в{{ОПЕН_WЕБУИ_ВЕРСИОН}}) талаб қилинган версиядан (в{{РЕҚУИРЕД_ВЕРСИОН}}) пастроқ", + "CyberLover can use tools provided by any OpenAPI server.": "Опен WебУИ ҳар қандай ОпенАПИ сервери томонидан тақдим этилган воситалардан фойдаланиши мумкин.", + "CyberLover uses faster-whisper internally.": "Опен WебУИ ички тез шивирлашдан фойдаланади.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Опен WебУИ СпеэчТ5 ва CМУ Арcтиc динамик ўрнатишларидан фойдаланади.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Очиқ WебУИ версияси (в{{ОПЕН_WЕБУИ_ВЕРСИОН}}) талаб қилинган версиядан (в{{РЕҚУИРЕД_ВЕРСИОН}}) пастроқ", "OpenAI": "OpenAI", "OpenAI API": "OpenAI АПИ", "OpenAI API Config": "OpenAI АПИ конфигурацияси", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Ёзиб олиш", "Record voice": "Овозни ёзиб олинг", - "Redirecting you to Open WebUI Community": "Сизни Опен WебУИ ҳамжамиятига йўналтирмоқда", + "Redirecting you to CyberLover Community": "Сизни Опен WебУИ ҳамжамиятига йўналтирмоқда", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Бемаъни нарсаларни яратиш эҳтимолини камайтиради. Юқори қиймат (масалан, 100) турли хил жавоблар беради, пастроқ қиймат (масалан, 10) эса консерватив бўлади.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Ўзингизни \"Фойдаланувчи\" деб кўрсатинг (масалан, \"Фойдаланувчи испан тилини ўрганмоқда\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Созламалар муваффақиятли сақланди!", "Share": "Улашиш", "Share Chat": "Чатни улашиш", - "Share to Open WebUI Community": "Опен WебУИ ҳамжамиятига улашинг", + "Share to CyberLover Community": "Опен WебУИ ҳамжамиятига улашинг", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Рухсатларни алмашиш", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Сиз энди тизимга кирдингиз.", "Your Account": "", "Your account status is currently pending activation.": "Ҳисобингиз ҳолати ҳозирда фаоллаштиришни кутмоқда.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Сизнинг барча ҳиссангиз тўғридан-тўғри плагин ишлаб чиқарувчисига ўтади; Open WebUI ҳеч қандай фоизни олмайди. Бироқ, танланган молиялаштириш платформаси ўз тўловларига эга бўлиши мумкин.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Сизнинг барча ҳиссангиз тўғридан-тўғри плагин ишлаб чиқарувчисига ўтади; CyberLover ҳеч қандай фоизни олмайди. Бироқ, танланган молиялаштириш платформаси ўз тўловларига эга бўлиши мумкин.", "YouTube": "Youtube", "Youtube Language": "Youtube тили", "Youtube Proxy URL": "Youtube прокси УРЛ" diff --git a/src/lib/i18n/locales/uz-Latn-Uz/translation.json b/src/lib/i18n/locales/uz-Latn-Uz/translation.json index 91263980ed..035ad55060 100644 --- a/src/lib/i18n/locales/uz-Latn-Uz/translation.json +++ b/src/lib/i18n/locales/uz-Latn-Uz/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Havolani nusxalash", "Copy to clipboard": "Buferga nusxalash", "Copying to clipboard was successful!": "Buferga nusxalash muvaffaqiyatli boʻldi!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "Open WebUI soʻrovlariga ruxsat berish uchun CORS provayder tomonidan toʻgʻri sozlangan boʻlishi kerak.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CyberLover soʻrovlariga ruxsat berish uchun CORS provayder tomonidan toʻgʻri sozlangan boʻlishi kerak.", "Create": "Yaratish", "Create a knowledge base": "Bilimlar bazasini yarating", "Create a model": "Model yaratish", @@ -432,7 +432,7 @@ "Discover a model": "Modelni kashf qiling", "Discover a prompt": "Ko'rsatmani kashf qiling", "Discover a tool": "Asbobni kashf qiling", - "Discover how to use Open WebUI and seek support from the community.": "Open WebUI-dan qanday foydalanishni bilib oling va hamjamiyatdan yordam so'rang.", + "Discover how to use CyberLover and seek support from the community.": "CyberLover-dan qanday foydalanishni bilib oling va hamjamiyatdan yordam so'rang.", "Discover wonders": "Mo''jizalarni kashf eting", "Discover, download, and explore custom functions": "Maxsus funktsiyalarni kashf eting, yuklab oling va o'rganing", "Discover, download, and explore custom prompts": "Maxsus takliflarni kashf qiling, yuklab oling va oʻrganing", @@ -958,7 +958,7 @@ "Lost": "Yo'qotilgan", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Open WebUI hamjamiyati tomonidan yaratilgan", + "Made by CyberLover Community": "CyberLover hamjamiyati tomonidan yaratilgan", "Make password visible in the user interface": "", "Make sure to enclose them with": "Ularni o'rab qo'yganingizga ishonch hosil qiling", "Make sure to export a workflow.json file as API format from ComfyUI.": "Workflow.json faylini ComfyUI’dan API formati sifatida eksport qilganingizga ishonch hosil qiling.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Bir vaqtning o'zida maksimal 3 ta modelni yuklab olish mumkin. Keyinroq qayta urinib ko‘ring.", "May": "may", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "LLMlar kirishi mumkin bo'lgan xotiralar bu erda ko'rsatiladi.", "Memory": "Xotira", @@ -1139,10 +1139,10 @@ "Open new chat": "Yangi chat oching", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI har qanday OpenAPI serveri tomonidan taqdim etilgan vositalardan foydalanishi mumkin.", - "Open WebUI uses faster-whisper internally.": "Open WebUI ichki tez shivirlashdan foydalanadi.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI SpeechT5 va CMU Arctic dinamik oʻrnatishlaridan foydalanadi.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Ochiq WebUI versiyasi (v{{OPEN_WEBUI_VERSION}}) talab qilingan versiyadan (v{{REQUIRED_VERSION}}) pastroq", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover har qanday OpenAPI serveri tomonidan taqdim etilgan vositalardan foydalanishi mumkin.", + "CyberLover uses faster-whisper internally.": "CyberLover ichki tez shivirlashdan foydalanadi.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover SpeechT5 va CMU Arctic dinamik oʻrnatishlaridan foydalanadi.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Ochiq WebUI versiyasi (v{{OPEN_WEBUI_VERSION}}) talab qilingan versiyadan (v{{REQUIRED_VERSION}}) pastroq", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguratsiyasi", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "Yozib olish", "Record voice": "Ovozni yozib oling", - "Redirecting you to Open WebUI Community": "Sizni Open WebUI hamjamiyatiga yoʻnaltirmoqda", + "Redirecting you to CyberLover Community": "Sizni CyberLover hamjamiyatiga yoʻnaltirmoqda", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Bema'ni narsalarni yaratish ehtimolini kamaytiradi. Yuqori qiymat (masalan, 100) turli xil javoblar beradi, pastroq qiymat (masalan, 10) esa konservativ bo'ladi.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "O'zingizni \"Foydalanuvchi\" deb ko'rsating (masalan, \"Foydalanuvchi ispan tilini o'rganmoqda\")", "Reference Chats": "", @@ -1434,7 +1434,7 @@ "Settings saved successfully!": "Sozlamalar muvaffaqiyatli saqlandi!", "Share": "Ulashish", "Share Chat": "Chatni ulashish", - "Share to Open WebUI Community": "Open WebUI hamjamiyatiga ulashing", + "Share to CyberLover Community": "CyberLover hamjamiyatiga ulashing", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Ruxsatlarni almashish", @@ -1754,7 +1754,7 @@ "You're now logged in.": "Siz endi tizimga kirdingiz.", "Your Account": "", "Your account status is currently pending activation.": "Hisobingiz holati hozirda faollashtirishni kutmoqda.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Sizning barcha hissangiz to'g'ridan-to'g'ri plagin ishlab chiqaruvchisiga o'tadi; Open WebUI hech qanday foizni olmaydi. Biroq, tanlangan moliyalashtirish platformasi o'z to'lovlariga ega bo'lishi mumkin.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Sizning barcha hissangiz to'g'ridan-to'g'ri plagin ishlab chiqaruvchisiga o'tadi; CyberLover hech qanday foizni olmaydi. Biroq, tanlangan moliyalashtirish platformasi o'z to'lovlariga ega bo'lishi mumkin.", "YouTube": "Youtube", "Youtube Language": "Youtube tili", "Youtube Proxy URL": "Youtube proksi URL" diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 1d5518d14d..0d0ac64465 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -337,7 +337,7 @@ "Copy Link": "Sao chép link", "Copy to clipboard": "Sao chép vào clipboard", "Copying to clipboard was successful!": "Sao chép vào clipboard thành công!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS phải được cấu hình đúng bởi nhà cung cấp để cho phép các yêu cầu từ Open WebUI.", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS phải được cấu hình đúng bởi nhà cung cấp để cho phép các yêu cầu từ CyberLover.", "Create": "Tạo", "Create a knowledge base": "Tạo cơ sở kiến thức", "Create a model": "Tạo model", @@ -432,7 +432,7 @@ "Discover a model": "Khám phá model", "Discover a prompt": "Khám phá thêm prompt mới", "Discover a tool": "Khám phá tool", - "Discover how to use Open WebUI and seek support from the community.": "Khám phá cách sử dụng Open WebUI và tìm kiếm sự hỗ trợ từ cộng đồng.", + "Discover how to use CyberLover and seek support from the community.": "Khám phá cách sử dụng CyberLover và tìm kiếm sự hỗ trợ từ cộng đồng.", "Discover wonders": "Khám phá những điều kỳ diệu", "Discover, download, and explore custom functions": "Tìm kiếm, tải về và khám phá thêm các function tùy chỉnh", "Discover, download, and explore custom prompts": "Tìm kiếm, tải về và khám phá thêm các prompt tùy chỉnh", @@ -958,7 +958,7 @@ "Lost": "Thua", "Low": "", "LTR": "LTR", - "Made by Open WebUI Community": "Được tạo bởi Cộng đồng OpenWebUI", + "Made by CyberLover Community": "Được tạo bởi Cộng đồng OpenWebUI", "Make password visible in the user interface": "", "Make sure to enclose them with": "Hãy chắc chắn bao quanh chúng bằng", "Make sure to export a workflow.json file as API format from ComfyUI.": "Đảm bảo xuất tệp Workflow.json đúng format API của ComfyUI.", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Tối đa 3 mô hình có thể được tải xuống cùng lúc. Vui lòng thử lại sau.", "May": "Tháng 5", "MCP": "", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "", "Medium": "", "Memories accessible by LLMs will be shown here.": "Memory có thể truy cập bởi LLMs sẽ hiển thị ở đây.", "Memory": "Memory", @@ -1139,10 +1139,10 @@ "Open new chat": "Mở nội dung chat mới", "Open Sidebar": "", "Open User Profile Menu": "", - "Open WebUI can use tools provided by any OpenAPI server.": "", - "Open WebUI uses faster-whisper internally.": "Open WebUI sử dụng faster-whisper bên trong.", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI sử dụng SpeechT5 và các embedding giọng nói CMU Arctic.", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Phiên bản Open WebUI (v{{OPEN_WEBUI_VERSION}}) hiện thấp hơn phiên bản bắt buộc (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover sử dụng faster-whisper bên trong.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover sử dụng SpeechT5 và các embedding giọng nói CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Phiên bản CyberLover (v{{OPEN_WEBUI_VERSION}}) hiện thấp hơn phiên bản bắt buộc (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Cấu hình API OpenAI", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "", "Record": "", "Record voice": "Ghi âm", - "Redirecting you to Open WebUI Community": "Đang chuyển hướng bạn đến Cộng đồng OpenWebUI", + "Redirecting you to CyberLover Community": "Đang chuyển hướng bạn đến Cộng đồng OpenWebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Giảm xác suất tạo ra nội dung vô nghĩa. Giá trị cao hơn (ví dụ: 100) sẽ cho câu trả lời đa dạng hơn, trong khi giá trị thấp hơn (ví dụ: 10) sẽ thận trọng hơn.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Hãy coi bản thân mình như \"Người dùng\" (ví dụ: \"Người dùng đang học Tiếng Tây Ban Nha\")", "Reference Chats": "", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "Cài đặt đã được lưu thành công!", "Share": "Chia sẻ", "Share Chat": "Chia sẻ Chat", - "Share to Open WebUI Community": "Chia sẻ đến Cộng đồng OpenWebUI", + "Share to CyberLover Community": "Chia sẻ đến Cộng đồng OpenWebUI", "Share your background and interests": "", "Shared with you": "", "Sharing Permissions": "Quyền Chia sẻ", @@ -1753,7 +1753,7 @@ "You're now logged in.": "Bạn đã đăng nhập.", "Your Account": "", "Your account status is currently pending activation.": "Tài khoản của bạn hiện đang ở trạng thái chờ kích hoạt.", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Toàn bộ đóng góp của bạn sẽ được chuyển trực tiếp đến nhà phát triển plugin; Open WebUI không lấy bất kỳ tỷ lệ phần trăm nào. Tuy nhiên, nền tảng được chọn tài trợ có thể có phí riêng.", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "Toàn bộ đóng góp của bạn sẽ được chuyển trực tiếp đến nhà phát triển plugin; CyberLover không lấy bất kỳ tỷ lệ phần trăm nào. Tuy nhiên, nền tảng được chọn tài trợ có thể có phí riêng.", "YouTube": "Youtube", "Youtube Language": "Ngôn ngữ Youtube", "Youtube Proxy URL": "URL Proxy Youtube" diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 3bd525469d..d3c78dcb80 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -337,7 +337,7 @@ "Copy Link": "复制链接", "Copy to clipboard": "复制到剪贴板", "Copying to clipboard was successful!": "成功复制到剪贴板!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "为允许 Open WebUI 发出的请求,提供商必须正确配置 CORS", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "为允许 CyberLover 发出的请求,提供商必须正确配置 CORS", "Create": "创建", "Create a knowledge base": "创建知识库", "Create a model": "创建模型", @@ -432,7 +432,7 @@ "Discover a model": "发现更多模型", "Discover a prompt": "发现更多提示词", "Discover a tool": "发现更多工具", - "Discover how to use Open WebUI and seek support from the community.": "了解如何使用 Open WebUI 并寻求社区支持", + "Discover how to use CyberLover and seek support from the community.": "了解如何使用 CyberLover 并寻求社区支持", "Discover wonders": "追寻奇迹", "Discover, download, and explore custom functions": "发现、下载并探索更多自定义函数", "Discover, download, and explore custom prompts": "发现、下载并探索更多自定义提示词", @@ -958,7 +958,7 @@ "Lost": "落败", "Low": "低", "LTR": "从左至右", - "Made by Open WebUI Community": "由 Open WebUI 社区开发", + "Made by CyberLover Community": "由 CyberLover 社区开发", "Make password visible in the user interface": "在用户界面中显示密码", "Make sure to enclose them with": "确保将它们包含在内", "Make sure to export a workflow.json file as API format from ComfyUI.": "确保从 ComfyUI 导出 API 格式的 workflow.json 文件。", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可同时下载 3 个模型,请稍后重试。", "May": "五月", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "MCP 支持仍处于实验阶段,因其规范变化频繁,可能会出现不兼容的情况。而 OpenAPI 规范由 Open WebUI 团队维护,在兼容性方面更加可靠。", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "MCP 支持仍处于实验阶段,因其规范变化频繁,可能会出现不兼容的情况。而 OpenAPI 规范由 CyberLover 团队维护,在兼容性方面更加可靠。", "Medium": "中", "Memories accessible by LLMs will be shown here.": "大语言模型可访问的记忆将在此显示", "Memory": "记忆", @@ -1139,10 +1139,10 @@ "Open new chat": "打开新对话", "Open Sidebar": "展开侧边栏", "Open User Profile Menu": "打开个人资料菜单", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI 可使用任何 OpenAPI 服务器提供的工具。", - "Open WebUI uses faster-whisper internally.": "Open WebUI 使用内置 faster-whisper", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI 使用 SpeechT5 和 CMU Arctic speaker embedding。", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "当前 Open WebUI 版本 (v{{OPEN_WEBUI_VERSION}}) 低于所需的版本 (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover 可使用任何 OpenAPI 服务器提供的工具。", + "CyberLover uses faster-whisper internally.": "CyberLover 使用内置 faster-whisper", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover 使用 SpeechT5 和 CMU Arctic speaker embedding。", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "当前 CyberLover 版本 (v{{OPEN_WEBUI_VERSION}}) 低于所需的版本 (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 配置", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "推理过程标签", "Record": "录制", "Record voice": "录音", - "Redirecting you to Open WebUI Community": "正在将您重定向到 Open WebUI 社区", + "Redirecting you to CyberLover Community": "正在将您重定向到 CyberLover 社区", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "降低生成无意义内容的概率。较高的值(如 100)将生成更多样化的回答,而较低的值(如 10)则更加保守。", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "使用\"User\" (用户) 来指代自己(例如:“User 正在学习西班牙语”)", "Reference Chats": "引用其他对话", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "设置已成功保存!", "Share": "分享", "Share Chat": "分享对话", - "Share to Open WebUI Community": "分享到 Open WebUI 社区", + "Share to CyberLover Community": "分享到 CyberLover 社区", "Share your background and interests": "分享您的经历和兴趣爱好", "Shared with you": "已共享给您", "Sharing Permissions": "共享权限", @@ -1753,7 +1753,7 @@ "You're now logged in.": "已登录。", "Your Account": "您的账号", "Your account status is currently pending activation.": "您的账号当前状态为待激活", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "您的全部捐款将直接给到插件开发者,Open WebUI 不会收取任何分成。但众筹平台可能会有服务费。", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "您的全部捐款将直接给到插件开发者,CyberLover 不会收取任何分成。但众筹平台可能会有服务费。", "YouTube": "YouTube", "Youtube Language": "Youtube 语言", "Youtube Proxy URL": "Youtube 代理 URL" diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 6a0c816031..6b5b79fdde 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -337,7 +337,7 @@ "Copy Link": "複製連結", "Copy to clipboard": "複製到剪貼簿", "Copying to clipboard was successful!": "成功複製到剪貼簿!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS 必須由供應商正確設定,以允許來自 Open WebUI 的請求。", + "CORS must be properly configured by the provider to allow requests from CyberLover.": "CORS 必須由供應商正確設定,以允許來自 CyberLover 的請求。", "Create": "建立", "Create a knowledge base": "建立知識", "Create a model": "建立模型", @@ -432,7 +432,7 @@ "Discover a model": "發掘模型", "Discover a prompt": "發掘提示詞", "Discover a tool": "發掘工具", - "Discover how to use Open WebUI and seek support from the community.": "探索如何使用 Open WebUI 並從社群尋求支援。", + "Discover how to use CyberLover and seek support from the community.": "探索如何使用 CyberLover 並從社群尋求支援。", "Discover wonders": "發掘奇蹟", "Discover, download, and explore custom functions": "發掘、下載及探索自訂函式", "Discover, download, and explore custom prompts": "發掘、下載及探索自訂提示詞", @@ -958,7 +958,7 @@ "Lost": "落敗", "Low": "低", "LTR": "從左到右", - "Made by Open WebUI Community": "由 Open WebUI 社群製作", + "Made by CyberLover Community": "由 CyberLover 社群製作", "Make password visible in the user interface": "在使用者介面中顯示密碼", "Make sure to enclose them with": "請務必將它們放在", "Make sure to export a workflow.json file as API format from ComfyUI.": "請確保從 ComfyUI 匯出 workflow.json 檔案為 API 格式。", @@ -981,7 +981,7 @@ "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多同時下載 3 個模型。請稍後再試。", "May": "5 月", "MCP": "MCP", - "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.": "MCP 支援為實驗性功能,其規範經常變更,可能導致不相容問題。OpenAPI 規範支援直接由 Open WebUI 團隊維護,是相容性更可靠的選擇。", + "MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the CyberLover team, making it the more reliable option for compatibility.": "MCP 支援為實驗性功能,其規範經常變更,可能導致不相容問題。OpenAPI 規範支援直接由 CyberLover 團隊維護,是相容性更可靠的選擇。", "Medium": "中", "Memories accessible by LLMs will be shown here.": "可被大型語言模型存取的記憶將顯示在此。", "Memory": "記憶", @@ -1139,10 +1139,10 @@ "Open new chat": "開啟新的對話", "Open Sidebar": "展開側邊欄", "Open User Profile Menu": "開啟個人資料選單", - "Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI 可使用任何 OpenAPI 伺服器提供的工具。", - "Open WebUI uses faster-whisper internally.": "Open WebUI 使用內部 faster-whisper。", - "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI 使用 SpeechT5 和 CMU Arctic 說話者嵌入。", - "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI 版本 (v{{OPEN_WEBUI_VERSION}}) 低於所需版本 (v{{REQUIRED_VERSION}})", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover 可使用任何 OpenAPI 伺服器提供的工具。", + "CyberLover uses faster-whisper internally.": "CyberLover 使用內部 faster-whisper。", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover 使用 SpeechT5 和 CMU Arctic 說話者嵌入。", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover 版本 (v{{OPEN_WEBUI_VERSION}}) 低於所需版本 (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 設定", @@ -1262,7 +1262,7 @@ "Reasoning Tags": "推理標籤", "Record": "錄製", "Record voice": "錄音", - "Redirecting you to Open WebUI Community": "正在將您重導向至 Open WebUI 社群", + "Redirecting you to CyberLover Community": "正在將您重導向至 CyberLover 社群", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "降低產生無意義內容的機率。較高的值(例如:100)會產生更多樣化的答案,而較低的值(例如:10)會更保守。", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "以「使用者」稱呼自己(例如:「使用者正在學習西班牙文」)", "Reference Chats": "引用其他對話", @@ -1433,7 +1433,7 @@ "Settings saved successfully!": "設定已成功儲存!", "Share": "分享", "Share Chat": "分享對話", - "Share to Open WebUI Community": "分享到 Open WebUI 社群", + "Share to CyberLover Community": "分享到 CyberLover 社群", "Share your background and interests": "分享您的背景與興趣", "Shared with you": "分享給您", "Sharing Permissions": "分享權限設定", @@ -1753,7 +1753,7 @@ "You're now logged in.": "您已登入。", "Your Account": "您的帳號", "Your account status is currently pending activation.": "您的帳號目前正在等待啟用。", - "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "您的所有貢獻將會直接交給外掛開發者;Open WebUI 不會收取任何百分比。然而,所選擇的贊助平臺可能有其自身的費用。", + "Your entire contribution will go directly to the plugin developer; CyberLover does not take any percentage. However, the chosen funding platform might have its own fees.": "您的所有貢獻將會直接交給外掛開發者;CyberLover 不會收取任何百分比。然而,所選擇的贊助平臺可能有其自身的費用。", "YouTube": "YouTube", "Youtube Language": "YouTube 語言", "Youtube Proxy URL": "YouTube 代理伺服器 URL" diff --git a/src/routes/(app)/admin/functions/create/+page.svelte b/src/routes/(app)/admin/functions/create/+page.svelte index bb13a759fd..cc9186b510 100644 --- a/src/routes/(app)/admin/functions/create/+page.svelte +++ b/src/routes/(app)/admin/functions/create/+page.svelte @@ -24,7 +24,7 @@ console.log('Version is lower than required'); toast.error( $i18n.t( - 'Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', + 'CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', { OPEN_WEBUI_VERSION: WEBUI_VERSION, REQUIRED_VERSION: manifest?.required_open_webui_version ?? '0.0.0' diff --git a/src/routes/(app)/admin/functions/edit/+page.svelte b/src/routes/(app)/admin/functions/edit/+page.svelte index 6a456b983e..064faf84c9 100644 --- a/src/routes/(app)/admin/functions/edit/+page.svelte +++ b/src/routes/(app)/admin/functions/edit/+page.svelte @@ -25,7 +25,7 @@ console.log('Version is lower than required'); toast.error( $i18n.t( - 'Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', + 'CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', { OPEN_WEBUI_VERSION: WEBUI_VERSION, REQUIRED_VERSION: manifest?.required_open_webui_version ?? '0.0.0' diff --git a/src/routes/(app)/workspace/tools/create/+page.svelte b/src/routes/(app)/workspace/tools/create/+page.svelte index c50ca44cce..e1b50d8e2f 100644 --- a/src/routes/(app)/workspace/tools/create/+page.svelte +++ b/src/routes/(app)/workspace/tools/create/+page.svelte @@ -22,7 +22,7 @@ console.log('Version is lower than required'); toast.error( $i18n.t( - 'Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', + 'CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', { OPEN_WEBUI_VERSION: WEBUI_VERSION, REQUIRED_VERSION: manifest?.required_open_webui_version ?? '0.0.0' diff --git a/src/routes/(app)/workspace/tools/edit/+page.svelte b/src/routes/(app)/workspace/tools/edit/+page.svelte index 8714a58c70..898fbb3110 100644 --- a/src/routes/(app)/workspace/tools/edit/+page.svelte +++ b/src/routes/(app)/workspace/tools/edit/+page.svelte @@ -22,7 +22,7 @@ console.log('Version is lower than required'); toast.error( $i18n.t( - 'Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', + 'CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', { OPEN_WEBUI_VERSION: WEBUI_VERSION, REQUIRED_VERSION: manifest?.required_open_webui_version ?? '0.0.0' diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0ee7a486e7..2e0d1afa44 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -292,7 +292,7 @@ if ($isLastActiveTab) { if ($settings?.notificationEnabled ?? false) { - new Notification(`${title} • Open WebUI`, { + new Notification(`${title} • CyberLover`, { body: content, icon: `${WEBUI_BASE_URL}/static/favicon.png` }); @@ -441,7 +441,7 @@ if (type === 'message') { if ($isLastActiveTab) { if ($settings?.notificationEnabled ?? false) { - new Notification(`${data?.user?.name} (#${event?.channel?.name}) • Open WebUI`, { + new Notification(`${data?.user?.name} (#${event?.channel?.name}) • CyberLover`, { body: data?.content, icon: data?.user?.profile_image_url ?? `${WEBUI_BASE_URL}/static/favicon.png` }); From b4853a06730f4fdf3e40e910375d1405ce887d07 Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Thu, 20 Nov 2025 09:40:41 +0800 Subject: [PATCH 06/12] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9icon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../open_webui/static/apple-touch-icon.png | Bin 1658 -> 4535 bytes backend/open_webui/static/favicon-96x96.png | Bin 3826 -> 2356 bytes backend/open_webui/static/favicon-dark.png | Bin 15919 -> 17021 bytes backend/open_webui/static/favicon.ico | Bin 15086 -> 4286 bytes backend/open_webui/static/favicon.png | Bin 10655 -> 14794 bytes backend/open_webui/static/favicon.svg | 43 ++++++++++++++++-- backend/open_webui/static/logo.png | Bin 5367 -> 14794 bytes backend/open_webui/static/splash-dark.png | Bin 5419 -> 17021 bytes backend/open_webui/static/splash.png | Bin 5239 -> 20355 bytes .../open_webui/static/swagger-ui/favicon.png | Bin 5043 -> 14794 bytes .../static/web-app-manifest-192x192.png | Bin 8349 -> 4964 bytes .../static/web-app-manifest-512x512.png | Bin 30105 -> 15325 bytes static/favicon.png | Bin 10655 -> 1750 bytes static/opensearch.xml | 4 +- static/static/apple-touch-icon.png | Bin 1658 -> 4535 bytes static/static/favicon-96x96.png | Bin 3826 -> 2356 bytes static/static/favicon-dark.png | Bin 15919 -> 17021 bytes static/static/favicon.ico | Bin 15086 -> 4286 bytes static/static/favicon.png | Bin 10655 -> 14794 bytes static/static/favicon.svg | 43 ++++++++++++++++-- static/static/logo.png | Bin 5367 -> 14794 bytes static/static/site.webmanifest | 4 +- static/static/splash-dark.png | Bin 5419 -> 17021 bytes static/static/splash.png | Bin 5239 -> 20355 bytes static/static/web-app-manifest-192x192.png | Bin 8349 -> 4964 bytes static/static/web-app-manifest-512x512.png | Bin 30105 -> 15325 bytes 26 files changed, 84 insertions(+), 10 deletions(-) diff --git a/backend/open_webui/static/apple-touch-icon.png b/backend/open_webui/static/apple-touch-icon.png index 9807373436540a5b80ae43960cd3cb86f31eec4f..a7d0d87b7bc64d6f584a3693cf517f880f13f7d3 100644 GIT binary patch literal 4535 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 literal 1658 zcmdUw`BTyf7{3)DuG%xh{j*b)#Bys{h*{3 zoi(2uv2RLp>8+I>z{<6I_(C)>BzR5!VI->|a=?ha@l5eLK5w)1mAnwWdNHehv=)g# zINB@3V)3kqEQZ8~fhA*OF@BnYow4AwhT+@Lds3;C)73ShENs#rFkn+X2Zn-P52;it zM>p5H^so$+OYJc=_Mv%Hpt3*S#Tkdc?)r+qS&F^@_a1C1uWhf)$jB(Ej7~_XzW&G4 z5wdREDI$e3qW&`b0I6JFTjrEV?p4RxxE%iXi5~7$J>8?*wr&{;g*GkX{CSd3!(BIN zbaUtr7A|cCkl3&O^%+*y*7?)wphRzIdQVX~dFPGlB%3U_6$I0Ga=cCqBW}LKXX+U8 z7Cjw{L$Ee7<2dhG8&~uhM+7lO>^Ug=;4BP@tYJEgc=h%PXJ8082|t!(9F? z|Nc?KDj$mKe1+;#=De~n$4*w~f&grr`3Z4xZ`Cj~@O-+(=^ui&NR=V;W^E0B+_lmn zjI8q+FoO5bMR%eIyvAQAY6)lD@}rdkxZ|p3OJTUS!V3N**z$bf%DEJaES02OPSo^@ zPoxhq7>sT19jN(qHx~sz_2Fs(vs(nQN`cSutF8hCN(4HUChW{kThv&Zn9G$zon;Xr z%Y>13zI)cWRNaYI(9@@Ec6Bj{xF>s{R-V~!@{s?-tdC^#GK5odyelJk*_DOz{=ILV z{WRQeyjOJc`h2QZuok4={P+xIkkit}l?@8=zU!3%*u-N*oA9_9Zb~U( zdBvMXGd|^M>F>=vot0WC^O4x9SsjYRgwTf94TF@4Vg7QF{P7@+z=f#qiV~GIt3?g! zgu^C#Gy4igor)qx4>YY0bxOv+NJFRAGTANjIX^`mHdxef?(+ZM_$x-D3er1qbdG9v eBmditQk#TZ2G9RxyG_Yg=gL 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 P00000NkvXXu0mjfpFMYl literal 3826 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 diff --git a/backend/open_webui/static/favicon-dark.png b/backend/open_webui/static/favicon-dark.png index 08627a23f7934510cfcc442d1a6ee943e748af7e..34c8f151e9d792cc1e8333be55a91f8c6f866702 100644 GIT binary patch literal 17021 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 diff --git a/backend/open_webui/static/favicon.ico b/backend/open_webui/static/favicon.ico index 14c5f9c6d437ed109a8579031cf181ee52bdf30e..397203d126e161409dbea6829d770645734b6fc7 100644 GIT binary patch literal 4286 zcmeH}OKePG6vw~zez!#;K~RaubR!{RLA)iMCQXoNbi>9%BG?O}5@f8}#3K`l5G;yV z2%BQzu^?%JL?o;THl&1+RT}px##&m-#y>!8dJlsvC-(? zT$^UhY-7wK7?Wv+We*5nm8u;WzYf@S#)$t1`75dYEo8|PN%ae<``H+Ow=v!hc4%4?-KIR zTp?CUwiDd9WaX?WdmG%$FQX$!QVr!_SAy>G|jKSBDCez$0lDM zkt+;;SDv-JGM~KfQJvg`it3XXoReUgdATT~%k~s~KUX}a()vOP*3gOKc*U&tHSfQ^ zm?!M5oNg4(my)Ej zhZx2BtD>m7rPx12dO69zO8ns{%5Fseh|az!OWJe9+6_^pJ<514M|wHQUqgN$Q4OO< zj_Lbn4p?8PU*R{3cb2@z)Spp&4Bj^U>}#>NwRntjh2fnk;UCS+T>i07wm(z=;SCj=sQ?{M7n=k!QosFYJBC%`vl)U({m8@p6ywm zVlCl=pua6P*x%MAPW87XQ#~!o!Or(xgUM9aKqe7OA8CrGjfrP!j=56w8=x`J8vp1s>)X~oT_<&_QdK!xU5otLr_R}HuYa#S4~~=J zWIEluI~wLW|LNp7|8yKDFE8{v$8m1!yBrPqKB=bTEYJx5&^W5%{Hoynw-6D@R5Vny zQ4CZpR~%H_RJ>GFgupZJ__jq)1fIL62RR_Pr{j(y~0tdLn zRSp`D`cAo}((h{CBXEIJmF+>}&~8#u-_>kPfm5$obxFU|N7DBHt^&8HeXD+>@BJQq zWU~H&+i!klpzj%1zvbAJEa%F4aP*AR`a46x_?<3NqD0;Kl0GwkDpMpRZ{NO^YuB#H z@#Dv3TNkY15_|%$_}4?%ur{4~H_1 z^b_?+L*~HD0TY^wUAlBhCQh6vZQ8VvtgI{{DT^94YDi8_jtm<%Otx;_DxW|54(&BK%Q;$DuUyIi?sJu@>?YS*qUwQAM!%@bu+xg4s=AI@+esEA7r zA3iLtTD9`&a0QKLp?d_XAx{&25| zNg(tQyWw^D_3PL1sF^aFIdi6~OB>j+V~5cVfIr;Roqt^QhyF0!|7B%maryt%t5-5) z$PibTay)qOU{L;tdtB{zK#pwU; z+_~fFKijr#E9cIgi>{zwDk>_ZYuBzWck+!NtOQX1;m#OPr7(W=@891ue)aC%+th`R zA3u8Z;eGY$RT(^Zu!lQyi(|+BTHXb~pRqTt`2&4D^|nQe79LJbnlv#!U9ez*Y~Q|J zii(P4{P^+GxpQYvUhzHi>u?ExKiu0W9)+hH?V0)8vSrJB=WjJ@)->Z3{bP7Lx6h+S zjS}?3rJDTV40qj>6Dtmjyh+I_JKeFpR+cCF2N)vlXZdsOTGjC^q% zc9-P6WtBb z{QNt~EXaiME9JNHE+-7jPv!htKUlxm(E82wqxGxxvqr@4+|$Za{96&kJuR&d%@z5I zBE_GI$BNGi7Qa06j&H>{+@SyBhE7gIzJ~%LUn&o{I1}D ziG2Fm)Yra3Ty)SSjUN)>q4DX1E-B~(6S1q&J%TQ2kd`@Dtcr)m>!Y}@fPYXzTBO-0 zmVNzBzKKUU1}&sX+P;3!_mnq&3NqiCoJU9-8xi$E-%(G37&kSUn1YSp!^=T`)5fT) z)v0T$9+zMPTW;IbXWD8^zdw8SOm5t`Av<^Olx^F#$;FEo(D{5i*@9Jo`FfPHLY+qdjF1Lh1K`=zC&5qAVE;memVo4t4LdQ6xw zAyNCZ1K)O6**<3ve!@N{d(MeQ)G{l8|-8smTJ;Fc|063suh z|5QZOKkfi^@7~?yi+Zqc-#&A$Ykff5#7AAabTMT_$XR{@)b_{yBW%}>_kWoIQJ19zA*#(Jm7mf3$rw2BmcT4RJ`>{3B#PrSq>4hm_4f zv5#n7=%Yx<{QD~d!vQ~}Wc?Awf%=e=^_S&9s2uG2lm3D}i+GE(MsS z+Xui&P^?~QD4lXmleDpcEo@?&eTp1Ko+6Qb3eDp$ibBOT1#23>bD`oFP0m;JTdv{{ z#Y+YLqs*+>^5YwEa>Enhx8i?__X@u{ps$VajX1=0)6i$qQ4PndZG_a7KX&zw19?r4x^NYKHj z*A&KAoMUtEi8;sl^XJW3e7A1h%>6O=a2JI6b4buZ_k(@GJrM3b*}DhKGscY@C;j^M zGx@2cj~coj{h>pLy86t;NV9L>zOnS-;Niby$r5v)yQHK<;Lkmk82k%W-}ukY`|%(5 zjoRy7%*Bfrn>APr|3#D^KBla=3u))q(aJAW2a>KoA^mFA->@{2YCq^(QD53RNx4wA bfagL*MEiZNd%>mb_i9fBsuCLy9d!Q>dBe1} diff --git a/backend/open_webui/static/favicon.png b/backend/open_webui/static/favicon.png index 63735ad4616fa452325af0fe351139dca01ca0ab..dae46dbd5f08fa0198433bfe49d76681defa124e 100644 GIT binary patch literal 14794 zcmeIZ_g7Qh^9GuP8W18KBLqcy6(JNMpa>#edM|=>kkFADA%cK_H0dC{7p3;RQh2$)$#pO!9s(OYzx2Pdx zSBB?zg2Tdd9^Q|7@+`m7fU`S)tu67Sb=1OWp=@(ov8>Yi4Uc;A|Nrm*Wr0a0<~I2o z3&SGyUK9aY(b|r-EAa1NR`4by&dqei@#5q+g~;{OB~98^S46E)R*&!+-VQH*Z(;kk zR3VM+H<}&8{wQR%64~Z-z2eA$DxIctZAHtyQ1N$)IhOE7g~y#%ST-z5|h1#UMThgMA{d%(K3AHrh9r~D{5 zjQVe)NH<5Y)r1l9*&+8Qa@v+L)9>AL4MdLoATw{Z21m0IyIF{v^SKkw5(S&PfT}fu z6;gq$F5a{jr1(9O4CCesGR@I2r~orboABn%=R?_ zbN%U!#%ux#lA6dm->%Xw2LTFr-$Hgbdexkbzqrw4j+Yr?qRH|L<%A3tItnoXBfW!} zIeXns8iCKiyY{C#=xpXSkoabAqIZDGf@Fbi{sCDhT_A6*7=prShL|5pdbX3$$dEO? z!9~84-638mh97TR75l={CSSCZF<$lv8q9{iTJN>fy>6U9PptH^z&BFwe2>-zC4O08 zTNrXco^G~=n@w%_XioZ?-ojDQl5Q&sa~WBT^~X8A%kr%3jz9JwRYsVM^v}HT@CkS* z++++sNkzB(TeT$LY}S2F=}o=8h0sW=vs=9+r)@8ItOwl#3+Ckg=(IR?0H zA9T=8fI}2r>xloFkfzv0oKJ?EPM~tjJ*}K-N zNoO%Ba^4|>E_)QJ>yhVpaU3pjm+G5{AmL24fyKjeH6aeO1nCjPcRrU5rxeSHq`h`7 zFiq!3NZ6}40|!)PGxp9+)%$@hB--5!f+#wl)S5x-pi*L78luBlEFsNNPOCegmD(V( z*GSjUL9np;;G4}>KQddW5%*>F2j(C(pmevBlU!taN&G68DLiO|pptYaSu{#^IB`TZ1Jk0RBQ zp!SKIcumi2QUwo~3U?Zt{#0jrJl*0GO>zpDChpF)>o zN_{rI^UIkhPLlF>I1;S2&SZyvH|X@@hnAIW1153}|MkknR`9RkzUDn`yKw2E_taZM z@Wbu?BLivuJ|-Fxq{!>(rWww}3IB?P*fF0Q;~YtISdl%q)ONUAS59~tDl1}elKe~z z7Y1G>o8r6>6(+o^d~PiJS19liG#`rAj+!}M4c`MVYG-+r-NXe;TItGMbd+Lsb$>J+ z`~b;3ZO>bLbAo(Rx}XK+`g$9D>hb1r=>aASDIBQhocCZ=D~KO-U6o^I0IV~tP%0@D zc(a~oxpm-6DfpZpH+{|egp7TG<#SXj1k1$N3(@Q<&@f2TJw7Sus0D|Amu4I)C& zZD7dT8|(AuJ(V+H+@&JvV65yq`I+o;L7rDe($_{8<0^lA!N0KAj~=4wo+4149gkPn zH+z5g$av`?O!6-M7^V#krk^`vJfx|Yde9Th65_?+&a~H+aeI?0&<5kc=jZaDZ|3lt zrYv@1u?(f}NXU!)xcK!AhfUY`Ic1<#X?K{*g!8To7t-R2;!$q3$L$KuKWQu>?~Bxr zWWb2bVBCr;>kbRPgOh*gu2dPOW^^YllTk6RAY5&<4`tAEo+5-RBFpj6Pam*^Qu!0_ zci+Tie{MPRC?ua1#a*-F8=;|hm_EsN5+-R3#+;^u5ew6siUdcpPF`Gm#Zn6+{V>YZ zWtn`oCsO_B^^a9k!%s+q-kvB&y(cEn{ov}55>gg8;ZHqRI?TAHBk1l2vsO=xO#l(m zjXW|fiP7ur;XTJ4l6B_)t>#ARNLS)%3p!AXW!_&SpGZ>^za{+46DRn*o|Ri=a`wW& z__|A1g-Pl2WN8D|P~9soY@$|(d9kSqPzSkeS<%O1&8*_?`xqO)sns7~MB0g89v}FS z+GQ6sl2&iBw8YfBa4?tmcASYOLO%MUo5OkAt__%nLR- zEFb+lrfD8SJ#yjjFzsurP|RTof$}eIDK|Lp^wB4KO!m->!WRErqlnX#mHmA(yq|Yf zkgkM=n4-cp^bd6M8}aVhlQSCnvD{P(t^cCIo2y|A2QcutaB;_p4|kCs#26k5Z7CaR zYjyB7A}#|loqwI;bU}9biS))p=n181(sGwLVWn-5Kfd$+L?Uy_?&SEC<_vX}Z8Xj3 z^%qY=gPD%oSQG?~HcO0Xi5Z}o(pE~L!23IY)o;0>+h-4;iXkQ@_4Ye|U79?u;z{%B z!7Sl}ci?`LO>oE-^JMC2*Qmioahe6kq`Po?X+-odL=J296*P{TXV>C1jpz~*cGq7h z(Dso*+x7+8tHxK8H)Qf@ZMbo-Fxl{LonHlJ;eS8O*F{IMF`ns*6YSdt`Ql$Q=H=Kz ztXc6-+6GGxAqvtwLGT=_VQ}?v985KGIMeYk5TVI%`xHP;e zwVT_;$gd)D?lw4LB)Km%E(~|>tLI)b)QdA?Jc#{NZ?xl8;gd~C^7y#9&SBdyAF02# z!?-Ngx@AJd&qpS=KPHzIU5(~9{q36Nq1Q{{QCD=IMKnKCw_@DzY*Q^KU8i?2Jj<7* z^Tu*?DLrv?-d^82@>XP>yBD361nt}^BKkiXVqS)i0rX@Qk&-&uesd>pFXhFX;KxJa zxCi}cKTs{K-eBk4jRy-Vdzh0i2L3*Z5)h05?Z%Rx{JV}`o421_XXjx5@Wwk+c;2x% z{DT9gihI;x_cQ8-;7e_YCEI4CexHvw>`_q}whTKh|I;V44C?Bj5orAp+s!;Hdz4XJ zt~@_vrnZVmd^m&8Jbqu*8kUgzGWhpS*+Uad(XCMvu2EE;3qk1Pvw2?J?h920JF9Pz z!DMV|uS%fJ)H@Qej+sa`Neau`WP{?-O22lpA1 zZr+sJPHw-t*LlQ9KZHUEMv3>74faaUYd#iVeLSP7#UJiR5`R zv038y>3f_v-|{Tv1>Ig7R(oYc5vYxo)tA0b-YPvQDm?5p0QHtR+J*6D1^&> z?z|si(6_2-sWVw%v3QBHG~)bxWTs(lh7J!-_XX$NfFPd5hxmos3XXJpTfce5-Kc*R zDI$pf01*?x@3V{`OkH@4h#>q68!o!@zA`A;{5&hADoMJV2)j%2bf5V2v%6cMW(-|W@ zSo#YJV=5G=TFfO(wTg&qy!)NrtGV)w!t~aWtzEfoG$_64)O+vw^43~9tDPQ&jmJN; z?$(HH9~e(EFIX(`c8@5<_aRh<`bzJeq%`8wWy^9Zkc`T!6eG;w_YuiY#w_Wsfnk`U z7#~FU<-5_!bYt$du?b=+~K)nMm^>eWqL_3m%Pt45*gR2gw^8Wr<`Z!lCd;Hy6~ zEo;|}?Rmp=QbciX29_OQ9q`cnidz*{S2a*{HRIg@MG?+ohrx*Gexos7l8j1iUB?(~ ztz)o?Y=@k)ne+(f%7Z*LnNJFM75MeGMpM0-C!=WcSZ^j!YOOO&Yb$$hrpn3QQqIZw zPJS-=5tu1RAsZ~;NT;uhlU%Np zgH}#+w@wpXJHuF(>=-@SL~Xw^=Dqn4FE-^x^AJToE2Ydqz_M#o1W$z3?N2I(+@jtKB}gm}VvG z@SS+Pt@7@(YoI0DHgi4yO1SAH9Ysi$#~XH^GC1G9>|0Rcv+KneakX_#;|8=$yD*nBr4O8D zcDKkC!__VJAV@e}zjPRfb)Ez}a-^!v9yeyP;yVc%Kxh(E)YCw=>IF!wio z$?(_@>!+leBj>x3Ietrkd;S?!H`C1lfpvGfdlMWF1V2svhQEzz4WpI4qnwd@>tjX` z-~ORA<<9h-0VGOR?xB-+woCYl$IaS5^`hF*Rqd|jSj`Ss;ga5>zAB5T9|^1XxSDL0 zJuBS9a$C%6%%z;*W1s%$S^J>XqeoEV?L)B+XwikDqSe*(fRo=cC2f!dw`)ZL1U%=Ko!3|GnYZ%`Mm|JE3X>AAc(}bbBy#x~l(ugE{B@S; zTVm#OqK9RNC0w<4%^aU|3H^IONM+}|1{fboLPwRx!4;YDoY#JSXQw76z!g>U8m5-o zAz>*63%`!huGrhK*sBlBTR~2g33YE^1RG>7Do_NA3q*9eMM!Yb*PJx+h%-g&3_(a+<*B6gH4bj%~N%R0p3p z)XYkTeQ-VOv6E|$u#)G$-Ijq)DJh%Qo1zgNlc_WwE9roJmuq)=?cGQr2?K7k{5Tn} zgDt6SI${&|Si~2&?7NxNV-E}Y5RTKr-#s?=67#$ox}|TRp^s3lPIK(YQ=x}81Grel z&Nrnx$C=lDE(uGWgw1>zZ~o8R2VEsU_;$bsl(^pOmVxQhtSXASn2{a;jO=HgIUa4; zxD>8~EQqszrU}zoN6M2OmJ=j#4#F4tUNl6?WyIqKA7}a=V(0pw_hFcon85YN6AFq! zv?DdYEqMPx#HtDQxKY$>flNW1wWp@@=(MxL0JgR^4gL7*C$6tVS{B>@i@QxP8C$P3 zZfoQ`ydYvs%{pV>0{u!uP4va;mW#OYFk7V2eXSv6*g3mTW`42PP%9)n;~aCOVyLkHKE2n%ZZM zRqyVdms;!nZhjNf#5GgSOiEOs4Y)4Kc`i&k*YohR#Z^0HLn7`u2`bv-zNAIBHRIN; zrE~1x;Or_}=RnPL{00y9j0#z4egPo-B#P;u1|D5PlD>`b|26>&RB%YrGO#LDa< zHG9#ZEjHpLqEkt~vx4EtGmFHxdz+1S3Sdv9`wAIMvXQb7S#YRW(QmL zo01365)VK=RT2X%EF9hJ%|i>jPsnG*{|gRtpa3xI4AzwSNj4q`ipmDuxJ`5GdQG3i zC&?la9zv}*R>^Io%R=Kd9jfo(gc3O7iHGkBqz);d0n?+wVM(yF1f1eo@*(Iz+ zG$A4UlWghPIg62M;B=MO72(eEgYg?|Uy~e_xkk6PFLaGvR8y^;9cp)w(@l29u5-LN z7<<9;bzX%wjLF9Y3tZKZQ*oS^lsw$-pB~JgtoAj#LCchDLe<>ZdxI~)!kU*5 z+UqW&o4ri5vI=&?oRHIuUe@~IA;@B`P~b#Pf^lhV4=5X3YWb%hSdb130kZ_w^Q>l@ zV@-VjX2y8*?QiFEE0(DV&PK+=y^2TSJM|2|UH%4mUH zdgzHMn3kju%cGoU7cPBfP=!T2NyydU+b1-JE>!=ViVx$mR{prwM={?7@1Iz_Rh-+SfkOQY))X`i}WFeEKh^SD-SHrPxO|o?j!>z(&dD9ZccrnB6vi)%=xzo zP(B|v3G%bT7jQQ2Q7`A`1EcRw zH)dxV#h$RWw}n+Q`tQ8UP2GT4&&81(bgD*P_Fn^*`t6XdeJuJ;MkJZrY`TPX|6|-j zyQ`a{R^m&}bvB|n6I$$|)jL;@l5hVe^L7s^Yh3bA|C2}!kCh-+9G?}^u)ox*iRH(C z@H`2s=wCaZnca|sEPVR~|9kU4owrUYuKR=zT;6L!=CKtb#w>BX`-Gwu5vbfFSW&69 zap;pXHXdyY>^)NSqHB%W>3bv>+sNL!u=kO}%~*QPJl2%};*b$;2PLZ*pjK)HzTS9+ z@OSpX?E+YVbNKt3F_PhbS*AY3uW;-14lY_>GZQ)%w2O(yr^o$nL1^=xuvgb?bEU!D z!~b&(?7zdFWDRp`Vyt5|{j~~t5uQ7+HNR9Ku$u!dgR1p< zue+Vw_X%pg4Ytm;OB@|SqMx~2AI!18%|IjoJ}u3^={X7+zPBHBsqk=v%o5JkW1Sz4-C`=m7yH+g2JW3*Vw@67R+J>$q? zMGl%%u_sJx`vhU=id%##>HQtG=r|?*7-*>MS+g+a>}4(MF|t$6hzLJtipy|*12!8MT+2gFgNHhH9p%hP^2JeN}_)0l8VKK(_wrliC*nhjdugsMNtifkQRc2Vc zuqQj3N_8Va1@&?JzbEJMz80%bqTk-!kRyerj%wXxIwroI^xiaoqMR;upC%CfH9VXF z?NPj=#mN*T@6>d9GzX5e_f<*0V?owxk_|$hO6%K{CPTY&ZJJMyj40;R{>1P&Fyp}^ z;f?>rv4>_F1Mtq3^c>5c7(2nHKIFdE40e@8DJzw}g?7CR%kfM}Ot|_W*?X?d1M|pd zW9m*pi_gt%;W`u~BYqqh@4z}+;qY4X{gAmZfS7-V6q29w%OYjJ$cis9ZE1~?l!cp1Ng?w0Z94EJ_B_?G&D`4tQB(X(r-o<77)_Onb!K+!Qy-6PVl-UQqINWbjZD=hbdJtOg| zQ{^SN$E$hRPZ58yhb9$^O%scoCAd-TIRKugcEoou^le>nN8C){@pGWfs%fbi#vR?- zceu<6OzFc5L%;N7g2rA?aH(%7W1PMzCZ0OVok~0mFU^Ib@`|`W2I^qhlc#`~{XL1n zj+!Y*OM>zE%!!}~QaxY4Ae$=fIzSO>SSc6RX9@ z{D-e@X{}2fxRD&^ZcuD#p4?*Q6)b6@^f3}fhLE*XsoEnB5nFjZhd@y4`aps zF{!v5vUT6b(odKogra=z=#h*>ftobaTC+SZED4yc*2T43pMlLOk}ObbE)={y-u&<` z4#A>uTbV;WwlIPU-0_h5pn(N#jFoM_#uNmh;9wV=y3YM6shGX+^sYGGKw^3Qt=2kp z7^Q~b?RGCSAC{|2eU$~*(icUBF>c)ngtb#Jf852_wTn1zld)28lszvS9E%ln= z{)?;pP9gNBKz@5314SieuD;cO&5{#LH7f{chihP>!HJ1iE5!)k7?z!Rwbo;*F%2;$ zj6@VL@yXkEBlp$BqkXtPO)5zglpUNu^70oW2qxL7Pr3>d{@`xidKv6lENc#B3Q|Uq zB$9NLvtA^EH0?en7f&}*{te4Gt)?ndi7iRHUBGYLPsRP|2X||{wth6E^F2n?{$nL! z0a#gc<~Y-4f0ESLH~U#niFu^HhC6fB4rF`=4+9~fo zhUtjm-QF)x6T4~rU$f{=?!!~v68wc6z(CE$<^A%X!_0AcX{tJ^+BoLgtmp?X{J1}* zNacR7Bz(oW7YELa^oAwbxgaygI|3vaV5S229hMNv{4!0rjvkU_yg7z_FBiwlu;PNu z7?)h{jeceN?p>4dzV>;4S7I+oJ>=e|Q zYO!6I0F^6dY{WaZ&p&3EYxC`E1))P0=2v4KN-^T%vB7g%lh~}69&wIzI*kgC`<;S` zk*0qeZ}aWHJ|^D97rweVvx!8`%EYr9O#W)K=jx`azAmxK8%q1g!9jU!GYf7Fm$U^3 z(4jg0(nr0KGW!li`&J9N%2Z@qY?}fqv4$^C+owxK zDK{Xur=iL{F7#npH)^8*JOK2)LFkZ(@e^3A*rTjFES)*8erJ2G&i39kgER2$Puy9G z45e+oeSZsOz~M<5hn8Ht<#d@V@K`-{(y&3uCO>ufQ`llMFixT%u{jKu2hPd5amX1w!tg#o>#BwR zku)M_EN@vdGzfOstBSrgf>k_zwvLSZ6~-oy23ydLhA!RkcUR9fm%&NkzP~4fZDcEf zTNVA?KRGCK!AuUbSgHh@8y5I+6Syp>ou-CoJV-6c(Q3FPbe7YkF_D7lnAG}e)#5)S z)J};9N4S>;EY-L2{>@S~o>!sT;9$ra@2eVet#$jS^rOZ9FeR-A2dy-Ui8EL!u~c~%y--JJLy^=YW;FoU zi8>}OwEw%IX5(d!`$~2iu+^Hp3?)kAl^C(Lw1Hkd6`8e{AiyA$pVn#pCbnJ~Url6^}07t*EU92S-pa74v^!tic1P2j+Lb~5x?zN1_D)(=r z-UM6=Mitr@UInYux@y7+bo!(I$<4Bn!Xjqf#+iM7DBgEhZ?R|HF_2MfuT8sg3JWH> zzstYTd>7yxaQL7C;b@JB+0F0heY;k-h}q<4bF7h1^OgfwzXcO{Y@bKW4&kthW^WH{ z#V0u^-~Zs?fVpP@X1ACV!2LzKC*3&o3>rDk*kt@@%*VI?#m5hZFyWW2eUIs&i)||w z7!mlx_5B*N#ScDzJVcCxXHVFE(AXLn=&SBbBXr7pe`_091+SmM`!p(^S7$SjLy*{` zs}`A=sbc@6%c9*J8;_GLUefdF)Pc3J<)4 zwvQkNn+>bRZj{;y>#AQ3rXV)TksKms;S4$hOtn<}--%ZynSGw?K)K>MO|l+>6(8f` z7_mDu^}2OtQ= z=ksL}kd~!E*#Z-A7~?gfkbvV@50>Gvq&`n_Sq z=2Z0KLa%VyquBvu0hR2HPr>?qFWLtEEre!o;+kS=KY0?~>bq19Q_Av9V7-kfj=rLB zKv$29Y?vSJJuwcdc<1)ZtvehHyC8k6fzyY~8Dtcv~lO&6gLE>~KILW647 zkyR18+E;_S?%$6QW%`IPr`zRO@c8^8s)aWe^?sGWS)3gm3t!9=IIMpr)coN|#H>=w z?2s?u(k%|C+3O^ah}rD4TZY39#7((BduQ-G`gvZ5>nTqkckOS>>Umn+@PUn3Uy41^^J5Lqno9w(f@d#mGu(R`3 zcjxG-G)@LX#rG=ola_(|?^E*kNJp)8NS2+LYP+47Je6!tr?6+sZh3B!#TD7UQUXel zjN{?nOSxt@s!ztFI#(_1KVxfqvLhv3ScggkR{z7&(BB+eoK?lOb2c?W!)lEOuPo%Q zH-n!Whq3X7zyn<)W@T6`{;2}XGSE?Ie~HL>EW_V@DLKzb|B5pJ>8>1L!y`0VZJQ@` zeR6>_J7N{SZiqPovSFz5kz3$1Sb`>?bQoJ}@uxq@Pmxr-PnZ16i^2<(TK5{P5>W=3e?_e%@X1BUC3*PiHlAuG-OkBU&9wb z?Uwo!IC9(LU(^CBt-APum-I%y@Jw+;o+bIjd~bCAkTKqL_t=MMIayt41>umRJ<_;( zvU@!8??(mOL(y%S!39_3ezpO*0hdvGHEgih-Iig#C~6nt282Xq@rha{Z3JMTnOKBE zywr)cOpa%_h&RNRxYu?5SD}vL3vE}k z?#a>r8xQPwfXRRJ&d`}Ie5=1--G^KhHvm2-uTHyhxD-^+g4T|ht#Wuw<5y5tnEPXM z=VNo4nG&w8SZ?>?XK%1K;1IVL^C`4%gcrCK)UNj;R3jRSqmCR`hE%7zW+XL{R>BHYkqBW1kb`GcdHuaD`X0K9;VV~C&n9c$2(lj zPFN2k8MS_Lt?h*FDn8u4o1ZsC-xjp+rf6z?z@vRx!M_?I>aH~c1iXrR=yMFp8-_L{4^)eoA$hb7B84Cd zcX4!rwZCb)u{L=;@h|S+WEgo5N-jwrARpR#3rtwVObeH7`uxh*nh2nJB{YEy;rY}2 zR72l4jw~m`S^0F+J&UP*K$QW%uTtm1nYDLZc4)e;Iui3TTz&s%p0dH4N67<2cfnyv z&UT$wTQzsUtB?B(nE3YY-m~gU@lKRXkxwJ8snl&|7R!G({qI^rviZ+Q)QctFS6$B^ znf!JwX5n=A*(i)>XncZMi6u9>a3$H-$;qy6%)T$l*4p+!`nkr@=+qKMp>`LYR2_Fv z4w^Gpw0o1DIxWEFXCvueIK<3dW6`9vxoW`C6{HSBQ0AoHXxy(+fH!0jF@f)FUr(CeR zq}0MI)lRUT?6HjW)!%Z86ixcS1&vhtR{(LwuaZisn(*VElK)n_obI{R`;~;`_UE;L zhU-A7jvl<2>-={qgzn^!Z~~x)mM_@a(F1}7MduwolFUm6VK=zJ1VQKzq;{jSrq*cW zApIA|0Z{Uct}A&ZS`!PkG8^tK!<+$_F`VKeS-}5Uy5H>g63*u7OvXHmesD}*kDr*8 zyGxqZ`cNs=F1cdr<&9gWc^Nd!rqN;19#-Q<7FL1;Ci%hz&ALq@ef~_qO`Hz6R`+j^5nABz_(synT?EdRX9UcCMh-%H5;^VTit8Xk(;A1`rT%>_Q~v2%9yVFR0o_Z^>olCXl{=0R+4Q z)|fQSczHtJdS?QAO2$`|@zoq0#`)Jzj>%N==pA=CBt(3o$;XdkZVmB{Cq9kF{|efp zFy>$Oz0Ba(4AortK?dtYgUr`O)=oks*FrZ(GfedVMwWm&C|V^xky~8?E4DAojPx|O zl|F8cixVWZ1~_RUAv}6_Z1kk3A-wASLWCdS;~2h;fL{n35hH`^VK>L(bu00`Z6}}0h%ra8DDdF?1Z!W?(Dz5S@CddE;U;2|kC80% zN=Kk3SD=#g$i)43Am7vJ9-jC}q;dmJ_!BnlU$H1Wnq-VLD!7>p@Nj)gPlSu}_@fEA1BDP{$Wg;)P`5Lx|jM-`f{nL34w(`%obq=(qFtw{fqgL031}Iz2cfxtM_wzYxQy(}Q*Tjj$2>zx>ASr1sKk@$W!X zJQ@nZ8nco|q;^)@nK!kwLuKB8w@S4;3X#kUi^D=M516gV|79xHUp=3^XHlQr&Y&Zn zsl=>r(CnlKV=6}ax*oLK2`hcH6TU1a^56tx7$-jg9~ZPyWsI}3&W9xk$K5WNv3!I3%q)LcWJ2G24|J8;a{oLjZD%YGA?DI zjJ9hanc_#5EFm#}MOO7wi9aq;&Sju~oGkT1V^;ohBi;jPWjW{~TOjjDBhVZ;`^kK! z0O2!3H}&&kYH&!EFfN;^i*k?URP*v#={<@%jnrYlZBa+0X8>MTN1lT`KLa~7$qXef zsz7UiOw&7Yw>gzqd}+~(%Omb`%*-3Yr)Ot@z`t*!B8@?|7=in<0#AD{Dfo4A@gGBD zbm0HldliA#779dP9`U)?N8eHEljIq6Xstq(fKMXx!bc#sUKGUgt@CRo2`&zC{RiHwC;JKqP!s2vW9qOiftGD;0J$<4NvE$?d8Uh*8(rnHhI*Co=M}pVi^Cp za{jz?GkOV-S-5+1;e93BhYfq9-Be=WPsu-rf#&MTAHM35o-)#Yz8tX%xF&F5M@2PL z#Gq)6!e%jU&lnT+FQYmA+gh3M4 zlk);GB1+QRUqzgH?&v&f=LK{`tP+Yd9l!o~;B)kQ)s+;;wV2w$mHcc3D;8h=T(%n{ zO4Ay?(+y%qJHxCYQ*9^Q>XWTdaDrB2c*sp4@p#YTQrzaD4G(q0IwJqwl57e$hxt?0 zj!ktJPunV|5A@$HsIWW4B+Q-lAQWg?D_8t^Mc+WJ;9S=!WTCUAaRaU-11<#pX-V86 zPZPj4oFtLlVE*D+|CLu*=_6ZyXs=FY+%C{u`P~OOBtL&!AMZvJcnW-Fh4pxpTnv(@ zXcg;qJ=}zB0jDdOM?3z1;oI&qME9KYs_Um~1ZrTcu}>Gpv-@r*^9V-MSbvu;Fu9De zZ+KibC`h}k(9nzdvveMHGO%Ln_*3gXe(xiTWFXDbf>Md!$mDu$VZy5pS68LDK;VBG z@$9(?lL8b3^|J)R-j#gujRuXC$!&X7^@azCp+jKZAj_m0r~fZ~J*Y2y!G%q`7=anp Sj{+ZOg49)YRBDxNBmN&WwepPs literal 10655 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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/open_webui/static/logo.png b/backend/open_webui/static/logo.png index a652a5fb87acf0f253a727d0ed9d672b9837a780..dae46dbd5f08fa0198433bfe49d76681defa124e 100644 GIT binary patch literal 14794 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 Sj{+ZOg49)YRBDxNBmN&WwepPs literal 5367 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 diff --git a/backend/open_webui/static/splash.png b/backend/open_webui/static/splash.png index 389196ca6a364b9e4b7daa0fc13be463b914b251..df36d442d8ad28d9fc138391b99bd885cc8659e8 100644 GIT binary patch literal 20355 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 GEB_DGHk4cd diff --git a/backend/open_webui/static/swagger-ui/favicon.png b/backend/open_webui/static/swagger-ui/favicon.png index e5b7c3ada7d093d237711560e03f6a841a4a41b2..dae46dbd5f08fa0198433bfe49d76681defa124e 100644 GIT binary patch literal 14794 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 Sj{+ZOg49)YRBDxNBmN&WwepPs literal 5043 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 literal 8349 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 literal 10655 zcmX9^cU%+C(>_25B@{)Pbd@4V5v8{PDgp|KG${d81cA^461oU{1r?R1v;+m|9TF*_ zibzcq>0K$I1tfvcdC%Yb$9Ilg_G7OnzUp>;zqrcAho|TK|xn)$5Sne|zqd3o3ORjr**BSj}{woxl zWZfFTK89gk?L{v<8Thbt-}6n2zfYy`Q7vt3sV@d#`qOf9oLTE*Ixd?gB8p2&8u#1_ zsQMj1+xrQ};dOmPbrtX@uFDy^Pd8^xfS66OD7@#h2Db6!9ltY)QRHc|h)JLT*(3=) z(bb!zoEv$%b($rRWF$DAZ2LS&N9T13oz7!{9lrHHGbTPxgqG5{9gk0GOy;t0Jh|MyAHqyF=y67Oef)@yeG{+A66jtx7yc989{PT%xvm{#@{p}+nCrL{0MMKb0m+h%TE$8Q_G(J_GohAIS7tG%8dw3Tg*<(mYuw@P` z9>NlxzI~)8bQvk$q}ZMcv);Tahw_jh78!H@9^AE#He>M4=)|pr^P00noBl}qOpN^R z22V5j(vvrfxu}9O^x3~_#Usuoa&2&UN9*)utQy#c7QpDU&pWXFebRc|um9y9SM-20 ziyzY?-uCQhZW6TT=cD}+uHVqX%e-?D-u>C)r%6zK&Fq}i-6yu(1yF&-rT*=@+nPiE|OROz8bYhLsRoK$?Nu;4tRe%RuwBoyq_r+ACnPJr=cQ7 ztWOt<|CAB$?8Z)?ZO`J*pAy0xLxe9cl~9KU#)uwiZFc| zIklHpAK^27c=fq@%5T?zqvVtI#mJ5}QW4RxuiM)^6*sq2_DPaxSj<9!ZsEkg=Sor( z)l}{1!ykN5j=u=V5;k+$$T; zidm=$b?e)uJyLWpr?g5dZ0=xe3d?$~es^MOwQ|d4cak_D$_|=VoN%`b*{;{tAA9A< zn#L3t5@lUT?4#{X_3*;sRg8WGjC(P}Vbw{zFS`Hs1HbV}1--wPBu3BU3w`+c`>7N6 zIMzHwinl)&5!vc2Q`rJAoXO^8e0O5u?}N$?lep$vkNXVj;6gkoy>XTxEA>jBf42=| z;Q;qq>*@ZC)jE&xT}u+f$ny}glxiD?Q17)hdxd8((L$~DvihxZ_j))P8Z`S}vVS{N zN2*Tht`f|S%g0l8& z1$5?dw5l&Zdedh~r}hE&Dh9^Pc-})X_j=L$+=~_ZiNew&7kTA&2WJaU?Vql@x8~-O zAS`XK6MsY&%lPxtUzZ-z3Gg(!my6cTa++a8ZA0U0C+&4uqBQzD8ur_s)Qg%o!o7Fd z3#Tr6AvD#ZBgEFnf8MuMfP9 zrI}%9h1rW?qQGR=sW3umE-g>{+mNhjRDTm<_}2`hCO1jjyBPB9>y0m606)KKPts81l=k`8MDVg8pO ztjR*P2jR94Ae;(w(tFPU9R^?1nEvRT3y0!U3fGD%GgSfz~Xy{q%N$Tf3E?Ark2h5XI`!n{X(G!LOq&x3h zUUpvB1h%`iS8Dh_{9r^ij%Z1ZBalGhJ@TDM6>N;#&APbeK;M^&kU|@su9GpHrKE4} zGSr>T=+ZtZx>kONuOE+e5(ekLS>`V3bQ%GQydlls-LW;V&J!ofpb898RqDdMLD&_0 zGPZz@sD`lH5dHYT3exZ*2(YVvowK^kcelvHo-8>|XX_tg*qg&;gm<$@9hElYZNihx_S9@A9lJ-+(kA z0|1m#Qv1lDiBG+~Dg^v|Z66s|C6p1@RUyut5njbqinRIL=;lDvgNp!0x3jz;ecYeW z6Ltn5R%G?dR3F$oU~o&dW(>g2L%ZMB*pGH(M9C2vh&qxf--g@89=idp$Bxsw+N>70 zF}SiFP%M|MYhx4@*1Okx9ZQ6xF7yl^+<-b<;%Ttf1iCD~{yLat_#ZC&aa)I!)(D~u zS9XhNxi%!bbpYBn%b6wMg~7Sinb8ArE=0%xw0ePD8U!%O*l(D{J*^4U zV$67^P9Ez~IuPX#^?-SE@u2Qyx4dlkz6Sxy^q}9_C5Y_pbmqm0l0A z{d`fmiPsjnB?EMYqj#}Y!X^4A$^gdHu;?czJXdvS?;3CNI$&NBW3$}FOl`@CPX?k; z{TZ;x(~v-7T4?BhplM=)2C)~y6(MCr;lHe{{|VI^>)OVW|FZ#ZE@G_q+hhWV)PW0u zl`=?pey-;p+AtWodV7p?4v5BiN^4 z0ap=9CH+`Pl}zp)>1x{glO(F!9HynNzPFG3HMh2Q8Qu~hY=A_e&VgsKP{mt&k9@}+ zHa;2RAt-m;RYd_JA0OXe+DxQVvvy`b8M=Ju^2x^h$&O=#GeMT&WO=aQnaDTU_&;%i zr1j5xMy+ojeR=#ea-X`qRmHX;{yj43kk;*apKnvasrm5S7Hr#8>FU8``*3h9SxkUK zo#@+C(jpWD*`PrHWgs8~vmDCmCm3LijIxC)PGI<#Cf22`5(@nV1G?(xCKpUy|wj>XVtksG~$gc+^XuY7au0(IwFu55lmPd5U2;d)KyAZsU@= zX0KQzjqIouvUM@yc+btHIeN|E5#&Nk@ZJMvX=4SGVND216ROHSYJq)8iFytFg!7qs z-H_j0atME1CqJ4io!;SB^+`vDIv6E)8L~Gz^6daCv^KU4F!?M|rVf|`*Mn62wZD&{ z58-Yj2Av!+IEwG2X*Btfn#zx|w@ZOoG2P2$Px+e+5ud#gBcLq~*hL(yt9s5eR0^$O z8{1~r0@Wslqo?I(H3eR4F65z1otAzzh>5<2QlQ%o`&?^^{1rh0uP5^L35vm)($+nj z0}L)oeF$B_a_`1W6)kAHY3!DKbotbPvA}G-X^vFJl`uy^cpXPfB@*k+L)yuy>G8Lc z=kNJs7q2&pGTX=U>|b*>5-}*2Q9yeLGtFJYRw6K-IEs~NrQ3V9C{*AOs@a@@gB(BF z{tcYgRLXvB>XhboH=p~Se!o$GudjXG6t0L^&_+Va1#z!!_tr2}Gx|)33;lZH<(>%} z@fNKY%23)>kso`8E2W3j`Avj>0#T`n3iWIGc7kYV!0L*xq9ATcwG5oZ-E~5FqT;0u zt~@8^P3v^F_f}^nQ$x@Jv#T;WPUdp2-mMP*%3#5|sSyq;mWpQj^wa9mc&S7B)VW-a zP-L~yM0hf5__>$HxW^t`2@{VBmzJYi;a--ve9n;U5rGA_+p~}h%Tel1bZedCVIEw0Io{JPU(P%+#y8_F;hROiRFNbOEjAr09Td@H+`YZg=Nn)pj6 zU_UK4XX%&$|0P(>I~#^`EPHVOhHK*49dWZ1%7fD=KmQrNLZabi!k-`&&4ZL00o~)> zPYXh$Q~1v9?C9xfN5mORDYSE}diLqAr<0#+Ib$8Y`fQneF@vt!!d^q zcYxMVcRu7xzwY(>TX6ypHMAs4HocaQw?~}PO`rze>yI%X`5vdOK^$KxQ z(Ufz3h~xNH2Bq%w*+#>o!`g*9K8y>DkNrFbz3ZPO-DBzMElq80eAwxC3OBdb$6XEE zLpCa_k|zd`EoJ(Ai>Zb9p=rht>n{cs-$v>j>PAG?#?;RpV8py!TyM_sk_ItP1?H7; z%sZ+N1p)@%9fZu8h`A zyF47U68+_0Vad@xH0(jx94Irb|EBeMuF4cUp9l}8cVsWk?--XH(XEsrvVY|%O_TcSa6xp{Ztt^y zPfHp{9EI$H7+e)4`d8etUK+z*o+`1aD4r=E!ew14l=x+}T$v`=NlS$V>pP5jJU!pH z;wKu2 z4T>tt zA;grY7cvizg1%`^uJq&`_=B6gg87T}9eHQ9tT4J%LsFV#N7KB7gj$pl?VCTQWPmL> zb+5DYMv7#|WbT#t^re>cr!UKqfnNqk9yr9pE6)@}1uzfzm3Jjup>kww&UE7CuaTv7vpAMEBN5;#!(G(YF~!_klE#E`U~6+MjgIW;Z5qzhxb#0;#I(5vU0Sa zsaPvHhOZ5KzVmh{qcR$la%SnqEMRR~UqWQFu)r*3gm65%ayh?l8r+GwTG^d&<&I1! z%IlRTu`zFjq9gajaYfgzyu2cs1*iElhFxA#u7-lKk(t;151w_LHaWvK#;G|95AHN} z7^mL|;Ugtu`17@jT+LHd!jx6^uF5R83Jj7ff2RI3C2$Q>mUl{zEtfiMEck9r2wP{& zi_+s2(K_J?XCA@$pUWCv%1#NpV*eY@=1h>MebjY`h@X?qpUScSXt}f?U1U5G6ff9J z(1mvLd`^Mkg5Wt88ZtYdI@oPws78uU^Pksu?;x1hFVq|M?& zSgcUqPBpJNY;JEQ#rLWjx{Vqa5^Izc*1h3jlnzea>nz40er)kSAMIU~r5c$(KQqix zmYpu=^fGnxS)Yc+WJ+|oz5+}qI@NcwWTh!g;t-n64^h2+3MH-+c`Rh$R$?b?{64xe zjspzVEK-OM!uGaY&6~sSrUic&REqKQO;)Drr*M%7XkE?~XJO%lt0DYnT}VT>SgeFs zWnISc&t0X}F7lwnCjFNt`Q&2C6<5 z_;QB+2t2UqIU4i7WN6-pgP8&zjV?th-;>Xia|s)#P;_xRhYydMOeLCbaj$H?3MVo0 zqdb4OC?RF$mWtOooYZYUpE9V>wckgPD_KzE&_bU*ICGedX3^Rb&nfdce-@%zsJ)%ohP2V#H{BbvvFOaUz>D zS{0z3{wF1-lMiW|GmJtOO#3I#^kj3( zc0sLU@) zy^0ER z&|m{U-`E&e8g%Y@3#}{v`zMj2*Vrx`$xeD_rhTedrmh!^u>U zQk?f(&TKLzHRRIZI@9mjgkCJEVb!n zwp}#x@QPZ_8T<8a7bV}4RGxh;Y2)%sX+hs_Vy7Yx)^W3H@TRACElac)*hb#P!RA`6 znHtJGW4jd)R0X<+d3yIo5lE=IFVC?ONlxwl+^{&;;1rEtZ;I2ExYbo=rh z>qTryTei0~30t08^mXn_N{62WHqs;oa?lihpkn-ppMy-z?dLi;d#y z$r}d&etv%SU+;djNKcuKDu1-I4LcD!E5-TY(l&>sfZF{cw(aB8W4tmHLTjj=0(YPn z7A2Jze;wF#&@3B;$;wUCPhe+Q@z%x)EuS0J1ss^oNL`ZSgN8;c88sOn$+ZAhn3UW zvqf<-+OF^2^2s_YtGxyfJ$A>WhSWOyb zdz@+)5jh8VpPeb84;T5@B||1li)*1fS;}rxHVch*iVGPK`6U+9lqSz0)Vj705ha!qrbs#cS3KZ?psb31IZa~vvtmA>@rcRB+UKF@`_qwT|ei0JfIC(|F+bRN{J_1-2Ed+clgBK&sfaO3icosS3QV50?6 ziEXh7-^9XH`E8<0f11pE3(9n`7wxzhHUcN`U8$S)$6_VUt3{>Wz_H>V2rRZ7?|c4| zksX4@KpV%OX~$?aa_t3|l;N8%+plAb+P*z5(UB&~s>ZD>p(@iS69_FPHgDbdKJK_O z#`spIZp%`G6io|l&W}iWBJc{U&$R9TRyeiDduZBV2LoO;m3;3~6n&#B3-+xNl=_Mk znf}Xp->~BA=y-;}nwy(jdfPN2Sn#*l{kW&re`X?2j$Gf5G~8@Xu-5ciA2wc?Q#k>( z`hwQfLLGgSniEMY4ZAvd6_&)4bsxFJ_G(QeP+TX?<4~h4Xmq@5Lg#O!U*moAR4=?+ z>no&a@bMI7C9cmOJ3BvrG3Vc@U4AdfNhyzVa0t53-V;LD>ABj*SgmQR5@BqRXH~c- zX6f_x$?<{Dbdx$u@takWz{-7rYWI+(I;|Tyxj8ch(A}o3^$l=u+42kF5NBvCDbl;FO-GJ}I*tQh%Ld!bi>tSqk{xu-XjY`SwtK38gD%b!*vzW)3VSjH%lYgl-tlTa^hWU@(NN3`B95gdER6bFw zZ#GW8Fj9uru<{maFbcxKVq?Y&r*g0?)S4*UESdE5gfjTpi*7z2Y<^o?{{sU-NCQ^0 zx7rx@*{%Q`vERKZDAe_BeW&(LY)a9#~1$(XzKZq~TyeEds+uLgud-T~m{6cLR z10K;>^0VHiyli6snvf$z!pUpl42vTFQfAgv#FRYG{=!K}>$&Q4ea7bh37Ij41ew&1 zxKswoybETfE~b9HTst)e8(CBiL)wlBcgq|7@AjL;|4$ETAMsY^mj0}<=qsM8-#i#( zZ(5*@u}SmSW~WykFjHxC_A4@7rK5Gf4}R1QpB&Mg^f(sO5{1`=NIQ9h@&8grrIPFf zgj>if2T$RI>g{QYYq%w8*%8K>7QbYfzPb#Dy55lgo_hpo7CCWq85ym8MI@xOK6FSi4PcbaGOZ+oTTB7To2I${z7wQ3Y$!)) zDJ&SUMev3aLt}HsWsYV5pgi>FQebESja9qO3Z-B;MhCkwuycCxi2@JGqnP@Hvgrl@ z;Ms_kiU*54!d+-a;EfJhwr_Bn9={;(1ymAO^^``|m5El%fbWxG+P_AlzFBb~@XdQ8 z=69%Ig8dHY?H7C}uK~_sJN|F_knx4YWEtV8DveuAB6!V)o`;kS42sKA^Nbwf;f;)y3$jBhW~z1)Hz!HHEM%0+N8 zZB>sE9UcREFLirUr-Uz~tLY)+OKq!q^Q!R0+BCQCKF zSG1%(SU?AKseaM>;%dN2H5$$2XjOzhChW@EKpXTozJ#y=hSx~e zp>9N;{WGD1bZTjQccaeJ<3n5nPk)}KQ)_C&jceYhoz%430EEm>m+hEdlA{eI^>0f6 z&L;`(b-@X&RP1{0Hb-kS&!ES~*&+W8HD9JE?F?lXxFs^jn4N0$uYKJA5aU)iQ&6i+ zHCb03w^jl6tsP46_a0#i76o%~w#Wn_Abbz;AMS>u&09H|X=vt<7amj!R@JB6ZGB27 z(J~MtwYm(fNgEvAF9M~glB2yY^8(fiN0AiQP8(A8XA50V5jZ1IsxZ(z z-RM^>Rwq>_>pTA&Tw0XyuX9DNf@h?n4?RHM`TSYY%nDR7jcXju(TbQ(ZJIe$v8tO) zSKknh;*rl#jO67hF4uQ@XV@{o0PrqWePItyEiNP8yO)o?#(BR;@Erp`ZY6HEyrf9qkD*^ zk9z0&zU9?v!ElUJ=r6j2om>{mAisL_w1>X7)Xe%_h_p#vu-U{f_YtDa(;p6ebg)ZX z>IXN#ns0NS_8ocIZLp&Hh+-=wbd^)Sh?rh0#kx>}4*?V{DO`)Hg+v>7v*g}@8L$xh zrqAGg#YLiz_%AvpH<9*3Yx*M&ePL(CMe)9ki^L5Oe(epyaQbj|ec@Sm5FR;C9J%<5 zjst|l5cJ^;AnXjns^^KSAiVPren=nA22SDw!noggU*u|A+y^2cBpaOq9qz@6ySW<} z?E`IDWbhM)(f);3*5enxj6GuwhwLSeOk+0;fXcEa^xjpMX2Iy`n8ozX+K{JwfY%Cc zM?FQDg_?7%<&BR)A%oX%N6O@00Flj;r0qF8L`kQN0JHKwpb>~tZ(=s|xK|W1<7YBg z?*f&VN4g`u+QWFM#+Z#4_!U64uS0}_uZnAyG6@}8qJ!b&5F%@_u$fOge5$y*Y)I?V zg<-f$vm1RlVI04r8^`k0Im`du(Jv9oQB7O~Z2i=sf{QIjp%c?n(`qy$M4ZUkS1F`O zPqDpS-8j=p2eKO83pN6&nVk>tlL3>_EYu6%&3y<_xN?qP7nA&y4}&h+kqw7yXU!h^ zRc9fQ7|Y>a2n@p+1^#uWR7xPYY9}GiPg?eU=*(YFIvwAB&lv*~{V%8mZ zf}IlRxJiue_M0J*+fM+Y;mf=(V32RTmQ32CY}k^y@g*45!JzX6>Uv3d_AR2JN2W!@A7k6q8uE;*bV0#z7WL2)n=) zc~BCTtF63`U7q33$xw|iTdh_+^n1tMinv{Ab1N2}i?xfKaHyc4E!GlRth+k8dVwgr zn4<37t;MUS!&ZEeXoz9i!BsH_IfsFVtgE9lB|WPkqeov*YvAHK z83>Aaq)iZ}-7At3FVWt1H%feni}yedt`eT_?Sj>iQbY$jZW}3`jr2dIF+7s%>sF<< zj1YO50b43j84U=j6K}jB(CcGr^tsmtK{AvPU~rX9Z-6!K_ZM-rw11%_bfE1G zNXohq>acow_8gA}&HuNM(9mVe`BFVhjY=B_L>cVPbV@_eGe%qLcL5z0!TT&rjyVuJ z%t1Ih`}ub+XARf<8Vpl&^ME!*#SCSz>pe90uxA)9KG5X5M^qTlM52j#B5$&<)_bX z^RV9<o~ebxwbuQsSZ{9Gb3 zICOH%GHwTCN`y&%y#!LgWY%lL-~@y10gsx+{j-Sxn$c1pb5Cwavn=GY%%)dC=IsJI z`s^RJcA*55))7w;o083tR_1>cJNDgVTgy$e3EU+!>uL13A>DxcKQ5l!K6Lv@7~8Iq z;zi1rbF+MQq)IX390!62J#vj#9PLvw&-qYfrd@MJC6*(Yi&UALZ`@om+vqVZK%Mx| zb^ePkE-9oxR@Lh!#=tD?S#xMu19fM#BSK_`!+TF?M&H5L!0eQU&@Jv=$4ayDRlkE> z_vNbV6x-)W+OB#z(=J~w`+*eE1vV}dc_z_!qul6VxoiE;qh- -Open WebUI -Search Open WebUI +CyberLover +Search CyberLover UTF-8 http://localhost:5137/favicon.png diff --git a/static/static/apple-touch-icon.png b/static/static/apple-touch-icon.png index 9807373436540a5b80ae43960cd3cb86f31eec4f..a7d0d87b7bc64d6f584a3693cf517f880f13f7d3 100644 GIT binary patch literal 4535 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 literal 1658 zcmdUw`BTyf7{3)DuG%xh{j*b)#Bys{h*{3 zoi(2uv2RLp>8+I>z{<6I_(C)>BzR5!VI->|a=?ha@l5eLK5w)1mAnwWdNHehv=)g# zINB@3V)3kqEQZ8~fhA*OF@BnYow4AwhT+@Lds3;C)73ShENs#rFkn+X2Zn-P52;it zM>p5H^so$+OYJc=_Mv%Hpt3*S#Tkdc?)r+qS&F^@_a1C1uWhf)$jB(Ej7~_XzW&G4 z5wdREDI$e3qW&`b0I6JFTjrEV?p4RxxE%iXi5~7$J>8?*wr&{;g*GkX{CSd3!(BIN zbaUtr7A|cCkl3&O^%+*y*7?)wphRzIdQVX~dFPGlB%3U_6$I0Ga=cCqBW}LKXX+U8 z7Cjw{L$Ee7<2dhG8&~uhM+7lO>^Ug=;4BP@tYJEgc=h%PXJ8082|t!(9F? z|Nc?KDj$mKe1+;#=De~n$4*w~f&grr`3Z4xZ`Cj~@O-+(=^ui&NR=V;W^E0B+_lmn zjI8q+FoO5bMR%eIyvAQAY6)lD@}rdkxZ|p3OJTUS!V3N**z$bf%DEJaES02OPSo^@ zPoxhq7>sT19jN(qHx~sz_2Fs(vs(nQN`cSutF8hCN(4HUChW{kThv&Zn9G$zon;Xr z%Y>13zI)cWRNaYI(9@@Ec6Bj{xF>s{R-V~!@{s?-tdC^#GK5odyelJk*_DOz{=ILV z{WRQeyjOJc`h2QZuok4={P+xIkkit}l?@8=zU!3%*u-N*oA9_9Zb~U( zdBvMXGd|^M>F>=vot0WC^O4x9SsjYRgwTf94TF@4Vg7QF{P7@+z=f#qiV~GIt3?g! zgu^C#Gy4igor)qx4>YY0bxOv+NJFRAGTANjIX^`mHdxef?(+ZM_$x-D3er1qbdG9v eBmditQk#TZ2G9RxyG_Yg=gL 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 P00000NkvXXu0mjfpFMYl literal 3826 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 diff --git a/static/static/favicon-dark.png b/static/static/favicon-dark.png index 08627a23f7934510cfcc442d1a6ee943e748af7e..34c8f151e9d792cc1e8333be55a91f8c6f866702 100644 GIT binary patch literal 17021 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 diff --git a/static/static/favicon.ico b/static/static/favicon.ico index 14c5f9c6d437ed109a8579031cf181ee52bdf30e..397203d126e161409dbea6829d770645734b6fc7 100644 GIT binary patch literal 4286 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 bfagL*MEiZNd%>mb_i9fBsuCLy9d!Q>dBe1} diff --git a/static/static/favicon.png b/static/static/favicon.png index 63735ad4616fa452325af0fe351139dca01ca0ab..dae46dbd5f08fa0198433bfe49d76681defa124e 100644 GIT binary patch literal 14794 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 Sj{+ZOg49)YRBDxNBmN&WwepPs literal 10655 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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/static/logo.png b/static/static/logo.png index a652a5fb87acf0f253a727d0ed9d672b9837a780..dae46dbd5f08fa0198433bfe49d76681defa124e 100644 GIT binary patch literal 14794 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 Sj{+ZOg49)YRBDxNBmN&WwepPs literal 5367 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 diff --git a/static/static/splash.png b/static/static/splash.png index 389196ca6a364b9e4b7daa0fc13be463b914b251..df36d442d8ad28d9fc138391b99bd885cc8659e8 100644 GIT binary patch literal 20355 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 GEB_DGHk4cd diff --git a/static/static/web-app-manifest-192x192.png b/static/static/web-app-manifest-192x192.png index fbd2eab6e2b8bcd7c510fca905f432c93a4f2ebc..690e96dd782f22358c0b794eb58dcf8c27068f24 100644 GIT binary patch literal 4964 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 literal 8349 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 Date: Sat, 22 Nov 2025 15:14:58 +0800 Subject: [PATCH 07/12] =?UTF-8?q?feat:=20=E8=81=8A=E5=A4=A9=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=8A=9F=E8=83=BD=E6=94=AF=E6=8C=81=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 7 +- CLAUDE.md | 2 +- backend/open_webui/favicon.png | Bin 0 -> 14794 bytes backend/open_webui/main.py | 5 + backend/open_webui/static/site.webmanifest | 4 +- package-lock.json | 714 +++++------------- package.json | 3 + .../chat/Settings/DataControls.svelte | 36 +- src/lib/components/common/Folder.svelte | 37 +- src/lib/components/layout/Sidebar.svelte | 36 +- src/lib/utils/chatImport.ts | 61 ++ 11 files changed, 308 insertions(+), 597 deletions(-) create mode 100644 backend/open_webui/favicon.png create mode 100644 src/lib/utils/chatImport.ts diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 4f9852e81a..f926e39777 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -6,7 +6,12 @@ "Bash(git rev-parse:*)", "Bash(chmod:*)", "Bash(test:*)", - "Bash(lsof:*)" + "Bash(lsof:*)", + "WebSearch", + "Bash(npm install:*)", + "Bash(ls:*)", + "Bash(npm run build:*)", + "Bash(cat:*)" ], "deny": [], "ask": [] diff --git a/CLAUDE.md b/CLAUDE.md index 4bde32da28..52300bf563 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -Open WebUI 是一个功能丰富的自托管 AI 平台,支持完全离线运行。核心技术栈: +CyberLover 是一个功能丰富的自托管 AI 平台,支持完全离线运行。核心技术栈: - **前端**: SvelteKit 4 + TypeScript + Vite 5 + Tailwind CSS 4 - **后端**: Python 3.11 + FastAPI + SQLAlchemy - **部署**: Docker 多阶段构建,生产环境前后端同容器运行 diff --git a/backend/open_webui/favicon.png b/backend/open_webui/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..dae46dbd5f08fa0198433bfe49d76681defa124e GIT binary patch literal 14794 zcmeIZ_g7Qh^9GuP8W18KBLqcy6(JNMpa>#edM|=>kkFADA%cK_H0dC{7p3;RQh2$)$#pO!9s(OYzx2Pdx zSBB?zg2Tdd9^Q|7@+`m7fU`S)tu67Sb=1OWp=@(ov8>Yi4Uc;A|Nrm*Wr0a0<~I2o z3&SGyUK9aY(b|r-EAa1NR`4by&dqei@#5q+g~;{OB~98^S46E)R*&!+-VQH*Z(;kk zR3VM+H<}&8{wQR%64~Z-z2eA$DxIctZAHtyQ1N$)IhOE7g~y#%ST-z5|h1#UMThgMA{d%(K3AHrh9r~D{5 zjQVe)NH<5Y)r1l9*&+8Qa@v+L)9>AL4MdLoATw{Z21m0IyIF{v^SKkw5(S&PfT}fu z6;gq$F5a{jr1(9O4CCesGR@I2r~orboABn%=R?_ zbN%U!#%ux#lA6dm->%Xw2LTFr-$Hgbdexkbzqrw4j+Yr?qRH|L<%A3tItnoXBfW!} zIeXns8iCKiyY{C#=xpXSkoabAqIZDGf@Fbi{sCDhT_A6*7=prShL|5pdbX3$$dEO? z!9~84-638mh97TR75l={CSSCZF<$lv8q9{iTJN>fy>6U9PptH^z&BFwe2>-zC4O08 zTNrXco^G~=n@w%_XioZ?-ojDQl5Q&sa~WBT^~X8A%kr%3jz9JwRYsVM^v}HT@CkS* z++++sNkzB(TeT$LY}S2F=}o=8h0sW=vs=9+r)@8ItOwl#3+Ckg=(IR?0H zA9T=8fI}2r>xloFkfzv0oKJ?EPM~tjJ*}K-N zNoO%Ba^4|>E_)QJ>yhVpaU3pjm+G5{AmL24fyKjeH6aeO1nCjPcRrU5rxeSHq`h`7 zFiq!3NZ6}40|!)PGxp9+)%$@hB--5!f+#wl)S5x-pi*L78luBlEFsNNPOCegmD(V( z*GSjUL9np;;G4}>KQddW5%*>F2j(C(pmevBlU!taN&G68DLiO|pptYaSu{#^IB`TZ1Jk0RBQ zp!SKIcumi2QUwo~3U?Zt{#0jrJl*0GO>zpDChpF)>o zN_{rI^UIkhPLlF>I1;S2&SZyvH|X@@hnAIW1153}|MkknR`9RkzUDn`yKw2E_taZM z@Wbu?BLivuJ|-Fxq{!>(rWww}3IB?P*fF0Q;~YtISdl%q)ONUAS59~tDl1}elKe~z z7Y1G>o8r6>6(+o^d~PiJS19liG#`rAj+!}M4c`MVYG-+r-NXe;TItGMbd+Lsb$>J+ z`~b;3ZO>bLbAo(Rx}XK+`g$9D>hb1r=>aASDIBQhocCZ=D~KO-U6o^I0IV~tP%0@D zc(a~oxpm-6DfpZpH+{|egp7TG<#SXj1k1$N3(@Q<&@f2TJw7Sus0D|Amu4I)C& zZD7dT8|(AuJ(V+H+@&JvV65yq`I+o;L7rDe($_{8<0^lA!N0KAj~=4wo+4149gkPn zH+z5g$av`?O!6-M7^V#krk^`vJfx|Yde9Th65_?+&a~H+aeI?0&<5kc=jZaDZ|3lt zrYv@1u?(f}NXU!)xcK!AhfUY`Ic1<#X?K{*g!8To7t-R2;!$q3$L$KuKWQu>?~Bxr zWWb2bVBCr;>kbRPgOh*gu2dPOW^^YllTk6RAY5&<4`tAEo+5-RBFpj6Pam*^Qu!0_ zci+Tie{MPRC?ua1#a*-F8=;|hm_EsN5+-R3#+;^u5ew6siUdcpPF`Gm#Zn6+{V>YZ zWtn`oCsO_B^^a9k!%s+q-kvB&y(cEn{ov}55>gg8;ZHqRI?TAHBk1l2vsO=xO#l(m zjXW|fiP7ur;XTJ4l6B_)t>#ARNLS)%3p!AXW!_&SpGZ>^za{+46DRn*o|Ri=a`wW& z__|A1g-Pl2WN8D|P~9soY@$|(d9kSqPzSkeS<%O1&8*_?`xqO)sns7~MB0g89v}FS z+GQ6sl2&iBw8YfBa4?tmcASYOLO%MUo5OkAt__%nLR- zEFb+lrfD8SJ#yjjFzsurP|RTof$}eIDK|Lp^wB4KO!m->!WRErqlnX#mHmA(yq|Yf zkgkM=n4-cp^bd6M8}aVhlQSCnvD{P(t^cCIo2y|A2QcutaB;_p4|kCs#26k5Z7CaR zYjyB7A}#|loqwI;bU}9biS))p=n181(sGwLVWn-5Kfd$+L?Uy_?&SEC<_vX}Z8Xj3 z^%qY=gPD%oSQG?~HcO0Xi5Z}o(pE~L!23IY)o;0>+h-4;iXkQ@_4Ye|U79?u;z{%B z!7Sl}ci?`LO>oE-^JMC2*Qmioahe6kq`Po?X+-odL=J296*P{TXV>C1jpz~*cGq7h z(Dso*+x7+8tHxK8H)Qf@ZMbo-Fxl{LonHlJ;eS8O*F{IMF`ns*6YSdt`Ql$Q=H=Kz ztXc6-+6GGxAqvtwLGT=_VQ}?v985KGIMeYk5TVI%`xHP;e zwVT_;$gd)D?lw4LB)Km%E(~|>tLI)b)QdA?Jc#{NZ?xl8;gd~C^7y#9&SBdyAF02# z!?-Ngx@AJd&qpS=KPHzIU5(~9{q36Nq1Q{{QCD=IMKnKCw_@DzY*Q^KU8i?2Jj<7* z^Tu*?DLrv?-d^82@>XP>yBD361nt}^BKkiXVqS)i0rX@Qk&-&uesd>pFXhFX;KxJa zxCi}cKTs{K-eBk4jRy-Vdzh0i2L3*Z5)h05?Z%Rx{JV}`o421_XXjx5@Wwk+c;2x% z{DT9gihI;x_cQ8-;7e_YCEI4CexHvw>`_q}whTKh|I;V44C?Bj5orAp+s!;Hdz4XJ zt~@_vrnZVmd^m&8Jbqu*8kUgzGWhpS*+Uad(XCMvu2EE;3qk1Pvw2?J?h920JF9Pz z!DMV|uS%fJ)H@Qej+sa`Neau`WP{?-O22lpA1 zZr+sJPHw-t*LlQ9KZHUEMv3>74faaUYd#iVeLSP7#UJiR5`R zv038y>3f_v-|{Tv1>Ig7R(oYc5vYxo)tA0b-YPvQDm?5p0QHtR+J*6D1^&> z?z|si(6_2-sWVw%v3QBHG~)bxWTs(lh7J!-_XX$NfFPd5hxmos3XXJpTfce5-Kc*R zDI$pf01*?x@3V{`OkH@4h#>q68!o!@zA`A;{5&hADoMJV2)j%2bf5V2v%6cMW(-|W@ zSo#YJV=5G=TFfO(wTg&qy!)NrtGV)w!t~aWtzEfoG$_64)O+vw^43~9tDPQ&jmJN; z?$(HH9~e(EFIX(`c8@5<_aRh<`bzJeq%`8wWy^9Zkc`T!6eG;w_YuiY#w_Wsfnk`U z7#~FU<-5_!bYt$du?b=+~K)nMm^>eWqL_3m%Pt45*gR2gw^8Wr<`Z!lCd;Hy6~ zEo;|}?Rmp=QbciX29_OQ9q`cnidz*{S2a*{HRIg@MG?+ohrx*Gexos7l8j1iUB?(~ ztz)o?Y=@k)ne+(f%7Z*LnNJFM75MeGMpM0-C!=WcSZ^j!YOOO&Yb$$hrpn3QQqIZw zPJS-=5tu1RAsZ~;NT;uhlU%Np zgH}#+w@wpXJHuF(>=-@SL~Xw^=Dqn4FE-^x^AJToE2Ydqz_M#o1W$z3?N2I(+@jtKB}gm}VvG z@SS+Pt@7@(YoI0DHgi4yO1SAH9Ysi$#~XH^GC1G9>|0Rcv+KneakX_#;|8=$yD*nBr4O8D zcDKkC!__VJAV@e}zjPRfb)Ez}a-^!v9yeyP;yVc%Kxh(E)YCw=>IF!wio z$?(_@>!+leBj>x3Ietrkd;S?!H`C1lfpvGfdlMWF1V2svhQEzz4WpI4qnwd@>tjX` z-~ORA<<9h-0VGOR?xB-+woCYl$IaS5^`hF*Rqd|jSj`Ss;ga5>zAB5T9|^1XxSDL0 zJuBS9a$C%6%%z;*W1s%$S^J>XqeoEV?L)B+XwikDqSe*(fRo=cC2f!dw`)ZL1U%=Ko!3|GnYZ%`Mm|JE3X>AAc(}bbBy#x~l(ugE{B@S; zTVm#OqK9RNC0w<4%^aU|3H^IONM+}|1{fboLPwRx!4;YDoY#JSXQw76z!g>U8m5-o zAz>*63%`!huGrhK*sBlBTR~2g33YE^1RG>7Do_NA3q*9eMM!Yb*PJx+h%-g&3_(a+<*B6gH4bj%~N%R0p3p z)XYkTeQ-VOv6E|$u#)G$-Ijq)DJh%Qo1zgNlc_WwE9roJmuq)=?cGQr2?K7k{5Tn} zgDt6SI${&|Si~2&?7NxNV-E}Y5RTKr-#s?=67#$ox}|TRp^s3lPIK(YQ=x}81Grel z&Nrnx$C=lDE(uGWgw1>zZ~o8R2VEsU_;$bsl(^pOmVxQhtSXASn2{a;jO=HgIUa4; zxD>8~EQqszrU}zoN6M2OmJ=j#4#F4tUNl6?WyIqKA7}a=V(0pw_hFcon85YN6AFq! zv?DdYEqMPx#HtDQxKY$>flNW1wWp@@=(MxL0JgR^4gL7*C$6tVS{B>@i@QxP8C$P3 zZfoQ`ydYvs%{pV>0{u!uP4va;mW#OYFk7V2eXSv6*g3mTW`42PP%9)n;~aCOVyLkHKE2n%ZZM zRqyVdms;!nZhjNf#5GgSOiEOs4Y)4Kc`i&k*YohR#Z^0HLn7`u2`bv-zNAIBHRIN; zrE~1x;Or_}=RnPL{00y9j0#z4egPo-B#P;u1|D5PlD>`b|26>&RB%YrGO#LDa< zHG9#ZEjHpLqEkt~vx4EtGmFHxdz+1S3Sdv9`wAIMvXQb7S#YRW(QmL zo01365)VK=RT2X%EF9hJ%|i>jPsnG*{|gRtpa3xI4AzwSNj4q`ipmDuxJ`5GdQG3i zC&?la9zv}*R>^Io%R=Kd9jfo(gc3O7iHGkBqz);d0n?+wVM(yF1f1eo@*(Iz+ zG$A4UlWghPIg62M;B=MO72(eEgYg?|Uy~e_xkk6PFLaGvR8y^;9cp)w(@l29u5-LN z7<<9;bzX%wjLF9Y3tZKZQ*oS^lsw$-pB~JgtoAj#LCchDLe<>ZdxI~)!kU*5 z+UqW&o4ri5vI=&?oRHIuUe@~IA;@B`P~b#Pf^lhV4=5X3YWb%hSdb130kZ_w^Q>l@ zV@-VjX2y8*?QiFEE0(DV&PK+=y^2TSJM|2|UH%4mUH zdgzHMn3kju%cGoU7cPBfP=!T2NyydU+b1-JE>!=ViVx$mR{prwM={?7@1Iz_Rh-+SfkOQY))X`i}WFeEKh^SD-SHrPxO|o?j!>z(&dD9ZccrnB6vi)%=xzo zP(B|v3G%bT7jQQ2Q7`A`1EcRw zH)dxV#h$RWw}n+Q`tQ8UP2GT4&&81(bgD*P_Fn^*`t6XdeJuJ;MkJZrY`TPX|6|-j zyQ`a{R^m&}bvB|n6I$$|)jL;@l5hVe^L7s^Yh3bA|C2}!kCh-+9G?}^u)ox*iRH(C z@H`2s=wCaZnca|sEPVR~|9kU4owrUYuKR=zT;6L!=CKtb#w>BX`-Gwu5vbfFSW&69 zap;pXHXdyY>^)NSqHB%W>3bv>+sNL!u=kO}%~*QPJl2%};*b$;2PLZ*pjK)HzTS9+ z@OSpX?E+YVbNKt3F_PhbS*AY3uW;-14lY_>GZQ)%w2O(yr^o$nL1^=xuvgb?bEU!D z!~b&(?7zdFWDRp`Vyt5|{j~~t5uQ7+HNR9Ku$u!dgR1p< zue+Vw_X%pg4Ytm;OB@|SqMx~2AI!18%|IjoJ}u3^={X7+zPBHBsqk=v%o5JkW1Sz4-C`=m7yH+g2JW3*Vw@67R+J>$q? zMGl%%u_sJx`vhU=id%##>HQtG=r|?*7-*>MS+g+a>}4(MF|t$6hzLJtipy|*12!8MT+2gFgNHhH9p%hP^2JeN}_)0l8VKK(_wrliC*nhjdugsMNtifkQRc2Vc zuqQj3N_8Va1@&?JzbEJMz80%bqTk-!kRyerj%wXxIwroI^xiaoqMR;upC%CfH9VXF z?NPj=#mN*T@6>d9GzX5e_f<*0V?owxk_|$hO6%K{CPTY&ZJJMyj40;R{>1P&Fyp}^ z;f?>rv4>_F1Mtq3^c>5c7(2nHKIFdE40e@8DJzw}g?7CR%kfM}Ot|_W*?X?d1M|pd zW9m*pi_gt%;W`u~BYqqh@4z}+;qY4X{gAmZfS7-V6q29w%OYjJ$cis9ZE1~?l!cp1Ng?w0Z94EJ_B_?G&D`4tQB(X(r-o<77)_Onb!K+!Qy-6PVl-UQqINWbjZD=hbdJtOg| zQ{^SN$E$hRPZ58yhb9$^O%scoCAd-TIRKugcEoou^le>nN8C){@pGWfs%fbi#vR?- zceu<6OzFc5L%;N7g2rA?aH(%7W1PMzCZ0OVok~0mFU^Ib@`|`W2I^qhlc#`~{XL1n zj+!Y*OM>zE%!!}~QaxY4Ae$=fIzSO>SSc6RX9@ z{D-e@X{}2fxRD&^ZcuD#p4?*Q6)b6@^f3}fhLE*XsoEnB5nFjZhd@y4`aps zF{!v5vUT6b(odKogra=z=#h*>ftobaTC+SZED4yc*2T43pMlLOk}ObbE)={y-u&<` z4#A>uTbV;WwlIPU-0_h5pn(N#jFoM_#uNmh;9wV=y3YM6shGX+^sYGGKw^3Qt=2kp z7^Q~b?RGCSAC{|2eU$~*(icUBF>c)ngtb#Jf852_wTn1zld)28lszvS9E%ln= z{)?;pP9gNBKz@5314SieuD;cO&5{#LH7f{chihP>!HJ1iE5!)k7?z!Rwbo;*F%2;$ zj6@VL@yXkEBlp$BqkXtPO)5zglpUNu^70oW2qxL7Pr3>d{@`xidKv6lENc#B3Q|Uq zB$9NLvtA^EH0?en7f&}*{te4Gt)?ndi7iRHUBGYLPsRP|2X||{wth6E^F2n?{$nL! z0a#gc<~Y-4f0ESLH~U#niFu^HhC6fB4rF`=4+9~fo zhUtjm-QF)x6T4~rU$f{=?!!~v68wc6z(CE$<^A%X!_0AcX{tJ^+BoLgtmp?X{J1}* zNacR7Bz(oW7YELa^oAwbxgaygI|3vaV5S229hMNv{4!0rjvkU_yg7z_FBiwlu;PNu z7?)h{jeceN?p>4dzV>;4S7I+oJ>=e|Q zYO!6I0F^6dY{WaZ&p&3EYxC`E1))P0=2v4KN-^T%vB7g%lh~}69&wIzI*kgC`<;S` zk*0qeZ}aWHJ|^D97rweVvx!8`%EYr9O#W)K=jx`azAmxK8%q1g!9jU!GYf7Fm$U^3 z(4jg0(nr0KGW!li`&J9N%2Z@qY?}fqv4$^C+owxK zDK{Xur=iL{F7#npH)^8*JOK2)LFkZ(@e^3A*rTjFES)*8erJ2G&i39kgER2$Puy9G z45e+oeSZsOz~M<5hn8Ht<#d@V@K`-{(y&3uCO>ufQ`llMFixT%u{jKu2hPd5amX1w!tg#o>#BwR zku)M_EN@vdGzfOstBSrgf>k_zwvLSZ6~-oy23ydLhA!RkcUR9fm%&NkzP~4fZDcEf zTNVA?KRGCK!AuUbSgHh@8y5I+6Syp>ou-CoJV-6c(Q3FPbe7YkF_D7lnAG}e)#5)S z)J};9N4S>;EY-L2{>@S~o>!sT;9$ra@2eVet#$jS^rOZ9FeR-A2dy-Ui8EL!u~c~%y--JJLy^=YW;FoU zi8>}OwEw%IX5(d!`$~2iu+^Hp3?)kAl^C(Lw1Hkd6`8e{AiyA$pVn#pCbnJ~Url6^}07t*EU92S-pa74v^!tic1P2j+Lb~5x?zN1_D)(=r z-UM6=Mitr@UInYux@y7+bo!(I$<4Bn!Xjqf#+iM7DBgEhZ?R|HF_2MfuT8sg3JWH> zzstYTd>7yxaQL7C;b@JB+0F0heY;k-h}q<4bF7h1^OgfwzXcO{Y@bKW4&kthW^WH{ z#V0u^-~Zs?fVpP@X1ACV!2LzKC*3&o3>rDk*kt@@%*VI?#m5hZFyWW2eUIs&i)||w z7!mlx_5B*N#ScDzJVcCxXHVFE(AXLn=&SBbBXr7pe`_091+SmM`!p(^S7$SjLy*{` zs}`A=sbc@6%c9*J8;_GLUefdF)Pc3J<)4 zwvQkNn+>bRZj{;y>#AQ3rXV)TksKms;S4$hOtn<}--%ZynSGw?K)K>MO|l+>6(8f` z7_mDu^}2OtQ= z=ksL}kd~!E*#Z-A7~?gfkbvV@50>Gvq&`n_Sq z=2Z0KLa%VyquBvu0hR2HPr>?qFWLtEEre!o;+kS=KY0?~>bq19Q_Av9V7-kfj=rLB zKv$29Y?vSJJuwcdc<1)ZtvehHyC8k6fzyY~8Dtcv~lO&6gLE>~KILW647 zkyR18+E;_S?%$6QW%`IPr`zRO@c8^8s)aWe^?sGWS)3gm3t!9=IIMpr)coN|#H>=w z?2s?u(k%|C+3O^ah}rD4TZY39#7((BduQ-G`gvZ5>nTqkckOS>>Umn+@PUn3Uy41^^J5Lqno9w(f@d#mGu(R`3 zcjxG-G)@LX#rG=ola_(|?^E*kNJp)8NS2+LYP+47Je6!tr?6+sZh3B!#TD7UQUXel zjN{?nOSxt@s!ztFI#(_1KVxfqvLhv3ScggkR{z7&(BB+eoK?lOb2c?W!)lEOuPo%Q zH-n!Whq3X7zyn<)W@T6`{;2}XGSE?Ie~HL>EW_V@DLKzb|B5pJ>8>1L!y`0VZJQ@` zeR6>_J7N{SZiqPovSFz5kz3$1Sb`>?bQoJ}@uxq@Pmxr-PnZ16i^2<(TK5{P5>W=3e?_e%@X1BUC3*PiHlAuG-OkBU&9wb z?Uwo!IC9(LU(^CBt-APum-I%y@Jw+;o+bIjd~bCAkTKqL_t=MMIayt41>umRJ<_;( zvU@!8??(mOL(y%S!39_3ezpO*0hdvGHEgih-Iig#C~6nt282Xq@rha{Z3JMTnOKBE zywr)cOpa%_h&RNRxYu?5SD}vL3vE}k z?#a>r8xQPwfXRRJ&d`}Ie5=1--G^KhHvm2-uTHyhxD-^+g4T|ht#Wuw<5y5tnEPXM z=VNo4nG&w8SZ?>?XK%1K;1IVL^C`4%gcrCK)UNj;R3jRSqmCR`hE%7zW+XL{R>BHYkqBW1kb`GcdHuaD`X0K9;VV~C&n9c$2(lj zPFN2k8MS_Lt?h*FDn8u4o1ZsC-xjp+rf6z?z@vRx!M_?I>aH~c1iXrR=yMFp8-_L{4^)eoA$hb7B84Cd zcX4!rwZCb)u{L=;@h|S+WEgo5N-jwrARpR#3rtwVObeH7`uxh*nh2nJB{YEy;rY}2 zR72l4jw~m`S^0F+J&UP*K$QW%uTtm1nYDLZc4)e;Iui3TTz&s%p0dH4N67<2cfnyv z&UT$wTQzsUtB?B(nE3YY-m~gU@lKRXkxwJ8snl&|7R!G({qI^rviZ+Q)QctFS6$B^ znf!JwX5n=A*(i)>XncZMi6u9>a3$H-$;qy6%)T$l*4p+!`nkr@=+qKMp>`LYR2_Fv z4w^Gpw0o1DIxWEFXCvueIK<3dW6`9vxoW`C6{HSBQ0AoHXxy(+fH!0jF@f)FUr(CeR zq}0MI)lRUT?6HjW)!%Z86ixcS1&vhtR{(LwuaZisn(*VElK)n_obI{R`;~;`_UE;L zhU-A7jvl<2>-={qgzn^!Z~~x)mM_@a(F1}7MduwolFUm6VK=zJ1VQKzq;{jSrq*cW zApIA|0Z{Uct}A&ZS`!PkG8^tK!<+$_F`VKeS-}5Uy5H>g63*u7OvXHmesD}*kDr*8 zyGxqZ`cNs=F1cdr<&9gWc^Nd!rqN;19#-Q<7FL1;Ci%hz&ALq@ef~_qO`Hz6R`+j^5nABz_(synT?EdRX9UcCMh-%H5;^VTit8Xk(;A1`rT%>_Q~v2%9yVFR0o_Z^>olCXl{=0R+4Q z)|fQSczHtJdS?QAO2$`|@zoq0#`)Jzj>%N==pA=CBt(3o$;XdkZVmB{Cq9kF{|efp zFy>$Oz0Ba(4AortK?dtYgUr`O)=oks*FrZ(GfedVMwWm&C|V^xky~8?E4DAojPx|O zl|F8cixVWZ1~_RUAv}6_Z1kk3A-wASLWCdS;~2h;fL{n35hH`^VK>L(bu00`Z6}}0h%ra8DDdF?1Z!W?(Dz5S@CddE;U;2|kC80% zN=Kk3SD=#g$i)43Am7vJ9-jC}q;dmJ_!BnlU$H1Wnq-VLD!7>p@Nj)gPlSu}_@fEA1BDP{$Wg;)P`5Lx|jM-`f{nL34w(`%obq=(qFtw{fqgL031}Iz2cfxtM_wzYxQy(}Q*Tjj$2>zx>ASr1sKk@$W!X zJQ@nZ8nco|q;^)@nK!kwLuKB8w@S4;3X#kUi^D=M516gV|79xHUp=3^XHlQr&Y&Zn zsl=>r(CnlKV=6}ax*oLK2`hcH6TU1a^56tx7$-jg9~ZPyWsI}3&W9xk$K5WNv3!I3%q)LcWJ2G24|J8;a{oLjZD%YGA?DI zjJ9hanc_#5EFm#}MOO7wi9aq;&Sju~oGkT1V^;ohBi;jPWjW{~TOjjDBhVZ;`^kK! z0O2!3H}&&kYH&!EFfN;^i*k?URP*v#={<@%jnrYlZBa+0X8>MTN1lT`KLa~7$qXef zsz7UiOw&7Yw>gzqd}+~(%Omb`%*-3Yr)Ot@z`t*!B8@?|7=in<0#AD{Dfo4A@gGBD zbm0HldliA#779dP9`U)?N8eHEljIq6Xstq(fKMXx!bc#sUKGUgt@CRo2`&zC{RiHwC;JKqP!s2vW9qOiftGD;0J$<4NvE$?d8Uh*8(rnHhI*Co=M}pVi^Cp za{jz?GkOV-S-5+1;e93BhYfq9-Be=WPsu-rf#&MTAHM35o-)#Yz8tX%xF&F5M@2PL z#Gq)6!e%jU&lnT+FQYmA+gh3M4 zlk);GB1+QRUqzgH?&v&f=LK{`tP+Yd9l!o~;B)kQ)s+;;wV2w$mHcc3D;8h=T(%n{ zO4Ay?(+y%qJHxCYQ*9^Q>XWTdaDrB2c*sp4@p#YTQrzaD4G(q0IwJqwl57e$hxt?0 zj!ktJPunV|5A@$HsIWW4B+Q-lAQWg?D_8t^Mc+WJ;9S=!WTCUAaRaU-11<#pX-V86 zPZPj4oFtLlVE*D+|CLu*=_6ZyXs=FY+%C{u`P~OOBtL&!AMZvJcnW-Fh4pxpTnv(@ zXcg;qJ=}zB0jDdOM?3z1;oI&qME9KYs_Um~1ZrTcu}>Gpv-@r*^9V-MSbvu;Fu9De zZ+KibC`h}k(9nzdvveMHGO%Ln_*3gXe(xiTWFXDbf>Md!$mDu$VZy5pS68LDK;VBG z@$9(?lL8b3^|J)R-j#gujRuXC$!&X7^@azCp+jKZAj_m0r~fZ~J*Y2y!G%q`7=anp Sj{+ZOg49)YRBDxNBmN&WwepPs literal 0 HcmV?d00001 diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index c3ccf2547f..adcf521eae 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -2087,6 +2087,11 @@ async def healthcheck_with_db(): app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static") +@app.get("/favicon.png") +async def get_favicon(): + return FileResponse(os.path.join(STATIC_DIR, "favicon.png")) + + @app.get("/cache/{path:path}") async def serve_cache_file( path: str, diff --git a/backend/open_webui/static/site.webmanifest b/backend/open_webui/static/site.webmanifest index 95915ae2bc..b462eaa6dd 100644 --- a/backend/open_webui/static/site.webmanifest +++ b/backend/open_webui/static/site.webmanifest @@ -1,6 +1,6 @@ { - "name": "Open WebUI", - "short_name": "WebUI", + "name": "CyberLover", + "short_name": "Lover", "icons": [ { "src": "/static/web-app-manifest-192x192.png", diff --git a/package-lock.json b/package-lock.json index 4b3183e318..8048e6c14d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,6 +63,7 @@ "idb": "^7.1.1", "js-sha256": "^0.10.1", "jspdf": "^3.0.0", + "jszip": "^3.10.1", "katex": "^0.16.22", "kokoro-js": "^1.1.1", "leaflet": "^1.9.4", @@ -97,6 +98,7 @@ "vega-lite": "^6.4.1", "vite-plugin-static-copy": "^2.2.0", "y-prosemirror": "^1.3.7", + "y-protocols": "^1.0.6", "yaml": "^2.7.1", "yjs": "^13.6.27" }, @@ -108,6 +110,7 @@ "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/postcss": "^4.0.0", "@tailwindcss/typography": "^0.5.13", + "@types/jszip": "^3.4.0", "@typescript-eslint/eslint-plugin": "^8.31.1", "@typescript-eslint/parser": "^8.31.1", "cypress": "^13.15.0", @@ -159,6 +162,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -189,22 +193,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" - } - }, "node_modules/@azure/msal-browser": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.5.0.tgz", @@ -248,7 +236,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.2.tgz", "integrity": "sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==", - "devOptional": true, + "dev": true, "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@chevrotain/cst-dts-gen": { @@ -667,131 +655,6 @@ "node": ">=0.1.90" } }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", - "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@cypress/request": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", @@ -2000,6 +1863,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2013,6 +1877,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2021,6 +1886,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2034,6 +1900,7 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2471,6 +2338,7 @@ "version": "1.0.0-next.28", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true, "license": "MIT" }, "node_modules/@popperjs/core": { @@ -2869,6 +2737,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" @@ -2914,6 +2783,7 @@ "version": "2.22.4", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.4.tgz", "integrity": "sha512-BXK9hTbP8AeQIfoz6+P3uoyVYStVHc5CIKqoTSF7hXm3Q5P9BwFMdEus4jsQuhaYmXGHzukcGlxe2QrsE8BJfQ==", + "dev": true, "license": "MIT", "dependencies": { "@sveltejs/acorn-typescript": "^1.0.5", @@ -2951,6 +2821,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", "integrity": "sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==", + "dev": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", "debug": "^4.3.4", @@ -2972,6 +2843,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", + "dev": true, "dependencies": { "debug": "^4.3.4" }, @@ -3385,23 +3257,6 @@ "lowlight": "^2 || ^3" } }, - "node_modules/@tiptap/extension-collaboration": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-3.4.5.tgz", - "integrity": "sha512-JyPXTYkYi2XzUWsmObv2cogMrs7huAvfq6l7d5hAwsU2FnA1vMycaa48N4uekogySP6VBkiQNDf9B4T09AwwqA==", - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.4.5", - "@tiptap/pm": "^3.4.5", - "@tiptap/y-tiptap": "^3.0.0-beta.3", - "yjs": "^13" - } - }, "node_modules/@tiptap/extension-document": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.0.7.tgz", @@ -3644,21 +3499,6 @@ "@tiptap/suggestion": "^3.0.9" } }, - "node_modules/@tiptap/extension-node-range": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@tiptap/extension-node-range/-/extension-node-range-3.4.5.tgz", - "integrity": "sha512-mHCjdJZX8DZCpnw9wBqioanANy6tRoy20/OcJxMW1T7naeRCuCU4sFjwO37yb/tmYk1BQA2/L1/H2r0fVoZwtA==", - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.4.5", - "@tiptap/pm": "^3.4.5" - } - }, "node_modules/@tiptap/extension-ordered-list": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.0.7.tgz", @@ -3725,20 +3565,6 @@ "@tiptap/core": "^3.0.7" } }, - "node_modules/@tiptap/extension-text-style": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.0.7.tgz", - "integrity": "sha512-naJ1XxlbFJ1qlpA+i54lQYKuhWP1dnkUslM86OT0TZt0zJBeu7LIrqSOVGmMB++lF/btnQLMnYkYSSnkLgIw3A==", - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.0.7" - } - }, "node_modules/@tiptap/extension-typography": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-3.0.7.tgz", @@ -3872,31 +3698,11 @@ "@tiptap/pm": "^3.4.2" } }, - "node_modules/@tiptap/y-tiptap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@tiptap/y-tiptap/-/y-tiptap-3.0.0.tgz", - "integrity": "sha512-HIeJZCj+KYJde2x6fONzo4o6kd7gW7eonwhQsv2p2VQnUgwNXMVhN+D6Z3AH/2i541Sq33y1PO4U/1ThCPjqbA==", - "license": "MIT", - "peer": true, - "dependencies": { - "lib0": "^0.2.100" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - }, - "peerDependencies": { - "prosemirror-model": "^1.7.1", - "prosemirror-state": "^1.2.3", - "prosemirror-view": "^1.9.10", - "y-protocols": "^1.0.1", - "yjs": "^13.5.38" - } - }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true }, "node_modules/@types/d3": { "version": "7.4.3", @@ -4165,6 +3971,16 @@ "@types/unist": "*" } }, + "node_modules/@types/jszip": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.4.0.tgz", + "integrity": "sha512-GFHqtQQP3R4NNuvZH3hNCYD0NbyBZ42bkN7kO3NDrU/SnvIZWMS8Bp38XCsRKBT5BXvgm0y1zqpZWp/ZkRzBzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jszip": "*" + } + }, "node_modules/@types/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", @@ -4649,18 +4465,6 @@ "node": ">=0.4.0" } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4806,6 +4610,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -4898,6 +4703,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -5173,7 +4979,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", - "devOptional": true, + "dev": true, "license": "MIT/X11" }, "node_modules/buffer-crc32": { @@ -5706,6 +5512,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1", @@ -5718,6 +5525,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -5825,7 +5633,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/colors": { @@ -5894,6 +5702,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -5914,8 +5723,7 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cose-base": { "version": "1.0.3", @@ -5985,6 +5793,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -6018,31 +5827,6 @@ "node": ">=4" } }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/cypress": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", @@ -6698,22 +6482,6 @@ "node": ">=0.10" } }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", @@ -6736,15 +6504,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/deep-eql": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", @@ -6835,7 +6594,8 @@ "node_modules/devalue": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==" + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "dev": true }, "node_modules/devlop": { "version": "1.1.0", @@ -7379,6 +7139,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, "license": "MIT" }, "node_modules/espree": { @@ -8126,7 +7887,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -8238,21 +7999,6 @@ "node": ">=12.0.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/html-entities": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.3.tgz", @@ -8321,22 +8067,6 @@ "entities": "^4.5.0" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -8351,22 +8081,6 @@ "node": ">=0.10" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -8493,11 +8207,17 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/immutable": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -8715,15 +8435,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -8774,8 +8485,7 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", @@ -8827,73 +8537,6 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "node_modules/jsdom": { - "version": "24.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", - "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -8974,6 +8617,18 @@ "verror": "1.10.0" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, "node_modules/katex": { "version": "0.16.22", "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", @@ -9016,6 +8671,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, "engines": { "node": ">=6" } @@ -9130,11 +8786,20 @@ "url": "https://github.com/sponsors/dmonad" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lightningcss": { "version": "1.29.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", - "devOptional": true, + "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^1.0.3" @@ -9166,6 +8831,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9186,6 +8852,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9206,6 +8873,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9226,6 +8894,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9246,6 +8915,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9266,6 +8936,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9286,6 +8957,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9306,6 +8978,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9326,6 +8999,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9346,6 +9020,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -9363,7 +9038,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" @@ -9482,7 +9157,8 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true }, "node_modules/locate-path": { "version": "6.0.0", @@ -9741,7 +9417,8 @@ "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true }, "node_modules/mdurl": { "version": "2.0.0", @@ -10015,6 +9692,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, "engines": { "node": ">=4" } @@ -10023,6 +9701,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -10107,15 +9786,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nwsapi": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", - "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -10290,6 +9960,12 @@ "quansync": "^0.2.7" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/paneforge": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/paneforge/-/paneforge-0.0.6.tgz", @@ -10465,6 +10141,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", @@ -10475,6 +10152,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -10483,6 +10161,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, "dependencies": { "@types/estree": "*" } @@ -10578,6 +10257,7 @@ "version": "8.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -10708,6 +10388,7 @@ "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, "funding": [ { "type": "github", @@ -10808,8 +10489,7 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/promise-map-series": { "version": "0.3.0", @@ -11251,7 +10931,6 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11504,15 +11183,6 @@ "points-on-path": "^0.2.1" } }, - "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -11554,7 +11224,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "devOptional": true, + "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -11563,6 +11233,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, "dependencies": { "mri": "^1.1.0" }, @@ -11573,8 +11244,7 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -11652,7 +11322,7 @@ "version": "1.81.0", "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.81.0.tgz", "integrity": "sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@bufbuild/protobuf": "^2.0.0", @@ -11700,6 +11370,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11716,6 +11387,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11732,6 +11404,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11748,6 +11421,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11764,6 +11438,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11780,6 +11455,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11796,6 +11472,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11812,6 +11489,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11828,6 +11506,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11844,6 +11523,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11860,6 +11540,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11876,6 +11557,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11892,6 +11574,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11908,6 +11591,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11924,6 +11608,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11940,6 +11625,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11956,6 +11642,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11972,6 +11659,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -11988,6 +11676,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -12004,6 +11693,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -12017,7 +11707,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12029,21 +11719,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -12058,7 +11733,8 @@ "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -12077,6 +11753,12 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/sharp": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", @@ -12181,6 +11863,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "dev": true, "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", @@ -12271,6 +11954,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -12359,7 +12043,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -12530,6 +12213,7 @@ "version": "4.2.19", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -12610,6 +12294,7 @@ "version": "0.16.0", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", + "dev": true, "engines": { "node": "^12.20 || ^14.13.1 || >= 16" }, @@ -12692,6 +12377,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -12700,6 +12386,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, "dependencies": { "@types/estree": "*" } @@ -12714,15 +12401,6 @@ "node": ">=12.0.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/symlink-or-copy": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", @@ -12733,7 +12411,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "sync-message-port": "^1.0.0" @@ -12746,7 +12424,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=16.0.0" @@ -12955,6 +12633,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12984,21 +12663,6 @@ "node": ">= 4.0.0" } }, - "node_modules/tr46": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -13188,8 +12852,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utrie": { "version": "1.0.2", @@ -13225,7 +12888,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/vega": { @@ -13734,6 +13397,7 @@ "version": "5.4.19", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", @@ -13837,6 +13501,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "aix" @@ -13852,6 +13517,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -13867,6 +13533,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -13882,6 +13549,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "android" @@ -13897,6 +13565,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -13912,6 +13581,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -13927,6 +13597,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -13942,6 +13613,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -13957,6 +13629,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -13972,6 +13645,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -13987,6 +13661,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14002,6 +13677,7 @@ "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14017,6 +13693,7 @@ "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14032,6 +13709,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14047,6 +13725,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14062,6 +13741,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14077,6 +13757,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -14092,6 +13773,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -14107,6 +13789,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -14122,6 +13805,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -14137,6 +13821,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -14152,6 +13837,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -14167,6 +13853,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -14179,6 +13866,7 @@ "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -14216,6 +13904,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, @@ -14467,21 +14156,6 @@ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/walk-sync": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", @@ -14520,18 +14194,6 @@ "node": "*" } }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -14555,22 +14217,6 @@ "node": ">=18" } }, - "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/wheel": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", @@ -14718,27 +14364,6 @@ } } }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/xmlhttprequest-ssl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", @@ -14785,7 +14410,6 @@ "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", "license": "MIT", - "peer": true, "dependencies": { "lib0": "^0.2.85" }, diff --git a/package.json b/package.json index 6d0aa8f5d5..c707083c44 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/postcss": "^4.0.0", "@tailwindcss/typography": "^0.5.13", + "@types/jszip": "^3.4.0", "@typescript-eslint/eslint-plugin": "^8.31.1", "@typescript-eslint/parser": "^8.31.1", "cypress": "^13.15.0", @@ -107,6 +108,7 @@ "idb": "^7.1.1", "js-sha256": "^0.10.1", "jspdf": "^3.0.0", + "jszip": "^3.10.1", "katex": "^0.16.22", "kokoro-js": "^1.1.1", "leaflet": "^1.9.4", @@ -141,6 +143,7 @@ "vega-lite": "^6.4.1", "vite-plugin-static-copy": "^2.2.0", "y-prosemirror": "^1.3.7", + "y-protocols": "^1.0.6", "yaml": "^2.7.1", "yjs": "^13.6.27" }, diff --git a/src/lib/components/chat/Settings/DataControls.svelte b/src/lib/components/chat/Settings/DataControls.svelte index 3aef3b1c62..c7b9d13905 100644 --- a/src/lib/components/chat/Settings/DataControls.svelte +++ b/src/lib/components/chat/Settings/DataControls.svelte @@ -20,6 +20,7 @@ getPinnedChatList } from '$lib/apis/chats'; import { getImportOrigin, convertOpenAIChats } from '$lib/utils'; + import { extractChatsFromFile } from '$lib/utils/chatImport'; import { onMount, getContext } from 'svelte'; import { goto } from '$app/navigation'; import { toast } from 'svelte-sonner'; @@ -41,22 +42,25 @@ $: if (importFiles) { console.log(importFiles); - let reader = new FileReader(); - reader.onload = (event) => { - let chats = JSON.parse(event.target.result); - console.log(chats); - if (getImportOrigin(chats) == 'openai') { - try { - chats = convertOpenAIChats(chats); - } catch (error) { - console.log('Unable to import chats:', error); - } - } - importChats(chats); - }; - if (importFiles.length > 0) { - reader.readAsText(importFiles[0]); + extractChatsFromFile(importFiles[0]) + .then((chats) => { + console.log(chats); + if (getImportOrigin(chats) == 'openai') { + try { + chats = convertOpenAIChats(chats); + } catch (error) { + console.log('Unable to import chats:', error); + toast.error($i18n.t('Failed to convert OpenAI chats')); + return; + } + } + importChats(chats); + }) + .catch((error) => { + console.error('Import error:', error); + toast.error($i18n.t(error.message)); + }); } } @@ -134,7 +138,7 @@ bind:this={chatImportInputElement} bind:files={importFiles} type="file" - accept=".json" + accept=".json,.zip" hidden />
From fbaa3327c4fc10ae308edb9bb5fb55c0a4f36f01 Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Sat, 22 Nov 2025 16:32:37 +0800 Subject: [PATCH 09/12] =?UTF-8?q?feat:=20sidebar=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AE=B0=E5=BF=86=E7=BC=96=E8=BE=91=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/layout/Sidebar.svelte | 20 + .../layout/Sidebar/MemoryPanel.svelte | 243 ++++++++++++ src/lib/i18n/locales/ar-BH/translation.json | 13 +- src/lib/i18n/locales/ar/translation.json | 13 +- src/lib/i18n/locales/bg-BG/translation.json | 13 +- src/lib/i18n/locales/bn-BD/translation.json | 13 +- src/lib/i18n/locales/bo-TB/translation.json | 13 +- src/lib/i18n/locales/bs-BA/translation.json | 13 +- src/lib/i18n/locales/ca-ES/translation.json | 13 +- src/lib/i18n/locales/ceb-PH/translation.json | 13 +- src/lib/i18n/locales/cs-CZ/translation.json | 13 +- src/lib/i18n/locales/da-DK/translation.json | 13 +- src/lib/i18n/locales/de-DE/translation.json | 13 +- src/lib/i18n/locales/dg-DG/translation.json | 13 +- src/lib/i18n/locales/el-GR/translation.json | 13 +- src/lib/i18n/locales/en-GB/translation.json | 13 +- src/lib/i18n/locales/en-US/translation.json | 13 +- src/lib/i18n/locales/es-ES/translation.json | 13 +- src/lib/i18n/locales/et-EE/translation.json | 13 +- src/lib/i18n/locales/eu-ES/translation.json | 13 +- src/lib/i18n/locales/fa-IR/translation.json | 13 +- src/lib/i18n/locales/fi-FI/translation.json | 13 +- src/lib/i18n/locales/fr-CA/translation.json | 13 +- src/lib/i18n/locales/fr-FR/translation.json | 13 +- src/lib/i18n/locales/gl-ES/translation.json | 13 +- src/lib/i18n/locales/he-IL/translation.json | 13 +- src/lib/i18n/locales/hi-IN/translation.json | 13 +- src/lib/i18n/locales/hr-HR/translation.json | 13 +- src/lib/i18n/locales/hu-HU/translation.json | 13 +- src/lib/i18n/locales/id-ID/translation.json | 13 +- src/lib/i18n/locales/ie-GA/translation.json | 13 +- src/lib/i18n/locales/it-IT/translation.json | 13 +- src/lib/i18n/locales/ja-JP/translation.json | 13 +- src/lib/i18n/locales/ka-GE/translation.json | 13 +- src/lib/i18n/locales/kab-DZ/translation.json | 13 +- src/lib/i18n/locales/ko-KR/translation.json | 13 +- src/lib/i18n/locales/lt-LT/translation.json | 13 +- src/lib/i18n/locales/ms-MY/translation.json | 13 +- src/lib/i18n/locales/nb-NO/translation.json | 13 +- src/lib/i18n/locales/nl-NL/translation.json | 13 +- src/lib/i18n/locales/pa-IN/translation.json | 13 +- src/lib/i18n/locales/pl-PL/translation.json | 13 +- src/lib/i18n/locales/pt-BR/translation.json | 13 +- src/lib/i18n/locales/pt-PT/translation.json | 13 +- src/lib/i18n/locales/ro-RO/translation.json | 13 +- src/lib/i18n/locales/ru-RU/translation.json | 13 +- src/lib/i18n/locales/sk-SK/translation.json | 13 +- src/lib/i18n/locales/sr-RS/translation.json | 13 +- src/lib/i18n/locales/sv-SE/translation.json | 13 +- src/lib/i18n/locales/th-TH/translation.json | 13 +- src/lib/i18n/locales/tk-TM/translation.json | 13 +- src/lib/i18n/locales/tr-TR/translation.json | 13 +- src/lib/i18n/locales/ug-CN/translation.json | 13 +- src/lib/i18n/locales/uk-UA/translation.json | 13 +- src/lib/i18n/locales/ur-PK/translation.json | 13 +- .../i18n/locales/uz-Cyrl-UZ/translation.json | 13 +- .../i18n/locales/uz-Latn-Uz/translation.json | 13 +- src/lib/i18n/locales/vi-VN/translation.json | 13 +- src/lib/i18n/locales/zh-CN/translation.json | 13 +- src/lib/i18n/locales/zh-TW/translation.json | 13 +- src/lib/stores/index.ts | 2 + src/routes/(app)/memories/+page.svelte | 347 ++++++++++++++++++ 62 files changed, 1134 insertions(+), 232 deletions(-) create mode 100644 src/lib/components/layout/Sidebar/MemoryPanel.svelte create mode 100644 src/routes/(app)/memories/+page.svelte diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 8f25e9a1df..7e0781b723 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -56,6 +56,7 @@ import ChannelItem from './Sidebar/ChannelItem.svelte'; import PencilSquare from '../icons/PencilSquare.svelte'; import Search from '../icons/Search.svelte'; + import Sparkles from '../icons/Sparkles.svelte'; import SearchModal from './SearchModal.svelte'; import FolderModal from './Sidebar/Folders/FolderModal.svelte'; import Sidebar from '../icons/Sidebar.svelte'; @@ -881,6 +882,25 @@
+ + {#if ($config?.features?.enable_notes ?? false) && ($user?.role === 'admin' || ($user?.permissions?.features?.notes ?? true))}
+ import { toast } from 'svelte-sonner'; + import dayjs from 'dayjs'; + import { getContext, onMount } from 'svelte'; + import { memories, showMemoryPanel } from '$lib/stores'; + import { + deleteMemoriesByUserId, + deleteMemoryById, + getMemories + } from '$lib/apis/memories'; + import Tooltip from '$lib/components/common/Tooltip.svelte'; + import AddMemoryModal from '$lib/components/chat/Settings/Personalization/AddMemoryModal.svelte'; + import EditMemoryModal from '$lib/components/chat/Settings/Personalization/EditMemoryModal.svelte'; + import ConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; + import localizedFormat from 'dayjs/plugin/localizedFormat'; + + const i18n = getContext('i18n'); + dayjs.extend(localizedFormat); + + let loading = false; + let showAddMemoryModal = false; + let showEditMemoryModal = false; + let selectedMemory = null; + let showClearConfirmDialog = false; + + const loadMemories = async () => { + loading = true; + try { + const data = await getMemories(localStorage.token); + memories.set(data || []); + } catch (error) { + toast.error($i18n.t('Failed to load memories')); + console.error(error); + } finally { + loading = false; + } + }; + + const onClearConfirmed = async () => { + const res = await deleteMemoriesByUserId(localStorage.token).catch((error) => { + toast.error(`${error}`); + return null; + }); + + if (res && $memories.length > 0) { + toast.success($i18n.t('Memory cleared successfully')); + memories.set([]); + } + showClearConfirmDialog = false; + }; + + const handleDeleteMemory = async (memoryId: string) => { + const res = await deleteMemoryById(localStorage.token, memoryId).catch((error) => { + toast.error(`${error}`); + return null; + }); + + if (res) { + toast.success($i18n.t('Memory deleted successfully')); + await loadMemories(); + } + }; + + onMount(() => { + if ($showMemoryPanel && $memories.length === 0) { + loadMemories(); + } + }); + + $: if ($showMemoryPanel && $memories.length === 0 && !loading) { + loadMemories(); + } + + +{#if $showMemoryPanel} +
+ +
+
+ {$i18n.t('Memory')} +
+
+ + + + + + +
+
+ + +
+ {#if loading} +
+ {$i18n.t('Loading...')} +
+ {:else if $memories.length === 0} +
+
{$i18n.t('No memories yet')}
+ +
+ {:else} + {#each $memories as memory} +
+
+
+ {memory.content} +
+
+ {dayjs(memory.updated_at * 1000).format('ll')} +
+
+
+ + + + + + +
+
+ {/each} + {/if} +
+ + +
+
+{/if} + + { + showClearConfirmDialog = false; + }} +/> + + { + await loadMemories(); + }} +/> + + { + await loadMemories(); + }} +/> diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index de3092c9b4..31003bd38e 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "اضافة مستخدم", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "مظلم", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "فشل في إنشاء مفتاح API.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "خطاء! يبدو أن عنوان URL غير صالح. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.", @@ -1139,10 +1148,6 @@ "Open new chat": "فتح محادثة جديده", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API إعدادات", diff --git a/src/lib/i18n/locales/ar/translation.json b/src/lib/i18n/locales/ar/translation.json index 727b393c90..85ee303f05 100644 --- a/src/lib/i18n/locales/ar/translation.json +++ b/src/lib/i18n/locales/ar/translation.json @@ -63,6 +63,7 @@ "Add text content": "إضافة محتوى نصي", "Add User": "إضافة مستخدم", "Add User Group": "إضافة مجموعة مستخدمين", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "تستخدم واجهة WebUI أداة faster-whisper داخليًا.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "تستخدم WebUI نموذج SpeechT5 وتضمينات صوتية من CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "إصدار WebUI الحالي (v{{OPEN_WEBUI_VERSION}}) أقل من الإصدار المطلوب (v{{REQUIRED_VERSION}})", "Danger Zone": "منطقة الخطر", "Dark": "داكن", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "فشل في إضافة الملف.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "فشل في إنشاء مفتاح API.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "لم يتم العثور على محرك استدلال يدعم الإدارة", "No knowledge found": "لم يتم العثور على معرفة", "No memories to clear": "لا توجد ذاكرة لمسحها", + "No memories yet": "", "No model IDs": "لا توجد معرّفات نماذج", "No models found": "لم يتم العثور على نماذج", "No models selected": "لم يتم اختيار نماذج", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "يُسمح فقط بالحروف والأرقام والواصلات", "Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "يمكن تعديل المجموعات فقط، أنشئ قاعدة معرفة جديدة لتعديل أو إضافة مستندات.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "يمكن الوصول فقط من قبل المستخدمين والمجموعات المصرح لهم", "Oops! Looks like the URL is invalid. Please double-check and try again.": "خطاء! يبدو أن عنوان URL غير صالح. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.", @@ -1139,10 +1148,6 @@ "Open new chat": "فتح محادثة جديده", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "تستخدم واجهة WebUI أداة faster-whisper داخليًا.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "تستخدم WebUI نموذج SpeechT5 وتضمينات صوتية من CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "إصدار WebUI الحالي (v{{OPEN_WEBUI_VERSION}}) أقل من الإصدار المطلوب (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API إعدادات", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 17fd4049ba..76a8b6499c 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -63,6 +63,7 @@ "Add text content": "Добавяне на текстово съдържание", "Add User": "Добавяне на потребител", "Add User Group": "Добавяне на потребителска група", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover използва вътрешно по-бързо-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover използва SpeechT5 и CMU Arctic говорителни вграждания.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версията на CyberLover (v{{OPEN_WEBUI_VERSION}}) е по-ниска от необходимата версия (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Тъмен", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Неуспешно добавяне на файл.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Неуспешно създаване на API ключ.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Не е намерен механизъм за извод с поддръжка на управлението", "No knowledge found": "Не са намерени знания", "No memories to clear": "", + "No memories yet": "", "No model IDs": "Няма ИД-та на моделите", "No models found": "Не са намерени модели", "No models selected": "Няма избрани модели", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Разрешени са само буквено-цифрови знаци и тирета", "Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерични знаци и тире са разрешени в командния низ.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Само колекциите могат да бъдат редактирани, създайте нова база от знания, за да редактирате/добавяте документи.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Само избрани потребители и групи с разрешение могат да имат достъп", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изглежда URL адресът е невалиден. Моля, проверете отново и опитайте пак.", @@ -1139,10 +1148,6 @@ "Open new chat": "Отвори нов чат", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover използва вътрешно по-бързо-whisper.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover използва SpeechT5 и CMU Arctic говорителни вграждания.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версията на CyberLover (v{{OPEN_WEBUI_VERSION}}) е по-ниска от необходимата версия (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API на OpenAI", "OpenAI API Config": "OpenAI API конфигурация", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index c7f7514dda..430d6fdda3 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "ইউজার যোগ করুন", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "ডার্ক", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "API Key তৈরি করা যায়নি।", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "কমান্ড স্ট্রিং-এ শুধুমাত্র ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন ব্যবহার করা যাবে।", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ওহ, মনে হচ্ছে ইউআরএলটা ইনভ্যালিড। দয়া করে আর চেক করে চেষ্টা করুন।", @@ -1139,10 +1148,6 @@ "Open new chat": "নতুন চ্যাট খুলুন", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI এপিআই", "OpenAI API Config": "OpenAI এপিআই কনফিগ", diff --git a/src/lib/i18n/locales/bo-TB/translation.json b/src/lib/i18n/locales/bo-TB/translation.json index fae9cb6896..28954ff18c 100644 --- a/src/lib/i18n/locales/bo-TB/translation.json +++ b/src/lib/i18n/locales/bo-TB/translation.json @@ -63,6 +63,7 @@ "Add text content": "ཡིག་རྐྱང་ནང་དོན་སྣོན་པ།", "Add User": "བེད་སྤྱོད་མཁན་སྣོན་པ།", "Add User Group": "བེད་སྤྱོད་མཁན་ཚོགས་པ་སྣོན་པ།", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover ཡིས་ནང་ཁུལ་དུ་ faster-whisper བེད་སྤྱོད་བྱེད།", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover ཡིས་ SpeechT5 དང་ CMU Arctic གཏམ་བཤད་པའི་ཚུད་འཇུག་བེད་སྤྱོད་བྱེད།", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover པར་གཞི། (v{{OPEN_WEBUI_VERSION}}) དེ་དགོས་ངེས་ཀྱི་པར་གཞི་ (v{{REQUIRED_VERSION}}) ལས་དམའ་བ།", "Danger Zone": "ཉེན་ཁའི་ས་ཁུལ།", "Dark": "ནག་པོ།", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "ཡིག་ཆ་སྣོན་པར་མ་ཐུབ།", "Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI ལག་ཆའི་སར་བར་ལ་སྦྲེལ་མཐུད་བྱེད་མ་ཐུབ།", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "API ལྡེ་མིག་བཟོ་མ་ཐུབ།", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "སྦྱར་སྡེར་གྱི་ནང་དོན་ཀློག་མ་ཐུབ།", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "དོ་དམ་རྒྱབ་སྐྱོར་ཡོད་པའི་དཔོག་རྩིས་འཕྲུལ་འཁོར་མ་རྙེད།", "No knowledge found": "ཤེས་བྱ་མ་རྙེད།", "No memories to clear": "གཙང་སེལ་བྱེད་རྒྱུའི་དྲན་ཤེས་མེད།", + "No memories yet": "", "No model IDs": "དཔེ་དབྱིབས་ཀྱི་ ID མེད།", "No models found": "དཔེ་དབྱིབས་མ་རྙེད།", "No models selected": "དཔེ་དབྱིབས་གདམ་ག་མ་བྱས།", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "ཨང་ཀི་དང་དབྱིན་ཡིག་གི་ཡིག་འབྲུ་དང་སྦྲེལ་རྟགས་ཁོ་ན་ཆོག་པ།", "Only alphanumeric characters and hyphens are allowed in the command string.": "བཀའ་བརྡའི་ཡིག་ཕྲེང་ནང་ཨང་ཀི་དང་དབྱིན་ཡིག་གི་ཡིག་འབྲུ་དང་སྦྲེལ་རྟགས་ཁོ་ན་ཆོག་པ།", "Only collections can be edited, create a new knowledge base to edit/add documents.": "བསྡུ་གསོག་ཁོ་ན་ཞུ་དག་བྱེད་ཐུབ། ཡིག་ཆ་ཞུ་དག་/སྣོན་པར་ཤེས་བྱའི་རྟེན་གཞི་གསར་པ་ཞིག་བཟོ་བ།", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "དབང་ཚད་ཡོད་པའི་བེད་སྤྱོད་མཁན་དང་ཚོགས་པ་གདམ་ག་བྱས་པ་ཁོ་ན་འཛུལ་སྤྱོད་ཐུབ།", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ཨོའོ། URL དེ་ནུས་མེད་ཡིན་པ་འདྲ། ཡང་བསྐྱར་ཞིབ་དཔྱད་བྱས་ནས་ཚོད་ལྟ་བྱེད་རོགས།", @@ -1139,10 +1148,6 @@ "Open new chat": "ཁ་བརྡ་གསར་པ་ཁ་ཕྱེ་བ།", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover ཡིས་ནང་ཁུལ་དུ་ faster-whisper བེད་སྤྱོད་བྱེད།", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover ཡིས་ SpeechT5 དང་ CMU Arctic གཏམ་བཤད་པའི་ཚུད་འཇུག་བེད་སྤྱོད་བྱེད།", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover པར་གཞི། (v{{OPEN_WEBUI_VERSION}}) དེ་དགོས་ངེས་ཀྱི་པར་གཞི་ (v{{REQUIRED_VERSION}}) ལས་དམའ་བ།", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API Config", diff --git a/src/lib/i18n/locales/bs-BA/translation.json b/src/lib/i18n/locales/bs-BA/translation.json index 9d6ae02948..55f13b44ff 100644 --- a/src/lib/i18n/locales/bs-BA/translation.json +++ b/src/lib/i18n/locales/bs-BA/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Dodaj korisnika", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Tamno", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Neuspješno stvaranje API ključa.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Samo alfanumerički znakovi i crtice su dopušteni u naredbenom nizu.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Izgleda da je URL nevažeći. Molimo provjerite ponovno i pokušajte ponovo.", @@ -1139,10 +1148,6 @@ "Open new chat": "Otvorite novi razgovor", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguracija", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 8e8b44d40d..7cf1fed873 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -63,6 +63,7 @@ "Add text content": "Afegir contingut de text", "Add User": "Afegir un usuari", "Add User Group": "Afegir grup d'usuaris", + "Add your first memory": "", "Additional Config": "Configuració addicional", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Opcions de configuració addicionals per al marcador. Hauria de ser una cadena JSON amb parelles clau-valor. Per exemple, '{\"key\": \"value\"}'. Les claus compatibles inclouen: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "Paràmetres addicionals", @@ -365,6 +366,10 @@ "Custom description enabled": "Descripcions personalitzades habilitades", "Custom Parameter Name": "Nom del paràmetre personalitzat", "Custom Parameter Value": "Valor del paràmetre personalitzat", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover pot utilitzar eines de servidors OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilitza faster-whisper internament.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilitza incrustacions de SpeechT5 i CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versió d'CyberLover (v{{OPEN_WEBUI_VERSION}}) és inferior a la versió requerida (v{{REQUIRED_VERSION}})", "Danger Zone": "Zona de perill", "Dark": "Fosc", "Data Controls": "Controls de dades", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Efecte de fos a negre per al text en streaming", "Failed to add file.": "No s'ha pogut afegir l'arxiu.", "Failed to connect to {{URL}} OpenAPI tool server": "No s'ha pogut connecta al servidor d'eines OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "No s'ha pogut copiar l'enllaç", "Failed to create API Key.": "No s'ha pogut crear la clau API.", "Failed to delete note": "No s'ha pogut eliminar la nota", @@ -704,6 +710,7 @@ "Failed to import models": "No s'han pogut importar el models", "Failed to load chat preview": "No s'ha pogut carregar la previsualització del xat", "Failed to load file content.": "No s'ha pogut carregar el contingut del fitxer", + "Failed to load memories": "", "Failed to move chat": "No s'ha pogut moure el xat", "Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls", "Failed to render diagram": "No s'ha pogut renderitzar el diagrama", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "No s'ha trobat un motor d'inferència amb suport de gestió", "No knowledge found": "No s'ha trobat Coneixement", "No memories to clear": "No hi ha memòries per netejar", + "No memories yet": "", "No model IDs": "No hi ha IDs de model", "No models found": "No s'han trobat models", "No models selected": "No s'ha seleccionat cap model", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Només es permeten caràcters alfanumèrics i guions", "Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la comanda.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Només es poden editar col·leccions, crea una nova base de coneixement per editar/afegir documents.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Només es permeten arxius markdown", "Only select users and groups with permission can access": "Només hi poden accedir usuaris i grups seleccionats amb permís", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! Sembla que l'URL no és vàlida. Si us plau, revisa-la i torna-ho a provar.", @@ -1139,10 +1148,6 @@ "Open new chat": "Obre un xat nou", "Open Sidebar": "Obre la barra lateral", "Open User Profile Menu": "Obre el menú de perfil d'usuari", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover pot utilitzar eines de servidors OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover utilitza faster-whisper internament.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilitza incrustacions de SpeechT5 i CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versió d'CyberLover (v{{OPEN_WEBUI_VERSION}}) és inferior a la versió requerida (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API d'OpenAI", "OpenAI API Config": "Configuració de l'API d'OpenAI", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index e02ea20ca4..fc70a25665 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Ngitngit", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! ", @@ -1139,10 +1148,6 @@ "Open new chat": "Ablihi ang bag-ong diskusyon", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "OpenAI API", "OpenAI API Config": "", diff --git a/src/lib/i18n/locales/cs-CZ/translation.json b/src/lib/i18n/locales/cs-CZ/translation.json index fbd25709b8..3d8dad0a86 100644 --- a/src/lib/i18n/locales/cs-CZ/translation.json +++ b/src/lib/i18n/locales/cs-CZ/translation.json @@ -63,6 +63,7 @@ "Add text content": "Přidat textový obsah", "Add User": "Přidat uživatele", "Add User Group": "Přidat skupinu uživatelů", + "Add your first memory": "", "Additional Config": "Dodatečná konfigurace", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Další možnosti konfigurace pro marker. Měl by to být řetězec JSON s páry klíč-hodnota. Například: '{\"key\": \"value\"}'. Podporované klíče zahrnují: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "Vlastní popis povolen", "Custom Parameter Name": "Název vlastního parametru", "Custom Parameter Value": "Hodnota vlastního parametru", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover může používat nástroje poskytované jakýmkoli serverem OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover interně používá faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover používá SpeechT5 a vektorizaci mluvčích CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verze CyberLover (v{{OPEN_WEBUI_VERSION}}) je nižší než požadovaná verze (v{{REQUIRED_VERSION}})", "Danger Zone": "Nebezpečná zóna", "Dark": "Tmavý", "Data Controls": "Správa dat", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Efekt prolínání pro streamovaný text", "Failed to add file.": "Nepodařilo se přidat soubor.", "Failed to connect to {{URL}} OpenAPI tool server": "Nepodařilo se připojit k serveru nástrojů OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Nepodařilo se zkopírovat odkaz", "Failed to create API Key.": "Nepodařilo se vytvořit API klíč.", "Failed to delete note": "Nepodařilo se smazat poznámku", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "Nepodařilo se načíst náhled konverzace", "Failed to load file content.": "Nepodařilo se načíst obsah souboru.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Nepodařilo se přečíst obsah schránky", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Nebyl nalezeno žádné inferenční jádro s podporou správy", "No knowledge found": "Nebyly nalezeny žádné znalosti", "No memories to clear": "Žádné vzpomínky k vymazání", + "No memories yet": "", "No model IDs": "Žádná ID modelů", "No models found": "Nebyly nalezeny žádné modely", "No models selected": "Nebyly vybrány žádné modely", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Jsou povoleny pouze alfanumerické znaky a pomlčky", "Only alphanumeric characters and hyphens are allowed in the command string.": "V řetězci příkazu jsou povoleny pouze alfanumerické znaky a pomlčky.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Lze upravovat pouze kolekce, pro úpravu/přidání dokumentů vytvořte novou znalostní bázi.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Jsou povoleny pouze soubory markdown", "Only select users and groups with permission can access": "Přístup mají pouze vybraní uživatelé a skupiny s oprávněním", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Jejda! Zdá se, že URL adresa je neplatná. Zkontrolujte ji prosím a zkuste to znovu.", @@ -1139,10 +1148,6 @@ "Open new chat": "Otevřít novou konverzaci", "Open Sidebar": "Otevřít postranní panel", "Open User Profile Menu": "Otevřít nabídku profilu uživatele", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover může používat nástroje poskytované jakýmkoli serverem OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover interně používá faster-whisper.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover používá SpeechT5 a vektorizaci mluvčích CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verze CyberLover (v{{OPEN_WEBUI_VERSION}}) je nižší než požadovaná verze (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Konfigurace OpenAI API", diff --git a/src/lib/i18n/locales/da-DK/translation.json b/src/lib/i18n/locales/da-DK/translation.json index a4f31623eb..2c1246027a 100644 --- a/src/lib/i18n/locales/da-DK/translation.json +++ b/src/lib/i18n/locales/da-DK/translation.json @@ -63,6 +63,7 @@ "Add text content": "Tilføj tekst", "Add User": "Tilføj bruger", "Add User Group": "Tilføj Brugergruppe", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "Brugerdefineret beskrivelse aktiveret", "Custom Parameter Name": "Brugerdefineret parameternavn", "Custom Parameter Value": "Brugerdefineret parameterværdi", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kan bruge værktøjer leveret af enhver OpenAPI server.", + "CyberLover uses faster-whisper internally.": "CyberLover bruger faster-whisper internt.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover bruger SpeechT5 og CMU Arctic taler embeddings.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-version (v{{OPEN_WEBUI_VERSION}}) er lavere end den krævede version (v{{REQUIRED_VERSION}})", "Danger Zone": "Danger Zone", "Dark": "Mørk", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Fade-effekt for streaming tekst", "Failed to add file.": "Kunne ikke tilføje fil.", "Failed to connect to {{URL}} OpenAPI tool server": "Kunne ikke forbinde til {{URL}} OpenAPI tool server", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Kunne ikke kopiere link", "Failed to create API Key.": "Kunne ikke oprette API-nøgle.", "Failed to delete note": "Kunne ikke slette note", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "Kunne ikke indlæse chat forhåndsvisning", "Failed to load file content.": "Kunne ikke indlæse filindhold.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Kunne ikke læse indholdet af udklipsholderen", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Ingen inference-engine med støtte til administration fundet", "No knowledge found": "Ingen viden fundet", "No memories to clear": "Ingen hukommelser at ryde", + "No memories yet": "", "No model IDs": "Ingen model-ID'er", "No models found": "Ingen modeller fundet", "No models selected": "Ingen modeller valgt", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Kun alfanumeriske tegn og bindestreger er tilladt", "Only alphanumeric characters and hyphens are allowed in the command string.": "Kun alfanumeriske tegn og bindestreger er tilladt i kommandostrengen.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Kun samlinger kan redigeres, opret en ny vidensbase for at redigere/tilføje dokumenter.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Kun markdown-filer er tilladt", "Only select users and groups with permission can access": "Kun valgte brugere og grupper med tilladelse kan tilgå", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! URL'en ser ud til at være ugyldig. Tjek den igen, og prøv igen.", @@ -1139,10 +1148,6 @@ "Open new chat": "Åbn ny chat", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kan bruge værktøjer leveret af enhver OpenAPI server.", - "CyberLover uses faster-whisper internally.": "CyberLover bruger faster-whisper internt.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover bruger SpeechT5 og CMU Arctic taler embeddings.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-version (v{{OPEN_WEBUI_VERSION}}) er lavere end den krævede version (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API-konfiguration", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index c5e46f080d..35e5ff38fa 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -63,6 +63,7 @@ "Add text content": "Textinhalt hinzufügen", "Add User": "Benutzer hinzufügen", "Add User Group": "Benutzergruppe hinzufügen", + "Add your first memory": "", "Additional Config": "Zusätzliche Konfiguration", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Zusätzliche Konfigurationsoptionen für den Marker. Dies sollte eine JSON-Zeichenfolge mit Schlüssel-Wert-Paaren sein. Zum Beispiel '{\"key\": \"value\"}'. Unterstützte Schlüssel sind: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "Weitere Parameter", @@ -365,6 +366,10 @@ "Custom description enabled": "Benutzerdefinierte Beschreibung aktiviert", "Custom Parameter Name": "Benutzerdefinierter Parameter Name", "Custom Parameter Value": "Benutzerdefinierter Parameter Wert", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kann Werkzeuge verwenden, die von irgendeinem OpenAPI-Server bereitgestellt werden.", + "CyberLover uses faster-whisper internally.": "CyberLover verwendet intern faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover verwendet SpeechT5 und CMU Arctic Sprecher-Embeddings.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Die installierte Open-WebUI-Version (v{{OPEN_WEBUI_VERSION}}) ist niedriger als die erforderliche Version (v{{REQUIRED_VERSION}})", "Danger Zone": "Gefahrenzone", "Dark": "Dunkel", "Data Controls": "Datenverwaltung", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Überblendeffekt für Text-Streaming", "Failed to add file.": "Fehler beim Hinzufügen der Datei.", "Failed to connect to {{URL}} OpenAPI tool server": "Verbindung zum OpenAPI-Toolserver {{URL}} fehlgeschlagen", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Fehler beim kopieren des Links", "Failed to create API Key.": "Fehler beim Erstellen des API-Schlüssels.", "Failed to delete note": "Notiz konnte nicht gelöscht werden", @@ -704,6 +710,7 @@ "Failed to import models": "Fehler beim Importieren der Modelle", "Failed to load chat preview": "Chat-Vorschau konnte nicht geladen werden", "Failed to load file content.": "Fehler beim Laden des Dateiinhalts.", + "Failed to load memories": "", "Failed to move chat": "Chat konnte nicht verschoben werden", "Failed to read clipboard contents": "Fehler beim Lesen des Inhalts der Zwischenablage.", "Failed to render diagram": "Diagramm konnte nicht gerendert werden", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Keine Inferenz-Engine mit Management-Unterstützung gefunden", "No knowledge found": "Kein Wissen gefunden", "No memories to clear": "Keine Erinnerungen zum Entfernen", + "No memories yet": "", "No model IDs": "Keine Modell-IDs", "No models found": "Keine Modelle gefunden", "No models selected": "Keine Modelle ausgewählt", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Nur alphanumerische Zeichen und Bindestriche sind erlaubt", "Only alphanumeric characters and hyphens are allowed in the command string.": "In der Befehlszeichenfolge sind nur alphanumerische Zeichen und Bindestriche erlaubt.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Nur Sammlungen können bearbeitet werden. Erstellen Sie eine neue Wissensbasis, um Dokumente zu bearbeiten/hinzuzufügen.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Nur Markdown-Dateien sind erlaubt", "Only select users and groups with permission can access": "Nur ausgewählte Benutzer und Gruppen mit Berechtigung können darauf zugreifen", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppla! Es scheint, dass die URL ungültig ist. Bitte überprüfen Sie diese und versuchen Sie es erneut.", @@ -1139,10 +1148,6 @@ "Open new chat": "Neuen Chat öffnen", "Open Sidebar": "Seitenleiste öffnen", "Open User Profile Menu": "Benutzerprofilmenü öffnen", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kann Werkzeuge verwenden, die von irgendeinem OpenAPI-Server bereitgestellt werden.", - "CyberLover uses faster-whisper internally.": "CyberLover verwendet intern faster-whisper.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover verwendet SpeechT5 und CMU Arctic Sprecher-Embeddings.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Die installierte Open-WebUI-Version (v{{OPEN_WEBUI_VERSION}}) ist niedriger als die erforderliche Version (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI-API", "OpenAI API Config": "OpenAI-API-Konfiguration", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 7c110cc807..3563d6129b 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Dark", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Failed to read clipboard borks", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Only wow characters and hyphens are allowed in the bork string.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Looks like the URL is invalid. Please double-check and try again.", @@ -1139,10 +1148,6 @@ "Open new chat": "Open new bark", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "OpenAI API", "OpenAI API Config": "", diff --git a/src/lib/i18n/locales/el-GR/translation.json b/src/lib/i18n/locales/el-GR/translation.json index 39e2c4cead..e8391db982 100644 --- a/src/lib/i18n/locales/el-GR/translation.json +++ b/src/lib/i18n/locales/el-GR/translation.json @@ -63,6 +63,7 @@ "Add text content": "Προσθήκη κειμένου", "Add User": "Προσθήκη Χρήστη", "Add User Group": "Προσθήκη Ομάδας Χρηστών", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "Το CyberLover χρησιμοποιεί το faster-whisper εσωτερικά.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Το CyberLover χρησιμοποιεί τα SpeechT5 και CMU Arctic embeddings ομιλητών.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Η έκδοση CyberLover (v{{OPEN_WEBUI_VERSION}}) είναι χαμηλότερη από την απαιτούμενη έκδοση (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Σκούρο", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Αποτυχία προσθήκης αρχείου.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Αποτυχία δημιουργίας Κλειδιού API.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Αποτυχία ανάγνωσης περιεχομένων πρόχειρου", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "Δεν βρέθηκε γνώση", "No memories to clear": "", + "No memories yet": "", "No model IDs": "Δεν υπάρχουν IDs μοντέλων", "No models found": "Δεν βρέθηκαν μοντέλα", "No models selected": "Δεν έχουν επιλεγεί μοντέλα", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Επιτρέπονται μόνο αλφαριθμητικοί χαρακτήρες και παύλες", "Only alphanumeric characters and hyphens are allowed in the command string.": "Επιτρέπονται μόνο αλφαριθμητικοί χαρακτήρες και παύλες στο string της εντολής.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Μόνο συλλογές μπορούν να επεξεργαστούν, δημιουργήστε μια νέα βάση γνώσης για επεξεργασία/προσθήκη εγγράφων.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Μόνο επιλεγμένοι χρήστες και ομάδες με άδεια μπορούν να έχουν πρόσβαση", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ωχ! Φαίνεται ότι το URL είναι μη έγκυρο. Παρακαλώ ελέγξτε ξανά και δοκιμάστε.", @@ -1139,10 +1148,6 @@ "Open new chat": "Άνοιγμα νέας συνομιλίας", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "Το CyberLover χρησιμοποιεί το faster-whisper εσωτερικά.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Το CyberLover χρησιμοποιεί τα SpeechT5 και CMU Arctic embeddings ομιλητών.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Η έκδοση CyberLover (v{{OPEN_WEBUI_VERSION}}) είναι χαμηλότερη από την απαιτούμενη έκδοση (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Διαμόρφωση API OpenAI", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 5d982c8a1b..d9cd79f70a 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", @@ -1139,10 +1148,6 @@ "Open new chat": "", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "", "OpenAI API Config": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 99604c1ba5..b3e3c5c222 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", @@ -1139,10 +1148,6 @@ "Open new chat": "", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "", "OpenAI API Config": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 0cacab6550..0c85e8efbe 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -63,6 +63,7 @@ "Add text content": "Añade contenido de texto", "Add User": "Añadir Usuario", "Add User Group": "Añadir grupo de usuarios", + "Add your first memory": "", "Additional Config": "Config Adicional", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Opciones de configuración adicionales para Marker. Debe ser una cadena JSON con pares clave-valor. Por ejemplo, '{\"key\": \"value\"}'. Las claves soportadas son: disabled_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "Parámetros Adicionales", @@ -365,6 +366,10 @@ "Custom description enabled": "Descripción personalizada activada", "Custom Parameter Name": "Nombre del Parámetro Personalizado", "Custom Parameter Value": "Valor del Parámetro Personalizado", + "CyberLover can use tools provided by any OpenAPI server.": "Open-WebUI puede usar herramientas proporcionadas por cualquier servidor OpenAPI", + "CyberLover uses faster-whisper internally.": "Open-WebUI usa faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Open-WebUI usa SpeechT5 y la incrustración de locutores de CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versión de Open-WebUI (v{{OPEN_WEBUI_VERSION}}) es inferior a la versión (v{{REQUIRED_VERSION}}) requerida", "Danger Zone": "Zona Peligrosa", "Dark": "Oscuro", "Data Controls": "Controles de Datos", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Efecto de desvanecimiento para texto transmitido (streaming)", "Failed to add file.": "Fallo al añadir el archivo.", "Failed to connect to {{URL}} OpenAPI tool server": "Fallo al conectar al servidor de herramientas {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Fallo al copiar enlace", "Failed to create API Key.": "Fallo al crear la Clave API.", "Failed to delete note": "Fallo al eliminar nota", @@ -704,6 +710,7 @@ "Failed to import models": "Fallo al importar modelos", "Failed to load chat preview": "Fallo al cargar la previsualización del chat", "Failed to load file content.": "Fallo al cargar el contenido del archivo", + "Failed to load memories": "", "Failed to move chat": "Fallo al mover el chat", "Failed to read clipboard contents": "Fallo al leer el contenido del portapapeles", "Failed to render diagram": "Fallo al renderizar el diagrama", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "No se encontró un motor de inferencia que soporte gestión", "No knowledge found": "No se encontró ningún conocimiento", "No memories to clear": "No hay memorias para borrar", + "No memories yet": "", "No model IDs": "No hay IDs de modelo", "No models found": "No se encontraron modelos", "No models selected": "No se seleccionaron modelos", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Sólo están permitidos caracteres alfanuméricos y guiones", "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo están permitidos en la cadena de comandos caracteres alfanuméricos y guiones.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo se pueden editar las colecciones, para añadir/editar documentos hay que crear una nueva base de conocimientos", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Solo están permitidos archivos markdown", "Only select users and groups with permission can access": "Solo pueden acceder los usuarios y grupos con permiso", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡vaya! Parece que la URL es inválida. Por favor, revisala y reintenta de nuevo.", @@ -1139,10 +1148,6 @@ "Open new chat": "Abrir nuevo chat", "Open Sidebar": "Abrir Barra Lateral", "Open User Profile Menu": "Abrir Menu de Perfiles de Usuario", - "CyberLover can use tools provided by any OpenAPI server.": "Open-WebUI puede usar herramientas proporcionadas por cualquier servidor OpenAPI", - "CyberLover uses faster-whisper internally.": "Open-WebUI usa faster-whisper internamente.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Open-WebUI usa SpeechT5 y la incrustración de locutores de CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versión de Open-WebUI (v{{OPEN_WEBUI_VERSION}}) es inferior a la versión (v{{REQUIRED_VERSION}}) requerida", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Config API OpenAI", diff --git a/src/lib/i18n/locales/et-EE/translation.json b/src/lib/i18n/locales/et-EE/translation.json index 6ba61c4922..078107cb1e 100644 --- a/src/lib/i18n/locales/et-EE/translation.json +++ b/src/lib/i18n/locales/et-EE/translation.json @@ -63,6 +63,7 @@ "Add text content": "Lisa tekstisisu", "Add User": "Lisa kasutaja", "Add User Group": "Lisa kasutajagrupp", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover kasutab sisemiselt faster-whisper'it.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover kasutab SpeechT5 ja CMU Arctic kõneleja manustamisi.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover versioon (v{{OPEN_WEBUI_VERSION}}) on madalam kui nõutav versioon (v{{REQUIRED_VERSION}})", "Danger Zone": "Ohutsoon", "Dark": "Tume", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Faili lisamine ebaõnnestus.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "API võtme loomine ebaõnnestus.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Lõikelaua sisu lugemine ebaõnnestus", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Järeldusmootorit haldamise toega ei leitud", "No knowledge found": "Teadmisi ei leitud", "No memories to clear": "Pole mälestusi, mida kustutada", + "No memories yet": "", "No model IDs": "Mudeli ID-d puuduvad", "No models found": "Mudeleid ei leitud", "No models selected": "Mudeleid pole valitud", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Lubatud on ainult tähtede-numbrite kombinatsioonid ja sidekriipsud", "Only alphanumeric characters and hyphens are allowed in the command string.": "Käsustringis on lubatud ainult tähtede-numbrite kombinatsioonid ja sidekriipsud.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Muuta saab ainult kogusid, dokumentide muutmiseks/lisamiseks looge uus teadmiste baas.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Juurdepääs on ainult valitud õigustega kasutajatel ja gruppidel", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oih! URL tundub olevat vigane. Palun kontrollige ja proovige uuesti.", @@ -1139,10 +1148,6 @@ "Open new chat": "Ava uus vestlus", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover kasutab sisemiselt faster-whisper'it.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover kasutab SpeechT5 ja CMU Arctic kõneleja manustamisi.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover versioon (v{{OPEN_WEBUI_VERSION}}) on madalam kui nõutav versioon (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API seadistus", diff --git a/src/lib/i18n/locales/eu-ES/translation.json b/src/lib/i18n/locales/eu-ES/translation.json index 3592933f30..9acc2d5a12 100644 --- a/src/lib/i18n/locales/eu-ES/translation.json +++ b/src/lib/i18n/locales/eu-ES/translation.json @@ -63,6 +63,7 @@ "Add text content": "Gehitu testu edukia", "Add User": "Gehitu Erabiltzailea", "Add User Group": "Gehitu Erabiltzaile Taldea", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover-k faster-whisper erabiltzen du barnean.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover-k SpeechT5 eta CMU Arctic hiztun txertaketak erabiltzen ditu.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover bertsioa (v{{OPEN_WEBUI_VERSION}}) beharrezko bertsioa (v{{REQUIRED_VERSION}}) baino baxuagoa da", "Danger Zone": "", "Dark": "Iluna", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Huts egin du fitxategia gehitzean.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Huts egin du API Gakoa sortzean.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Huts egin du arbelaren edukia irakurtzean", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "Ez da ezagutzarik aurkitu", "No memories to clear": "", + "No memories yet": "", "No model IDs": "Ez dago modelo IDrik", "No models found": "Ez da modelorik aurkitu", "No models selected": "Ez da modelorik hautatu", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Karaktere alfanumerikoak eta marratxoak soilik onartzen dira", "Only alphanumeric characters and hyphens are allowed in the command string.": "Karaktere alfanumerikoak eta marratxoak soilik onartzen dira komando katean.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Bildumak soilik edita daitezke, sortu ezagutza-base berri bat dokumentuak editatzeko/gehitzeko.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Baimena duten erabiltzaile eta talde hautatuek soilik sar daitezke", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! URLa ez da baliozkoa. Mesedez, egiaztatu eta saiatu berriro.", @@ -1139,10 +1148,6 @@ "Open new chat": "Ireki txat berria", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover-k faster-whisper erabiltzen du barnean.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover-k SpeechT5 eta CMU Arctic hiztun txertaketak erabiltzen ditu.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover bertsioa (v{{OPEN_WEBUI_VERSION}}) beharrezko bertsioa (v{{REQUIRED_VERSION}}) baino baxuagoa da", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfigurazioa", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 8b198078f3..b0ab9d2e20 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -63,6 +63,7 @@ "Add text content": "افزودن محتوای متنی", "Add User": "افزودن کاربر", "Add User Group": "افزودن گروه کاربری", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover می\u200cتواند از ابزارهای ارائه شده توسط هر سرور OpenAPI استفاده کند.", + "CyberLover uses faster-whisper internally.": "CyberLover به صورت داخلی از faster-whisper استفاده می\u200cکند.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover از SpeechT5 و جاسازی\u200cهای گوینده CMU Arctic استفاده می\u200cکند.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "نسخه CyberLover (v{{OPEN_WEBUI_VERSION}}) پایین\u200cتر از نسخه مورد نیاز (v{{REQUIRED_VERSION}}) است", "Danger Zone": "منطقه خطر", "Dark": "تیره", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "خطا در افزودن پرونده", "Failed to connect to {{URL}} OpenAPI tool server": "خطا در اتصال به سرور ابزار OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "ایجاد کلید API با خطا مواجه شد.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "خواندن محتوای کلیپ بورد ناموفق بود", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "موتور استنتاج با پشتیبانی مدیریت یافت نشد", "No knowledge found": "دانشی یافت نشد", "No memories to clear": "حافظه\u200cای برای پاک کردن وجود ندارد", + "No memories yet": "", "No model IDs": "شناسه مدلی وجود ندارد", "No models found": "مدلی یافت نشد", "No models selected": "مدلی انتخاب نشده است", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "فقط حروف الفبا، اعداد و خط تیره مجاز هستند", "Only alphanumeric characters and hyphens are allowed in the command string.": "فقط کاراکترهای الفبایی و خط فاصله در رشته فرمان مجاز هستند.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "فقط مجموعه\u200cها قابل ویرایش هستند، برای ویرایش/افزودن اسناد یک پایگاه دانش جدید ایجاد کنید.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "فقط کاربران و گروه\u200cهای دارای مجوز می\u200cتوانند دسترسی داشته باشند", "Oops! Looks like the URL is invalid. Please double-check and try again.": "اوه! به نظر می رسد URL نامعتبر است. لطفاً دوباره بررسی کنید و دوباره امتحان کنید.", @@ -1139,10 +1148,6 @@ "Open new chat": "باز کردن گپ جدید", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover می\u200cتواند از ابزارهای ارائه شده توسط هر سرور OpenAPI استفاده کند.", - "CyberLover uses faster-whisper internally.": "CyberLover به صورت داخلی از faster-whisper استفاده می\u200cکند.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover از SpeechT5 و جاسازی\u200cهای گوینده CMU Arctic استفاده می\u200cکند.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "نسخه CyberLover (v{{OPEN_WEBUI_VERSION}}) پایین\u200cتر از نسخه مورد نیاز (v{{REQUIRED_VERSION}}) است", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API تنظیمات", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index f6c681558b..6bd369fd39 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -63,6 +63,7 @@ "Add text content": "Lisää tekstisisältöä", "Add User": "Lisää käyttäjä", "Add User Group": "Lisää käyttäjäryhmä", + "Add your first memory": "", "Additional Config": "Lisäasetukset", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "Lisäparametrit", @@ -365,6 +366,10 @@ "Custom description enabled": "Muokautetut kuvaukset käytössä", "Custom Parameter Name": "Mukautetun parametrin nimi", "Custom Parameter Value": "Mukautetun parametrin arvo", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover voi käyttää minkä tahansa OpenAPI-palvelimen tarjoamia työkaluja.", + "CyberLover uses faster-whisper internally.": "CyberLover käyttää faster-whisperia sisäisesti.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover käyttää SpeechT5:tä ja CMU Arctic -kaiuttimen upotuksia.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover -versio (v{{OPEN_WEBUI_VERSION}}) on alempi kuin vaadittu versio (v{{REQUIRED_VERSION}})", "Danger Zone": "Vaara-alue", "Dark": "Tumma", "Data Controls": "Datan hallinta", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Häivytystehoste suoratoistetulle tekstille", "Failed to add file.": "Tiedoston lisääminen epäonnistui.", "Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Linkin kopiointi epäonnistui", "Failed to create API Key.": "API-avaimen luonti epäonnistui.", "Failed to delete note": "Muistiinpanon poistaminen epäonnistui", @@ -704,6 +710,7 @@ "Failed to import models": "Mallien tuonti epäonnistui", "Failed to load chat preview": "Keskustelun esikatselun lataaminen epäonnistui", "Failed to load file content.": "Tiedoston sisällön lataaminen epäonnistui.", + "Failed to load memories": "", "Failed to move chat": "Keskustelun siirto epäonnistui", "Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui", "Failed to render diagram": "Diagrammin renderöinti epäonnistui", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "Tietoa ei löytynyt", "No memories to clear": "Ei muistia tyhjennettäväksi", + "No memories yet": "", "No model IDs": "Ei mallitunnuksia", "No models found": "Malleja ei löytynyt", "No models selected": "Malleja ei ole valittu", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja", "Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Vain kokoelmia voi muokata, luo uusi tietokanta muokataksesi/lisätäksesi asiakirjoja.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Vain markdown tiedostot ovat sallittuja", "Only select users and groups with permission can access": "Vain valitut käyttäjät ja ryhmät, joilla on käyttöoikeus, pääsevät käyttämään", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että verkko-osoite on virheellinen. Tarkista se ja yritä uudelleen.", @@ -1139,10 +1148,6 @@ "Open new chat": "Avaa uusi keskustelu", "Open Sidebar": "Avaa sivupalkki", "Open User Profile Menu": "Avaa käyttäjäprofiili ikkuna", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover voi käyttää minkä tahansa OpenAPI-palvelimen tarjoamia työkaluja.", - "CyberLover uses faster-whisper internally.": "CyberLover käyttää faster-whisperia sisäisesti.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover käyttää SpeechT5:tä ja CMU Arctic -kaiuttimen upotuksia.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover -versio (v{{OPEN_WEBUI_VERSION}}) on alempi kuin vaadittu versio (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API -asetukset", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 6ca659309b..3c97aa1d5d 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -63,6 +63,7 @@ "Add text content": "Ajouter du contenu textuel", "Add User": "Ajouter un utilisateur", "Add User Group": "Ajouter un groupe d'utilisateurs", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "Description personnalisée activée", "Custom Parameter Name": "Nom du réglage personnalisé", "Custom Parameter Value": "Valeur du réglage personnalisé", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilise faster-whisper en interne.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version CyberLover (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", "Danger Zone": "Zone de danger", "Dark": "Sombre", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Échec de l'ajout du fichier.", "Failed to connect to {{URL}} OpenAPI tool server": "Échec de la connexion au serveur d'outils OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Échec de la copie du lien", "Failed to create API Key.": "Échec de la création de la clé API.", "Failed to delete note": "Échec de la délétion de la note", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "Échec du chargement du contenu du fichier", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Aucun moteur d'inférence avec support trouvé", "No knowledge found": "Aucune connaissance trouvée", "No memories to clear": "Aucun souvenir à effacer", + "No memories yet": "", "No model IDs": "Aucun ID de modèle", "No models found": "Aucun modèle trouvé", "No models selected": "Aucun modèle sélectionné", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Seuls les caractères alphanumériques et les tirets sont autorisés", "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Seules les collections peuvent être modifiées, créez une nouvelle base de connaissance pour modifier/ajouter des documents.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Seul les fichiers markdown sont autorisés", "Only select users and groups with permission can access": "Seuls les utilisateurs et groupes autorisés peuvent accéder", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! Il semble que l'URL soit invalide. Veuillez vérifier à nouveau et réessayer.", @@ -1139,10 +1148,6 @@ "Open new chat": "Ouvrir une nouvelle conversation", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover utilise faster-whisper en interne.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version CyberLover (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API compatibles OpenAI", "OpenAI API Config": "Configuration de l'API OpenAI", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 2d7895086c..faee3377ea 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -63,6 +63,7 @@ "Add text content": "Ajouter du contenu textuel", "Add User": "Ajouter un utilisateur", "Add User Group": "Ajouter un groupe d'utilisateurs", + "Add your first memory": "", "Additional Config": "Configuration supplémentaire", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "Description personnalisée activée", "Custom Parameter Name": "Nom du réglage personnalisé", "Custom Parameter Value": "Valeur du réglage personnalisé", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilise faster-whisper en interne.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version CyberLover (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", "Danger Zone": "Zone de danger", "Dark": "Sombre", "Data Controls": "Contrôles des données", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Effet de fondu pour le texte en streaming", "Failed to add file.": "Échec de l'ajout du fichier.", "Failed to connect to {{URL}} OpenAPI tool server": "Échec de la connexion au serveur d'outils OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Échec de la copie du lien", "Failed to create API Key.": "Échec de la création de la clé API.", "Failed to delete note": "Échec de la délétion de la note", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "Échec du chargement de l'aperçu du chat", "Failed to load file content.": "Échec du chargement du contenu du fichier", + "Failed to load memories": "", "Failed to move chat": "Échec du déplacement du chat", "Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Aucun moteur d'inférence avec support trouvé", "No knowledge found": "Aucune connaissance trouvée", "No memories to clear": "Aucun souvenir à effacer", + "No memories yet": "", "No model IDs": "Aucun ID de modèle", "No models found": "Aucun modèle trouvé", "No models selected": "Aucun modèle sélectionné", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Seuls les caractères alphanumériques et les tirets sont autorisés", "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Seules les collections peuvent être modifiées, créez une nouvelle base de connaissance pour modifier/ajouter des documents.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Seul les fichiers markdown sont autorisés", "Only select users and groups with permission can access": "Seuls les utilisateurs et groupes autorisés peuvent accéder", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! Il semble que l'URL soit invalide. Veuillez vérifier à nouveau et réessayer.", @@ -1139,10 +1148,6 @@ "Open new chat": "Ouvrir une nouvelle conversation", "Open Sidebar": "Ouvrir la barre latérale", "Open User Profile Menu": "Ouvrir le menu du profil utilisateur", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover peut utiliser les outils fournis par n'importe quel serveur OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover utilise faster-whisper en interne.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilise SpeechT5 et les embeddings de locuteur CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La version CyberLover (v{{OPEN_WEBUI_VERSION}}) est inférieure à la version requise (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API compatibles OpenAI", "OpenAI API Config": "Configuration de l'API OpenAI", diff --git a/src/lib/i18n/locales/gl-ES/translation.json b/src/lib/i18n/locales/gl-ES/translation.json index 08f663d455..1efeebf1b3 100644 --- a/src/lib/i18n/locales/gl-ES/translation.json +++ b/src/lib/i18n/locales/gl-ES/translation.json @@ -63,6 +63,7 @@ "Add text content": "Añade contido de texto", "Add User": "Agregar Usuario", "Add User Group": "Agregar usuario al grupo", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover usa faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover usa SpeechT5 y embeddings de locutores CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Aversión de CyberLover (v{{OPEN_WEBUI_VERSION}}) es inferior a aversión requerida (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Oscuro", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Non pudo agregarse o Arquivo.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Non pudo xerarse a chave API.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Non pudo Lerse o contido do portapapeles", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "No se encontró un motor de inferencia con soporte de gestión", "No knowledge found": "No se encontrou ningún coñecemento", "No memories to clear": "Non hay memorias que limpar", + "No memories yet": "", "No model IDs": "Non ten IDs de modelos", "No models found": "No se encontraron modelos", "No models selected": "No se seleccionaron modelos", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Sólo se permiten caracteres alfanuméricos y guiones", "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo se permiten caracteres alfanuméricos y guiones en a cadena de comando.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo se pueden editar as coleccions, xerar unha nova base de coñecementos para editar / añadir documentos", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Solo os usuarios y grupos con permiso pueden acceder", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡Ups! Parece que a URL no es válida. Vuelva a verificar e inténtelo novamente.", @@ -1139,10 +1148,6 @@ "Open new chat": "Abrir novo chat", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover usa faster-whisper internamente.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover usa SpeechT5 y embeddings de locutores CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Aversión de CyberLover (v{{OPEN_WEBUI_VERSION}}) es inferior a aversión requerida (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Configuración de OpenAI API", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 6a13d39c8e..27a275e0f8 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "הוסף משתמש", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "כהה", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "יצירת מפתח API נכשלה.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "רק תווים אלפאנומריים ומקפים מותרים במחרוזת הפקודה.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "אופס! נראה שהכתובת URL אינה תקינה. אנא בדוק שוב ונסה שנית.", @@ -1139,10 +1148,6 @@ "Open new chat": "פתח צ'אט חדש", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API של OpenAI", "OpenAI API Config": "תצורת API של OpenAI", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index c15c55aaf6..b10fc3e781 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "उपयोगकर्ता जोड़ें", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "डार्क", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "कमांड स्ट्रिंग में केवल अल्फ़ान्यूमेरिक वर्ण और हाइफ़न की अनुमति है।", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "उफ़! ऐसा लगता है कि यूआरएल अमान्य है. कृपया दोबारा जांचें और पुनः प्रयास करें।", @@ -1139,10 +1148,6 @@ "Open new chat": "नई चैट खोलें", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API कॉन्फिग", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 8782a43d46..4d677ee38b 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Dodaj korisnika", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Tamno", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Neuspješno stvaranje API ključa.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Samo alfanumerički znakovi i crtice su dopušteni u naredbenom nizu.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Izgleda da je URL nevažeći. Molimo provjerite ponovno i pokušajte ponovo.", @@ -1139,10 +1148,6 @@ "Open new chat": "Otvorite novi razgovor", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguracija", diff --git a/src/lib/i18n/locales/hu-HU/translation.json b/src/lib/i18n/locales/hu-HU/translation.json index 31206dc6d1..0948368c67 100644 --- a/src/lib/i18n/locales/hu-HU/translation.json +++ b/src/lib/i18n/locales/hu-HU/translation.json @@ -63,6 +63,7 @@ "Add text content": "Szöveges tartalom hozzáadása", "Add User": "Felhasználó hozzáadása", "Add User Group": "Felhasználói csoport hozzáadása", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "Az CyberLover bármely OpenAPI szerver által biztosított eszközöket használhat.", + "CyberLover uses faster-whisper internally.": "Az CyberLover belsőleg a faster-whispert használja.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Az CyberLover a SpeechT5-öt és a CMU Arctic hangszóró beágyazásokat használja.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Az CyberLover verzió (v{{OPEN_WEBUI_VERSION}}) alacsonyabb, mint a szükséges verzió (v{{REQUIRED_VERSION}})", "Danger Zone": "Veszélyzóna", "Dark": "Sötét", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Nem sikerült hozzáadni a fájlt.", "Failed to connect to {{URL}} OpenAPI tool server": "Nem sikerült csatlakozni a {{URL}} OpenAPI eszköszerverhez", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Nem sikerült létrehozni az API kulcsot.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Nem sikerült olvasni a vágólap tartalmát", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Nem található kezelést támogató következtetési motor", "No knowledge found": "Nem található tudásbázis", "No memories to clear": "Nincs törlendő memória", + "No memories yet": "", "No model IDs": "Nincs modell azonosító", "No models found": "Nem található modell", "No models selected": "Nincs kiválasztott modell", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Csak alfanumerikus karakterek és kötőjelek engedélyezettek", "Only alphanumeric characters and hyphens are allowed in the command string.": "Csak alfanumerikus karakterek és kötőjelek engedélyezettek a parancssorban.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Csak gyűjtemények szerkeszthetők, hozzon létre új tudásbázist dokumentumok szerkesztéséhez/hozzáadásához.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Csak a kiválasztott, engedéllyel rendelkező felhasználók és csoportok férhetnek hozzá", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppá! Úgy tűnik, az URL érvénytelen. Kérjük, ellenőrizze és próbálja újra.", @@ -1139,10 +1148,6 @@ "Open new chat": "Új beszélgetés megnyitása", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "Az CyberLover bármely OpenAPI szerver által biztosított eszközöket használhat.", - "CyberLover uses faster-whisper internally.": "Az CyberLover belsőleg a faster-whispert használja.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Az CyberLover a SpeechT5-öt és a CMU Arctic hangszóró beágyazásokat használja.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Az CyberLover verzió (v{{OPEN_WEBUI_VERSION}}) alacsonyabb, mint a szükséges verzió (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguráció", diff --git a/src/lib/i18n/locales/id-ID/translation.json b/src/lib/i18n/locales/id-ID/translation.json index 06ca8053e9..16d769af1f 100644 --- a/src/lib/i18n/locales/id-ID/translation.json +++ b/src/lib/i18n/locales/id-ID/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Tambah Pengguna", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Gelap", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Gagal membuat API Key.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Gagal membaca konten papan klip", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Hanya karakter alfanumerik dan tanda hubung yang diizinkan dalam string perintah.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Sepertinya URL tidak valid. Mohon periksa ulang dan coba lagi.", @@ -1139,10 +1148,6 @@ "Open new chat": "Buka obrolan baru", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Konfigurasi API OpenAI", diff --git a/src/lib/i18n/locales/ie-GA/translation.json b/src/lib/i18n/locales/ie-GA/translation.json index 9a08a5c4ca..59757d5217 100644 --- a/src/lib/i18n/locales/ie-GA/translation.json +++ b/src/lib/i18n/locales/ie-GA/translation.json @@ -63,6 +63,7 @@ "Add text content": "Cuir ábhar téacs leis", "Add User": "Cuir Úsáideoir leis", "Add User Group": "Cuir Grúpa Úsáideoirí leis", + "Add your first memory": "", "Additional Config": "Cumraíocht Bhreise", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Roghanna cumraíochta breise don mharcóir. Ba chóir gur teaghrán JSON é seo le péirí eochrach-luachanna. Mar shampla, '{\"key\": \"value\"}'. I measc na n-eochracha a dtacaítear leo tá: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "Cur síos saincheaptha cumasaithe", "Custom Parameter Name": "Ainm Paraiméadair Saincheaptha", "Custom Parameter Value": "Luach Paraiméadair Saincheaptha", + "CyberLover can use tools provided by any OpenAPI server.": "Is féidir le WebUI Oscailte uirlisí a úsáid a sholáthraíonn aon fhreastalaí OpenAPI.", + "CyberLover uses faster-whisper internally.": "Úsáideann CyberLover cogar níos tapúla go hinmheánach.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann CyberLover úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})", "Danger Zone": "Crios Contúirte", "Dark": "Dorcha", "Data Controls": "Rialuithe Sonraí", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Éifeacht Céimnithe le haghaidh Sruthú Téacs", "Failed to add file.": "Theip ar an gcomhad a chur leis.", "Failed to connect to {{URL}} OpenAPI tool server": "Theip ar nascadh le {{URL}} freastalaí uirlisí OpenAPI", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Theip ar an nasc a chóipeáil", "Failed to create API Key.": "Theip ar an eochair API a chruthú.", "Failed to delete note": "Theip ar an nóta a scriosadh", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "Theip ar réamhamharc comhrá a lódáil", "Failed to load file content.": "Theip ar lódáil ábhar an chomhaid.", + "Failed to load memories": "", "Failed to move chat": "Theip ar an gcomhrá a bhogadh", "Failed to read clipboard contents": "Theip ar ábhar gearrthaisce a lé", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Níor aimsíodh aon inneall tátail le tacaíocht bhainistíochta", "No knowledge found": "Níor aimsíodh aon eolas", "No memories to clear": "Gan cuimhní cinn a ghlanadh", + "No memories yet": "", "No model IDs": "Gan aon aitheantóirí samhail", "No models found": "Níor aimsíodh samhlacha", "No models selected": "Uimh samhlacha roghnaithe", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Ní cheadaítear ach carachtair alfa-uimhriúla agus fleiscíní", "Only alphanumeric characters and hyphens are allowed in the command string.": "Ní cheadaítear ach carachtair alfauméireacha agus braithíní sa sreangán ordaithe.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Ní féidir ach bailiúcháin a chur in eagar, bonn eolais nua a chruthú chun doiciméid a chur in eagar/a chur leis.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Ní cheadaítear ach comhaid marcála síos", "Only select users and groups with permission can access": "Ní féidir ach le húsáideoirí roghnaithe agus le grúpaí a bhfuil cead acu rochtain a fháil", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Is cosúil go bhfuil an URL neamhbhailí. Seiceáil faoi dhó le do thoil agus iarracht arís.", @@ -1139,10 +1148,6 @@ "Open new chat": "Oscail comhrá nua", "Open Sidebar": "Oscail an Barra Taoibh", "Open User Profile Menu": "Oscail Roghchlár Próifíl Úsáideora", - "CyberLover can use tools provided by any OpenAPI server.": "Is féidir le WebUI Oscailte uirlisí a úsáid a sholáthraíonn aon fhreastalaí OpenAPI.", - "CyberLover uses faster-whisper internally.": "Úsáideann CyberLover cogar níos tapúla go hinmheánach.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann CyberLover úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Cumraíocht API OpenAI", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index b92026d435..aa4be9c5e7 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -63,6 +63,7 @@ "Add text content": "Aggiungi contenuto di testo", "Add User": "Aggiungi utente", "Add User Group": "Aggiungi gruppo utente", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "Nome parametro personalizzato", "Custom Parameter Value": "Valore parametro personalizzato", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover può utilizzare tool forniti da qualsiasi server OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover utilizza faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilizza le incorporazioni vocali di SpeechT5 e CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versione di CyberLover (v{{OPEN_WEBUI_VERSION}}) è inferiore alla versione richiesta (v{{REQUIRED_VERSION}})", "Danger Zone": "Zona di pericolo", "Dark": "Scuro", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Impossibile aggiungere il file.", "Failed to connect to {{URL}} OpenAPI tool server": "Impossibile connettersi al server dello strumento OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Impossibile copiare il link", "Failed to create API Key.": "Impossibile creare Chiave API.", "Failed to delete note": "Impossibile eliminare la nota", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "Impossibile caricare il contenuto del file.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Nessun motore di inferenza con supporto per la gestione trovato", "No knowledge found": "Nessuna conoscenza trovata", "No memories to clear": "Nessun ricordo da cancellare", + "No memories yet": "", "No model IDs": "Nessun ID modello", "No models found": "Nessun modello trovato", "No models selected": "Nessun modello selezionato", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Nella stringa di comando sono consentiti solo caratteri alfanumerici e trattini", "Only alphanumeric characters and hyphens are allowed in the command string.": "Nella stringa di comando sono consentiti solo caratteri alfanumerici e trattini.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Solo le collezioni possono essere modificate, crea una nuova base di conoscenza per modificare/aggiungere documenti.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Sono consentiti solo file markdown", "Only select users and groups with permission can access": "Solo gli utenti e i gruppi selezionati con autorizzazione possono accedere", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ops! Sembra che l'URL non sia valido. Si prega di ricontrollare e riprovare.", @@ -1139,10 +1148,6 @@ "Open new chat": "Apri nuova chat", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover può utilizzare tool forniti da qualsiasi server OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover utilizza faster-whisper internamente.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover utilizza le incorporazioni vocali di SpeechT5 e CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "La versione di CyberLover (v{{OPEN_WEBUI_VERSION}}) è inferiore alla versione richiesta (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configurazione API OpenAI", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 76dc08ce12..a5c5505e5d 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -63,6 +63,7 @@ "Add text content": "コンテンツを追加", "Add User": "ユーザーを追加", "Add User Group": "ユーザーグループを追加", + "Add your first memory": "", "Additional Config": "追加設定", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "markerの追加設定オプション。これはキーと値のペアを含むJSON文字列である必要があります(例: '{\"key\": \"value\"}')。次のキーに対応しています: disable_links、keep_pageheader_in_output、keep_pagefooter_in_output、filter_blank_pages、drop_repeated_text、layout_coverage_threshold、merge_threshold、height_tolerance、gap_threshold、image_threshold、min_line_length、level_count、default_level", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "カスタム説明が有効です", "Custom Parameter Name": "カスタムパラメータ名", "Custom Parameter Value": "カスタムパラメータ値", + "CyberLover can use tools provided by any OpenAPI server.": "OpenWebUI は任意のOpenAPI サーバーが提供するツールを使用できます。", + "CyberLover uses faster-whisper internally.": "OpenWebUI は内部でfaster-whisperを使用します。", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "OpenWebUI は SpeechT5とCMU Arctic スピーカー埋め込みを使用します。", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "OpenWebUI のバージョン (v{{OPEN_WEBUI_VERSION}}) は要求されたバージョン (v{{REQUIRED_VERSION}}) より低いです。", "Danger Zone": "危険地帯", "Dark": "ダーク", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "ストリームテキストのフェーディング効果", "Failed to add file.": "ファイルの追加に失敗しました。", "Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPIツールサーバーへの接続に失敗しました。", + "Failed to convert OpenAI chats": "", "Failed to copy link": "リンクのコピーに失敗しました。", "Failed to create API Key.": "APIキーの作成に失敗しました。", "Failed to delete note": "ノートの削除に失敗しました。", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "チャットプレビューを読み込めませんでした。", "Failed to load file content.": "ファイルの内容を読み込めませんでした。", + "Failed to load memories": "", "Failed to move chat": "チャットの移動に失敗しました。", "Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした。", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "管理サポートのある推論エンジンが見つかりません。", "No knowledge found": "ナレッジベースが見つかりません", "No memories to clear": "クリアするメモリがありません", + "No memories yet": "", "No model IDs": "モデルIDがありません", "No models found": "モデルが見つかりません", "No models selected": "モデルが選択されていません", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "英数字とハイフンのみが使用できます", "Only alphanumeric characters and hyphens are allowed in the command string.": "コマンド文字列には英数字とハイフンのみが使用できます。", "Only collections can be edited, create a new knowledge base to edit/add documents.": "コレクションのみ編集できます。新しいナレッジベースを作成してドキュメントを編集/追加してください。", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "マークダウンファイルのみが許可されています", "Only select users and groups with permission can access": "許可されたユーザーとグループのみがアクセスできます", "Oops! Looks like the URL is invalid. Please double-check and try again.": "おっと! URL が無効なようです。もう一度確認してやり直してください。", @@ -1139,10 +1148,6 @@ "Open new chat": "新しいチャットを開く", "Open Sidebar": "サイドバーを開く", "Open User Profile Menu": "ユーザープロフィールメニューを開く", - "CyberLover can use tools provided by any OpenAPI server.": "OpenWebUI は任意のOpenAPI サーバーが提供するツールを使用できます。", - "CyberLover uses faster-whisper internally.": "OpenWebUI は内部でfaster-whisperを使用します。", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "OpenWebUI は SpeechT5とCMU Arctic スピーカー埋め込みを使用します。", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "OpenWebUI のバージョン (v{{OPEN_WEBUI_VERSION}}) は要求されたバージョン (v{{REQUIRED_VERSION}}) より低いです。", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 設定", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 0d0b158cc1..c88d6798a2 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -63,6 +63,7 @@ "Add text content": "ტექსტური შემცველობის დამატება", "Add User": "მომხმარებლის დამატება", "Add User Group": "მომხმარებლის ჯგუფის დამატება", + "Add your first memory": "", "Additional Config": "დამატებითი კონფიგურაცია", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "დამატებითი პარამეტრები", @@ -365,6 +366,10 @@ "Custom description enabled": "მომხმარებლის აღწერები ჩართულია", "Custom Parameter Name": "მორგებული პარამეტრის სახელი", "Custom Parameter Value": "მორგებული პარამეტრის მნიშვნელობა", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "საშიში ზონა", "Dark": "მუქი", "Data Controls": "მონაცემთა კონტროლი", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "ფაილის დამატების შეცდომა.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "ბმულის კოპირება ჩავარდა", "Failed to create API Key.": "API-ის გასაღების შექმნა ჩავარდა.", "Failed to delete note": "შენიშვნის წაშლა ჩავარდა", @@ -704,6 +710,7 @@ "Failed to import models": "მოდელების შემოტანა ჩავარდა", "Failed to load chat preview": "ვიდეოს მინიატურის ჩატვირთვა ჩავარდა", "Failed to load file content.": "ფაილის შემცველობის ჩატვირთვა ჩავარდა.", + "Failed to load memories": "", "Failed to move chat": "ჩატის გადატანა ჩავარდა", "Failed to read clipboard contents": "ბუფერის შემცველობის წაკითხვა ჩავარდა", "Failed to render diagram": "დიაგრამის რენდერი ჩავარდა", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "ცოდნა აღმოჩენილი არაა", "No memories to clear": "გასასუფთავებელი მოგონებების გარეშე", + "No memories yet": "", "No model IDs": "მოდელის ID-ების გარეშე", "No models found": "მოდელები აღმოჩენილი არაა", "No models selected": "მოდელები არჩეული არაა", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "ბრძანების სტრიქონში დაშვებულია, მხოლოდ, ალფარიცხვითი სიმბოლოები და ტირეები.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "უი! როგორც ჩანს, მისამართი არასწორია. გთხოვთ, გადაამოწმოთ და ისევ სცადოთ.", @@ -1139,10 +1148,6 @@ "Open new chat": "ახალი ჩატის გახსნა", "Open Sidebar": "გვერდითი ზოლის გახსნა", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API პარამეტრები", diff --git a/src/lib/i18n/locales/kab-DZ/translation.json b/src/lib/i18n/locales/kab-DZ/translation.json index f77c037320..dde7eb44f5 100644 --- a/src/lib/i18n/locales/kab-DZ/translation.json +++ b/src/lib/i18n/locales/kab-DZ/translation.json @@ -63,6 +63,7 @@ "Add text content": "Rnu agbur aḍrisan", "Add User": "Rnu aseqdac", "Add User Group": "Rnu agraw n iseqdacen", + "Add your first memory": "", "Additional Config": "Tawila tamernant", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "Iɣewwaren nniḍen", @@ -365,6 +366,10 @@ "Custom description enabled": "Aglam udmawan yettwarmed", "Custom Parameter Name": "Isem n uɣewwar udmawan", "Custom Parameter Value": "Azal n uɣewwar udmawan", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover yezmer ad yesseqdec ifecka i d-yettak yal aqeddac OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover yesseqdac faster-whisper sdaxel-is.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Ldi WebUI yesseqdac SpeechT5 akked CMU Arktik.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "Tamnaḍt i iweɛren", "Dark": "Aberkan", "Data Controls": "Isenqaden n isefka", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Tecceḍ tmerna n ufaylu.", "Failed to connect to {{URL}} OpenAPI tool server": "Ur yessaweḍ ara ad yeqqen ɣer {{URL}} n uqeddac n yifecka OpenAPI", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Ur yessaweḍ ara ad yessukken aseɣwen", "Failed to create API Key.": "Ur yessaweḍ ara ad d-yesnulfu tasarut API.", "Failed to delete note": "Ur yessaweḍ ara ad yekkes tazmilt", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "Yecceḍ usali n teskant n udiwenni", "Failed to load file content.": "Ur yessaweḍ ara ad d-yessali agbur n yifuyla.", + "Failed to load memories": "", "Failed to move chat": "Tuccḍa deg unkaz n udiwenni", "Failed to read clipboard contents": "Ur yessaweḍ ara ad iɣer agbur n tfelwit", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Ulac amsedday n unalkam s tallelt n usefrek i yettwafen", "No knowledge found": "Ulac tamussni i yettwafen", "No memories to clear": "Ulac aktayen ibanen", + "No memories yet": "", "No model IDs": "Ulac asulay n tmudemt", "No models found": "Ulac timudmiwin yettwafen", "No models selected": "Ulac timudmin yettwafernen", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Ala iwudam ifenyanen d tfenṭazit i yettusirgen", "Only alphanumeric characters and hyphens are allowed in the command string.": "Ala iwudam ifenyanen d tfendiwin i yettusirgen deg uzrar n ukman.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Ala tigrummiwin i izemren ad ttwabeddlent, ad d-snulfunt azadur amaynut n tmussni i ubeddel/ad arraten.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Ala ifuyla n tuccar i yettusirgen", "Only select users and groups with permission can access": "Ala iseqdacen akked yegrawen yesɛan tisirag i izemren ad kecmen", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ayhuh! Yettban-d dakken URL-nni ur tṣeḥḥa ara. Ttxil-k, ssefqed snat n tikkal yernu ɛreḍ tikkelt niḍen.", @@ -1139,10 +1148,6 @@ "Open new chat": "Ldi asqerdec amaynut", "Open Sidebar": "Ldi agalis adisan", "Open User Profile Menu": "Ldi umuɣ n umaɣnu n useqdac", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover yezmer ad yesseqdec ifecka i d-yettak yal aqeddac OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover yesseqdac faster-whisper sdaxel-is.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Ldi WebUI yesseqdac SpeechT5 akked CMU Arktik.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Tawila n API OpenAI", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 8d1ec8edc9..a3ea281e54 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -63,6 +63,7 @@ "Add text content": "글 추가", "Add User": "사용자 추가", "Add User Group": "사용자 그룹 추가", + "Add your first memory": "", "Additional Config": "추가 설정", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Marker에 대한 추가 설정 옵션입니다. 키-값 쌍으로 이루어진 JSON 문자열이어야 합니다. 예를 들어, '{\"key\": \"value\"}'와 같습니다. 지원되는 키는 다음과 같습니다: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "추가 매개변수", @@ -365,6 +366,10 @@ "Custom description enabled": "사용자 정의 설명 활성화됨", "Custom Parameter Name": "사용자 정의 매개변수 이름", "Custom Parameter Value": "사용자 정의 매개변수 값", + "CyberLover can use tools provided by any OpenAPI server.": "Open WebUI는 모든 OpenAPI 서버에서 제공하는 도구를 사용할 수 있습니다.", + "CyberLover uses faster-whisper internally.": "Open WebUI는 내부적으로 패스트 위스퍼를 사용합니다.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI는 SpeechT5와 CMU Arctic 스피커 임베딩을 사용합니다.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "열린 WebUI 버젼(v{{OPEN_WEBUI_VERSION}})은 최소 버젼 (v{{REQUIRED_VERSION}})보다 낮습니다", "Danger Zone": "위험 기능", "Dark": "다크", "Data Controls": "데이터 제어", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "스트리밍 텍스트에 대한 페이드 효과", "Failed to add file.": "파일추가에 실패했습니다", "Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI 도구 서버 연결 실패", + "Failed to convert OpenAI chats": "", "Failed to copy link": "링크 복사 실패", "Failed to create API Key.": "API 키 생성에 실패했습니다.", "Failed to delete note": "노트 삭제 실패", @@ -704,6 +710,7 @@ "Failed to import models": "모델 가져오기 실패", "Failed to load chat preview": "채팅 미리보기 로드 실패", "Failed to load file content.": "파일 내용 로드 실패.", + "Failed to load memories": "", "Failed to move chat": "채팅 이동 실패", "Failed to read clipboard contents": "클립보드 내용 가져오기를 실패하였습니다.", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "관리 지원이 포함된 추론 엔진을 찾을 수 없습니다", "No knowledge found": "지식 기반을 찾을 수 없습니다", "No memories to clear": "메모리를 정리할 수 없습니다", + "No memories yet": "", "No model IDs": "모델 ID가 없습니다", "No models found": "모델을 찾을 수 없습니다", "No models selected": "모델이 선택되지 않았습니다", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "영문자, 숫자 및 하이픈(-)만 허용됩니다.", "Only alphanumeric characters and hyphens are allowed in the command string.": "명령어 문자열에는 영문자, 숫자 및 하이픈(-)만 허용됩니다.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "가지고 있는 컬렉션만 수정 가능합니다, 새 지식 기반을 생성하여 문서를 수정 혹은 추가하십시오.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "마크다운 파일만 허용됩니다", "Only select users and groups with permission can access": "권한이 있는 사용자와 그룹만 접근 가능합니다.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "이런! URL이 잘못된 것 같습니다. 다시 한번 확인하고 다시 시도해주세요.", @@ -1139,10 +1148,6 @@ "Open new chat": "새 채팅 열기", "Open Sidebar": "사이드바 열기", "Open User Profile Menu": "사용자 프로필 메뉴 열기", - "CyberLover can use tools provided by any OpenAPI server.": "Open WebUI는 모든 OpenAPI 서버에서 제공하는 도구를 사용할 수 있습니다.", - "CyberLover uses faster-whisper internally.": "Open WebUI는 내부적으로 패스트 위스퍼를 사용합니다.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI는 SpeechT5와 CMU Arctic 스피커 임베딩을 사용합니다.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "열린 WebUI 버젼(v{{OPEN_WEBUI_VERSION}})은 최소 버젼 (v{{REQUIRED_VERSION}})보다 낮습니다", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 설정", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 6e98dcdfbb..d4997c0064 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Pridėti naudotoją", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tortue Chat versija per sena. Reikalinga (v{{REQUIRED_VERSION}}) versija.", "Danger Zone": "", "Dark": "Tamsus", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Nepavyko sukurti API rakto", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Nepavyko perskaityti kopijuoklės", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Leistinos tik raidės, skaičiai ir brūkšneliai.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Regis nuoroda nevalidi. Prašau patikrtinkite ir pabandykite iš naujo.", @@ -1139,10 +1148,6 @@ "Open new chat": "Atverti naują pokalbį", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tortue Chat versija per sena. Reikalinga (v{{REQUIRED_VERSION}}) versija.", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Open AI API nustatymai", diff --git a/src/lib/i18n/locales/ms-MY/translation.json b/src/lib/i18n/locales/ms-MY/translation.json index 232a0d42b8..39696baee9 100644 --- a/src/lib/i18n/locales/ms-MY/translation.json +++ b/src/lib/i18n/locales/ms-MY/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Tambah Pengguna", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover version (v{{OPEN_WEBUI_VERSION}}) adalah lebih rendah daripada versi yang diperlukan iaitu (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Gelap", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Gagal mencipta kekunci API", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Gagal membaca konten papan klip", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Hanya aksara alfanumerik dan sempang dibenarkan dalam rentetan arahan.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Maaf, didapati URL tidak sah. Sila semak semula dan cuba lagi.", @@ -1139,10 +1148,6 @@ "Open new chat": "Buka perbualan baru", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover version (v{{OPEN_WEBUI_VERSION}}) adalah lebih rendah daripada versi yang diperlukan iaitu (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Tetapan API OpenAI", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 431e5046d6..7dff0bede2 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -63,6 +63,7 @@ "Add text content": "Legg til tekstinnhold", "Add User": "Legg til bruker", "Add User Group": "Legg til brukergruppe", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover bruker faster-whisper internt.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover bruker SpeechT5 og CMU Arctic-høytalerinnbygginger", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-versjonen (v{{OPEN_WEBUI_VERSION}}) er lavere enn den påkrevde versjonen (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Mørk", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Kan ikke legge til filen.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Kan ikke opprette en API-nøkkel.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Kan ikke lese utklippstavlens innhold", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Fant ingen konklusjonsmotor med støtte for administrasjon", "No knowledge found": "Finner ingen kunnskaper", "No memories to clear": "", + "No memories yet": "", "No model IDs": "Ingen modell-ID-er", "No models found": "Finner ingen modeller", "No models selected": "Ingen modeller er valgt", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Bare alfanumeriske tegn og bindestreker er tillatt", "Only alphanumeric characters and hyphens are allowed in the command string.": "Bare alfanumeriske tegn og bindestreker er tillatt i kommandostrengen.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Bare samlinger kan redigeres, eller lag en ny kunnskapsbase for å kunne redigere / legge til dokumenter.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Bare utvalgte brukere og grupper med tillatelse kan få tilgang", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oi! Det ser ut som URL-en er ugyldig. Dobbeltsjekk, og prøv på nytt.", @@ -1139,10 +1148,6 @@ "Open new chat": "Åpne ny chat", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover bruker faster-whisper internt.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover bruker SpeechT5 og CMU Arctic-høytalerinnbygginger", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-versjonen (v{{OPEN_WEBUI_VERSION}}) er lavere enn den påkrevde versjonen (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI-API", "OpenAI API Config": "API-konfigurasjon for OpenAI", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 2cfa95896b..2d2c7be1c1 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -63,6 +63,7 @@ "Add text content": "Voeg tekstinhoud toe", "Add User": "Voeg gebruiker toe", "Add User Group": "Voeg gebruikersgroep toe", + "Add your first memory": "", "Additional Config": "Extra configuratie", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover gebruikt faster-whisper intern", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover gebruikt SpeechT5 en CMU Arctic spreker-embeddings", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover versie (v{{OPEN_WEBUI_VERSION}}) is kleiner dan de benodigde versie (v{{REQUIRED_VERSION}})", "Danger Zone": "Gevarenzone", "Dark": "Donker", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Het is niet gelukt om het bestand toe te voegen.", "Failed to connect to {{URL}} OpenAPI tool server": "Kan geen verbinding maken met {{URL}} OpenAPI gereedschapserver", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Kan API Key niet aanmaken.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Kan klembord inhoud niet lezen", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Geen inferentie-engine met beheerondersteuning gevonden", "No knowledge found": "Geen kennis gevonden", "No memories to clear": "Geen herinneringen om op te ruimen", + "No memories yet": "", "No model IDs": "Geen model-ID's", "No models found": "Geen modellen gevonden", "No models selected": "Geen modellen geselecteerd", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Alleen alfanumerieke tekens en koppeltekens zijn toegestaan", "Only alphanumeric characters and hyphens are allowed in the command string.": "Alleen alfanumerieke karakters en streepjes zijn toegestaan in de commando string.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Alleen verzamelinge kunnen gewijzigd worden, maak een nieuwe kennisbank aan om bestanden aan te passen/toe te voegen", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Alleen geselecteerde gebruikers en groepen met toestemming hebben toegang", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oeps! Het lijkt erop dat de URL ongeldig is. Controleer het nogmaals en probeer opnieuw.", @@ -1139,10 +1148,6 @@ "Open new chat": "Open nieuwe chat", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover gebruikt faster-whisper intern", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover gebruikt SpeechT5 en CMU Arctic spreker-embeddings", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover versie (v{{OPEN_WEBUI_VERSION}}) is kleiner dan de benodigde versie (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API-configuratie", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index bda8390978..70574cf3ba 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "ਉਪਭੋਗਤਾ ਸ਼ਾਮਲ ਕਰੋ", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "ਗੂੜ੍ਹਾ", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "API ਕੁੰਜੀ ਬਣਾਉਣ ਵਿੱਚ ਅਸਫਲ।", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "ਕਲਿੱਪਬੋਰਡ ਸਮੱਗਰੀ ਪੜ੍ਹਣ ਵਿੱਚ ਅਸਫਲ", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "ਕਮਾਂਡ ਸਤਰ ਵਿੱਚ ਸਿਰਫ਼ ਅਲਫ਼ਾਨਯੂਮੈਰਿਕ ਅੱਖਰ ਅਤੇ ਹਾਈਫਨ ਦੀ ਆਗਿਆ ਹੈ।", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ਓਹੋ! ਲੱਗਦਾ ਹੈ ਕਿ URL ਗਲਤ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਜਾਂਚ ਕਰੋ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।", @@ -1139,10 +1148,6 @@ "Open new chat": "ਨਵੀਂ ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "ਓਪਨਏਆਈ", "OpenAI API": "ਓਪਨਏਆਈ API", "OpenAI API Config": "ਓਪਨਏਆਈ API ਕਨਫਿਗ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 9300fcf5cc..70e18c2b98 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -63,6 +63,7 @@ "Add text content": "Dodaj zawartość tekstową", "Add User": "Dodaj użytkownika", "Add User Group": "Dodaj grupę użytkowników", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover może używać narzędzi dostarczanych przez serwery OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover korzysta wewnętrznie z szybszego faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Otwarta WebUI wykorzystuje SpeechT5 i wbudowane zbiory danych mówcy CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Wersja CyberLover (v{{OPEN_WEBUI_VERSION}}) jest niższa niż wymagana wersja (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Ciemny", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Nie udało się dodać pliku.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Nie udało się skopiować linku", "Failed to create API Key.": "Nie udało się wygenerować klucza API.", "Failed to delete note": "Nie udało się usunąć notatki", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "Nie udało się załadować zawartości pliku.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Nie udało się odczytać zawartości schowka", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Nie znaleziono silnika wnioskującego z obsługą zarządzania", "No knowledge found": "Brak znalezionej wiedzy", "No memories to clear": "Brak wspomnień do wyczyszczenia", + "No memories yet": "", "No model IDs": "Brak identyfikatorów modeli", "No models found": "Nie znaleziono modeli", "No models selected": "Brak wybranych modeli", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Dozwolone są tylko znaki alfanumeryczne i myślniki", "Only alphanumeric characters and hyphens are allowed in the command string.": "W komendzie dozwolone są wyłącznie znaki alfanumeryczne i myślniki.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Tylko kolekcje można edytować, utwórz nową bazę wiedzy, aby edytować/dodawać dokumenty.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Tylko wybrani użytkownicy i grupy z uprawnieniami mogą uzyskać dostęp.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Wygląda na to, że podany URL jest nieprawidłowy. Proszę sprawdzić go ponownie i spróbować jeszcze raz.", @@ -1139,10 +1148,6 @@ "Open new chat": "Otwórz nową rozmowę", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover może używać narzędzi dostarczanych przez serwery OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover korzysta wewnętrznie z szybszego faster-whisper.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Otwarta WebUI wykorzystuje SpeechT5 i wbudowane zbiory danych mówcy CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Wersja CyberLover (v{{OPEN_WEBUI_VERSION}}) jest niższa niż wymagana wersja (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "Interfejs API OpenAI", "OpenAI API Config": "Konfiguracja interfejsu API OpenAI", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 659fd862dc..fdfce5491b 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -63,6 +63,7 @@ "Add text content": "Adicionar conteúdo de texto", "Add User": "Adicionar Usuário", "Add User Group": "Adicionar grupo de usuários", + "Add your first memory": "", "Additional Config": "Configuração adicional", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Opções de configuração adicionais para o marcador. Deve ser uma string JSON com pares chave-valor. Por exemplo, '{\"key\": \"value\"}'. As chaves suportadas incluem: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "Parâmetros adicionais", @@ -365,6 +366,10 @@ "Custom description enabled": "Descrição personalizada habilitada", "Custom Parameter Name": "Nome do parâmetro personalizado", "Custom Parameter Value": "Valor do parâmetro personalizado", + "CyberLover can use tools provided by any OpenAPI server.": "O CyberLover pode usar ferramentas fornecidas por qualquer servidor OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover usa faster-whisper internamente.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "A CyberLover usa os embeddings de voz do SpeechT5 e do CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "A versão do CyberLover (v{{OPEN_WEBUI_VERSION}}) é inferior à versão necessária (v{{REQUIRED_VERSION}})", "Danger Zone": "Zona de perigo", "Dark": "Escuro", "Data Controls": "Controle de Dados", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Efeito de desbotamento para texto em streaming", "Failed to add file.": "Falha ao adicionar arquivo.", "Failed to connect to {{URL}} OpenAPI tool server": "Falha ao conectar ao servidor da ferramenta OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Falha ao copiar o link", "Failed to create API Key.": "Falha ao criar a Chave API.", "Failed to delete note": "Falha ao excluir a nota", @@ -704,6 +710,7 @@ "Failed to import models": "Falha ao importar modelos", "Failed to load chat preview": "Falha ao carregar a pré-visualização do chat", "Failed to load file content.": "Falha ao carregar o conteúdo do arquivo.", + "Failed to load memories": "", "Failed to move chat": "Falha ao mover o chat", "Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência", "Failed to render diagram": "Falha ao renderizar o diagrama", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Nenhum mecanismo de inferência com suporte de gerenciamento encontrado", "No knowledge found": "Nenhum conhecimento encontrado", "No memories to clear": "Nenhuma memória para limpar", + "No memories yet": "", "No model IDs": "Nenhum ID de modelo", "No models found": "Nenhum modelo encontrado", "No models selected": "Nenhum modelo selecionado", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Somente caracteres alfanuméricos e hífens são permitidos", "Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Somente coleções podem ser editadas. Crie uma nova base de conhecimento para editar/adicionar documentos.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Somente arquivos markdown são permitidos", "Only select users and groups with permission can access": "Somente usuários e grupos selecionados com permissão podem acessar.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ops! Parece que a URL é inválida. Por favor, verifique novamente e tente de novo.", @@ -1139,10 +1148,6 @@ "Open new chat": "Abrir novo chat", "Open Sidebar": "Abrir barra lateral", "Open User Profile Menu": "Abrir menu de perfil do usuário", - "CyberLover can use tools provided by any OpenAPI server.": "O CyberLover pode usar ferramentas fornecidas por qualquer servidor OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover usa faster-whisper internamente.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "A CyberLover usa os embeddings de voz do SpeechT5 e do CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "A versão do CyberLover (v{{OPEN_WEBUI_VERSION}}) é inferior à versão necessária (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configuração da API OpenAI", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index ea16d10c5c..a816273658 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Adicionar Utilizador", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Escuro", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Falha ao criar a Chave da API.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Epá! Parece que o URL é inválido. Verifique novamente e tente outra vez.", @@ -1139,10 +1148,6 @@ "Open new chat": "Abrir nova conversa", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configuração da API OpenAI", diff --git a/src/lib/i18n/locales/ro-RO/translation.json b/src/lib/i18n/locales/ro-RO/translation.json index adef0ab3ad..8acbccf1a8 100644 --- a/src/lib/i18n/locales/ro-RO/translation.json +++ b/src/lib/i18n/locales/ro-RO/translation.json @@ -63,6 +63,7 @@ "Add text content": "Adăugați conținut textual", "Add User": "Adaugă utilizator", "Add User Group": "Adaugă grup de utilizatori", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover folosește faster-whisper intern.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Versiunea CyberLover (v{{OPEN_WEBUI_VERSION}}) este mai mică decât versiunea necesară (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Întunecat", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Eșec la adăugarea fișierului.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Crearea cheii API a eșuat.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Citirea conținutului clipboard-ului a eșuat", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "Nu au fost găsite informații.", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "Nu s-au găsit modele", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Doar caracterele alfanumerice și cratimele sunt permise în șirul de comandă.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Doar colecțiile pot fi editate, creați o nouă bază de cunoștințe pentru a edita/adăuga documente.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Se pare că URL-ul este invalid. Vă rugăm să verificați din nou și să încercați din nou.", @@ -1139,10 +1148,6 @@ "Open new chat": "Deschide conversație nouă", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover folosește faster-whisper intern.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Versiunea CyberLover (v{{OPEN_WEBUI_VERSION}}) este mai mică decât versiunea necesară (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Configurația API OpenAI", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 19b00a9dfb..c311f70f6b 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -63,6 +63,7 @@ "Add text content": "Добавить текстовый контент", "Add User": "Добавить пользователя", "Add User Group": "Добавить группу пользователей", + "Add your first memory": "", "Additional Config": "Дополнительные настройки", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Дополнительные настройки для marker. Это должна быть строка JSON с ключами и значениями. Например, '{\"key\": \"value\"}'. Поддерживаемые ключи включают: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "Пользовательское описание включено", "Custom Parameter Name": "Название пользовательского параметра", "Custom Parameter Value": "Значение пользовательского параметра", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover может использовать инструменты, предоставляемые любым сервером OpenAPI.", + "CyberLover uses faster-whisper internally.": "CyberLover использует более быстрый внутренний интерфейс whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "В CyberLover используются встраиваемые движки генерации речи SpeechT5 и CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версия CyberLover (v{{OPEN_WEBUI_VERSION}}) ниже требуемой версии (v{{REQUIRED_VERSION}})", "Danger Zone": "Опасная зона", "Dark": "Темная", "Data Controls": "Управление данными", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "Эффект затухания для потокового текста", "Failed to add file.": "Не удалось добавить файл.", "Failed to connect to {{URL}} OpenAPI tool server": "Не удалось подключиться к серверу инструмента OpenAI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Не удалось скопировать ссылку", "Failed to create API Key.": "Не удалось создать ключ API.", "Failed to delete note": "Не удалось удалить заметку", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "Не удалось загрузить предпросмотр чата", "Failed to load file content.": "Не удалось загрузить содержимое файла.", + "Failed to load memories": "", "Failed to move chat": "Не удалось переместить чат", "Failed to read clipboard contents": "Не удалось прочитать содержимое буфера обмена", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Механизм логического вывода с поддержкой управления не найден", "No knowledge found": "Знания не найдены", "No memories to clear": "Нет воспоминаний, которые нужно было бы очистить", + "No memories yet": "", "No model IDs": "Нет ID модели", "No models found": "Модели не найдены", "No models selected": "Модели не выбраны", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Разрешены только буквенно-цифровые символы и дефисы.", "Only alphanumeric characters and hyphens are allowed in the command string.": "В строке команды разрешено использовать только буквенно-цифровые символы и дефисы.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Редактировать можно только коллекции, создайте новую базу знаний для редактирования/добавления документов.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Разрешены только файлы markdown", "Only select users and groups with permission can access": "Доступ имеют только избранные пользователи и группы, имеющие разрешение.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Похоже, что URL-адрес недействителен. Пожалуйста, перепроверьте и попробуйте еще раз.", @@ -1139,10 +1148,6 @@ "Open new chat": "Открыть новый чат", "Open Sidebar": "Открыть боковую панель", "Open User Profile Menu": "Открыть меню профиля пользователя", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover может использовать инструменты, предоставляемые любым сервером OpenAPI.", - "CyberLover uses faster-whisper internally.": "CyberLover использует более быстрый внутренний интерфейс whisper.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "В CyberLover используются встраиваемые движки генерации речи SpeechT5 и CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Версия CyberLover (v{{OPEN_WEBUI_VERSION}}) ниже требуемой версии (v{{REQUIRED_VERSION}})", "OpenAI": "Open AI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Конфигурация API OpenAI", diff --git a/src/lib/i18n/locales/sk-SK/translation.json b/src/lib/i18n/locales/sk-SK/translation.json index defd92d41f..3e19aac002 100644 --- a/src/lib/i18n/locales/sk-SK/translation.json +++ b/src/lib/i18n/locales/sk-SK/translation.json @@ -63,6 +63,7 @@ "Add text content": "Pridajte textový obsah", "Add User": "Pridať užívateľa", "Add User Group": "Pridať skupinu užívateľov", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover interne používa faster-whisper.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verzia CyberLover (v{{OPEN_WEBUI_VERSION}}) je nižšia ako požadovaná verzia (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "Tmavý", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Nepodarilo sa pridať súbor.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Nepodarilo sa vytvoriť API kľúč.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Nepodarilo sa prečítať obsah schránky", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "Neboli nájdené žiadne znalosti", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "Neboli nájdené žiadne modely", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Príkazový reťazec môže obsahovať iba alfanumerické znaky a pomlčky.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Iba kolekcie môžu byť upravované, na úpravu/pridanie dokumentov vytvorte novú znalostnú databázu.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Jejda! Vyzerá to, že URL adresa je neplatná. Prosím, skontrolujte ju a skúste to znova.", @@ -1139,10 +1148,6 @@ "Open new chat": "Otvoriť nový chat", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover interne používa faster-whisper.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Verzia CyberLover (v{{OPEN_WEBUI_VERSION}}) je nižšia ako požadovaná verzia (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI je výskumná organizácia zameraná na umelú inteligenciu, ktorá je známa vývojom pokročilých jazykových modelov, ako je napríklad GPT. Tieto modely sa využívajú v rôznych aplikáciách, vrátane konverzačných agentov a jazykových nástrojov.", "OpenAI API": "OpenAI API je rozhranie aplikačného programovania, ktoré umožňuje vývojárom integrovať pokročilé jazykové modely do svojich aplikácií.", "OpenAI API Config": "Konfigurácia API OpenAI", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 27f9200e76..e1ee510c85 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -63,6 +63,7 @@ "Add text content": "Додај садржај текста", "Add User": "Додај корисника", "Add User Group": "Додај корисничку групу", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Тамна", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Неуспешно стварање API кључа.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Неуспешно читање садржаја оставе", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерички знакови и цртице су дозвољени у низу наредби.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изгледа да је адреса неважећа. Молимо вас да проверите и покушате поново.", @@ -1139,10 +1148,6 @@ "Open new chat": "Покрени ново ћаскање", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Подешавање OpenAI API-ја", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index a094f16fa0..71373f9d41 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -63,6 +63,7 @@ "Add text content": "Lägg till textinnehåll", "Add User": "Lägg till användare", "Add User Group": "Lägg till användargrupp", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "Anpassat parameternamn", "Custom Parameter Value": "Anpassat parametervärde", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kan använda verktyg från alla OpenAPI-servrar.", + "CyberLover uses faster-whisper internally.": "CyberLover använder faster-whisper internt.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover använder SpeechT5 och CMU Arctic högtalarinbäddningar.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-versionen (v{{OPEN_WEBUI_VERSION}}) är lägre än den version som krävs (v{{REQUIRED_VERSION}})", "Danger Zone": "Fara", "Dark": "Mörk", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Misslyckades med att lägga till fil.", "Failed to connect to {{URL}} OpenAPI tool server": "Misslyckades med att ansluta till {{URL}} OpenAPI-verktygsserver", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Misslyckades med att kopiera länk", "Failed to create API Key.": "Misslyckades med att skapa API-nyckel.", "Failed to delete note": "Misslyckades med att ta bort anteckning", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "Misslyckades med att läsa in filinnehåll.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Misslyckades med att läsa urklippsinnehåll", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Ingen inferensmotor med stöd för hantering hittades", "No knowledge found": "Ingen kunskap hittades", "No memories to clear": "Inga minnen att rensa", + "No memories yet": "", "No model IDs": "Inga modell-ID:n", "No models found": "Inga modeller hittades", "No models selected": "Inga modeller valda", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Endast alfanumeriska tecken och bindestreck är tillåtna", "Only alphanumeric characters and hyphens are allowed in the command string.": "Endast alfanumeriska tecken och bindestreck är tillåtna i kommandosträngen.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Endast samlingar kan redigeras, skapa en ny kunskapsbas för att redigera/lägga till dokument.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Endast markdown-filer är tillåtna", "Only select users and groups with permission can access": "Endast valda användare och grupper med behörighet kan komma åt", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppsan! Det ser ut som om URL:en är ogiltig. Dubbelkolla gärna och försök igen.", @@ -1139,10 +1148,6 @@ "Open new chat": "Öppna ny chatt", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover kan använda verktyg från alla OpenAPI-servrar.", - "CyberLover uses faster-whisper internally.": "CyberLover använder faster-whisper internt.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover använder SpeechT5 och CMU Arctic högtalarinbäddningar.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover-versionen (v{{OPEN_WEBUI_VERSION}}) är lägre än den version som krävs (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API-konfig", diff --git a/src/lib/i18n/locales/th-TH/translation.json b/src/lib/i18n/locales/th-TH/translation.json index bdc830a15d..31d2478211 100644 --- a/src/lib/i18n/locales/th-TH/translation.json +++ b/src/lib/i18n/locales/th-TH/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "เพิ่มผู้ใช้", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "เวอร์ชั่น CyberLover (v{{OPEN_WEBUI_VERSION}}) ต่ำกว่าเวอร์ชั่นที่ต้องการ (v{{REQUIRED_VERSION}})", "Danger Zone": "", "Dark": "มืด", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "สร้างคีย์ API ล้มเหลว", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "อ่านเนื้อหาคลิปบอร์ดล้มเหลว", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "อนุญาตให้ใช้เฉพาะอักขระตัวอักษรและตัวเลข รวมถึงเครื่องหมายขีดกลางในสตริงคำสั่งเท่านั้น", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "อุ๊บส์! ดูเหมือนว่า URL ไม่ถูกต้อง กรุณาตรวจสอบและลองใหม่อีกครั้ง", @@ -1139,10 +1148,6 @@ "Open new chat": "เปิดแชทใหม่", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "เวอร์ชั่น CyberLover (v{{OPEN_WEBUI_VERSION}}) ต่ำกว่าเวอร์ชั่นที่ต้องการ (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "การตั้งค่า OpenAI API", diff --git a/src/lib/i18n/locales/tk-TM/translation.json b/src/lib/i18n/locales/tk-TM/translation.json index 57fcc7e7d3..5114e1e134 100644 --- a/src/lib/i18n/locales/tk-TM/translation.json +++ b/src/lib/i18n/locales/tk-TM/translation.json @@ -63,6 +63,7 @@ "Add text content": "", "Add User": "Ulanyjy goş", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "Danger Zone": "", "Dark": "Garaňky", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Only collections can be edited, create a new knowledge base to edit/add documents.": "", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", @@ -1139,10 +1148,6 @@ "Open new chat": "", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "", "OpenAI": "", "OpenAI API": "", "OpenAI API Config": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index fb8f319505..a953364dba 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -63,6 +63,7 @@ "Add text content": "Metin içeriği ekleme", "Add User": "Kullanıcı Ekle", "Add User Group": "Kullanıcı Grubu Ekle", + "Add your first memory": "", "Additional Config": "Ek Yapılandırma", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "Ek Parametreler", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover OpenAPI tarafından sağlanan araçları kullanabilir", + "CyberLover uses faster-whisper internally.": "CyberLover, dahili olarak daha hızlı-fısıltı kullanır.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover, SpeechT5 ve CMU Arctic konuşmacı gömme kullanır.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open-WebUI sürümü (v{{OPEN_WEBUI_VERSION}}) gerekli sürümden (v{{REQUIRED_VERSION}}) düşük", "Danger Zone": "Tehlikeli Bölge", "Dark": "Koyu", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Dosya eklenemedi.", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "API Anahtarı oluşturulamadı.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Pano içeriği okunamadı", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "Bilgi bulunamadı", "No memories to clear": "Temizlenecek bellek yok", + "No memories yet": "", "No model IDs": "Model ID yok", "No models found": "Model bulunamadı", "No models selected": "Model seçilmedi", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Yalnızca alfasayısal karakterler ve tireler kabul edilir", "Only alphanumeric characters and hyphens are allowed in the command string.": "Komut dizisinde yalnızca alfasayısal karakterler ve tireler kabul edilir.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Yalnızca koleksiyonlar düzenlenebilir, belgeleri düzenlemek/eklemek için yeni bir bilgi tabanı oluşturun.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Yalnızca markdown biçimli dosyalar kullanılabilir", "Only select users and groups with permission can access": "İzinli kullanıcılar ve gruplar yalnızca erişebilir", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hop! URL geçersiz gibi görünüyor. Lütfen tekrar kontrol edin ve yeniden deneyin.", @@ -1139,10 +1148,6 @@ "Open new chat": "Yeni sohbet aç", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover OpenAPI tarafından sağlanan araçları kullanabilir", - "CyberLover uses faster-whisper internally.": "CyberLover, dahili olarak daha hızlı-fısıltı kullanır.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover, SpeechT5 ve CMU Arctic konuşmacı gömme kullanır.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open-WebUI sürümü (v{{OPEN_WEBUI_VERSION}}) gerekli sürümden (v{{REQUIRED_VERSION}}) düşük", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API Konfigürasyonu", diff --git a/src/lib/i18n/locales/ug-CN/translation.json b/src/lib/i18n/locales/ug-CN/translation.json index 5e0cbc206c..c87495a817 100644 --- a/src/lib/i18n/locales/ug-CN/translation.json +++ b/src/lib/i18n/locales/ug-CN/translation.json @@ -63,6 +63,7 @@ "Add text content": "تېكست مەزمۇن قوشۇش", "Add User": "ئىشلەتكۈچى قوشۇش", "Add User Group": "ئىشلەتكۈچى گۇرۇپپىسى قوشۇش", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "ئۆزلۈك پارامېتىر نامى", "Custom Parameter Value": "ئۆزلۈك پارامېتىر قىممىتى", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover ھەر قانداق OpenAPI مۇلازىمېتىرلىرىدىكى قوراللارنى ئىشلىتەلىدۇ.", + "CyberLover uses faster-whisper internally.": "CyberLover ئىچىدە faster-whisper ئىشلىتىدۇ.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover SpeechT5 ۋە CMU Arctic ئاۋاز سىڭدۈرۈش ئىشلىتىدۇ.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover نەشرى (v{{OPEN_WEBUI_VERSION}}) تەلەپ قىلىنغان نەشردىن (v{{REQUIRED_VERSION}}) تۆۋەن.", "Danger Zone": "خەۋپلىك رايون", "Dark": "قاراڭغۇ", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "ھۆججەت قوشۇش مەغلۇپ بولدى.", "Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI قورال مۇلازىمېتىرىغا ئۇلىنىش مەغلۇپ بولدى", + "Failed to convert OpenAI chats": "", "Failed to copy link": "ئۇلانما كۆچۈرۈش مەغلۇپ بولدى", "Failed to create API Key.": "API ئاچقۇچى قۇرۇش مەغلۇپ بولدى.", "Failed to delete note": "خاتىرە ئۆچۈرۈش مەغلۇپ بولدى", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "ھۆججەت مەزمۇنى يۈكلەش مەغلۇپ بولدى.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "چاپلاش تاختىسى مەزمۇنىنى ئوقۇش مەغلۇپ بولدى", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "باشقۇرۇشنى قوللايدىغان يەكۈن ماتورى تېپىلمىدى", "No knowledge found": "بىلىم تېپىلمىدى", "No memories to clear": "تازلاشقا ئەسلەتمە يوق", + "No memories yet": "", "No model IDs": "مودېل ID يوق", "No models found": "مودېل تېپىلمىدى", "No models selected": "مودېل تاللانمىدى", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "پەقەت ھەرپ، سان ۋە چەكىت ئىشلىتىشكە بولىدۇ", "Only alphanumeric characters and hyphens are allowed in the command string.": "بۇيرۇق تىزىقىدا پەقەت ھەرپ، سان ۋە چەكىت ئىشلىتىشكە بولىدۇ.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "پەقەت توپلام تەھرىرلەشكە بولىدۇ، ھۆججەت قوشۇش/تەھرىرلەش ئۈچۈن يېڭى بىلىم ئاساسى قۇرۇڭ.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "پەقەت markdown ھۆججىتى ئىشلىتىشكە بولىدۇ", "Only select users and groups with permission can access": "پەقەت ھوقۇقى بار تاللانغان ئىشلەتكۈچى ۋە گۇرۇپپىلارلا زىيارەت قىلالايدۇ", "Oops! Looks like the URL is invalid. Please double-check and try again.": "URL خاتا بولۇشى مۇمكىن. قايتا تەكشۈرۈپ سىناڭ.", @@ -1139,10 +1148,6 @@ "Open new chat": "يېڭى سۆھبەت ئېچىش", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover ھەر قانداق OpenAPI مۇلازىمېتىرلىرىدىكى قوراللارنى ئىشلىتەلىدۇ.", - "CyberLover uses faster-whisper internally.": "CyberLover ئىچىدە faster-whisper ئىشلىتىدۇ.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover SpeechT5 ۋە CMU Arctic ئاۋاز سىڭدۈرۈش ئىشلىتىدۇ.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover نەشرى (v{{OPEN_WEBUI_VERSION}}) تەلەپ قىلىنغان نەشردىن (v{{REQUIRED_VERSION}}) تۆۋەن.", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API تەڭشىكى", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 3d596b54be..4e385fb6d2 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -63,6 +63,7 @@ "Add text content": "Додати текстовий вміст", "Add User": "Додати користувача", "Add User Group": "Додати групу користувачів", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover використовує faster-whisper внутрішньо.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover використовує вбудовування голосів SpeechT5 та CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})", "Danger Zone": "Зона небезпеки", "Dark": "Темна", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Не вдалося додати файл.", "Failed to connect to {{URL}} OpenAPI tool server": "Не вдалося підключитися до серверу інструментів OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Не вдалося створити API ключ.", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Не знайдено двигуна висновків з підтримкою керування", "No knowledge found": "Знання не знайдено.", "No memories to clear": "Немає спогадів для очищення", + "No memories yet": "", "No model IDs": "Немає ID моделей", "No models found": "Моделей не знайдено", "No models selected": "Моделі не вибрано", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Дозволені тільки алфавітно-цифрові символи та дефіси", "Only alphanumeric characters and hyphens are allowed in the command string.": "У рядку команди дозволено використовувати лише алфавітно-цифрові символи та дефіси.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Редагувати можна лише колекції, створіть нову базу знань, щоб редагувати або додавати документи.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Тільки вибрані користувачі та групи з дозволом можуть отримати доступ", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Схоже, що URL-адреса невірна. Будь ласка, перевірте ще раз та спробуйте ще раз.", @@ -1139,10 +1148,6 @@ "Open new chat": "Відкрити новий чат", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover використовує faster-whisper внутрішньо.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover використовує вбудовування голосів SpeechT5 та CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "Конфігурація OpenAI API", diff --git a/src/lib/i18n/locales/ur-PK/translation.json b/src/lib/i18n/locales/ur-PK/translation.json index 6769d3bef7..158abce32c 100644 --- a/src/lib/i18n/locales/ur-PK/translation.json +++ b/src/lib/i18n/locales/ur-PK/translation.json @@ -63,6 +63,7 @@ "Add text content": "متن کا مواد شامل کریں", "Add User": "صارف شامل کریں", "Add User Group": "", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "اوپن ویب یو آئی اندرونی طور پر فاسٹر وِسپر استعمال کرتا ہے", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "اوپن WebUI ورژن (v{{OPEN_WEBUI_VERSION}}) مطلوبہ ورژن (v{{REQUIRED_VERSION}}) سے کم ہے", "Danger Zone": "", "Dark": "ڈارک", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "فائل شامل کرنے میں ناکام", "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "API کلید بنانے میں ناکام", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "کلپ بورڈ مواد کو پڑھنے میں ناکام", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "", "No knowledge found": "کوئی معلومات نہیں ملی", "No memories to clear": "", + "No memories yet": "", "No model IDs": "", "No models found": "کوئی ماڈل نہیں ملا", "No models selected": "", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "", "Only alphanumeric characters and hyphens are allowed in the command string.": "کمانڈ سٹرنگ میں صرف حروفی، عددی کردار اور ہائفن کی اجازت ہے", "Only collections can be edited, create a new knowledge base to edit/add documents.": "صرف مجموعے ترمیم کیے جا سکتے ہیں، دستاویزات کو ترمیم یا شامل کرنے کے لیے نیا علمی بنیاد بنائیں", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "اوہ! لگتا ہے کہ یو آر ایل غلط ہے براۂ کرم دوبارہ چیک کریں اور دوبارہ کوشش کریں", @@ -1139,10 +1148,6 @@ "Open new chat": "نیا چیٹ کھولیں", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "اوپن ویب یو آئی اندرونی طور پر فاسٹر وِسپر استعمال کرتا ہے", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "اوپن WebUI ورژن (v{{OPEN_WEBUI_VERSION}}) مطلوبہ ورژن (v{{REQUIRED_VERSION}}) سے کم ہے", "OpenAI": "اوپن اے آئی", "OpenAI API": "اوپن اے آئی اے پی آئی\n", "OpenAI API Config": "اوپن اے آئی API ترتیب", diff --git a/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json b/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json index 1ddb3cf913..3b1b2acd62 100644 --- a/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json +++ b/src/lib/i18n/locales/uz-Cyrl-UZ/translation.json @@ -63,6 +63,7 @@ "Add text content": "Матн таркибини қўшинг", "Add User": "Фойдаланувчи қўшиш", "Add User Group": "Фойдаланувчилар гуруҳини қўшиш", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "Махсус параметр номи", "Custom Parameter Value": "Махсус параметр қиймати", + "CyberLover can use tools provided by any OpenAPI server.": "Опен WебУИ ҳар қандай ОпенАПИ сервери томонидан тақдим этилган воситалардан фойдаланиши мумкин.", + "CyberLover uses faster-whisper internally.": "Опен WебУИ ички тез шивирлашдан фойдаланади.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Опен WебУИ СпеэчТ5 ва CМУ Арcтиc динамик ўрнатишларидан фойдаланади.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Очиқ WебУИ версияси (в{{ОПЕН_WЕБУИ_ВЕРСИОН}}) талаб қилинган версиядан (в{{РЕҚУИРЕД_ВЕРСИОН}}) пастроқ", "Danger Zone": "Хавфли зона", "Dark": "Қоронғи", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Файл қўшиб бўлмади.", "Failed to connect to {{URL}} OpenAPI tool server": "{{УРЛ}} ОпенАПИ асбоб серверига уланиб бўлмади", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Ҳаволани нусхалаб бўлмади", "Failed to create API Key.": "АПИ калитини яратиб бўлмади.", "Failed to delete note": "Қайдни ўчириб бўлмади", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "Файл таркибини юклаб бўлмади.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Буфер таркибини ўқиб бўлмади", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Бошқарув ёрдами билан хулоса чиқариш механизми топилмади", "No knowledge found": "Ҳеч қандай билим топилмади", "No memories to clear": "Тозалаш учун хотиралар йўқ", + "No memories yet": "", "No model IDs": "Модел идентификаторлари йўқ", "No models found": "Ҳеч қандай модел топилмади", "No models selected": "Ҳеч қандай модел танланмаган", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Фақат ҳарф-рақамли белгилар ва дефисларга рухсат берилади", "Only alphanumeric characters and hyphens are allowed in the command string.": "Буйруқлар қаторида фақат ҳарф-рақамли белгилар ва дефисларга рухсат берилади.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Фақат тўпламларни таҳрирлаш мумкин, ҳужжатларни таҳрирлаш/қўшиш учун янги билимлар базасини яратинг.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Фақат маркдоwн файлларига рухсат берилади", "Only select users and groups with permission can access": "Фақат рухсати бор танланган фойдаланувчилар ва гуруҳларга кириш мумкин", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Вой! УРЛ нотўғри кўринади. Илтимос, икки марта текширинг ва қайта уриниб кўринг.", @@ -1139,10 +1148,6 @@ "Open new chat": "Янги чат очинг", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "Опен WебУИ ҳар қандай ОпенАПИ сервери томонидан тақдим этилган воситалардан фойдаланиши мумкин.", - "CyberLover uses faster-whisper internally.": "Опен WебУИ ички тез шивирлашдан фойдаланади.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "Опен WебУИ СпеэчТ5 ва CМУ Арcтиc динамик ўрнатишларидан фойдаланади.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Очиқ WебУИ версияси (в{{ОПЕН_WЕБУИ_ВЕРСИОН}}) талаб қилинган версиядан (в{{РЕҚУИРЕД_ВЕРСИОН}}) пастроқ", "OpenAI": "OpenAI", "OpenAI API": "OpenAI АПИ", "OpenAI API Config": "OpenAI АПИ конфигурацияси", diff --git a/src/lib/i18n/locales/uz-Latn-Uz/translation.json b/src/lib/i18n/locales/uz-Latn-Uz/translation.json index 035ad55060..4f344fb9e2 100644 --- a/src/lib/i18n/locales/uz-Latn-Uz/translation.json +++ b/src/lib/i18n/locales/uz-Latn-Uz/translation.json @@ -63,6 +63,7 @@ "Add text content": "Matn tarkibini qo'shing", "Add User": "Foydalanuvchi qo'shish", "Add User Group": "Foydalanuvchilar guruhini qo'shish", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "Maxsus parametr nomi", "Custom Parameter Value": "Maxsus parametr qiymati", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover har qanday OpenAPI serveri tomonidan taqdim etilgan vositalardan foydalanishi mumkin.", + "CyberLover uses faster-whisper internally.": "CyberLover ichki tez shivirlashdan foydalanadi.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover SpeechT5 va CMU Arctic dinamik oʻrnatishlaridan foydalanadi.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Ochiq WebUI versiyasi (v{{OPEN_WEBUI_VERSION}}) talab qilingan versiyadan (v{{REQUIRED_VERSION}}) pastroq", "Danger Zone": "Xavfli zona", "Dark": "Qorong'i", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Fayl qo‘shib bo‘lmadi.", "Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI asbob serveriga ulanib boʻlmadi", + "Failed to convert OpenAI chats": "", "Failed to copy link": "Havolani nusxalab bo‘lmadi", "Failed to create API Key.": "API kalitini yaratib bo‘lmadi.", "Failed to delete note": "Qaydni o‘chirib bo‘lmadi", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "Fayl tarkibini yuklab bo‘lmadi.", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Bufer tarkibini o‘qib bo‘lmadi", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Boshqaruv yordami bilan xulosa chiqarish mexanizmi topilmadi", "No knowledge found": "Hech qanday bilim topilmadi", "No memories to clear": "Tozalash uchun xotiralar yo'q", + "No memories yet": "", "No model IDs": "Model identifikatorlari yo'q", "No models found": "Hech qanday model topilmadi", "No models selected": "Hech qanday model tanlanmagan", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Faqat harf-raqamli belgilar va defislarga ruxsat beriladi", "Only alphanumeric characters and hyphens are allowed in the command string.": "Buyruqlar qatorida faqat harf-raqamli belgilar va defislarga ruxsat beriladi.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Faqat to'plamlarni tahrirlash mumkin, hujjatlarni tahrirlash/qo'shish uchun yangi bilimlar bazasini yarating.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "Faqat markdown fayllariga ruxsat beriladi", "Only select users and groups with permission can access": "Faqat ruxsati bor tanlangan foydalanuvchilar va guruhlarga kirish mumkin", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Voy! URL noto‘g‘ri ko‘rinadi. Iltimos, ikki marta tekshiring va qayta urinib ko'ring.", @@ -1139,10 +1148,6 @@ "Open new chat": "Yangi chat oching", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover har qanday OpenAPI serveri tomonidan taqdim etilgan vositalardan foydalanishi mumkin.", - "CyberLover uses faster-whisper internally.": "CyberLover ichki tez shivirlashdan foydalanadi.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover SpeechT5 va CMU Arctic dinamik oʻrnatishlaridan foydalanadi.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Ochiq WebUI versiyasi (v{{OPEN_WEBUI_VERSION}}) talab qilingan versiyadan (v{{REQUIRED_VERSION}}) pastroq", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API konfiguratsiyasi", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 0d0ac64465..d76baaeadb 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -63,6 +63,7 @@ "Add text content": "Thêm nội dung văn bản", "Add User": "Thêm người dùng", "Add User Group": "Thêm Nhóm Người dùng", + "Add your first memory": "", "Additional Config": "", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "", "Additional Parameters": "", @@ -365,6 +366,10 @@ "Custom description enabled": "", "Custom Parameter Name": "", "Custom Parameter Value": "", + "CyberLover can use tools provided by any OpenAPI server.": "", + "CyberLover uses faster-whisper internally.": "CyberLover sử dụng faster-whisper bên trong.", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover sử dụng SpeechT5 và các embedding giọng nói CMU Arctic.", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Phiên bản CyberLover (v{{OPEN_WEBUI_VERSION}}) hiện thấp hơn phiên bản bắt buộc (v{{REQUIRED_VERSION}})", "Danger Zone": "Vùng Nguy hiểm", "Dark": "Tối", "Data Controls": "", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "", "Failed to add file.": "Không thể thêm tệp.", "Failed to connect to {{URL}} OpenAPI tool server": "Không thể kết nối đến máy chủ công cụ OpenAPI {{URL}}", + "Failed to convert OpenAI chats": "", "Failed to copy link": "", "Failed to create API Key.": "Lỗi khởi tạo API Key", "Failed to delete note": "", @@ -704,6 +710,7 @@ "Failed to import models": "", "Failed to load chat preview": "", "Failed to load file content.": "", + "Failed to load memories": "", "Failed to move chat": "", "Failed to read clipboard contents": "Không thể đọc nội dung clipboard", "Failed to render diagram": "", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "Không tìm thấy engine suy luận nào có hỗ trợ quản lý", "No knowledge found": "Không tìm thấy kiến thức", "No memories to clear": "Không có bộ nhớ nào để xóa", + "No memories yet": "", "No model IDs": "Không có ID mô hình", "No models found": "Không tìm thấy mô hình nào", "No models selected": "Chưa chọn mô hình nào", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "Chỉ cho phép các ký tự chữ và số và dấu gạch nối", "Only alphanumeric characters and hyphens are allowed in the command string.": "Chỉ ký tự số và gạch nối được phép trong chuỗi lệnh.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Chỉ có thể chỉnh sửa bộ sưu tập, tạo cơ sở kiến thức mới để chỉnh sửa/thêm tài liệu.", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "", "Only select users and groups with permission can access": "Chỉ người dùng và nhóm được chọn có quyền mới có thể truy cập", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Rất tiếc! URL dường như không hợp lệ. Vui lòng kiểm tra lại và thử lại.", @@ -1139,10 +1148,6 @@ "Open new chat": "Mở nội dung chat mới", "Open Sidebar": "", "Open User Profile Menu": "", - "CyberLover can use tools provided by any OpenAPI server.": "", - "CyberLover uses faster-whisper internally.": "CyberLover sử dụng faster-whisper bên trong.", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover sử dụng SpeechT5 và các embedding giọng nói CMU Arctic.", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Phiên bản CyberLover (v{{OPEN_WEBUI_VERSION}}) hiện thấp hơn phiên bản bắt buộc (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "API OpenAI", "OpenAI API Config": "Cấu hình API OpenAI", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index d3c78dcb80..181b5531b0 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -63,6 +63,7 @@ "Add text content": "添加文本内容", "Add User": "添加用户", "Add User Group": "添加权限组", + "Add your first memory": "", "Additional Config": "额外配置项", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Datalab Marker 的额外配置项,可以填写一个包含键值对的 JSON 字符串。例如:{\"key\": \"value\"}。支持的键包括:disable_links、keep_pageheader_in_output、keep_pagefooter_in_output、filter_blank_pages、drop_repeated_text、layout_coverage_threshold、merge_threshold、height_tolerance、gap_threshold、image_threshold、min_line_length、level_count 和 default_level。", "Additional Parameters": "额外参数", @@ -365,6 +366,10 @@ "Custom description enabled": "自定义描述已启用", "Custom Parameter Name": "自定义参数名称", "Custom Parameter Value": "自定义参数值", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover 可使用任何 OpenAPI 服务器提供的工具。", + "CyberLover uses faster-whisper internally.": "CyberLover 使用内置 faster-whisper", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover 使用 SpeechT5 和 CMU Arctic speaker embedding。", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "当前 CyberLover 版本 (v{{OPEN_WEBUI_VERSION}}) 低于所需的版本 (v{{REQUIRED_VERSION}})", "Danger Zone": "危险区域", "Dark": "暗色", "Data Controls": "数据", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "流式输出内容时启用动态渐显效果", "Failed to add file.": "添加文件失败", "Failed to connect to {{URL}} OpenAPI tool server": "连接到 {{URL}} OpenAPI 工具服务器失败", + "Failed to convert OpenAI chats": "", "Failed to copy link": "复制链接失败", "Failed to create API Key.": "创建 API 密钥失败", "Failed to delete note": "删除笔记失败", @@ -704,6 +710,7 @@ "Failed to import models": "导入模型配置失败", "Failed to load chat preview": "对话预览加载失败", "Failed to load file content.": "文件内容加载失败", + "Failed to load memories": "", "Failed to move chat": "移动对话失败", "Failed to read clipboard contents": "读取剪贴板内容失败", "Failed to render diagram": "渲染图表失败", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "未找到支持管理的推理引擎", "No knowledge found": "未找到知识", "No memories to clear": "记忆为空,无须清理", + "No memories yet": "", "No model IDs": "没有模型 ID", "No models found": "未找到任何模型", "No models selected": "未选择任何模型", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "只允许使用英文字母,数字 (0-9) 以及连字符 (-)", "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。", "Only collections can be edited, create a new knowledge base to edit/add documents.": "只能编辑文件集,创建一个新的知识库来编辑/添加文件。", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "仅允许使用 markdown 文件", "Only select users and groups with permission can access": "只有具有权限的用户和组才能访问", "Oops! Looks like the URL is invalid. Please double-check and try again.": "糟糕!此链接似乎为无效链接。请检查后重试。", @@ -1139,10 +1148,6 @@ "Open new chat": "打开新对话", "Open Sidebar": "展开侧边栏", "Open User Profile Menu": "打开个人资料菜单", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover 可使用任何 OpenAPI 服务器提供的工具。", - "CyberLover uses faster-whisper internally.": "CyberLover 使用内置 faster-whisper", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover 使用 SpeechT5 和 CMU Arctic speaker embedding。", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "当前 CyberLover 版本 (v{{OPEN_WEBUI_VERSION}}) 低于所需的版本 (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 配置", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 6b5b79fdde..a0a33d06b6 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -63,6 +63,7 @@ "Add text content": "新增文字內容", "Add User": "新增使用者", "Add User Group": "新增使用者群組", + "Add your first memory": "", "Additional Config": "額外設定", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Datalab Marker 的額外設定選項,可以填寫一個包含鍵值對的 JSON 字串。例如:{\"key\": \"value\"}。支援的鍵包括:disable_links、keep_pageheader_in_output、keep_pagefooter_in_output、filter_blank_pages、drop_repeated_text、layout_coverage_threshold、merge_threshold、height_tolerance、gap_threshold、image_threshold、min_line_length、level_count 和 default_level。", "Additional Parameters": "額外參數", @@ -365,6 +366,10 @@ "Custom description enabled": "自訂描述已啟用", "Custom Parameter Name": "自訂參數名稱", "Custom Parameter Value": "自訂參數值", + "CyberLover can use tools provided by any OpenAPI server.": "CyberLover 可使用任何 OpenAPI 伺服器提供的工具。", + "CyberLover uses faster-whisper internally.": "CyberLover 使用內部 faster-whisper。", + "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover 使用 SpeechT5 和 CMU Arctic 說話者嵌入。", + "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover 版本 (v{{OPEN_WEBUI_VERSION}}) 低於所需版本 (v{{REQUIRED_VERSION}})", "Danger Zone": "危險區域", "Dark": "深色", "Data Controls": "資料", @@ -694,6 +699,7 @@ "Fade Effect for Streaming Text": "串流文字淡入效果", "Failed to add file.": "新增檔案失敗。", "Failed to connect to {{URL}} OpenAPI tool server": "無法連線至 {{URL}} OpenAPI 工具伺服器", + "Failed to convert OpenAI chats": "", "Failed to copy link": "複製連結失敗", "Failed to create API Key.": "建立 API 金鑰失敗。", "Failed to delete note": "刪除筆記失敗", @@ -704,6 +710,7 @@ "Failed to import models": "匯入模型失敗", "Failed to load chat preview": "對話預覽載入失敗", "Failed to load file content.": "載入檔案內容失敗。", + "Failed to load memories": "", "Failed to move chat": "移動對話失敗", "Failed to read clipboard contents": "讀取剪貼簿內容失敗", "Failed to render diagram": "繪製圖表失敗", @@ -1075,6 +1082,7 @@ "No inference engine with management support found": "未找到支援管理功能的推理引擎", "No knowledge found": "未找到知識", "No memories to clear": "沒有記憶可清除", + "No memories yet": "", "No model IDs": "沒有模型 ID", "No models found": "未找到模型", "No models selected": "未選取模型", @@ -1124,6 +1132,7 @@ "Only alphanumeric characters and hyphens are allowed": "只允許使用英文字母、數字和連字號", "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字串中只允許使用英文字母、數字和連字號。", "Only collections can be edited, create a new knowledge base to edit/add documents.": "只能編輯集合,請建立新的知識以編輯或新增檔案。", + "Only JSON and ZIP file types are supported.": "", "Only markdown files are allowed": "僅允許 Markdown 檔案", "Only select users and groups with permission can access": "只有具有權限的選定使用者和群組可以存取", "Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!這個 URL 似乎無效。請仔細檢查並再試一次。", @@ -1139,10 +1148,6 @@ "Open new chat": "開啟新的對話", "Open Sidebar": "展開側邊欄", "Open User Profile Menu": "開啟個人資料選單", - "CyberLover can use tools provided by any OpenAPI server.": "CyberLover 可使用任何 OpenAPI 伺服器提供的工具。", - "CyberLover uses faster-whisper internally.": "CyberLover 使用內部 faster-whisper。", - "CyberLover uses SpeechT5 and CMU Arctic speaker embeddings.": "CyberLover 使用 SpeechT5 和 CMU Arctic 說話者嵌入。", - "CyberLover version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "CyberLover 版本 (v{{OPEN_WEBUI_VERSION}}) 低於所需版本 (v{{REQUIRED_VERSION}})", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 設定", diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index de37963adb..ec4f882c99 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -60,6 +60,7 @@ export const prompts: Writable = writable(null); export const knowledge: Writable = writable(null); export const tools = writable(null); export const functions = writable(null); +export const memories = writable([]); export const toolServers = writable([]); @@ -73,6 +74,7 @@ export const showSettings = writable(false); export const showShortcuts = writable(false); export const showArchivedChats = writable(false); export const showChangelog = writable(false); +export const showMemoryPanel = writable(false); export const showControls = writable(false); export const showEmbeds = writable(false); diff --git a/src/routes/(app)/memories/+page.svelte b/src/routes/(app)/memories/+page.svelte new file mode 100644 index 0000000000..a8133b2b48 --- /dev/null +++ b/src/routes/(app)/memories/+page.svelte @@ -0,0 +1,347 @@ + + +
+ + + + +
+
+ +
+

+ {$i18n.t('Memories accessible by LLMs will be shown here.')} +

+
+ + +
+
+ + + {#if loading} +
+
+
+
{$i18n.t('Loading...')}
+
+
+ {:else if $memories.length === 0} +
+
+
+ +
+

+ {$i18n.t('No memories yet')} +

+

+ {$i18n.t('Memories accessible by LLMs will be shown here.')} +

+ +
+
+ {:else} +
+ {#each $memories as memory} +
+
+
+

+ {memory.content} +

+
+ + + + {dayjs(memory.updated_at * 1000).format('ll')} +
+
+
+ + + + + + +
+
+
+ {/each} +
+ {/if} +
+
+
+ + { + showClearConfirmDialog = false; + }} +/> + + { + await loadMemories(); + }} +/> + + { + await loadMemories(); + }} +/> From 87a44a2ecbb93d1c7b7b231b05703e92de05f3d0 Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Sun, 23 Nov 2025 22:47:59 +0800 Subject: [PATCH 10/12] =?UTF-8?q?feat:=20=E8=AE=B0=E5=BF=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=94=AF=E6=8C=81=E5=9C=A8=E6=96=B0=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E5=86=B3=E5=AE=9A=E6=98=AF=E5=90=A6=E5=90=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/chat/Chat.svelte | 17 ++++++++++++ src/lib/components/chat/MessageInput.svelte | 27 ++++++++++++++++++- .../chat/MessageInput/IntegrationsMenu.svelte | 1 + src/lib/components/chat/Placeholder.svelte | 2 ++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index fc663a3e2a..92fb983053 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -129,6 +129,7 @@ let imageGenerationEnabled = false; let webSearchEnabled = false; let codeInterpreterEnabled = false; + let memoryEnabled = true; let showCommands = false; @@ -166,6 +167,7 @@ selectedFilterIds = []; webSearchEnabled = false; imageGenerationEnabled = false; + memoryEnabled = true; const storageChatInput = sessionStorage.getItem( `chat-input${chatIdProp ? `-${chatIdProp}` : ''}` @@ -190,6 +192,7 @@ webSearchEnabled = input.webSearchEnabled; imageGenerationEnabled = input.imageGenerationEnabled; codeInterpreterEnabled = input.codeInterpreterEnabled; + memoryEnabled = input.memoryEnabled; } } catch (e) {} } @@ -250,6 +253,7 @@ webSearchEnabled = false; imageGenerationEnabled = false; codeInterpreterEnabled = false; + memoryEnabled = true; setDefaults(); }; @@ -296,6 +300,10 @@ if (model.info?.meta?.capabilities?.['code_interpreter']) { codeInterpreterEnabled = model.info.meta.defaultFeatureIds.includes('code_interpreter'); } + + if (model.info?.meta?.capabilities?.['memory']) { + memoryEnabled = model.info.meta.defaultFeatureIds.includes('memory'); + } } } }; @@ -559,6 +567,7 @@ webSearchEnabled = false; imageGenerationEnabled = false; codeInterpreterEnabled = false; + memoryEnabled = true; try { const input = JSON.parse(storageChatInput); @@ -571,6 +580,7 @@ webSearchEnabled = input.webSearchEnabled; imageGenerationEnabled = input.imageGenerationEnabled; codeInterpreterEnabled = input.codeInterpreterEnabled; + memoryEnabled = input.memoryEnabled; } } catch (e) {} } @@ -1749,6 +1759,11 @@ features = { ...features, memory: true }; } + // 如果用户手动切换了记忆开关,覆盖全局设置 + if (memoryEnabled !== undefined && memoryEnabled !== ($settings?.memory ?? false)) { + features = { ...features, memory: memoryEnabled }; + } + return features; }; @@ -2454,6 +2469,7 @@ bind:imageGenerationEnabled bind:codeInterpreterEnabled bind:webSearchEnabled + bind:memoryEnabled bind:atSelectedModel bind:showCommands toolServers={$toolServers} @@ -2506,6 +2522,7 @@ bind:imageGenerationEnabled bind:codeInterpreterEnabled bind:webSearchEnabled + bind:memoryEnabled bind:atSelectedModel bind:showCommands toolServers={$toolServers} diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index c525dcf34c..cc5d8b10ff 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -58,6 +58,7 @@ import Tooltip from '../common/Tooltip.svelte'; import FileItem from '../common/FileItem.svelte'; import Image from '../common/Image.svelte'; + import Switch from '../common/Switch.svelte'; import XMark from '../icons/XMark.svelte'; import Headphone from '../icons/Headphone.svelte'; @@ -108,6 +109,7 @@ export let imageGenerationEnabled = false; export let webSearchEnabled = false; export let codeInterpreterEnabled = false; + export let memoryEnabled = false; let showInputVariablesModal = false; let inputVariablesModalCallback = (variableValues) => {}; @@ -138,7 +140,8 @@ selectedFilterIds, imageGenerationEnabled, webSearchEnabled, - codeInterpreterEnabled + codeInterpreterEnabled, + memoryEnabled }); const inputVariableHandler = async (text: string): Promise => { @@ -475,6 +478,9 @@ $config?.features?.enable_code_interpreter && ($_user.role === 'admin' || $_user?.permissions?.features?.code_interpreter); + let showMemoryButton = false; + $: showMemoryButton = $settings?.memory !== undefined; + const scrollToBottom = () => { const element = document.getElementById('messages-container'); element.scrollTo({ @@ -1330,6 +1336,7 @@ webSearchEnabled = false; imageGenerationEnabled = false; codeInterpreterEnabled = false; + memoryEnabled = false; } }} on:paste={async (e) => { @@ -1471,6 +1478,7 @@ bind:webSearchEnabled bind:imageGenerationEnabled bind:codeInterpreterEnabled + bind:memoryEnabled closeOnOutsideClick={integrationsMenuCloseOnOutsideClick} onShowValves={(e) => { const { type, id } = e; @@ -1495,6 +1503,23 @@ {/if} + {#if showMemoryButton} +
+
+ + {$i18n.t('Memory')} +
+ { + await tick(); + }} + /> +
+ {/if} + {#if selectedModelIds.length === 1 && $models.find((m) => m.id === selectedModelIds[0])?.has_user_valves}
diff --git a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte index ffa7e72958..79e8bfd215 100644 --- a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte +++ b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte @@ -39,6 +39,7 @@ export let imageGenerationEnabled = false; export let showCodeInterpreterButton = false; export let codeInterpreterEnabled = false; + export let memoryEnabled = false; export let onShowValves: Function; export let onClose: Function; diff --git a/src/lib/components/chat/Placeholder.svelte b/src/lib/components/chat/Placeholder.svelte index 509ef9f2ba..a6e54c2f21 100644 --- a/src/lib/components/chat/Placeholder.svelte +++ b/src/lib/components/chat/Placeholder.svelte @@ -53,6 +53,7 @@ export let imageGenerationEnabled = false; export let codeInterpreterEnabled = false; export let webSearchEnabled = false; + export let memoryEnabled = false; export let onSelect = (e) => {}; export let onChange = (e) => {}; @@ -213,6 +214,7 @@ bind:imageGenerationEnabled bind:codeInterpreterEnabled bind:webSearchEnabled + bind:memoryEnabled bind:atSelectedModel bind:showCommands {toolServers} From 853cba3e4f34b1c7230ab85ebd60cccd02c6f186 Mon Sep 17 00:00:00 2001 From: sylarchen1389 Date: Sun, 23 Nov 2025 22:58:28 +0800 Subject: [PATCH 11/12] =?UTF-8?q?feat:=20=E5=B1=8F=E8=94=BD=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/chat/MessageInput.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index cc5d8b10ff..05dfe3e767 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -1466,6 +1466,9 @@ class="flex self-center w-[1px] h-4 mx-1 bg-gray-200/50 dark:bg-gray-800/50" /> + + + {#if false} {#if showWebSearchButton || showImageGenerationButton || showCodeInterpreterButton || showToolsButton || (toggleFilters && toggleFilters.length > 0)} {/if} + {/if} {#if showMemoryButton}
Date: Sun, 23 Nov 2025 23:07:43 +0800 Subject: [PATCH 12/12] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=AF=B9=E8=AF=9D=E8=AE=B0=E5=BD=95=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/layout/Sidebar.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 7e0781b723..ea1520a16f 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -1277,6 +1277,9 @@
+ +
+