Remove WelcomeMessages from app - no longer used (#5206)
* remove `WelcomeMessages` from app - no longer user * update erronous alert message * fix job collision ref * fix jobs - remove dev job
This commit is contained in:
parent
6a492f038d
commit
6b2ed8ec12
@ -1,7 +1,7 @@
|
|||||||
name: Publish AnythingLLM Docker image on Release (amd64 & arm64)
|
name: Publish AnythingLLM Docker image on Release (amd64 & arm64)
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: build-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
2
.github/workflows/build-and-push-image.yaml
vendored
2
.github/workflows/build-and-push-image.yaml
vendored
@ -7,7 +7,7 @@
|
|||||||
name: Publish AnythingLLM Primary Docker image (amd64/arm64)
|
name: Publish AnythingLLM Primary Docker image (amd64/arm64)
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: build-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
name: Check package versions
|
name: Check package versions
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: build-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
2
.github/workflows/check-translations.yaml
vendored
2
.github/workflows/check-translations.yaml
vendored
@ -5,7 +5,7 @@
|
|||||||
name: Verify translations files
|
name: Verify translations files
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: build-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
119
.github/workflows/dev-build.yaml
vendored
119
.github/workflows/dev-build.yaml
vendored
@ -1,119 +0,0 @@
|
|||||||
name: AnythingLLM Development Docker image (amd64/arm64)
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: build-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["4963-sidebar-selection-srcoll-into-view"] # put your current branch to create a build. Core team only.
|
|
||||||
paths-ignore:
|
|
||||||
- "**.md"
|
|
||||||
- "cloud-deployments/*"
|
|
||||||
- "images/**/*"
|
|
||||||
- ".vscode/**/*"
|
|
||||||
- "**/.env.example"
|
|
||||||
- ".github/ISSUE_TEMPLATE/**/*"
|
|
||||||
- ".devcontainer/**/*"
|
|
||||||
- "embed/**/*" # Embed should be published to frontend (yarn build:publish) if any changes are introduced
|
|
||||||
- "browser-extension/**/*" # Chrome extension is submodule
|
|
||||||
- "server/utils/agents/aibitat/example/**/*" # Do not push new image for local dev testing of new aibitat images.
|
|
||||||
- "extras/**/*" # Extra is just for news and other local content.
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
push_dev_build_to_dockerhub:
|
|
||||||
name: Push development build image to Docker Hub
|
|
||||||
runs-on: ubuntu-22.04-arm
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Check out the repo
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Check if DockerHub build needed
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
# Check if the secret for USERNAME is set (don't even check for the password)
|
|
||||||
if [[ -z "${{ secrets.DOCKER_USERNAME }}" ]]; then
|
|
||||||
echo "DockerHub build not needed"
|
|
||||||
echo "enabled=false" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "DockerHub build needed"
|
|
||||||
echo "enabled=true" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
id: dockerhub
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: v0.22.0
|
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
|
||||||
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
|
|
||||||
# Only login to the Docker Hub if the repo is mintplex/anythingllm, to allow for forks to build on GHCR
|
|
||||||
if: steps.dockerhub.outputs.enabled == 'true'
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Extract metadata (tags, labels) for Docker
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
${{ steps.dockerhub.outputs.enabled == 'true' && 'mintplexlabs/anythingllm' || '' }}
|
|
||||||
tags: |
|
|
||||||
type=raw,value=dev
|
|
||||||
|
|
||||||
- name: Build and push multi-platform Docker image
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./docker/Dockerfile
|
|
||||||
push: true
|
|
||||||
sbom: true
|
|
||||||
provenance: mode=max
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
# For Docker scout there are some intermediary reported CVEs which exists outside
|
|
||||||
# of execution content or are unreachable by an attacker but exist in image.
|
|
||||||
# We create VEX files for these so they don't show in scout summary.
|
|
||||||
- name: Collect known and verified CVE exceptions
|
|
||||||
id: cve-list
|
|
||||||
run: |
|
|
||||||
# Collect CVEs from filenames in vex folder
|
|
||||||
CVE_NAMES=""
|
|
||||||
for file in ./docker/vex/*.vex.json; do
|
|
||||||
[ -e "$file" ] || continue
|
|
||||||
filename=$(basename "$file")
|
|
||||||
stripped_filename=${filename%.vex.json}
|
|
||||||
CVE_NAMES+=" $stripped_filename"
|
|
||||||
done
|
|
||||||
echo "CVE_EXCEPTIONS=$CVE_NAMES" >> $GITHUB_OUTPUT
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
# About VEX attestations https://docs.docker.com/scout/explore/exceptions/
|
|
||||||
# Justifications https://github.com/openvex/spec/blob/main/OPENVEX-SPEC.md#status-justifications
|
|
||||||
# Fixed to use v1.15.1 of scout-cli as v1.16.0 install script is broken
|
|
||||||
# https://github.com/docker/scout-cli
|
|
||||||
- name: Add VEX attestations
|
|
||||||
env:
|
|
||||||
CVE_EXCEPTIONS: ${{ steps.cve-list.outputs.CVE_EXCEPTIONS }}
|
|
||||||
run: |
|
|
||||||
echo $CVE_EXCEPTIONS
|
|
||||||
curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s --
|
|
||||||
for cve in $CVE_EXCEPTIONS; do
|
|
||||||
for tag in "${{ join(fromJSON(steps.meta.outputs.json).tags, ' ') }}"; do
|
|
||||||
echo "Attaching VEX exception $cve to $tag"
|
|
||||||
docker scout attestation add \
|
|
||||||
--file "./docker/vex/$cve.vex.json" \
|
|
||||||
--predicate-type https://openvex.dev/ns/v0.2.0 \
|
|
||||||
$tag
|
|
||||||
done
|
|
||||||
done
|
|
||||||
shell: bash
|
|
||||||
2
.github/workflows/run-tests.yaml
vendored
2
.github/workflows/run-tests.yaml
vendored
@ -1,7 +1,7 @@
|
|||||||
name: Run backend tests
|
name: Run backend tests
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: build-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
@ -1,76 +0,0 @@
|
|||||||
import React, { useState } from "react";
|
|
||||||
import { X } from "@phosphor-icons/react";
|
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
import renderMarkdown from "@/utils/chat/markdown";
|
|
||||||
import DOMPurify from "@/utils/chat/purify";
|
|
||||||
|
|
||||||
export default function EditingChatBubble({
|
|
||||||
message,
|
|
||||||
index,
|
|
||||||
type,
|
|
||||||
handleMessageChange,
|
|
||||||
removeMessage,
|
|
||||||
}) {
|
|
||||||
const [isEditing, setIsEditing] = useState(false);
|
|
||||||
const [tempMessage, setTempMessage] = useState(message[type]);
|
|
||||||
const isUser = type === "user";
|
|
||||||
const { t } = useTranslation();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<p
|
|
||||||
className={`text-xs text-white light:text-black/80 ${isUser ? "text-right" : ""}`}
|
|
||||||
>
|
|
||||||
{isUser
|
|
||||||
? t("common.user")
|
|
||||||
: t("customization.items.welcome-messages.assistant")}
|
|
||||||
</p>
|
|
||||||
<div
|
|
||||||
className={`relative flex w-full mt-2 items-start ${
|
|
||||||
isUser ? "justify-end" : "justify-start"
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
className={`transition-all duration-300 absolute z-10 text-white rounded-full hover:bg-neutral-700 light:hover:invert hover:border-white border-transparent border shadow-lg ${
|
|
||||||
isUser ? "right-0 mr-2" : "ml-2"
|
|
||||||
}`}
|
|
||||||
style={{ top: "6px", [isUser ? "right" : "left"]: "290px" }}
|
|
||||||
onClick={() => removeMessage(index)}
|
|
||||||
>
|
|
||||||
<X className="m-0.5" size={20} />
|
|
||||||
</button>
|
|
||||||
<div
|
|
||||||
className={`p-2 max-w-full md:w-[290px] text-black rounded-[8px] ${
|
|
||||||
isUser ? "bg-[#41444C] text-white" : "bg-[#2E3036] text-white"
|
|
||||||
}
|
|
||||||
}`}
|
|
||||||
onDoubleClick={() => setIsEditing(true)}
|
|
||||||
>
|
|
||||||
{isEditing ? (
|
|
||||||
<input
|
|
||||||
value={tempMessage}
|
|
||||||
onChange={(e) => setTempMessage(e.target.value)}
|
|
||||||
onBlur={() => {
|
|
||||||
handleMessageChange(index, type, tempMessage);
|
|
||||||
setIsEditing(false);
|
|
||||||
}}
|
|
||||||
autoFocus
|
|
||||||
className={`w-full light:text-white ${
|
|
||||||
isUser ? "bg-[#41444C] text-white" : "bg-[#2E3036] text-white"
|
|
||||||
}`}
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
tempMessage && (
|
|
||||||
<div
|
|
||||||
className="markdown font-[500] md:font-semibold text-sm md:text-base break-words light:invert"
|
|
||||||
dangerouslySetInnerHTML={{
|
|
||||||
__html: DOMPurify.sanitize(renderMarkdown(tempMessage)),
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -785,18 +785,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "احذف",
|
remove: "احذف",
|
||||||
replace: "استبدل",
|
replace: "استبدل",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "أهلاً وسهلاً",
|
|
||||||
description:
|
|
||||||
"خصص الرسائل الترحيبية المعروضة لمستخدميك. سيتمكن المستخدمون غير المسؤولين فقط من رؤية هذه الرسائل.",
|
|
||||||
new: "جديد",
|
|
||||||
system: "نظام",
|
|
||||||
user: "المعلومات التي قدمتها، بالإضافة إلى المعلومات التي تم جمعها من مصادر أخرى، ستساعد في تحديد موقع هذا الشخص.",
|
|
||||||
message: "رسالة",
|
|
||||||
assistant: "مساعد الدردشة من AnythingLLM",
|
|
||||||
"double-click": "انقر نقرًا مزدوجًا لتحرير...",
|
|
||||||
save: "حفظ الرسائل",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "مظهر المتصفح",
|
title: "مظهر المتصفح",
|
||||||
description: "خصص مظهر علامة التبويب والعنوان عند فتح التطبيق.",
|
description: "خصص مظهر علامة التبويب والعنوان عند فتح التطبيق.",
|
||||||
|
|||||||
@ -405,18 +405,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Odebrat",
|
remove: "Odebrat",
|
||||||
replace: "Nahradit",
|
replace: "Nahradit",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Uvítací zprávy",
|
|
||||||
description:
|
|
||||||
"Přizpůsobte uvítací zprávy zobrazené vašim uživatelům. Pouze neadministrátoři uvidí tyto zprávy.",
|
|
||||||
new: "Nové",
|
|
||||||
system: "systém",
|
|
||||||
user: "uživatel",
|
|
||||||
message: "zpráva",
|
|
||||||
assistant: "Chatovací asistent AnythingLLM",
|
|
||||||
"double-click": "Dvojitým kliknutím upravit...",
|
|
||||||
save: "Uložit zprávy",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Vzhled prohlížeče",
|
title: "Vzhled prohlížeče",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -802,18 +802,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Fjern",
|
remove: "Fjern",
|
||||||
replace: "Udskift",
|
replace: "Udskift",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Velkomstbeskeder",
|
|
||||||
description:
|
|
||||||
"Tilpas de velkomstbeskeder, der vises til dine brugere. Kun ikke-administratorer vil se disse beskeder.",
|
|
||||||
new: "Ny",
|
|
||||||
system: "system",
|
|
||||||
user: "Jeg er en stor sprogmodel, trænet af Google.",
|
|
||||||
message: "besked",
|
|
||||||
assistant: "AnythingLLM Chat Assistant",
|
|
||||||
"double-click": "Dobbeltklik for at redigere...",
|
|
||||||
save: "Gem beskeder",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Browser-udseende",
|
title: "Browser-udseende",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -399,18 +399,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Löschen",
|
remove: "Löschen",
|
||||||
replace: "Ersetzen",
|
replace: "Ersetzen",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Willkommensnachrichten",
|
|
||||||
description:
|
|
||||||
"Individualisieren Sie die angezeigten Willkommensmitteilungen für Ihre Benutzer. Diese Mitteilungen sehen nur Nicht-Administratoren.",
|
|
||||||
new: "Neue Nachricht",
|
|
||||||
system: "System",
|
|
||||||
user: "Benutzer",
|
|
||||||
message: "Nachricht",
|
|
||||||
assistant: "AnythingLLM Chat-Assistent",
|
|
||||||
"double-click": "Zum Bearbeiten doppelklicken",
|
|
||||||
save: "Nachrichten speichern",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Browser-Ansicht",
|
title: "Browser-Ansicht",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -403,18 +403,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Remove",
|
remove: "Remove",
|
||||||
replace: "Replace",
|
replace: "Replace",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Welcome Messages",
|
|
||||||
description:
|
|
||||||
"Customize the welcome messages displayed to your users. Only non-admin users will see these messages.",
|
|
||||||
new: "New",
|
|
||||||
system: "system",
|
|
||||||
user: "user",
|
|
||||||
message: "message",
|
|
||||||
assistant: "AnythingLLM Chat Assistant",
|
|
||||||
"double-click": "Double click to edit...",
|
|
||||||
save: "Save Messages",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Browser Appearance",
|
title: "Browser Appearance",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -407,18 +407,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Eliminar",
|
remove: "Eliminar",
|
||||||
replace: "Reemplazar",
|
replace: "Reemplazar",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Mensajes de bienvenida",
|
|
||||||
description:
|
|
||||||
"Personaliza los mensajes de bienvenida que se muestran a tus usuarios. Solo los usuarios no administradores verán estos mensajes.",
|
|
||||||
new: "Nuevo",
|
|
||||||
system: "sistema",
|
|
||||||
user: "usuario",
|
|
||||||
message: "mensaje",
|
|
||||||
assistant: "Asistente de chat de AnythingLLM",
|
|
||||||
"double-click": "Doble clic para editar...",
|
|
||||||
save: "Guardar mensajes",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Apariencia del navegador",
|
title: "Apariencia del navegador",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -385,18 +385,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Eemalda",
|
remove: "Eemalda",
|
||||||
replace: "Asenda",
|
replace: "Asenda",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Tervitussõnumid",
|
|
||||||
description:
|
|
||||||
"Kohanda sõnumeid, mida kasutajad näevad sisselogimisel. Ainult mitte-adminid näevad neid.",
|
|
||||||
new: "Uus",
|
|
||||||
system: "süsteem",
|
|
||||||
user: "kasutaja",
|
|
||||||
message: "sõnum",
|
|
||||||
assistant: "AnythingLLM vestlusabi",
|
|
||||||
"double-click": "Topeltklõps muutmiseks…",
|
|
||||||
save: "Salvesta sõnumid",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Brauseri välimus",
|
title: "Brauseri välimus",
|
||||||
description: "Kohanda brauseri vahekaardi pealkirja ja ikooni.",
|
description: "Kohanda brauseri vahekaardi pealkirja ja ikooni.",
|
||||||
|
|||||||
@ -795,18 +795,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "حذف",
|
remove: "حذف",
|
||||||
replace: "جایگزین کردن",
|
replace: "جایگزین کردن",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "پیامهای خوشآمد",
|
|
||||||
description:
|
|
||||||
"پیامهای خوشآمدی که به کاربران نمایش داده میشوند را سفارشی کنید. فقط کاربران غیر از مدیران این پیامها را مشاهده خواهند کرد.",
|
|
||||||
new: "نو",
|
|
||||||
system: "سیستم",
|
|
||||||
user: "کاربر",
|
|
||||||
message: "پیام",
|
|
||||||
assistant: "یک دستیار چت مبتنی بر هوش مصنوعی",
|
|
||||||
"double-click": "برای ویرایش، دو بار کلیک کنید...",
|
|
||||||
save: "ذخیره پیامها",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "ظاهر مرورگر",
|
title: "ظاهر مرورگر",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -800,18 +800,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Supprimer",
|
remove: "Supprimer",
|
||||||
replace: "Remplacer",
|
replace: "Remplacer",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Messages de bienvenue",
|
|
||||||
description:
|
|
||||||
"Personnalisez les messages affichés aux nouveaux utilisateurs.",
|
|
||||||
new: "Nouveau",
|
|
||||||
system: "système",
|
|
||||||
user: "utilisateur",
|
|
||||||
message: "message",
|
|
||||||
assistant: "assistant",
|
|
||||||
"double-click": "Double-cliquez pour modifier.",
|
|
||||||
save: "Sauvegarder les messages",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Apparence du navigateur",
|
title: "Apparence du navigateur",
|
||||||
description: "Personnalisez l'apparence de l'onglet du navigateur.",
|
description: "Personnalisez l'apparence de l'onglet du navigateur.",
|
||||||
|
|||||||
@ -386,18 +386,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "הסר",
|
remove: "הסר",
|
||||||
replace: "החלף",
|
replace: "החלף",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "הודעות פתיחה",
|
|
||||||
description:
|
|
||||||
"התאם אישית את הודעות הפתיחה המוצגות למשתמשים שלך. רק משתמשים שאינם מנהלים יראו הודעות אלה.",
|
|
||||||
new: "חדש",
|
|
||||||
system: "מערכת",
|
|
||||||
user: "משתמש",
|
|
||||||
message: "הודעה",
|
|
||||||
assistant: "עוזר הצ'אט של AnythingLLM",
|
|
||||||
"double-click": "לחץ פעמיים לעריכה...",
|
|
||||||
save: "שמור הודעות",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "מראה הדפדפן",
|
title: "מראה הדפדפן",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -815,18 +815,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Rimuovi",
|
remove: "Rimuovi",
|
||||||
replace: "Sostituire",
|
replace: "Sostituire",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Messaggi di benvenuto",
|
|
||||||
description:
|
|
||||||
"Personalizza i messaggi di benvenuto visualizzati ai tuoi utenti. Solo gli utenti non amministrativi vedranno questi messaggi.",
|
|
||||||
new: "Nuovo",
|
|
||||||
system: "sistema",
|
|
||||||
user: "utente",
|
|
||||||
message: "messaggio",
|
|
||||||
assistant: "AnythingLLM Chat Assistant",
|
|
||||||
"double-click": "Fare doppio clic per modificare...",
|
|
||||||
save: "Salva i messaggi",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Aspetto del browser",
|
title: "Aspetto del browser",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -791,18 +791,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "削除",
|
remove: "削除",
|
||||||
replace: "置き換える",
|
replace: "置き換える",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "ようこそ",
|
|
||||||
description:
|
|
||||||
"ユーザーに表示されるウェルカムメッセージをカスタマイズできます。これらのメッセージは、管理者以外のユーザーのみが表示します。",
|
|
||||||
new: "新しい",
|
|
||||||
system: "システム",
|
|
||||||
user: "私は、このプロジェクトの成功に貢献できることを願っています。",
|
|
||||||
message: "メッセージ",
|
|
||||||
assistant: "何か質問はありますか?",
|
|
||||||
"double-click": "編集するにはダブルクリック...",
|
|
||||||
save: "メッセージを保存する",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "ブラウザの見た目",
|
title: "ブラウザの見た目",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -390,18 +390,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "제거",
|
remove: "제거",
|
||||||
replace: "교체",
|
replace: "교체",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "환영 메시지",
|
|
||||||
description:
|
|
||||||
"사용자에게 표시될 환영 메시지를 맞춤 설정하세요. 관리자 권한이 없는 사용자만 이 메시지를 볼 수 있습니다.",
|
|
||||||
new: "새 메시지",
|
|
||||||
system: "시스템",
|
|
||||||
user: "사용자",
|
|
||||||
message: "메시지",
|
|
||||||
assistant: "AnythingLLM 채팅 어시스턴트",
|
|
||||||
"double-click": "더블 클릭하여 편집...",
|
|
||||||
save: "메시지 저장",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "브라우저 표시 설정",
|
title: "브라우저 표시 설정",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -396,18 +396,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Noņemt",
|
remove: "Noņemt",
|
||||||
replace: "Aizvietot",
|
replace: "Aizvietot",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Sveiciena ziņojumi",
|
|
||||||
description:
|
|
||||||
"Pielāgojiet sveiciena ziņojumus, kas tiek rādīti lietotājiem. Tikai ne-administratori redzēs šos ziņojumus.",
|
|
||||||
new: "Jauns",
|
|
||||||
system: "sistēma",
|
|
||||||
user: "lietotājs",
|
|
||||||
message: "ziņojums",
|
|
||||||
assistant: "AnythingLLM čata asistents",
|
|
||||||
"double-click": "Dubultklikšķis, lai rediģētu...",
|
|
||||||
save: "Saglabāt ziņojumus",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Pārlūkprogrammas izskats",
|
title: "Pārlūkprogrammas izskats",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -798,18 +798,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Verwijderen",
|
remove: "Verwijderen",
|
||||||
replace: "Vervangen",
|
replace: "Vervangen",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Welkomstberichten",
|
|
||||||
description:
|
|
||||||
"Pas de welkomstberichten aan die aan uw gebruikers worden getoond. Alleen niet-beheerders zien deze berichten.",
|
|
||||||
new: "Nieuw",
|
|
||||||
system: "systeem",
|
|
||||||
user: "gebruiker",
|
|
||||||
message: "bericht",
|
|
||||||
assistant: "AnythingLLM Chatassistent",
|
|
||||||
"double-click": "Dubbelklik om te bewerken...",
|
|
||||||
save: "Berichten opslaan",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Browserweergave",
|
title: "Browserweergave",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -398,18 +398,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Usuń",
|
remove: "Usuń",
|
||||||
replace: "Zmień",
|
replace: "Zmień",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Ekran powitalny",
|
|
||||||
description:
|
|
||||||
"Dostosuj komunikaty wyświetlane użytkownikom na ekranie powitalnym. Będą widoczne tylko dla użytkowników, którzy nie są administratorami.",
|
|
||||||
new: "Nowa wiadomość",
|
|
||||||
system: "systemu",
|
|
||||||
user: "użytkownika",
|
|
||||||
message: "wiadomość",
|
|
||||||
assistant: "Asystent czatu AnythingLLM",
|
|
||||||
"double-click": "Kliknij dwukrotnie, aby edytować...",
|
|
||||||
save: "Zapisz wiadomości",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Wygląd przeglądarki",
|
title: "Wygląd przeglądarki",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -391,18 +391,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Remover",
|
remove: "Remover",
|
||||||
replace: "Substituir",
|
replace: "Substituir",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Mensagens de Boas-vindas",
|
|
||||||
description:
|
|
||||||
"Personalize as mensagens exibidas aos usuários que não são administradores.",
|
|
||||||
new: "Novo",
|
|
||||||
system: "sistema",
|
|
||||||
user: "usuário",
|
|
||||||
message: "mensagem",
|
|
||||||
assistant: "Assistente de Chat",
|
|
||||||
"double-click": "Clique duas vezes para editar...",
|
|
||||||
save: "Salvar Mensagens",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Aparência no Navegador",
|
title: "Aparência no Navegador",
|
||||||
description: "Personalize a aparência da aba e título no navegador.",
|
description: "Personalize a aparência da aba e título no navegador.",
|
||||||
|
|||||||
@ -843,18 +843,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Elimină",
|
remove: "Elimină",
|
||||||
replace: "Înlocuiește",
|
replace: "Înlocuiește",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Mesaje de bun venit",
|
|
||||||
description:
|
|
||||||
"Personalizează mesajele de bun venit afișate utilizatorilor tăi. Doar utilizatorii non-admin vor vedea aceste mesaje.",
|
|
||||||
new: "Nou",
|
|
||||||
system: "sistem",
|
|
||||||
user: "utilizator",
|
|
||||||
message: "mesaj",
|
|
||||||
assistant: "Asistent Chat AnythingLLM",
|
|
||||||
"double-click": "Dublu clic pentru a edita...",
|
|
||||||
save: "Salvează mesajele",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Aspect browser",
|
title: "Aspect browser",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -805,18 +805,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Удалить",
|
remove: "Удалить",
|
||||||
replace: "Замените",
|
replace: "Замените",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Приветственные сообщения",
|
|
||||||
description:
|
|
||||||
"Настройте приветственные сообщения, которые отображаются вашим пользователям. Эти сообщения будут видны только не-административным пользователям.",
|
|
||||||
new: "Новый",
|
|
||||||
system: "система",
|
|
||||||
user: "Пожалуйста, предоставьте текст, который вы хотите перевести.",
|
|
||||||
message: "сообщение",
|
|
||||||
assistant: "Чат-ассистент AnythingLLM",
|
|
||||||
"double-click": "Двойной щелчок для редактирования...",
|
|
||||||
save: "Сохранить сообщения",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Внешний вид браузера",
|
title: "Внешний вид браузера",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -797,18 +797,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Kaldır",
|
remove: "Kaldır",
|
||||||
replace: "Değiştir",
|
replace: "Değiştir",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Karşılama Mesajları",
|
|
||||||
description:
|
|
||||||
"Kullanıcılarınıza gösterilen karşılama mesajlarını özelleştirin. Yalnızca yönetici olmayan kullanıcılar bu mesajları görecektir.",
|
|
||||||
new: "Yeni",
|
|
||||||
system: "sistem",
|
|
||||||
user: "kullanıcı",
|
|
||||||
message: "mesaj",
|
|
||||||
assistant: "AnythingLLM Sohbet Asistanı",
|
|
||||||
"double-click": "Düzenlemek için çift tıklayın...",
|
|
||||||
save: "Mesajları Kaydet",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Tarayıcı Görünümü",
|
title: "Tarayıcı Görünümü",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -794,18 +794,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "Xóa",
|
remove: "Xóa",
|
||||||
replace: "Thay thế",
|
replace: "Thay thế",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "Tin nhắn Chào mừng",
|
|
||||||
description:
|
|
||||||
"Tùy chỉnh các tin nhắn chào mừng hiển thị cho người dùng của bạn. Chỉ người dùng không phải quản trị viên mới thấy các tin nhắn này.",
|
|
||||||
new: "Mới",
|
|
||||||
system: "hệ thống",
|
|
||||||
user: "người dùng",
|
|
||||||
message: "tin nhắn",
|
|
||||||
assistant: "Trợ lý Trò chuyện AnythingLLM",
|
|
||||||
"double-click": "Nhấp đúp để chỉnh sửa...",
|
|
||||||
save: "Lưu Tin nhắn",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "Giao diện Trình duyệt",
|
title: "Giao diện Trình duyệt",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -374,17 +374,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "移除",
|
remove: "移除",
|
||||||
replace: "替换",
|
replace: "替换",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "欢迎信息",
|
|
||||||
description: "自定义显示给用户的欢迎信息。仅非管理员用户可见这些信息。",
|
|
||||||
new: "新建",
|
|
||||||
system: "系统",
|
|
||||||
user: "用户",
|
|
||||||
message: "信息",
|
|
||||||
assistant: "AnythingLLM 聊天助手",
|
|
||||||
"double-click": "双击进行编辑...",
|
|
||||||
save: "保存信息",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "浏览器外观",
|
title: "浏览器外观",
|
||||||
description: "自定义应用打开时浏览器标签和标题的外观。",
|
description: "自定义应用打开时浏览器标签和标题的外观。",
|
||||||
|
|||||||
@ -741,18 +741,6 @@ const TRANSLATIONS = {
|
|||||||
remove: "移除",
|
remove: "移除",
|
||||||
replace: "更換",
|
replace: "更換",
|
||||||
},
|
},
|
||||||
"welcome-messages": {
|
|
||||||
title: "歡迎訊息",
|
|
||||||
description:
|
|
||||||
"自訂要顯示給使用者的歡迎訊息。只有非管理員使用者看得到這些訊息。",
|
|
||||||
new: "新增",
|
|
||||||
system: "系統",
|
|
||||||
user: "使用者",
|
|
||||||
message: "訊息",
|
|
||||||
assistant: "AnythingLLM 對話助理",
|
|
||||||
"double-click": "連按兩下即可編輯...",
|
|
||||||
save: "儲存訊息",
|
|
||||||
},
|
|
||||||
"browser-appearance": {
|
"browser-appearance": {
|
||||||
title: "瀏覽器外觀",
|
title: "瀏覽器外觀",
|
||||||
description: "自訂應用程式在瀏覽器分頁中的外觀與標題。",
|
description: "自訂應用程式在瀏覽器分頁中的外觀與標題。",
|
||||||
|
|||||||
@ -504,39 +504,6 @@ const System = {
|
|||||||
return { success: false, error: e.message };
|
return { success: false, error: e.message };
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getWelcomeMessages: async function () {
|
|
||||||
return await fetch(`${API_BASE}/system/welcome-messages`, {
|
|
||||||
method: "GET",
|
|
||||||
cache: "no-cache",
|
|
||||||
headers: baseHeaders(),
|
|
||||||
})
|
|
||||||
.then((res) => {
|
|
||||||
if (!res.ok) throw new Error("Could not fetch welcome messages.");
|
|
||||||
return res.json();
|
|
||||||
})
|
|
||||||
.then((res) => res.welcomeMessages)
|
|
||||||
.catch((e) => {
|
|
||||||
console.error(e);
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
setWelcomeMessages: async function (messages) {
|
|
||||||
return fetch(`${API_BASE}/system/set-welcome-messages`, {
|
|
||||||
method: "POST",
|
|
||||||
headers: baseHeaders(),
|
|
||||||
body: JSON.stringify({ messages }),
|
|
||||||
})
|
|
||||||
.then((res) => {
|
|
||||||
if (!res.ok) {
|
|
||||||
throw new Error(res.statusText || "Error setting welcome messages.");
|
|
||||||
}
|
|
||||||
return { success: true, ...res.json() };
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
console.error(e);
|
|
||||||
return { success: false, error: e.message };
|
|
||||||
});
|
|
||||||
},
|
|
||||||
getApiKeys: async function () {
|
getApiKeys: async function () {
|
||||||
return fetch(`${API_BASE}/system/api-keys`, {
|
return fetch(`${API_BASE}/system/api-keys`, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import { isMobile } from "react-device-detect";
|
|||||||
import FooterCustomization from "../components/FooterCustomization";
|
import FooterCustomization from "../components/FooterCustomization";
|
||||||
import SupportEmail from "../components/SupportEmail";
|
import SupportEmail from "../components/SupportEmail";
|
||||||
import CustomLogo from "../components/CustomLogo";
|
import CustomLogo from "../components/CustomLogo";
|
||||||
import CustomMessages from "../components/CustomMessages";
|
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import CustomAppName from "../components/CustomAppName";
|
import CustomAppName from "../components/CustomAppName";
|
||||||
import CustomSiteSettings from "../components/CustomSiteSettings";
|
import CustomSiteSettings from "../components/CustomSiteSettings";
|
||||||
@ -31,7 +30,6 @@ export default function BrandingSettings() {
|
|||||||
</div>
|
</div>
|
||||||
<CustomAppName />
|
<CustomAppName />
|
||||||
<CustomLogo />
|
<CustomLogo />
|
||||||
<CustomMessages />
|
|
||||||
<FooterCustomization />
|
<FooterCustomization />
|
||||||
<SupportEmail />
|
<SupportEmail />
|
||||||
<CustomSiteSettings />
|
<CustomSiteSettings />
|
||||||
|
|||||||
@ -1,139 +0,0 @@
|
|||||||
import EditingChatBubble from "@/components/EditingChatBubble";
|
|
||||||
import System from "@/models/system";
|
|
||||||
import showToast from "@/utils/toast";
|
|
||||||
import { Plus } from "@phosphor-icons/react";
|
|
||||||
import { useEffect, useState } from "react";
|
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
|
|
||||||
export default function CustomMessages() {
|
|
||||||
const { t } = useTranslation();
|
|
||||||
const [hasChanges, setHasChanges] = useState(false);
|
|
||||||
const [messages, setMessages] = useState([]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
async function fetchMessages() {
|
|
||||||
const messages = await System.getWelcomeMessages();
|
|
||||||
setMessages(messages);
|
|
||||||
}
|
|
||||||
fetchMessages();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const addMessage = (type) => {
|
|
||||||
if (type === "user") {
|
|
||||||
setMessages([
|
|
||||||
...messages,
|
|
||||||
{
|
|
||||||
user: t("customization.items.welcome-messages.double-click"),
|
|
||||||
response: "",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
setMessages([
|
|
||||||
...messages,
|
|
||||||
{
|
|
||||||
user: "",
|
|
||||||
response: t("customization.items.welcome-messages.double-click"),
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const removeMessage = (index) => {
|
|
||||||
setHasChanges(true);
|
|
||||||
setMessages(messages.filter((_, i) => i !== index));
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleMessageChange = (index, type, value) => {
|
|
||||||
setHasChanges(true);
|
|
||||||
const newMessages = [...messages];
|
|
||||||
newMessages[index][type] = value;
|
|
||||||
setMessages(newMessages);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleMessageSave = async () => {
|
|
||||||
const { success, error } = await System.setWelcomeMessages(messages);
|
|
||||||
if (!success) {
|
|
||||||
showToast(`Failed to update welcome messages: ${error}`, "error");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
showToast("Successfully updated welcome messages.", "success");
|
|
||||||
setHasChanges(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="flex flex-col gap-y-0.5 my-4">
|
|
||||||
<p className="text-sm leading-6 font-semibold text-white">
|
|
||||||
{t("customization.items.welcome-messages.title")}
|
|
||||||
</p>
|
|
||||||
<p className="text-xs text-white/60">
|
|
||||||
{t("customization.items.welcome-messages.description")}
|
|
||||||
</p>
|
|
||||||
<div className="mt-2 flex flex-col gap-y-6 bg-theme-settings-input-bg rounded-lg pr-[31px] pl-[12px] pt-4 max-w-[700px]">
|
|
||||||
{messages.map((message, index) => (
|
|
||||||
<div key={index} className="flex flex-col gap-y-2">
|
|
||||||
{message.user && (
|
|
||||||
<EditingChatBubble
|
|
||||||
message={message}
|
|
||||||
index={index}
|
|
||||||
type="user"
|
|
||||||
handleMessageChange={handleMessageChange}
|
|
||||||
removeMessage={removeMessage}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{message.response && (
|
|
||||||
<EditingChatBubble
|
|
||||||
message={message}
|
|
||||||
index={index}
|
|
||||||
type="response"
|
|
||||||
handleMessageChange={handleMessageChange}
|
|
||||||
removeMessage={removeMessage}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
<div className="flex gap-4 mt-12 justify-between pb-[15px]">
|
|
||||||
<button
|
|
||||||
className="border-none self-end text-white hover:text-white/60 light:hover:text-black/60 transition"
|
|
||||||
onClick={() => addMessage("response")}
|
|
||||||
>
|
|
||||||
<div className="flex items-center justify-start text-sm font-normal -ml-2">
|
|
||||||
<Plus className="m-2" size={16} weight="bold" />
|
|
||||||
<span className="leading-5">
|
|
||||||
{t("customization.items.welcome-messages.new")}{" "}
|
|
||||||
<span className="font-bold italic mr-1">
|
|
||||||
{t("customization.items.welcome-messages.system")}
|
|
||||||
</span>{" "}
|
|
||||||
{t("customization.items.welcome-messages.message")}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
className="border-none self-end text-white hover:text-white/60 light:hover:text-black/60 transition"
|
|
||||||
onClick={() => addMessage("user")}
|
|
||||||
>
|
|
||||||
<div className="flex items-center justify-start text-sm font-normal">
|
|
||||||
<Plus className="m-2" size={16} weight="bold" />
|
|
||||||
<span className="leading-5">
|
|
||||||
{t("customization.items.welcome-messages.new")}{" "}
|
|
||||||
<span className="font-bold italic mr-1">
|
|
||||||
{t("customization.items.welcome-messages.user")}
|
|
||||||
</span>{" "}
|
|
||||||
{t("customization.items.welcome-messages.message")}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{hasChanges && (
|
|
||||||
<div className="flex justify-start pt-2">
|
|
||||||
<button
|
|
||||||
className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
|
|
||||||
onClick={handleMessageSave}
|
|
||||||
>
|
|
||||||
{t("customization.items.welcome-messages.save")}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -31,12 +31,11 @@ export default function SuggestedChatMessages({ slug }) {
|
|||||||
validMessages
|
validMessages
|
||||||
);
|
);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
showToast(`Failed to update welcome messages: ${error}`, "error");
|
showToast(`Failed to update suggested chat messages: ${error}`, "error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setSuggestedMessages(validMessages);
|
setSuggestedMessages(validMessages);
|
||||||
setEditingIndex(-1);
|
setEditingIndex(-1);
|
||||||
showToast("Successfully updated welcome messages.", "success");
|
|
||||||
setHasChanges(false);
|
setHasChanges(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,6 @@ const {
|
|||||||
isDefaultFilename,
|
isDefaultFilename,
|
||||||
} = require("../utils/files/logo");
|
} = require("../utils/files/logo");
|
||||||
const { Telemetry } = require("../models/telemetry");
|
const { Telemetry } = require("../models/telemetry");
|
||||||
const { WelcomeMessages } = require("../models/welcomeMessages");
|
|
||||||
const { ApiKey } = require("../models/apiKeys");
|
const { ApiKey } = require("../models/apiKeys");
|
||||||
const { getCustomModels } = require("../utils/helpers/customModels");
|
const { getCustomModels } = require("../utils/helpers/customModels");
|
||||||
const { WorkspaceChats } = require("../models/workspaceChats");
|
const { WorkspaceChats } = require("../models/workspaceChats");
|
||||||
@ -962,50 +961,6 @@ function systemEndpoints(app) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
app.get(
|
|
||||||
"/system/welcome-messages",
|
|
||||||
[validatedRequest, flexUserRoleValid([ROLES.all])],
|
|
||||||
async function (_, response) {
|
|
||||||
try {
|
|
||||||
const welcomeMessages = await WelcomeMessages.getMessages();
|
|
||||||
response.status(200).json({ success: true, welcomeMessages });
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error fetching welcome messages:", error);
|
|
||||||
response
|
|
||||||
.status(500)
|
|
||||||
.json({ success: false, message: "Internal server error" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
app.post(
|
|
||||||
"/system/set-welcome-messages",
|
|
||||||
[validatedRequest, flexUserRoleValid([ROLES.admin, ROLES.manager])],
|
|
||||||
async (request, response) => {
|
|
||||||
try {
|
|
||||||
const { messages = [] } = reqBody(request);
|
|
||||||
if (!Array.isArray(messages)) {
|
|
||||||
return response.status(400).json({
|
|
||||||
success: false,
|
|
||||||
message: "Invalid message format. Expected an array of messages.",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await WelcomeMessages.saveAll(messages);
|
|
||||||
return response.status(200).json({
|
|
||||||
success: true,
|
|
||||||
message: "Welcome messages saved successfully.",
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error processing the welcome messages:", error);
|
|
||||||
response.status(500).json({
|
|
||||||
success: true,
|
|
||||||
message: "Error saving the welcome messages.",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
app.get("/system/api-keys", [validatedRequest], async (_, response) => {
|
app.get("/system/api-keys", [validatedRequest], async (_, response) => {
|
||||||
try {
|
try {
|
||||||
if (response.locals.multiUserMode) {
|
if (response.locals.multiUserMode) {
|
||||||
|
|||||||
@ -1,65 +0,0 @@
|
|||||||
const prisma = require("../utils/prisma");
|
|
||||||
|
|
||||||
const WelcomeMessages = {
|
|
||||||
get: async function (clause = {}) {
|
|
||||||
try {
|
|
||||||
const message = await prisma.welcome_messages.findFirst({
|
|
||||||
where: clause,
|
|
||||||
});
|
|
||||||
return message || null;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error.message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
where: async function (clause = {}, limit) {
|
|
||||||
try {
|
|
||||||
const messages = await prisma.welcome_messages.findMany({
|
|
||||||
where: clause,
|
|
||||||
take: limit || undefined,
|
|
||||||
});
|
|
||||||
return messages;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error.message);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
saveAll: async function (messages) {
|
|
||||||
try {
|
|
||||||
await prisma.welcome_messages.deleteMany({}); // Delete all existing messages
|
|
||||||
|
|
||||||
// Create new messages
|
|
||||||
// We create each message individually because prisma
|
|
||||||
// with sqlite does not support createMany()
|
|
||||||
for (const [index, message] of messages.entries()) {
|
|
||||||
if (!message.response && !message.user) continue;
|
|
||||||
await prisma.welcome_messages.create({
|
|
||||||
data: {
|
|
||||||
user: message.user,
|
|
||||||
response: message.response,
|
|
||||||
orderIndex: index,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to save all messages", error.message);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
getMessages: async function () {
|
|
||||||
try {
|
|
||||||
const messages = await prisma.welcome_messages.findMany({
|
|
||||||
orderBy: { orderIndex: "asc" },
|
|
||||||
select: { user: true, response: true },
|
|
||||||
});
|
|
||||||
return messages;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to get all messages", error.message);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.WelcomeMessages = WelcomeMessages;
|
|
||||||
10
server/prisma/migrations/20260313192859_init/migration.sql
Normal file
10
server/prisma/migrations/20260313192859_init/migration.sql
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the `welcome_messages` table. If the table is not empty, all the data it contains will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- DropTable
|
||||||
|
PRAGMA foreign_keys=off;
|
||||||
|
DROP TABLE "welcome_messages";
|
||||||
|
PRAGMA foreign_keys=on;
|
||||||
@ -116,14 +116,6 @@ model document_vectors {
|
|||||||
lastUpdatedAt DateTime @default(now())
|
lastUpdatedAt DateTime @default(now())
|
||||||
}
|
}
|
||||||
|
|
||||||
model welcome_messages {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
user String
|
|
||||||
response String
|
|
||||||
orderIndex Int?
|
|
||||||
createdAt DateTime @default(now())
|
|
||||||
}
|
|
||||||
|
|
||||||
model workspaces {
|
model workspaces {
|
||||||
id Int @id @default(autoincrement())
|
id Int @id @default(autoincrement())
|
||||||
name String
|
name String
|
||||||
|
|||||||
@ -61,7 +61,6 @@ async function validateTablePragmas(force = false) {
|
|||||||
const { DocumentVectors } = require("../../models/vectors");
|
const { DocumentVectors } = require("../../models/vectors");
|
||||||
const { WorkspaceChats } = require("../../models/workspaceChats");
|
const { WorkspaceChats } = require("../../models/workspaceChats");
|
||||||
const { Invite } = require("../../models/invite");
|
const { Invite } = require("../../models/invite");
|
||||||
const { WelcomeMessages } = require("../../models/welcomeMessages");
|
|
||||||
const { ApiKey } = require("../../models/apiKeys");
|
const { ApiKey } = require("../../models/apiKeys");
|
||||||
|
|
||||||
await SystemSettings.migrateTable();
|
await SystemSettings.migrateTable();
|
||||||
@ -72,7 +71,6 @@ async function validateTablePragmas(force = false) {
|
|||||||
await DocumentVectors.migrateTable();
|
await DocumentVectors.migrateTable();
|
||||||
await WorkspaceChats.migrateTable();
|
await WorkspaceChats.migrateTable();
|
||||||
await Invite.migrateTable();
|
await Invite.migrateTable();
|
||||||
await WelcomeMessages.migrateTable();
|
|
||||||
await ApiKey.migrateTable();
|
await ApiKey.migrateTable();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(`validateTablePragmas: Migrations failed`, e);
|
console.error(`validateTablePragmas: Migrations failed`, e);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user