瀏覽代碼

Merge branch 'dev' into dev

Timothy Jaeryang Baek 6 月之前
父節點
當前提交
c9c79852a5
共有 89 個文件被更改,包括 3406 次插入1176 次删除
  1. 2 2
      backend/open_webui/apps/retrieval/main.py
  2. 6 5
      backend/open_webui/apps/retrieval/utils.py
  3. 2 0
      backend/open_webui/apps/webui/main.py
  4. 102 11
      backend/open_webui/apps/webui/models/chats.py
  5. 225 0
      backend/open_webui/apps/webui/models/folders.py
  6. 62 12
      backend/open_webui/apps/webui/routers/auths.py
  7. 62 1
      backend/open_webui/apps/webui/routers/chats.py
  8. 259 0
      backend/open_webui/apps/webui/routers/folders.py
  9. 2 2
      backend/open_webui/config.py
  10. 3 1
      backend/open_webui/constants.py
  11. 1 1
      backend/open_webui/migrations/versions/1af9b942657b_migrate_tags.py
  12. 26 12
      backend/open_webui/migrations/versions/3ab32c4b8f59_update_tags.py
  13. 50 0
      backend/open_webui/migrations/versions/c69f45358db4_add_folder_table.py
  14. 1 1
      backend/open_webui/utils/utils.py
  15. 2 0
      backend/requirements.txt
  16. 3 2
      pyproject.toml
  17. 2 2
      src/app.css
  18. 36 1
      src/lib/apis/chats/index.ts
  19. 269 0
      src/lib/apis/folders/index.ts
  20. 2 2
      src/lib/components/admin/Settings/Documents.svelte
  21. 7 3
      src/lib/components/chat/MessageInput.svelte
  22. 7 0
      src/lib/components/chat/MessageInput/VoiceRecording.svelte
  23. 22 9
      src/lib/components/chat/Messages/RateComment.svelte
  24. 1 1
      src/lib/components/chat/Messages/ResponseMessage.svelte
  25. 6 3
      src/lib/components/chat/Tags.svelte
  26. 37 27
      src/lib/components/common/Collapsible.svelte
  27. 30 0
      src/lib/components/common/DragGhost.svelte
  28. 1 1
      src/lib/components/common/Dropdown.svelte
  29. 108 0
      src/lib/components/common/Folder.svelte
  30. 19 0
      src/lib/components/icons/Document.svelte
  31. 351 188
      src/lib/components/layout/Sidebar.svelte
  32. 0 2
      src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte
  33. 115 44
      src/lib/components/layout/Sidebar/ChatItem.svelte
  34. 19 15
      src/lib/components/layout/Sidebar/ChatMenu.svelte
  35. 29 0
      src/lib/components/layout/Sidebar/Folders.svelte
  36. 58 0
      src/lib/components/layout/Sidebar/Folders/FolderMenu.svelte
  37. 397 0
      src/lib/components/layout/Sidebar/RecursiveFolder.svelte
  38. 208 0
      src/lib/components/layout/Sidebar/SearchInput.svelte
  39. 22 15
      src/lib/components/workspace/Functions.svelte
  40. 14 14
      src/lib/components/workspace/Knowledge.svelte
  41. 1 31
      src/lib/components/workspace/Knowledge/Collection.svelte
  42. 27 21
      src/lib/components/workspace/Models.svelte
  43. 16 13
      src/lib/components/workspace/Prompts.svelte
  44. 21 15
      src/lib/components/workspace/Tools.svelte
  45. 15 14
      src/lib/i18n/locales/ar-BH/translation.json
  46. 15 14
      src/lib/i18n/locales/bg-BG/translation.json
  47. 15 14
      src/lib/i18n/locales/bn-BD/translation.json
  48. 20 19
      src/lib/i18n/locales/ca-ES/translation.json
  49. 15 14
      src/lib/i18n/locales/ceb-PH/translation.json
  50. 15 14
      src/lib/i18n/locales/de-DE/translation.json
  51. 15 14
      src/lib/i18n/locales/dg-DG/translation.json
  52. 15 14
      src/lib/i18n/locales/en-GB/translation.json
  53. 15 14
      src/lib/i18n/locales/en-US/translation.json
  54. 18 17
      src/lib/i18n/locales/es-ES/translation.json
  55. 15 14
      src/lib/i18n/locales/fa-IR/translation.json
  56. 15 14
      src/lib/i18n/locales/fi-FI/translation.json
  57. 15 14
      src/lib/i18n/locales/fr-CA/translation.json
  58. 15 14
      src/lib/i18n/locales/fr-FR/translation.json
  59. 15 14
      src/lib/i18n/locales/he-IL/translation.json
  60. 15 14
      src/lib/i18n/locales/hi-IN/translation.json
  61. 15 14
      src/lib/i18n/locales/hr-HR/translation.json
  62. 15 14
      src/lib/i18n/locales/id-ID/translation.json
  63. 15 14
      src/lib/i18n/locales/ie-GA/translation.json
  64. 15 14
      src/lib/i18n/locales/it-IT/translation.json
  65. 19 15
      src/lib/i18n/locales/ja-JP/translation.json
  66. 15 14
      src/lib/i18n/locales/ka-GE/translation.json
  67. 15 14
      src/lib/i18n/locales/ko-KR/translation.json
  68. 15 14
      src/lib/i18n/locales/lt-LT/translation.json
  69. 15 14
      src/lib/i18n/locales/ms-MY/translation.json
  70. 15 14
      src/lib/i18n/locales/nb-NO/translation.json
  71. 15 14
      src/lib/i18n/locales/nl-NL/translation.json
  72. 15 14
      src/lib/i18n/locales/pa-IN/translation.json
  73. 15 14
      src/lib/i18n/locales/pl-PL/translation.json
  74. 15 14
      src/lib/i18n/locales/pt-BR/translation.json
  75. 15 14
      src/lib/i18n/locales/pt-PT/translation.json
  76. 15 14
      src/lib/i18n/locales/ro-RO/translation.json
  77. 15 14
      src/lib/i18n/locales/ru-RU/translation.json
  78. 15 14
      src/lib/i18n/locales/sr-RS/translation.json
  79. 15 14
      src/lib/i18n/locales/sv-SE/translation.json
  80. 15 14
      src/lib/i18n/locales/th-TH/translation.json
  81. 15 14
      src/lib/i18n/locales/tk-TW/translation.json
  82. 15 14
      src/lib/i18n/locales/tr-TR/translation.json
  83. 55 54
      src/lib/i18n/locales/uk-UA/translation.json
  84. 15 14
      src/lib/i18n/locales/vi-VN/translation.json
  85. 15 14
      src/lib/i18n/locales/zh-CN/translation.json
  86. 15 14
      src/lib/i18n/locales/zh-TW/translation.json
  87. 2 2
      src/routes/(app)/+layout.svelte
  88. 27 25
      src/routes/(app)/admin/+layout.svelte
  89. 62 55
      src/routes/(app)/workspace/+layout.svelte

+ 2 - 2
backend/open_webui/apps/retrieval/main.py

@@ -709,8 +709,8 @@ def save_docs_to_vector_db(
             if overwrite:
                 VECTOR_DB_CLIENT.delete_collection(collection_name=collection_name)
                 log.info(f"deleting existing collection {collection_name}")
-
-            if add is False:
+            elif add is False:
+                log.info(f"collection {collection_name} already exists, overwrite is False and add is False")
                 return True
 
         log.info(f"adding to collection {collection_name}")

+ 6 - 5
backend/open_webui/apps/retrieval/utils.py

@@ -385,6 +385,8 @@ def get_rag_context(
             extracted_collections.extend(collection_names)
 
         if context:
+            if "data" in file:
+                del file["data"]
             relevant_contexts.append({**context, "file": file})
 
     contexts = []
@@ -401,11 +403,8 @@ def get_rag_context(
                         ]
                     )
                 )
-
                 contexts.append(
-                    (", ".join(file_names) + ":\n\n")
-                    if file_names
-                    else ""
+                    ((", ".join(file_names) + ":\n\n") if file_names else "")
                     + "\n\n".join(
                         [text for text in context["documents"][0] if text is not None]
                     )
@@ -423,7 +422,9 @@ def get_rag_context(
         except Exception as e:
             log.exception(e)
 
-    print(contexts, citations)
+    print("contexts", contexts)
+    print("citations", citations)
+
     return contexts, citations
 
 

+ 2 - 0
backend/open_webui/apps/webui/main.py

@@ -9,6 +9,7 @@ from open_webui.apps.webui.models.models import Models
 from open_webui.apps.webui.routers import (
     auths,
     chats,
+    folders,
     configs,
     files,
     functions,
@@ -110,6 +111,7 @@ app.include_router(configs.router, prefix="/configs", tags=["configs"])
 app.include_router(auths.router, prefix="/auths", tags=["auths"])
 app.include_router(users.router, prefix="/users", tags=["users"])
 app.include_router(chats.router, prefix="/chats", tags=["chats"])
+app.include_router(folders.router, prefix="/folders", tags=["folders"])
 
 app.include_router(models.router, prefix="/models", tags=["models"])
 app.include_router(knowledge.router, prefix="/knowledge", tags=["knowledge"])

+ 102 - 11
backend/open_webui/apps/webui/models/chats.py

@@ -33,6 +33,7 @@ class Chat(Base):
     pinned = Column(Boolean, default=False, nullable=True)
 
     meta = Column(JSON, server_default="{}")
+    folder_id = Column(Text, nullable=True)
 
 
 class ChatModel(BaseModel):
@@ -51,6 +52,7 @@ class ChatModel(BaseModel):
     pinned: Optional[bool] = False
 
     meta: dict = {}
+    folder_id: Optional[str] = None
 
 
 ####################
@@ -61,10 +63,12 @@ class ChatModel(BaseModel):
 class ChatForm(BaseModel):
     chat: dict
 
+
 class ChatTitleMessagesForm(BaseModel):
     title: str
     messages: list[dict]
 
+
 class ChatTitleForm(BaseModel):
     title: str
 
@@ -80,6 +84,7 @@ class ChatResponse(BaseModel):
     archived: bool
     pinned: Optional[bool] = False
     meta: dict = {}
+    folder_id: Optional[str] = None
 
 
 class ChatTitleIdResponse(BaseModel):
@@ -252,14 +257,18 @@ class ChatTable:
         limit: int = 50,
     ) -> list[ChatModel]:
         with get_db() as db:
-            query = db.query(Chat).filter_by(user_id=user_id)
+            query = db.query(Chat).filter_by(user_id=user_id).filter_by(folder_id=None)
             if not include_archived:
                 query = query.filter_by(archived=False)
-            all_chats = (
-                query.order_by(Chat.updated_at.desc())
-                # .limit(limit).offset(skip)
-                .all()
-            )
+
+            query = query.order_by(Chat.updated_at.desc())
+
+            if skip:
+                query = query.offset(skip)
+            if limit:
+                query = query.limit(limit)
+
+            all_chats = query.all()
             return [ChatModel.model_validate(chat) for chat in all_chats]
 
     def get_chat_title_id_list_by_user_id(
@@ -270,7 +279,9 @@ class ChatTable:
         limit: Optional[int] = None,
     ) -> list[ChatTitleIdResponse]:
         with get_db() as db:
-            query = db.query(Chat).filter_by(user_id=user_id)
+            query = db.query(Chat).filter_by(user_id=user_id).filter_by(folder_id=None)
+            query = query.filter(or_(Chat.pinned == False, Chat.pinned == None))
+
             if not include_archived:
                 query = query.filter_by(archived=False)
 
@@ -361,7 +372,7 @@ class ChatTable:
         with get_db() as db:
             all_chats = (
                 db.query(Chat)
-                .filter_by(user_id=user_id, pinned=True)
+                .filter_by(user_id=user_id, pinned=True, archived=False)
                 .order_by(Chat.updated_at.desc())
             )
             return [ChatModel.model_validate(chat) for chat in all_chats]
@@ -387,9 +398,25 @@ class ChatTable:
         Filters chats based on a search query using Python, allowing pagination using skip and limit.
         """
         search_text = search_text.lower().strip()
+
         if not search_text:
             return self.get_chat_list_by_user_id(user_id, include_archived, skip, limit)
 
+        search_text_words = search_text.split(" ")
+
+        # search_text might contain 'tag:tag_name' format so we need to extract the tag_name, split the search_text and remove the tags
+        tag_ids = [
+            word.replace("tag:", "").replace(" ", "_").lower()
+            for word in search_text_words
+            if word.startswith("tag:")
+        ]
+
+        search_text_words = [
+            word for word in search_text_words if not word.startswith("tag:")
+        ]
+
+        search_text = " ".join(search_text_words)
+
         with get_db() as db:
             query = db.query(Chat).filter(Chat.user_id == user_id)
 
@@ -418,6 +445,26 @@ class ChatTable:
                         )
                     ).params(search_text=search_text)
                 )
+
+                # Check if there are any tags to filter, it should have all the tags
+                if tag_ids:
+                    query = query.filter(
+                        and_(
+                            *[
+                                text(
+                                    f"""
+                                    EXISTS (
+                                        SELECT 1
+                                        FROM json_each(Chat.meta, '$.tags') AS tag
+                                        WHERE tag.value = :tag_id_{tag_idx}
+                                    )
+                                    """
+                                ).params(**{f"tag_id_{tag_idx}": tag_id})
+                                for tag_idx, tag_id in enumerate(tag_ids)
+                            ]
+                        )
+                    )
+
             elif dialect_name == "postgresql":
                 # PostgreSQL relies on proper JSON query for search
                 query = query.filter(
@@ -436,6 +483,25 @@ class ChatTable:
                         )
                     ).params(search_text=search_text)
                 )
+
+                # Check if there are any tags to filter, it should have all the tags
+                if tag_ids:
+                    query = query.filter(
+                        and_(
+                            *[
+                                text(
+                                    f"""
+                                    EXISTS (
+                                        SELECT 1
+                                        FROM json_array_elements_text(Chat.meta->'tags') AS tag
+                                        WHERE tag = :tag_id_{tag_idx}
+                                    )
+                                    """
+                                ).params(**{f"tag_id_{tag_idx}": tag_id})
+                                for tag_idx, tag_id in enumerate(tag_ids)
+                            ]
+                        )
+                    )
             else:
                 raise NotImplementedError(
                     f"Unsupported dialect: {db.bind.dialect.name}"
@@ -444,9 +510,34 @@ class ChatTable:
             # Perform pagination at the SQL level
             all_chats = query.offset(skip).limit(limit).all()
 
+            print(len(all_chats))
+
             # Validate and return chats
             return [ChatModel.model_validate(chat) for chat in all_chats]
 
+    def get_chats_by_folder_id_and_user_id(
+        self, folder_id: str, user_id: str
+    ) -> list[ChatModel]:
+        with get_db() as db:
+            all_chats = (
+                db.query(Chat).filter_by(folder_id=folder_id, user_id=user_id).all()
+            )
+            return [ChatModel.model_validate(chat) for chat in all_chats]
+
+    def update_chat_folder_id_by_id_and_user_id(
+        self, id: str, user_id: str, folder_id: str
+    ) -> Optional[ChatModel]:
+        try:
+            with get_db() as db:
+                chat = db.get(Chat, id)
+                chat.folder_id = folder_id
+                chat.updated_at = int(time.time())
+                db.commit()
+                db.refresh(chat)
+                return ChatModel.model_validate(chat)
+        except Exception:
+            return None
+
     def get_chat_tags_by_id_and_user_id(self, id: str, user_id: str) -> list[TagModel]:
         with get_db() as db:
             chat = db.get(Chat, id)
@@ -498,7 +589,7 @@ class ChatTable:
                 if tag_id not in chat.meta.get("tags", []):
                     chat.meta = {
                         **chat.meta,
-                        "tags": chat.meta.get("tags", []) + [tag_id],
+                        "tags": list(set(chat.meta.get("tags", []) + [tag_id])),
                     }
 
                 db.commit()
@@ -509,7 +600,7 @@ class ChatTable:
 
     def count_chats_by_tag_name_and_user_id(self, tag_name: str, user_id: str) -> int:
         with get_db() as db:  # Assuming `get_db()` returns a session object
-            query = db.query(Chat).filter_by(user_id=user_id)
+            query = db.query(Chat).filter_by(user_id=user_id, archived=False)
 
             # Normalize the tag_name for consistency
             tag_id = tag_name.replace(" ", "_").lower()
@@ -555,7 +646,7 @@ class ChatTable:
                 tags = [tag for tag in tags if tag != tag_id]
                 chat.meta = {
                     **chat.meta,
-                    "tags": tags,
+                    "tags": list(set(tags)),
                 }
                 db.commit()
                 return True

+ 225 - 0
backend/open_webui/apps/webui/models/folders.py

@@ -0,0 +1,225 @@
+import logging
+import time
+import uuid
+from typing import Optional
+
+from open_webui.apps.webui.internal.db import Base, get_db
+
+
+from open_webui.env import SRC_LOG_LEVELS
+from pydantic import BaseModel, ConfigDict
+from sqlalchemy import BigInteger, Column, Text, JSON, Boolean
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MODELS"])
+
+
+####################
+# Folder DB Schema
+####################
+
+
+class Folder(Base):
+    __tablename__ = "folder"
+    id = Column(Text, primary_key=True)
+    parent_id = Column(Text, nullable=True)
+    user_id = Column(Text)
+    name = Column(Text)
+    items = Column(JSON, nullable=True)
+    meta = Column(JSON, nullable=True)
+    is_expanded = Column(Boolean, default=False)
+    created_at = Column(BigInteger)
+    updated_at = Column(BigInteger)
+
+
+class FolderModel(BaseModel):
+    id: str
+    parent_id: Optional[str] = None
+    user_id: str
+    name: str
+    items: Optional[dict] = None
+    meta: Optional[dict] = None
+    is_expanded: bool = False
+    created_at: int
+    updated_at: int
+
+    model_config = ConfigDict(from_attributes=True)
+
+
+####################
+# Forms
+####################
+
+
+class FolderForm(BaseModel):
+    name: str
+    model_config = ConfigDict(extra="allow")
+
+
+class FolderTable:
+    def insert_new_folder(
+        self, user_id: str, name: str, parent_id: Optional[str] = None
+    ) -> Optional[FolderModel]:
+        with get_db() as db:
+            id = str(uuid.uuid4())
+            folder = FolderModel(
+                **{
+                    "id": id,
+                    "user_id": user_id,
+                    "name": name,
+                    "parent_id": parent_id,
+                    "created_at": int(time.time()),
+                    "updated_at": int(time.time()),
+                }
+            )
+            try:
+                result = Folder(**folder.model_dump())
+                db.add(result)
+                db.commit()
+                db.refresh(result)
+                if result:
+                    return FolderModel.model_validate(result)
+                else:
+                    return None
+            except Exception as e:
+                print(e)
+                return None
+
+    def get_folder_by_id_and_user_id(
+        self, id: str, user_id: str
+    ) -> Optional[FolderModel]:
+        try:
+            with get_db() as db:
+                folder = db.query(Folder).filter_by(id=id, user_id=user_id).first()
+
+                if not folder:
+                    return None
+
+                return FolderModel.model_validate(folder)
+        except Exception:
+            return None
+
+    def get_folders_by_user_id(self, user_id: str) -> list[FolderModel]:
+        with get_db() as db:
+            return [
+                FolderModel.model_validate(folder)
+                for folder in db.query(Folder).filter_by(user_id=user_id).all()
+            ]
+
+    def get_folder_by_parent_id_and_user_id_and_name(
+        self, parent_id: Optional[str], user_id: str, name: str
+    ) -> Optional[FolderModel]:
+        try:
+            with get_db() as db:
+                # Check if folder exists
+                folder = (
+                    db.query(Folder)
+                    .filter_by(parent_id=parent_id, user_id=user_id)
+                    .filter(Folder.name.ilike(name))
+                    .first()
+                )
+
+                if not folder:
+                    return None
+
+                return FolderModel.model_validate(folder)
+        except Exception as e:
+            log.error(f"get_folder_by_parent_id_and_user_id_and_name: {e}")
+            return None
+
+    def get_folders_by_parent_id_and_user_id(
+        self, parent_id: Optional[str], user_id: str
+    ) -> list[FolderModel]:
+        with get_db() as db:
+            return [
+                FolderModel.model_validate(folder)
+                for folder in db.query(Folder)
+                .filter_by(parent_id=parent_id, user_id=user_id)
+                .all()
+            ]
+
+    def update_folder_parent_id_by_id_and_user_id(
+        self,
+        id: str,
+        user_id: str,
+        parent_id: str,
+    ) -> Optional[FolderModel]:
+        try:
+            with get_db() as db:
+                folder = db.query(Folder).filter_by(id=id, user_id=user_id).first()
+
+                if not folder:
+                    return None
+
+                folder.parent_id = parent_id
+                folder.updated_at = int(time.time())
+
+                db.commit()
+
+                return FolderModel.model_validate(folder)
+        except Exception as e:
+            log.error(f"update_folder: {e}")
+            return
+
+    def update_folder_name_by_id_and_user_id(
+        self, id: str, user_id: str, name: str
+    ) -> Optional[FolderModel]:
+        try:
+            with get_db() as db:
+                folder = db.query(Folder).filter_by(id=id, user_id=user_id).first()
+
+                if not folder:
+                    return None
+
+                existing_folder = (
+                    db.query(Folder)
+                    .filter_by(name=name, parent_id=folder.parent_id, user_id=user_id)
+                    .first()
+                )
+
+                if existing_folder:
+                    return None
+
+                folder.name = name
+                folder.updated_at = int(time.time())
+
+                db.commit()
+
+                return FolderModel.model_validate(folder)
+        except Exception as e:
+            log.error(f"update_folder: {e}")
+            return
+
+    def update_folder_is_expanded_by_id_and_user_id(
+        self, id: str, user_id: str, is_expanded: bool
+    ) -> Optional[FolderModel]:
+        try:
+            with get_db() as db:
+                folder = db.query(Folder).filter_by(id=id, user_id=user_id).first()
+
+                if not folder:
+                    return None
+
+                folder.is_expanded = is_expanded
+                folder.updated_at = int(time.time())
+
+                db.commit()
+
+                return FolderModel.model_validate(folder)
+        except Exception as e:
+            log.error(f"update_folder: {e}")
+            return
+
+    def delete_folder_by_id_and_user_id(self, id: str, user_id: str) -> bool:
+        try:
+            with get_db() as db:
+                folder = db.query(Folder).filter_by(id=id, user_id=user_id).first()
+                db.delete(folder)
+                db.commit()
+                return True
+        except Exception as e:
+            log.error(f"delete_folder: {e}")
+            return False
+
+
+Folders = FolderTable()

+ 62 - 12
backend/open_webui/apps/webui/routers/auths.py

@@ -1,10 +1,13 @@
 import re
 import uuid
+import time
+import datetime
 
 from open_webui.apps.webui.models.auths import (
     AddUserForm,
     ApiKey,
     Auths,
+    Token,
     SigninForm,
     SigninResponse,
     SignupForm,
@@ -34,6 +37,7 @@ from open_webui.utils.utils import (
     get_password_hash,
 )
 from open_webui.utils.webhook import post_webhook
+from typing import Optional
 
 router = APIRouter()
 
@@ -42,25 +46,44 @@ router = APIRouter()
 ############################
 
 
-@router.get("/", response_model=UserResponse)
+class SessionUserResponse(Token, UserResponse):
+    expires_at: Optional[int] = None
+
+
+@router.get("/", response_model=SessionUserResponse)
 async def get_session_user(
     request: Request, response: Response, user=Depends(get_current_user)
 ):
+    expires_delta = parse_duration(request.app.state.config.JWT_EXPIRES_IN)
+    expires_at = None
+    if expires_delta:
+        expires_at = int(time.time()) + int(expires_delta.total_seconds())
+
     token = create_token(
         data={"id": user.id},
-        expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN),
+        expires_delta=expires_delta,
+    )
+
+    datetime_expires_at = (
+        datetime.datetime.fromtimestamp(expires_at, datetime.timezone.utc)
+        if expires_at
+        else None
     )
 
     # Set the cookie token
     response.set_cookie(
         key="token",
         value=token,
+        expires=datetime_expires_at,
         httponly=True,  # Ensures the cookie is not accessible via JavaScript
-        samesite=WEBUI_SESSION_COOKIE_SAME_SITE, 
-        secure=WEBUI_SESSION_COOKIE_SECURE,        
+        samesite=WEBUI_SESSION_COOKIE_SAME_SITE,
+        secure=WEBUI_SESSION_COOKIE_SECURE,
     )
 
     return {
+        "token": token,
+        "token_type": "Bearer",
+        "expires_at": expires_at,
         "id": user.id,
         "email": user.email,
         "name": user.name,
@@ -119,7 +142,7 @@ async def update_password(
 ############################
 
 
-@router.post("/signin", response_model=SigninResponse)
+@router.post("/signin", response_model=SessionUserResponse)
 async def signin(request: Request, response: Response, form_data: SigninForm):
     if WEBUI_AUTH_TRUSTED_EMAIL_HEADER:
         if WEBUI_AUTH_TRUSTED_EMAIL_HEADER not in request.headers:
@@ -161,23 +184,37 @@ async def signin(request: Request, response: Response, form_data: SigninForm):
         user = Auths.authenticate_user(form_data.email.lower(), form_data.password)
 
     if user:
+
+        expires_delta = parse_duration(request.app.state.config.JWT_EXPIRES_IN)
+        expires_at = None
+        if expires_delta:
+            expires_at = int(time.time()) + int(expires_delta.total_seconds())
+
         token = create_token(
             data={"id": user.id},
-            expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN),
+            expires_delta=expires_delta,
+        )
+
+        datetime_expires_at = (
+            datetime.datetime.fromtimestamp(expires_at, datetime.timezone.utc)
+            if expires_at
+            else None
         )
 
         # Set the cookie token
         response.set_cookie(
             key="token",
             value=token,
+            expires=datetime_expires_at,
             httponly=True,  # Ensures the cookie is not accessible via JavaScript
-            samesite=WEBUI_SESSION_COOKIE_SAME_SITE, 
-            secure=WEBUI_SESSION_COOKIE_SECURE,            
+            samesite=WEBUI_SESSION_COOKIE_SAME_SITE,
+            secure=WEBUI_SESSION_COOKIE_SECURE,
         )
 
         return {
             "token": token,
             "token_type": "Bearer",
+            "expires_at": expires_at,
             "id": user.id,
             "email": user.email,
             "name": user.name,
@@ -193,7 +230,7 @@ async def signin(request: Request, response: Response, form_data: SigninForm):
 ############################
 
 
-@router.post("/signup", response_model=SigninResponse)
+@router.post("/signup", response_model=SessionUserResponse)
 async def signup(request: Request, response: Response, form_data: SignupForm):
     if WEBUI_AUTH:
         if (
@@ -233,18 +270,30 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
         )
 
         if user:
+            expires_delta = parse_duration(request.app.state.config.JWT_EXPIRES_IN)
+            expires_at = None
+            if expires_delta:
+                expires_at = int(time.time()) + int(expires_delta.total_seconds())
+
             token = create_token(
                 data={"id": user.id},
-                expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN),
+                expires_delta=expires_delta,
+            )
+
+            datetime_expires_at = (
+                datetime.datetime.fromtimestamp(expires_at, datetime.timezone.utc)
+                if expires_at
+                else None
             )
 
             # Set the cookie token
             response.set_cookie(
                 key="token",
                 value=token,
+                expires=datetime_expires_at,
                 httponly=True,  # Ensures the cookie is not accessible via JavaScript
-                samesite=WEBUI_SESSION_COOKIE_SAME_SITE, 
-                secure=WEBUI_SESSION_COOKIE_SECURE,                
+                samesite=WEBUI_SESSION_COOKIE_SAME_SITE,
+                secure=WEBUI_SESSION_COOKIE_SECURE,
             )
 
             if request.app.state.config.WEBHOOK_URL:
@@ -261,6 +310,7 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
             return {
                 "token": token,
                 "token_type": "Bearer",
+                "expires_at": expires_at,
                 "id": user.id,
                 "email": user.email,
                 "name": user.name,

+ 62 - 1
backend/open_webui/apps/webui/routers/chats.py

@@ -114,13 +114,24 @@ async def search_user_chats(
     limit = 60
     skip = (page - 1) * limit
 
-    return [
+    chat_list = [
         ChatTitleIdResponse(**chat.model_dump())
         for chat in Chats.get_chats_by_user_id_and_search_text(
             user.id, text, skip=skip, limit=limit
         )
     ]
 
+    # Delete tag if no chat is found
+    words = text.strip().split(" ")
+    if page == 1 and len(words) == 1 and words[0].startswith("tag:"):
+        tag_id = words[0].replace("tag:", "")
+        if len(chat_list) == 0:
+            if Tags.get_tag_by_name_and_user_id(tag_id, user.id):
+                log.debug(f"deleting tag: {tag_id}")
+                Tags.delete_tag_by_name_and_user_id(tag_id, user.id)
+
+    return chat_list
+
 
 ############################
 # GetPinnedChats
@@ -315,7 +326,13 @@ async def update_chat_by_id(
 @router.delete("/{id}", response_model=bool)
 async def delete_chat_by_id(request: Request, id: str, user=Depends(get_verified_user)):
     if user.role == "admin":
+        chat = Chats.get_chat_by_id(id)
+        for tag in chat.meta.get("tags", []):
+            if Chats.count_chats_by_tag_name_and_user_id(tag, user.id) == 1:
+                Tags.delete_tag_by_name_and_user_id(tag, user.id)
+
         result = Chats.delete_chat_by_id(id)
+
         return result
     else:
         if not request.app.state.config.USER_PERMISSIONS.get("chat", {}).get(
@@ -326,6 +343,11 @@ async def delete_chat_by_id(request: Request, id: str, user=Depends(get_verified
                 detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
             )
 
+        chat = Chats.get_chat_by_id(id)
+        for tag in chat.meta.get("tags", []):
+            if Chats.count_chats_by_tag_name_and_user_id(tag, user.id) == 1:
+                Tags.delete_tag_by_name_and_user_id(tag, user.id)
+
         result = Chats.delete_chat_by_id_and_user_id(id, user.id)
         return result
 
@@ -397,6 +419,20 @@ async def archive_chat_by_id(id: str, user=Depends(get_verified_user)):
     chat = Chats.get_chat_by_id_and_user_id(id, user.id)
     if chat:
         chat = Chats.toggle_chat_archive_by_id(id)
+
+        # Delete tags if chat is archived
+        if chat.archived:
+            for tag_id in chat.meta.get("tags", []):
+                if Chats.count_chats_by_tag_name_and_user_id(tag_id, user.id) == 0:
+                    log.debug(f"deleting tag: {tag_id}")
+                    Tags.delete_tag_by_name_and_user_id(tag_id, user.id)
+        else:
+            for tag_id in chat.meta.get("tags", []):
+                tag = Tags.get_tag_by_name_and_user_id(tag_id, user.id)
+                if tag is None:
+                    log.debug(f"inserting tag: {tag_id}")
+                    tag = Tags.insert_new_tag(tag_id, user.id)
+
         return ChatResponse(**chat.model_dump())
     else:
         raise HTTPException(
@@ -455,6 +491,31 @@ async def delete_shared_chat_by_id(id: str, user=Depends(get_verified_user)):
         )
 
 
+############################
+# UpdateChatFolderIdById
+############################
+
+
+class ChatFolderIdForm(BaseModel):
+    folder_id: Optional[str] = None
+
+
+@router.post("/{id}/folder", response_model=Optional[ChatResponse])
+async def update_chat_folder_id_by_id(
+    id: str, form_data: ChatFolderIdForm, user=Depends(get_verified_user)
+):
+    chat = Chats.get_chat_by_id_and_user_id(id, user.id)
+    if chat:
+        chat = Chats.update_chat_folder_id_by_id_and_user_id(
+            id, user.id, form_data.folder_id
+        )
+        return ChatResponse(**chat.model_dump())
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.DEFAULT()
+        )
+
+
 ############################
 # GetChatTagsById
 ############################

+ 259 - 0
backend/open_webui/apps/webui/routers/folders.py

@@ -0,0 +1,259 @@
+import logging
+import os
+import shutil
+import uuid
+from pathlib import Path
+from typing import Optional
+from pydantic import BaseModel
+import mimetypes
+
+
+from open_webui.apps.webui.models.folders import (
+    FolderForm,
+    FolderModel,
+    Folders,
+)
+from open_webui.apps.webui.models.chats import Chats
+
+from open_webui.config import UPLOAD_DIR
+from open_webui.env import SRC_LOG_LEVELS
+from open_webui.constants import ERROR_MESSAGES
+
+
+from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status
+from fastapi.responses import FileResponse, StreamingResponse
+
+
+from open_webui.utils.utils import get_admin_user, get_verified_user
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MODELS"])
+
+
+router = APIRouter()
+
+
+############################
+# Get Folders
+############################
+
+
+@router.get("/", response_model=list[FolderModel])
+async def get_folders(user=Depends(get_verified_user)):
+    folders = Folders.get_folders_by_user_id(user.id)
+
+    return [
+        {
+            **folder.model_dump(),
+            "items": {
+                "chats": [
+                    {"title": chat.title, "id": chat.id}
+                    for chat in Chats.get_chats_by_folder_id_and_user_id(
+                        folder.id, user.id
+                    )
+                ]
+            },
+        }
+        for folder in folders
+    ]
+
+
+############################
+# Create Folder
+############################
+
+
+@router.post("/")
+def create_folder(form_data: FolderForm, user=Depends(get_verified_user)):
+    folder = Folders.get_folder_by_parent_id_and_user_id_and_name(
+        None, user.id, form_data.name
+    )
+
+    if folder:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail=ERROR_MESSAGES.DEFAULT("Folder already exists"),
+        )
+
+    try:
+        folder = Folders.insert_new_folder(user.id, form_data.name)
+        return folder
+    except Exception as e:
+        log.exception(e)
+        log.error("Error creating folder")
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail=ERROR_MESSAGES.DEFAULT("Error creating folder"),
+        )
+
+
+############################
+# Get Folders By Id
+############################
+
+
+@router.get("/{id}", response_model=Optional[FolderModel])
+async def get_folder_by_id(id: str, user=Depends(get_verified_user)):
+    folder = Folders.get_folder_by_id_and_user_id(id, user.id)
+    if folder:
+        return folder
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail=ERROR_MESSAGES.NOT_FOUND,
+        )
+
+
+############################
+# Update Folder Name By Id
+############################
+
+
+@router.post("/{id}/update")
+async def update_folder_name_by_id(
+    id: str, form_data: FolderForm, user=Depends(get_verified_user)
+):
+    folder = Folders.get_folder_by_id_and_user_id(id, user.id)
+    if folder:
+        existing_folder = Folders.get_folder_by_parent_id_and_user_id_and_name(
+            folder.parent_id, user.id, form_data.name
+        )
+        if existing_folder:
+            raise HTTPException(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                detail=ERROR_MESSAGES.DEFAULT("Folder already exists"),
+            )
+
+        try:
+            folder = Folders.update_folder_name_by_id_and_user_id(
+                id, user.id, form_data.name
+            )
+
+            return folder
+        except Exception as e:
+            log.exception(e)
+            log.error(f"Error updating folder: {id}")
+            raise HTTPException(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                detail=ERROR_MESSAGES.DEFAULT("Error updating folder"),
+            )
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail=ERROR_MESSAGES.NOT_FOUND,
+        )
+
+
+############################
+# Update Folder Parent Id By Id
+############################
+
+
+class FolderParentIdForm(BaseModel):
+    parent_id: Optional[str] = None
+
+
+@router.post("/{id}/update/parent")
+async def update_folder_parent_id_by_id(
+    id: str, form_data: FolderParentIdForm, user=Depends(get_verified_user)
+):
+    folder = Folders.get_folder_by_id_and_user_id(id, user.id)
+    if folder:
+        existing_folder = Folders.get_folder_by_parent_id_and_user_id_and_name(
+            form_data.parent_id, user.id, folder.name
+        )
+
+        if existing_folder:
+            raise HTTPException(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                detail=ERROR_MESSAGES.DEFAULT("Folder already exists"),
+            )
+
+        try:
+            folder = Folders.update_folder_parent_id_by_id_and_user_id(
+                id, user.id, form_data.parent_id
+            )
+            return folder
+        except Exception as e:
+            log.exception(e)
+            log.error(f"Error updating folder: {id}")
+            raise HTTPException(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                detail=ERROR_MESSAGES.DEFAULT("Error updating folder"),
+            )
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail=ERROR_MESSAGES.NOT_FOUND,
+        )
+
+
+############################
+# Update Folder Is Expanded By Id
+############################
+
+
+class FolderIsExpandedForm(BaseModel):
+    is_expanded: bool
+
+
+@router.post("/{id}/update/expanded")
+async def update_folder_is_expanded_by_id(
+    id: str, form_data: FolderIsExpandedForm, user=Depends(get_verified_user)
+):
+    folder = Folders.get_folder_by_id_and_user_id(id, user.id)
+    if folder:
+        try:
+            folder = Folders.update_folder_is_expanded_by_id_and_user_id(
+                id, user.id, form_data.is_expanded
+            )
+            return folder
+        except Exception as e:
+            log.exception(e)
+            log.error(f"Error updating folder: {id}")
+            raise HTTPException(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                detail=ERROR_MESSAGES.DEFAULT("Error updating folder"),
+            )
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail=ERROR_MESSAGES.NOT_FOUND,
+        )
+
+
+############################
+# Delete Folder By Id
+############################
+
+
+@router.delete("/{id}")
+async def delete_folder_by_id(id: str, user=Depends(get_verified_user)):
+    folder = Folders.get_folder_by_id_and_user_id(id, user.id)
+    if folder:
+        try:
+            result = Folders.delete_folder_by_id_and_user_id(id, user.id)
+            if result:
+                # Delete all chats in the folder
+                chats = Chats.get_chats_by_folder_id_and_user_id(id, user.id)
+                for chat in chats:
+                    Chats.delete_chat_by_id(chat.id, user.id)
+
+                return result
+            else:
+                raise HTTPException(
+                    status_code=status.HTTP_400_BAD_REQUEST,
+                    detail=ERROR_MESSAGES.DEFAULT("Error deleting folder"),
+                )
+        except Exception as e:
+            log.exception(e)
+            log.error(f"Error deleting folder: {id}")
+            raise HTTPException(
+                status_code=status.HTTP_400_BAD_REQUEST,
+                detail=ERROR_MESSAGES.DEFAULT("Error deleting folder"),
+            )
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_404_NOT_FOUND,
+            detail=ERROR_MESSAGES.NOT_FOUND,
+        )

+ 2 - 2
backend/open_webui/config.py

@@ -1042,7 +1042,7 @@ CHUNK_OVERLAP = PersistentConfig(
 DEFAULT_RAG_TEMPLATE = """You are given a user query, some textual context and rules, all inside xml tags. You have to answer the query based on the context while respecting the rules.
 
 <context>
-[context]
+{{CONTEXT}}
 </context>
 
 <rules>
@@ -1055,7 +1055,7 @@ DEFAULT_RAG_TEMPLATE = """You are given a user query, some textual context and r
 </rules>
 
 <user_query>
-[query]
+{{QUERY}}
 </user_query>
 """
 

+ 3 - 1
backend/open_webui/constants.py

@@ -20,7 +20,9 @@ class ERROR_MESSAGES(str, Enum):
     def __str__(self) -> str:
         return super().__str__()
 
-    DEFAULT = lambda err="": f"Something went wrong :/\n[ERROR: {err if err else ''}]"
+    DEFAULT = (
+        lambda err="": f'{"Something went wrong :/" if err == "" else "[ERROR: " + err + "]"}'
+    )
     ENV_VAR_NOT_FOUND = "Required environment variable not found. Terminating now."
     CREATE_USER_ERROR = "Oops! Something went wrong while creating your account. Please try again later. If the issue persists, contact support for assistance."
     DELETE_USER_ERROR = "Oops! Something went wrong. We encountered an issue while trying to delete the user. Please give it another shot."

+ 1 - 1
backend/open_webui/migrations/versions/1af9b942657b_migrate_tags.py

@@ -135,7 +135,7 @@ def upgrade():
                 tags = chat_updates[chat_id]["meta"].get("tags", [])
                 tags.append(tag_name)
 
-                chat_updates[chat_id]["meta"]["tags"] = tags
+                chat_updates[chat_id]["meta"]["tags"] = list(set(tags))
 
     # Update chats based on accumulated changes
     for chat_id, updates in chat_updates.items():

+ 26 - 12
backend/open_webui/migrations/versions/3ab32c4b8f59_update_tags.py

@@ -28,25 +28,39 @@ def upgrade():
     unique_constraints = inspector.get_unique_constraints("tag")
     existing_indexes = inspector.get_indexes("tag")
 
-    print(existing_pk, unique_constraints)
+    print(f"Primary Key: {existing_pk}")
+    print(f"Unique Constraints: {unique_constraints}")
+    print(f"Indexes: {existing_indexes}")
 
     with op.batch_alter_table("tag", schema=None) as batch_op:
-        # Drop unique constraints that could conflict with new primary key
+        # Drop existing primary key constraint if it exists
+        if existing_pk and existing_pk.get("constrained_columns"):
+            pk_name = existing_pk.get("name")
+            if pk_name:
+                print(f"Dropping primary key constraint: {pk_name}")
+                batch_op.drop_constraint(pk_name, type_="primary")
+
+        # Now create the new primary key with the combination of 'id' and 'user_id'
+        print("Creating new primary key with 'id' and 'user_id'.")
+        batch_op.create_primary_key("pk_id_user_id", ["id", "user_id"])
+
+        # Drop unique constraints that could conflict with the new primary key
         for constraint in unique_constraints:
-            if constraint["name"] == "uq_id_user_id":
+            if (
+                constraint["name"] == "uq_id_user_id"
+            ):  # Adjust this name according to what is actually returned by the inspector
+                print(f"Dropping unique constraint: {constraint['name']}")
                 batch_op.drop_constraint(constraint["name"], type_="unique")
 
         for index in existing_indexes:
             if index["unique"]:
-                # Drop the unique index
-                batch_op.drop_index(index["name"])
-
-        # Drop existing primary key constraint if it exists
-        if existing_pk and existing_pk.get("constrained_columns"):
-            batch_op.drop_constraint(existing_pk["name"], type_="primary")
-
-        # Immediately after dropping the old primary key, create the new one
-        batch_op.create_primary_key("pk_id_user_id", ["id", "user_id"])
+                if not any(
+                    constraint["name"] == index["name"]
+                    for constraint in unique_constraints
+                ):
+                    # You are attempting to drop unique indexes
+                    print(f"Dropping unique index: {index['name']}")
+                    batch_op.drop_index(index["name"])
 
 
 def downgrade():

+ 50 - 0
backend/open_webui/migrations/versions/c69f45358db4_add_folder_table.py

@@ -0,0 +1,50 @@
+"""Add folder table
+
+Revision ID: c69f45358db4
+Revises: 3ab32c4b8f59
+Create Date: 2024-10-16 02:02:35.241684
+
+"""
+
+from alembic import op
+import sqlalchemy as sa
+
+revision = "c69f45358db4"
+down_revision = "3ab32c4b8f59"
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.create_table(
+        "folder",
+        sa.Column("id", sa.Text(), nullable=False),
+        sa.Column("parent_id", sa.Text(), nullable=True),
+        sa.Column("user_id", sa.Text(), nullable=False),
+        sa.Column("name", sa.Text(), nullable=False),
+        sa.Column("items", sa.JSON(), nullable=True),
+        sa.Column("meta", sa.JSON(), nullable=True),
+        sa.Column("is_expanded", sa.Boolean(), default=False, nullable=False),
+        sa.Column(
+            "created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False
+        ),
+        sa.Column(
+            "updated_at",
+            sa.DateTime(),
+            nullable=False,
+            server_default=sa.func.now(),
+            onupdate=sa.func.now(),
+        ),
+        sa.PrimaryKeyConstraint("id", "user_id"),
+    )
+
+    op.add_column(
+        "chat",
+        sa.Column("folder_id", sa.Text(), nullable=True),
+    )
+
+
+def downgrade():
+    op.drop_column("chat", "folder_id")
+
+    op.drop_table("folder")

+ 1 - 1
backend/open_webui/utils/utils.py

@@ -7,7 +7,7 @@ import jwt
 from open_webui.apps.webui.models.users import Users
 from open_webui.constants import ERROR_MESSAGES
 from open_webui.env import WEBUI_SECRET_KEY
-from fastapi import Depends, HTTPException, Request, status
+from fastapi import Depends, HTTPException, Request, Response, status
 from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
 from passlib.context import CryptContext
 

+ 2 - 0
backend/requirements.txt

@@ -90,3 +90,5 @@ duckduckgo-search~=6.2.13
 docker~=7.1.0
 pytest~=8.3.2
 pytest-docker~=3.1.1
+
+googleapis-common-protos==1.63.2

+ 3 - 2
pyproject.toml

@@ -53,7 +53,6 @@ dependencies = [
     "sentence-transformers==3.2.0",
     "colbert-ai==0.2.21",
     "einops==0.8.0",
-    
 
     "ftfy==6.2.3",
     "pypdf==4.3.1",
@@ -94,7 +93,9 @@ dependencies = [
 
     "docker~=7.1.0",
     "pytest~=8.3.2",
-    "pytest-docker~=3.1.1"
+    "pytest-docker~=3.1.1",
+
+    "googleapis-common-protos==1.63.2"
 ]
 readme = "README.md"
 requires-python = ">= 3.11, < 3.12.0a1"

+ 2 - 2
src/app.css

@@ -56,7 +56,7 @@ li p {
 
 ::-webkit-scrollbar-thumb {
 	--tw-border-opacity: 1;
-	background-color: rgba(217, 217, 227, 0.8);
+	background-color: rgba(236, 236, 236, 0.8);
 	border-color: rgba(255, 255, 255, var(--tw-border-opacity));
 	border-radius: 9999px;
 	border-width: 1px;
@@ -64,7 +64,7 @@ li p {
 
 /* Dark theme scrollbar styles */
 .dark ::-webkit-scrollbar-thumb {
-	background-color: rgba(69, 69, 74, 0.8); /* Darker color for dark theme */
+	background-color: rgba(33, 33, 33, 0.8); /* Darker color for dark theme */
 	border-color: rgba(0, 0, 0, var(--tw-border-opacity));
 }
 

+ 36 - 1
src/lib/apis/chats/index.ts

@@ -267,7 +267,7 @@ export const getAllUserChats = async (token: string) => {
 	return res;
 };
 
-export const getAllChatTags = async (token: string) => {
+export const getAllTags = async (token: string) => {
 	let error = null;
 
 	const res = await fetch(`${WEBUI_API_BASE_URL}/chats/all/tags`, {
@@ -579,6 +579,41 @@ export const shareChatById = async (token: string, id: string) => {
 	return res;
 };
 
+export const updateChatFolderIdById = async (token: string, id: string, folderId?: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/chats/${id}/folder`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			...(token && { authorization: `Bearer ${token}` })
+		},
+		body: JSON.stringify({
+			folder_id: folderId
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err;
+
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
 export const archiveChatById = async (token: string, id: string) => {
 	let error = null;
 

+ 269 - 0
src/lib/apis/folders/index.ts

@@ -0,0 +1,269 @@
+import { WEBUI_API_BASE_URL } from '$lib/constants';
+
+export const createNewFolder = async (token: string, name: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		},
+		body: JSON.stringify({
+			name: name
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			error = err.detail;
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const getFolders = async (token: string = '') => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/`, {
+		method: 'GET',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const getFolderById = async (token: string, id: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/${id}`, {
+		method: 'GET',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const updateFolderNameById = async (token: string, id: string, name: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/${id}/update`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		},
+		body: JSON.stringify({
+			name: name
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const updateFolderIsExpandedById = async (
+	token: string,
+	id: string,
+	isExpanded: boolean
+) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/${id}/update/expanded`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		},
+		body: JSON.stringify({
+			is_expanded: isExpanded
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const updateFolderParentIdById = async (token: string, id: string, parentId?: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/${id}/update/parent`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		},
+		body: JSON.stringify({
+			parent_id: parentId
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+type FolderItems = {
+	chat_ids: string[];
+	file_ids: string[];
+};
+
+export const updateFolderItemsById = async (token: string, id: string, items: FolderItems) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/${id}/update/items`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		},
+		body: JSON.stringify({
+			items: items
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const deleteFolderById = async (token: string, id: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/folders/${id}`, {
+		method: 'DELETE',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};

+ 2 - 2
src/lib/components/admin/Settings/Documents.svelte

@@ -651,8 +651,8 @@
 						class="dark:bg-gray-900 w-fit pr-8 rounded px-2 text-xs bg-transparent outline-none text-right"
 						bind:value={textSplitter}
 					>
-						<option value="">{$i18n.t('Default (Character)')} </option>
-						<option value="token">{$i18n.t('Token (Tiktoken)')}</option>
+						<option value="">{$i18n.t('Default')} ({$i18n.t('Character')})</option>
+						<option value="token">{$i18n.t('Token')} ({$i18n.t('Tiktoken')})</option>
 					</select>
 				</div>
 			</div>

+ 7 - 3
src/lib/components/chat/MessageInput.svelte

@@ -184,7 +184,13 @@
 
 	const onDragOver = (e) => {
 		e.preventDefault();
-		dragged = true;
+
+		// Check if a file is being dragged.
+		if (e.dataTransfer?.types?.includes('Files')) {
+			dragged = true;
+		} else {
+			dragged = false;
+		}
 	};
 
 	const onDragLeave = () => {
@@ -200,8 +206,6 @@
 			if (inputFiles && inputFiles.length > 0) {
 				console.log(inputFiles);
 				inputFilesHandler(inputFiles);
-			} else {
-				toast.error($i18n.t(`File not found.`));
 			}
 		}
 

+ 7 - 0
src/lib/components/chat/MessageInput/VoiceRecording.svelte

@@ -269,6 +269,13 @@
 			await mediaRecorder.stop();
 		}
 		clearInterval(durationCounter);
+
+		if (stream) {
+			const tracks = stream.getTracks();
+			tracks.forEach((track) => track.stop());
+		}
+
+		stream = null;
 	};
 </script>
 

+ 22 - 9
src/lib/components/chat/Messages/RateComment.svelte

@@ -2,6 +2,7 @@
 	import { toast } from 'svelte-sonner';
 
 	import { createEventDispatcher, onMount, getContext } from 'svelte';
+	import { config } from '$lib/stores';
 
 	const i18n = getContext('i18n');
 
@@ -50,15 +51,15 @@
 		loadReasons();
 	});
 
-	const submitHandler = () => {
-		console.log('submitHandler');
+	const saveHandler = () => {
+		console.log('saveHandler');
 
 		if (!selectedReason) {
 			toast.error($i18n.t('Please select a reason'));
 			return;
 		}
 
-		dispatch('submit', {
+		dispatch('save', {
 			reason: selectedReason,
 			comment: comment
 		});
@@ -69,7 +70,7 @@
 </script>
 
 <div
-	class=" my-2.5 rounded-xl px-4 py-3 border dark:border-gray-850"
+	class=" my-2.5 rounded-xl px-4 py-3 border border-gray-50 dark:border-gray-850"
 	id="message-feedback-{message.id}"
 >
 	<div class="flex justify-between items-center">
@@ -97,7 +98,7 @@
 		<div class="flex flex-wrap gap-2 text-sm mt-2.5">
 			{#each reasons as reason}
 				<button
-					class="px-3.5 py-1 border dark:border-gray-850 hover:bg-gray-100 dark:hover:bg-gray-850 {selectedReason ===
+					class="px-3.5 py-1 border border-gray-50 dark:border-gray-850 hover:bg-gray-100 dark:hover:bg-gray-850 {selectedReason ===
 					reason
 						? 'bg-gray-200 dark:bg-gray-800'
 						: ''} transition rounded-lg"
@@ -120,14 +121,26 @@
 		/>
 	</div>
 
-	<div class="mt-2 flex justify-end">
+	<div class="mt-2 gap-1.5 flex justify-end">
+		{#if $config?.features.enable_community_sharing}
+			<button
+				class=" self-center px-3.5 py-2 rounded-xl text-sm font-medium bg-gray-50 hover:bg-gray-100 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-white transition"
+				type="button"
+				on:click={() => {
+					show = false;
+				}}
+			>
+				{$i18n.t('Share to OpenWebUI Community')}
+			</button>
+		{/if}
+
 		<button
-			class=" bg-emerald-700 text-white text-sm font-medium rounded-lg px-3.5 py-1.5"
+			class=" bg-emerald-700 hover:bg-emerald-800 transition text-white text-sm font-medium rounded-xl px-3.5 py-1.5"
 			on:click={() => {
-				submitHandler();
+				saveHandler();
 			}}
 		>
-			{$i18n.t('Submit')}
+			{$i18n.t('Save')}
 		</button>
 	</div>
 </div>

+ 1 - 1
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -1103,7 +1103,7 @@
 						<RateComment
 							bind:message
 							bind:show={showRateComment}
-							on:submit={(e) => {
+							on:save={(e) => {
 								dispatch('save', {
 									...message,
 									annotation: {

+ 6 - 3
src/lib/components/chat/Tags.svelte

@@ -2,7 +2,7 @@
 	import {
 		addTagById,
 		deleteTagById,
-		getAllChatTags,
+		getAllTags,
 		getChatList,
 		getChatListByTagName,
 		getTagsById,
@@ -37,7 +37,10 @@
 			tags: tags
 		});
 
-		_tags.set(await getAllChatTags(localStorage.token));
+		await _tags.set(await getAllTags(localStorage.token));
+		dispatch('add', {
+			name: tagName
+		});
 	};
 
 	const deleteTag = async (tagName) => {
@@ -47,7 +50,7 @@
 			tags: tags
 		});
 
-		await _tags.set(await getAllChatTags(localStorage.token));
+		await _tags.set(await getAllTags(localStorage.token));
 		dispatch('delete', {
 			name: tagName
 		});

+ 37 - 27
src/lib/components/common/Collapsible.svelte

@@ -1,4 +1,9 @@
 <script lang="ts">
+	import { getContext, createEventDispatcher } from 'svelte';
+
+	const dispatch = createEventDispatcher();
+	$: dispatch('change', open);
+
 	import { slide } from 'svelte/transition';
 	import { quintOut } from 'svelte/easing';
 
@@ -7,26 +12,26 @@
 
 	export let open = false;
 	export let className = '';
+	export let buttonClassName = 'w-fit';
 	export let title = null;
 
-	let contentHeight = 0;
-	let contentElement: HTMLElement;
-
-	function handleClick(event) {
-		if (!event.target.closest('.no-toggle')) {
-			open = !open;
-		}
-	}
-
-	$: if (contentElement) {
-		contentHeight = open ? contentElement.scrollHeight : 0;
-	}
+	export let disabled = false;
+	export let hide = false;
 </script>
 
 <div class={className}>
 	{#if title !== null}
-		<button class="w-full" on:click={handleClick}>
-			<div class="w-full font-medium transition flex items-center justify-between gap-2">
+		<!-- svelte-ignore a11y-no-static-element-interactions -->
+		<!-- svelte-ignore a11y-click-events-have-key-events -->
+		<div
+			class={buttonClassName}
+			on:pointerup={() => {
+				if (!disabled) {
+					open = !open;
+				}
+			}}
+		>
+			<div class=" w-fit font-medium transition flex items-center justify-between gap-2">
 				<div>
 					{title}
 				</div>
@@ -39,23 +44,28 @@
 					{/if}
 				</div>
 			</div>
-		</button>
+		</div>
 	{:else}
-		<button
-			type="button"
-			on:click={handleClick}
-			class="flex w-full items-center gap-2 text-left text-gray-500 transition hover:text-gray-700 dark:hover:text-gray-300"
+		<!-- svelte-ignore a11y-no-static-element-interactions -->
+		<!-- svelte-ignore a11y-click-events-have-key-events -->
+		<div
+			class={buttonClassName}
+			on:pointerup={() => {
+				if (!disabled) {
+					open = !open;
+				}
+			}}
 		>
-			<slot />
-		</button>
+			<div
+				class="flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition"
+			>
+				<slot />
+			</div>
+		</div>
 	{/if}
 
-	<div
-		bind:this={contentElement}
-		class="overflow-hidden transition-all duration-300 ease-in-out"
-		style="max-height: {contentHeight}px;"
-	>
-		<div>
+	{#if open && !hide}
+		<div transition:slide={{ duration: 300, easing: quintOut, axis: 'y' }}>
 			<slot name="content" />
 		</div>
 	</div>

+ 30 - 0
src/lib/components/common/DragGhost.svelte

@@ -0,0 +1,30 @@
+<script lang="ts">
+	import { onDestroy, onMount } from 'svelte';
+
+	export let x;
+	export let y;
+
+	let popupElement = null;
+
+	onMount(() => {
+		document.body.appendChild(popupElement);
+		document.body.style.overflow = 'hidden';
+	});
+
+	onDestroy(() => {
+		document.body.removeChild(popupElement);
+		document.body.style.overflow = 'unset';
+	});
+</script>
+
+<!-- svelte-ignore a11y-click-events-have-key-events -->
+<!-- svelte-ignore a11y-no-static-element-interactions -->
+
+<div
+	bind:this={popupElement}
+	class="fixed top-0 left-0 w-screen h-[100dvh] z-50 touch-none pointer-events-none"
+>
+	<div class=" absolute text-white z-[99999]" style="top: {y + 10}px; left: {x + 10}px;">
+		<slot></slot>
+	</div>
+</div>

+ 1 - 1
src/lib/components/common/Dropdown.svelte

@@ -22,7 +22,7 @@
 
 	<slot name="content">
 		<DropdownMenu.Content
-			class="w-full max-w-[130px] rounded-lg px-1 py-1.5 border border-gray-700 z-50 bg-gray-850 text-white"
+			class="w-full max-w-[130px] rounded-lg px-1 py-1.5 border border-gray-900 z-50 bg-gray-850 text-white"
 			sideOffset={8}
 			side="bottom"
 			align="start"

+ 108 - 0
src/lib/components/common/Folder.svelte

@@ -0,0 +1,108 @@
+<script>
+	import { getContext, createEventDispatcher, onMount, onDestroy } from 'svelte';
+
+	const i18n = getContext('i18n');
+	const dispatch = createEventDispatcher();
+
+	import ChevronDown from '../icons/ChevronDown.svelte';
+	import ChevronRight from '../icons/ChevronRight.svelte';
+	import Collapsible from './Collapsible.svelte';
+
+	export let open = true;
+
+	export let id = '';
+	export let name = '';
+	export let collapsible = true;
+
+	export let className = '';
+
+	let folderElement;
+
+	let draggedOver = false;
+
+	const onDragOver = (e) => {
+		e.preventDefault();
+		draggedOver = true;
+	};
+
+	const onDrop = (e) => {
+		e.preventDefault();
+
+		if (folderElement.contains(e.target)) {
+			console.log('Dropped on the Button');
+
+			try {
+				// get data from the drag event
+				const dataTransfer = e.dataTransfer.getData('text/plain');
+				const data = JSON.parse(dataTransfer);
+				console.log(data);
+				dispatch('drop', data);
+			} catch (error) {
+				console.error(error);
+			}
+
+			draggedOver = false;
+		}
+	};
+
+	const onDragLeave = (e) => {
+		e.preventDefault();
+		draggedOver = false;
+	};
+
+	onMount(() => {
+		folderElement.addEventListener('dragover', onDragOver);
+		folderElement.addEventListener('drop', onDrop);
+		folderElement.addEventListener('dragleave', onDragLeave);
+	});
+
+	onDestroy(() => {
+		folderElement.addEventListener('dragover', onDragOver);
+		folderElement.removeEventListener('drop', onDrop);
+		folderElement.removeEventListener('dragleave', onDragLeave);
+	});
+</script>
+
+<div bind:this={folderElement} class="relative {className}">
+	{#if draggedOver}
+		<div
+			class="absolute top-0 left-0 w-full h-full rounded-sm bg-[hsla(258,88%,66%,0.1)] bg-opacity-50 dark:bg-opacity-10 z-50 pointer-events-none touch-none"
+		></div>
+	{/if}
+
+	{#if collapsible}
+		<Collapsible
+			bind:open
+			className="w-full "
+			buttonClassName="w-full"
+			on:change={(e) => {
+				dispatch('change', e.detail);
+			}}
+		>
+			<!-- svelte-ignore a11y-no-static-element-interactions -->
+			<div class="w-full">
+				<button
+					class="w-full py-1.5 px-2 rounded-md flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-500 font-medium hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+				>
+					<div class="text-gray-300 dark:text-gray-600">
+						{#if open}
+							<ChevronDown className=" size-3" strokeWidth="2.5" />
+						{:else}
+							<ChevronRight className=" size-3" strokeWidth="2.5" />
+						{/if}
+					</div>
+
+					<div class="translate-y-[0.5px]">
+						{name}
+					</div>
+				</button>
+			</div>
+
+			<div slot="content" class="w-full">
+				<slot></slot>
+			</div>
+		</Collapsible>
+	{:else}
+		<slot></slot>
+	{/if}
+</div>

+ 19 - 0
src/lib/components/icons/Document.svelte

@@ -0,0 +1,19 @@
+<script lang="ts">
+	export let className = 'size-4';
+	export let strokeWidth = '1.5';
+</script>
+
+<svg
+	xmlns="http://www.w3.org/2000/svg"
+	fill="none"
+	viewBox="0 0 24 24"
+	stroke-width={strokeWidth}
+	stroke="currentColor"
+	class={className}
+>
+	<path
+		stroke-linecap="round"
+		stroke-linejoin="round"
+		d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"
+	/>
+</svg>

+ 351 - 188
src/lib/components/layout/Sidebar.svelte

@@ -14,28 +14,23 @@
 		pinnedChats,
 		scrollPaginationEnabled,
 		currentChatPage,
-		temporaryChatEnabled,
-		showArtifacts,
-		showOverview,
-		showControls
+		temporaryChatEnabled
 	} from '$lib/stores';
 	import { onMount, getContext, tick, onDestroy } from 'svelte';
 
 	const i18n = getContext('i18n');
 
-	import { updateUserSettings } from '$lib/apis/users';
 	import {
 		deleteChatById,
 		getChatList,
-		getChatById,
-		getChatListByTagName,
-		updateChatById,
-		getAllChatTags,
-		archiveChatById,
-		cloneChatById,
+		getAllTags,
 		getChatListBySearchText,
 		createNewChat,
-		getPinnedChatList
+		getPinnedChatList,
+		toggleChatPinnedStatusById,
+		getChatPinnedStatusById,
+		getChatById,
+		updateChatFolderIdById
 	} from '$lib/apis/chats';
 	import { WEBUI_BASE_URL } from '$lib/constants';
 
@@ -45,9 +40,13 @@
 	import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
 	import Spinner from '../common/Spinner.svelte';
 	import Loader from '../common/Loader.svelte';
-	import FilesOverlay from '../chat/MessageInput/FilesOverlay.svelte';
 	import AddFilesPlaceholder from '../AddFilesPlaceholder.svelte';
-	import { select } from 'd3-selection';
+	import SearchInput from './Sidebar/SearchInput.svelte';
+	import Folder from '../common/Folder.svelte';
+	import Plus from '../icons/Plus.svelte';
+	import Tooltip from '../common/Tooltip.svelte';
+	import { createNewFolder, getFolders, updateFolderParentIdById } from '$lib/apis/folders';
+	import Folders from './Sidebar/Folders.svelte';
 
 	const BREAKPOINT = 768;
 
@@ -64,12 +63,82 @@
 
 	let selectedTagName = null;
 
+	let showPinnedChat = true;
+
 	// Pagination variables
 	let chatListLoading = false;
 	let allChatsLoaded = false;
 
+	let folders = {};
+
+	const initFolders = async () => {
+		const folderList = await getFolders(localStorage.token).catch((error) => {
+			toast.error(error);
+			return [];
+		});
+
+		folders = {};
+
+		// First pass: Initialize all folder entries
+		for (const folder of folderList) {
+			// Ensure folder is added to folders with its data
+			folders[folder.id] = { ...(folders[folder.id] || {}), ...folder };
+		}
+
+		// Second pass: Tie child folders to their parents
+		for (const folder of folderList) {
+			if (folder.parent_id) {
+				// Ensure the parent folder is initialized if it doesn't exist
+				if (!folders[folder.parent_id]) {
+					folders[folder.parent_id] = {}; // Create a placeholder if not already present
+				}
+
+				// Initialize childrenIds array if it doesn't exist and add the current folder id
+				folders[folder.parent_id].childrenIds = folders[folder.parent_id].childrenIds
+					? [...folders[folder.parent_id].childrenIds, folder.id]
+					: [folder.id];
+
+				// Sort the children by updated_at field
+				folders[folder.parent_id].childrenIds.sort((a, b) => {
+					return folders[b].updated_at - folders[a].updated_at;
+				});
+			}
+		}
+	};
+
+	const createFolder = async (name = 'Untitled') => {
+		if (name === '') {
+			toast.error($i18n.t('Folder name cannot be empty.'));
+			return;
+		}
+
+		const rootFolders = Object.values(folders).filter((folder) => folder.parent_id === null);
+		if (rootFolders.find((folder) => folder.name.toLowerCase() === name.toLowerCase())) {
+			// If a folder with the same name already exists, append a number to the name
+			let i = 1;
+			while (
+				rootFolders.find((folder) => folder.name.toLowerCase() === `${name} ${i}`.toLowerCase())
+			) {
+				i++;
+			}
+
+			name = `${name} ${i}`;
+		}
+
+		const res = await createNewFolder(localStorage.token, name).catch((error) => {
+			toast.error(error);
+			return null;
+		});
+
+		if (res) {
+			await initFolders();
+		}
+	};
+
 	const initChatList = async () => {
 		// Reset pagination variables
+		tags.set(await getAllTags(localStorage.token));
+
 		currentChatPage.set(1);
 		allChatsLoaded = false;
 		await chats.set(await getChatList(localStorage.token, $currentChatPage));
@@ -93,7 +162,7 @@
 
 		// once the bottom of the list has been reached (no results) there is no need to continue querying
 		allChatsLoaded = newChatList.length === 0;
-		await chats.set([...$chats, ...newChatList]);
+		await chats.set([...($chats ? $chats : []), ...newChatList]);
 
 		chatListLoading = false;
 	};
@@ -116,6 +185,10 @@
 			searchDebounceTimeout = setTimeout(async () => {
 				currentChatPage.set(1);
 				await chats.set(await getChatListBySearchText(localStorage.token, search));
+
+				if ($chats.length === 0) {
+					tags.set(await getAllTags(localStorage.token));
+				}
 			}, 1000);
 		}
 	};
@@ -127,6 +200,8 @@
 		});
 
 		if (res) {
+			tags.set(await getAllTags(localStorage.token));
+
 			if ($chatId === id) {
 				await chatId.set('');
 				await tick();
@@ -136,7 +211,6 @@
 			allChatsLoaded = false;
 			currentChatPage.set(1);
 			await chats.set(await getChatList(localStorage.token, $currentChatPage));
-
 			await pinnedChats.set(await getPinnedChatList(localStorage.token));
 		}
 	};
@@ -171,14 +245,11 @@
 	const tagEventHandler = async (type, tagName, chatId) => {
 		console.log(type, tagName, chatId);
 		if (type === 'delete') {
-			if (selectedTagName === tagName) {
-				if ($tags.map((t) => t.name).includes(tagName)) {
-					await chats.set(await getChatListByTagName(localStorage.token, tagName));
-				} else {
-					selectedTagName = null;
-					await initChatList();
-				}
-			}
+			currentChatPage.set(1);
+			await chats.set(await getChatListBySearchText(localStorage.token, search, $currentChatPage));
+		} else if (type === 'add') {
+			currentChatPage.set(1);
+			await chats.set(await getChatListBySearchText(localStorage.token, search, $currentChatPage));
 		}
 	};
 
@@ -186,7 +257,13 @@
 
 	const onDragOver = (e) => {
 		e.preventDefault();
-		dragged = true;
+
+		// Check if a file is being dragged.
+		if (e.dataTransfer?.types?.includes('Files')) {
+			dragged = true;
+		} else {
+			dragged = false;
+		}
 	};
 
 	const onDragLeave = () => {
@@ -195,19 +272,19 @@
 
 	const onDrop = async (e) => {
 		e.preventDefault();
-		console.log(e);
+		console.log(e); // Log the drop event
 
+		// Perform file drop check and handle it accordingly
 		if (e.dataTransfer?.files) {
 			const inputFiles = Array.from(e.dataTransfer?.files);
+
 			if (inputFiles && inputFiles.length > 0) {
-				console.log(inputFiles);
-				inputFilesHandler(inputFiles);
-			} else {
-				toast.error($i18n.t(`File not found.`));
+				console.log(inputFiles); // Log the dropped files
+				inputFilesHandler(inputFiles); // Handle the dropped files
 			}
 		}
 
-		dragged = false;
+		dragged = false; // Reset dragged status after drop
 	};
 
 	let touchstart;
@@ -256,6 +333,8 @@
 	};
 
 	onMount(async () => {
+		showPinnedChat = localStorage?.showPinnedChat ? localStorage.showPinnedChat === 'true' : true;
+
 		mobile.subscribe((e) => {
 			if ($showSidebar && e) {
 				showSidebar.set(false);
@@ -271,6 +350,7 @@
 			localStorage.sidebar = value;
 		});
 
+		await initFolders();
 		await pinnedChats.set(await getPinnedChatList(localStorage.token));
 		await initChatList();
 
@@ -311,7 +391,8 @@
 <ArchivedChatsModal
 	bind:show={$showArchivedChats}
 	on:change={async () => {
-		await chats.set(await getChatList(localStorage.token));
+		await pinnedChats.set(await getPinnedChatList(localStorage.token));
+		await initChatList();
 	}}
 />
 
@@ -342,8 +423,8 @@
 	bind:this={navElement}
 	id="sidebar"
 	class="h-screen max-h-[100dvh] min-h-screen select-none {$showSidebar
-		? 'md:relative w-[260px]'
-		: '-translate-x-[260px] w-[0px]'} bg-gray-50 text-gray-900 dark:bg-gray-950 dark:text-gray-200 text-sm transition fixed z-50 top-0 left-0
+		? 'md:relative w-[260px] max-w-[260px]'
+		: '-translate-x-[260px] w-[0px]'} bg-gray-50 text-gray-900 dark:bg-gray-950 dark:text-gray-200 text-sm transition fixed z-50 top-0 left-0 overflow-x-hidden
         "
 	data-state={$showSidebar}
 >
@@ -360,14 +441,14 @@
 		</div>
 	{/if}
 	<div
-		class="py-2.5 my-auto flex flex-col justify-between h-screen max-h-[100dvh] w-[260px] z-50 {$showSidebar
+		class="py-2.5 my-auto flex flex-col justify-between h-screen max-h-[100dvh] w-[260px] overflow-x-hidden z-50 {$showSidebar
 			? ''
 			: 'invisible'}"
 	>
 		<div class="px-2.5 flex justify-between space-x-1 text-gray-600 dark:text-gray-400">
 			<a
 				id="sidebar-new-chat-button"
-				class="flex flex-1 justify-between rounded-xl px-2 h-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+				class="flex flex-1 justify-between rounded-lg px-2 h-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
 				href="/"
 				draggable="false"
 				on:click={async () => {
@@ -411,7 +492,7 @@
 			</a>
 
 			<button
-				class=" cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+				class=" cursor-pointer px-2 py-2 flex rounded-lg hover:bg-gray-100 dark:hover:bg-gray-900 transition"
 				on:click={() => {
 					showSidebar.set(!$showSidebar);
 				}}
@@ -438,7 +519,7 @@
 		{#if $user?.role === 'admin'}
 			<div class="px-2.5 flex justify-center text-gray-800 dark:text-gray-200">
 				<a
-					class="flex-grow flex space-x-3 rounded-xl px-2.5 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+					class="flex-grow flex space-x-3 rounded-lg px-2.5 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition"
 					href="/workspace"
 					on:click={() => {
 						selectedChatId = null;
@@ -474,6 +555,31 @@
 			</div>
 		{/if}
 
+		<div class="relative {$temporaryChatEnabled ? 'opacity-20' : ''}">
+			{#if $temporaryChatEnabled}
+				<div class="absolute z-40 w-full h-full flex justify-center"></div>
+			{/if}
+
+			<div class="absolute z-40 right-4 top-1">
+				<Tooltip content={$i18n.t('New folder')}>
+					<button
+						class="p-1 rounded-lg bg-gray-50 hover:bg-gray-100 dark:bg-gray-950 dark:hover:bg-gray-900 transition"
+						on:click={() => {
+							createFolder();
+						}}
+					>
+						<Plus />
+					</button>
+				</Tooltip>
+			</div>
+
+			<SearchInput
+				bind:value={search}
+				on:input={searchDebounceHandler}
+				placeholder={$i18n.t('Search')}
+			/>
+		</div>
+
 		<div
 			class="relative flex flex-col flex-1 overflow-y-auto {$temporaryChatEnabled
 				? 'opacity-20'
@@ -483,120 +589,169 @@
 				<div class="absolute z-40 w-full h-full flex justify-center"></div>
 			{/if}
 
-			<div class="px-2 mt-0.5 mb-2 flex justify-center space-x-2">
-				<div class="flex w-full rounded-xl" id="chat-search">
-					<div class="self-center pl-3 py-2 rounded-l-xl bg-transparent">
-						<svg
-							xmlns="http://www.w3.org/2000/svg"
-							viewBox="0 0 20 20"
-							fill="currentColor"
-							class="w-4 h-4"
-						>
-							<path
-								fill-rule="evenodd"
-								d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
-								clip-rule="evenodd"
-							/>
-						</svg>
-					</div>
-
-					<input
-						class="w-full rounded-r-xl py-1.5 pl-2.5 pr-4 text-sm bg-transparent dark:text-gray-300 outline-none"
-						placeholder={$i18n.t('Search')}
-						bind:value={search}
-						on:input={() => {
-							searchDebounceHandler();
+			{#if !search && $pinnedChats.length > 0}
+				<div class="flex flex-col space-y-1 rounded-xl">
+					<Folder
+						className="px-2"
+						bind:open={showPinnedChat}
+						on:change={(e) => {
+							localStorage.setItem('showPinnedChat', e.detail);
+							console.log(e.detail);
 						}}
-					/>
-				</div>
-			</div>
+						on:drop={async (e) => {
+							const { type, id } = e.detail;
+
+							if (type === 'chat') {
+								const chat = await getChatById(localStorage.token, id);
+
+								if (chat) {
+									console.log(chat);
+									if (chat.folder_id) {
+										const res = await updateChatFolderIdById(
+											localStorage.token,
+											chat.id,
+											null
+										).catch((error) => {
+											toast.error(error);
+											return null;
+										});
+
+										if (res) {
+											initChatList();
+											await initFolders();
+										}
+									}
 
-			{#if $tags.length > 0}
-				<div class="px-3.5 mb-2.5 flex gap-0.5 flex-wrap">
-					<button
-						class="px-2.5 py-[1px] text-xs transition {selectedTagName === null
-							? 'bg-gray-100 dark:bg-gray-900'
-							: ' '} rounded-md font-medium"
-						on:click={async () => {
-							selectedTagName = null;
-							await initChatList();
+									if (!chat.pinned) {
+										const res = await toggleChatPinnedStatusById(localStorage.token, id);
+
+										if (res) {
+											await pinnedChats.set(await getPinnedChatList(localStorage.token));
+											initChatList();
+											await initFolders();
+										}
+									}
+								}
+							}
 						}}
+						name={$i18n.t('Pinned')}
 					>
-						{$i18n.t('all')}
-					</button>
-					{#each $tags as tag}
-						<button
-							class="px-2.5 py-[1px] text-xs transition {selectedTagName === tag.name
-								? 'bg-gray-100 dark:bg-gray-900'
-								: ''}  rounded-md font-medium"
-							on:click={async () => {
-								selectedTagName = tag.name;
-								scrollPaginationEnabled.set(false);
-
-								let taggedChatList = await getChatListByTagName(localStorage.token, tag.name);
-								if (taggedChatList.length === 0) {
-									await tags.set(await getAllChatTags(localStorage.token));
-									// if the tag we deleted is no longer a valid tag, return to main chat list view
-									await initChatList();
-								} else {
-									await chats.set(taggedChatList);
-								}
-								chatListLoading = false;
-							}}
+						<div
+							class="ml-3 pl-1 mt-[1px] flex flex-col overflow-y-auto scrollbar-hidden border-s border-gray-100 dark:border-gray-900"
 						>
-							{tag.name}
-						</button>
-					{/each}
+							{#each $pinnedChats as chat, idx}
+								<ChatItem
+									className=""
+									id={chat.id}
+									title={chat.title}
+									{shiftKey}
+									selected={selectedChatId === chat.id}
+									on:select={() => {
+										selectedChatId = chat.id;
+									}}
+									on:unselect={() => {
+										selectedChatId = null;
+									}}
+									on:delete={(e) => {
+										if ((e?.detail ?? '') === 'shift') {
+											deleteChatHandler(chat.id);
+										} else {
+											deleteChat = chat;
+											showDeleteConfirm = true;
+										}
+									}}
+									on:change={async () => {
+										await pinnedChats.set(await getPinnedChatList(localStorage.token));
+										initChatList();
+									}}
+									on:tag={(e) => {
+										const { type, name } = e.detail;
+										tagEventHandler(type, name, chat.id);
+									}}
+								/>
+							{/each}
+						</div>
+					</Folder>
 				</div>
 			{/if}
 
-			{#if !search && $pinnedChats.length > 0}
-				<div class="pl-2 pb-2 flex flex-col space-y-1">
-					<div class="">
-						<div class="w-full pl-2.5 text-xs text-gray-500 dark:text-gray-500 font-medium pb-1.5">
-							{$i18n.t('Pinned')}
-						</div>
+			<div class=" flex-1 flex flex-col overflow-y-auto scrollbar-hidden">
+				{#if !search && folders}
+					<Folders
+						{folders}
+						on:update={async (e) => {
+							initChatList();
+							await initFolders();
+						}}
+					/>
+				{/if}
 
-						{#each $pinnedChats as chat, idx}
-							<ChatItem
-								{chat}
-								{shiftKey}
-								selected={selectedChatId === chat.id}
-								on:select={() => {
-									selectedChatId = chat.id;
-								}}
-								on:unselect={() => {
-									selectedChatId = null;
-								}}
-								on:delete={(e) => {
-									if ((e?.detail ?? '') === 'shift') {
-										deleteChatHandler(chat.id);
-									} else {
-										deleteChat = chat;
-										showDeleteConfirm = true;
+				<Folder
+					collapsible={!search}
+					className="px-2"
+					name={$i18n.t('All chats')}
+					on:drop={async (e) => {
+						const { type, id } = e.detail;
+
+						if (type === 'chat') {
+							const chat = await getChatById(localStorage.token, id);
+
+							if (chat) {
+								console.log(chat);
+								if (chat.folder_id) {
+									const res = await updateChatFolderIdById(localStorage.token, chat.id, null).catch(
+										(error) => {
+											toast.error(error);
+											return null;
+										}
+									);
+
+									if (res) {
+										initChatList();
+										await initFolders();
 									}
-								}}
-								on:tag={(e) => {
-									const { type, name } = e.detail;
-									tagEventHandler(type, name, chat.id);
-								}}
-							/>
-						{/each}
-					</div>
-				</div>
-			{/if}
+								}
+
+								if (chat.pinned) {
+									const res = await toggleChatPinnedStatusById(localStorage.token, id);
+
+									if (res) {
+										await pinnedChats.set(await getPinnedChatList(localStorage.token));
+										initChatList();
+										await initFolders();
+									}
+								}
+							}
+						} else if (type === 'folder') {
+							if (folders[id].parent_id === null) {
+								return;
+							}
 
-			<div class="pl-2 flex-1 flex flex-col space-y-1 overflow-y-auto scrollbar-hidden">
-				{#if $chats}
-					{#each $chats as chat, idx}
-						{#if idx === 0 || (idx > 0 && chat.time_range !== $chats[idx - 1].time_range)}
-							<div
-								class="w-full pl-2.5 text-xs text-gray-500 dark:text-gray-500 font-medium {idx === 0
-									? ''
-									: 'pt-5'} pb-0.5"
-							>
-								{$i18n.t(chat.time_range)}
-								<!-- localisation keys for time_range to be recognized from the i18next parser (so they don't get automatically removed):
+							const res = await updateFolderParentIdById(localStorage.token, id, null).catch(
+								(error) => {
+									toast.error(error);
+									return null;
+								}
+							);
+
+							if (res) {
+								await initFolders();
+							}
+						}
+					}}
+				>
+					<div class="pt-1.5">
+						{#if $chats}
+							{#each $chats as chat, idx}
+								{#if idx === 0 || (idx > 0 && chat.time_range !== $chats[idx - 1].time_range)}
+									<div
+										class="w-full pl-2.5 text-xs text-gray-500 dark:text-gray-500 font-medium {idx ===
+										0
+											? ''
+											: 'pt-5'} pb-1.5"
+									>
+										{$i18n.t(chat.time_range)}
+										<!-- localisation keys for time_range to be recognized from the i18next parser (so they don't get automatically removed):
 							{$i18n.t('Today')}
 							{$i18n.t('Yesterday')}
 							{$i18n.t('Previous 7 days')}
@@ -614,60 +769,68 @@
 							{$i18n.t('November')}
 							{$i18n.t('December')}
 							-->
-							</div>
-						{/if}
-
-						<ChatItem
-							{chat}
-							{shiftKey}
-							selected={selectedChatId === chat.id}
-							on:select={() => {
-								selectedChatId = chat.id;
-							}}
-							on:unselect={() => {
-								selectedChatId = null;
-							}}
-							on:delete={(e) => {
-								if ((e?.detail ?? '') === 'shift') {
-									deleteChatHandler(chat.id);
-								} else {
-									deleteChat = chat;
-									showDeleteConfirm = true;
-								}
-							}}
-							on:tag={(e) => {
-								const { type, name } = e.detail;
-								tagEventHandler(type, name, chat.id);
-							}}
-						/>
-					{/each}
-
-					{#if $scrollPaginationEnabled && !allChatsLoaded}
-						<Loader
-							on:visible={(e) => {
-								if (!chatListLoading) {
-									loadMoreChats();
-								}
-							}}
-						>
+									</div>
+								{/if}
+
+								<ChatItem
+									className=""
+									id={chat.id}
+									title={chat.title}
+									{shiftKey}
+									selected={selectedChatId === chat.id}
+									on:select={() => {
+										selectedChatId = chat.id;
+									}}
+									on:unselect={() => {
+										selectedChatId = null;
+									}}
+									on:delete={(e) => {
+										if ((e?.detail ?? '') === 'shift') {
+											deleteChatHandler(chat.id);
+										} else {
+											deleteChat = chat;
+											showDeleteConfirm = true;
+										}
+									}}
+									on:change={async () => {
+										await pinnedChats.set(await getPinnedChatList(localStorage.token));
+										initChatList();
+									}}
+									on:tag={(e) => {
+										const { type, name } = e.detail;
+										tagEventHandler(type, name, chat.id);
+									}}
+								/>
+							{/each}
+
+							{#if $scrollPaginationEnabled && !allChatsLoaded}
+								<Loader
+									on:visible={(e) => {
+										if (!chatListLoading) {
+											loadMoreChats();
+										}
+									}}
+								>
+									<div
+										class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2"
+									>
+										<Spinner className=" size-4" />
+										<div class=" ">Loading...</div>
+									</div>
+								</Loader>
+							{/if}
+						{:else}
 							<div class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2">
 								<Spinner className=" size-4" />
 								<div class=" ">Loading...</div>
 							</div>
-						</Loader>
-					{/if}
-				{:else}
-					<div class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2">
-						<Spinner className=" size-4" />
-						<div class=" ">Loading...</div>
+						{/if}
 					</div>
-				{/if}
+				</Folder>
 			</div>
 		</div>
 
-		<div class="px-2.5 pb-safe-bottom">
-			<!-- <hr class=" border-gray-900 mb-1 w-full" /> -->
-
+		<div class="px-2">
 			<div class="flex flex-col font-primary">
 				{#if $user !== undefined}
 					<UserMenu
@@ -679,7 +842,7 @@
 						}}
 					>
 						<button
-							class=" flex rounded-xl py-3 px-3.5 w-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+							class=" flex items-center rounded-xl py-2.5 px-2.5 w-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
 							on:click={() => {
 								showDropdown = !showDropdown;
 							}}

+ 0 - 2
src/lib/components/layout/Sidebar/ArchivedChatsModal.svelte

@@ -15,7 +15,6 @@
 		getArchivedChatList
 	} from '$lib/apis/chats';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
-
 	const i18n = getContext('i18n');
 
 	export let show = false;
@@ -30,7 +29,6 @@
 		});
 
 		chats = await getArchivedChatList(localStorage.token);
-
 		dispatch('change');
 	};
 

+ 115 - 44
src/lib/components/layout/Sidebar/ChatItem.svelte

@@ -1,7 +1,7 @@
 <script lang="ts">
 	import { toast } from 'svelte-sonner';
 	import { goto, invalidate, invalidateAll } from '$app/navigation';
-	import { onMount, getContext, createEventDispatcher, tick } from 'svelte';
+	import { onMount, getContext, createEventDispatcher, tick, onDestroy } from 'svelte';
 	const i18n = getContext('i18n');
 
 	const dispatch = createEventDispatcher();
@@ -10,6 +10,7 @@
 		archiveChatById,
 		cloneChatById,
 		deleteChatById,
+		getAllTags,
 		getChatList,
 		getChatListByTagName,
 		getPinnedChatList,
@@ -22,7 +23,8 @@
 		mobile,
 		pinnedChats,
 		showSidebar,
-		currentChatPage
+		currentChatPage,
+		tags
 	} from '$lib/stores';
 
 	import ChatMenu from './ChatMenu.svelte';
@@ -30,8 +32,16 @@
 	import GarbageBin from '$lib/components/icons/GarbageBin.svelte';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 	import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte';
+	import DragGhost from '$lib/components/common/DragGhost.svelte';
+	import Check from '$lib/components/icons/Check.svelte';
+	import XMark from '$lib/components/icons/XMark.svelte';
+	import Document from '$lib/components/icons/Document.svelte';
+
+	export let className = '';
+
+	export let id;
+	export let title;
 
-	export let chat;
 	export let selected = false;
 	export let shiftKey = false;
 
@@ -40,7 +50,7 @@
 	let showShareChatModal = false;
 	let confirmEdit = false;
 
-	let chatTitle = chat.title;
+	let chatTitle = title;
 
 	const editChatTitle = async (id, title) => {
 		if (title === '') {
@@ -77,6 +87,7 @@
 
 	const archiveChatHandler = async (id) => {
 		await archiveChatById(localStorage.token, id);
+		tags.set(await getAllTags(localStorage.token));
 
 		currentChatPage.set(1);
 		await chats.set(await getChatList(localStorage.token, $currentChatPage));
@@ -86,14 +97,89 @@
 	const focusEdit = async (node: HTMLInputElement) => {
 		node.focus();
 	};
+
+	let itemElement;
+
+	let dragged = false;
+	let x = 0;
+	let y = 0;
+
+	const dragImage = new Image();
+	dragImage.src =
+		'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
+
+	const onDragStart = (event) => {
+		event.stopPropagation();
+
+		event.dataTransfer.setDragImage(dragImage, 0, 0);
+
+		// Set the data to be transferred
+		event.dataTransfer.setData(
+			'text/plain',
+			JSON.stringify({
+				type: 'chat',
+				id: id
+			})
+		);
+
+		dragged = true;
+		itemElement.style.opacity = '0.5'; // Optional: Visual cue to show it's being dragged
+	};
+
+	const onDrag = (event) => {
+		event.stopPropagation();
+
+		x = event.clientX;
+		y = event.clientY;
+	};
+
+	const onDragEnd = (event) => {
+		event.stopPropagation();
+
+		itemElement.style.opacity = '1'; // Reset visual cue after drag
+		dragged = false;
+	};
+
+	onMount(() => {
+		if (itemElement) {
+			// Event listener for when dragging starts
+			itemElement.addEventListener('dragstart', onDragStart);
+			// Event listener for when dragging occurs (optional)
+			itemElement.addEventListener('drag', onDrag);
+			// Event listener for when dragging ends
+			itemElement.addEventListener('dragend', onDragEnd);
+		}
+	});
+
+	onDestroy(() => {
+		if (itemElement) {
+			itemElement.removeEventListener('dragstart', onDragStart);
+			itemElement.removeEventListener('drag', onDrag);
+			itemElement.removeEventListener('dragend', onDragEnd);
+		}
+	});
 </script>
 
-<ShareChatModal bind:show={showShareChatModal} chatId={chat.id} />
+<ShareChatModal bind:show={showShareChatModal} chatId={id} />
 
-<div class=" w-full pr-2 relative group">
+{#if dragged && x && y}
+	<DragGhost {x} {y}>
+		<div class=" bg-black/80 backdrop-blur-2xl px-2 py-1 rounded-lg w-fit max-w-40">
+			<div class="flex items-center gap-1">
+				<Document className=" size-[18px]" strokeWidth="2" />
+				<div class=" text-xs text-white line-clamp-1">
+					{title}
+				</div>
+			</div>
+		</div>
+	</DragGhost>
+{/if}
+
+<div bind:this={itemElement} class=" w-full {className} relative group" draggable="true">
 	{#if confirmEdit}
 		<div
-			class=" w-full flex justify-between rounded-xl px-3 py-2 {chat.id === $chatId || confirmEdit
+			class=" w-full flex justify-between rounded-lg px-[11px] py-[7px] {id === $chatId ||
+			confirmEdit
 				? 'bg-gray-200 dark:bg-gray-900'
 				: selected
 					? 'bg-gray-100 dark:bg-gray-950'
@@ -107,12 +193,13 @@
 		</div>
 	{:else}
 		<a
-			class=" w-full flex justify-between rounded-xl px-3 py-2 {chat.id === $chatId || confirmEdit
+			class=" w-full flex justify-between rounded-lg px-[11px] py-[7px] {id === $chatId ||
+			confirmEdit
 				? 'bg-gray-200 dark:bg-gray-900'
 				: selected
 					? 'bg-gray-100 dark:bg-gray-950'
 					: ' group-hover:bg-gray-100 dark:group-hover:bg-gray-950'}  whitespace-nowrap text-ellipsis"
-			href="/c/{chat.id}"
+			href="/c/{id}"
 			on:click={() => {
 				dispatch('select');
 
@@ -121,7 +208,7 @@
 				}
 			}}
 			on:dblclick={() => {
-				chatTitle = chat.title;
+				chatTitle = title;
 				confirmEdit = true;
 			}}
 			on:mouseenter={(e) => {
@@ -135,7 +222,7 @@
 		>
 			<div class=" flex self-center flex-1 w-full">
 				<div class=" text-left self-center overflow-hidden w-full h-[20px]">
-					{chat.title}
+					{title}
 				</div>
 			</div>
 		</a>
@@ -144,12 +231,14 @@
 	<!-- svelte-ignore a11y-no-static-element-interactions -->
 	<div
 		class="
-        {chat.id === $chatId || confirmEdit
+        {id === $chatId || confirmEdit
 			? 'from-gray-200 dark:from-gray-900'
 			: selected
 				? 'from-gray-100 dark:from-gray-950'
 				: 'invisible group-hover:visible from-gray-100 dark:from-gray-950'}
-            absolute right-[10px] top-[6px] py-1 pr-2 pl-5 bg-gradient-to-l from-80%
+            absolute {className === 'pr-2'
+			? 'right-[8px]'
+			: 'right-0'}  top-[5px] py-1 pr-0.5 mr-2 pl-5 bg-gradient-to-l from-80%
 
               to-transparent"
 		on:mouseenter={(e) => {
@@ -160,28 +249,19 @@
 		}}
 	>
 		{#if confirmEdit}
-			<div class="flex self-center space-x-1.5 z-10">
+			<div
+				class="flex self-center items-center space-x-1.5 z-10 translate-y-[0.5px] -translate-x-[0.5px]"
+			>
 				<Tooltip content={$i18n.t('Confirm')}>
 					<button
 						class=" self-center dark:hover:text-white transition"
 						on:click={() => {
-							editChatTitle(chat.id, chatTitle);
+							editChatTitle(id, chatTitle);
 							confirmEdit = false;
 							chatTitle = '';
 						}}
 					>
-						<svg
-							xmlns="http://www.w3.org/2000/svg"
-							viewBox="0 0 20 20"
-							fill="currentColor"
-							class="w-4 h-4"
-						>
-							<path
-								fill-rule="evenodd"
-								d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
-								clip-rule="evenodd"
-							/>
-						</svg>
+						<Check className=" size-3.5" strokeWidth="2.5" />
 					</button>
 				</Tooltip>
 
@@ -193,16 +273,7 @@
 							chatTitle = '';
 						}}
 					>
-						<svg
-							xmlns="http://www.w3.org/2000/svg"
-							viewBox="0 0 20 20"
-							fill="currentColor"
-							class="w-4 h-4"
-						>
-							<path
-								d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
-							/>
-						</svg>
+						<XMark strokeWidth="2.5" />
 					</button>
 				</Tooltip>
 			</div>
@@ -212,7 +283,7 @@
 					<button
 						class=" self-center dark:hover:text-white transition"
 						on:click={() => {
-							archiveChatHandler(chat.id);
+							archiveChatHandler(id);
 						}}
 						type="button"
 					>
@@ -235,18 +306,18 @@
 		{:else}
 			<div class="flex self-center space-x-1 z-10">
 				<ChatMenu
-					chatId={chat.id}
+					chatId={id}
 					cloneChatHandler={() => {
-						cloneChatHandler(chat.id);
+						cloneChatHandler(id);
 					}}
 					shareHandler={() => {
 						showShareChatModal = true;
 					}}
 					archiveChatHandler={() => {
-						archiveChatHandler(chat.id);
+						archiveChatHandler(id);
 					}}
 					renameHandler={() => {
-						chatTitle = chat.title;
+						chatTitle = title;
 
 						confirmEdit = true;
 					}}
@@ -257,7 +328,7 @@
 						dispatch('unselect');
 					}}
 					on:change={async () => {
-						await pinnedChats.set(await getPinnedChatList(localStorage.token));
+						dispatch('change');
 					}}
 					on:tag={(e) => {
 						dispatch('tag', e.detail);
@@ -283,7 +354,7 @@
 					</button>
 				</ChatMenu>
 
-				{#if chat.id === $chatId}
+				{#if id === $chatId}
 					<!-- Shortcut support using "delete-chat-button" id -->
 					<button
 						id="delete-chat-button"

+ 19 - 15
src/lib/components/layout/Sidebar/ChatMenu.svelte

@@ -15,13 +15,8 @@
 	import DocumentDuplicate from '$lib/components/icons/DocumentDuplicate.svelte';
 	import Bookmark from '$lib/components/icons/Bookmark.svelte';
 	import BookmarkSlash from '$lib/components/icons/BookmarkSlash.svelte';
-	import {
-		addTagById,
-		deleteTagById,
-		getChatPinnedStatusById,
-		getTagsById,
-		toggleChatPinnedStatusById
-	} from '$lib/apis/chats';
+	import { getChatPinnedStatusById, toggleChatPinnedStatusById } from '$lib/apis/chats';
+	import { chats } from '$lib/stores';
 
 	const i18n = getContext('i18n');
 
@@ -65,14 +60,14 @@
 
 	<div slot="content">
 		<DropdownMenu.Content
-			class="w-full max-w-[180px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow"
+			class="w-full max-w-[160px] rounded-xl px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-xl"
 			sideOffset={-2}
 			side="bottom"
 			align="start"
 			transition={flyAndScale}
 		>
 			<DropdownMenu.Item
-				class="flex gap-2 items-center px-3 py-2 text-sm  font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 				on:click={() => {
 					pinHandler();
 				}}
@@ -87,7 +82,7 @@
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
-				class="flex gap-2 items-center px-3 py-2 text-sm  font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 				on:click={() => {
 					renameHandler();
 				}}
@@ -97,7 +92,7 @@
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
-				class="flex gap-2 items-center px-3 py-2 text-sm  font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 				on:click={() => {
 					cloneChatHandler();
 				}}
@@ -107,7 +102,7 @@
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
-				class="flex gap-2 items-center px-3 py-2 text-sm  font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 				on:click={() => {
 					archiveChatHandler();
 				}}
@@ -117,7 +112,7 @@
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
-				class="flex gap-2 items-center px-3 py-2 text-sm  font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800  rounded-md"
+				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800  rounded-md"
 				on:click={() => {
 					shareHandler();
 				}}
@@ -127,7 +122,7 @@
 			</DropdownMenu.Item>
 
 			<DropdownMenu.Item
-				class="flex  gap-2  items-center px-3 py-2 text-sm  font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				class="flex  gap-2  items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
 				on:click={() => {
 					deleteHandler();
 				}}
@@ -136,16 +131,25 @@
 				<div class="flex items-center">{$i18n.t('Delete')}</div>
 			</DropdownMenu.Item>
 
-			<hr class="border-gray-100 dark:border-gray-800 mt-2.5 mb-1.5" />
+			<hr class="border-gray-100 dark:border-gray-800 mt-1 mb-1" />
 
 			<div class="flex p-1">
 				<Tags
 					{chatId}
+					on:add={(e) => {
+						dispatch('tag', {
+							type: 'add',
+							name: e.detail.name
+						});
+
+						show = false;
+					}}
 					on:delete={(e) => {
 						dispatch('tag', {
 							type: 'delete',
 							name: e.detail.name
 						});
+
 						show = false;
 					}}
 					on:close={() => {

+ 29 - 0
src/lib/components/layout/Sidebar/Folders.svelte

@@ -0,0 +1,29 @@
+<script lang="ts">
+	import { createEventDispatcher } from 'svelte';
+
+	const dispatch = createEventDispatcher();
+	import RecursiveFolder from './RecursiveFolder.svelte';
+	export let folders = {};
+
+	let folderList = [];
+	// Get the list of folders that have no parent, sorted by name alphabetically
+	$: folderList = Object.keys(folders)
+		.filter((key) => folders[key].parent_id === null)
+		.sort((a, b) =>
+			folders[a].name.localeCompare(folders[b].name, undefined, {
+				numeric: true,
+				sensitivity: 'base'
+			})
+		);
+</script>
+
+{#each folderList as folderId (folderId)}
+	<RecursiveFolder
+		className="px-2"
+		{folders}
+		{folderId}
+		on:update={(e) => {
+			dispatch('update', e.detail);
+		}}
+	/>
+{/each}

+ 58 - 0
src/lib/components/layout/Sidebar/Folders/FolderMenu.svelte

@@ -0,0 +1,58 @@
+<script lang="ts">
+	import { DropdownMenu } from 'bits-ui';
+	import { flyAndScale } from '$lib/utils/transitions';
+	import { getContext, createEventDispatcher } from 'svelte';
+
+	const i18n = getContext('i18n');
+	const dispatch = createEventDispatcher();
+
+	import Dropdown from '$lib/components/common/Dropdown.svelte';
+	import GarbageBin from '$lib/components/icons/GarbageBin.svelte';
+	import Pencil from '$lib/components/icons/Pencil.svelte';
+	import Tooltip from '$lib/components/common/Tooltip.svelte';
+
+	let show = false;
+</script>
+
+<Dropdown
+	bind:show
+	on:change={(e) => {
+		if (e.detail === false) {
+			dispatch('close');
+		}
+	}}
+>
+	<Tooltip content={$i18n.t('More')}>
+		<slot />
+	</Tooltip>
+
+	<div slot="content">
+		<DropdownMenu.Content
+			class="w-full max-w-[160px] rounded-lg px-1 py-1.5  z-50 bg-white dark:bg-gray-850 dark:text-white shadow-xl"
+			sideOffset={-2}
+			side="bottom"
+			align="start"
+			transition={flyAndScale}
+		>
+			<DropdownMenu.Item
+				class="flex gap-2 items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				on:click={() => {
+					dispatch('rename');
+				}}
+			>
+				<Pencil strokeWidth="2" />
+				<div class="flex items-center">{$i18n.t('Rename')}</div>
+			</DropdownMenu.Item>
+
+			<DropdownMenu.Item
+				class="flex  gap-2  items-center px-3 py-1.5 text-sm  cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
+				on:click={() => {
+					dispatch('delete');
+				}}
+			>
+				<GarbageBin strokeWidth="2" />
+				<div class="flex items-center">{$i18n.t('Delete')}</div>
+			</DropdownMenu.Item>
+		</DropdownMenu.Content>
+	</div>
+</Dropdown>

+ 397 - 0
src/lib/components/layout/Sidebar/RecursiveFolder.svelte

@@ -0,0 +1,397 @@
+<script>
+	import { getContext, createEventDispatcher, onMount, onDestroy, tick } from 'svelte';
+
+	const i18n = getContext('i18n');
+	const dispatch = createEventDispatcher();
+
+	import ChevronDown from '../../icons/ChevronDown.svelte';
+	import ChevronRight from '../../icons/ChevronRight.svelte';
+	import Collapsible from '../../common/Collapsible.svelte';
+	import DragGhost from '$lib/components/common/DragGhost.svelte';
+
+	import FolderOpen from '$lib/components/icons/FolderOpen.svelte';
+	import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte';
+	import {
+		deleteFolderById,
+		updateFolderIsExpandedById,
+		updateFolderNameById,
+		updateFolderParentIdById
+	} from '$lib/apis/folders';
+	import { toast } from 'svelte-sonner';
+	import { updateChatFolderIdById } from '$lib/apis/chats';
+	import ChatItem from './ChatItem.svelte';
+	import FolderMenu from './Folders/FolderMenu.svelte';
+
+	export let open = false;
+
+	export let folders;
+	export let folderId;
+
+	export let className = '';
+
+	export let parentDragged = false;
+
+	let folderElement;
+
+	let edit = false;
+
+	let draggedOver = false;
+	let dragged = false;
+
+	let name = '';
+
+	const onDragOver = (e) => {
+		e.preventDefault();
+		e.stopPropagation();
+		if (dragged || parentDragged) {
+			return;
+		}
+		draggedOver = true;
+	};
+
+	const onDrop = async (e) => {
+		e.preventDefault();
+		e.stopPropagation();
+		if (dragged || parentDragged) {
+			return;
+		}
+
+		if (folderElement.contains(e.target)) {
+			console.log('Dropped on the Button');
+
+			try {
+				// get data from the drag event
+				const dataTransfer = e.dataTransfer.getData('text/plain');
+				const data = JSON.parse(dataTransfer);
+				console.log(data);
+
+				const { type, id } = data;
+
+				if (type === 'folder') {
+					open = true;
+					if (id === folderId) {
+						return;
+					}
+					// Move the folder
+					const res = await updateFolderParentIdById(localStorage.token, id, folderId).catch(
+						(error) => {
+							toast.error(error);
+							return null;
+						}
+					);
+
+					if (res) {
+						dispatch('update');
+					}
+				} else if (type === 'chat') {
+					open = true;
+
+					// Move the chat
+					const res = await updateChatFolderIdById(localStorage.token, id, folderId).catch(
+						(error) => {
+							toast.error(error);
+							return null;
+						}
+					);
+
+					if (res) {
+						dispatch('update');
+					}
+				}
+			} catch (error) {
+				console.error(error);
+			}
+
+			draggedOver = false;
+		}
+	};
+
+	const onDragLeave = (e) => {
+		e.preventDefault();
+		if (dragged || parentDragged) {
+			return;
+		}
+
+		draggedOver = false;
+	};
+
+	const dragImage = new Image();
+	dragImage.src =
+		'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
+
+	let x;
+	let y;
+
+	const onDragStart = (event) => {
+		event.stopPropagation();
+		event.dataTransfer.setDragImage(dragImage, 0, 0);
+
+		// Set the data to be transferred
+		event.dataTransfer.setData(
+			'text/plain',
+			JSON.stringify({
+				type: 'folder',
+				id: folderId
+			})
+		);
+
+		dragged = true;
+		folderElement.style.opacity = '0.5'; // Optional: Visual cue to show it's being dragged
+	};
+
+	const onDrag = (event) => {
+		event.stopPropagation();
+
+		x = event.clientX;
+		y = event.clientY;
+	};
+
+	const onDragEnd = (event) => {
+		event.stopPropagation();
+
+		folderElement.style.opacity = '1'; // Reset visual cue after drag
+		dragged = false;
+	};
+
+	onMount(() => {
+		open = folders[folderId].is_expanded;
+		if (folderElement) {
+			folderElement.addEventListener('dragover', onDragOver);
+			folderElement.addEventListener('drop', onDrop);
+			folderElement.addEventListener('dragleave', onDragLeave);
+
+			// Event listener for when dragging starts
+			folderElement.addEventListener('dragstart', onDragStart);
+			// Event listener for when dragging occurs (optional)
+			folderElement.addEventListener('drag', onDrag);
+			// Event listener for when dragging ends
+			folderElement.addEventListener('dragend', onDragEnd);
+		}
+	});
+
+	onDestroy(() => {
+		if (folderElement) {
+			folderElement.addEventListener('dragover', onDragOver);
+			folderElement.removeEventListener('drop', onDrop);
+			folderElement.removeEventListener('dragleave', onDragLeave);
+
+			folderElement.removeEventListener('dragstart', onDragStart);
+			folderElement.removeEventListener('drag', onDrag);
+			folderElement.removeEventListener('dragend', onDragEnd);
+		}
+	});
+
+	const deleteHandler = async () => {
+		const res = await deleteFolderById(localStorage.token, folderId).catch((error) => {
+			toast.error(error);
+			return null;
+		});
+
+		if (res) {
+			toast.success($i18n.t('Folder deleted successfully'));
+			dispatch('update');
+		}
+	};
+
+	const nameUpdateHandler = async () => {
+		if (name === '') {
+			toast.error($i18n.t('Folder name cannot be empty'));
+			return;
+		}
+
+		if (name === folders[folderId].name) {
+			edit = false;
+			return;
+		}
+
+		const currentName = folders[folderId].name;
+
+		name = name.trim();
+		folders[folderId].name = name;
+
+		const res = await updateFolderNameById(localStorage.token, folderId, name).catch((error) => {
+			toast.error(error);
+
+			folders[folderId].name = currentName;
+			return null;
+		});
+
+		if (res) {
+			folders[folderId].name = name;
+			toast.success($i18n.t('Folder name updated successfully'));
+			dispatch('update');
+		}
+	};
+
+	const isExpandedUpdateHandler = async () => {
+		const res = await updateFolderIsExpandedById(localStorage.token, folderId, open).catch(
+			(error) => {
+				toast.error(error);
+				return null;
+			}
+		);
+	};
+
+	let isExpandedUpdateTimeout;
+
+	const isExpandedUpdateDebounceHandler = (open) => {
+		clearTimeout(isExpandedUpdateTimeout);
+		isExpandedUpdateTimeout = setTimeout(() => {
+			isExpandedUpdateHandler();
+		}, 500);
+	};
+
+	$: isExpandedUpdateDebounceHandler(open);
+
+	const editHandler = async () => {
+		console.log('Edit');
+		await tick();
+		name = folders[folderId].name;
+		edit = true;
+
+		await tick();
+
+		// focus on the input
+		setTimeout(() => {
+			const input = document.getElementById(`folder-${folderId}-input`);
+			input.focus();
+		}, 100);
+	};
+</script>
+
+{#if dragged && x && y}
+	<DragGhost {x} {y}>
+		<div class=" bg-black/80 backdrop-blur-2xl px-2 py-1 rounded-lg w-fit max-w-40">
+			<div class="flex items-center gap-1">
+				<FolderOpen className="size-3.5" strokeWidth="2" />
+				<div class=" text-xs text-white line-clamp-1">
+					{folders[folderId].name}
+				</div>
+			</div>
+		</div>
+	</DragGhost>
+{/if}
+
+<div bind:this={folderElement} class="relative {className}" draggable="true">
+	{#if draggedOver}
+		<div
+			class="absolute top-0 left-0 w-full h-full rounded-sm bg-[hsla(258,88%,66%,0.1)] bg-opacity-50 dark:bg-opacity-10 z-50 pointer-events-none touch-none"
+		></div>
+	{/if}
+
+	<Collapsible
+		bind:open
+		className="w-full"
+		buttonClassName="w-full"
+		hide={(folders[folderId]?.childrenIds ?? []).length === 0 &&
+			(folders[folderId].items?.chats ?? []).length === 0}
+		on:change={(e) => {
+			dispatch('open', e.detail);
+		}}
+	>
+		<!-- svelte-ignore a11y-no-static-element-interactions -->
+		<div class="w-full group">
+			<button
+				id="folder-{folderId}-button"
+				class="relative w-full py-1.5 px-2 rounded-md flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-500 font-medium hover:bg-gray-100 dark:hover:bg-gray-900 transition"
+				on:dblclick={() => {
+					editHandler();
+				}}
+			>
+				<div class="text-gray-300 dark:text-gray-600">
+					{#if open}
+						<ChevronDown className=" size-3" strokeWidth="2.5" />
+					{:else}
+						<ChevronRight className=" size-3" strokeWidth="2.5" />
+					{/if}
+				</div>
+
+				<div class="translate-y-[0.5px] flex-1 justify-start text-start line-clamp-1">
+					{#if edit}
+						<input
+							id="folder-{folderId}-input"
+							type="text"
+							bind:value={name}
+							on:blur={() => {
+								nameUpdateHandler();
+								edit = false;
+							}}
+							on:click={(e) => {
+								// Prevent accidental collapse toggling when clicking inside input
+								e.stopPropagation();
+							}}
+							on:mousedown={(e) => {
+								// Prevent accidental collapse toggling when clicking inside input
+								e.stopPropagation();
+							}}
+							on:keydown={(e) => {
+								if (e.key === 'Enter') {
+									edit = false;
+								}
+							}}
+							class="w-full h-full bg-transparent text-gray-500 dark:text-gray-500 outline-none"
+						/>
+					{:else}
+						{folders[folderId].name}
+					{/if}
+				</div>
+
+				<button
+					class="absolute z-10 right-2 invisible group-hover:visible self-center flex items-center dark:text-gray-300"
+					on:pointerup={(e) => {
+						e.stopPropagation();
+					}}
+				>
+					<FolderMenu
+						on:rename={() => {
+							editHandler();
+						}}
+						on:delete={() => {
+							deleteHandler();
+						}}
+					>
+						<button class="p-0.5 dark:hover:bg-gray-850 rounded-lg touch-auto" on:click={(e) => {}}>
+							<EllipsisHorizontal className="size-4" strokeWidth="2.5" />
+						</button>
+					</FolderMenu>
+				</button>
+			</button>
+		</div>
+
+		<div slot="content" class="w-full">
+			{#if (folders[folderId]?.childrenIds ?? []).length > 0 || (folders[folderId].items?.chats ?? []).length > 0}
+				<div
+					class="ml-3 pl-1 mt-[1px] flex flex-col overflow-y-auto scrollbar-hidden border-s border-gray-100 dark:border-gray-900"
+				>
+					{#if folders[folderId]?.childrenIds}
+						{@const children = folders[folderId]?.childrenIds
+							.map((id) => folders[id])
+							.sort((a, b) =>
+								a.name.localeCompare(b.name, undefined, {
+									numeric: true,
+									sensitivity: 'base'
+								})
+							)}
+
+						{#each children as childFolder (`${folderId}-${childFolder.id}`)}
+							<svelte:self
+								{folders}
+								folderId={childFolder.id}
+								parentDragged={dragged}
+								on:update={(e) => {
+									dispatch('update', e.detail);
+								}}
+							/>
+						{/each}
+					{/if}
+
+					{#if folders[folderId].items?.chats}
+						{#each folders[folderId].items.chats as chat (chat.id)}
+							<ChatItem id={chat.id} title={chat.title} />
+						{/each}
+					{/if}
+				</div>
+			{/if}
+		</div>
+	</Collapsible>
+</div>

+ 208 - 0
src/lib/components/layout/Sidebar/SearchInput.svelte

@@ -0,0 +1,208 @@
+<script lang="ts">
+	import { tags } from '$lib/stores';
+	import { stringify } from 'postcss';
+	import { getContext, createEventDispatcher, onMount, onDestroy, tick } from 'svelte';
+	import { fade } from 'svelte/transition';
+
+	const dispatch = createEventDispatcher();
+	const i18n = getContext('i18n');
+
+	export let placeholder = '';
+	export let value = '';
+
+	let selectedIdx = 0;
+
+	let lastWord = '';
+	$: lastWord = value ? value.split(' ').at(-1) : value;
+
+	let focused = false;
+	let options = [
+		{
+			name: 'tag:',
+			description: $i18n.t('search for tags')
+		}
+	];
+
+	let filteredOptions = options;
+	$: filteredOptions = options.filter((option) => {
+		return option.name.startsWith(lastWord);
+	});
+
+	let filteredTags = [];
+	$: filteredTags = lastWord.startsWith('tag:')
+		? $tags.filter((tag) => {
+				const tagName = lastWord.slice(4);
+				if (tagName) {
+					const tagId = tagName.replace(' ', '_').toLowerCase();
+
+					if (tag.id !== tagId) {
+						return tag.id.startsWith(tagId);
+					} else {
+						return false;
+					}
+				} else {
+					return true;
+				}
+			})
+		: [];
+
+	const documentClickHandler = (e) => {
+		const searchContainer = document.getElementById('search-container');
+		const chatSearch = document.getElementById('chat-search');
+
+		if (!searchContainer.contains(e.target) && !chatSearch.contains(e.target)) {
+			if (e.target.id.startsWith('search-tag-') || e.target.id.startsWith('search-option-')) {
+				return;
+			}
+			focused = false;
+		}
+	};
+
+	onMount(() => {
+		document.addEventListener('click', documentClickHandler);
+	});
+
+	onDestroy(() => {
+		document.removeEventListener('click', documentClickHandler);
+	});
+</script>
+
+<div class="px-2 mb-1 flex justify-center space-x-2 relative z-10" id="search-container">
+	<div class="flex w-full rounded-xl" id="chat-search">
+		<div class="self-center pl-3 py-2 rounded-l-xl bg-transparent">
+			<svg
+				xmlns="http://www.w3.org/2000/svg"
+				viewBox="0 0 20 20"
+				fill="currentColor"
+				class="w-4 h-4"
+			>
+				<path
+					fill-rule="evenodd"
+					d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
+					clip-rule="evenodd"
+				/>
+			</svg>
+		</div>
+
+		<input
+			class="w-full rounded-r-xl py-1.5 pl-2.5 pr-4 text-sm bg-transparent dark:text-gray-300 outline-none"
+			placeholder={placeholder ? placeholder : $i18n.t('Search')}
+			bind:value
+			on:input={() => {
+				dispatch('input');
+			}}
+			on:focus={() => {
+				focused = true;
+			}}
+			on:keydown={(e) => {
+				if (e.key === 'Enter') {
+					if (filteredTags.length > 0) {
+						const tagElement = document.getElementById(`search-tag-${selectedIdx}`);
+						tagElement.click();
+						return;
+					}
+
+					if (filteredOptions.length > 0) {
+						const optionElement = document.getElementById(`search-option-${selectedIdx}`);
+						optionElement.click();
+						return;
+					}
+				}
+
+				if (e.key === 'ArrowUp') {
+					e.preventDefault();
+					selectedIdx = Math.max(0, selectedIdx - 1);
+				} else if (e.key === 'ArrowDown') {
+					e.preventDefault();
+
+					if (filteredTags.length > 0) {
+						selectedIdx = Math.min(selectedIdx + 1, filteredTags.length - 1);
+					} else {
+						selectedIdx = Math.min(selectedIdx + 1, filteredOptions.length - 1);
+					}
+				} else {
+					// if the user types something, reset to the top selection.
+					selectedIdx = 0;
+				}
+			}}
+		/>
+	</div>
+
+	{#if focused && (filteredOptions.length > 0 || filteredTags.length > 0)}
+		<!-- svelte-ignore a11y-no-static-element-interactions -->
+		<div
+			class="absolute top-0 mt-8 left-0 right-1 border dark:border-gray-900 bg-gray-50 dark:bg-gray-950 rounded-lg z-10 shadow-lg"
+			in:fade={{ duration: 50 }}
+			on:mouseenter={() => {
+				selectedIdx = null;
+			}}
+			on:mouseleave={() => {
+				selectedIdx = 0;
+			}}
+		>
+			<div class="px-2 py-2 text-xs group">
+				{#if filteredTags.length > 0}
+					<div class="px-1 font-medium dark:text-gray-300 text-gray-700 mb-1">Tags</div>
+
+					<div class="">
+						{#each filteredTags as tag, tagIdx}
+							<button
+								class=" px-1.5 py-0.5 flex gap-1 hover:bg-gray-100 dark:hover:bg-gray-900 w-full rounded {selectedIdx ===
+								tagIdx
+									? 'bg-gray-100 dark:bg-gray-900'
+									: ''}"
+								id="search-tag-{tagIdx}"
+								on:click|stopPropagation={async () => {
+									const words = value.split(' ');
+
+									words.pop();
+									words.push(`tag:${tag.id} `);
+
+									value = words.join(' ');
+
+									dispatch('input');
+								}}
+							>
+								<div class="dark:text-gray-300 text-gray-700 font-medium">{tag.name}</div>
+
+								<div class=" text-gray-500 line-clamp-1">
+									{tag.id}
+								</div>
+							</button>
+						{/each}
+					</div>
+				{:else if filteredOptions.length > 0}
+					<div class="px-1 font-medium dark:text-gray-300 text-gray-700 mb-1">Search options</div>
+
+					<div class="">
+						{#each filteredOptions as option, optionIdx}
+							<button
+								class=" px-1.5 py-0.5 flex gap-1 hover:bg-gray-100 dark:hover:bg-gray-900 w-full rounded {selectedIdx ===
+								optionIdx
+									? 'bg-gray-100 dark:bg-gray-900'
+									: ''}"
+								id="search-option-{optionIdx}"
+								on:click|stopPropagation={async () => {
+									const words = value.split(' ');
+
+									words.pop();
+									words.push('tag:');
+
+									value = words.join(' ');
+
+									dispatch('input');
+								}}
+							>
+								<div class="dark:text-gray-300 text-gray-700 font-medium">{option.name}</div>
+
+								<div class=" text-gray-500 line-clamp-1">
+									{option.description}
+								</div>
+							</button>
+						{/each}
+					</div>
+				{/if}
+			</div>
+		</div>
+	{/if}
+</div>

+ 22 - 15
src/lib/components/workspace/Functions.svelte

@@ -47,6 +47,14 @@
 
 	let showDeleteConfirm = false;
 
+	let filteredItems = [];
+	$: filteredItems = $functions.filter(
+		(f) =>
+			query === '' ||
+			f.name.toLowerCase().includes(query.toLowerCase()) ||
+			f.id.toLowerCase().includes(query.toLowerCase())
+	);
+
 	const shareHandler = async (func) => {
 		const item = await getFunctionById(localStorage.token, func.id).catch((error) => {
 			toast.error(error);
@@ -174,17 +182,7 @@
 	</title>
 </svelte:head>
 
-<div class="mb-3">
-	<div class="flex justify-between items-center">
-		<div class="flex md:self-center text-lg font-medium px-0.5">
-			{$i18n.t('Functions')}
-			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
-			<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{$functions.length}</span>
-		</div>
-	</div>
-</div>
-
-<div class=" flex w-full space-x-2">
+<div class=" flex w-full space-x-2 mb-2.5">
 	<div class="flex flex-1">
 		<div class=" self-center ml-1 mr-3">
 			<svg
@@ -225,12 +223,21 @@
 		</a>
 	</div>
 </div>
-<hr class=" border-gray-50 dark:border-gray-850 my-2.5" />
+
+<div class="mb-3.5">
+	<div class="flex justify-between items-center">
+		<div class="flex md:self-center text-base font-medium px-0.5">
+			{$i18n.t('Functions')}
+			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
+			<span class="text-base font-medium text-gray-500 dark:text-gray-300"
+				>{filteredItems.length}</span
+			>
+		</div>
+	</div>
+</div>
 
 <div class="my-3 mb-5">
-	{#each $functions.filter((f) => query === '' || f.name
-				.toLowerCase()
-				.includes(query.toLowerCase()) || f.id.toLowerCase().includes(query.toLowerCase())) as func}
+	{#each filteredItems as func}
 		<div
 			class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl"
 		>

+ 14 - 14
src/lib/components/workspace/Knowledge.svelte

@@ -72,17 +72,7 @@
 	}}
 />
 
-<div class="mb-3">
-	<div class="flex justify-between items-center">
-		<div class="flex md:self-center text-lg font-medium px-0.5">
-			{$i18n.t('Knowledge')}
-			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
-			<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{$knowledge.length}</span>
-		</div>
-	</div>
-</div>
-
-<div class=" flex w-full space-x-2">
+<div class=" flex w-full space-x-2 mb-2.5">
 	<div class="flex flex-1">
 		<div class=" self-center ml-1 mr-3">
 			<svg
@@ -127,12 +117,22 @@
 	</div>
 </div>
 
-<hr class=" border-gray-50 dark:border-gray-850 my-2.5" />
+<div class="mb-3.5">
+	<div class="flex justify-between items-center">
+		<div class="flex md:self-center text-base font-medium px-0.5">
+			{$i18n.t('Knowledge')}
+			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
+			<span class="text-base font-medium text-gray-500 dark:text-gray-300"
+				>{filteredItems.length}</span
+			>
+		</div>
+	</div>
+</div>
 
-<div class="my-3 mb-5 grid lg:grid-cols-2 xl:grid-cols-3 gap-2">
+<div class="my-3 mb-5 grid md:grid-cols-2 lg:grid-cols-3 gap-2">
 	{#each filteredItems as item}
 		<button
-			class=" flex space-x-4 cursor-pointer text-left w-full px-4 py-3 border border-gray-50 dark:border-gray-850 hover:bg-gray-50 dark:hover:bg-gray-850 transition rounded-xl"
+			class=" flex space-x-4 cursor-pointer text-left w-full px-4 py-3 border border-gray-50 dark:border-gray-850 dark:hover:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-850 transition rounded-xl"
 			on:click={() => {
 				if (item?.meta?.document) {
 					toast.error(

+ 1 - 31
src/lib/components/workspace/Knowledge/Collection.svelte

@@ -553,37 +553,7 @@
 />
 
 <div class="flex flex-col w-full max-h-[100dvh] h-full">
-	<div class="flex items-center justify-between">
-		<button
-			class="flex space-x-1 w-fit"
-			on:click={() => {
-				goto('/workspace/knowledge');
-			}}
-		>
-			<div class=" self-center">
-				<svg
-					xmlns="http://www.w3.org/2000/svg"
-					viewBox="0 0 20 20"
-					fill="currentColor"
-					class="w-4 h-4"
-				>
-					<path
-						fill-rule="evenodd"
-						d="M17 10a.75.75 0 01-.75.75H5.612l4.158 3.96a.75.75 0 11-1.04 1.08l-5.5-5.25a.75.75 0 010-1.08l5.5-5.25a.75.75 0 111.04 1.08L5.612 9.25H16.25A.75.75 0 0117 10z"
-						clip-rule="evenodd"
-					/>
-				</svg>
-			</div>
-			<div class=" self-center font-medium text-sm">{$i18n.t('Back')}</div>
-		</button>
-
-		<div class=" flex-shrink-0">
-			<div>
-				<Badge type="success" content="Collection" />
-			</div>
-		</div>
-	</div>
-	<div class="flex flex-col my-2 flex-1 overflow-auto h-0">
+	<div class="flex flex-col mb-2 flex-1 overflow-auto h-0">
 		{#if id && knowledge}
 			<div class="flex flex-row h-0 flex-1 overflow-auto">
 				<div

+ 27 - 21
src/lib/components/workspace/Models.svelte

@@ -35,8 +35,16 @@
 	let modelsImportInputElement: HTMLInputElement;
 
 	let _models = [];
+
+	let filteredModels = [];
 	let selectedModel = null;
 
+	$: if (_models) {
+		filteredModels = _models.filter(
+			(m) => searchValue === '' || m.name.toLowerCase().includes(searchValue.toLowerCase())
+		);
+	}
+
 	let sortable = null;
 	let searchValue = '';
 
@@ -294,17 +302,7 @@
 	}}
 />
 
-<div class="mb-3">
-	<div class="flex justify-between items-center">
-		<div class="flex md:self-center text-lg font-medium px-0.5">
-			{$i18n.t('Models')}
-			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
-			<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{$models.length}</span>
-		</div>
-	</div>
-</div>
-
-<div class=" flex w-full space-x-2">
+<div class=" flex w-full space-x-2 mb-2.5">
 	<div class="flex flex-1">
 		<div class=" self-center ml-1 mr-3">
 			<svg
@@ -329,7 +327,7 @@
 
 	<div>
 		<a
-			class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 transition font-medium text-sm flex items-center space-x-1"
+			class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition font-medium text-sm flex items-center space-x-1"
 			href="/workspace/models/create"
 		>
 			<svg
@@ -346,12 +344,22 @@
 	</div>
 </div>
 
-<hr class=" border-gray-50 dark:border-gray-850 my-2.5" />
+<div class="mb-3.5">
+	<div class="flex justify-between items-center">
+		<div class="flex md:self-center text-base font-medium px-0.5">
+			{$i18n.t('Models')}
+			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-850" />
+			<span class="text-base font-medium text-gray-500 dark:text-gray-300"
+				>{filteredModels.length}</span
+			>
+		</div>
+	</div>
+</div>
 
 <a class=" flex space-x-4 cursor-pointer w-full mb-2 px-3 py-1" href="/workspace/models/create">
-	<div class=" self-center w-10 flex-shrink-0">
+	<div class=" self-center w-8 flex-shrink-0">
 		<div
-			class="w-full h-10 flex justify-center rounded-full bg-transparent dark:bg-gray-700 border border-dashed border-gray-200"
+			class="w-full h-8 flex justify-center rounded-full bg-transparent dark:bg-gray-700 border border-dashed border-gray-200"
 		>
 			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6">
 				<path
@@ -365,16 +373,14 @@
 
 	<div class=" self-center">
 		<div class=" font-semibold line-clamp-1">{$i18n.t('Create a model')}</div>
-		<div class=" text-sm line-clamp-1">{$i18n.t('Customize models for a specific purpose')}</div>
+		<div class=" text-sm line-clamp-1 text-gray-500">
+			{$i18n.t('Customize models for a specific purpose')}
+		</div>
 	</div>
 </a>
 
-<hr class=" border-gray-50 dark:border-gray-850 my-2.5" />
-
 <div class=" my-2 mb-5" id="model-list">
-	{#each _models.filter((m) => searchValue === '' || m.name
-				.toLowerCase()
-				.includes(searchValue.toLowerCase())) as model}
+	{#each filteredModels as model}
 		<div
 			class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl"
 			id="model-item-{model.id}"

+ 16 - 13
src/lib/components/workspace/Prompts.svelte

@@ -21,6 +21,9 @@
 	let showDeleteConfirm = false;
 	let deletePrompt = null;
 
+	let filteredItems = [];
+	$: filteredItems = $prompts.filter((p) => query === '' || p.command.includes(query));
+
 	const shareHandler = async (prompt) => {
 		toast.success($i18n.t('Redirecting you to OpenWebUI Community'));
 
@@ -64,17 +67,7 @@
 	</title>
 </svelte:head>
 
-<div class="mb-3">
-	<div class="flex justify-between items-center">
-		<div class="flex md:self-center text-lg font-medium px-0.5">
-			{$i18n.t('Prompts')}
-			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
-			<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{$prompts.length}</span>
-		</div>
-	</div>
-</div>
-
-<div class=" flex w-full space-x-2">
+<div class=" flex w-full space-x-2 mb-2.5">
 	<div class="flex flex-1">
 		<div class=" self-center ml-1 mr-3">
 			<svg
@@ -116,10 +109,20 @@
 	</div>
 </div>
 
-<hr class=" border-gray-50 dark:border-gray-850 my-2.5" />
+<div class="mb-3.5">
+	<div class="flex justify-between items-center">
+		<div class="flex md:self-center text-base font-medium px-0.5">
+			{$i18n.t('Prompts')}
+			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
+			<span class="text-base font-medium text-gray-500 dark:text-gray-300"
+				>{filteredItems.length}</span
+			>
+		</div>
+	</div>
+</div>
 
 <div class="my-3 mb-5">
-	{#each $prompts.filter((p) => query === '' || p.command.includes(query)) as prompt}
+	{#each filteredItems as prompt}
 		<div
 			class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl"
 		>

+ 21 - 15
src/lib/components/workspace/Tools.svelte

@@ -42,6 +42,14 @@
 
 	let showDeleteConfirm = false;
 
+	let filteredItems = [];
+	$: filteredItems = $tools.filter(
+		(t) =>
+			query === '' ||
+			t.name.toLowerCase().includes(query.toLowerCase()) ||
+			t.id.toLowerCase().includes(query.toLowerCase())
+	);
+
 	const shareHandler = async (tool) => {
 		const item = await getToolById(localStorage.token, tool.id).catch((error) => {
 			toast.error(error);
@@ -146,17 +154,7 @@
 	</title>
 </svelte:head>
 
-<div class="mb-3">
-	<div class="flex justify-between items-center">
-		<div class="flex md:self-center text-lg font-medium px-0.5">
-			{$i18n.t('Tools')}
-			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
-			<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{$tools.length}</span>
-		</div>
-	</div>
-</div>
-
-<div class=" flex w-full space-x-2">
+<div class=" flex w-full space-x-2 mb-2.5">
 	<div class="flex flex-1">
 		<div class=" self-center ml-1 mr-3">
 			<svg
@@ -198,12 +196,20 @@
 	</div>
 </div>
 
-<hr class=" border-gray-50 dark:border-gray-850 my-2.5" />
+<div class="mb-3.5">
+	<div class="flex justify-between items-center">
+		<div class="flex md:self-center text-base font-medium px-0.5">
+			{$i18n.t('Tools')}
+			<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
+			<span class="text-base font-medium text-gray-500 dark:text-gray-300"
+				>{filteredItems.length}</span
+			>
+		</div>
+	</div>
+</div>
 
 <div class="my-3 mb-5">
-	{#each $tools.filter((t) => query === '' || t.name
-				.toLowerCase()
-				.includes(query.toLowerCase()) || t.id.toLowerCase().includes(query.toLowerCase())) as tool}
+	{#each filteredItems as tool}
 		<div
 			class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl"
 		>

+ 15 - 14
src/lib/i18n/locales/ar-BH/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "أضافة مطالبة مخصصه",
-	"Add Docs": "إضافة المستندات",
 	"Add Files": "إضافة ملفات",
 	"Add Memory": "إضافة ذكرايات",
 	"Add message": "اضافة رسالة",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "التعليمات المتقدمة",
 	"Advanced Params": "المعلمات المتقدمة",
-	"all": "الكل",
 	"All Documents": "جميع الملفات",
 	"All Users": "جميع المستخدمين",
-	"Allow": "يسمح",
 	"Allow Chat Deletion": "يستطيع حذف المحادثات",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "اللغاء",
 	"Capabilities": "قدرات",
 	"Change Password": "تغير الباسورد",
+	"Character": "",
 	"Chat": "المحادثة",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "UI الدردشة",
@@ -120,13 +118,13 @@
 	"Click here to select": "أضغط هنا للاختيار",
 	"Click here to select a csv file.": "أضغط هنا للاختيار ملف csv",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "انقر هنا لاختيار المستندات",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "أضغط هنا",
 	"Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "استنساخ",
 	"Close": "أغلق",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "مجموعة",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "انسخ كتلة التعليمات البرمجية الأخيرة",
 	"Copy last response": "انسخ الرد الأخير",
 	"Copy Link": "أنسخ الرابط",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح",
 	"Create a model": "إنشاء نموذج",
 	"Create Account": "إنشاء حساب",
@@ -180,14 +179,12 @@
 	"Default model updated": "الإفتراضي تحديث الموديل",
 	"Default Prompt Suggestions": "الإفتراضي Prompt الاقتراحات",
 	"Default User Role": "الإفتراضي صلاحيات المستخدم",
-	"delete": "حذف",
 	"Delete": "حذف",
 	"Delete a model": "حذف الموديل",
 	"Delete All Chats": "حذف جميع الدردشات",
 	"Delete chat": "حذف المحادثه",
 	"Delete Chat": "حذف المحادثه.",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "أحذف هذا الرابط",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "مستندات",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.",
-	"Don't Allow": "لا تسمح بذلك",
 	"Don't have an account?": "ليس لديك حساب؟",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "تحميل",
 	"Download canceled": "تم اللغاء التحميل",
 	"Download Database": "تحميل قاعدة البيانات",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "أسقط أية ملفات هنا لإضافتها إلى المحادثة",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. الوحدات الزمنية الصالحة هي 's', 'm', 'h'.",
 	"Edit": "تعديل",
-	"Edit Doc": "تعديل الملف",
 	"Edit Memory": "",
 	"Edit User": "تعديل المستخدم",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "ادخل كلمة المرور",
 	"Enter Your Role": "أدخل الصلاحيات",
 	"Error": "خطأ",
+	"ERROR": "",
 	"Experimental": "تجريبي",
 	"Export": "تصدير",
 	"Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)",
 	"Export chat (.json)": "",
 	"Export Chats": "تصدير جميع الدردشات",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "تصدير وثائق الخرائط",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "نماذج التصدير",
@@ -357,7 +354,6 @@
 	"Images": "الصور",
 	"Import Chats": "استيراد الدردشات",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "استيراد خرائط المستندات",
 	"Import Functions": "",
 	"Import Models": "استيراد النماذج",
 	"Import Prompts": "مطالبات الاستيراد",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "التثبيت من عنوان URL لجيثب",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "واجهه المستخدم",
+	"Invalid file format.": "",
 	"Invalid Tag": "تاق غير صالحة",
 	"January": "يناير",
 	"join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.",
@@ -446,13 +443,13 @@
 	"More": "المزيد",
 	"Move to Top": "",
 	"Name": "الأسم",
-	"Name Tag": "أسم التاق",
 	"Name your model": "قم بتسمية النموذج الخاص بك",
 	"New Chat": "دردشة جديدة",
 	"New Password": "كلمة المرور الجديدة",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "لا توجد نتايج",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/مفتاح OpenAI.مطلوب عنوان ",
 	"or": "أو",
 	"Other": "آخر",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "إعادة تعيين تخزين المتجهات",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "البحث عن موديل",
 	"Search Chats": "البحث في الدردشات",
 	"Search Collection": "",
-	"Search Documents": "البحث المستندات",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "نماذج البحث",
@@ -648,6 +646,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "{{error}} خطأ في التعرف على الكلام",
 	"Speech-to-Text Engine": "محرك تحويل الكلام إلى نص",
+	"Stop": "",
 	"Stop Sequence": "وقف التسلسل",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -670,6 +669,7 @@
 	"Template": "نموذج",
 	"Temporary Chat": "",
 	"Text Completion": "اكتمال النص",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "محرك تحويل النص إلى كلام",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "شكرا لملاحظاتك!",
@@ -688,6 +688,7 @@
 	"Thorough explanation": "شرح شامل",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ملاحضة: قم بتحديث عدة فتحات متغيرة على التوالي عن طريق الضغط على مفتاح tab في مدخلات الدردشة بعد كل استبدال.",
 	"Title": "العنوان",
 	"Title (e.g. Tell me a fun fact)": "(e.g. Tell me a fun fact) العناون",
@@ -705,6 +706,7 @@
 	"Today": "اليوم",
 	"Toggle settings": "فتح وأغلاق الاعدادات",
 	"Toggle sidebar": "فتح وأغلاق الشريط الجانبي",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -743,7 +745,6 @@
 	"Upload Progress": "جاري التحميل",
 	"URL Mode": "رابط الموديل",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "أستخدم '#' في المحادثة لربطهامن المستندات",
 	"Use Gravatar": "Gravatar أستخدم",
 	"Use Initials": "Initials أستخدم",
 	"use_mlock (Ollama)": "use_mlock (أولاما)",

+ 15 - 14
src/lib/i18n/locales/bg-BG/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Добавяне на собствен промпт",
-	"Add Docs": "Добавяне на Документи",
 	"Add Files": "Добавяне на Файлове",
 	"Add Memory": "Добавяне на Памет",
 	"Add message": "Добавяне на съобщение",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Разширени Параметри",
 	"Advanced Params": "Разширени параметри",
-	"all": "всички",
 	"All Documents": "Всички Документи",
 	"All Users": "Всички Потребители",
-	"Allow": "Позволи",
 	"Allow Chat Deletion": "Позволи Изтриване на Чат",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Отказ",
 	"Capabilities": "Възможности",
 	"Change Password": "Промяна на Парола",
+	"Character": "",
 	"Chat": "Чат",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "UI за чат бублон",
@@ -120,13 +118,13 @@
 	"Click here to select": "Натиснете тук, за да изберете",
 	"Click here to select a csv file.": "Натиснете тук, за да изберете csv файл.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Натиснете тук, за да изберете документи.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "натиснете тук.",
 	"Click on the user role button to change a user's role.": "Натиснете върху бутона за промяна на ролята на потребителя.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Клонинг",
 	"Close": "Затвори",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Колекция",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Копиране на последен код блок",
 	"Copy last response": "Копиране на последен отговор",
 	"Copy Link": "Копиране на връзка",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Копирането в клипборда беше успешно!",
 	"Create a model": "Създаване на модел",
 	"Create Account": "Създаване на Акаунт",
@@ -180,14 +179,12 @@
 	"Default model updated": "Моделът по подразбиране е обновен",
 	"Default Prompt Suggestions": "Промпт Предложения по подразбиране",
 	"Default User Role": "Роля на потребителя по подразбиране",
-	"delete": "изтриване",
 	"Delete": "Изтриване",
 	"Delete a model": "Изтриване на модел",
 	"Delete All Chats": "Изтриване на всички чатове",
 	"Delete chat": "Изтриване на чат",
 	"Delete Chat": "Изтриване на Чат",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "Изтриване на този линк",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Документи",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.",
-	"Don't Allow": "Не Позволявай",
 	"Don't have an account?": "Нямате акаунт?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Изтегляне отменено",
 	"Download canceled": "Изтегляне отменено",
 	"Download Database": "Сваляне на база данни",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Пускане на файлове тук, за да ги добавите в чата",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр. '30с','10м'. Валидни единици са 'с', 'м', 'ч'.",
 	"Edit": "Редактиране",
-	"Edit Doc": "Редактиране на документ",
 	"Edit Memory": "",
 	"Edit User": "Редактиране на потребител",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Въведете вашата парола",
 	"Enter Your Role": "Въведете вашата роля",
 	"Error": "Грешка",
+	"ERROR": "",
 	"Experimental": "Експериментално",
 	"Export": "Износ",
 	"Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)",
 	"Export chat (.json)": "",
 	"Export Chats": "Експортване на чатове",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Експортване на документен мапинг",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Експортиране на модели",
@@ -357,7 +354,6 @@
 	"Images": "Изображения",
 	"Import Chats": "Импортване на чатове",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Импортване на документен мапинг",
 	"Import Functions": "",
 	"Import Models": "Импортиране на модели",
 	"Import Prompts": "Импортване на промптове",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Инсталиране от URL адреса на Github",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Интерфейс",
+	"Invalid file format.": "",
 	"Invalid Tag": "Невалиден тег",
 	"January": "Януари",
 	"join our Discord for help.": "свържете се с нашия Discord за помощ.",
@@ -446,13 +443,13 @@
 	"More": "Повече",
 	"Move to Top": "",
 	"Name": "Име",
-	"Name Tag": "Име Таг",
 	"Name your model": "Дайте име на вашия модел",
 	"New Chat": "Нов чат",
 	"New Password": "Нова парола",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Няма намерени резултати",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Key е задължителен.",
 	"or": "или",
 	"Other": "Other",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Ресет Vector Storage",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Търси модел",
 	"Search Chats": "Търсене на чатове",
 	"Search Collection": "",
-	"Search Documents": "Търси Документи",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Търсене на модели",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Speech recognition error: {{error}}",
 	"Speech-to-Text Engine": "Speech-to-Text Engine",
+	"Stop": "",
 	"Stop Sequence": "Stop Sequence",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "Шаблон",
 	"Temporary Chat": "",
 	"Text Completion": "Text Completion",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Text-to-Speech Engine",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Благодарим ви за вашия отзив!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Това е подробно описание.",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Съвет: Актуализирайте няколко слота за променливи последователно, като натискате клавиша Tab в чат входа след всяка подмяна.",
 	"Title": "Заглавие",
 	"Title (e.g. Tell me a fun fact)": "Заглавие (напр. Моля, кажете ми нещо забавно)",
@@ -701,6 +702,7 @@
 	"Today": "днес",
 	"Toggle settings": "Toggle settings",
 	"Toggle sidebar": "Toggle sidebar",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Прогрес на качването",
 	"URL Mode": "URL Mode",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Използвайте '#' във промпта за да заредите и изберете вашите документи.",
 	"Use Gravatar": "Използвайте Gravatar",
 	"Use Initials": "Използвайте Инициали",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/bn-BD/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "একটি কাস্টম প্রম্পট যোগ করুন",
-	"Add Docs": "ডকুমেন্ট যোগ করুন",
 	"Add Files": "ফাইল যোগ করুন",
 	"Add Memory": "মেমোরি যোগ করুন",
 	"Add message": "মেসেজ যোগ করুন",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "এডভান্সড প্যারামিটার্স",
 	"Advanced Params": "অ্যাডভান্সড প্যারাম",
-	"all": "সব",
 	"All Documents": "সব ডকুমেন্ট",
 	"All Users": "সব ইউজার",
-	"Allow": "অনুমোদন",
 	"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "বাতিল",
 	"Capabilities": "সক্ষমতা",
 	"Change Password": "পাসওয়ার্ড পরিবর্তন করুন",
+	"Character": "",
 	"Chat": "চ্যাট",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "চ্যাট বাবল UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন",
 	"Click here to select a csv file.": "একটি csv ফাইল নির্বাচন করার জন্য এখানে ক্লিক করুন",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "এখানে ক্লিক করুন",
 	"Click on the user role button to change a user's role.": "ইউজারের পদবি পরিবর্তন করার জন্য ইউজারের পদবি বাটনে ক্লিক করুন",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "ক্লোন",
 	"Close": "বন্ধ",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "সংগ্রহ",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "সর্বশেষ কোড ব্লক কপি করুন",
 	"Copy last response": "সর্বশেষ রেসপন্স কপি করুন",
 	"Copy Link": "লিংক কপি করুন",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "ক্লিপবোর্ডে কপি করা সফল হয়েছে",
 	"Create a model": "একটি মডেল তৈরি করুন",
 	"Create Account": "একাউন্ট তৈরি করুন",
@@ -180,14 +179,12 @@
 	"Default model updated": "ডিফল্ট মডেল আপডেট হয়েছে",
 	"Default Prompt Suggestions": "ডিফল্ট প্রম্পট সাজেশন",
 	"Default User Role": "ইউজারের ডিফল্ট পদবি",
-	"delete": "মুছে ফেলুন",
 	"Delete": "মুছে ফেলুন",
 	"Delete a model": "একটি মডেল মুছে ফেলুন",
 	"Delete All Chats": "সব চ্যাট মুছে ফেলুন",
 	"Delete chat": "চ্যাট মুছে ফেলুন",
 	"Delete Chat": "চ্যাট মুছে ফেলুন",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "এই লিংক মুছে ফেলুন",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "ডকুমেন্টসমূহ",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "কোন এক্সটার্নাল কানেকশন তৈরি করে না, এবং আপনার ডেটা আর লোকালি হোস্টেড সার্ভারেই নিরাপদে থাকে।",
-	"Don't Allow": "অনুমোদন দেবেন না",
 	"Don't have an account?": "একাউন্ট নেই?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "ডাউনলোড",
 	"Download canceled": "ডাউনলোড বাতিল করা হয়েছে",
 	"Download Database": "ডেটাবেজ ডাউনলোড করুন",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "আলোচনায় যুক্ত করার জন্য যে কোন ফাইল এখানে ড্রপ করুন",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "যেমন '30s','10m'. সময়ের অনুমোদিত অনুমোদিত এককগুলি হচ্ছে 's', 'm', 'h'.",
 	"Edit": "এডিট করুন",
-	"Edit Doc": "ডকুমেন্ট এডিট করুন",
 	"Edit Memory": "",
 	"Edit User": "ইউজার এডিট করুন",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "আপনার পাসওয়ার্ড লিখুন",
 	"Enter Your Role": "আপনার রোল লিখুন",
 	"Error": "ত্রুটি",
+	"ERROR": "",
 	"Experimental": "পরিক্ষামূলক",
 	"Export": "রপ্তানি",
 	"Export All Chats (All Users)": "সব চ্যাট এক্সপোর্ট করুন (সব ইউজারের)",
 	"Export chat (.json)": "",
 	"Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "রপ্তানি মডেল",
@@ -357,7 +354,6 @@
 	"Images": "ছবিসমূহ",
 	"Import Chats": "চ্যাটগুলি ইমপোর্ট করুন",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং ইমপোর্ট করুন",
 	"Import Functions": "",
 	"Import Models": "মডেল আমদানি করুন",
 	"Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Github URL থেকে ইনস্টল করুন",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "ইন্টারফেস",
+	"Invalid file format.": "",
 	"Invalid Tag": "অবৈধ ট্যাগ",
 	"January": "জানুয়ারী",
 	"join our Discord for help.": "সাহায্যের জন্য আমাদের Discord-এ যুক্ত হোন",
@@ -446,13 +443,13 @@
 	"More": "আরো",
 	"Move to Top": "",
 	"Name": "নাম",
-	"Name Tag": "নামের ট্যাগ",
 	"Name your model": "আপনার মডেলের নাম দিন",
 	"New Chat": "নতুন চ্যাট",
 	"New Password": "নতুন পাসওয়ার্ড",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "কোন ফলাফল পাওয়া যায়নি",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Key আবশ্যক",
 	"or": "অথবা",
 	"Other": "অন্যান্য",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "রির ্যাঙ্কিং মডেল \"{{reranking_model}}\" -এ সেট করা আছে",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "ভেক্টর স্টোরেজ রিসেট করুন",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "রেসপন্সগুলো স্বয়ংক্রিভাবে ক্লিপবোর্ডে কপি হবে",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "মডেল অনুসন্ধান করুন",
 	"Search Chats": "চ্যাট অনুসন্ধান করুন",
 	"Search Collection": "",
-	"Search Documents": "ডকুমেন্টসমূহ অনুসন্ধান করুন",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "অনুসন্ধান মডেল",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "স্পিচ রিকগনিশনে সমস্যা: {{error}}",
 	"Speech-to-Text Engine": "স্পিচ-টু-টেক্সট ইঞ্জিন",
+	"Stop": "",
 	"Stop Sequence": "সিকোয়েন্স থামান",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "টেম্পলেট",
 	"Temporary Chat": "",
 	"Text Completion": "লেখা সম্পন্নকরণ",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "টেক্সট-টু-স্পিচ ইঞ্জিন",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "আপনার মতামত ধন্যবাদ!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "পুঙ্খানুপুঙ্খ ব্যাখ্যা",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "পরামর্শ: একাধিক ভেরিয়েবল স্লট একের পর এক রিপ্লেস করার জন্য চ্যাট ইনপুটে কিবোর্ডের Tab বাটন ব্যবহার করুন।",
 	"Title": "শিরোনাম",
 	"Title (e.g. Tell me a fun fact)": "শিরোনাম (একটি উপস্থিতি বিবরণ জানান)",
@@ -701,6 +702,7 @@
 	"Today": "আজ",
 	"Toggle settings": "সেটিংস টোগল",
 	"Toggle sidebar": "সাইডবার টোগল",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "আপলোড হচ্ছে",
 	"URL Mode": "ইউআরএল মোড",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "আপনার ডকুমেন্টসমূহ নির্বাচন করার জন্য আপনার প্রম্পট ইনপুটে '# ব্যবহার করুন।",
 	"Use Gravatar": "Gravatar ব্যবহার করুন",
 	"Use Initials": "নামের আদ্যক্ষর ব্যবহার করুন",
 	"use_mlock (Ollama)": "use_mlock (ওলামা)",

+ 20 - 19
src/lib/i18n/locales/ca-ES/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "Afegir contingut",
 	"Add content here": "Afegir contingut aquí",
 	"Add custom prompt": "Afegir una indicació personalitzada",
-	"Add Docs": "Afegir documents",
 	"Add Files": "Afegir arxius",
 	"Add Memory": "Afegir memòria",
 	"Add message": "Afegir un missatge",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Els administradors tenen accés a totes les eines en tot moment; els usuaris necessiten eines assignades per model a l'espai de treball.",
 	"Advanced Parameters": "Paràmetres avançats",
 	"Advanced Params": "Paràmetres avançats",
-	"all": "tots",
 	"All Documents": "Tots els documents",
 	"All Users": "Tots els usuaris",
-	"Allow": "Permetre",
 	"Allow Chat Deletion": "Permetre la supressió del xat",
 	"Allow Chat Editing": "Permetre l'edició del xat",
 	"Allow non-local voices": "Permetre veus no locals",
@@ -98,6 +95,7 @@
 	"Cancel": "Cancel·lar",
 	"Capabilities": "Capacitats",
 	"Change Password": "Canviar la contrasenya",
+	"Character": "",
 	"Chat": "Xat",
 	"Chat Background Image": "Imatge de fons del xat",
 	"Chat Bubble UI": "Chat Bubble UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Clica aquí per seleccionar",
 	"Click here to select a csv file.": "Clica aquí per seleccionar un fitxer csv.",
 	"Click here to select a py file.": "Clica aquí per seleccionar un fitxer py.",
-	"Click here to select documents.": "Clica aquí per seleccionar documents.",
 	"Click here to upload a workflow.json file.": "Clica aquí per pujar un arxiu workflow.json",
 	"click here.": "clica aquí.",
 	"Click on the user role button to change a user's role.": "Clica sobre el botó de rol d'usuari per canviar el rol d'un usuari.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permís d'escriptura al porta-retalls denegat. Comprova els ajustos de navegador per donar l'accés necessari.",
 	"Clone": "Clonar",
 	"Close": "Tancar",
+	"Code execution": "",
 	"Code formatted successfully": "Codi formatat correctament",
 	"Collection": "Col·lecció",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copiar l'últim bloc de codi",
 	"Copy last response": "Copiar l'última resposta",
 	"Copy Link": "Copiar l'enllaç",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat correctament",
 	"Create a model": "Crear un model",
 	"Create Account": "Crear un compte",
@@ -180,14 +179,12 @@
 	"Default model updated": "Model per defecte actualitzat",
 	"Default Prompt Suggestions": "Suggeriments d'indicació per defecte",
 	"Default User Role": "Rol d'usuari per defecte",
-	"delete": "eliminar",
 	"Delete": "Eliminar",
 	"Delete a model": "Eliminar un model",
 	"Delete All Chats": "Eliminar tots els xats",
 	"Delete chat": "Eliminar xat",
 	"Delete Chat": "Eliminar xat",
 	"Delete chat?": "Eliminar el xat?",
-	"Delete Doc": "Eliminar document",
 	"Delete function?": "Eliminar funció?",
 	"Delete prompt?": "Eliminar indicació?",
 	"delete this link": "Eliminar aquest enllaç",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentació",
 	"Documents": "Documents",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.",
-	"Don't Allow": "No permetre",
 	"Don't have an account?": "No tens un compte?",
 	"don't install random functions from sources you don't trust.": "no instal·lis funcions aleatòries de fonts en què no confiïs.",
 	"don't install random tools from sources you don't trust.": "no instal·lis eines aleatòries de fonts en què no confiïs.",
@@ -224,10 +220,11 @@
 	"Download": "Descarregar",
 	"Download canceled": "Descàrrega cancel·lada",
 	"Download Database": "Descarregar la base de dades",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Deixa qualsevol arxiu aquí per afegir-lo a la conversa",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.",
 	"Edit": "Editar",
-	"Edit Doc": "Editar el document",
 	"Edit Memory": "Editar la memòria",
 	"Edit User": "Editar l'usuari",
 	"ElevenLabs": "ElevenLabs",
@@ -281,20 +278,20 @@
 	"Enter Your Password": "Introdueix la teva contrasenya",
 	"Enter Your Role": "Introdueix el teu rol",
 	"Error": "Error",
+	"ERROR": "",
 	"Experimental": "Experimental",
 	"Export": "Exportar",
 	"Export All Chats (All Users)": "Exportar tots els xats (Tots els usuaris)",
 	"Export chat (.json)": "Exportar el xat (.json)",
 	"Export Chats": "Exportar els xats",
 	"Export Config to JSON File": "Exportar la configuració a un arxiu JSON",
-	"Export Documents Mapping": "Exportar el mapatge de documents",
 	"Export Functions": "Exportar funcions",
 	"Export LiteLLM config.yaml": "Exportar la configuració LiteLLM config.yaml",
 	"Export Models": "Exportar els models",
 	"Export Prompts": "Exportar les indicacions",
 	"Export Tools": "Exportar les eines",
 	"External Models": "Models externs",
-	"Failed to add file.": "",
+	"Failed to add file.": "No s'ha pogut afegir l'arxiu.",
 	"Failed to create API Key.": "No s'ha pogut crear la clau API.",
 	"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
 	"Failed to update settings": "No s'han pogut actualitzar les preferències",
@@ -357,7 +354,6 @@
 	"Images": "Imatges",
 	"Import Chats": "Importar xats",
 	"Import Config from JSON File": "Importar la configuració des d'un arxiu JSON",
-	"Import Documents Mapping": "Importar el mapatge de documents",
 	"Import Functions": "Importar funcions",
 	"Import Models": "Importar models",
 	"Import Prompts": "Importar indicacions",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instal·lar des de l'URL de Github",
 	"Instant Auto-Send After Voice Transcription": "Enviament automàtic després de la transcripció de veu",
 	"Interface": "Interfície",
+	"Invalid file format.": "",
 	"Invalid Tag": "Etiqueta no vàlida",
 	"January": "Gener",
 	"join our Discord for help.": "uneix-te al nostre Discord per obtenir ajuda.",
@@ -446,13 +443,13 @@
 	"More": "Més",
 	"Move to Top": "Moure a dalt de tot",
 	"Name": "Nom",
-	"Name Tag": "Etiqueta de nom",
 	"Name your model": "Posa un nom al teu model",
 	"New Chat": "Nou xat",
 	"New Password": "Nova contrasenya",
-	"No content found": "",
+	"No content found": "No s'ha trobat contingut",
 	"No content to speak": "No hi ha contingut per parlar",
 	"No file selected": "No s'ha escollit cap fitxer",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "No s'ha trobat contingut HTML, CSS o JavaScript.",
 	"No knowledge found": "No s'ha trobat Coneixement",
 	"No results found": "No s'han trobat resultats",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Clau d'OpenAI requerides.",
 	"or": "o",
 	"Other": "Altres",
+	"OUTPUT": "",
 	"Output format": "Format de sortida",
 	"Overview": "Vista general",
 	"page": "pàgina",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Model de reavaluació establert a \"{{reranking_model}}\"",
 	"Reset": "Restableix",
 	"Reset Upload Directory": "Restableix el directori de pujades",
-	"Reset Vector Storage": "Restableix l'emmagatzematge de vectors",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copiar la resposta automàticament al porta-retalls",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Les notifications de resposta no es poden activar perquè els permisos del lloc web han estat rebutjats. Comprova les preferències del navegador per donar l'accés necessari.",
 	"Response splitting": "Divisió de la resposta",
@@ -570,7 +568,7 @@
 	"Search a model": "Cercar un model",
 	"Search Chats": "Cercar xats",
 	"Search Collection": "Cercar col·leccions",
-	"Search Documents": "Cercar documents",
+	"search for tags": "",
 	"Search Functions": "Cercar funcions",
 	"Search Knowledge": "Cercar coneixement",
 	"Search Models": "Cercar models",
@@ -591,7 +589,7 @@
 	"Seed": "Llavor",
 	"Select a base model": "Seleccionar un model base",
 	"Select a engine": "Seleccionar un motor",
-	"Select a file to view or drag and drop a file to upload": "",
+	"Select a file to view or drag and drop a file to upload": "Seleccionar un arxiu o arrossegar un arxiu a pujar",
 	"Select a function": "Seleccionar una funció",
 	"Select a model": "Seleccionar un model",
 	"Select a pipeline": "Seleccionar una Pipeline",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "Velocitat de la parla",
 	"Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}",
 	"Speech-to-Text Engine": "Motor de veu a text",
+	"Stop": "",
 	"Stop Sequence": "Atura la seqüència",
 	"Stream Chat Response": "Fer streaming de la resposta del xat",
 	"STT Model": "Model SST",
@@ -667,6 +666,7 @@
 	"Template": "Plantilla",
 	"Temporary Chat": "Xat temporal",
 	"Text Completion": "Completament de text",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Motor de text a veu",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Gràcies pel teu comentari!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explicació en detall",
 	"Tika": "Tika",
 	"Tika Server URL required.": "La URL del servidor Tika és obligatòria.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consell: Actualitza les diverses variables consecutivament prement la tecla de tabulació en l'entrada del xat després de cada reemplaçament.",
 	"Title": "Títol",
 	"Title (e.g. Tell me a fun fact)": "Títol (p. ex. Digues-me quelcom divertit)",
@@ -702,6 +703,7 @@
 	"Today": "Avui",
 	"Toggle settings": "Alterna preferències",
 	"Toggle sidebar": "Alterna la barra lateral",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantenir en l'actualització del context (num_keep)",
 	"Tool created successfully": "Eina creada correctament",
 	"Tool deleted successfully": "Eina eliminada correctament",
@@ -729,8 +731,8 @@
 	"Update and Copy Link": "Actualitzar i copiar l'enllaç",
 	"Update for the latest features and improvements.": "Actualitza per a les darreres característiques i millores.",
 	"Update password": "Actualitzar la contrasenya",
-	"Updated": "",
-	"Updated at": "Actualitzat",
+	"Updated": "Actualitzat",
+	"Updated at": "Actualitzat el",
 	"Upload": "Pujar",
 	"Upload a GGUF model": "Pujar un model GGUF",
 	"Upload directory": "Pujar directori",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progrés de càrrega",
 	"URL Mode": "Mode URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "Utilitza '#' a l'entrada de la indicació per carregar i incloure els teus coneixements.",
-	"Use '#' in the prompt input to load and select your documents.": "Utilitza '#' a l'entrada de la indicació per carregar i seleccionar els teus documents.",
 	"Use Gravatar": "Utilitzar Gravatar",
 	"Use Initials": "Utilitzar inicials",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/ceb-PH/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Pagdugang og custom prompt",
-	"Add Docs": "Pagdugang og mga dokumento",
 	"Add Files": "Idugang ang mga file",
 	"Add Memory": "",
 	"Add message": "Pagdugang og mensahe",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "advanced settings",
 	"Advanced Params": "",
-	"all": "tanan",
 	"All Documents": "",
 	"All Users": "Ang tanan nga mga tiggamit",
-	"Allow": "Sa pagtugot",
 	"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Pagkanselar",
 	"Capabilities": "",
 	"Change Password": "Usba ang password",
+	"Character": "",
 	"Chat": "Panaghisgot",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "",
@@ -120,13 +118,13 @@
 	"Click here to select": "I-klik dinhi aron makapili",
 	"Click here to select a csv file.": "",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "I-klik dinhi.",
 	"Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "",
 	"Close": "Suod nga",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Koleksyon",
 	"ComfyUI": "",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopyaha ang katapusang bloke sa code",
 	"Copy last response": "Kopyaha ang kataposang tubag",
 	"Copy Link": "",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Ang pagkopya sa clipboard malampuson!",
 	"Create a model": "",
 	"Create Account": "Paghimo og account",
@@ -180,14 +179,12 @@
 	"Default model updated": "Gi-update nga default template",
 	"Default Prompt Suggestions": "Default nga prompt nga mga sugyot",
 	"Default User Role": "Default nga Papel sa Gumagamit",
-	"delete": "DELETE",
 	"Delete": "",
 	"Delete a model": "Pagtangtang sa usa ka template",
 	"Delete All Chats": "",
 	"Delete chat": "Pagtangtang sa panaghisgot",
 	"Delete Chat": "",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Mga dokumento",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.",
-	"Don't Allow": "Dili tugotan",
 	"Don't have an account?": "Wala kay account ?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "",
 	"Download canceled": "",
 	"Download Database": "I-download ang database",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Ihulog ang bisan unsang file dinhi aron idugang kini sa panag-istoryahanay",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ",
 	"Edit": "",
-	"Edit Doc": "I-edit ang dokumento",
 	"Edit Memory": "",
 	"Edit User": "I-edit ang tiggamit",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Ibutang ang imong password",
 	"Enter Your Role": "",
 	"Error": "",
+	"ERROR": "",
 	"Experimental": "Eksperimento",
 	"Export": "",
 	"Export All Chats (All Users)": "I-export ang tanan nga mga chat (Tanan nga tiggamit)",
 	"Export chat (.json)": "",
 	"Export Chats": "I-export ang mga chat",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "I-export ang pagmapa sa dokumento",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "",
@@ -357,7 +354,6 @@
 	"Images": "Mga hulagway",
 	"Import Chats": "Import nga mga chat",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Import nga pagmapa sa dokumento",
 	"Import Functions": "",
 	"Import Models": "",
 	"Import Prompts": "Import prompt",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Interface",
+	"Invalid file format.": "",
 	"Invalid Tag": "",
 	"January": "",
 	"join our Discord for help.": "Apil sa among Discord alang sa tabang.",
@@ -446,13 +443,13 @@
 	"More": "",
 	"Move to Top": "",
 	"Name": "Ngalan",
-	"Name Tag": "Tag sa ngalan",
 	"Name your model": "",
 	"New Chat": "Bag-ong diskusyon",
 	"New Password": "Bag-ong Password",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "O",
 	"Other": "",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "I-reset ang pagtipig sa vector",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "",
 	"Search Chats": "",
 	"Search Collection": "",
-	"Search Documents": "Pangitaa ang mga dokumento",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Sayop sa pag-ila sa tingog: {{error}}",
 	"Speech-to-Text Engine": "Engine sa pag-ila sa tingog",
+	"Stop": "",
 	"Stop Sequence": "Pagkasunod-sunod sa pagsira",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "Modelo",
 	"Temporary Chat": "",
 	"Text Completion": "Pagkompleto sa teksto",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Text-to-speech nga makina",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sugyot: Pag-update sa daghang variable nga lokasyon nga sunud-sunod pinaagi sa pagpindot sa tab key sa chat entry pagkahuman sa matag puli.",
 	"Title": "Titulo",
 	"Title (e.g. Tell me a fun fact)": "",
@@ -701,6 +702,7 @@
 	"Today": "",
 	"Toggle settings": "I-toggle ang mga setting",
 	"Toggle sidebar": "I-toggle ang sidebar",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Pag-uswag sa Pag-upload",
 	"URL Mode": "URL mode",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Gamita ang '#' sa dali nga pagsulod aron makarga ug mapili ang imong mga dokumento.",
 	"Use Gravatar": "Paggamit sa Gravatar",
 	"Use Initials": "",
 	"use_mlock (Ollama)": "",

+ 15 - 14
src/lib/i18n/locales/de-DE/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Benutzerdefinierten Prompt hinzufügen",
-	"Add Docs": "Dokumente hinzufügen",
 	"Add Files": "Dateien hinzufügen",
 	"Add Memory": "Erinnerung hinzufügen",
 	"Add message": "Nachricht hinzufügen",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratoren haben jederzeit Zugriff auf alle Werkzeuge. Benutzer können im Arbeitsbereich zugewiesen.",
 	"Advanced Parameters": "Erweiterte Parameter",
 	"Advanced Params": "Erweiterte Parameter",
-	"all": "Alle",
 	"All Documents": "Alle Dokumente",
 	"All Users": "Alle Benutzer",
-	"Allow": "Erlauben",
 	"Allow Chat Deletion": "Unterhaltungen löschen erlauben",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
@@ -98,6 +95,7 @@
 	"Cancel": "Abbrechen",
 	"Capabilities": "Fähigkeiten",
 	"Change Password": "Passwort ändern",
+	"Character": "",
 	"Chat": "Gespräch",
 	"Chat Background Image": "Hintergrundbild des Unterhaltungsfensters",
 	"Chat Bubble UI": "Chat Bubble UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klicke Sie zum Auswählen hier",
 	"Click here to select a csv file.": "Klicken Sie zum Auswählen einer CSV-Datei hier.",
 	"Click here to select a py file.": "Klicken Sie zum Auswählen einer py-Datei hier.",
-	"Click here to select documents.": "Klicken Sie zum Auswählen von Dokumenten hier",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "hier klicken.",
 	"Click on the user role button to change a user's role.": "Klicken Sie auf die Benutzerrolle, um sie zu ändern.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Schreibberechtigung für die Zwischenablage verweigert. Bitte überprüfen Sie Ihre Browsereinstellungen, um den erforderlichen Zugriff zu erlauben.",
 	"Clone": "Klonen",
 	"Close": "Schließen",
+	"Code execution": "",
 	"Code formatted successfully": "Code erfolgreich formatiert",
 	"Collection": "Kollektion",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Letzten Codeblock kopieren",
 	"Copy last response": "Letzte Antwort kopieren",
 	"Copy Link": "Link kopieren",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Das Kopieren in die Zwischenablage war erfolgreich!",
 	"Create a model": "Ein Modell erstellen",
 	"Create Account": "Konto erstellen",
@@ -180,14 +179,12 @@
 	"Default model updated": "Standardmodell aktualisiert",
 	"Default Prompt Suggestions": "Prompt-Vorschläge",
 	"Default User Role": "Standardbenutzerrolle",
-	"delete": "löschen",
 	"Delete": "Löschen",
 	"Delete a model": "Ein Modell löschen",
 	"Delete All Chats": "Alle Unterhaltungen löschen",
 	"Delete chat": "Unterhaltung löschen",
 	"Delete Chat": "Unterhaltung löschen",
 	"Delete chat?": "Unterhaltung löschen?",
-	"Delete Doc": "Dokument löschen",
 	"Delete function?": "Funktion löschen?",
 	"Delete prompt?": "Prompt löschen?",
 	"delete this link": "diesen Link löschen",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentation",
 	"Documents": "Dokumente",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "stellt keine externen Verbindungen her, und Ihre Daten bleiben sicher auf Ihrem lokal gehosteten Server.",
-	"Don't Allow": "Verbieten",
 	"Don't have an account?": "Haben Sie noch kein Benutzerkonto?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Exportieren",
 	"Download canceled": "Exportierung abgebrochen",
 	"Download Database": "Datenbank exportieren",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Ziehen Sie beliebige Dateien hierher, um sie der Unterhaltung hinzuzufügen",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "z. B. '30s','10m'. Gültige Zeiteinheiten sind 's', 'm', 'h'.",
 	"Edit": "Bearbeiten",
-	"Edit Doc": "Dokument bearbeiten",
 	"Edit Memory": "Erinnerungen bearbeiten",
 	"Edit User": "Benutzer bearbeiten",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Geben Sie Ihr Passwort ein",
 	"Enter Your Role": "Geben Sie Ihre Rolle ein",
 	"Error": "Fehler",
+	"ERROR": "",
 	"Experimental": "Experimentell",
 	"Export": "Exportieren",
 	"Export All Chats (All Users)": "Alle Unterhaltungen exportieren (alle Benutzer)",
 	"Export chat (.json)": "Unterhaltung exportieren (.json)",
 	"Export Chats": "Unterhaltungen exportieren",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Dokumentenzuordnung exportieren",
 	"Export Functions": "Funktionen exportieren",
 	"Export LiteLLM config.yaml": "LiteLLM-Konfiguration exportieren (config.yaml)",
 	"Export Models": "Modelle exportieren",
@@ -357,7 +354,6 @@
 	"Images": "Bilder",
 	"Import Chats": "Unterhaltungen importieren",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Dokumentenzuordnung importieren",
 	"Import Functions": "Funktionen importieren",
 	"Import Models": "Modelle importieren",
 	"Import Prompts": "Prompts importieren",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Installiere von der Github-URL",
 	"Instant Auto-Send After Voice Transcription": "Spracherkennung direkt absenden",
 	"Interface": "Benutzeroberfläche",
+	"Invalid file format.": "",
 	"Invalid Tag": "Ungültiger Tag",
 	"January": "Januar",
 	"join our Discord for help.": "Treten Sie unserem Discord bei, um Hilfe zu erhalten.",
@@ -447,13 +444,13 @@
 	"more": "mehr",
 	"Move to Top": "",
 	"Name": "Name",
-	"Name Tag": "Namens-Tag",
 	"Name your model": "Benennen Sie Ihr Modell",
 	"New Chat": "Neue Unterhaltung",
 	"New Password": "Neues Passwort",
 	"No content found": "",
 	"No content to speak": "Kein Inhalt zum Vorlesen",
 	"No file selected": "Keine Datei ausgewählt",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Keine Ergebnisse gefunden",
@@ -496,6 +493,7 @@
 	"OpenAI URL/Key required.": "OpenAI-URL/Schlüssel erforderlich.",
 	"or": "oder",
 	"Other": "Andere",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "Seite",
@@ -548,7 +546,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking-Modell \"{{reranking_model}}\" fesgelegt",
 	"Reset": "Zurücksetzen",
 	"Reset Upload Directory": "Upload-Verzeichnis zurücksetzen",
-	"Reset Vector Storage": "Vektorspeicher zurücksetzen",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Benachrichtigungen können nicht aktiviert werden, da die Website-Berechtigungen abgelehnt wurden. Bitte besuchen Sie Ihre Browser-Einstellungen, um den erforderlichen Zugriff zu gewähren.",
 	"Response splitting": "",
@@ -571,7 +569,7 @@
 	"Search a model": "Modell suchen",
 	"Search Chats": "Unterhaltungen durchsuchen...",
 	"Search Collection": "",
-	"Search Documents": "Dokumente durchsuchen...",
+	"search for tags": "",
 	"Search Functions": "Funktionen durchsuchen...",
 	"Search Knowledge": "",
 	"Search Models": "Modelle durchsuchen...",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Spracherkennungsfehler: {{error}}",
 	"Speech-to-Text Engine": "Sprache-zu-Text-Engine",
+	"Stop": "",
 	"Stop Sequence": "Stop-Sequenz",
 	"Stream Chat Response": "",
 	"STT Model": "STT-Modell",
@@ -667,6 +666,7 @@
 	"Template": "Vorlage",
 	"Temporary Chat": "",
 	"Text Completion": "Textvervollständigung",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Text-zu-Sprache-Engine",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Danke für Ihr Feedback!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Ausführliche Erklärung",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Tika-Server-URL erforderlich.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tipp: Aktualisieren Sie mehrere Variablenfelder nacheinander, indem Sie nach jedem Ersetzen die Tabulatortaste im Eingabefeld der Unterhaltung drücken.",
 	"Title": "Titel",
 	"Title (e.g. Tell me a fun fact)": "Titel (z. B. Erzähl mir einen lustigen Fakt)",
@@ -702,6 +703,7 @@
 	"Today": "Heute",
 	"Toggle settings": "Einstellungen umschalten",
 	"Toggle sidebar": "Seitenleiste umschalten",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Beizubehaltende Tokens bei Kontextaktualisierung (num_keep)",
 	"Tool created successfully": "Werkzeug erfolgreich erstellt",
 	"Tool deleted successfully": "Werkzeug erfolgreich gelöscht",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Hochladefortschritt",
 	"URL Mode": "URL-Modus",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Verwenden Sie '#' in der Eingabeaufforderung, um Ihre Dokumente zu laden und auszuwählen.",
 	"Use Gravatar": "Gravatar verwenden",
 	"Use Initials": "Initialen verwenden",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/dg-DG/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "",
-	"Add Docs": "Add Docs",
 	"Add Files": "Add Files",
 	"Add Memory": "",
 	"Add message": "Add Prompt",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Advanced Parameters",
 	"Advanced Params": "",
-	"all": "all",
 	"All Documents": "",
 	"All Users": "All Users",
-	"Allow": "Allow",
 	"Allow Chat Deletion": "Allow Delete Chats",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Cancel",
 	"Capabilities": "",
 	"Change Password": "Change Password",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "",
@@ -120,13 +118,13 @@
 	"Click here to select": "Click to select",
 	"Click here to select a csv file.": "",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Click to select documents",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "click here. Such click.",
 	"Click on the user role button to change a user's role.": "Click user role button to change role.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "",
 	"Close": "Close",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Collection",
 	"ComfyUI": "",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copy last code block",
 	"Copy last response": "Copy last response",
 	"Copy Link": "",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Copying to clipboard was success! Very success!",
 	"Create a model": "",
 	"Create Account": "Create Account",
@@ -180,14 +179,12 @@
 	"Default model updated": "Default model much updated",
 	"Default Prompt Suggestions": "Default Prompt Suggestions",
 	"Default User Role": "Default User Role",
-	"delete": "delete",
 	"Delete": "",
 	"Delete a model": "Delete a model",
 	"Delete All Chats": "",
 	"Delete chat": "Delete chat",
 	"Delete Chat": "",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Documents",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.",
-	"Don't Allow": "Don't Allow",
 	"Don't have an account?": "No account? Much sad.",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "",
 	"Download canceled": "",
 	"Download Database": "Download Database",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Drop files here to add to conversation",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. Much time units are 's', 'm', 'h'.",
 	"Edit": "",
-	"Edit Doc": "Edit Doge",
 	"Edit Memory": "",
 	"Edit User": "Edit Wowser",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Enter Your Barkword",
 	"Enter Your Role": "",
 	"Error": "",
+	"ERROR": "",
 	"Experimental": "Much Experiment",
 	"Export": "",
 	"Export All Chats (All Users)": "Export All Chats (All Doggos)",
 	"Export chat (.json)": "",
 	"Export Chats": "Export Barks",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Export Mappings of Dogos",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "",
@@ -357,7 +354,6 @@
 	"Images": "Wowmages",
 	"Import Chats": "Import Barks",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Import Doge Mapping",
 	"Import Functions": "",
 	"Import Models": "",
 	"Import Prompts": "Import Promptos",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Interface",
+	"Invalid file format.": "",
 	"Invalid Tag": "",
 	"January": "",
 	"join our Discord for help.": "join our Discord for help.",
@@ -446,13 +443,13 @@
 	"More": "",
 	"Move to Top": "",
 	"Name": "Name",
-	"Name Tag": "Name Tag",
 	"Name your model": "",
 	"New Chat": "New Bark",
 	"New Password": "New Barkword",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "or",
 	"Other": "",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Reset Vector Storage",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copy Bark Auto Bark",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "",
 	"Search Chats": "",
 	"Search Collection": "",
-	"Search Documents": "Search Documents much find",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "",
@@ -646,6 +644,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Speech recognition error: {{error}} so error",
 	"Speech-to-Text Engine": "Speech-to-Text Engine much speak",
+	"Stop": "",
 	"Stop Sequence": "Stop Sequence much stop",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -668,6 +667,7 @@
 	"Template": "Template much template",
 	"Temporary Chat": "",
 	"Text Completion": "Text Completion much complete",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Text-to-Speech Engine much speak",
 	"Tfs Z": "Tfs Z much Z",
 	"Thanks for your feedback!": "",
@@ -686,6 +686,7 @@
 	"Thorough explanation": "",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement. Much tip!",
 	"Title": "Title very title",
 	"Title (e.g. Tell me a fun fact)": "",
@@ -703,6 +704,7 @@
 	"Today": "",
 	"Toggle settings": "Toggle settings much toggle",
 	"Toggle sidebar": "Toggle sidebar much toggle",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -741,7 +743,6 @@
 	"Upload Progress": "Upload Progress much progress",
 	"URL Mode": "URL Mode much mode",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Use '#' in the prompt input to load and select your documents. Much use.",
 	"Use Gravatar": "Use Gravatar much avatar",
 	"Use Initials": "Use Initials much initial",
 	"use_mlock (Ollama)": "",

+ 15 - 14
src/lib/i18n/locales/en-GB/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "",
-	"Add Docs": "",
 	"Add Files": "",
 	"Add Memory": "",
 	"Add message": "",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "",
 	"Advanced Params": "",
-	"all": "",
 	"All Documents": "",
 	"All Users": "",
-	"Allow": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "",
 	"Capabilities": "",
 	"Change Password": "",
+	"Character": "",
 	"Chat": "",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "",
@@ -120,13 +118,13 @@
 	"Click here to select": "",
 	"Click here to select a csv file.": "",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "",
 	"Click on the user role button to change a user's role.": "",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "",
 	"Close": "",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "",
 	"ComfyUI": "",
@@ -155,6 +153,7 @@
 	"Copy last code block": "",
 	"Copy last response": "",
 	"Copy Link": "",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "",
 	"Create a model": "",
 	"Create Account": "",
@@ -180,14 +179,12 @@
 	"Default model updated": "",
 	"Default Prompt Suggestions": "",
 	"Default User Role": "",
-	"delete": "",
 	"Delete": "",
 	"Delete a model": "",
 	"Delete All Chats": "",
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
-	"Don't Allow": "",
 	"Don't have an account?": "",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "",
 	"Download canceled": "",
 	"Download Database": "",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
 	"Edit": "",
-	"Edit Doc": "",
 	"Edit Memory": "",
 	"Edit User": "",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "",
 	"Enter Your Role": "",
 	"Error": "",
+	"ERROR": "",
 	"Experimental": "",
 	"Export": "",
 	"Export All Chats (All Users)": "",
 	"Export chat (.json)": "",
 	"Export Chats": "",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "",
@@ -357,7 +354,6 @@
 	"Images": "",
 	"Import Chats": "",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "",
 	"Import Functions": "",
 	"Import Models": "",
 	"Import Prompts": "",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "",
+	"Invalid file format.": "",
 	"Invalid Tag": "",
 	"January": "",
 	"join our Discord for help.": "",
@@ -446,13 +443,13 @@
 	"More": "",
 	"Move to Top": "",
 	"Name": "",
-	"Name Tag": "",
 	"Name your model": "",
 	"New Chat": "",
 	"New Password": "",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "",
 	"Search Chats": "",
 	"Search Collection": "",
-	"Search Documents": "",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
+	"Stop": "",
 	"Stop Sequence": "",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "",
 	"Temporary Chat": "",
 	"Text Completion": "",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "",
 	"Tfs Z": "",
 	"Thanks for your feedback!": "",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "",
 	"Title": "",
 	"Title (e.g. Tell me a fun fact)": "",
@@ -701,6 +702,7 @@
 	"Today": "",
 	"Toggle settings": "",
 	"Toggle sidebar": "",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "",
 	"URL Mode": "",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "",
 	"Use Gravatar": "",
 	"Use Initials": "",
 	"use_mlock (Ollama)": "",

+ 15 - 14
src/lib/i18n/locales/en-US/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "",
-	"Add Docs": "",
 	"Add Files": "",
 	"Add Memory": "",
 	"Add message": "",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "",
 	"Advanced Params": "",
-	"all": "",
 	"All Documents": "",
 	"All Users": "",
-	"Allow": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "",
 	"Capabilities": "",
 	"Change Password": "",
+	"Character": "",
 	"Chat": "",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "",
@@ -120,13 +118,13 @@
 	"Click here to select": "",
 	"Click here to select a csv file.": "",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "",
 	"Click on the user role button to change a user's role.": "",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "",
 	"Close": "",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "",
 	"ComfyUI": "",
@@ -155,6 +153,7 @@
 	"Copy last code block": "",
 	"Copy last response": "",
 	"Copy Link": "",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "",
 	"Create a model": "",
 	"Create Account": "",
@@ -180,14 +179,12 @@
 	"Default model updated": "",
 	"Default Prompt Suggestions": "",
 	"Default User Role": "",
-	"delete": "",
 	"Delete": "",
 	"Delete a model": "",
 	"Delete All Chats": "",
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
-	"Don't Allow": "",
 	"Don't have an account?": "",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "",
 	"Download canceled": "",
 	"Download Database": "",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
 	"Edit": "",
-	"Edit Doc": "",
 	"Edit Memory": "",
 	"Edit User": "",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "",
 	"Enter Your Role": "",
 	"Error": "",
+	"ERROR": "",
 	"Experimental": "",
 	"Export": "",
 	"Export All Chats (All Users)": "",
 	"Export chat (.json)": "",
 	"Export Chats": "",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "",
@@ -357,7 +354,6 @@
 	"Images": "",
 	"Import Chats": "",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "",
 	"Import Functions": "",
 	"Import Models": "",
 	"Import Prompts": "",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "",
+	"Invalid file format.": "",
 	"Invalid Tag": "",
 	"January": "",
 	"join our Discord for help.": "",
@@ -446,13 +443,13 @@
 	"More": "",
 	"Move to Top": "",
 	"Name": "",
-	"Name Tag": "",
 	"Name your model": "",
 	"New Chat": "",
 	"New Password": "",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "",
 	"Search Chats": "",
 	"Search Collection": "",
-	"Search Documents": "",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
+	"Stop": "",
 	"Stop Sequence": "",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "",
 	"Temporary Chat": "",
 	"Text Completion": "",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "",
 	"Tfs Z": "",
 	"Thanks for your feedback!": "",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "",
 	"Title": "",
 	"Title (e.g. Tell me a fun fact)": "",
@@ -701,6 +702,7 @@
 	"Today": "",
 	"Toggle settings": "",
 	"Toggle sidebar": "",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "",
 	"URL Mode": "",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "",
 	"Use Gravatar": "",
 	"Use Initials": "",
 	"use_mlock (Ollama)": "",

+ 18 - 17
src/lib/i18n/locales/es-ES/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "Agregar Contenido",
 	"Add content here": "Agrege contenido aquí",
 	"Add custom prompt": "Agregar un prompt personalizado",
-	"Add Docs": "Agregar Documentos",
 	"Add Files": "Agregar Archivos",
 	"Add Memory": "Agregar Memoria",
 	"Add message": "Agregar mensaje",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Admins tienen acceso a todas las herramientas en todo momento; los usuarios necesitan herramientas asignadas por modelo en el espacio de trabajo.",
 	"Advanced Parameters": "Parámetros Avanzados",
 	"Advanced Params": "Parámetros avanzados",
-	"all": "todo",
 	"All Documents": "Todos los Documentos",
 	"All Users": "Todos los Usuarios",
-	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Borrar Chats",
 	"Allow Chat Editing": "Permitir Editar Chat",
 	"Allow non-local voices": "Permitir voces no locales",
@@ -98,6 +95,7 @@
 	"Cancel": "Cancelar",
 	"Capabilities": "Capacidades",
 	"Change Password": "Cambia la Contraseña",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "Imágen de fondo del Chat",
 	"Chat Bubble UI": "Burbuja de chat UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Presiona aquí para seleccionar",
 	"Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.",
 	"Click here to select a py file.": "Presiona aquí para seleccionar un archivo py.",
-	"Click here to select documents.": "Presiona aquí para seleccionar documentos",
 	"Click here to upload a workflow.json file.": "Presiona aquí para subir un archivo workflow.json.",
 	"click here.": "Presiona aquí.",
 	"Click on the user role button to change a user's role.": "Presiona en el botón de roles del usuario para cambiar su rol.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisos de escritura del portapapeles denegados. Por favor, comprueba las configuraciones de tu navegador para otorgar el acceso necesario.",
 	"Clone": "Clonar",
 	"Close": "Cerrar",
+	"Code execution": "",
 	"Code formatted successfully": "Se ha formateado correctamente el código.",
 	"Collection": "Colección",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copia el último bloque de código",
 	"Copy last response": "Copia la última respuesta",
 	"Copy Link": "Copiar enlace",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "¡La copia al portapapeles se ha realizado correctamente!",
 	"Create a model": "Crear un modelo",
 	"Create Account": "Crear una cuenta",
@@ -180,14 +179,12 @@
 	"Default model updated": "El modelo por defecto ha sido actualizado",
 	"Default Prompt Suggestions": "Sugerencias de mensajes por defecto",
 	"Default User Role": "Rol por defecto para usuarios",
-	"delete": "borrar",
 	"Delete": "Borrar",
 	"Delete a model": "Borra un modelo",
 	"Delete All Chats": "Eliminar todos los chats",
 	"Delete chat": "Borrar chat",
 	"Delete Chat": "Borrar Chat",
 	"Delete chat?": "Borrar el chat?",
-	"Delete Doc": "Borrar Doc",
 	"Delete function?": "Borrar la función?",
 	"Delete prompt?": "Borrar el prompt?",
 	"delete this link": "Borrar este enlace",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentación",
 	"Documents": "Documentos",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "no realiza ninguna conexión externa y sus datos permanecen seguros en su servidor alojado localmente.",
-	"Don't Allow": "No Permitir",
 	"Don't have an account?": "¿No tienes una cuenta?",
 	"don't install random functions from sources you don't trust.": "no instale funciones aleatorias desde fuentes que no confíe.",
 	"don't install random tools from sources you don't trust.": "no instale herramientas aleatorias desde fuentes que no confíe.",
@@ -224,10 +220,11 @@
 	"Download": "Descargar",
 	"Download canceled": "Descarga cancelada",
 	"Download Database": "Descarga la Base de Datos",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Suelta cualquier archivo aquí para agregarlo a la conversación",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.",
 	"Edit": "Editar",
-	"Edit Doc": "Editar Documento",
 	"Edit Memory": "Editar Memoria",
 	"Edit User": "Editar Usuario",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Ingrese su contraseña",
 	"Enter Your Role": "Ingrese su rol",
 	"Error": "Error",
+	"ERROR": "",
 	"Experimental": "Experimental",
 	"Export": "Exportar",
 	"Export All Chats (All Users)": "Exportar todos los chats (Todos los usuarios)",
 	"Export chat (.json)": "Exportar chat (.json)",
 	"Export Chats": "Exportar Chats",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exportar el mapeo de documentos",
 	"Export Functions": "Exportar Funciones",
 	"Export LiteLLM config.yaml": "Exportar LiteLLM config.yaml",
 	"Export Models": "Exportar Modelos",
@@ -295,7 +292,7 @@
 	"Export Tools": "Exportar Herramientas",
 	"External Models": "Modelos Externos",
 	"Failed to add file.": "",
-    "Failed to create API Key.": "No se pudo crear la clave API.",
+	"Failed to create API Key.": "No se pudo crear la clave API.",
 	"Failed to read clipboard contents": "No se pudo leer el contenido del portapapeles",
 	"Failed to update settings": "Falla al actualizar los ajustes",
 	"Failed to upload file.": "Falla al subir el archivo.",
@@ -357,7 +354,6 @@
 	"Images": "Imágenes",
 	"Import Chats": "Importar chats",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importar Mapeo de Documentos",
 	"Import Functions": "Importar Funciones",
 	"Import Models": "Importar modelos",
 	"Import Prompts": "Importar Prompts",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instalar desde la URL de Github",
 	"Instant Auto-Send After Voice Transcription": "Auto-Enviar Después de la Transcripción de Voz",
 	"Interface": "Interfaz",
+	"Invalid file format.": "",
 	"Invalid Tag": "Etiqueta Inválida",
 	"January": "Enero",
 	"join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.",
@@ -446,13 +443,13 @@
 	"More": "Más",
 	"Move to Top": "Mueve al tope",
 	"Name": "Nombre",
-	"Name Tag": "Nombre de etiqueta",
 	"Name your model": "Asigne un nombre a su modelo",
 	"New Chat": "Nuevo Chat",
 	"New Password": "Nueva Contraseña",
 	"No content found": "",
-    "No content to speak": "No hay contenido para hablar",
+	"No content to speak": "No hay contenido para hablar",
 	"No file selected": "Ningún archivo fué seleccionado",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "No se encontró contenido HTML, CSS, o JavaScript.",
 	"No knowledge found": "No se encontró ningún conocimiento",
 	"No results found": "No se han encontrado resultados",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Clave de OpenAI es requerida.",
 	"or": "o",
 	"Other": "Otro",
+	"OUTPUT": "",
 	"Output format": "Formato de salida",
 	"Overview": "Vista general",
 	"page": "página",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de reranking establecido en \"{{reranking_model}}\"",
 	"Reset": "Reiniciar",
 	"Reset Upload Directory": "Reiniciar Directorio de carga",
-	"Reset Vector Storage": "Restablecer almacenamiento vectorial",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Las notificaciones de respuesta no pueden activarse debido a que los permisos del sitio web han sido denegados. Por favor, visite las configuraciones de su navegador para otorgar el acceso necesario.",
 	"Response splitting": "División de respuestas",
@@ -570,7 +568,7 @@
 	"Search a model": "Buscar un modelo",
 	"Search Chats": "Chats de búsqueda",
 	"Search Collection": "Buscar Colección",
-	"Search Documents": "Buscar Documentos",
+	"search for tags": "",
 	"Search Functions": "Buscar Funciones",
 	"Search Knowledge": "Buscar Conocimiento",
 	"Search Models": "Buscar Modelos",
@@ -592,7 +590,7 @@
 	"Select a base model": "Seleccionar un modelo base",
 	"Select a engine": "Busca un motor",
 	"Select a file to view or drag and drop a file to upload": "",
-    "Select a function": "Busca una función",
+	"Select a function": "Busca una función",
 	"Select a model": "Selecciona un modelo",
 	"Select a pipeline": "Selección de una Pipeline",
 	"Select a pipeline url": "Selección de una dirección URL de Pipeline",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "Velocidad de reproducción de voz",
 	"Speech recognition error: {{error}}": "Error de reconocimiento de voz: {{error}}",
 	"Speech-to-Text Engine": "Motor de voz a texto",
+	"Stop": "",
 	"Stop Sequence": "Detener secuencia",
 	"Stream Chat Response": "",
 	"STT Model": "Modelo STT",
@@ -667,6 +666,7 @@
 	"Template": "Plantilla",
 	"Temporary Chat": "Chat temporal",
 	"Text Completion": "Finalización de texto",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Motor de texto a voz",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "¡Gracias por tu retroalimentación!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explicación exhaustiva",
 	"Tika": "Tika",
 	"Tika Server URL required.": "URL del servidor de Tika",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consejo: Actualice múltiples variables consecutivamente presionando la tecla tab en la entrada del chat después de cada reemplazo.",
 	"Title": "Título",
 	"Title (e.g. Tell me a fun fact)": "Título (por ejemplo, cuéntame una curiosidad)",
@@ -702,6 +703,7 @@
 	"Today": "Hoy",
 	"Toggle settings": "Alternar configuración",
 	"Toggle sidebar": "Alternar barra lateral",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantener en el contexto de actualización (num_keep)",
 	"Tool created successfully": "Herramienta creada con éxito",
 	"Tool deleted successfully": "Herramienta eliminada con éxito",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progreso de carga",
 	"URL Mode": "Modo de URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "Utilize '#' en el prompt para cargar y incluir su conocimiento.",
-	"Use '#' in the prompt input to load and select your documents.": "Utilice '#' en el prompt para cargar y seleccionar sus documentos.",
 	"Use Gravatar": "Usar Gravatar",
 	"Use Initials": "Usar Iniciales",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/fa-IR/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "اضافه کردن یک درخواست سفارشی",
-	"Add Docs": "اضافه کردن اسناد",
 	"Add Files": "اضافه کردن فایل\u200cها",
 	"Add Memory": "اضافه کردن یادگیری",
 	"Add message": "اضافه کردن پیغام",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "پارامترهای پیشرفته",
 	"Advanced Params": "پارام های پیشرفته",
-	"all": "همه",
 	"All Documents": "تمام سند ها",
 	"All Users": "همه کاربران",
-	"Allow": "اجازه دادن",
 	"Allow Chat Deletion": "اجازه حذف گپ",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "لغو",
 	"Capabilities": "قابلیت",
 	"Change Password": "تغییر رمز عبور",
+	"Character": "",
 	"Chat": "گپ",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "UI\u200cی\u200c گفتگو\u200c",
@@ -120,13 +118,13 @@
 	"Click here to select": "برای انتخاب اینجا کلیک کنید",
 	"Click here to select a csv file.": "برای انتخاب یک فایل csv اینجا را کلیک کنید.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "اینجا کلیک کنید.",
 	"Click on the user role button to change a user's role.": "برای تغییر نقش کاربر، روی دکمه نقش کاربر کلیک کنید.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "کلون",
 	"Close": "بسته",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "مجموعه",
 	"ComfyUI": "کومیوآی",
@@ -155,6 +153,7 @@
 	"Copy last code block": "کپی آخرین بلوک کد",
 	"Copy last response": "کپی آخرین پاسخ",
 	"Copy Link": "کپی لینک",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "کپی کردن در کلیپ بورد با موفقیت انجام شد!",
 	"Create a model": "ایجاد یک مدل",
 	"Create Account": "ساخت حساب کاربری",
@@ -180,14 +179,12 @@
 	"Default model updated": "مدل پیشفرض به\u200cروزرسانی شد",
 	"Default Prompt Suggestions": "پیشنهادات پرامپت پیش فرض",
 	"Default User Role": "نقش کاربر پیش فرض",
-	"delete": "حذف",
 	"Delete": "حذف",
 	"Delete a model": "حذف یک مدل",
 	"Delete All Chats": "حذف همه گفتگوها",
 	"Delete chat": "حذف گپ",
 	"Delete Chat": "حذف گپ",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "حذف این لینک",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "اسناد",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "هیچ اتصال خارجی ایجاد نمی کند و داده های شما به طور ایمن در سرور میزبان محلی شما باقی می ماند.",
-	"Don't Allow": "اجازه نده",
 	"Don't have an account?": "حساب کاربری ندارید؟",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "دانلود کن",
 	"Download canceled": "دانلود لغو شد",
 	"Download Database": "دانلود پایگاه داده",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "هر فایلی را اینجا رها کنید تا به مکالمه اضافه شود",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "به طور مثال '30s','10m'. واحد\u200cهای زمانی معتبر 's', 'm', 'h' هستند.",
 	"Edit": "ویرایش",
-	"Edit Doc": "ویرایش سند",
 	"Edit Memory": "",
 	"Edit User": "ویرایش کاربر",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "رمز عبور خود را وارد کنید",
 	"Enter Your Role": "نقش خود را وارد کنید",
 	"Error": "خطا",
+	"ERROR": "",
 	"Experimental": "آزمایشی",
 	"Export": "صادرات",
 	"Export All Chats (All Users)": "اکسپورت از همه گپ\u200cها(همه کاربران)",
 	"Export chat (.json)": "",
 	"Export Chats": "اکسپورت از گپ\u200cها",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "اکسپورت از نگاشت اسناد",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "مدل های صادرات",
@@ -357,7 +354,6 @@
 	"Images": "تصاویر",
 	"Import Chats": "ایمپورت گپ\u200cها",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "ایمپورت نگاشت اسناد",
 	"Import Functions": "",
 	"Import Models": "واردات مدلها",
 	"Import Prompts": "ایمپورت پرامپت\u200cها",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "نصب از ادرس Github",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "رابط",
+	"Invalid file format.": "",
 	"Invalid Tag": "تگ نامعتبر",
 	"January": "ژانویه",
 	"join our Discord for help.": "برای کمک به دیسکورد ما بپیوندید.",
@@ -446,13 +443,13 @@
 	"More": "بیشتر",
 	"Move to Top": "",
 	"Name": "نام",
-	"Name Tag": "نام تگ",
 	"Name your model": "نام مدل خود را",
 	"New Chat": "گپ جدید",
 	"New Password": "رمز عبور جدید",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "نتیجه\u200cای یافت نشد",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Key OpenAI مورد نیاز است.",
 	"or": "روشن",
 	"Other": "دیگر",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "مدل ری\u200cشناسی مجدد به \"{{reranking_model}}\" تنظیم شده است",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "بازنشانی ذخیره سازی برداری",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "کپی خودکار پاسخ به کلیپ بورد",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "جستجوی مدل",
 	"Search Chats": "جستجو گپ ها",
 	"Search Collection": "",
-	"Search Documents": "جستجوی اسناد",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "مدل های جستجو",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "خطای تشخیص گفتار: {{error}}",
 	"Speech-to-Text Engine": "موتور گفتار به متن",
+	"Stop": "",
 	"Stop Sequence": "توالی توقف",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "الگو",
 	"Temporary Chat": "",
 	"Text Completion": "تکمیل متن",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "موتور تبدیل متن به گفتار",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "با تشکر از بازخورد شما!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "توضیح کامل",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "با فشردن کلید Tab در ورودی چت پس از هر بار تعویض، چندین متغیر را به صورت متوالی به روزرسانی کنید.",
 	"Title": "عنوان",
 	"Title (e.g. Tell me a fun fact)": "عنوان (برای مثال: به من بگوید چیزی که دوست دارید)",
@@ -701,6 +702,7 @@
 	"Today": "امروز",
 	"Toggle settings": "نمایش/عدم نمایش تنظیمات",
 	"Toggle sidebar": "نمایش/عدم نمایش نوار کناری",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "پیشرفت آپلود",
 	"URL Mode": "حالت URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "در پرامپت از '#' برای لود و انتخاب اسناد خود استفاده کنید.",
 	"Use Gravatar": "استفاده از گراواتار",
 	"Use Initials": "استفاده از آبزوده",
 	"use_mlock (Ollama)": "use_mlock (اولاما)",

+ 15 - 14
src/lib/i18n/locales/fi-FI/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Lisää mukautettu kehote",
-	"Add Docs": "Lisää asiakirjoja",
 	"Add Files": "Lisää tiedostoja",
 	"Add Memory": "Lisää muistia",
 	"Add message": "Lisää viesti",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Edistyneet parametrit",
 	"Advanced Params": "Edistyneet parametrit",
-	"all": "kaikki",
 	"All Documents": "Kaikki asiakirjat",
 	"All Users": "Kaikki käyttäjät",
-	"Allow": "Salli",
 	"Allow Chat Deletion": "Salli keskustelujen poisto",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Peruuta",
 	"Capabilities": "Ominaisuuksia",
 	"Change Password": "Vaihda salasana",
+	"Character": "",
 	"Chat": "Keskustelu",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Keskustelu-pallojen käyttöliittymä",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klikkaa tästä valitaksesi",
 	"Click here to select a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "klikkaa tästä.",
 	"Click on the user role button to change a user's role.": "Klikkaa käyttäjän roolipainiketta vaihtaaksesi käyttäjän roolia.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Klooni",
 	"Close": "Sulje",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Kokoelma",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopioi viimeisin koodilohko",
 	"Copy last response": "Kopioi viimeisin vastaus",
 	"Copy Link": "Kopioi linkki",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Kopioiminen leikepöydälle onnistui!",
 	"Create a model": "Mallin luominen",
 	"Create Account": "Luo tili",
@@ -180,14 +179,12 @@
 	"Default model updated": "Oletusmalli päivitetty",
 	"Default Prompt Suggestions": "Oletuskehotteiden ehdotukset",
 	"Default User Role": "Oletuskäyttäjärooli",
-	"delete": "poista",
 	"Delete": "Poista",
 	"Delete a model": "Poista malli",
 	"Delete All Chats": "Poista kaikki keskustelut",
 	"Delete chat": "Poista keskustelu",
 	"Delete Chat": "Poista keskustelu",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "poista tämä linkki",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Asiakirjat",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ei tee ulkoisia yhteyksiä, ja tietosi pysyvät turvallisesti paikallisesti isännöidyllä palvelimellasi.",
-	"Don't Allow": "Älä salli",
 	"Don't have an account?": "Eikö sinulla ole tiliä?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Lataa",
 	"Download canceled": "Lataus peruutettu",
 	"Download Database": "Lataa tietokanta",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Pudota tiedostoja tähän lisätäksesi ne keskusteluun",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "esim. '30s', '10m'. Kelpoiset aikayksiköt ovat 's', 'm', 'h'.",
 	"Edit": "Muokkaa",
-	"Edit Doc": "Muokkaa asiakirjaa",
 	"Edit Memory": "",
 	"Edit User": "Muokkaa käyttäjää",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Syötä salasanasi",
 	"Enter Your Role": "Syötä roolisi",
 	"Error": "Virhe",
+	"ERROR": "",
 	"Experimental": "Kokeellinen",
 	"Export": "Vienti",
 	"Export All Chats (All Users)": "Vie kaikki keskustelut (kaikki käyttäjät)",
 	"Export chat (.json)": "",
 	"Export Chats": "Vie keskustelut",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Vie asiakirjakartoitus",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Vie malleja",
@@ -357,7 +354,6 @@
 	"Images": "Kuvat",
 	"Import Chats": "Tuo keskustelut",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Tuo asiakirjakartoitus",
 	"Import Functions": "",
 	"Import Models": "Mallien tuominen",
 	"Import Prompts": "Tuo kehotteita",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Asenna Githubin URL-osoitteesta",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Käyttöliittymä",
+	"Invalid file format.": "",
 	"Invalid Tag": "Virheellinen tagi",
 	"January": "tammikuu",
 	"join our Discord for help.": "liity Discordiimme saadaksesi apua.",
@@ -446,13 +443,13 @@
 	"More": "Lisää",
 	"Move to Top": "",
 	"Name": "Nimi",
-	"Name Tag": "Nimitagi",
 	"Name your model": "Mallin nimeäminen",
 	"New Chat": "Uusi keskustelu",
 	"New Password": "Uusi salasana",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Ei tuloksia",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/ -avain vaaditaan.",
 	"or": "tai",
 	"Other": "Muu",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "\"{{reranking_model}}\" valittu uudelleenpisteytysmalliksi",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Tyhjennä vektorivarasto",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Vastauksen automaattikopiointi leikepöydälle",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Hae mallia",
 	"Search Chats": "Etsi chatteja",
 	"Search Collection": "",
-	"Search Documents": "Hae asiakirjoja",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Hae malleja",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Puheentunnistusvirhe: {{error}}",
 	"Speech-to-Text Engine": "Puheentunnistusmoottori",
+	"Stop": "",
 	"Stop Sequence": "Lopetussekvenssi",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "Malline",
 	"Temporary Chat": "",
 	"Text Completion": "Tekstin täydennys",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Puhemoottori",
 	"Tfs Z": "TFS Z",
 	"Thanks for your feedback!": "Kiitos palautteestasi!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Perusteellinen selitys",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Vinkki: Päivitä useita muuttujapaikkoja peräkkäin painamalla tabulaattoria keskustelusyötteessä jokaisen korvauksen jälkeen.",
 	"Title": "Otsikko",
 	"Title (e.g. Tell me a fun fact)": "Otsikko (esim. Kerro hauska fakta)",
@@ -701,6 +702,7 @@
 	"Today": "Tänään",
 	"Toggle settings": "Kytke asetukset",
 	"Toggle sidebar": "Kytke sivupalkki",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Latauksen eteneminen",
 	"URL Mode": "URL-tila",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Käytä '#' syötteessä ladataksesi ja valitaksesi asiakirjoja.",
 	"Use Gravatar": "Käytä Gravataria",
 	"Use Initials": "Käytä alkukirjaimia",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/fr-CA/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Ajouter une prompt personnalisée",
-	"Add Docs": "Ajouter de la documentation",
 	"Add Files": "Ajouter des fichiers",
 	"Add Memory": "Ajouter de la mémoire",
 	"Add message": "Ajouter un message",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Les administrateurs ont accès à tous les outils en tout temps ; les utilisateurs ont besoin d'outils affectés par modèle dans l'espace de travail.",
 	"Advanced Parameters": "Paramètres avancés",
 	"Advanced Params": "Paramètres avancés",
-	"all": "toutes",
 	"All Documents": "Tous les documents",
 	"All Users": "Tous les Utilisateurs",
-	"Allow": "Autoriser",
 	"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Autoriser les voix non locales",
@@ -98,6 +95,7 @@
 	"Cancel": "Annuler",
 	"Capabilities": "Capacités",
 	"Change Password": "Changer le mot de passe",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "Image d'arrière-plan de la fenêtre de chat",
 	"Chat Bubble UI": "Bulles de discussion",
@@ -120,13 +118,13 @@
 	"Click here to select": "Cliquez ici pour sélectionner",
 	"Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier CSV.",
 	"Click here to select a py file.": "Cliquez ici pour sélectionner un fichier .py.",
-	"Click here to select documents.": "Cliquez ici pour sélectionner les documents.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "cliquez ici.",
 	"Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour modifier le rôle d'un utilisateur.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "L'autorisation d'écriture du presse-papier a été refusée. Veuillez vérifier les paramètres de votre navigateur pour accorder l'accès nécessaire.",
 	"Clone": "Copie conforme",
 	"Close": "Fermer",
+	"Code execution": "",
 	"Code formatted successfully": "Le code a été formaté avec succès",
 	"Collection": "Collection",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copier le dernier bloc de code",
 	"Copy last response": "Copier la dernière réponse",
 	"Copy Link": "Copier le lien",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !",
 	"Create a model": "Créer un modèle",
 	"Create Account": "Créer un compte",
@@ -180,14 +179,12 @@
 	"Default model updated": "Modèle par défaut mis à jour",
 	"Default Prompt Suggestions": "Suggestions de prompts par défaut",
 	"Default User Role": "Rôle utilisateur par défaut",
-	"delete": "supprimer",
 	"Delete": "Supprimer",
 	"Delete a model": "Supprimer un modèle",
 	"Delete All Chats": "Supprimer toutes les conversations",
 	"Delete chat": "Supprimer la conversation",
 	"Delete Chat": "Supprimer la Conversation",
 	"Delete chat?": "Supprimer la conversation ?",
-	"Delete Doc": "",
 	"Delete function?": "Supprimer la fonction ?",
 	"Delete prompt?": "Supprimer la prompt ?",
 	"delete this link": "supprimer ce lien",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentation",
 	"Documents": "Documents",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
-	"Don't Allow": "Ne pas autoriser",
 	"Don't have an account?": "Vous n'avez pas de compte ?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Télécharger",
 	"Download canceled": "Téléchargement annulé",
 	"Download Database": "Télécharger la base de données",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Déposez des fichiers ici pour les ajouter à la conversation",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "par ex. '30s', '10 min'. Les unités de temps valides sont 's', 'm', 'h'.",
 	"Edit": "Modifier",
-	"Edit Doc": "Modifier le document",
 	"Edit Memory": "Modifier la mémoire",
 	"Edit User": "Modifier l'utilisateur",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Entrez votre mot de passe",
 	"Enter Your Role": "Entrez votre rôle",
 	"Error": "Erreur",
+	"ERROR": "",
 	"Experimental": "Expérimental",
 	"Export": "Exportation",
 	"Export All Chats (All Users)": "Exporter toutes les conversations (tous les utilisateurs)",
 	"Export chat (.json)": "Exporter la discussion (.json)",
 	"Export Chats": "Exporter les conversations",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exportez la correspondance des documents",
 	"Export Functions": "Exportez les Fonctions",
 	"Export LiteLLM config.yaml": "Exportez le fichier LiteLLM config.yaml",
 	"Export Models": "Exporter les modèles",
@@ -357,7 +354,6 @@
 	"Images": "Images",
 	"Import Chats": "Importer les discussions",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Import de la correspondance des documents",
 	"Import Functions": "Import de fonctions",
 	"Import Models": "Importer des modèles",
 	"Import Prompts": "Importer des Enseignes",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Installer depuis l'URL GitHub",
 	"Instant Auto-Send After Voice Transcription": "Envoi automatique instantané après transcription vocale",
 	"Interface": "Interface utilisateur",
+	"Invalid file format.": "",
 	"Invalid Tag": "Étiquette non valide",
 	"January": "Janvier",
 	"join our Discord for help.": "Rejoignez notre Discord pour obtenir de l'aide.",
@@ -446,13 +443,13 @@
 	"More": "Plus de",
 	"Move to Top": "",
 	"Name": "Nom",
-	"Name Tag": "Étiquette de nom",
 	"Name your model": "Nommez votre modèle",
 	"New Chat": "Nouvelle conversation",
 	"New Password": "Nouveau mot de passe",
 	"No content found": "",
 	"No content to speak": "Rien à signaler",
 	"No file selected": "Aucun fichier sélectionné",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Aucun résultat trouvé",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Clé OpenAI requise.",
 	"or": "ou",
 	"Other": "Autre",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modèle de ré-ranking défini sur « {{reranking_model}} »",
 	"Reset": "Réinitialiser",
 	"Reset Upload Directory": "Répertoire de téléchargement réinitialisé",
-	"Reset Vector Storage": "Réinitialiser le stockage des vecteurs",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Les notifications de réponse ne peuvent pas être activées car les autorisations du site web ont été refusées. Veuillez visiter les paramètres de votre navigateur pour accorder l'accès nécessaire.",
 	"Response splitting": "Fractionnement de la réponse",
@@ -570,7 +568,7 @@
 	"Search a model": "Rechercher un modèle",
 	"Search Chats": "Rechercher des conversations",
 	"Search Collection": "",
-	"Search Documents": "Recherche de documents",
+	"search for tags": "",
 	"Search Functions": "Fonctions de recherche",
 	"Search Knowledge": "",
 	"Search Models": "Rechercher des modèles",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Erreur de reconnaissance vocale\u00a0: {{error}}",
 	"Speech-to-Text Engine": "Moteur de reconnaissance vocale",
+	"Stop": "",
 	"Stop Sequence": "Séquence d'arrêt",
 	"Stream Chat Response": "",
 	"STT Model": "Modèle de STT",
@@ -667,6 +666,7 @@
 	"Template": "Template",
 	"Temporary Chat": "",
 	"Text Completion": "Complétion de texte",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Moteur de synthèse vocale",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Merci pour vos commentaires !",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explication approfondie",
 	"Tika": "Tika",
 	"Tika Server URL required.": "URL du serveur Tika requise.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Conseil\u00a0: mettez à jour plusieurs emplacements de variables consécutivement en appuyant sur la touche Tab dans l’entrée de chat après chaque remplacement.",
 	"Title": "Titre",
 	"Title (e.g. Tell me a fun fact)": "Titre (par ex. raconte-moi un fait amusant)",
@@ -702,6 +703,7 @@
 	"Today": "Aujourd'hui",
 	"Toggle settings": "Basculer les paramètres",
 	"Toggle sidebar": "Basculer la barre latérale",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Jeton à conserver pour l'actualisation du contexte (num_keep)",
 	"Tool created successfully": "L'outil a été créé avec succès",
 	"Tool deleted successfully": "Outil supprimé avec succès",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progression de l'envoi",
 	"URL Mode": "Mode d'URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Utilisez '#' dans l'entrée de prompt pour charger et sélectionner vos documents.",
 	"Use Gravatar": "Utilisez Gravatar",
 	"Use Initials": "Utiliser les initiales",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/fr-FR/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "Ajouter du contenu",
 	"Add content here": "Ajoutez du contenu ici",
 	"Add custom prompt": "Ajouter une prompt personnalisée",
-	"Add Docs": "Ajouter de la documentation",
 	"Add Files": "Ajouter des fichiers",
 	"Add Memory": "Ajouter de la mémoire",
 	"Add message": "Ajouter un message",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Les administrateurs ont accès à tous les outils en tout temps ; il faut attribuer des outils aux utilisateurs par modèle dans l'espace de travail.",
 	"Advanced Parameters": "Paramètres avancés",
 	"Advanced Params": "Paramètres avancés",
-	"all": "toutes",
 	"All Documents": "Tous les documents",
 	"All Users": "Tous les Utilisateurs",
-	"Allow": "Autoriser",
 	"Allow Chat Deletion": "Autoriser la suppression de l'historique de chat",
 	"Allow Chat Editing": "Autoriser la modification de l'historique de chat",
 	"Allow non-local voices": "Autoriser les voix non locales",
@@ -98,6 +95,7 @@
 	"Cancel": "Annuler",
 	"Capabilities": "Capacités",
 	"Change Password": "Changer le mot de passe",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "Image d'arrière-plan de la fenêtre de chat",
 	"Chat Bubble UI": "Bulles de chat",
@@ -120,13 +118,13 @@
 	"Click here to select": "Cliquez ici pour sélectionner",
 	"Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier .csv.",
 	"Click here to select a py file.": "Cliquez ici pour sélectionner un fichier .py.",
-	"Click here to select documents.": "Cliquez ici pour sélectionner les documents.",
 	"Click here to upload a workflow.json file.": "Cliquez ici pour télécharger un fichier workflow.json.",
 	"click here.": "cliquez ici.",
 	"Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour modifier le rôle d'un utilisateur.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "L'autorisation d'écriture du presse-papier a été refusée. Veuillez vérifier les paramètres de votre navigateur pour accorder l'accès nécessaire.",
 	"Clone": "Cloner",
 	"Close": "Fermer",
+	"Code execution": "",
 	"Code formatted successfully": "Le code a été formaté avec succès",
 	"Collection": "Collection",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copier le dernier bloc de code",
 	"Copy last response": "Copier la dernière réponse",
 	"Copy Link": "Copier le lien",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !",
 	"Create a model": "Créer un modèle",
 	"Create Account": "Créer un compte",
@@ -180,14 +179,12 @@
 	"Default model updated": "Modèle par défaut mis à jour",
 	"Default Prompt Suggestions": "Suggestions de prompts par défaut",
 	"Default User Role": "Rôle utilisateur par défaut",
-	"delete": "supprimer",
 	"Delete": "Supprimer",
 	"Delete a model": "Supprimer un modèle",
 	"Delete All Chats": "Supprimer toutes les conversations",
 	"Delete chat": "Supprimer la conversation",
 	"Delete Chat": "Supprimer la Conversation",
 	"Delete chat?": "Supprimer la conversation ?",
-	"Delete Doc": "Supprimer le document",
 	"Delete function?": "Supprimer la fonction ?",
 	"Delete prompt?": "Supprimer la prompt ?",
 	"delete this link": "supprimer ce lien",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentation",
 	"Documents": "Documents",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe et garde vos données en sécurité sur votre serveur local.",
-	"Don't Allow": "Ne pas autoriser",
 	"Don't have an account?": "Vous n'avez pas de compte ?",
 	"don't install random functions from sources you don't trust.": "n'installez pas de fonctions aléatoires provenant de sources auxquelles vous ne faites pas confiance.",
 	"don't install random tools from sources you don't trust.": "n'installez pas d'outils aléatoires provenant de sources auxquelles vous ne faites pas confiance.",
@@ -224,10 +220,11 @@
 	"Download": "Télécharger",
 	"Download canceled": "Téléchargement annulé",
 	"Download Database": "Télécharger la base de données",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Déposez des fichiers ici pour les ajouter à la conversation",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "par ex. '30s', '10 min'. Les unités de temps valides sont 's', 'm', 'h'.",
 	"Edit": "Modifier",
-	"Edit Doc": "Modifier le document",
 	"Edit Memory": "Modifier la mémoire",
 	"Edit User": "Modifier l'utilisateur",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Entrez votre mot de passe",
 	"Enter Your Role": "Entrez votre rôle",
 	"Error": "Erreur",
+	"ERROR": "",
 	"Experimental": "Expérimental",
 	"Export": "Exportation",
 	"Export All Chats (All Users)": "Exporter toutes les conversations (pour tous les utilisateurs)",
 	"Export chat (.json)": "Exporter la conversation (.json)",
 	"Export Chats": "Exporter les conversations",
 	"Export Config to JSON File": "Exporter la configuration vers un fichier JSON",
-	"Export Documents Mapping": "Exporter le mapping des documents",
 	"Export Functions": "Exportez des fonctions",
 	"Export LiteLLM config.yaml": "Exportez le fichier LiteLLM config.yaml",
 	"Export Models": "Exporter des modèles",
@@ -357,7 +354,6 @@
 	"Images": "Images",
 	"Import Chats": "Importer les conversations",
 	"Import Config from JSON File": "Importer la configuration depuis un fichier JSON",
-	"Import Documents Mapping": "Importer le mapping des documents",
 	"Import Functions": "Import de fonctions",
 	"Import Models": "Importer des modèles",
 	"Import Prompts": "Importer des prompts",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Installer depuis l'URL GitHub",
 	"Instant Auto-Send After Voice Transcription": "Envoi automatique après la transcription",
 	"Interface": "Interface utilisateur",
+	"Invalid file format.": "",
 	"Invalid Tag": "Étiquette non valide",
 	"January": "Janvier",
 	"join our Discord for help.": "Rejoignez notre Discord pour obtenir de l'aide.",
@@ -446,13 +443,13 @@
 	"More": "Plus de",
 	"Move to Top": "Déplacer en haut",
 	"Name": "Nom d'utilisateur",
-	"Name Tag": "Nom de l'étiquette",
 	"Name your model": "Nommez votre modèle",
 	"New Chat": "Nouvelle conversation",
 	"New Password": "Nouveau mot de passe",
 	"No content found": "",
 	"No content to speak": "Rien à signaler",
 	"No file selected": "Aucun fichier sélectionné",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "Aucun contenu HTML, CSS ou JavaScript trouvé.",
 	"No knowledge found": "Aucune connaissance trouvée",
 	"No results found": "Aucun résultat trouvé",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Clé OpenAI requise.",
 	"or": "ou",
 	"Other": "Autre",
+	"OUTPUT": "",
 	"Output format": "Format de sortie",
 	"Overview": "Aperçu",
 	"page": "page",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modèle de ré-ranking défini sur « {{reranking_model}} »",
 	"Reset": "Réinitialiser",
 	"Reset Upload Directory": "Réinitialiser le répertoire de téléchargement",
-	"Reset Vector Storage": "Réinitialiser le stockage des vecteurs",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Les notifications de réponse ne peuvent pas être activées car les autorisations du site web ont été refusées. Veuillez vérifier les paramètres de votre navigateur pour accorder l'accès nécessaire.",
 	"Response splitting": "Fractionnement de la réponse",
@@ -570,7 +568,7 @@
 	"Search a model": "Rechercher un modèle",
 	"Search Chats": "Rechercher des conversations",
 	"Search Collection": "Rechercher une collection",
-	"Search Documents": "Rechercher des documents",
+	"search for tags": "",
 	"Search Functions": "Rechercher des fonctions",
 	"Search Knowledge": "Rechercher des connaissances",
 	"Search Models": "Rechercher des modèles",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "Vitesse de lecture de la parole",
 	"Speech recognition error: {{error}}": "Erreur de reconnaissance vocale\u00a0: {{error}}",
 	"Speech-to-Text Engine": "Moteur de reconnaissance vocale",
+	"Stop": "",
 	"Stop Sequence": "Séquence d'arrêt",
 	"Stream Chat Response": "Streamer la réponse de la conversation",
 	"STT Model": "Modèle de Speech-to-Text",
@@ -667,6 +666,7 @@
 	"Template": "Template",
 	"Temporary Chat": "Chat éphémère",
 	"Text Completion": "Complétion de texte",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Moteur de Text-to-Speech",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Merci pour vos commentaires !",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explication approfondie",
 	"Tika": "Tika",
 	"Tika Server URL required.": "URL du serveur Tika requise.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Conseil\u00a0: mettez à jour plusieurs emplacements de variables consécutivement en appuyant sur la touche Tab dans l’entrée de chat après chaque remplacement.",
 	"Title": "Titre",
 	"Title (e.g. Tell me a fun fact)": "Titre (par ex. raconte-moi un fait amusant)",
@@ -702,6 +703,7 @@
 	"Today": "Aujourd'hui",
 	"Toggle settings": "Basculer les paramètres",
 	"Toggle sidebar": "Basculer la barre latérale",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Jeton à conserver lors du rafraîchissement du contexte (num_keep)",
 	"Tool created successfully": "L'outil a été créé avec succès",
 	"Tool deleted successfully": "Outil supprimé avec succès",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progression de l'envoi",
 	"URL Mode": "Mode d'URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "Utilisez '#' dans la zone de saisie du prompt pour charger et inclure vos connaissances.",
-	"Use '#' in the prompt input to load and select your documents.": "Utilisez '#' dans la zone de saisie du prompt pour charger et sélectionner vos documents.",
 	"Use Gravatar": "Utilisez Gravatar",
 	"Use Initials": "Utiliser les initiales",
 	"use_mlock (Ollama)": "Utiliser mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/he-IL/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "הוסף פקודה מותאמת אישית",
-	"Add Docs": "הוסף מסמכים",
 	"Add Files": "הוסף קבצים",
 	"Add Memory": "הוסף זיכרון",
 	"Add message": "הוסף הודעה",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "פרמטרים מתקדמים",
 	"Advanced Params": "פרמטרים מתקדמים",
-	"all": "הכל",
 	"All Documents": "כל המסמכים",
 	"All Users": "כל המשתמשים",
-	"Allow": "אפשר",
 	"Allow Chat Deletion": "אפשר מחיקת צ'אט",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "בטל",
 	"Capabilities": "יכולות",
 	"Change Password": "שנה סיסמה",
+	"Character": "",
 	"Chat": "צ'אט",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "UI של תיבת הדיבור",
@@ -120,13 +118,13 @@
 	"Click here to select": "לחץ כאן לבחירה",
 	"Click here to select a csv file.": "לחץ כאן לבחירת קובץ csv.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "לחץ כאן לבחירת מסמכים.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "לחץ כאן.",
 	"Click on the user role button to change a user's role.": "לחץ על כפתור תפקיד המשתמש כדי לשנות את תפקיד המשתמש.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "שיבוט",
 	"Close": "סגור",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "אוסף",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "העתק את בלוק הקוד האחרון",
 	"Copy last response": "העתק את התגובה האחרונה",
 	"Copy Link": "העתק קישור",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "ההעתקה ללוח הייתה מוצלחת!",
 	"Create a model": "יצירת מודל",
 	"Create Account": "צור חשבון",
@@ -180,14 +179,12 @@
 	"Default model updated": "המודל המוגדר כברירת מחדל עודכן",
 	"Default Prompt Suggestions": "הצעות ברירת מחדל לפקודות",
 	"Default User Role": "תפקיד משתמש ברירת מחדל",
-	"delete": "מחק",
 	"Delete": "מחק",
 	"Delete a model": "מחק מודל",
 	"Delete All Chats": "מחק את כל הצ'אטים",
 	"Delete chat": "מחק צ'אט",
 	"Delete Chat": "מחק צ'אט",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "מחק את הקישור הזה",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "מסמכים",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "לא מבצע חיבורים חיצוניים, והנתונים שלך נשמרים באופן מאובטח בשרת המקומי שלך.",
-	"Don't Allow": "אל תאפשר",
 	"Don't have an account?": "אין לך חשבון?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "הורד",
 	"Download canceled": "ההורדה בוטלה",
 	"Download Database": "הורד מסד נתונים",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "גרור כל קובץ לכאן כדי להוסיף לשיחה",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "למשל '30s', '10m'. יחידות זמן חוקיות הן 's', 'm', 'h'.",
 	"Edit": "ערוך",
-	"Edit Doc": "ערוך מסמך",
 	"Edit Memory": "",
 	"Edit User": "ערוך משתמש",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "הזן את הסיסמה שלך",
 	"Enter Your Role": "הזן את התפקיד שלך",
 	"Error": "שגיאה",
+	"ERROR": "",
 	"Experimental": "ניסיוני",
 	"Export": "ייצא",
 	"Export All Chats (All Users)": "ייצוא כל הצ'אטים (כל המשתמשים)",
 	"Export chat (.json)": "",
 	"Export Chats": "ייצוא צ'אטים",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "ייצוא מיפוי מסמכים",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "ייצוא מודלים",
@@ -357,7 +354,6 @@
 	"Images": "תמונות",
 	"Import Chats": "יבוא צ'אטים",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "יבוא מיפוי מסמכים",
 	"Import Functions": "",
 	"Import Models": "ייבוא דגמים",
 	"Import Prompts": "יבוא פקודות",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "התקן מכתובת URL של Github",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "ממשק",
+	"Invalid file format.": "",
 	"Invalid Tag": "תג לא חוקי",
 	"January": "ינואר",
 	"join our Discord for help.": "הצטרף ל-Discord שלנו לעזרה.",
@@ -446,13 +443,13 @@
 	"More": "עוד",
 	"Move to Top": "",
 	"Name": "שם",
-	"Name Tag": "תג שם",
 	"Name your model": "תן שם לדגם שלך",
 	"New Chat": "צ'אט חדש",
 	"New Password": "סיסמה חדשה",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "לא נמצאו תוצאות",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "נדרשת כתובת URL/מפתח של OpenAI.",
 	"or": "או",
 	"Other": "אחר",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "מודל דירוג מחדש הוגדר ל-\"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "איפוס אחסון וקטורים",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "העתקה אוטומטית של תגובה ללוח",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "חפש מודל",
 	"Search Chats": "חיפוש צ'אטים",
 	"Search Collection": "",
-	"Search Documents": "חפש מסמכים",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "חיפוש מודלים",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "שגיאת תחקור שמע: {{error}}",
 	"Speech-to-Text Engine": "מנוע תחקור שמע",
+	"Stop": "",
 	"Stop Sequence": "סידור עצירה",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -667,6 +666,7 @@
 	"Template": "תבנית",
 	"Temporary Chat": "",
 	"Text Completion": "תחילת טקסט",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "מנוע טקסט לדיבור",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "תודה על המשוב שלך!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "תיאור מפורט",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "טיפ: עדכן חריצים משתנים מרובים ברציפות על-ידי לחיצה על מקש Tab בקלט הצ'אט לאחר כל החלפה.",
 	"Title": "שם",
 	"Title (e.g. Tell me a fun fact)": "שם (לדוגמה: תרגום)",
@@ -702,6 +703,7 @@
 	"Today": "היום",
 	"Toggle settings": "החלפת מצב של הגדרות",
 	"Toggle sidebar": "החלפת מצב של סרגל הצד",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -740,7 +742,6 @@
 	"Upload Progress": "תקדמות העלאה",
 	"URL Mode": "מצב URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "השתמש ב- '#' בקלט הבקשה כדי לטעון ולבחור את המסמכים שלך.",
 	"Use Gravatar": "שימוש ב Gravatar",
 	"Use Initials": "שימוש ב initials",
 	"use_mlock (Ollama)": "use_mlock (אולמה)",

+ 15 - 14
src/lib/i18n/locales/hi-IN/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "अनुकूल संकेत जोड़ें",
-	"Add Docs": "दस्तावेज़ जोड़ें",
 	"Add Files": "फाइलें जोड़ें",
 	"Add Memory": "मेमोरी जोड़ें",
 	"Add message": "संदेश डालें",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "उन्नत पैरामीटर",
 	"Advanced Params": "उन्नत परम",
-	"all": "सभी",
 	"All Documents": "सभी डॉक्यूमेंट्स",
 	"All Users": "सभी उपयोगकर्ता",
-	"Allow": "अनुमति दें",
 	"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "रद्द करें",
 	"Capabilities": "क्षमताओं",
 	"Change Password": "पासवर्ड बदलें",
+	"Character": "",
 	"Chat": "चैट करें",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "चैट बॉली",
@@ -120,13 +118,13 @@
 	"Click here to select": "चयन करने के लिए यहां क्लिक करें।",
 	"Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "यहाँ क्लिक करें।",
 	"Click on the user role button to change a user's role.": "उपयोगकर्ता की भूमिका बदलने के लिए उपयोगकर्ता भूमिका बटन पर क्लिक करें।",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "क्लोन",
 	"Close": "बंद करना",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "संग्रह",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "अंतिम कोड ब्लॉक कॉपी करें",
 	"Copy last response": "अंतिम प्रतिक्रिया कॉपी करें",
 	"Copy Link": "लिंक को कॉपी करें",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "क्लिपबोर्ड पर कॉपी बनाना सफल रहा!",
 	"Create a model": "एक मॉडल बनाएं",
 	"Create Account": "खाता बनाएं",
@@ -180,14 +179,12 @@
 	"Default model updated": "डिफ़ॉल्ट मॉडल अपडेट किया गया",
 	"Default Prompt Suggestions": "डिफ़ॉल्ट प्रॉम्प्ट सुझाव",
 	"Default User Role": "डिफ़ॉल्ट उपयोगकर्ता भूमिका",
-	"delete": "डिलीट",
 	"Delete": "डिलीट",
 	"Delete a model": "एक मॉडल हटाएँ",
 	"Delete All Chats": "सभी चैट हटाएं",
 	"Delete chat": "चैट हटाएं",
 	"Delete Chat": "चैट हटाएं",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "इस लिंक को हटाएं",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "दस्तावेज़",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "कोई बाहरी कनेक्शन नहीं बनाता है, और आपका डेटा आपके स्थानीय रूप से होस्ट किए गए सर्वर पर सुरक्षित रूप से रहता है।",
-	"Don't Allow": "अनुमति न दें",
 	"Don't have an account?": "कोई खाता नहीं है?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "डाउनलोड",
 	"Download canceled": "डाउनलोड रद्द किया गया",
 	"Download Database": "डेटाबेस डाउनलोड करें",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "बातचीत में जोड़ने के लिए कोई भी फ़ाइल यहां छोड़ें",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "जैसे '30s', '10m', मान्य समय इकाइयाँ 's', 'm', 'h' हैं।",
 	"Edit": "संपादित करें",
-	"Edit Doc": "दस्तावेज़ संपादित करें",
 	"Edit Memory": "",
 	"Edit User": "यूजर को संपादित करो",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "अपना पासवर्ड भरें",
 	"Enter Your Role": "अपनी भूमिका दर्ज करें",
 	"Error": "चूक",
+	"ERROR": "",
 	"Experimental": "प्रयोगात्मक",
 	"Export": "निर्यातित माल",
 	"Export All Chats (All Users)": "सभी चैट निर्यात करें (सभी उपयोगकर्ताओं की)",
 	"Export chat (.json)": "",
 	"Export Chats": "चैट निर्यात करें",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "निर्यात मॉडल",
@@ -357,7 +354,6 @@
 	"Images": "इमेजिस",
 	"Import Chats": "चैट आयात करें",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें",
 	"Import Functions": "",
 	"Import Models": "आयात मॉडल",
 	"Import Prompts": "प्रॉम्प्ट आयात करें",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Github URL से इंस्टॉल करें",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "इंटरफेस",
+	"Invalid file format.": "",
 	"Invalid Tag": "अवैध टैग",
 	"January": "जनवरी",
 	"join our Discord for help.": "मदद के लिए हमारे डिस्कोर्ड में शामिल हों।",
@@ -446,13 +443,13 @@
 	"More": "और..",
 	"Move to Top": "",
 	"Name": "नाम",
-	"Name Tag": "नाम टैग",
 	"Name your model": "अपने मॉडल को नाम दें",
 	"New Chat": "नई चैट",
 	"New Password": "नया पासवर्ड",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "कोई परिणाम नहीं मिला",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Key आवश्यक है।",
 	"or": "या",
 	"Other": "अन्य",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "रीरैंकिंग मॉडल को \"{{reranking_model}}\" पर \u200b\u200bसेट किया गया",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "वेक्टर संग्रहण रीसेट करें",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "क्लिपबोर्ड पर प्रतिक्रिया ऑटोकॉपी",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "एक मॉडल खोजें",
 	"Search Chats": "चैट खोजें",
 	"Search Collection": "",
-	"Search Documents": "दस्तावेज़ खोजें",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "मॉडल खोजें",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "वाक् पहचान त्रुटि: {{error}}",
 	"Speech-to-Text Engine": "वाक्-से-पाठ इंजन",
+	"Stop": "",
 	"Stop Sequence": "अनुक्रम रोकें",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "टेम्पलेट",
 	"Temporary Chat": "",
 	"Text Completion": "पाठ समापन",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "टेक्स्ट-टू-स्पीच इंजन",
 	"Tfs Z": "टफ्स Z",
 	"Thanks for your feedback!": "आपकी प्रतिक्रिया के लिए धन्यवाद!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "विस्तृत व्याख्या",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "टिप: प्रत्येक प्रतिस्थापन के बाद चैट इनपुट में टैब कुंजी दबाकर लगातार कई वैरिएबल स्लॉट अपडेट करें।",
 	"Title": "शीर्षक",
 	"Title (e.g. Tell me a fun fact)": "शीर्षक (उदा. मुझे एक मज़ेदार तथ्य बताएं)",
@@ -701,6 +702,7 @@
 	"Today": "आज",
 	"Toggle settings": "सेटिंग्स टॉगल करें",
 	"Toggle sidebar": "साइडबार टॉगल करें",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "प्रगति अपलोड करें",
 	"URL Mode": "URL मोड",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "अपने दस्तावेज़ों को लोड करने और चुनने के लिए शीघ्र इनपुट में '#' का उपयोग करें।",
 	"Use Gravatar": "Gravatar का प्रयोग करें",
 	"Use Initials": "प्रथमाक्षर का प्रयोग करें",
 	"use_mlock (Ollama)": "use_mlock (ओलामा)",

+ 15 - 14
src/lib/i18n/locales/hr-HR/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Dodaj prilagođeni prompt",
-	"Add Docs": "Dodaj dokumente",
 	"Add Files": "Dodaj datoteke",
 	"Add Memory": "Dodaj memoriju",
 	"Add message": "Dodaj poruku",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Napredni parametri",
 	"Advanced Params": "Napredni parametri",
-	"all": "sve",
 	"All Documents": "Svi dokumenti",
 	"All Users": "Svi korisnici",
-	"Allow": "Dopusti",
 	"Allow Chat Deletion": "Dopusti brisanje razgovora",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Dopusti nelokalne glasove",
@@ -98,6 +95,7 @@
 	"Cancel": "Otkaži",
 	"Capabilities": "Mogućnosti",
 	"Change Password": "Promijeni lozinku",
+	"Character": "",
 	"Chat": "Razgovor",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Razgovor - Bubble UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Kliknite ovdje za odabir",
 	"Click here to select a csv file.": "Kliknite ovdje da odaberete csv datoteku.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Kliknite ovdje da odaberete dokumente.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "kliknite ovdje.",
 	"Click on the user role button to change a user's role.": "Kliknite na gumb uloge korisnika za promjenu uloge korisnika.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Kloniraj",
 	"Close": "Zatvori",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Kolekcija",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopiraj zadnji blok koda",
 	"Copy last response": "Kopiraj zadnji odgovor",
 	"Copy Link": "Kopiraj vezu",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Kopiranje u međuspremnik je uspješno!",
 	"Create a model": "Izradite model",
 	"Create Account": "Stvori račun",
@@ -180,14 +179,12 @@
 	"Default model updated": "Zadani model ažuriran",
 	"Default Prompt Suggestions": "Zadani prijedlozi prompta",
 	"Default User Role": "Zadana korisnička uloga",
-	"delete": "izbriši",
 	"Delete": "Izbriši",
 	"Delete a model": "Izbriši model",
 	"Delete All Chats": "Izbriši sve razgovore",
 	"Delete chat": "Izbriši razgovor",
 	"Delete Chat": "Izbriši razgovor",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "izbriši ovu vezu",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentacija",
 	"Documents": "Dokumenti",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ne uspostavlja vanjske veze, a vaši podaci ostaju sigurno na vašem lokalno hostiranom poslužitelju.",
-	"Don't Allow": "Ne dopuštaj",
 	"Don't have an account?": "Nemate račun?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Preuzimanje",
 	"Download canceled": "Preuzimanje otkazano",
 	"Download Database": "Preuzmi bazu podataka",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Spustite bilo koje datoteke ovdje za dodavanje u razgovor",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "npr. '30s','10m'. Važeće vremenske jedinice su 's', 'm', 'h'.",
 	"Edit": "Uredi",
-	"Edit Doc": "Uredi dokument",
 	"Edit Memory": "",
 	"Edit User": "Uredi korisnika",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Unesite svoju lozinku",
 	"Enter Your Role": "Unesite svoju ulogu",
 	"Error": "Greška",
+	"ERROR": "",
 	"Experimental": "Eksperimentalno",
 	"Export": "Izvoz",
 	"Export All Chats (All Users)": "Izvoz svih razgovora (svi korisnici)",
 	"Export chat (.json)": "Izvoz četa (.json)",
 	"Export Chats": "Izvoz razgovora",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Izvoz mapiranja dokumenata",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Izvoz modela",
@@ -357,7 +354,6 @@
 	"Images": "Slike",
 	"Import Chats": "Uvoz razgovora",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Uvoz mapiranja dokumenata",
 	"Import Functions": "",
 	"Import Models": "Uvoz modela",
 	"Import Prompts": "Uvoz prompta",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instaliraj s Github URL-a",
 	"Instant Auto-Send After Voice Transcription": "Trenutačno automatsko slanje nakon glasovne transkripcije",
 	"Interface": "Sučelje",
+	"Invalid file format.": "",
 	"Invalid Tag": "Nevažeća oznaka",
 	"January": "Siječanj",
 	"join our Discord for help.": "pridružite se našem Discordu za pomoć.",
@@ -446,13 +443,13 @@
 	"More": "Više",
 	"Move to Top": "",
 	"Name": "Ime",
-	"Name Tag": "Naziv oznake",
 	"Name your model": "Dodijelite naziv modelu",
 	"New Chat": "Novi razgovor",
 	"New Password": "Nova lozinka",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Nema rezultata",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Potreban je OpenAI URL/ključ.",
 	"or": "ili",
 	"Other": "Ostalo",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Model za ponovno rangiranje postavljen na \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "Poništi upload direktorij",
-	"Reset Vector Storage": "Resetiraj pohranu vektora",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Automatsko kopiranje odgovora u međuspremnik",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Pretraži model",
 	"Search Chats": "Pretraži razgovore",
 	"Search Collection": "",
-	"Search Documents": "Pretraga dokumenata",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Pretražite modele",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Pogreška prepoznavanja govora: {{error}}",
 	"Speech-to-Text Engine": "Stroj za prepoznavanje govora",
+	"Stop": "",
 	"Stop Sequence": "Zaustavi sekvencu",
 	"Stream Chat Response": "",
 	"STT Model": "STT model",
@@ -667,6 +666,7 @@
 	"Template": "Predložak",
 	"Temporary Chat": "",
 	"Text Completion": "Dovršavanje teksta",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Stroj za pretvorbu teksta u govor",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Hvala na povratnim informacijama!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Detaljno objašnjenje",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Savjet: Ažurirajte više mjesta za varijable uzastopno pritiskom na tipku tab u unosu razgovora nakon svake zamjene.",
 	"Title": "Naslov",
 	"Title (e.g. Tell me a fun fact)": "Naslov (npr. Reci mi zanimljivost)",
@@ -702,6 +703,7 @@
 	"Today": "Danas",
 	"Toggle settings": "Prebaci postavke",
 	"Toggle sidebar": "Prebaci bočnu traku",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Napredak učitavanja",
 	"URL Mode": "URL način",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Koristite '#' u unosu prompta za učitavanje i odabir vaših dokumenata.",
 	"Use Gravatar": "Koristi Gravatar",
 	"Use Initials": "Koristi inicijale",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/id-ID/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Tambahkan prompt khusus",
-	"Add Docs": "Tambahkan Dokumen",
 	"Add Files": "Menambahkan File",
 	"Add Memory": "Menambahkan Memori",
 	"Add message": "Tambahkan pesan",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Admin memiliki akses ke semua alat setiap saat; pengguna memerlukan alat yang ditetapkan per model di ruang kerja.",
 	"Advanced Parameters": "Parameter Lanjutan",
 	"Advanced Params": "Parameter Lanjutan",
-	"all": "semua",
 	"All Documents": "Semua Dokumen",
 	"All Users": "Semua Pengguna",
-	"Allow": "Mengizinkan",
 	"Allow Chat Deletion": "Izinkan Penghapusan Obrolan",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Izinkan suara non-lokal",
@@ -98,6 +95,7 @@
 	"Cancel": "Batal",
 	"Capabilities": "Kemampuan",
 	"Change Password": "Ubah Kata Sandi",
+	"Character": "",
 	"Chat": "Obrolan",
 	"Chat Background Image": "Gambar Latar Belakang Obrolan",
 	"Chat Bubble UI": "UI Gelembung Obrolan",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klik di sini untuk memilih",
 	"Click here to select a csv file.": "Klik di sini untuk memilih file csv.",
 	"Click here to select a py file.": "Klik di sini untuk memilih file py.",
-	"Click here to select documents.": "Klik di sini untuk memilih dokumen.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "Klik di sini.",
 	"Click on the user role button to change a user's role.": "Klik tombol peran pengguna untuk mengubah peran pengguna.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Izin menulis papan klip ditolak. Periksa pengaturan peramban Anda untuk memberikan akses yang diperlukan.",
 	"Clone": "Kloning",
 	"Close": "Tutup",
+	"Code execution": "",
 	"Code formatted successfully": "Kode berhasil diformat",
 	"Collection": "Koleksi",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Salin blok kode terakhir",
 	"Copy last response": "Salin tanggapan terakhir",
 	"Copy Link": "Salin Tautan",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Penyalinan ke papan klip berhasil!",
 	"Create a model": "Buat model",
 	"Create Account": "Buat Akun",
@@ -180,14 +179,12 @@
 	"Default model updated": "Model default diperbarui",
 	"Default Prompt Suggestions": "Saran Permintaan Default",
 	"Default User Role": "Peran Pengguna Default",
-	"delete": "Hapus",
 	"Delete": "Menghapus",
 	"Delete a model": "Menghapus model",
 	"Delete All Chats": "Menghapus Semua Obrolan",
 	"Delete chat": "Menghapus obrolan",
 	"Delete Chat": "Menghapus Obrolan",
 	"Delete chat?": "Menghapus obrolan?",
-	"Delete Doc": "",
 	"Delete function?": "Fungsi hapus?",
 	"Delete prompt?": "Perintah hapus?",
 	"delete this link": "hapus tautan ini",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentasi",
 	"Documents": "Dokumen",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat koneksi eksternal apa pun, dan data Anda tetap aman di server yang dihosting secara lokal.",
-	"Don't Allow": "Jangan Izinkan",
 	"Don't have an account?": "Tidak memiliki akun?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Unduh",
 	"Download canceled": "Unduh dibatalkan",
 	"Download Database": "Unduh Basis Data",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Letakkan file apa pun di sini untuk ditambahkan ke percakapan",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "misalnya '30-an', '10m'. Satuan waktu yang valid adalah 's', 'm', 'h'.",
 	"Edit": "Edit",
-	"Edit Doc": "Edit Dokumen",
 	"Edit Memory": "Edit Memori",
 	"Edit User": "Edit Pengguna",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Masukkan Kata Sandi Anda",
 	"Enter Your Role": "Masukkan Peran Anda",
 	"Error": "Kesalahan",
+	"ERROR": "",
 	"Experimental": "Percobaan",
 	"Export": "Ekspor",
 	"Export All Chats (All Users)": "Ekspor Semua Obrolan (Semua Pengguna)",
 	"Export chat (.json)": "Ekspor obrolan (.json)",
 	"Export Chats": "Ekspor Obrolan",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Pemetaan Dokumen Ekspor",
 	"Export Functions": "Fungsi Ekspor",
 	"Export LiteLLM config.yaml": "Ekspor LiteLLM config.yaml",
 	"Export Models": "Model Ekspor",
@@ -357,7 +354,6 @@
 	"Images": "Gambar",
 	"Import Chats": "Impor Obrolan",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Pemetaan Dokumen Impor",
 	"Import Functions": "Fungsi Impor",
 	"Import Models": "Model Impor",
 	"Import Prompts": "Petunjuk Impor",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instal dari URL Github",
 	"Instant Auto-Send After Voice Transcription": "Kirim Otomatis Instan Setelah Transkripsi Suara",
 	"Interface": "Antarmuka",
+	"Invalid file format.": "",
 	"Invalid Tag": "Tag tidak valid",
 	"January": "Januari",
 	"join our Discord for help.": "bergabunglah dengan Discord kami untuk mendapatkan bantuan.",
@@ -446,13 +443,13 @@
 	"More": "Lainnya",
 	"Move to Top": "",
 	"Name": "Nama",
-	"Name Tag": "Label Nama",
 	"Name your model": "Beri nama model Anda",
 	"New Chat": "Obrolan Baru",
 	"New Password": "Kata Sandi Baru",
 	"No content found": "",
 	"No content to speak": "Tidak ada konten untuk dibicarakan",
 	"No file selected": "Tidak ada file yang dipilih",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Tidak ada hasil yang ditemukan",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Diperlukan URL/Kunci OpenAI.",
 	"or": "atau",
 	"Other": "Lainnya",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Model pemeringkatan diatur ke \"{{reranking_model}}\"",
 	"Reset": "Atur Ulang",
 	"Reset Upload Directory": "Setel Ulang Direktori Unggahan",
-	"Reset Vector Storage": "Setel Ulang Penyimpanan Vektor",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Tanggapan Salin Otomatis ke Papan Klip",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notifikasi respons tidak dapat diaktifkan karena izin situs web telah ditolak. Silakan kunjungi pengaturan browser Anda untuk memberikan akses yang diperlukan.",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Mencari model",
 	"Search Chats": "Cari Obrolan",
 	"Search Collection": "",
-	"Search Documents": "Cari Dokumen",
+	"search for tags": "",
 	"Search Functions": "Fungsi Pencarian",
 	"Search Knowledge": "",
 	"Search Models": "Cari Model",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Kesalahan pengenalan suara: {{error}}",
 	"Speech-to-Text Engine": "Mesin Pengenal Ucapan ke Teks",
+	"Stop": "",
 	"Stop Sequence": "Hentikan Urutan",
 	"Stream Chat Response": "",
 	"STT Model": "Model STT",
@@ -666,6 +665,7 @@
 	"Template": "Templat",
 	"Temporary Chat": "",
 	"Text Completion": "Penyelesaian Teks",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Mesin Teks-ke-Suara",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Terima kasih atas umpan balik Anda!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Penjelasan menyeluruh",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Perbarui beberapa slot variabel secara berurutan dengan menekan tombol tab di input obrolan setelah setiap penggantian.",
 	"Title": "Judul",
 	"Title (e.g. Tell me a fun fact)": "Judul (misalnya, Ceritakan sebuah fakta menarik)",
@@ -701,6 +702,7 @@
 	"Today": "Hari ini",
 	"Toggle settings": "Beralih pengaturan",
 	"Toggle sidebar": "Beralih bilah sisi",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Token Untuk Menyimpan Penyegaran Konteks (num_keep)",
 	"Tool created successfully": "Alat berhasil dibuat",
 	"Tool deleted successfully": "Alat berhasil dihapus",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Kemajuan Unggah",
 	"URL Mode": "Mode URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Gunakan '#' pada input prompt untuk memuat dan memilih dokumen Anda.",
 	"Use Gravatar": "Gunakan Gravatar",
 	"Use Initials": "Gunakan Inisial",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/ie-GA/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Cuir pras saincheaptha leis",
-	"Add Docs": "Cuir Docs leis",
 	"Add Files": "Cuir Comhaid",
 	"Add Memory": "Cuir Cuimhne",
 	"Add message": "Cuir teachtaireacht leis",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Tá rochtain ag riarthóirí ar gach uirlis i gcónaí; teastaíonn uirlisí sannta in aghaidh an tsamhail sa spás oibre ó úsáideoirí.",
 	"Advanced Parameters": "Paraiméadair Casta",
 	"Advanced Params": "Paraiméid Casta",
-	"all": "go léir",
 	"All Documents": "Gach Doiciméad",
 	"All Users": "Gach Úsáideoir",
-	"Allow": "Ceadaigh",
 	"Allow Chat Deletion": "Cead Scriosadh Comhrá",
 	"Allow Chat Editing": "Ceadaigh Eagarthóireacht",
 	"Allow non-local voices": "Lig guthanna neamh-áitiúla",
@@ -98,6 +95,7 @@
 	"Cancel": "Cealaigh",
 	"Capabilities": "Cumais",
 	"Change Password": "Athraigh Pasfhocal",
+	"Character": "",
 	"Chat": "Comhrá",
 	"Chat Background Image": "Íomhá Cúlra Comhrá",
 	"Chat Bubble UI": "Comhrá Bubble UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Cliceáil anseo chun roghnú",
 	"Click here to select a csv file.": "Cliceáil anseo chun comhad csv a roghnú.",
 	"Click here to select a py file.": "Cliceáil anseo chun comhad py a roghnú.",
-	"Click here to select documents.": "Cliceáil anseo chun cáipéis a roghnú.",
 	"Click here to upload a workflow.json file.": "Cliceáil anseo chun comhad workflow.json a uaslódáil.",
 	"click here.": "cliceáil anseo.",
 	"Click on the user role button to change a user's role.": "Cliceáil ar an gcnaipe ról úsáideora chun ról úsáideora a athrú.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Diúltaíodh cead scríofa an ghearrthaisce. Seiceáil socruithe do bhrabhsálaí chun an rochtain riachtanach a dheonú.",
 	"Clone": "Clón",
 	"Close": "Dún",
+	"Code execution": "",
 	"Code formatted successfully": "Cód formáidithe go rathúil",
 	"Collection": "Bailiúchán",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Cóipeáil bloc cód deireanach",
 	"Copy last response": "Cóipeáil an fhreagairt",
 	"Copy Link": "Cóipeáil Nasc",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "D'éirigh le cóipeáil chuig an ngearrthaisce!",
 	"Create a model": "Cruthaigh samhail",
 	"Create Account": "Cruthaigh Cuntas",
@@ -180,14 +179,12 @@
 	"Default model updated": "An tsamhail réamhshocraithe",
 	"Default Prompt Suggestions": "Moltaí Pras Réamhshocraithe",
 	"Default User Role": "Ról Úsáideora Réamhshoc",
-	"delete": "scrios",
 	"Delete": "Scrios",
 	"Delete a model": "Scrios samhail",
 	"Delete All Chats": "Scrios Gach Comhrá",
 	"Delete chat": "Scrios comhrá",
 	"Delete Chat": "Scrios Comhrá",
 	"Delete chat?": "Scrios comhrá?",
-	"Delete Doc": "Scrios Doc",
 	"Delete function?": "Scrios feidhm?",
 	"Delete prompt?": "Scrios pras?",
 	"delete this link": "scrios an nasc seo",
@@ -215,7 +212,6 @@
 	"Documentation": "Doiciméadú",
 	"Documents": "Doiciméid",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ní dhéanann sé aon naisc sheachtracha, agus fanann do chuid sonraí go slán ar do fhreastalaí a óstáiltear go háitiúil.",
-	"Don't Allow": "Ná Ceadaigh",
 	"Don't have an account?": "Níl cuntas agat?",
 	"don't install random functions from sources you don't trust.": "ná suiteáil feidhmeanna randamacha ó fhoinsí nach bhfuil muinín agat.",
 	"don't install random tools from sources you don't trust.": "ná suiteáil uirlisí randamacha ó fhoinsí nach bhfuil muinín agat.",
@@ -224,10 +220,11 @@
 	"Download": "Íoslódáil",
 	"Download canceled": "Íoslódáil cealaithe",
 	"Download Database": "Íoslódáil Bunachair",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Scaoil aon chomhaid anseo le cur leis an gcomhrá",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "m.sh. '30s', '10m'. Is iad aonaid ama bailí ná 's', 'm', 'h'.",
 	"Edit": "Cuir in eagar",
-	"Edit Doc": "Cuir Doc in eagar",
 	"Edit Memory": "Cuir Cuimhne in eagar",
 	"Edit User": "Cuir Úsáideoir in eagar",
 	"ElevenLabs": "Eleven Labs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Cuir isteach do phasfhocal",
 	"Enter Your Role": "Cuir isteach do Ról",
 	"Error": "Earráid",
+	"ERROR": "",
 	"Experimental": "Turgnamhach",
 	"Export": "Easpórtáil",
 	"Export All Chats (All Users)": "Easpórtáil gach comhrá (Gach Úsáideoir)",
 	"Export chat (.json)": "Easpórtáil comhrá (.json)",
 	"Export Chats": "Comhráite Easpórtá",
 	"Export Config to JSON File": "Easpórtáil Cumraíocht chuig Comhad JSON",
-	"Export Documents Mapping": "Mapáil Doiciméad Onnm",
 	"Export Functions": "Feidhmeanna Easp",
 	"Export LiteLLM config.yaml": "Easpórtáil LitellM config.yaml",
 	"Export Models": "Samhlacha Easpórtá",
@@ -357,7 +354,6 @@
 	"Images": "Íomhánna",
 	"Import Chats": "Comhráite iompórtá",
 	"Import Config from JSON File": "Cumraíocht Iompórtáil ó Chomhad JSON",
-	"Import Documents Mapping": "Mapáil Doiciméad Iomp",
 	"Import Functions": "Feidhmeanna Iom",
 	"Import Models": "Samhlacha iompórtá",
 	"Import Prompts": "Leideanna Iompórtála",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Suiteáil ó Github URL",
 	"Instant Auto-Send After Voice Transcription": "Seoladh Uathoibríoch Láithreach Tar éis",
 	"Interface": "Comhéadan",
+	"Invalid file format.": "",
 	"Invalid Tag": "Clib neamhbhailí",
 	"January": "Eanáir",
 	"join our Discord for help.": "bí inár Discord chun cabhair a fháil.",
@@ -446,13 +443,13 @@
 	"More": "Tuilleadh",
 	"Move to Top": "Bogadh go dtí an Barr",
 	"Name": "Ainm",
-	"Name Tag": "Clib Ainm",
 	"Name your model": "Ainmnigh do mhúnla",
 	"New Chat": "Comhrá Nua",
 	"New Password": "Pasfhocal Nua",
 	"No content found": "",
 	"No content to speak": "Níl aon ábhar le labhairt",
 	"No file selected": "Níl aon chomhad roghnaithe",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Níl aon torthaí le fáil",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Teastaíonn URL/eochair OpenAI.",
 	"or": "nó",
 	"Other": "Eile",
+	"OUTPUT": "",
 	"Output format": "Formáid aschuir",
 	"Overview": "Forbhreathnú",
 	"page": "leathanach",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Samhail athrangú socraithe go “{{reranking_model}}”",
 	"Reset": "Athshocraigh",
 	"Reset Upload Directory": "Athshocraigh Eolaire Uas",
-	"Reset Vector Storage": "Athshocraigh Stóráil Vector",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Freagra AutoCopy go Gearrthaisce",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Ní féidir fógraí freagartha a ghníomhachtú toisc gur diúltaíodh ceadanna an tsuímh Ghréasáin. Tabhair cuairt ar do shocruithe brabhsálaí chun an rochtain riachtanach a dheonú.",
 	"Response splitting": "Scoilt freagartha",
@@ -570,7 +568,7 @@
 	"Search a model": "Cuardaigh samhail",
 	"Search Chats": "Cuardaigh Comhráite",
 	"Search Collection": "",
-	"Search Documents": "Cuardaigh Doiciméid",
+	"search for tags": "",
 	"Search Functions": "Feidhmeanna Cuardaigh",
 	"Search Knowledge": "",
 	"Search Models": "Múnlaí Cuardaigh",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "Luas Athsheinm Urlabhra",
 	"Speech recognition error: {{error}}": "Earráid aitheantais cainte: {{error}}",
 	"Speech-to-Text Engine": "Inneall Cainte-go-Téacs",
+	"Stop": "",
 	"Stop Sequence": "Stop Seicheamh",
 	"Stream Chat Response": "Freagra Comhrá Sruth",
 	"STT Model": "Múnla STT",
@@ -666,6 +665,7 @@
 	"Template": "Teimpléad",
 	"Temporary Chat": "Comhrá Sealadach",
 	"Text Completion": "Críochnú Téacs",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Inneall téacs-go-labhra",
 	"Tfs Z": "TFS Z",
 	"Thanks for your feedback!": "Go raibh maith agat as do chuid aiseolas!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Míniú críochnúil",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Teastaíonn URL Freastalaí Tika.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Leid: Nuashonraigh sliotáin iolracha athróg as a chéile trí bhrú ar an eochair cluaisín san ionchur comhrá tar éis gach athsholáthair.",
 	"Title": "Teideal",
 	"Title (e.g. Tell me a fun fact)": "Teideal (m.sh. inis dom fíric spraíúil)",
@@ -701,6 +702,7 @@
 	"Today": "Inniu",
 	"Toggle settings": "Socraigh socruithe",
 	"Toggle sidebar": "Athraigh barra taobh",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Comharthaí le Coinneáil ar Athnuachan Comhthéacs (num_keep)",
 	"Tool created successfully": "Uirlis cruthaithe go rathúil",
 	"Tool deleted successfully": "Uirlis scriosta go rathúil",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Uaslódáil an Dul",
 	"URL Mode": "Mód URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Úsáid '#' san ionchur pras chun do dhoiciméid a luchtú agus a roghnú.",
 	"Use Gravatar": "Úsáid Gravatar",
 	"Use Initials": "Úsáid ceannlitreacha",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/it-IT/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Aggiungi un prompt custom",
-	"Add Docs": "Aggiungi documenti",
 	"Add Files": "Aggiungi file",
 	"Add Memory": "Aggiungi memoria",
 	"Add message": "Aggiungi messaggio",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Parametri avanzati",
 	"Advanced Params": "Parametri avanzati",
-	"all": "tutti",
 	"All Documents": "Tutti i documenti",
 	"All Users": "Tutti gli utenti",
-	"Allow": "Consenti",
 	"Allow Chat Deletion": "Consenti l'eliminazione della chat",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Annulla",
 	"Capabilities": "Funzionalità",
 	"Change Password": "Cambia password",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "UI bolle chat",
@@ -120,13 +118,13 @@
 	"Click here to select": "Clicca qui per selezionare",
 	"Click here to select a csv file.": "Clicca qui per selezionare un file csv.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Clicca qui per selezionare i documenti.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "clicca qui.",
 	"Click on the user role button to change a user's role.": "Clicca sul pulsante del ruolo utente per modificare il ruolo di un utente.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Clone",
 	"Close": "Chiudi",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Collezione",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copia ultimo blocco di codice",
 	"Copy last response": "Copia ultima risposta",
 	"Copy Link": "Copia link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Copia negli appunti riuscita!",
 	"Create a model": "Creare un modello",
 	"Create Account": "Crea account",
@@ -180,14 +179,12 @@
 	"Default model updated": "Modello predefinito aggiornato",
 	"Default Prompt Suggestions": "Suggerimenti prompt predefiniti",
 	"Default User Role": "Ruolo utente predefinito",
-	"delete": "elimina",
 	"Delete": "Elimina",
 	"Delete a model": "Elimina un modello",
 	"Delete All Chats": "Elimina tutte le chat",
 	"Delete chat": "Elimina chat",
 	"Delete Chat": "Elimina chat",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "elimina questo link",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Documenti",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "non effettua connessioni esterne e i tuoi dati rimangono al sicuro sul tuo server ospitato localmente.",
-	"Don't Allow": "Non consentire",
 	"Don't have an account?": "Non hai un account?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Scarica",
 	"Download canceled": "Scaricamento annullato",
 	"Download Database": "Scarica database",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Trascina qui i file da aggiungere alla conversazione",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "ad esempio '30s','10m'. Le unità di tempo valide sono 's', 'm', 'h'.",
 	"Edit": "Modifica",
-	"Edit Doc": "Modifica documento",
 	"Edit Memory": "",
 	"Edit User": "Modifica utente",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Inserisci la tua password",
 	"Enter Your Role": "Inserisci il tuo ruolo",
 	"Error": "Errore",
+	"ERROR": "",
 	"Experimental": "Sperimentale",
 	"Export": "Esportazione",
 	"Export All Chats (All Users)": "Esporta tutte le chat (tutti gli utenti)",
 	"Export chat (.json)": "",
 	"Export Chats": "Esporta chat",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Esporta mappatura documenti",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Esporta modelli",
@@ -357,7 +354,6 @@
 	"Images": "Immagini",
 	"Import Chats": "Importa chat",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importa mappatura documenti",
 	"Import Functions": "",
 	"Import Models": "Importazione di modelli",
 	"Import Prompts": "Importa prompt",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Eseguire l'installazione dall'URL di Github",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Interfaccia",
+	"Invalid file format.": "",
 	"Invalid Tag": "Tag non valido",
 	"January": "Gennaio",
 	"join our Discord for help.": "unisciti al nostro Discord per ricevere aiuto.",
@@ -446,13 +443,13 @@
 	"More": "Altro",
 	"Move to Top": "",
 	"Name": "Nome",
-	"Name Tag": "Nome tag",
 	"Name your model": "Assegna un nome al tuo modello",
 	"New Chat": "Nuova chat",
 	"New Password": "Nuova password",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Nessun risultato trovato",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Chiave OpenAI obbligatori.",
 	"or": "o",
 	"Other": "Altro",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modello di riclassificazione impostato su \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Reimposta archivio vettoriale",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copia automatica della risposta negli appunti",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Cerca un modello",
 	"Search Chats": "Cerca nelle chat",
 	"Search Collection": "",
-	"Search Documents": "Cerca documenti",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Cerca modelli",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Errore di riconoscimento vocale: {{error}}",
 	"Speech-to-Text Engine": "Motore da voce a testo",
+	"Stop": "",
 	"Stop Sequence": "Sequenza di arresto",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -667,6 +666,7 @@
 	"Template": "Modello",
 	"Temporary Chat": "",
 	"Text Completion": "Completamento del testo",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Motore da testo a voce",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Grazie per il tuo feedback!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Spiegazione dettagliata",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Suggerimento: aggiorna più slot di variabili consecutivamente premendo il tasto tab nell'input della chat dopo ogni sostituzione.",
 	"Title": "Titolo",
 	"Title (e.g. Tell me a fun fact)": "Titolo (ad esempio Dimmi un fatto divertente)",
@@ -702,6 +703,7 @@
 	"Today": "Oggi",
 	"Toggle settings": "Attiva/disattiva impostazioni",
 	"Toggle sidebar": "Attiva/disattiva barra laterale",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Avanzamento caricamento",
 	"URL Mode": "Modalità URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Usa '#' nell'input del prompt per caricare e selezionare i tuoi documenti.",
 	"Use Gravatar": "Usa Gravatar",
 	"Use Initials": "Usa iniziali",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 19 - 15
src/lib/i18n/locales/ja-JP/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "コンテンツを追加",
 	"Add content here": "ここへコンテンツを追加",
 	"Add custom prompt": "カスタムプロンプトを追加",
-	"Add Docs": "ドキュメントを追加",
 	"Add Files": "ファイルを追加",
 	"Add Memory": "メモリを追加",
 	"Add message": "メッセージを追加",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "管理者は全てのツールにアクセス出来ます。ユーザーはワークスペースのモデル毎に割り当てて下さい。",
 	"Advanced Parameters": "詳細パラメーター",
 	"Advanced Params": "高度なパラメータ",
-	"all": "すべて",
 	"All Documents": "全てのドキュメント",
 	"All Users": "すべてのユーザー",
-	"Allow": "許可",
 	"Allow Chat Deletion": "チャットの削除を許可",
 	"Allow Chat Editing": "チャットの編集を許可",
 	"Allow non-local voices": "ローカル以外のボイスを許可",
@@ -98,6 +95,7 @@
 	"Cancel": "キャンセル",
 	"Capabilities": "資格",
 	"Change Password": "パスワードを変更",
+	"Character": "",
 	"Chat": "チャット",
 	"Chat Background Image": "チャットの背景画像",
 	"Chat Bubble UI": "チャットバブルUI",
@@ -120,13 +118,13 @@
 	"Click here to select": "選択するにはここをクリックしてください",
 	"Click here to select a csv file.": "CSVファイルを選択するにはここをクリックしてください。",
 	"Click here to select a py file.": "Pythonスクリプトファイルを選択するにはここをクリックしてください。",
-	"Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。",
 	"Click here to upload a workflow.json file.": "workflow.jsonファイルをアップロードするにはここをクリックしてください。",
 	"click here.": "ここをクリックしてください。",
 	"Click on the user role button to change a user's role.": "ユーザーの役割を変更するには、ユーザー役割ボタンをクリックしてください。",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "クリップボードへの書き込み許可がありません。ブラウザ設定を確認し許可してください。",
 	"Clone": "クローン",
 	"Close": "閉じる",
+	"Code execution": "",
 	"Code formatted successfully": "コードフォーマットに成功しました",
 	"Collection": "コレクション",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "最後のコードブロックをコピー",
 	"Copy last response": "最後の応答をコピー",
 	"Copy Link": "リンクをコピー",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "クリップボードへのコピーが成功しました!",
 	"Create a model": "モデルを作成する",
 	"Create Account": "アカウントを作成",
@@ -180,14 +179,12 @@
 	"Default model updated": "デフォルトモデルが更新されました",
 	"Default Prompt Suggestions": "デフォルトのプロンプトの提案",
 	"Default User Role": "デフォルトのユーザー役割",
-	"delete": "削除",
 	"Delete": "削除",
 	"Delete a model": "モデルを削除",
 	"Delete All Chats": "すべてのチャットを削除",
 	"Delete chat": "チャットを削除",
 	"Delete Chat": "チャットを削除",
 	"Delete chat?": "チャットを削除しますか?",
-	"Delete Doc": "ドキュメントを削除しますか?",
 	"Delete function?": "Functionを削除しますか?",
 	"Delete prompt?": "プロンプトを削除しますか?",
 	"delete this link": "このリンクを削除します",
@@ -215,7 +212,6 @@
 	"Documentation": "ドキュメント",
 	"Documents": "ドキュメント",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "外部接続を行わず、データはローカルでホストされているサーバー上に安全に保持されます。",
-	"Don't Allow": "許可しない",
 	"Don't have an account?": "アカウントをお持ちではありませんか?",
 	"don't install random functions from sources you don't trust.": "信頼出来ないソースからランダムFunctionをインストールしないでください。",
 	"don't install random tools from sources you don't trust.": "信頼出来ないソースからランダムツールをインストールしないでください。",
@@ -224,10 +220,11 @@
 	"Download": "ダウンロード",
 	"Download canceled": "ダウンロードをキャンセルしました",
 	"Download Database": "データベースをダウンロード",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "会話を追加するには、ここにファイルをドロップしてください",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例: '30秒'、'10分'。有効な時間単位は '秒'、'分'、'時間' です。",
 	"Edit": "編集",
-	"Edit Doc": "ドキュメントを編集",
 	"Edit Memory": "メモリを編集",
 	"Edit User": "ユーザーを編集",
 	"ElevenLabs": "",
@@ -281,19 +278,20 @@
 	"Enter Your Password": "パスワードを入力してください",
 	"Enter Your Role": "ロールを入力してください",
 	"Error": "エラー",
+	"ERROR": "",
 	"Experimental": "実験的",
 	"Export": "エクスポート",
 	"Export All Chats (All Users)": "すべてのチャットをエクスポート (すべてのユーザー)",
 	"Export chat (.json)": "チャットをエクスポート(.json)",
 	"Export Chats": "チャットをエクスポート",
 	"Export Config to JSON File": "設定をJSONファイルでエクスポート",
-	"Export Documents Mapping": "ドキュメントマッピングをエクスポート",
 	"Export Functions": "Functionのエクスポート",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "モデルのエクスポート",
 	"Export Prompts": "プロンプトをエクスポート",
 	"Export Tools": "ツールのエクスポート",
 	"External Models": "外部モデル",
+	"Failed to add file.": "",
 	"Failed to create API Key.": "APIキーの作成に失敗しました。",
 	"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
 	"Failed to update settings": "設定アップデート失敗",
@@ -356,7 +354,6 @@
 	"Images": "画像",
 	"Import Chats": "チャットをインポート",
 	"Import Config from JSON File": "設定をJSONファイルからインポート",
-	"Import Documents Mapping": "ドキュメントマッピングをインポート",
 	"Import Functions": "Functionのインポート",
 	"Import Models": "モデルのインポート",
 	"Import Prompts": "プロンプトをインポート",
@@ -368,6 +365,7 @@
 	"Install from Github URL": "Github URLからインストール",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "インターフェース",
+	"Invalid file format.": "",
 	"Invalid Tag": "無効なタグ",
 	"January": "1月",
 	"join our Discord for help.": "ヘルプについては、Discord に参加してください。",
@@ -445,12 +443,13 @@
 	"More": "もっと見る",
 	"Move to Top": "",
 	"Name": "名前",
-	"Name Tag": "名前タグ",
 	"Name your model": "モデルに名前を付ける",
 	"New Chat": "新しいチャット",
 	"New Password": "新しいパスワード",
+	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "知識が見つかりません",
 	"No results found": "結果が見つかりません",
@@ -493,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Key が必要です。",
 	"or": "または",
 	"Other": "その他",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -545,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "再ランキングモデルを \"{{reranking_model}}\" に設定しました",
 	"Reset": "",
 	"Reset Upload Directory": "アップロードディレクトリをリセット",
-	"Reset Vector Storage": "ベクトルストレージをリセット",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "クリップボードへの応答の自動コピー",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "応答の分割",
@@ -568,7 +568,7 @@
 	"Search a model": "モデルを検索",
 	"Search Chats": "チャットの検索",
 	"Search Collection": "Collectionの検索",
-	"Search Documents": "ドキュメントを検索",
+	"search for tags": "",
 	"Search Functions": "Functionの検索",
 	"Search Knowledge": "知識の検索",
 	"Search Models": "モデル検索",
@@ -587,6 +587,7 @@
 	"Seed": "シード",
 	"Select a base model": "基本モデルの選択",
 	"Select a engine": "エンジンの選択",
+	"Select a file to view or drag and drop a file to upload": "",
 	"Select a function": "Functionの選択",
 	"Select a model": "モデルを選択",
 	"Select a pipeline": "パイプラインの選択",
@@ -597,7 +598,6 @@
 	"Select Knowledge": "知識の選択",
 	"Select model": "モデルを選択",
 	"Select only one model to call": "",
-	"Select/Add Files": "",
 	"Selected model(s) do not support image inputs": "一部のモデルは画像入力をサポートしていません",
 	"Send": "送信",
 	"Send a Message": "メッセージを送信",
@@ -641,6 +641,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "音声認識エラー: {{error}}",
 	"Speech-to-Text Engine": "音声テキスト変換エンジン",
+	"Stop": "",
 	"Stop Sequence": "ストップシーケンス",
 	"Stream Chat Response": "",
 	"STT Model": "STTモデル",
@@ -663,6 +664,7 @@
 	"Template": "テンプレート",
 	"Temporary Chat": "一時的なチャット",
 	"Text Completion": "テキスト補完",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "テキスト音声変換エンジン",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "ご意見ありがとうございます!",
@@ -681,6 +683,7 @@
 	"Thorough explanation": "詳細な説明",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ヒント: 各置換後にチャット入力で Tab キーを押すことで、複数の変数スロットを連続して更新できます。",
 	"Title": "タイトル",
 	"Title (e.g. Tell me a fun fact)": "タイトル (例: 楽しい事を教えて)",
@@ -698,6 +701,7 @@
 	"Today": "今日",
 	"Toggle settings": "設定を切り替え",
 	"Toggle sidebar": "サイドバーを切り替え",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -725,6 +729,7 @@
 	"Update and Copy Link": "リンクの更新とコピー",
 	"Update for the latest features and improvements.": "",
 	"Update password": "パスワードを更新",
+	"Updated": "",
 	"Updated at": "",
 	"Upload": "アップロード",
 	"Upload a GGUF model": "GGUF モデルをアップロード",
@@ -735,7 +740,6 @@
 	"Upload Progress": "アップロードの進行状況",
 	"URL Mode": "URL モード",
 	"Use '#' in the prompt input to load and include your knowledge.": "#を入力すると知識データを参照することが出来ます。",
-	"Use '#' in the prompt input to load and select your documents.": "プロンプト入力で '#' を使用して、ドキュメントを読み込んで選択します。",
 	"Use Gravatar": "Gravatar を使用する",
 	"Use Initials": "初期値を使用する",
 	"use_mlock (Ollama)": "",

+ 15 - 14
src/lib/i18n/locales/ka-GE/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "პირველადი მოთხოვნის დამატება",
-	"Add Docs": "დოკუმენტის დამატება",
 	"Add Files": "ფაილების დამატება",
 	"Add Memory": "მემორიის დამატება",
 	"Add message": "შეტყობინების დამატება",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "დამატებითი პარამეტრები",
 	"Advanced Params": "მოწინავე პარამები",
-	"all": "ყველა",
 	"All Documents": "ყველა დოკუმენტი",
 	"All Users": "ყველა მომხმარებელი",
-	"Allow": "ნების დართვა",
 	"Allow Chat Deletion": "მიმოწერის წაშლის დაშვება",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "გაუქმება",
 	"Capabilities": "შესაძლებლობები",
 	"Change Password": "პაროლის შეცვლა",
+	"Character": "",
 	"Chat": "მიმოწერა",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "ჩატის ბულბი",
@@ -120,13 +118,13 @@
 	"Click here to select": "ასარჩევად, დააკლიკე აქ",
 	"Click here to select a csv file.": "ასარჩევად, დააკლიკე აქ",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "დოკუმენტების ასარჩევად, დააკლიკე აქ",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "დააკლიკე აქ",
 	"Click on the user role button to change a user's role.": "დააკლიკეთ მომხმარებლის როლის ღილაკს რომ შეცვალოთ მომხმარების როლი",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "კლონი",
 	"Close": "დახურვა",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "ნაკრები",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "ბოლო ბლოკის კოპირება",
 	"Copy last response": "ბოლო პასუხის კოპირება",
 	"Copy Link": "კოპირება",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "კლავიატურაზე კოპირება წარმატებით დასრულდა",
 	"Create a model": "შექმენით მოდელი",
 	"Create Account": "ანგარიშის შექმნა",
@@ -180,14 +179,12 @@
 	"Default model updated": "დეფოლტ მოდელი განახლებულია",
 	"Default Prompt Suggestions": "დეფოლტ პრომპტი პირველი პირველი",
 	"Default User Role": "მომხმარებლის დეფოლტ როლი",
-	"delete": "წაშლა",
 	"Delete": "წაშლა",
 	"Delete a model": "მოდელის წაშლა",
 	"Delete All Chats": "ყველა ჩატის წაშლა",
 	"Delete chat": "შეტყობინების წაშლა",
 	"Delete Chat": "შეტყობინების წაშლა",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "ბმულის წაშლა",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "დოკუმენტები",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "არ ამყარებს გარე კავშირებს და თქვენი მონაცემები უსაფრთხოდ რჩება თქვენს ადგილობრივ სერვერზე.",
-	"Don't Allow": "არ დაუშვა",
 	"Don't have an account?": "არ გაქვს ანგარიში?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "ჩამოტვირთვა გაუქმებულია",
 	"Download canceled": "ჩამოტვირთვა გაუქმებულია",
 	"Download Database": "გადმოწერე მონაცემთა ბაზა",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "გადაიტანეთ ფაილები აქ, რათა დაამატოთ ისინი მიმოწერაში",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "მაგალითად, '30წ', '10მ'. მოქმედი დროის ერთეულები: 'წ', 'წთ', 'სთ'.",
 	"Edit": "რედაქტირება",
-	"Edit Doc": "დოკუმენტის ედიტირება",
 	"Edit Memory": "",
 	"Edit User": "მომხმარებლის ედიტირება",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "შეიყვანეთ თქვენი პაროლი",
 	"Enter Your Role": "შეიყვანეთ თქვენი როლი",
 	"Error": "შეცდომა",
+	"ERROR": "",
 	"Experimental": "ექსპერიმენტალური",
 	"Export": "ექსპორტი",
 	"Export All Chats (All Users)": "ექსპორტი ყველა ჩათი (ყველა მომხმარებელი)",
 	"Export chat (.json)": "",
 	"Export Chats": "მიმოწერის ექსპორტირება",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "დოკუმენტების კავშირის ექსპორტი",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "ექსპორტის მოდელები",
@@ -357,7 +354,6 @@
 	"Images": "სურათები",
 	"Import Chats": "მიმოწერების იმპორტი",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "დოკუმენტების კავშირის იმპორტი",
 	"Import Functions": "",
 	"Import Models": "იმპორტის მოდელები",
 	"Import Prompts": "მოთხოვნების იმპორტი",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "დააინსტალირეთ Github URL- დან",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "ინტერფეისი",
+	"Invalid file format.": "",
 	"Invalid Tag": "არასწორი ტეგი",
 	"January": "იანვარი",
 	"join our Discord for help.": "შეუერთდით ჩვენს Discord-ს დახმარებისთვის",
@@ -446,13 +443,13 @@
 	"More": "ვრცლად",
 	"Move to Top": "",
 	"Name": "სახელი",
-	"Name Tag": "სახელის ტეგი",
 	"Name your model": "დაასახელეთ თქვენი მოდელი",
 	"New Chat": "ახალი მიმოწერა",
 	"New Password": "ახალი პაროლი",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "ჩვენ ვერ პოულობით ნაპოვნი ჩაწერები",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Key აუცილებელია",
 	"or": "ან",
 	"Other": "სხვა",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "ვექტორული მეხსიერების გადატვირთვა",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "პასუხის ავტომატური კოპირება ბუფერში",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "მოდელის ძიება",
 	"Search Chats": "ჩატების ძებნა",
 	"Search Collection": "",
-	"Search Documents": "დოკუმენტების ძიება",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "საძიებო მოდელები",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "მეტყველების ამოცნობის შეცდომა: {{error}}",
 	"Speech-to-Text Engine": "ხმოვან-ტექსტური ძრავი",
+	"Stop": "",
 	"Stop Sequence": "შეჩერების თანმიმდევრობა",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "შაბლონი",
 	"Temporary Chat": "",
 	"Text Completion": "ტექსტის დასრულება",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "ტექსტურ-ხმოვანი ძრავი",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "მადლობა გამოხმაურებისთვის!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "ვრცლად აღწერა",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "რჩევა: განაახლეთ რამდენიმე ცვლადი სლოტი თანმიმდევრულად, ყოველი ჩანაცვლების შემდეგ ჩატის ღილაკზე დაჭერით.",
 	"Title": "სათაური",
 	"Title (e.g. Tell me a fun fact)": "სათაური (მაგ. გაიხსნე რაღაც ხარისხი)",
@@ -701,6 +702,7 @@
 	"Today": "დღეს",
 	"Toggle settings": "პარამეტრების გადართვა",
 	"Toggle sidebar": "გვერდითი ზოლის გადართვა",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "პროგრესის ატვირთვა",
 	"URL Mode": "URL რეჟიმი",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "პრომტში გამოიყენე '#' რომელიც გაიტანს დოკუმენტებს",
 	"Use Gravatar": "გამოიყენე Gravatar",
 	"Use Initials": "გამოიყენე ინიციალები",
 	"use_mlock (Ollama)": "use_mlock (ოლამა)",

+ 15 - 14
src/lib/i18n/locales/ko-KR/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "프롬프트 추가",
-	"Add Docs": "문서 추가",
 	"Add Files": "파일 추가",
 	"Add Memory": "메모리 추가",
 	"Add message": "메시지 추가",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "관리자는 항상 모든 도구에 접근할 수 있지만, 사용자는 워크스페이스에서 모델마다 도구를 할당받아야 합니다.",
 	"Advanced Parameters": "고급 파라미터",
 	"Advanced Params": "고급 파라미터",
-	"all": "모두",
 	"All Documents": "모든 문서",
 	"All Users": "모든 사용자",
-	"Allow": "허용",
 	"Allow Chat Deletion": "채팅 삭제 허용",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "외부 음성 허용",
@@ -98,6 +95,7 @@
 	"Cancel": "취소",
 	"Capabilities": "기능",
 	"Change Password": "비밀번호 변경",
+	"Character": "",
 	"Chat": "채팅",
 	"Chat Background Image": "채팅 배경 이미지",
 	"Chat Bubble UI": "버블형 채팅 UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "선택하려면 여기를 클릭하세요.",
 	"Click here to select a csv file.": "csv 파일을 선택하려면 여기를 클릭하세요.",
 	"Click here to select a py file.": "py 파일을 선택하려면 여기를 클릭하세요.",
-	"Click here to select documents.": "문서를 선택하려면 여기를 클릭하세요.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "여기를 클릭하세요.",
 	"Click on the user role button to change a user's role.": "사용자 역할 버튼을 클릭하여 사용자의 역할을 변경하세요.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "복제",
 	"Close": "닫기",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "컬렉션",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "마지막 코드 블록 복사",
 	"Copy last response": "마지막 응답 복사",
 	"Copy Link": "링크 복사",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "클립보드에 복사되었습니다!",
 	"Create a model": "모델 만들기",
 	"Create Account": "계정 만들기",
@@ -180,14 +179,12 @@
 	"Default model updated": "기본 모델이 업데이트되었습니다.",
 	"Default Prompt Suggestions": "기본 프롬프트 제안",
 	"Default User Role": "기본 사용자 역할",
-	"delete": "삭제",
 	"Delete": "삭제",
 	"Delete a model": "모델 삭제",
 	"Delete All Chats": "모든 채팅 삭제",
 	"Delete chat": "채팅 삭제",
 	"Delete Chat": "채팅 삭제",
 	"Delete chat?": "채팅을 삭제하겠습니까?",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "이 링크를 삭제합니다.",
@@ -215,7 +212,6 @@
 	"Documentation": "문서 조사",
 	"Documents": "문서",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "어떠한 외부 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.",
-	"Don't Allow": "허용 안 함",
 	"Don't have an account?": "계정이 없으신가요?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "다운로드",
 	"Download canceled": "다운로드 취소",
 	"Download Database": "데이터베이스 다운로드",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "대화에 추가할 파일을 여기에 드롭하세요.",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "예: '30s','10m'. 유효한 시간 단위는 's', 'm', 'h'입니다.",
 	"Edit": "편집",
-	"Edit Doc": "문서 편집",
 	"Edit Memory": "메모리 편집",
 	"Edit User": "사용자 편집",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "비밀번호 입력",
 	"Enter Your Role": "역할 입력",
 	"Error": "오류",
+	"ERROR": "",
 	"Experimental": "실험적",
 	"Export": "내보내기",
 	"Export All Chats (All Users)": "모든 채팅 내보내기(모든 사용자)",
 	"Export chat (.json)": "채팅 내보내기(.json)",
 	"Export Chats": "채팅 내보내기",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "문서 매핑 내보내기",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "모델 내보내기",
@@ -357,7 +354,6 @@
 	"Images": "이미지",
 	"Import Chats": "채팅 가져오기",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "문서 매핑 가져오기",
 	"Import Functions": "",
 	"Import Models": "모델 가져오기",
 	"Import Prompts": "프롬프트 가져오기",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Github URL에서 설치",
 	"Instant Auto-Send After Voice Transcription": "음성 변환 후 즉시 자동 전송",
 	"Interface": "인터페이스",
+	"Invalid file format.": "",
 	"Invalid Tag": "잘못된 태그",
 	"January": "1월",
 	"join our Discord for help.": "도움말을 보려면 Discord에 가입하세요.",
@@ -446,13 +443,13 @@
 	"More": "더보기",
 	"Move to Top": "",
 	"Name": "이름",
-	"Name Tag": "이름 태그",
 	"Name your model": "모델 이름 지정",
 	"New Chat": "새 채팅",
 	"New Password": "새 비밀번호",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "결과 없음",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/키가 필요합니다.",
 	"or": "또는",
 	"Other": "기타",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking 모델을 \"{{reranking_model}}\"로 설정",
 	"Reset": "초기화",
 	"Reset Upload Directory": "업로드 디렉토리 초기화",
-	"Reset Vector Storage": "벡터 스토리지 초기화",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "응답을 클립보드에 자동 복사",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "모델 검색",
 	"Search Chats": "채팅 검색",
 	"Search Collection": "",
-	"Search Documents": "문서 검색",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "모델 검색",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "음성 인식 오류: {{error}}",
 	"Speech-to-Text Engine": "음성-텍스트 변환 엔진",
+	"Stop": "",
 	"Stop Sequence": "중지 시퀀스",
 	"Stream Chat Response": "",
 	"STT Model": "STT 모델",
@@ -666,6 +665,7 @@
 	"Template": "템플릿",
 	"Temporary Chat": "",
 	"Text Completion": "텍스트 완성",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "텍스트-음성 변환 엔진",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "피드백 감사합니다!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "완전한 설명",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "팁: 각 대체 후 채팅 입력에서 탭 키를 눌러 여러 개의 변수 슬롯을 연속적으로 업데이트하세요.",
 	"Title": "제목",
 	"Title (e.g. Tell me a fun fact)": "제목 (예: 재미있는 사실을 알려주세요)",
@@ -701,6 +702,7 @@
 	"Today": "오늘",
 	"Toggle settings": "설정 전환",
 	"Toggle sidebar": "사이드바 전환",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "컨텍스트 새로 고침 시 유지할 토큰 수(num_keep)",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "업로드 진행 상황",
 	"URL Mode": "URL 모드",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "프롬프트 입력에서 '#'를 사용하여 문서를 로드하고 선택하세요.",
 	"Use Gravatar": "Gravatar 사용",
 	"Use Initials": "초성 사용",
 	"use_mlock (Ollama)": "use_mlock (올라마)",

+ 15 - 14
src/lib/i18n/locales/lt-LT/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Pridėti užklausos šabloną",
-	"Add Docs": "Pridėti dokumentų",
 	"Add Files": "Pridėti failus",
 	"Add Memory": "Pridėti atminį",
 	"Add message": "Pridėti žinutę",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratoriai visada turi visus įrankius. Naudotojai turi tuėti prieigą prie dokumentų per modelių nuostatas",
 	"Advanced Parameters": "Pažengę nustatymai",
 	"Advanced Params": "Pažengę nustatymai",
-	"all": "visi",
 	"All Documents": "Visi dokumentai",
 	"All Users": "Visi naudotojai",
-	"Allow": "Leisti",
 	"Allow Chat Deletion": "Leisti pokalbių ištrynimą",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Leisti nelokalius balsus",
@@ -98,6 +95,7 @@
 	"Cancel": "Atšaukti",
 	"Capabilities": "Gebėjimai",
 	"Change Password": "Keisti slaptažodį",
+	"Character": "",
 	"Chat": "Pokalbis",
 	"Chat Background Image": "Pokalbio galinė užsklanda",
 	"Chat Bubble UI": "Pokalbio burbulo sąsaja",
@@ -120,13 +118,13 @@
 	"Click here to select": "Spauskite čia norėdami pasirinkti",
 	"Click here to select a csv file.": "Spauskite čia tam, kad pasirinkti csv failą",
 	"Click here to select a py file.": "Spauskite čia norėdami pasirinkti py failą",
-	"Click here to select documents.": "Spauskite čia norėdami pasirinkti dokumentus.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "paspauskite čia.",
 	"Click on the user role button to change a user's role.": "Paspauskite ant naudotojo rolės mygtuko tam, kad pakeisti naudotojo rolę.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Iškarpinės naudojimas neleidžiamas naršyklės.",
 	"Clone": "Klonuoti",
 	"Close": "Uždaryti",
+	"Code execution": "",
 	"Code formatted successfully": "Kodas suformatuotas sėkmingai",
 	"Collection": "Kolekcija",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopijuoti paskutinį kodo bloką",
 	"Copy last response": "Kopijuoti paskutinį atsakymą",
 	"Copy Link": "Kopijuoti nuorodą",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !",
 	"Create a model": "Sukurti modelį",
 	"Create Account": "Créer un compte",
@@ -180,14 +179,12 @@
 	"Default model updated": "Numatytasis modelis atnaujintas",
 	"Default Prompt Suggestions": "Numatytieji užklausų pasiūlymai",
 	"Default User Role": "Numatytoji naudotojo rolė",
-	"delete": "ištrinti",
 	"Delete": "ištrinti",
 	"Delete a model": "Ištrinti modėlį",
 	"Delete All Chats": "Ištrinti visus pokalbius",
 	"Delete chat": "Išrinti pokalbį",
 	"Delete Chat": "Ištrinti pokalbį",
 	"Delete chat?": "Ištrinti pokalbį?",
-	"Delete Doc": "Ištrinti dokumentą",
 	"Delete function?": "Ištrinti funkciją",
 	"Delete prompt?": "Ištrinti užklausą?",
 	"delete this link": "Ištrinti nuorodą",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentacija",
 	"Documents": "Dokumentai",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "neturi jokių išorinių ryšių ir duomenys lieka serveryje.",
-	"Don't Allow": "Neleisti",
 	"Don't have an account?": "Neturite paskyros?",
 	"don't install random functions from sources you don't trust.": "neinstaliuokite funkcijų iš nepatikimų šaltinių",
 	"don't install random tools from sources you don't trust.": "neinstaliuokite įrankių iš nepatikimų šaltinių",
@@ -224,10 +220,11 @@
 	"Download": "Parsisiųsti",
 	"Download canceled": "Parsisiuntimas atšauktas",
 	"Download Database": "Parsisiųsti duomenų bazę",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Įkelkite dokumentus čia, kad juos pridėti į pokalbį",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "pvz. '30s', '10m'. Laiko vienetai yra 's', 'm', 'h'.",
 	"Edit": "Redaguoti",
-	"Edit Doc": "Redaguoti dokumentą",
 	"Edit Memory": "Koreguoti atminį",
 	"Edit User": "Redaguoti naudotoją",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Įveskite slaptažodį",
 	"Enter Your Role": "Įveskite savo rolę",
 	"Error": "Klaida",
+	"ERROR": "",
 	"Experimental": "Eksperimentinis",
 	"Export": "Eksportuoti",
 	"Export All Chats (All Users)": "Eksportuoti visų naudotojų visus pokalbius",
 	"Export chat (.json)": "Eksportuoti pokalbį (.json)",
 	"Export Chats": "Eksportuoti pokalbius",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Eksportuoti dokumentų žemėlapį",
 	"Export Functions": "Eksportuoti funkcijas",
 	"Export LiteLLM config.yaml": "Eksportuoti LiteLLM config.yaml",
 	"Export Models": "Eksportuoti modelius",
@@ -357,7 +354,6 @@
 	"Images": "Vaizdai",
 	"Import Chats": "Importuoti pokalbius",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importuoti dokumentų žemėlapį",
 	"Import Functions": "Importuoti funkcijas",
 	"Import Models": "Importuoti modelius",
 	"Import Prompts": "Importuoti užklausas",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instaliuoti Github nuorodą",
 	"Instant Auto-Send After Voice Transcription": "Siųsti iškart po balso transkripcijos",
 	"Interface": "Sąsaja",
+	"Invalid file format.": "",
 	"Invalid Tag": "Neteisinga žyma",
 	"January": "Sausis",
 	"join our Discord for help.": "prisijunkite prie mūsų Discord.",
@@ -446,13 +443,13 @@
 	"More": "Daugiau",
 	"Move to Top": "",
 	"Name": "Pavadinimas",
-	"Name Tag": "Žymos pavadinimas",
 	"Name your model": "Pavadinkite savo modelį",
 	"New Chat": "Naujas pokalbis",
 	"New Password": "Naujas slaptažodis",
 	"No content found": "",
 	"No content to speak": "Nėra turinio kalbėjimui",
 	"No file selected": "Nėra pasirinktų dokumentų",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Rezultatų nerasta",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI API nuoroda ir raktas būtini",
 	"or": "arba",
 	"Other": "Kita",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Nustatytas rereanking modelis: \"{{reranking_model}}\"",
 	"Reset": "Atkurti",
 	"Reset Upload Directory": "Atkurti įkėlimų direktoiją",
-	"Reset Vector Storage": "Reinicializuoti vektorių atmintį",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Automatiškai nukopijuoti atsakymą",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Naršyklė neleidžia siųsti pranešimų",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Ieškoti modelio",
 	"Search Chats": "Ieškoti pokalbiuose",
 	"Search Collection": "",
-	"Search Documents": "Ieškoti dokumentų",
+	"search for tags": "",
 	"Search Functions": "Ieškoti funkcijų",
 	"Search Knowledge": "",
 	"Search Models": "Ieškoti modelių",
@@ -646,6 +644,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Balso atpažinimo problema: {{error}}",
 	"Speech-to-Text Engine": "Balso atpažinimo modelis",
+	"Stop": "",
 	"Stop Sequence": "Baigt sekvenciją",
 	"Stream Chat Response": "",
 	"STT Model": "STT modelis",
@@ -668,6 +667,7 @@
 	"Template": "Modelis",
 	"Temporary Chat": "",
 	"Text Completion": "Teksto pildymas",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Balso sintezės modelis",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Ačiū už atsiliepimus",
@@ -686,6 +686,7 @@
 	"Thorough explanation": "Platus paaiškinimas",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Reiklainga Tika serverio nuorodą",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Jei norite pakeisti keletą kintamųjų vieną po kitos, spauskite Tab",
 	"Title": "Pavadinimas",
 	"Title (e.g. Tell me a fun fact)": "Pavadinimas",
@@ -703,6 +704,7 @@
 	"Today": "Šiandien",
 	"Toggle settings": "Atverti/užverti parametrus",
 	"Toggle sidebar": "Atverti/užverti šoninį meniu",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Žetonų kiekis konteksto atnaujinimui (num_keep)",
 	"Tool created successfully": "Įrankis sukurtas sėkmingai",
 	"Tool deleted successfully": "Įrankis ištrintas sėkmingai",
@@ -741,7 +743,6 @@
 	"Upload Progress": "Įkėlimo progresas",
 	"URL Mode": "URL režimas",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Naudokite '#' norėdami naudoti dokumentą.",
 	"Use Gravatar": "Naudoti Gravatar",
 	"Use Initials": "Naudotojo inicialai",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/ms-MY/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Tambah arahan khusus",
-	"Add Docs": "Tambah Dokumen",
 	"Add Files": "Tambah Fail",
 	"Add Memory": "Tambah Memori",
 	"Add message": "Tambah Mesej",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Pentadbir mempunyai akses kepada semua alat pada setiap masa; pengguna memerlukan alat yang ditetapkan mengikut model dalam ruang kerja.",
 	"Advanced Parameters": "Parameter Lanjutan",
 	"Advanced Params": "Parameter Lanjutan",
-	"all": "semua",
 	"All Documents": "Semua Dokumen",
 	"All Users": "Semua Pengguna",
-	"Allow": "Benarkan",
 	"Allow Chat Deletion": "Benarkan Penghapusan Perbualan",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Benarkan suara bukan tempatan ",
@@ -98,6 +95,7 @@
 	"Cancel": "Batal",
 	"Capabilities": "Keupayaan",
 	"Change Password": "Tukar Kata Laluan",
+	"Character": "",
 	"Chat": "Perbualan",
 	"Chat Background Image": "Imej Latar Belakang Perbualan",
 	"Chat Bubble UI": "Antaramuka Buih Perbualan",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klik disini untuk memilih",
 	"Click here to select a csv file.": "Klik disini untuk memilih fail csv",
 	"Click here to select a py file.": "Klik disini untuk memilih fail py",
-	"Click here to select documents.": "Klik disini untuk memilih dokumen",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "klik disini.",
 	"Click on the user role button to change a user's role.": "Klik pada butang peranan pengguna untuk menukar peranan pengguna",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Kebenaran untuk menulis di papan klip ditolak. Sila semak tetapan pelayan web anda untuk memberikan akses yang diperlukan",
 	"Clone": "Klon",
 	"Close": "Tutup",
+	"Code execution": "",
 	"Code formatted successfully": "Kod berjaya diformatkan",
 	"Collection": "Koleksi",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Salin Blok Kod Terakhir",
 	"Copy last response": "Salin Respons Terakhir",
 	"Copy Link": "Salin Pautan",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Menyalin ke papan klip berjaya!",
 	"Create a model": "Cipta model",
 	"Create Account": "Cipta Akaun",
@@ -180,14 +179,12 @@
 	"Default model updated": "Model lalai dikemas kini",
 	"Default Prompt Suggestions": "Cadangan Gesaan Lalai",
 	"Default User Role": "Peranan Pengguna Lalai",
-	"delete": "padam",
 	"Delete": "Padam",
 	"Delete a model": "Padam Model",
 	"Delete All Chats": "Padam Semua Perbualan",
 	"Delete chat": "Padam perbualan",
 	"Delete Chat": "Padam Perbualan",
 	"Delete chat?": "Padam perbualan?",
-	"Delete Doc": "Padam Dokumen",
 	"Delete function?": "Padam fungsi?",
 	"Delete prompt?": "Padam Gesaan?",
 	"delete this link": "Padam pautan ini?",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentasi",
 	"Documents": "Dokumen",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat sebarang sambungan luaran, dan data anda kekal selamat pada pelayan yang dihoskan ditempat anda",
-	"Don't Allow": "Tidak Dibenarkan",
 	"Don't have an account?": "Anda tidak mempunyai akaun?",
 	"don't install random functions from sources you don't trust.": "jangan pasang mana-mana fungsi daripada sumber yang anda tidak percayai.",
 	"don't install random tools from sources you don't trust.": "jangan pasang mana-mana alat daripada sumber yang anda tidak percayai.",
@@ -224,10 +220,11 @@
 	"Download": "Muat Turun",
 	"Download canceled": "Muat Turun dibatalkan",
 	"Download Database": "Muat turun Pangkalan Data",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Letakkan mana-mana fail di sini untuk ditambahkan pada perbualan",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "cth '30s','10m'. Unit masa yang sah ialah 's', 'm', 'h'.",
 	"Edit": "Edit",
-	"Edit Doc": "Edit Dokumen",
 	"Edit Memory": "Edit Memori",
 	"Edit User": "Edit Penggunal",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Masukkan Kata Laluan Anda",
 	"Enter Your Role": "Masukkan Peranan Anda",
 	"Error": "Ralat",
+	"ERROR": "",
 	"Experimental": "Percubaan",
 	"Export": "Eksport",
 	"Export All Chats (All Users)": "Eksport Semua Perbualan (Semua Pengguna)",
 	"Export chat (.json)": "Eksport perbualan (.json)",
 	"Export Chats": "Eksport Perbualan",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Eksport Pemetaan Dokumen",
 	"Export Functions": "Eksport Fungsi",
 	"Export LiteLLM config.yaml": "Eksport LiteLLM config.yaml",
 	"Export Models": "Eksport Model",
@@ -357,7 +354,6 @@
 	"Images": "Imej",
 	"Import Chats": "Import Perbualan",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Import Pemetaan Dokumen",
 	"Import Functions": "Import Fungsi",
 	"Import Models": "Import Model",
 	"Import Prompts": "Import Gesaan",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Pasang daripada URL Github",
 	"Instant Auto-Send After Voice Transcription": "Hantar Secara Automatik Dengan Segera Selepas Transkripsi Suara",
 	"Interface": "Antaramuka",
+	"Invalid file format.": "",
 	"Invalid Tag": "Tag tidak sah",
 	"January": "Januari",
 	"join our Discord for help.": "sertai Discord kami untuk mendapatkan bantuan.",
@@ -446,13 +443,13 @@
 	"More": "Lagi",
 	"Move to Top": "",
 	"Name": "Nama",
-	"Name Tag": "Nama Tag",
 	"Name your model": "Namakan Model Anda",
 	"New Chat": "Perbualan Baru",
 	"New Password": "Kata Laluan Baru",
 	"No content found": "",
 	"No content to speak": "Tiada kandungan untuk bercakap",
 	"No file selected": "Tiada fail dipilih",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Tiada keputusan dijumpai",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Kekunci OpenAI diperlukan",
 	"or": "atau",
 	"Other": "Lain-lain",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Model 'Reranking' ditetapkan kepada \"{{reranking_model}}\"",
 	"Reset": "Tetapkan Semula",
 	"Reset Upload Directory": "Tetapkan Semula Direktori Muat Naik",
-	"Reset Vector Storage": "Tetapkan Semula Storan Vektor",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Salin Response secara Automatik ke Papan Klip",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Pemberitahuan respons tidak boleh diaktifkan kerana kebenaran tapak web tidak diberi. Sila lawati tetapan pelayar web anda untuk memberikan akses yang diperlukan.",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Cari Model",
 	"Search Chats": "Cari Perbualan",
 	"Search Collection": "",
-	"Search Documents": "Carian Dokumen",
+	"search for tags": "",
 	"Search Functions": "Carian Fungsi",
 	"Search Knowledge": "",
 	"Search Models": "Carian Model",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Ralat pengecaman pertuturan: {{error}}",
 	"Speech-to-Text Engine": "Enjin Ucapan-ke-Teks",
+	"Stop": "",
 	"Stop Sequence": "Jujukan Henti",
 	"Stream Chat Response": "",
 	"STT Model": "Model STT",
@@ -666,6 +665,7 @@
 	"Template": "Templat",
 	"Temporary Chat": "",
 	"Text Completion": "Penyiapan Teks",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Enjin Teks-ke-Ucapan",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Terima kasih atas maklum balas anda!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Penjelasan menyeluruh",
 	"Tika": "Tika",
 	"Tika Server URL required.": "URL Pelayan Tika diperlukan.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Petua: Kemas kini berbilang slot pembolehubah secara berturut-turut dengan menekan kekunci tab dalam input perbualan selepas setiap penggantian.",
 	"Title": "Tajuk",
 	"Title (e.g. Tell me a fun fact)": "Tajuk (cth Beritahu saya fakta yang menyeronokkan)",
@@ -701,6 +702,7 @@
 	"Today": "Hari Ini",
 	"Toggle settings": "Suis Tetapan ",
 	"Toggle sidebar": "Suis Bar Sisi",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Token Untuk Teruskan Dalam Muat Semula Konteks ( num_keep )",
 	"Tool created successfully": "Alat berjaya dibuat",
 	"Tool deleted successfully": "Alat berjaya dipadamkan",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Kemajuan Muatnaik",
 	"URL Mode": "Mod URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Gunakan '#' dalam input gesaan untuk memuatkan dan memilih dokumen anda",
 	"Use Gravatar": "Gunakan Gravatar",
 	"Use Initials": "Gunakan nama pendek",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/nb-NO/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Legg til egendefinert prompt",
-	"Add Docs": "Legg til dokumenter",
 	"Add Files": "Legg til filer",
 	"Add Memory": "Legg til minne",
 	"Add message": "Legg til melding",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorer har alltid tilgang til alle verktøy, mens brukere må få tildelt verktøy for hver enkelt modell i arbeidsområdet.",
 	"Advanced Parameters": "Avanserte parametere",
 	"Advanced Params": "Avanserte parametere",
-	"all": "alle",
 	"All Documents": "Alle dokumenter",
 	"All Users": "Alle brukere",
-	"Allow": "Tillat",
 	"Allow Chat Deletion": "Tillat sletting av chatter",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Tillat ikke-lokale stemmer",
@@ -98,6 +95,7 @@
 	"Cancel": "Avbryt",
 	"Capabilities": "Muligheter",
 	"Change Password": "Endre passord",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "Bakgrunnsbilde for chat",
 	"Chat Bubble UI": "Chat-boble UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klikk her for å velge",
 	"Click here to select a csv file.": "Klikk her for å velge en csv-fil.",
 	"Click here to select a py file.": "Klikk her for å velge en py-fil.",
-	"Click here to select documents.": "Klikk her for å velge dokumenter.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "klikk her.",
 	"Click on the user role button to change a user's role.": "Klikk på brukerrolle-knappen for å endre en brukers rolle.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Skrivetilgang til utklippstavlen ble avslått. Kontroller nettleserinnstillingene for å gi nødvendig tillatelse.",
 	"Clone": "Klon",
 	"Close": "Lukk",
+	"Code execution": "",
 	"Code formatted successfully": "Koden ble formatert",
 	"Collection": "Samling",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopier siste kodeblokk",
 	"Copy last response": "Kopier siste svar",
 	"Copy Link": "Kopier lenke",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Kopiering til utklippstavlen var vellykket!",
 	"Create a model": "Lag en modell",
 	"Create Account": "Opprett konto",
@@ -180,14 +179,12 @@
 	"Default model updated": "Standardmodell oppdatert",
 	"Default Prompt Suggestions": "Standard promptforslag",
 	"Default User Role": "Standard brukerrolle",
-	"delete": "slett",
 	"Delete": "Slett",
 	"Delete a model": "Slett en modell",
 	"Delete All Chats": "Slett alle chatter",
 	"Delete chat": "Slett chat",
 	"Delete Chat": "Slett chat",
 	"Delete chat?": "Slett chat?",
-	"Delete Doc": "Slett dokument",
 	"Delete function?": "Slett funksjon?",
 	"Delete prompt?": "Slett prompt?",
 	"delete this link": "slett denne lenken",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentasjon",
 	"Documents": "Dokumenter",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "har ingen tilkobling til eksterne tjenester, og dataene dine blir værende sikkert på din lokale tjener.",
-	"Don't Allow": "Ikke tillat",
 	"Don't have an account?": "Har du ikke en konto?",
 	"don't install random functions from sources you don't trust.": "ikke installer tilfeldige funksjoner fra kilder du ikke stoler på.",
 	"don't install random tools from sources you don't trust.": "ikke installer tilfeldige verktøy fra kilder du ikke stoler på.",
@@ -224,10 +220,11 @@
 	"Download": "Last ned",
 	"Download canceled": "Nedlasting avbrutt",
 	"Download Database": "Last ned database",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Slipp filer her for å legge dem til i samtalen",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "f.eks. '30s','10m'. Gyldige tidsenheter er 's', 'm', 't'.",
 	"Edit": "Rediger",
-	"Edit Doc": "Rediger dokument",
 	"Edit Memory": "Rediger minne",
 	"Edit User": "Rediger bruker",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Skriv inn ditt passord",
 	"Enter Your Role": "Skriv inn din rolle",
 	"Error": "Feil",
+	"ERROR": "",
 	"Experimental": "Eksperimentell",
 	"Export": "Eksporter",
 	"Export All Chats (All Users)": "Eksporter alle chatter (alle brukere)",
 	"Export chat (.json)": "Eksporter chat (.json)",
 	"Export Chats": "Eksporter chatter",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Eksporter dokumentkartlegging",
 	"Export Functions": "Eksporter funksjoner",
 	"Export LiteLLM config.yaml": "Eksporter LiteLLM config.yaml",
 	"Export Models": "Eksporter modeller",
@@ -357,7 +354,6 @@
 	"Images": "Bilder",
 	"Import Chats": "Importer chatter",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importer dokumentkartlegging",
 	"Import Functions": "Funksjoner",
 	"Import Models": "Importer modeller",
 	"Import Prompts": "Importer prompts",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Installer fra Github-URL",
 	"Instant Auto-Send After Voice Transcription": "Direkte autosending etter stemmegjenkjenning",
 	"Interface": "Grensesnitt",
+	"Invalid file format.": "",
 	"Invalid Tag": "Ugyldig tag",
 	"January": "januar",
 	"join our Discord for help.": "bli med i vår Discord for hjelp.",
@@ -446,13 +443,13 @@
 	"More": "Mer",
 	"Move to Top": "",
 	"Name": "Navn",
-	"Name Tag": "Navnetag",
 	"Name your model": "Gi modellen din et navn",
 	"New Chat": "Ny chat",
 	"New Password": "Nytt passord",
 	"No content found": "",
 	"No content to speak": "Mangler innhold for tale",
 	"No file selected": "Ingen fil valgt",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Ingen resultater funnet",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/nøkkel kreves.",
 	"or": "eller",
 	"Other": "Annet",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking-modell satt til \"{{reranking_model}}\"",
 	"Reset": "Tilbakestill",
 	"Reset Upload Directory": "Tilbakestill opplastingskatalog",
-	"Reset Vector Storage": "Tilbakestill vektorlagring",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Respons auto-kopi til utklippstavle",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Respons-varsler kan ikke aktiveres da nettstedsrettighetene er nektet. Vennligst se nettleserinnstillingene dine for å gi nødvendig tilgang.",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Søk en modell",
 	"Search Chats": "Søk chatter",
 	"Search Collection": "",
-	"Search Documents": "Søk dokumenter",
+	"search for tags": "",
 	"Search Functions": "Søk funksjoner",
 	"Search Knowledge": "",
 	"Search Models": "Søk modeller",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Feil ved talegjenkjenning: {{error}}",
 	"Speech-to-Text Engine": "Tale-til-tekst-motor",
+	"Stop": "",
 	"Stop Sequence": "Stoppsekvens",
 	"Stream Chat Response": "",
 	"STT Model": "STT-modell",
@@ -666,6 +665,7 @@
 	"Template": "Mal",
 	"Temporary Chat": "",
 	"Text Completion": "Tekstfullføring",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Tekst-til-tale-motor",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Takk for tilbakemeldingen!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Grundig forklaring",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Tika Server-URL kreves.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Oppdater flere variabelplasser etter hverandre ved å trykke på tab-tasten i chatinputen etter hver erstatning.",
 	"Title": "Tittel",
 	"Title (e.g. Tell me a fun fact)": "Tittel (f.eks. Fortell meg et morsomt faktum)",
@@ -701,6 +702,7 @@
 	"Today": "I dag",
 	"Toggle settings": "Veksle innstillinger",
 	"Toggle sidebar": "Veksle sidefelt",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokens å beholde ved kontekstoppdatering (num_keep)",
 	"Tool created successfully": "Verktøy opprettet",
 	"Tool deleted successfully": "Verktøy slettet",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Opplastingsfremdrift",
 	"URL Mode": "URL-modus",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Bruk '#' i prompt-input for å laste og velge dokumentene dine.",
 	"Use Gravatar": "Bruk Gravatar",
 	"Use Initials": "Bruk initialer",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/nl-NL/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Voeg een aangepaste prompt toe",
-	"Add Docs": "Voeg Docs toe",
 	"Add Files": "Voege Bestanden toe",
 	"Add Memory": "Voeg Geheugen toe",
 	"Add message": "Voeg bericht toe",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Geavanceerde Parameters",
 	"Advanced Params": "Geavanceerde parameters",
-	"all": "alle",
 	"All Documents": "Alle Documenten",
 	"All Users": "Alle Gebruikers",
-	"Allow": "Toestaan",
 	"Allow Chat Deletion": "Sta Chat Verwijdering toe",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Annuleren",
 	"Capabilities": "Mogelijkheden",
 	"Change Password": "Wijzig Wachtwoord",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Chat Bubble UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klik hier om te selecteren",
 	"Click here to select a csv file.": "Klik hier om een csv file te selecteren.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Klik hier om documenten te selecteren",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "klik hier.",
 	"Click on the user role button to change a user's role.": "Klik op de gebruikersrol knop om de rol van een gebruiker te wijzigen.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Kloon",
 	"Close": "Sluiten",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Verzameling",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopieer laatste code blok",
 	"Copy last response": "Kopieer laatste antwoord",
 	"Copy Link": "Kopieer Link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Kopiëren naar klembord was succesvol!",
 	"Create a model": "Een model maken",
 	"Create Account": "Maak Account",
@@ -180,14 +179,12 @@
 	"Default model updated": "Standaard model bijgewerkt",
 	"Default Prompt Suggestions": "Standaard Prompt Suggesties",
 	"Default User Role": "Standaard Gebruikersrol",
-	"delete": "verwijderen",
 	"Delete": "Verwijderen",
 	"Delete a model": "Verwijder een model",
 	"Delete All Chats": "Verwijder alle chats",
 	"Delete chat": "Verwijder chat",
 	"Delete Chat": "Verwijder Chat",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "verwijder deze link",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Documenten",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "maakt geen externe verbindingen, en je gegevens blijven veilig op je lokaal gehoste server.",
-	"Don't Allow": "Niet Toestaan",
 	"Don't have an account?": "Heb je geen account?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Download",
 	"Download canceled": "Download geannuleerd",
 	"Download Database": "Download Database",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Sleep bestanden hier om toe te voegen aan het gesprek",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "bijv. '30s', '10m'. Geldige tijdseenheden zijn 's', 'm', 'h'.",
 	"Edit": "Wijzig",
-	"Edit Doc": "Wijzig Doc",
 	"Edit Memory": "",
 	"Edit User": "Wijzig Gebruiker",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Voer je Wachtwoord in",
 	"Enter Your Role": "Voer je Rol in",
 	"Error": "Fout",
+	"ERROR": "",
 	"Experimental": "Experimenteel",
 	"Export": "Exporteren",
 	"Export All Chats (All Users)": "Exporteer Alle Chats (Alle Gebruikers)",
 	"Export chat (.json)": "",
 	"Export Chats": "Exporteer Chats",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exporteer Documenten Mapping",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Modellen exporteren",
@@ -357,7 +354,6 @@
 	"Images": "Afbeeldingen",
 	"Import Chats": "Importeer Chats",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importeer Documenten Mapping",
 	"Import Functions": "",
 	"Import Models": "Modellen importeren",
 	"Import Prompts": "Importeer Prompts",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Installeren vanaf Github-URL",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Interface",
+	"Invalid file format.": "",
 	"Invalid Tag": "Ongeldige Tag",
 	"January": "Januari",
 	"join our Discord for help.": "join onze Discord voor hulp.",
@@ -446,13 +443,13 @@
 	"More": "Meer",
 	"Move to Top": "",
 	"Name": "Naam",
-	"Name Tag": "Naam Tag",
 	"Name your model": "Geef uw model een naam",
 	"New Chat": "Nieuwe Chat",
 	"New Password": "Nieuw Wachtwoord",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Geen resultaten gevonden",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Sleutel vereist.",
 	"or": "of",
 	"Other": "Andere",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking model ingesteld op \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Reset Vector Opslag",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Antwoord Automatisch Kopiëren naar Klembord",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Zoek een model",
 	"Search Chats": "Chats zoeken",
 	"Search Collection": "",
-	"Search Documents": "Zoek Documenten",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Modellen zoeken",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Spraakherkenning fout: {{error}}",
 	"Speech-to-Text Engine": "Spraak-naar-tekst Engine",
+	"Stop": "",
 	"Stop Sequence": "Stop Sequentie",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "Template",
 	"Temporary Chat": "",
 	"Text Completion": "Tekst Aanvulling",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Tekst-naar-Spraak Engine",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Bedankt voor uw feedback!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Gevorderde uitleg",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tip: Werk meerdere variabele slots achtereenvolgens bij door op de tab-toets te drukken in de chat input na elke vervanging.",
 	"Title": "Titel",
 	"Title (e.g. Tell me a fun fact)": "Titel (bv. Vertel me een leuke gebeurtenis)",
@@ -701,6 +702,7 @@
 	"Today": "Vandaag",
 	"Toggle settings": "Wissel instellingen",
 	"Toggle sidebar": "Wissel sidebar",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Upload Voortgang",
 	"URL Mode": "URL Modus",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Gebruik '#' in de prompt input om je documenten te laden en te selecteren.",
 	"Use Gravatar": "Gebruik Gravatar",
 	"Use Initials": "Gebruik Initials",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/pa-IN/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "ਕਸਟਮ ਪ੍ਰੰਪਟ ਸ਼ਾਮਲ ਕਰੋ",
-	"Add Docs": "ਡਾਕੂਮੈਂਟ ਸ਼ਾਮਲ ਕਰੋ",
 	"Add Files": "ਫਾਈਲਾਂ ਸ਼ਾਮਲ ਕਰੋ",
 	"Add Memory": "ਮਿਹਾਨ ਸ਼ਾਮਲ ਕਰੋ",
 	"Add message": "ਸੁਨੇਹਾ ਸ਼ਾਮਲ ਕਰੋ",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "ਉੱਚ ਸਤਰ ਦੇ ਪੈਰਾਮੀਟਰ",
 	"Advanced Params": "ਐਡਵਾਂਸਡ ਪਰਮਜ਼",
-	"all": "ਸਾਰੇ",
 	"All Documents": "ਸਾਰੇ ਡਾਕੂਮੈਂਟ",
 	"All Users": "ਸਾਰੇ ਉਪਭੋਗਤਾ",
-	"Allow": "ਅਨੁਮਤੀ",
 	"Allow Chat Deletion": "ਗੱਲਬਾਤ ਮਿਟਾਉਣ ਦੀ ਆਗਿਆ ਦਿਓ",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "ਰੱਦ ਕਰੋ",
 	"Capabilities": "ਸਮਰੱਥਾਵਾਂ",
 	"Change Password": "ਪਾਸਵਰਡ ਬਦਲੋ",
+	"Character": "",
 	"Chat": "ਗੱਲਬਾਤ",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "ਗੱਲਬਾਤ ਬਬਲ UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ",
 	"Click here to select a csv file.": "CSV ਫਾਈਲ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "ਡਾਕੂਮੈਂਟ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।",
 	"Click on the user role button to change a user's role.": "ਉਪਭੋਗਤਾ ਦੀ ਭੂਮਿਕਾ ਬਦਲਣ ਲਈ ਉਪਭੋਗਤਾ ਭੂਮਿਕਾ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "ਕਲੋਨ",
 	"Close": "ਬੰਦ ਕਰੋ",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "ਸੰਗ੍ਰਹਿ",
 	"ComfyUI": "ਕੰਫੀਯੂਆਈ",
@@ -155,6 +153,7 @@
 	"Copy last code block": "ਆਖਰੀ ਕੋਡ ਬਲਾਕ ਨੂੰ ਕਾਪੀ ਕਰੋ",
 	"Copy last response": "ਆਖਰੀ ਜਵਾਬ ਨੂੰ ਕਾਪੀ ਕਰੋ",
 	"Copy Link": "ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰਨਾ ਸਫਲ ਰਿਹਾ!",
 	"Create a model": "ਇੱਕ ਮਾਡਲ ਬਣਾਓ",
 	"Create Account": "ਖਾਤਾ ਬਣਾਓ",
@@ -180,14 +179,12 @@
 	"Default model updated": "ਮੂਲ ਮਾਡਲ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ",
 	"Default Prompt Suggestions": "ਮੂਲ ਪ੍ਰੰਪਟ ਸੁਝਾਅ",
 	"Default User Role": "ਮੂਲ ਉਪਭੋਗਤਾ ਭੂਮਿਕਾ",
-	"delete": "ਮਿਟਾਓ",
 	"Delete": "ਮਿਟਾਓ",
 	"Delete a model": "ਇੱਕ ਮਾਡਲ ਮਿਟਾਓ",
 	"Delete All Chats": "ਸਾਰੀਆਂ ਚੈਟਾਂ ਨੂੰ ਮਿਟਾਓ",
 	"Delete chat": "ਗੱਲਬਾਤ ਮਿਟਾਓ",
 	"Delete Chat": "ਗੱਲਬਾਤ ਮਿਟਾਓ",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "ਇਸ ਲਿੰਕ ਨੂੰ ਮਿਟਾਓ",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "ਡਾਕੂਮੈਂਟ",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ਕੋਈ ਬਾਹਰੀ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਸਥਾਨਕ ਸਰਵਰ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰਹਿੰਦਾ ਹੈ।",
-	"Don't Allow": "ਆਗਿਆ ਨਾ ਦਿਓ",
 	"Don't have an account?": "ਖਾਤਾ ਨਹੀਂ ਹੈ?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "ਡਾਊਨਲੋਡ",
 	"Download canceled": "ਡਾਊਨਲੋਡ ਰੱਦ ਕੀਤਾ ਗਿਆ",
 	"Download Database": "ਡਾਟਾਬੇਸ ਡਾਊਨਲੋਡ ਕਰੋ",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "ਗੱਲਬਾਤ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਕੋਈ ਵੀ ਫਾਈਲ ਇੱਥੇ ਛੱਡੋ",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "ਉਦਾਹਰਣ ਲਈ '30ਸ','10ਮਿ'. ਸਹੀ ਸਮਾਂ ਇਕਾਈਆਂ ਹਨ 'ਸ', 'ਮ', 'ਘੰ'.",
 	"Edit": "ਸੰਪਾਦਨ ਕਰੋ",
-	"Edit Doc": "ਡਾਕੂਮੈਂਟ ਸੰਪਾਦਨ ਕਰੋ",
 	"Edit Memory": "",
 	"Edit User": "ਉਪਭੋਗਤਾ ਸੰਪਾਦਨ ਕਰੋ",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "ਆਪਣਾ ਪਾਸਵਰਡ ਦਰਜ ਕਰੋ",
 	"Enter Your Role": "ਆਪਣੀ ਭੂਮਿਕਾ ਦਰਜ ਕਰੋ",
 	"Error": "ਗਲਤੀ",
+	"ERROR": "",
 	"Experimental": "ਪਰਮਾਣੂਕ੍ਰਿਤ",
 	"Export": "ਨਿਰਯਾਤ",
 	"Export All Chats (All Users)": "ਸਾਰੀਆਂ ਗੱਲਾਂ ਨਿਰਯਾਤ ਕਰੋ (ਸਾਰੇ ਉਪਭੋਗਤਾ)",
 	"Export chat (.json)": "",
 	"Export Chats": "ਗੱਲਾਂ ਨਿਰਯਾਤ ਕਰੋ",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਨਿਰਯਾਤ ਕਰੋ",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "ਨਿਰਯਾਤ ਮਾਡਲ",
@@ -357,7 +354,6 @@
 	"Images": "ਚਿੱਤਰ",
 	"Import Chats": "ਗੱਲਾਂ ਆਯਾਤ ਕਰੋ",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਆਯਾਤ ਕਰੋ",
 	"Import Functions": "",
 	"Import Models": "ਮਾਡਲ ਆਯਾਤ ਕਰੋ",
 	"Import Prompts": "ਪ੍ਰੰਪਟ ਆਯਾਤ ਕਰੋ",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Github URL ਤੋਂ ਇੰਸਟਾਲ ਕਰੋ",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "ਇੰਟਰਫੇਸ",
+	"Invalid file format.": "",
 	"Invalid Tag": "ਗਲਤ ਟੈਗ",
 	"January": "ਜਨਵਰੀ",
 	"join our Discord for help.": "ਮਦਦ ਲਈ ਸਾਡੇ ਡਿਸਕੋਰਡ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ।",
@@ -446,13 +443,13 @@
 	"More": "ਹੋਰ",
 	"Move to Top": "",
 	"Name": "ਨਾਮ",
-	"Name Tag": "ਨਾਮ ਟੈਗ",
 	"Name your model": "ਆਪਣੇ ਮਾਡਲ ਦਾ ਨਾਮ ਦੱਸੋ",
 	"New Chat": "ਨਵੀਂ ਗੱਲਬਾਤ",
 	"New Password": "ਨਵਾਂ ਪਾਸਵਰਡ",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "ਓਪਨਏਆਈ URL/ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ।",
 	"or": "ਜਾਂ",
 	"Other": "ਹੋਰ",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ ਨੂੰ \"{{reranking_model}}\" 'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "ਵੈਕਟਰ ਸਟੋਰੇਜ ਨੂੰ ਰੀਸੈਟ ਕਰੋ",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "ਜਵਾਬ ਆਟੋ ਕਾਪੀ ਕਲਿੱਪਬੋਰਡ 'ਤੇ",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "ਇੱਕ ਮਾਡਲ ਖੋਜੋ",
 	"Search Chats": "ਖੋਜ ਚੈਟਾਂ",
 	"Search Collection": "",
-	"Search Documents": "ਡਾਕੂਮੈਂਟ ਖੋਜੋ",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "ਖੋਜ ਮਾਡਲ",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "ਬੋਲ ਪਛਾਣ ਗਲਤੀ: {{error}}",
 	"Speech-to-Text Engine": "ਬੋਲ-ਤੋਂ-ਪਾਠ ਇੰਜਣ",
+	"Stop": "",
 	"Stop Sequence": "ਰੋਕੋ ਕ੍ਰਮ",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "ਟੈਮਪਲੇਟ",
 	"Temporary Chat": "",
 	"Text Completion": "ਪਾਠ ਪੂਰਨਤਾ",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "ਪਾਠ-ਤੋਂ-ਬੋਲ ਇੰਜਣ",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "ਤੁਹਾਡੇ ਫੀਡਬੈਕ ਲਈ ਧੰਨਵਾਦ!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "ਵਿਸਥਾਰ ਨਾਲ ਵਿਆਖਿਆ",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ਸਲਾਹ: ਹਰ ਬਦਲਾਅ ਦੇ ਬਾਅਦ ਗੱਲਬਾਤ ਇਨਪੁਟ ਵਿੱਚ ਟੈਬ ਕੀ ਦਬਾ ਕੇ ਲਗਾਤਾਰ ਕਈ ਵੈਰੀਏਬਲ ਸਲਾਟਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ।",
 	"Title": "ਸਿਰਲੇਖ",
 	"Title (e.g. Tell me a fun fact)": "ਸਿਰਲੇਖ (ਉਦਾਹਰਣ ਲਈ ਮੈਨੂੰ ਇੱਕ ਮਜ਼ੇਦਾਰ ਤੱਥ ਦੱਸੋ)",
@@ -701,6 +702,7 @@
 	"Today": "ਅੱਜ",
 	"Toggle settings": "ਸੈਟਿੰਗਾਂ ਟੌਗਲ ਕਰੋ",
 	"Toggle sidebar": "ਸਾਈਡਬਾਰ ਟੌਗਲ ਕਰੋ",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "ਅਪਲੋਡ ਪ੍ਰਗਤੀ",
 	"URL Mode": "URL ਮੋਡ",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "ਆਪਣੇ ਡਾਕੂਮੈਂਟ ਲੋਡ ਅਤੇ ਚੁਣਨ ਲਈ ਪ੍ਰੰਪਟ ਇਨਪੁਟ ਵਿੱਚ '#' ਵਰਤੋ।",
 	"Use Gravatar": "ਗ੍ਰਾਵਾਟਾਰ ਵਰਤੋ",
 	"Use Initials": "ਸ਼ੁਰੂਆਤੀ ਅੱਖਰ ਵਰਤੋ",
 	"use_mlock (Ollama)": "use_mlock (ਓਲਾਮਾ)",

+ 15 - 14
src/lib/i18n/locales/pl-PL/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Dodaj własne polecenie",
-	"Add Docs": "Dodaj dokumenty",
 	"Add Files": "Dodaj pliki",
 	"Add Memory": "Dodaj pamięć",
 	"Add message": "Dodaj wiadomość",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Zaawansowane parametry",
 	"Advanced Params": "Zaawansowane parametry",
-	"all": "wszyscy",
 	"All Documents": "Wszystkie dokumenty",
 	"All Users": "Wszyscy użytkownicy",
-	"Allow": "Pozwól",
 	"Allow Chat Deletion": "Pozwól na usuwanie czatu",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Anuluj",
 	"Capabilities": "Możliwości",
 	"Change Password": "Zmień hasło",
+	"Character": "",
 	"Chat": "Czat",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Bąbelki czatu",
@@ -120,13 +118,13 @@
 	"Click here to select": "Kliknij tutaj, aby wybrać",
 	"Click here to select a csv file.": "Kliknij tutaj, żeby wybrać plik CSV",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Kliknij tutaj, aby wybrać dokumenty.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "kliknij tutaj.",
 	"Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić rolę użytkownika.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Klon",
 	"Close": "Zamknij",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Kolekcja",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Skopiuj ostatni blok kodu",
 	"Copy last response": "Skopiuj ostatnią odpowiedź",
 	"Copy Link": "Kopiuj link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Kopiowanie do schowka zakończone powodzeniem!",
 	"Create a model": "Tworzenie modelu",
 	"Create Account": "Utwórz konto",
@@ -180,14 +179,12 @@
 	"Default model updated": "Domyślny model zaktualizowany",
 	"Default Prompt Suggestions": "Domyślne sugestie promptów",
 	"Default User Role": "Domyślna rola użytkownika",
-	"delete": "usuń",
 	"Delete": "Usuń",
 	"Delete a model": "Usuń model",
 	"Delete All Chats": "Usuń wszystkie czaty",
 	"Delete chat": "Usuń czat",
 	"Delete Chat": "Usuń czat",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "usuń ten link",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Dokumenty",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "nie nawiązuje żadnych zewnętrznych połączeń, a Twoje dane pozostają bezpiecznie na Twoim lokalnie hostowanym serwerze.",
-	"Don't Allow": "Nie zezwalaj",
 	"Don't have an account?": "Nie masz konta?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Pobieranie",
 	"Download canceled": "Pobieranie przerwane",
 	"Download Database": "Pobierz bazę danych",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Upuść pliki tutaj, aby dodać do rozmowy",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "np. '30s', '10m'. Poprawne jednostki czasu to 's', 'm', 'h'.",
 	"Edit": "Edytuj",
-	"Edit Doc": "Edytuj dokument",
 	"Edit Memory": "",
 	"Edit User": "Edytuj użytkownika",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Wprowadź swoje hasło",
 	"Enter Your Role": "Wprowadź swoją rolę",
 	"Error": "Błąd",
+	"ERROR": "",
 	"Experimental": "Eksperymentalne",
 	"Export": "Eksport",
 	"Export All Chats (All Users)": "Eksportuj wszystkie czaty (wszyscy użytkownicy)",
 	"Export chat (.json)": "",
 	"Export Chats": "Eksportuj czaty",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Eksportuj mapowanie dokumentów",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Eksportuj modele",
@@ -357,7 +354,6 @@
 	"Images": "Obrazy",
 	"Import Chats": "Importuj czaty",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importuj mapowanie dokumentów",
 	"Import Functions": "",
 	"Import Models": "Importowanie modeli",
 	"Import Prompts": "Importuj prompty",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instalowanie z adresu URL usługi Github",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Interfejs",
+	"Invalid file format.": "",
 	"Invalid Tag": "Nieprawidłowy tag",
 	"January": "Styczeń",
 	"join our Discord for help.": "Dołącz do naszego Discorda po pomoc.",
@@ -446,13 +443,13 @@
 	"More": "Więcej",
 	"Move to Top": "",
 	"Name": "Nazwa",
-	"Name Tag": "Etykieta nazwy",
 	"Name your model": "Nazwij swój model",
 	"New Chat": "Nowy czat",
 	"New Password": "Nowe hasło",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Nie znaleziono rezultatów",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Klucz OpenAI jest wymagany.",
 	"or": "lub",
 	"Other": "Inne",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Zmiana rankingu modelu ustawiona na \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Resetuj przechowywanie wektorów",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Szukaj modelu",
 	"Search Chats": "Szukaj w czatach",
 	"Search Collection": "",
-	"Search Documents": "Szukaj dokumentów",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Szukaj modeli",
@@ -646,6 +644,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Błąd rozpoznawania mowy: {{error}}",
 	"Speech-to-Text Engine": "Silnik mowy na tekst",
+	"Stop": "",
 	"Stop Sequence": "Zatrzymaj sekwencję",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -668,6 +667,7 @@
 	"Template": "Szablon",
 	"Temporary Chat": "",
 	"Text Completion": "Uzupełnienie tekstu",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Silnik tekstu na mowę",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Dzięki za informację zwrotną!",
@@ -686,6 +686,7 @@
 	"Thorough explanation": "Dokładne wyjaśnienie",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Porada: Aktualizuj wiele zmiennych kolejno, naciskając klawisz tabulatora w polu wprowadzania czatu po każdej zmianie.",
 	"Title": "Tytuł",
 	"Title (e.g. Tell me a fun fact)": "Tytuł (np. Powiedz mi jakiś zabawny fakt)",
@@ -703,6 +704,7 @@
 	"Today": "Dzisiaj",
 	"Toggle settings": "Przełącz ustawienia",
 	"Toggle sidebar": "Przełącz panel boczny",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -741,7 +743,6 @@
 	"Upload Progress": "Postęp przesyłania",
 	"URL Mode": "Tryb adresu URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Użyj '#' w polu wprowadzania polecenia, aby załadować i wybrać swoje dokumenty.",
 	"Use Gravatar": "Użyj Gravatara",
 	"Use Initials": "Użyj inicjałów",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/pt-BR/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Adicionar prompt personalizado",
-	"Add Docs": "Adicionar Documentos",
 	"Add Files": "Adicionar Arquivos",
 	"Add Memory": "Adicionar Memória",
 	"Add message": "Adicionar mensagem",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Os admins têm acesso a todas as ferramentas o tempo todo; os usuários precisam de ferramentas atribuídas por modelo no workspace.",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"Advanced Params": "Parâmetros Avançados",
-	"all": "todos",
 	"All Documents": "Todos os Documentos",
 	"All Users": "Todos os Usuários",
-	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Chats",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Permitir vozes não locais",
@@ -98,6 +95,7 @@
 	"Cancel": "Cancelar",
 	"Capabilities": "Capacidades",
 	"Change Password": "Mudar Senha",
+	"Character": "",
 	"Chat": "Chat",
 	"Chat Background Image": "Imagem de Fundo do Chat",
 	"Chat Bubble UI": "Interface de Bolha de Chat",
@@ -120,13 +118,13 @@
 	"Click here to select": "Clique aqui para enviar",
 	"Click here to select a csv file.": "Clique aqui para enviar um arquivo csv.",
 	"Click here to select a py file.": "Clique aqui para enviar um arquivo py.",
-	"Click here to select documents.": "Clique aqui para enviar documentos.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "clique aqui.",
 	"Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permissão de escrita na área de transferência negada. Verifique as configurações do seu navegador para conceder o acesso necessário.",
 	"Clone": "Clonar",
 	"Close": "Fechar",
+	"Code execution": "",
 	"Code formatted successfully": "Código formatado com sucesso",
 	"Collection": "Coleção",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copiar último bloco de código",
 	"Copy last response": "Copiar última resposta",
 	"Copy Link": "Copiar Link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Cópia para a área de transferência bem-sucedida!",
 	"Create a model": "Criar um modelo",
 	"Create Account": "Criar Conta",
@@ -180,14 +179,12 @@
 	"Default model updated": "Modelo padrão atualizado",
 	"Default Prompt Suggestions": "Sugestões de Prompt Padrão",
 	"Default User Role": "Função de Usuário Padrão",
-	"delete": "deletar",
 	"Delete": "Deletar",
 	"Delete a model": "Deletar um modelo",
 	"Delete All Chats": "Deletar Todos os Chats",
 	"Delete chat": "Deletar chat",
 	"Delete Chat": "Deletar Chat",
 	"Delete chat?": "Deletar chat?",
-	"Delete Doc": "Deletar Documento",
 	"Delete function?": "Deletar função?",
 	"Delete prompt?": "Deletar prompt?",
 	"delete this link": "deletar este link",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentação",
 	"Documents": "Documentos",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz nenhuma conexão externa, e seus dados permanecem seguros no seu servidor local.",
-	"Don't Allow": "Não Permitir",
 	"Don't have an account?": "Não tem uma conta?",
 	"don't install random functions from sources you don't trust.": "não instale funções aleatórias de fontes que você não confia.",
 	"don't install random tools from sources you don't trust.": "não instale ferramentas aleatórias de fontes que você não confia.",
@@ -224,10 +220,11 @@
 	"Download": "Baixar",
 	"Download canceled": "Download cancelado",
 	"Download Database": "Baixar Banco de Dados",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Solte qualquer arquivo aqui para adicionar à conversa",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
 	"Edit": "Editar",
-	"Edit Doc": "Editar Documento",
 	"Edit Memory": "Editar Memória",
 	"Edit User": "Editar Usuário",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Digite Sua Senha",
 	"Enter Your Role": "Digite Sua Função",
 	"Error": "Erro",
+	"ERROR": "",
 	"Experimental": "Experimental",
 	"Export": "Exportar",
 	"Export All Chats (All Users)": "Exportar Todos os Chats (Todos os Usuários)",
 	"Export chat (.json)": "Exportar chat (.json)",
 	"Export Chats": "Exportar Chats",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exportar Mapeamento de Documentos",
 	"Export Functions": "Exportar Funções",
 	"Export LiteLLM config.yaml": "Exportar config.yaml do LiteLLM",
 	"Export Models": "Exportar Modelos",
@@ -357,7 +354,6 @@
 	"Images": "Imagens",
 	"Import Chats": "Importar Chats",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importar Mapeamento de Documentos",
 	"Import Functions": "Importar Funções",
 	"Import Models": "Importar Modelos",
 	"Import Prompts": "Importar Prompts",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instalar da URL do Github",
 	"Instant Auto-Send After Voice Transcription": "Envio Automático Instantâneo Após Transcrição de Voz",
 	"Interface": "Interface",
+	"Invalid file format.": "",
 	"Invalid Tag": "Tag Inválida",
 	"January": "Janeiro",
 	"join our Discord for help.": "junte-se ao nosso Discord para ajuda.",
@@ -446,13 +443,13 @@
 	"More": "Mais",
 	"Move to Top": "",
 	"Name": "Nome",
-	"Name Tag": "Nome da Tag",
 	"Name your model": "Nomeie seu modelo",
 	"New Chat": "Novo Chat",
 	"New Password": "Nova Senha",
 	"No content found": "",
 	"No content to speak": "Sem conteúdo para falar",
 	"No file selected": "Nenhum arquivo selecionado",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Nenhum resultado encontrado",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Chave OpenAI necessária.",
 	"or": "ou",
 	"Other": "Outro",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reclassificação definido como \"{{reranking_model}}\"",
 	"Reset": "Redefinir",
 	"Reset Upload Directory": "Redefinir Diretório de Upload",
-	"Reset Vector Storage": "Redefinir Armazenamento de Vetores",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notificações de resposta não podem ser ativadas pois as permissões do site foram negadas. Por favor, visite as configurações do seu navegador para conceder o acesso necessário.",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Pesquisar um modelo",
 	"Search Chats": "Pesquisar Chats",
 	"Search Collection": "",
-	"Search Documents": "Pesquisar Documentos",
+	"search for tags": "",
 	"Search Functions": "Pesquisar Funções",
 	"Search Knowledge": "",
 	"Search Models": "Pesquisar Modelos",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech-to-Text Engine": "Motor de Transcrição de Fala",
+	"Stop": "",
 	"Stop Sequence": "Sequência de Parada",
 	"Stream Chat Response": "",
 	"STT Model": "Modelo STT",
@@ -667,6 +666,7 @@
 	"Template": "Modelo",
 	"Temporary Chat": "",
 	"Text Completion": "Conclusão de Texto",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Motor de Texto para Fala",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explicação detalhada",
 	"Tika": "Tika",
 	"Tika Server URL required.": "URL do servidor Tika necessária.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de chat após cada substituição.",
 	"Title": "Título",
 	"Title (e.g. Tell me a fun fact)": "Título (por exemplo, Conte-me um fato divertido)",
@@ -702,6 +703,7 @@
 	"Today": "Hoje",
 	"Toggle settings": "Alternar configurações",
 	"Toggle sidebar": "Alternar barra lateral",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokens a Manter na Atualização do Contexto (num_keep)",
 	"Tool created successfully": "Ferramenta criada com sucesso",
 	"Tool deleted successfully": "Ferramenta excluída com sucesso",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progresso do Upload",
 	"URL Mode": "Modo URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada de prompt para carregar e selecionar seus documentos.",
 	"Use Gravatar": "Usar Gravatar",
 	"Use Initials": "Usar Iniciais",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/pt-PT/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Adicionar um prompt curto",
-	"Add Docs": "Adicionar Documentos",
 	"Add Files": "Adicionar Ficheiros",
 	"Add Memory": "Adicionar memória",
 	"Add message": "Adicionar mensagem",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Parâmetros Avançados",
 	"Advanced Params": "Params Avançados",
-	"all": "todos",
 	"All Documents": "Todos os Documentos",
 	"All Users": "Todos os utilizadores",
-	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Conversa",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Permitir vozes não locais",
@@ -98,6 +95,7 @@
 	"Cancel": "Cancelar",
 	"Capabilities": "Capacidades",
 	"Change Password": "Alterar Senha",
+	"Character": "",
 	"Chat": "Conversa",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Bolha UI da Conversa",
@@ -120,13 +118,13 @@
 	"Click here to select": "Clique aqui para selecionar",
 	"Click here to select a csv file.": "Clique aqui para selecionar um ficheiro csv.",
 	"Click here to select a py file.": "Clique aqui para selecionar um ficheiro py",
-	"Click here to select documents.": "Clique aqui para selecionar documentos.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "clique aqui.",
 	"Click on the user role button to change a user's role.": "Clique no botão de função do utilizador para alterar a função de um utilizador.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Clonar",
 	"Close": "Fechar",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Coleção",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copiar último bloco de código",
 	"Copy last response": "Copiar última resposta",
 	"Copy Link": "Copiar link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Cópia para a área de transferência bem-sucedida!",
 	"Create a model": "Criar um modelo",
 	"Create Account": "Criar Conta",
@@ -180,14 +179,12 @@
 	"Default model updated": "Modelo padrão atualizado",
 	"Default Prompt Suggestions": "Sugestões de Prompt Padrão",
 	"Default User Role": "Função de Utilizador Padrão",
-	"delete": "apagar",
 	"Delete": "Apagar",
 	"Delete a model": "Apagar um modelo",
 	"Delete All Chats": "Apagar todas as conversas",
 	"Delete chat": "Apagar conversa",
 	"Delete Chat": "Apagar Conversa",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "apagar este link",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentação",
 	"Documents": "Documentos",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e os seus dados permanecem seguros no seu servidor alojado localmente.",
-	"Don't Allow": "Não Permitir",
 	"Don't have an account?": "Não tem uma conta?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Descarregar",
 	"Download canceled": "Download cancelado",
 	"Download Database": "Descarregar Base de Dados",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Largue os ficheiros aqui para adicionar à conversa",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
 	"Edit": "Editar",
-	"Edit Doc": "Editar Documento",
 	"Edit Memory": "",
 	"Edit User": "Editar Utilizador",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Escreva a sua Senha",
 	"Enter Your Role": "Escreva a sua Função",
 	"Error": "Erro",
+	"ERROR": "",
 	"Experimental": "Experimental",
 	"Export": "Exportar",
 	"Export All Chats (All Users)": "Exportar Todas as Conversas (Todos os Utilizadores)",
 	"Export chat (.json)": "Exportar Conversa (.json)",
 	"Export Chats": "Exportar Conversas",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exportar Mapeamento de Documentos",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Modelos de Exportação",
@@ -357,7 +354,6 @@
 	"Images": "Imagens",
 	"Import Chats": "Importar Conversas",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importar Mapeamento de Documentos",
 	"Import Functions": "",
 	"Import Models": "Importar Modelos",
 	"Import Prompts": "Importar Prompts",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instalar a partir do URL do Github",
 	"Instant Auto-Send After Voice Transcription": "Enviar automaticamente depois da transcrição da voz",
 	"Interface": "Interface",
+	"Invalid file format.": "",
 	"Invalid Tag": "Etiqueta Inválida",
 	"January": "Janeiro",
 	"join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.",
@@ -446,13 +443,13 @@
 	"More": "Mais",
 	"Move to Top": "",
 	"Name": "Nome",
-	"Name Tag": "Etiqueta de Nome",
 	"Name your model": "Atribua um nome ao seu modelo",
 	"New Chat": "Nova Conversa",
 	"New Password": "Nova Senha",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Não foram encontrados resultados",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "URL/Chave da API OpenAI é necessária.",
 	"or": "ou",
 	"Other": "Outro",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "Limpar Pasta de Carregamento",
-	"Reset Vector Storage": "Redefinir Armazenamento de Vetor",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Pesquisar um modelo",
 	"Search Chats": "Pesquisar Conversas",
 	"Search Collection": "",
-	"Search Documents": "Pesquisar Documentos",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Modelos de pesquisa",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}",
 	"Speech-to-Text Engine": "Motor de Fala para Texto",
+	"Stop": "",
 	"Stop Sequence": "Sequência de Paragem",
 	"Stream Chat Response": "",
 	"STT Model": "Modelo STT",
@@ -667,6 +666,7 @@
 	"Template": "Modelo",
 	"Temporary Chat": "",
 	"Text Completion": "Conclusão de Texto",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Motor de Texto para Fala",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Obrigado pelo seu feedback!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explicação Minuciosa",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada da conversa após cada substituição.",
 	"Title": "Título",
 	"Title (e.g. Tell me a fun fact)": "Título (ex.: Diz-me um facto divertido)",
@@ -702,6 +703,7 @@
 	"Today": "Hoje",
 	"Toggle settings": "Alternar configurações",
 	"Toggle sidebar": "Alternar barra lateral",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progresso do Carregamento",
 	"URL Mode": "Modo de URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar os seus documentos.",
 	"Use Gravatar": "Usar Gravatar",
 	"Use Initials": "Usar Iniciais",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/ro-RO/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Adaugă prompt personalizat",
-	"Add Docs": "Adaugă Documente",
 	"Add Files": "Adaugă Fișiere",
 	"Add Memory": "Adaugă Memorie",
 	"Add message": "Adaugă mesaj",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorii au acces la toate instrumentele în orice moment; utilizatorii au nevoie de instrumente asignate pe model în spațiul de lucru.",
 	"Advanced Parameters": "Parametri Avansați",
 	"Advanced Params": "Parametri Avansați",
-	"all": "toate",
 	"All Documents": "Toate Documentele",
 	"All Users": "Toți Utilizatorii",
-	"Allow": "Permite",
 	"Allow Chat Deletion": "Permite Ștergerea Conversațiilor",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Permite voci non-locale",
@@ -98,6 +95,7 @@
 	"Cancel": "Anulează",
 	"Capabilities": "Capabilități",
 	"Change Password": "Schimbă Parola",
+	"Character": "",
 	"Chat": "Conversație",
 	"Chat Background Image": "Imagine de Fundal pentru Conversație",
 	"Chat Bubble UI": "Interfață cu Bule de Conversație",
@@ -120,13 +118,13 @@
 	"Click here to select": "Apasă aici pentru a selecta",
 	"Click here to select a csv file.": "Apasă aici pentru a selecta un fișier csv.",
 	"Click here to select a py file.": "Apasă aici pentru a selecta un fișier py.",
-	"Click here to select documents.": "Apasă aici pentru a selecta documente.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "apasă aici.",
 	"Click on the user role button to change a user's role.": "Apasă pe butonul rolului utilizatorului pentru a schimba rolul unui utilizator.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisiunea de scriere în clipboard a fost refuzată. Vă rugăm să verificați setările browserului pentru a acorda accesul necesar.",
 	"Clone": "Clonează",
 	"Close": "Închide",
+	"Code execution": "",
 	"Code formatted successfully": "Cod formatat cu succes",
 	"Collection": "Colecție",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Copiază ultimul bloc de cod",
 	"Copy last response": "Copiază ultimul răspuns",
 	"Copy Link": "Copiază Link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Copierea în clipboard a fost realizată cu succes!",
 	"Create a model": "Creează un model",
 	"Create Account": "Creează Cont",
@@ -180,14 +179,12 @@
 	"Default model updated": "Modelul implicit a fost actualizat",
 	"Default Prompt Suggestions": "Sugestii de Prompt Implicite",
 	"Default User Role": "Rolul Implicit al Utilizatorului",
-	"delete": "șterge",
 	"Delete": "Șterge",
 	"Delete a model": "Șterge un model",
 	"Delete All Chats": "Șterge Toate Conversațiile",
 	"Delete chat": "Șterge conversația",
 	"Delete Chat": "Șterge Conversația",
 	"Delete chat?": "Șterge conversația?",
-	"Delete Doc": "Șterge document",
 	"Delete function?": "Șterge funcția?",
 	"Delete prompt?": "Șterge promptul?",
 	"delete this link": "șterge acest link",
@@ -215,7 +212,6 @@
 	"Documentation": "Documentație",
 	"Documents": "Documente",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "nu face nicio conexiune externă, iar datele tale rămân în siguranță pe serverul găzduit local.",
-	"Don't Allow": "Nu Permite",
 	"Don't have an account?": "Nu ai un cont?",
 	"don't install random functions from sources you don't trust.": "nu instala funcții aleatorii din surse în care nu ai încredere.",
 	"don't install random tools from sources you don't trust.": "nu instala instrumente aleatorii din surse în care nu ai încredere.",
@@ -224,10 +220,11 @@
 	"Download": "Descarcă",
 	"Download canceled": "Descărcare anulată",
 	"Download Database": "Descarcă Baza de Date",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Plasează orice fișiere aici pentru a le adăuga la conversație",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "de ex. '30s', '10m'. Unitățile de timp valide sunt 's', 'm', 'h'.",
 	"Edit": "Editează",
-	"Edit Doc": "Editează Document",
 	"Edit Memory": "Editează Memorie",
 	"Edit User": "Editează Utilizator",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Introduceți Parola Dvs.",
 	"Enter Your Role": "Introduceți Rolul Dvs.",
 	"Error": "Eroare",
+	"ERROR": "",
 	"Experimental": "Experimental",
 	"Export": "Exportă",
 	"Export All Chats (All Users)": "Exportă Toate Conversațiile (Toți Utilizatorii)",
 	"Export chat (.json)": "Exportă conversația (.json)",
 	"Export Chats": "Exportă Conversațiile",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exportă Maparea Documentelor",
 	"Export Functions": "Exportă Funcțiile",
 	"Export LiteLLM config.yaml": "Exportă Configurația LiteLLM config.yaml",
 	"Export Models": "Exportă Modelele",
@@ -357,7 +354,6 @@
 	"Images": "Imagini",
 	"Import Chats": "Importă Conversațiile",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importă Maparea Documentelor",
 	"Import Functions": "Importă Funcțiile",
 	"Import Models": "Importă Modelele",
 	"Import Prompts": "Importă Prompturile",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Instalează de la URL-ul Github",
 	"Instant Auto-Send After Voice Transcription": "Trimitere Automată Instantanee După Transcrierea Vocii",
 	"Interface": "Interfață",
+	"Invalid file format.": "",
 	"Invalid Tag": "Etichetă Invalidă",
 	"January": "Ianuarie",
 	"join our Discord for help.": "alătură-te Discord-ului nostru pentru ajutor.",
@@ -446,13 +443,13 @@
 	"More": "Mai multe",
 	"Move to Top": "",
 	"Name": "Nume",
-	"Name Tag": "Etichetă Nume",
 	"Name your model": "Denumirea modelului",
 	"New Chat": "Conversație Nouă",
 	"New Password": "Parolă Nouă",
 	"No content found": "",
 	"No content to speak": "Nu există conținut de vorbit",
 	"No file selected": "Nu a fost selectat niciun fișier",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Nu au fost găsite rezultate",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Este necesar URL-ul/Cheia OpenAI.",
 	"or": "sau",
 	"Other": "Altele",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Modelul de Rearanjare setat la \"{{reranking_model}}\"",
 	"Reset": "Resetează",
 	"Reset Upload Directory": "Resetează Directorul de Încărcare",
-	"Reset Vector Storage": "Resetează Stocarea Vectorilor",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Copiere Automată a Răspunsului în Clipboard",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notificările de răspuns nu pot fi activate deoarece permisiunile site-ului au fost refuzate. Vă rugăm să vizitați setările browserului pentru a acorda accesul necesar.",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Caută un model",
 	"Search Chats": "Caută în Conversații",
 	"Search Collection": "",
-	"Search Documents": "Caută în Documente",
+	"search for tags": "",
 	"Search Functions": "Caută Funcții",
 	"Search Knowledge": "",
 	"Search Models": "Caută Modele",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Eroare de recunoaștere vocală: {{error}}",
 	"Speech-to-Text Engine": "Motor de Conversie a Vocii în Text",
+	"Stop": "",
 	"Stop Sequence": "Oprește Secvența",
 	"Stream Chat Response": "",
 	"STT Model": "Model STT",
@@ -667,6 +666,7 @@
 	"Template": "Șablon",
 	"Temporary Chat": "",
 	"Text Completion": "Completare Text",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Motor de Conversie a Textului în Vorbire",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Mulțumim pentru feedback!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Explicație detaliată",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Este necesar URL-ul serverului Tika.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sfat: Actualizați mai multe sloturi de variabile consecutiv apăsând tasta tab în câmpul de intrare al conversației după fiecare înlocuire.",
 	"Title": "Titlu",
 	"Title (e.g. Tell me a fun fact)": "Titlu (de ex. Spune-mi un fapt amuzant)",
@@ -702,6 +703,7 @@
 	"Today": "Astăzi",
 	"Toggle settings": "Comută setările",
 	"Toggle sidebar": "Comută bara laterală",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokeni de Păstrat la Reîmprospătarea Contextului (num_keep)",
 	"Tool created successfully": "Instrumentul a fost creat cu succes",
 	"Tool deleted successfully": "Instrumentul a fost șters cu succes",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Progres Încărcare",
 	"URL Mode": "Mod URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Folosiți '#' în câmpul de intrare al promptului pentru a încărca și selecta documentele dvs.",
 	"Use Gravatar": "Folosește Gravatar",
 	"Use Initials": "Folosește Inițialele",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/ru-RU/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Добавьте пользовательский промпт",
-	"Add Docs": "Добавить документы",
 	"Add Files": "Добавить файлы",
 	"Add Memory": "Добавить воспоминание",
 	"Add message": "Добавить сообщение",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Администраторы всегда имеют доступ ко всем инструментам; пользователям нужны инструменты, назначенные для каждой модели в рабочем пространстве.",
 	"Advanced Parameters": "Расширенные Параметры",
 	"Advanced Params": "Расширенные параметры",
-	"all": "все",
 	"All Documents": "Все документы",
 	"All Users": "Все пользователи",
-	"Allow": "Разрешить",
 	"Allow Chat Deletion": "Разрешить удаление чата",
 	"Allow Chat Editing": "Разрешить редактирование чата",
 	"Allow non-local voices": "Разрешить не локальные голоса",
@@ -98,6 +95,7 @@
 	"Cancel": "Отменить",
 	"Capabilities": "Возможности",
 	"Change Password": "Изменить пароль",
+	"Character": "",
 	"Chat": "Чат",
 	"Chat Background Image": "Фоновое изображение чата",
 	"Chat Bubble UI": "Bubble UI чат",
@@ -120,13 +118,13 @@
 	"Click here to select": "Нажмите здесь, чтобы выбрать",
 	"Click here to select a csv file.": "Нажмите здесь, чтобы выбрать csv-файл.",
 	"Click here to select a py file.": "Нажмите здесь, чтобы выбрать py-файл",
-	"Click here to select documents.": "Нажмите здесь, чтобы выбрать документы.",
 	"Click here to upload a workflow.json file.": "Нажмите здесь, чтобы загрузить файл workflow.json.",
 	"click here.": "нажмите здесь.",
 	"Click on the user role button to change a user's role.": "Нажмите кнопку роли пользователя, чтобы изменить роль пользователя.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "В разрешении на запись в буфер обмена отказано. Пожалуйста, проверьте настройки своего браузера, чтобы предоставить необходимый доступ.",
 	"Clone": "Клонировать",
 	"Close": "Закрыть",
+	"Code execution": "",
 	"Code formatted successfully": "Код успешно отформатирован",
 	"Collection": "Коллекция",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Копировать последний блок кода",
 	"Copy last response": "Копировать последний ответ",
 	"Copy Link": "Копировать ссылку",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Копирование в буфер обмена прошло успешно!",
 	"Create a model": "Создание модели",
 	"Create Account": "Создать аккаунт",
@@ -180,14 +179,12 @@
 	"Default model updated": "Модель по умолчанию обновлена",
 	"Default Prompt Suggestions": "Предложения промптов по умолчанию",
 	"Default User Role": "Роль пользователя по умолчанию",
-	"delete": "удалить",
 	"Delete": "Удалить",
 	"Delete a model": "Удалить модель",
 	"Delete All Chats": "Удалить все чаты",
 	"Delete chat": "Удалить чат",
 	"Delete Chat": "Удалить чат",
 	"Delete chat?": "Удалить чат?",
-	"Delete Doc": "Удалить документ",
 	"Delete function?": "Удалить функцию?",
 	"Delete prompt?": "Удалить промпт?",
 	"delete this link": "удалить эту ссылку",
@@ -215,7 +212,6 @@
 	"Documentation": "Документация",
 	"Documents": "Документы",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не устанавливает никаких внешних соединений, и ваши данные надежно хранятся на вашем локальном сервере.",
-	"Don't Allow": "Не разрешать",
 	"Don't have an account?": "У вас нет аккаунта?",
 	"don't install random functions from sources you don't trust.": "не устанавливайте случайные функции из источников, которым вы не доверяете.",
 	"don't install random tools from sources you don't trust.": "не устанавливайте случайные инструменты из источников, которым вы не доверяете.",
@@ -224,10 +220,11 @@
 	"Download": "Загрузить",
 	"Download canceled": "Загрузка отменена",
 	"Download Database": "Загрузить базу данных",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Перетащите сюда файлы, чтобы добавить их в разговор",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "например, '30s','10m'. Допустимые единицы времени: 's', 'm', 'h'.",
 	"Edit": "Редактировать",
-	"Edit Doc": "Редактировать документ",
 	"Edit Memory": "Редактировать воспоминание",
 	"Edit User": "Редактировать пользователя",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Введите ваш пароль",
 	"Enter Your Role": "Введите вашу роль",
 	"Error": "Ошибка",
+	"ERROR": "",
 	"Experimental": "Экспериментальное",
 	"Export": "Экспорт",
 	"Export All Chats (All Users)": "Экспортировать все чаты (всех пользователей)",
 	"Export chat (.json)": "Экспортировать чат (.json)",
 	"Export Chats": "Экспортировать чаты",
 	"Export Config to JSON File": "Экспорт конфигурации в JSON-файл",
-	"Export Documents Mapping": "Экспортировать сопоставление документов",
 	"Export Functions": "Экспортировать функции",
 	"Export LiteLLM config.yaml": "Экспортировать LiteLLM config.yaml",
 	"Export Models": "Экспортировать модели",
@@ -357,7 +354,6 @@
 	"Images": "Изображения",
 	"Import Chats": "Импортировать чаты",
 	"Import Config from JSON File": "Импорт конфигурации из JSON-файла",
-	"Import Documents Mapping": "Импорт сопоставления документов",
 	"Import Functions": "Импортировать функции",
 	"Import Models": "Импортировать модели",
 	"Import Prompts": "Импортировать промпты",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Установка с URL-адреса Github",
 	"Instant Auto-Send After Voice Transcription": "Мгновенная автоматическая отправка после расшифровки голоса",
 	"Interface": "Интерфейс",
+	"Invalid file format.": "",
 	"Invalid Tag": "Недопустимый тег",
 	"January": "Январь",
 	"join our Discord for help.": "присоединяйтесь к нашему Discord для помощи.",
@@ -446,13 +443,13 @@
 	"More": "Больше",
 	"Move to Top": "Поднять вверх",
 	"Name": "Имя",
-	"Name Tag": "Имя тега",
 	"Name your model": "Присвойте модели имя",
 	"New Chat": "Новый чат",
 	"New Password": "Новый пароль",
 	"No content found": "",
 	"No content to speak": "Нечего говорить",
 	"No file selected": "Файлы не выбраны",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Результатов не найдено",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Требуется URL-адрес API OpenAI или ключ API.",
 	"or": "или",
 	"Other": "Прочее",
+	"OUTPUT": "",
 	"Output format": "Формат вывода",
 	"Overview": "Обзор",
 	"page": "страница",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Модель реранжирования установлена на \"{{reranking_model}}\"",
 	"Reset": "Сбросить",
 	"Reset Upload Directory": "Сбросить каталог загрузок",
-	"Reset Vector Storage": "Сбросить векторное хранилище",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Автоматическое копирование ответа в буфер обмена",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Уведомления об ответах не могут быть активированы, поскольку доступ к веб-сайту был заблокирован. Пожалуйста, перейдите к настройкам своего браузера, чтобы предоставить необходимый доступ.",
 	"Response splitting": "Разделение ответов",
@@ -570,7 +568,7 @@
 	"Search a model": "Поиск модели",
 	"Search Chats": "Поиск в чатах",
 	"Search Collection": "",
-	"Search Documents": "Поиск документов",
+	"search for tags": "",
 	"Search Functions": "Поиск функций",
 	"Search Knowledge": "",
 	"Search Models": "Поиск моделей",
@@ -646,6 +644,7 @@
 	"Speech Playback Speed": "Скорость воспроизведения речи",
 	"Speech recognition error: {{error}}": "Ошибка распознавания речи: {{error}}",
 	"Speech-to-Text Engine": "Система распознавания речи",
+	"Stop": "",
 	"Stop Sequence": "Последовательность остановки",
 	"Stream Chat Response": "Потоковый вывод ответа",
 	"STT Model": "Модель распознавания речи",
@@ -668,6 +667,7 @@
 	"Template": "Шаблон",
 	"Temporary Chat": "Временный чат",
 	"Text Completion": "Автодополнение текста",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Система синтеза речи",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Спасибо за вашу обратную связь!",
@@ -686,6 +686,7 @@
 	"Thorough explanation": "Подробное объяснение",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Требуется URL-адрес сервера Tika.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Совет: Обновляйте несколько переменных подряд, нажимая клавишу Tab в поле ввода чата после каждой замены.",
 	"Title": "Заголовок",
 	"Title (e.g. Tell me a fun fact)": "Заголовок (например, Расскажи мне интересный факт)",
@@ -703,6 +704,7 @@
 	"Today": "Сегодня",
 	"Toggle settings": "Переключить настройки",
 	"Toggle sidebar": "Переключить боковую панель",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Количество токенов для сохранения при обновлении контекста (num_keep)",
 	"Tool created successfully": "Инструмент успешно создан",
 	"Tool deleted successfully": "Инструмент успешно удален",
@@ -741,7 +743,6 @@
 	"Upload Progress": "Прогресс загрузки",
 	"URL Mode": "Режим URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Используйте '#' в поле ввода промпта для загрузки и выбора ваших документов.",
 	"Use Gravatar": "Использовать Gravatar",
 	"Use Initials": "Использовать инициалы",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/sr-RS/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Додај прилагођен упит",
-	"Add Docs": "Додај документе",
 	"Add Files": "Додај датотеке",
 	"Add Memory": "Додај меморију",
 	"Add message": "Додај поруку",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "Напредни параметри",
 	"Advanced Params": "Напредни парамови",
-	"all": "сви",
 	"All Documents": "Сви документи",
 	"All Users": "Сви корисници",
-	"Allow": "Дозволи",
 	"Allow Chat Deletion": "Дозволи брисање ћаскања",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "Откажи",
 	"Capabilities": "Могућности",
 	"Change Password": "Промени лозинку",
+	"Character": "",
 	"Chat": "Ћаскање",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Интерфејс балона ћаскања",
@@ -120,13 +118,13 @@
 	"Click here to select": "Кликните овде да изаберете",
 	"Click here to select a csv file.": "Кликните овде да изаберете csv датотеку.",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "Кликните овде да изаберете документе.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "кликните овде.",
 	"Click on the user role button to change a user's role.": "Кликните на дугме за улогу корисника да промените улогу корисника.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Клон",
 	"Close": "Затвори",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Колекција",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Копирај последњи блок кода",
 	"Copy last response": "Копирај последњи одговор",
 	"Copy Link": "Копирај везу",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Успешно копирање у оставу!",
 	"Create a model": "Креирање модела",
 	"Create Account": "Направи налог",
@@ -180,14 +179,12 @@
 	"Default model updated": "Подразумевани модел ажуриран",
 	"Default Prompt Suggestions": "Подразумевани предлози упита",
 	"Default User Role": "Подразумевана улога корисника",
-	"delete": "обриши",
 	"Delete": "Обриши",
 	"Delete a model": "Обриши модел",
 	"Delete All Chats": "Избриши сва ћаскања",
 	"Delete chat": "Обриши ћаскање",
 	"Delete Chat": "Обриши ћаскање",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "обриши ову везу",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "Документи",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не отвара никакве спољне везе и ваши подаци остају сигурно на вашем локално хостованом серверу.",
-	"Don't Allow": "Не дозволи",
 	"Don't have an account?": "Немате налог?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Преузми",
 	"Download canceled": "Преузимање отказано",
 	"Download Database": "Преузми базу података",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Убаците било које датотеке овде да их додате у разговор",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "нпр. '30s', '10m'. Важеће временске јединице су 's', 'm', 'h'.",
 	"Edit": "Уреди",
-	"Edit Doc": "Уреди документ",
 	"Edit Memory": "",
 	"Edit User": "Уреди корисника",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Унесите вашу лозинку",
 	"Enter Your Role": "Унесите вашу улогу",
 	"Error": "Грешка",
+	"ERROR": "",
 	"Experimental": "Експериментално",
 	"Export": "Извоз",
 	"Export All Chats (All Users)": "Извези сва ћаскања (сви корисници)",
 	"Export chat (.json)": "",
 	"Export Chats": "Извези ћаскања",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Извези мапирање докумената",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Извези моделе",
@@ -357,7 +354,6 @@
 	"Images": "Слике",
 	"Import Chats": "Увези ћаскања",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Увези мапирање докумената",
 	"Import Functions": "",
 	"Import Models": "Увези моделе",
 	"Import Prompts": "Увези упите",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Инсталирај из Гитхуб УРЛ адресе",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "Изглед",
+	"Invalid file format.": "",
 	"Invalid Tag": "Неисправна ознака",
 	"January": "Јануар",
 	"join our Discord for help.": "придружите се нашем Дискорду за помоћ.",
@@ -446,13 +443,13 @@
 	"More": "Више",
 	"Move to Top": "",
 	"Name": "Име",
-	"Name Tag": "Назив ознаке",
 	"Name your model": "Наведи свој модел",
 	"New Chat": "Ново ћаскање",
 	"New Password": "Нова лозинка",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Нема резултата",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Потребан је OpenAI URL/кључ.",
 	"or": "или",
 	"Other": "Остало",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Модел поновног рангирања подешен на \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "Ресетуј складиште вектора",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Самостално копирање одговора у оставу",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Претражи модел",
 	"Search Chats": "Претражи ћаскања",
 	"Search Collection": "",
-	"Search Documents": "Претражи документе",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Модели претраге",
@@ -645,6 +643,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Грешка у препознавању говора: {{error}}",
 	"Speech-to-Text Engine": "Мотор за говор у текст",
+	"Stop": "",
 	"Stop Sequence": "Секвенца заустављања",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -667,6 +666,7 @@
 	"Template": "Шаблон",
 	"Temporary Chat": "",
 	"Text Completion": "Допуна текста",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Мотор за текст у говор",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Хвала на вашем коментару!",
@@ -685,6 +685,7 @@
 	"Thorough explanation": "Детаљно објашњење",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Савет: ажурирајте више променљивих слотова узастопно притиском на тастер Таб у уносу ћаскања након сваке замене.",
 	"Title": "Наслов",
 	"Title (e.g. Tell me a fun fact)": "Наслов (нпр. „реци ми занимљивост“)",
@@ -702,6 +703,7 @@
 	"Today": "Данас",
 	"Toggle settings": "Пребаци подешавања",
 	"Toggle sidebar": "Пребаци бочну траку",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -740,7 +742,6 @@
 	"Upload Progress": "Напредак отпремања",
 	"URL Mode": "Режим адресе",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Користи '#' у уносу упита да учитате и изаберете ваше документе.",
 	"Use Gravatar": "Користи Граватар",
 	"Use Initials": "Користи иницијале",
 	"use_mlock (Ollama)": "усе _млоцк (Оллама)",

+ 15 - 14
src/lib/i18n/locales/sv-SE/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Lägg till en anpassad instruktion",
-	"Add Docs": "Lägg till dokument",
 	"Add Files": "Lägg till filer",
 	"Add Memory": "Lägg till minne",
 	"Add message": "Lägg till meddelande",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratörer har tillgång till alla verktyg hela tiden, medan användare behöver verktyg som tilldelas per modell i arbetsytan.",
 	"Advanced Parameters": "Avancerade parametrar",
 	"Advanced Params": "Avancerade parametrar",
-	"all": "alla",
 	"All Documents": "Alla dokument",
 	"All Users": "Alla användare",
-	"Allow": "Tillåt",
 	"Allow Chat Deletion": "Tillåt chattborttagning",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "Tillåt icke-lokala röster",
@@ -98,6 +95,7 @@
 	"Cancel": "Avbryt",
 	"Capabilities": "Kapaciteter",
 	"Change Password": "Ändra lösenord",
+	"Character": "",
 	"Chat": "Chatt",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "Chatbubblar UI",
@@ -120,13 +118,13 @@
 	"Click here to select": "Klicka här för att välja",
 	"Click here to select a csv file.": "Klicka här för att välja en csv-fil.",
 	"Click here to select a py file.": "Klicka här för att välja en python-fil.",
-	"Click here to select documents.": "Klicka här för att välja dokument.",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "klicka här.",
 	"Click on the user role button to change a user's role.": "Klicka på knappen för användarroll för att ändra en användares roll.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "Klon",
 	"Close": "Stäng",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "Samling",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Kopiera sista kodblock",
 	"Copy last response": "Kopiera sista svar",
 	"Copy Link": "Kopiera länk",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Kopiering till urklipp lyckades!",
 	"Create a model": "Skapa en modell",
 	"Create Account": "Skapa konto",
@@ -180,14 +179,12 @@
 	"Default model updated": "Standardmodell uppdaterad",
 	"Default Prompt Suggestions": "Standardinstruktionsförslag",
 	"Default User Role": "Standardanvändarroll",
-	"delete": "radera",
 	"Delete": "Radera",
 	"Delete a model": "Ta bort en modell",
 	"Delete All Chats": "Ta bort alla chattar",
 	"Delete chat": "Radera chatt",
 	"Delete Chat": "Radera chatt",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "radera denna länk",
@@ -215,7 +212,6 @@
 	"Documentation": "Dokumentation",
 	"Documents": "Dokument",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "gör inga externa anslutningar, och dina data förblir säkra på din lokalt värdade server.",
-	"Don't Allow": "Tillåt inte",
 	"Don't have an account?": "Har du inget konto?",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "Ladda ner",
 	"Download canceled": "Nedladdning avbruten",
 	"Download Database": "Ladda ner databas",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Släpp filer här för att lägga till i samtalet",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "t.ex. '30s', '10m'. Giltiga tidsenheter är 's', 'm', 'h'.",
 	"Edit": "Redigera",
-	"Edit Doc": "Redigera dokument",
 	"Edit Memory": "",
 	"Edit User": "Redigera användare",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Ange ditt lösenord",
 	"Enter Your Role": "Ange din roll",
 	"Error": "Fel",
+	"ERROR": "",
 	"Experimental": "Experimentell",
 	"Export": "Export",
 	"Export All Chats (All Users)": "Exportera alla chattar (alla användare)",
 	"Export chat (.json)": "Exportera chatt (.json)",
 	"Export Chats": "Exportera chattar",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Exportera dokumentmappning",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Exportera modeller",
@@ -357,7 +354,6 @@
 	"Images": "Bilder",
 	"Import Chats": "Importera chattar",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Importera dokumentmappning",
 	"Import Functions": "",
 	"Import Models": "Importera modeller",
 	"Import Prompts": "Importera instruktioner",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Installera från Github-URL",
 	"Instant Auto-Send After Voice Transcription": "Skicka automatiskt efter rösttranskribering",
 	"Interface": "Gränssnitt",
+	"Invalid file format.": "",
 	"Invalid Tag": "Ogiltig tagg",
 	"January": "januari",
 	"join our Discord for help.": "gå med i vår Discord för hjälp.",
@@ -446,13 +443,13 @@
 	"More": "Mer",
 	"Move to Top": "",
 	"Name": "Namn",
-	"Name Tag": "Namntag",
 	"Name your model": "Namnge din modell",
 	"New Chat": "Ny chatt",
 	"New Password": "Nytt lösenord",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Inga resultat hittades",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI-URL/nyckel krävs.",
 	"or": "eller",
 	"Other": "Andra",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking modell inställd på \"{{reranking_model}}\"",
 	"Reset": "",
 	"Reset Upload Directory": "Återställ uppladdningskatalog",
-	"Reset Vector Storage": "Återställ vektorlager",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Svara AutoCopy till urklipp",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Sök efter en modell",
 	"Search Chats": "Sök i chattar",
 	"Search Collection": "",
-	"Search Documents": "Sök dokument",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "Sök modeller",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Fel vid taligenkänning: {{error}}",
 	"Speech-to-Text Engine": "Tal-till-text-motor",
+	"Stop": "",
 	"Stop Sequence": "Stoppsekvens",
 	"Stream Chat Response": "",
 	"STT Model": "Tal-till-text-modell",
@@ -666,6 +665,7 @@
 	"Template": "Mall",
 	"Temporary Chat": "",
 	"Text Completion": "Textslutförande",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Text-till-tal-motor",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Tack för din feedback!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Djupare förklaring",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Uppdatera fler variabler genom att trycka på tabb-tangenten i chattinmatningen efter varje ersättning.",
 	"Title": "Titel",
 	"Title (e.g. Tell me a fun fact)": "Titel (t.ex. Berätta en kuriosa)",
@@ -701,6 +702,7 @@
 	"Today": "Idag",
 	"Toggle settings": "Växla inställningar",
 	"Toggle sidebar": "Växla sidofält",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Tokens att behålla vid kontextuppdatering (num_keep)",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Uppladdningsframsteg",
 	"URL Mode": "URL-läge",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Använd '#' i instruktionsinmatningen för att ladda och välja dina dokument.",
 	"Use Gravatar": "Använd Gravatar",
 	"Use Initials": "Använd initialer",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/th-TH/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "เพิ่มพรอมต์ที่กำหนดเอง",
-	"Add Docs": "เพิ่มเอกสาร",
 	"Add Files": "เพิ่มไฟล์",
 	"Add Memory": "เพิ่มความจำ",
 	"Add message": "เพิ่มข้อความ",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "ผู้ดูแลระบบสามารถเข้าถึงเครื่องมือทั้งหมดได้ตลอดเวลา; ผู้ใช้ต้องการเครื่องมือที่กำหนดต่อโมเดลในพื้นที่ทำงาน",
 	"Advanced Parameters": "พารามิเตอร์ขั้นสูง",
 	"Advanced Params": "พารามิเตอร์ขั้นสูง",
-	"all": "ทั้งหมด",
 	"All Documents": "เอกสารทั้งหมด",
 	"All Users": "ผู้ใช้ทั้งหมด",
-	"Allow": "อนุญาต",
 	"Allow Chat Deletion": "อนุญาตการลบการสนทนา",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "อนุญาตเสียงที่ไม่ใช่ท้องถิ่น",
@@ -98,6 +95,7 @@
 	"Cancel": "ยกเลิก",
 	"Capabilities": "ความสามารถ",
 	"Change Password": "เปลี่ยนรหัสผ่าน",
+	"Character": "",
 	"Chat": "แชท",
 	"Chat Background Image": "ภาพพื้นหลังแชท",
 	"Chat Bubble UI": "UI ฟองแชท",
@@ -120,13 +118,13 @@
 	"Click here to select": "คลิกที่นี่เพื่อเลือก",
 	"Click here to select a csv file.": "คลิกที่นี่เพื่อเลือกไฟล์ csv",
 	"Click here to select a py file.": "คลิกที่นี่เพื่อเลือกไฟล์ py",
-	"Click here to select documents.": "คลิกที่นี่เพื่อเลือกเอกสาร",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "คลิกที่นี่",
 	"Click on the user role button to change a user's role.": "คลิกที่ปุ่มบทบาทผู้ใช้เพื่อเปลี่ยนบทบาทของผู้ใช้",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "การอนุญาตเขียนคลิปบอร์ดถูกปฏิเสธ โปรดตรวจสอบการตั้งค่าเบราว์เซอร์ของคุณเพื่อให้สิทธิ์ที่จำเป็น",
 	"Clone": "โคลน",
 	"Close": "ปิด",
+	"Code execution": "",
 	"Code formatted successfully": "จัดรูปแบบโค้ดสำเร็จแล้ว",
 	"Collection": "คอลเลคชัน",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "คัดลอกบล็อกโค้ดสุดท้าย",
 	"Copy last response": "คัดลอกการตอบสนองล่าสุด",
 	"Copy Link": "คัดลอกลิงก์",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "คัดลอกไปยังคลิปบอร์ดสำเร็จแล้ว!",
 	"Create a model": "สร้างโมเดล",
 	"Create Account": "สร้างบัญชี",
@@ -180,14 +179,12 @@
 	"Default model updated": "อัปเดตโมเดลค่าเริ่มต้นแล้ว",
 	"Default Prompt Suggestions": "คำแนะนำพรอมต์ค่าเริ่มต้น",
 	"Default User Role": "บทบาทผู้ใช้ค่าเริ่มต้น",
-	"delete": "ลบ",
 	"Delete": "ลบ",
 	"Delete a model": "ลบโมเดล",
 	"Delete All Chats": "ลบการสนทนาทั้งหมด",
 	"Delete chat": "ลบแชท",
 	"Delete Chat": "ลบแชท",
 	"Delete chat?": "ลบแชท?",
-	"Delete Doc": "",
 	"Delete function?": "ลบฟังก์ชัน?",
 	"Delete prompt?": "ลบพรอมต์?",
 	"delete this link": "ลบลิงก์นี้",
@@ -215,7 +212,6 @@
 	"Documentation": "เอกสารประกอบ",
 	"Documents": "เอกสาร",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "ไม่เชื่อมต่อภายนอกใดๆ และข้อมูลของคุณจะอยู่บนเซิร์ฟเวอร์ที่โฮสต์ในท้องถิ่นของคุณอย่างปลอดภัย",
-	"Don't Allow": "ไม่อนุญาต",
 	"Don't have an account?": "ยังไม่มีบัญชี?",
 	"don't install random functions from sources you don't trust.": "อย่าติดตั้งฟังก์ชันแบบสุ่มจากแหล่งที่คุณไม่ไว้วางใจ",
 	"don't install random tools from sources you don't trust.": "อย่าติดตั้งเครื่องมือแบบสุ่มจากแหล่งที่คุณไม่ไว้วางใจ",
@@ -224,10 +220,11 @@
 	"Download": "ดาวน์โหลด",
 	"Download canceled": "ยกเลิกการดาวน์โหลด",
 	"Download Database": "ดาวน์โหลดฐานข้อมูล",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "วางไฟล์ใดๆ ที่นี่เพื่อเพิ่มในการสนทนา",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "เช่น '30s', '10m' หน่วยเวลาที่ถูกต้องคือ 's', 'm', 'h'",
 	"Edit": "แก้ไข",
-	"Edit Doc": "แก้ไขเอกสาร",
 	"Edit Memory": "แก้ไขความจำ",
 	"Edit User": "แก้ไขผู้ใช้",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "ใส่รหัสผ่านของคุณ",
 	"Enter Your Role": "ใส่บทบาทของคุณ",
 	"Error": "ข้อผิดพลาด",
+	"ERROR": "",
 	"Experimental": "การทดลอง",
 	"Export": "ส่งออก",
 	"Export All Chats (All Users)": "ส่งออกการสนทนาทั้งหมด (ผู้ใช้ทั้งหมด)",
 	"Export chat (.json)": "ส่งออกการสนทนา (.json)",
 	"Export Chats": "ส่งออกการสนทนา",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "ส่งออกการแมปเอกสาร",
 	"Export Functions": "ส่งออกฟังก์ชัน",
 	"Export LiteLLM config.yaml": "ส่งออกการตั้งค่า LiteLLM config.yaml",
 	"Export Models": "ส่งออกโมเดล",
@@ -357,7 +354,6 @@
 	"Images": "ภาพ",
 	"Import Chats": "นำเข้าการสนทนา",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "นำเข้าการแมปเอกสาร",
 	"Import Functions": "นำเข้าฟังก์ชัน",
 	"Import Models": "นำเข้าโมเดล",
 	"Import Prompts": "นำเข้าพรอมต์",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "ติดตั้งจาก URL ของ Github",
 	"Instant Auto-Send After Voice Transcription": "ส่งอัตโนมัติทันทีหลังจากการถอดเสียง",
 	"Interface": "อินเทอร์เฟซ",
+	"Invalid file format.": "",
 	"Invalid Tag": "แท็กไม่ถูกต้อง",
 	"January": "มกราคม",
 	"join our Discord for help.": "เข้าร่วม Discord ของเราเพื่อขอความช่วยเหลือ",
@@ -446,13 +443,13 @@
 	"More": "เพิ่มเติม",
 	"Move to Top": "",
 	"Name": "ชื่อ",
-	"Name Tag": "ป้ายชื่อ",
 	"Name your model": "ตั้งชื่อโมเดลของคุณ",
 	"New Chat": "แชทใหม่",
 	"New Password": "รหัสผ่านใหม่",
 	"No content found": "",
 	"No content to speak": "ไม่มีเนื้อหาที่จะพูด",
 	"No file selected": "ไม่ได้เลือกไฟล์",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "ไม่มีผลลัพธ์",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "จำเป็นต้องใช้ URL/คีย์ OpenAI",
 	"or": "หรือ",
 	"Other": "อื่น ๆ",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "ตั้งค่าโมเดลการจัดอันดับใหม่เป็น \"{{reranking_model}}\"",
 	"Reset": "รีเซ็ต",
 	"Reset Upload Directory": "รีเซ็ตไดเร็กทอรีการอัปโหลด",
-	"Reset Vector Storage": "รีเซ็ตการจัดเก็บเวกเตอร์",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "ตอบสนองการคัดลอกอัตโนมัติไปยังคลิปบอร์ด",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "ไม่สามารถเปิดการแจ้งเตือนการตอบสนองได้เนื่องจากเว็บไซต์ปฏิเสธ กรุณาเข้าการตั้งค่าเบราว์เซอร์ของคุณเพื่อให้สิทธิ์การเข้าถึงที่จำเป็น",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "ค้นหาโมเดล",
 	"Search Chats": "ค้นหาแชท",
 	"Search Collection": "",
-	"Search Documents": "ค้นหาเอกสาร",
+	"search for tags": "",
 	"Search Functions": "ค้นหาฟังก์ชัน",
 	"Search Knowledge": "",
 	"Search Models": "ค้นหาโมเดล",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "ข้อผิดพลาดในการรู้จำเสียง: {{error}}",
 	"Speech-to-Text Engine": "เครื่องมือแปลงเสียงเป็นข้อความ",
+	"Stop": "",
 	"Stop Sequence": "หยุดลำดับ",
 	"Stream Chat Response": "",
 	"STT Model": "โมเดลแปลงเสียงเป็นข้อความ",
@@ -666,6 +665,7 @@
 	"Template": "แม่แบบ",
 	"Temporary Chat": "",
 	"Text Completion": "การเติมข้อความ",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "เครื่องมือแปลงข้อความเป็นเสียง",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "ขอบคุณสำหรับความคิดเห็นของคุณ!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "คำอธิบายอย่างละเอียด",
 	"Tika": "Tika",
 	"Tika Server URL required.": "จำเป็นต้องมี URL ของเซิร์ฟเวอร์ Tika",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "เคล็ดลับ: อัปเดตช่องตัวแปรหลายช่องติดต่อกันโดยการกดปุ่มแท็บในช่องใส่ข้อความแชทหลังจากแต่ละการแทนที่",
 	"Title": "ชื่อเรื่อง",
 	"Title (e.g. Tell me a fun fact)": "ชื่อเรื่อง (เช่น บอกข้อเท็จจริงที่น่าสนุก)",
@@ -701,6 +702,7 @@
 	"Today": "วันนี้",
 	"Toggle settings": "สลับการตั้งค่า",
 	"Toggle sidebar": "สลับแถบด้านข้าง",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "โทเค็นที่เก็บไว้เมื่อรีเฟรชบริบท (num_keep)",
 	"Tool created successfully": "สร้างเครื่องมือเรียบร้อยแล้ว",
 	"Tool deleted successfully": "ลบเครื่องมือเรียบร้อยแล้ว",
@@ -739,7 +741,6 @@
 	"Upload Progress": "ความคืบหน้าการอัปโหลด",
 	"URL Mode": "โหมด URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "ใช้ '#' ในการใส่พรอมต์เพื่อโหลดและเลือกเอกสารของคุณ",
 	"Use Gravatar": "ใช้ Gravatar",
 	"Use Initials": "ใช้ตัวย่อ",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/tk-TW/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "",
-	"Add Docs": "",
 	"Add Files": "",
 	"Add Memory": "",
 	"Add message": "",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
 	"Advanced Parameters": "",
 	"Advanced Params": "",
-	"all": "",
 	"All Documents": "",
 	"All Users": "",
-	"Allow": "",
 	"Allow Chat Deletion": "",
 	"Allow Chat Editing": "",
 	"Allow non-local voices": "",
@@ -98,6 +95,7 @@
 	"Cancel": "",
 	"Capabilities": "",
 	"Change Password": "",
+	"Character": "",
 	"Chat": "",
 	"Chat Background Image": "",
 	"Chat Bubble UI": "",
@@ -120,13 +118,13 @@
 	"Click here to select": "",
 	"Click here to select a csv file.": "",
 	"Click here to select a py file.": "",
-	"Click here to select documents.": "",
 	"Click here to upload a workflow.json file.": "",
 	"click here.": "",
 	"Click on the user role button to change a user's role.": "",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "",
 	"Clone": "",
 	"Close": "",
+	"Code execution": "",
 	"Code formatted successfully": "",
 	"Collection": "",
 	"ComfyUI": "",
@@ -155,6 +153,7 @@
 	"Copy last code block": "",
 	"Copy last response": "",
 	"Copy Link": "",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "",
 	"Create a model": "",
 	"Create Account": "",
@@ -180,14 +179,12 @@
 	"Default model updated": "",
 	"Default Prompt Suggestions": "",
 	"Default User Role": "",
-	"delete": "",
 	"Delete": "",
 	"Delete a model": "",
 	"Delete All Chats": "",
 	"Delete chat": "",
 	"Delete Chat": "",
 	"Delete chat?": "",
-	"Delete Doc": "",
 	"Delete function?": "",
 	"Delete prompt?": "",
 	"delete this link": "",
@@ -215,7 +212,6 @@
 	"Documentation": "",
 	"Documents": "",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "",
-	"Don't Allow": "",
 	"Don't have an account?": "",
 	"don't install random functions from sources you don't trust.": "",
 	"don't install random tools from sources you don't trust.": "",
@@ -224,10 +220,11 @@
 	"Download": "",
 	"Download canceled": "",
 	"Download Database": "",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
 	"Edit": "",
-	"Edit Doc": "",
 	"Edit Memory": "",
 	"Edit User": "",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "",
 	"Enter Your Role": "",
 	"Error": "",
+	"ERROR": "",
 	"Experimental": "",
 	"Export": "",
 	"Export All Chats (All Users)": "",
 	"Export chat (.json)": "",
 	"Export Chats": "",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "",
 	"Export Functions": "",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "",
@@ -357,7 +354,6 @@
 	"Images": "",
 	"Import Chats": "",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "",
 	"Import Functions": "",
 	"Import Models": "",
 	"Import Prompts": "",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "",
 	"Instant Auto-Send After Voice Transcription": "",
 	"Interface": "",
+	"Invalid file format.": "",
 	"Invalid Tag": "",
 	"January": "",
 	"join our Discord for help.": "",
@@ -446,13 +443,13 @@
 	"More": "",
 	"Move to Top": "",
 	"Name": "",
-	"Name Tag": "",
 	"Name your model": "",
 	"New Chat": "",
 	"New Password": "",
 	"No content found": "",
 	"No content to speak": "",
 	"No file selected": "",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "",
 	"or": "",
 	"Other": "",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "",
 	"Reset": "",
 	"Reset Upload Directory": "",
-	"Reset Vector Storage": "",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "",
 	"Search Chats": "",
 	"Search Collection": "",
-	"Search Documents": "",
+	"search for tags": "",
 	"Search Functions": "",
 	"Search Knowledge": "",
 	"Search Models": "",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "",
 	"Speech-to-Text Engine": "",
+	"Stop": "",
 	"Stop Sequence": "",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -666,6 +665,7 @@
 	"Template": "",
 	"Temporary Chat": "",
 	"Text Completion": "",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "",
 	"Tfs Z": "",
 	"Thanks for your feedback!": "",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "",
 	"Tika": "",
 	"Tika Server URL required.": "",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "",
 	"Title": "",
 	"Title (e.g. Tell me a fun fact)": "",
@@ -701,6 +702,7 @@
 	"Today": "",
 	"Toggle settings": "",
 	"Toggle sidebar": "",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "",
 	"Tool deleted successfully": "",
@@ -739,7 +741,6 @@
 	"Upload Progress": "",
 	"URL Mode": "",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "",
 	"Use Gravatar": "",
 	"Use Initials": "",
 	"use_mlock (Ollama)": "",

+ 15 - 14
src/lib/i18n/locales/tr-TR/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Özel prompt ekleyin",
-	"Add Docs": "Belgeler Ekle",
 	"Add Files": "Dosyalar Ekle",
 	"Add Memory": "Bellek Ekle",
 	"Add message": "Mesaj Ekle",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Yöneticiler her zaman tüm araçlara erişebilir; kullanıcıların çalışma alanındaki model başına atanmış araçlara ihtiyacı vardır.",
 	"Advanced Parameters": "Gelişmiş Parametreler",
 	"Advanced Params": "Gelişmiş Parametreler",
-	"all": "tümü",
 	"All Documents": "Tüm Belgeler",
 	"All Users": "Tüm Kullanıcılar",
-	"Allow": "İzin ver",
 	"Allow Chat Deletion": "Sohbet Silmeye İzin Ver",
 	"Allow Chat Editing": "Soğbet Düzenlemeye İzin Ver",
 	"Allow non-local voices": "Yerel olmayan seslere izin verin",
@@ -98,6 +95,7 @@
 	"Cancel": "İptal",
 	"Capabilities": "Yetenekler",
 	"Change Password": "Parola Değiştir",
+	"Character": "",
 	"Chat": "Sohbet",
 	"Chat Background Image": "Sohbet Arka Plan Resmi",
 	"Chat Bubble UI": "Sohbet Balonu Arayüzü",
@@ -120,13 +118,13 @@
 	"Click here to select": "Seçmek için buraya tıklayın",
 	"Click here to select a csv file.": "Bir CSV dosyası seçmek için buraya tıklayın.",
 	"Click here to select a py file.": "Bir py dosyası seçmek için buraya tıklayın.",
-	"Click here to select documents.": "Belgeleri seçmek için buraya tıklayın.",
 	"Click here to upload a workflow.json file.": "Bir workflow.json dosyası yüklemek için buraya tıklayın.",
 	"click here.": "buraya tıklayın.",
 	"Click on the user role button to change a user's role.": "Bir kullanıcının rolünü değiştirmek için kullanıcı rolü düğmesine tıklayın.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Panoya yazma izni reddedildi. Tarayıcı ayarlarını kontrol ederek gerekli izinleri sağlayabilirsiniz.",
 	"Clone": "Klon",
 	"Close": "Kapat",
+	"Code execution": "",
 	"Code formatted successfully": "Kod başarıyla biçimlendirildi",
 	"Collection": "Koleksiyon",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Son kod bloğunu kopyala",
 	"Copy last response": "Son yanıtı kopyala",
 	"Copy Link": "Bağlantıyı Kopyala",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Panoya kopyalama başarılı!",
 	"Create a model": "Bir model oluştur",
 	"Create Account": "Hesap Oluştur",
@@ -180,14 +179,12 @@
 	"Default model updated": "Varsayılan model güncellendi",
 	"Default Prompt Suggestions": "Varsayılan Prompt Önerileri",
 	"Default User Role": "Varsayılan Kullanıcı Rolü",
-	"delete": "sil",
 	"Delete": "Sil",
 	"Delete a model": "Bir modeli sil",
 	"Delete All Chats": "Tüm Sohbetleri Sil",
 	"Delete chat": "Sohbeti sil",
 	"Delete Chat": "Sohbeti Sil",
 	"Delete chat?": "Sohbeti sil?",
-	"Delete Doc": "Belgeyi Sil",
 	"Delete function?": "Fonksiyonu sil?",
 	"Delete prompt?": "Promptu sil?",
 	"delete this link": "bu bağlantıyı sil",
@@ -215,7 +212,6 @@
 	"Documentation": "Dökümantasyon",
 	"Documents": "Belgeler",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "herhangi bir harici bağlantı yapmaz ve verileriniz güvenli bir şekilde yerel olarak barındırılan sunucunuzda kalır.",
-	"Don't Allow": "İzin Verme",
 	"Don't have an account?": "Hesabınız yok mu?",
 	"don't install random functions from sources you don't trust.": "Tanımadığınız kaynaklardan rastgele fonksiyonlar yüklemeyin.",
 	"don't install random tools from sources you don't trust.": "Tanımadığınız kaynaklardan rastgele araçlar yüklemeyin.",
@@ -224,10 +220,11 @@
 	"Download": "İndir",
 	"Download canceled": "İndirme iptal edildi",
 	"Download Database": "Veritabanını İndir",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Sohbete eklemek istediğiniz dosyaları buraya bırakın",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "örn. '30s', '10m'. Geçerli zaman birimleri 's', 'm', 'h'.",
 	"Edit": "Düzenle",
-	"Edit Doc": "Belgeyi Düzenle",
 	"Edit Memory": "Belleği Düzenle",
 	"Edit User": "Kullanıcıyı Düzenle",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Parolanızı Girin",
 	"Enter Your Role": "Rolünüzü Girin",
 	"Error": "Hata",
+	"ERROR": "",
 	"Experimental": "Deneysel",
 	"Export": "Dışa Aktar",
 	"Export All Chats (All Users)": "Tüm Sohbetleri Dışa Aktar (Tüm Kullanıcılar)",
 	"Export chat (.json)": "Sohbeti dışa aktar (.json)",
 	"Export Chats": "Sohbetleri Dışa Aktar",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Belge Eşlemesini Dışa Aktar",
 	"Export Functions": "Fonksiyonları Dışa Aktar",
 	"Export LiteLLM config.yaml": "LiteLLM config.yaml'ı Dışa Aktar",
 	"Export Models": "Modelleri Dışa Aktar",
@@ -357,7 +354,6 @@
 	"Images": "Görüntüler",
 	"Import Chats": "Sohbetleri İçe Aktar",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Belge Eşlemesini İçe Aktar",
 	"Import Functions": "Fonksiyonları İçe Aktar",
 	"Import Models": "Modelleri İçe Aktar",
 	"Import Prompts": "Promptları İçe Aktar",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Github URL'sinden yükleyin",
 	"Instant Auto-Send After Voice Transcription": "Ses Transkripsiyonundan Sonra Anında Otomatik Gönder",
 	"Interface": "Arayüz",
+	"Invalid file format.": "",
 	"Invalid Tag": "Geçersiz etiket",
 	"January": "Ocak",
 	"join our Discord for help.": "yardım için Discord'umuza katılın.",
@@ -446,13 +443,13 @@
 	"More": "Daha Fazla",
 	"Move to Top": "En Üste Taşı",
 	"Name": "Ad",
-	"Name Tag": "Ad Etiketi",
 	"Name your model": "Modelinizi Adlandırın",
 	"New Chat": "Yeni Sohbet",
 	"New Password": "Yeni Parola",
 	"No content found": "",
 	"No content to speak": "Konuşacak içerik yok",
 	"No file selected": "Hiçbir dosya seçilmedi",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Sonuç bulunamadı",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "OpenAI URL/Anahtar gereklidir.",
 	"or": "veya",
 	"Other": "Diğer",
+	"OUTPUT": "",
 	"Output format": "Çıktı formatı",
 	"Overview": "Genel Bakış",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Yeniden sıralama modeli \"{{reranking_model}}\" olarak ayarlandı",
 	"Reset": "Sıfırla",
 	"Reset Upload Directory": "Yükleme Dizinini Sıfırla",
-	"Reset Vector Storage": "Vektör Depolamayı Sıfırla",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Web sitesi izinleri reddedildiğinden yanıt bildirimleri etkinleştirilemiyor. Gerekli erişimi sağlamak için lütfen tarayıcı ayarlarınızı ziyaret edin.",
 	"Response splitting": "Yanıt bölme",
@@ -570,7 +568,7 @@
 	"Search a model": "Bir model ara",
 	"Search Chats": "Sohbetleri Ara",
 	"Search Collection": "",
-	"Search Documents": "Belgeleri Ara",
+	"search for tags": "",
 	"Search Functions": "Fonksiyonları Ara",
 	"Search Knowledge": "",
 	"Search Models": "Modelleri Ara",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "Konuşma Oynatma Hızı",
 	"Speech recognition error: {{error}}": "Konuşma tanıma hatası: {{error}}",
 	"Speech-to-Text Engine": "Konuşmadan Metne Motoru",
+	"Stop": "",
 	"Stop Sequence": "Diziyi Durdur",
 	"Stream Chat Response": "",
 	"STT Model": "STT Modeli",
@@ -666,6 +665,7 @@
 	"Template": "Şablon",
 	"Temporary Chat": "Geçici Sohbet",
 	"Text Completion": "Metin Tamamlama",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Metinden Sese Motoru",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Geri bildiriminiz için teşekkürler!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "Kapsamlı açıklama",
 	"Tika": "",
 	"Tika Server URL required.": "Tika Sunucu URL'si gereklidir.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "İpucu: Her değiştirmeden sonra sohbet girişinde tab tuşuna basarak birden fazla değişken yuvasını art arda güncelleyin.",
 	"Title": "Başlık",
 	"Title (e.g. Tell me a fun fact)": "Başlık (e.g. Bana ilginç bir bilgi ver)",
@@ -701,6 +702,7 @@
 	"Today": "Bugün",
 	"Toggle settings": "Ayarları Aç/Kapat",
 	"Toggle sidebar": "Kenar Çubuğunu Aç/Kapat",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Bağlam Yenilemesinde Korunacak Tokenler (num_keep)",
 	"Tool created successfully": "Araç başarıyla oluşturuldu",
 	"Tool deleted successfully": "Araç başarıyla silindi",
@@ -739,7 +741,6 @@
 	"Upload Progress": "Yükleme İlerlemesi",
 	"URL Mode": "URL Modu",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Belgelerinizi yüklemek ve seçmek için promptda '#' kullanın.",
 	"Use Gravatar": "Gravatar Kullan",
 	"Use Initials": "Baş Harfleri Kullan",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 55 - 54
src/lib/i18n/locales/uk-UA/translation.json

@@ -23,17 +23,16 @@
 	"Add a short description about what this model does": "Додайте короткий опис того, що робить ця модель",
 	"Add a short title for this prompt": "Додати коротку назву для цього промту",
 	"Add a tag": "Додайте тег",
-	"Add Content": "",
-	"Add content here": "",
+	"Add Content": "Додати вміст",
+	"Add content here": "Додайте вміст сюди",
 	"Add custom prompt": "Додати користувацьку підказку",
-	"Add Docs": "Додати документи",
 	"Add Files": "Додати файли",
 	"Add Memory": "Додати пам'ять",
 	"Add message": "Додати повідомлення",
 	"Add Model": "Додати модель",
 	"Add Tag": "Додати тег",
 	"Add Tags": "Додати теги",
-	"Add text content": "",
+	"Add text content": "Додати текстовий вміст",
 	"Add User": "Додати користувача",
 	"Adjusting these settings will apply changes universally to all users.": "Зміни в цих налаштуваннях будуть застосовані для всіх користувачів.",
 	"admin": "адмін",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Адміністратори мають доступ до всіх інструментів у будь-який час; користувачам потрібні інструменти, призначені для кожної моделі в робочій області.",
 	"Advanced Parameters": "Розширені параметри",
 	"Advanced Params": "Розширені параметри",
-	"all": "всі",
 	"All Documents": "Усі документи",
 	"All Users": "Всі користувачі",
-	"Allow": "Дозволити",
 	"Allow Chat Deletion": "Дозволити видалення чату",
 	"Allow Chat Editing": "Дозволити редагування чату",
 	"Allow non-local voices": "Дозволити не локальні голоси",
@@ -68,8 +65,8 @@
 	"Archived Chats": "Архівовані чати",
 	"are allowed - Activate this command by typing": "дозволено - активізуйте цю команду набором",
 	"Are you sure?": "Ви впевнені?",
-	"Artifacts": "",
-	"Ask a question": "",
+	"Artifacts": "Артефакти",
+	"Ask a question": "Задати питання",
 	"Attach file": "Прикріпити файл",
 	"Attention to detail": "Увага до деталей",
 	"Audio": "Аудіо",
@@ -98,6 +95,7 @@
 	"Cancel": "Скасувати",
 	"Capabilities": "Можливості",
 	"Change Password": "Змінити пароль",
+	"Character": "",
 	"Chat": "Чат",
 	"Chat Background Image": "Фонове зображення чату",
 	"Chat Bubble UI": "Чат у вигляді бульбашок",
@@ -120,13 +118,13 @@
 	"Click here to select": "Натисніть тут, щоб обрати",
 	"Click here to select a csv file.": "Натисніть тут, щоб обрати csv-файл.",
 	"Click here to select a py file.": "Натисніть тут, щоб обрати py-файл.",
-	"Click here to select documents.": "Натисніть тут, щоб обрати документи.",
 	"Click here to upload a workflow.json file.": "Натисніть тут, щоб завантажити файл workflow.json.",
 	"click here.": "клацніть тут.",
 	"Click on the user role button to change a user's role.": "Натисніть кнопку ролі користувача, щоб змінити роль користувача.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Відмовлено в дозволі на запис до буфера обміну. Будь ласка, перевірте налаштування вашого браузера, щоб надати необхідний доступ.",
 	"Clone": "Клонувати",
 	"Close": "Закрити",
+	"Code execution": "",
 	"Code formatted successfully": "Код успішно відформатовано",
 	"Collection": "Колекція",
 	"ComfyUI": "ComfyUI",
@@ -155,10 +153,11 @@
 	"Copy last code block": "Копіювати останній блок коду",
 	"Copy last response": "Копіювати останню відповідь",
 	"Copy Link": "Копіювати посилання",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Копіювання в буфер обміну виконано успішно!",
 	"Create a model": "Створити модель",
 	"Create Account": "Створити обліковий запис",
-	"Create Knowledge": "",
+	"Create Knowledge": "Створити знання",
 	"Create new key": "Створити новий ключ",
 	"Create new secret key": "Створити новий секретний ключ",
 	"Created at": "Створено у",
@@ -180,14 +179,12 @@
 	"Default model updated": "Модель за замовчуванням оновлено",
 	"Default Prompt Suggestions": "Пропозиції промтів замовчуванням",
 	"Default User Role": "Роль користувача за замовчуванням",
-	"delete": "видалити",
 	"Delete": "Видалити",
 	"Delete a model": "Видалити модель",
 	"Delete All Chats": "Видалити усі чати",
 	"Delete chat": "Видалити чат",
 	"Delete Chat": "Видалити чат",
 	"Delete chat?": "Видалити чат?",
-	"Delete Doc": "Видалити док",
 	"Delete function?": "Видалити функцію?",
 	"Delete prompt?": "Видалити промт?",
 	"delete this link": "видалити це посилання",
@@ -215,7 +212,6 @@
 	"Documentation": "Документація",
 	"Documents": "Документи",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "не встановлює жодних зовнішніх з'єднань, і ваші дані залишаються в безпеці на вашому локальному сервері.",
-	"Don't Allow": "Не дозволяти",
 	"Don't have an account?": "Немає облікового запису?",
 	"don't install random functions from sources you don't trust.": "не встановлюйте випадкові функції з джерел, яким ви не довіряєте.",
 	"don't install random tools from sources you don't trust.": "не встановлюйте випадкові інструменти з джерел, яким ви не довіряєте.",
@@ -224,10 +220,11 @@
 	"Download": "Завантажити",
 	"Download canceled": "Завантаження скасовано",
 	"Download Database": "Завантажити базу даних",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Перетягніть сюди файли, щоб додати до розмови",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр., '30s','10m'. Дійсні одиниці часу: 'с', 'хв', 'г'.",
 	"Edit": "Редагувати",
-	"Edit Doc": "Редагувати документ",
 	"Edit Memory": "Редагувати пам'ять",
 	"Edit User": "Редагувати користувача",
 	"ElevenLabs": "ElevenLabs",
@@ -281,32 +278,32 @@
 	"Enter Your Password": "Введіть ваш пароль",
 	"Enter Your Role": "Введіть вашу роль",
 	"Error": "Помилка",
+	"ERROR": "",
 	"Experimental": "Експериментальне",
 	"Export": "Експорт",
 	"Export All Chats (All Users)": "Експортувати всі чати (всіх користувачів)",
 	"Export chat (.json)": "Експорт чату (.json)",
 	"Export Chats": "Експортувати чати",
 	"Export Config to JSON File": "Експортувати конфігурацію у файл JSON",
-	"Export Documents Mapping": "Експортувати відображення документів",
 	"Export Functions": "Експорт функцій ",
 	"Export LiteLLM config.yaml": "Експорт LiteLLM config.yaml",
 	"Export Models": "Експорт моделей",
 	"Export Prompts": "Експортувати промти",
 	"Export Tools": "Експортувати інструменти",
 	"External Models": "Зовнішні моделі",
-	"Failed to add file.": "",
+	"Failed to add file.": "Не вдалося додати файл.",
 	"Failed to create API Key.": "Не вдалося створити API ключ.",
 	"Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну",
 	"Failed to update settings": "Не вдалося оновити налаштування",
-	"Failed to upload file.": "",
+	"Failed to upload file.": "Не вдалося завантажити файл.",
 	"February": "Лютий",
 	"Feel free to add specific details": "Не соромтеся додавати конкретні деталі",
 	"File": "Файл",
-	"File added successfully.": "",
-	"File content updated successfully.": "",
+	"File added successfully.": "Файл успішно додано.",
+	"File content updated successfully.": "Вміст файлу успішно оновлено.",
 	"File Mode": "Файловий режим",
 	"File not found.": "Файл не знайдено.",
-	"File removed successfully.": "",
+	"File removed successfully.": "Файл успішно видалено.",
 	"File size should not exceed {{maxSize}} MB.": "Розмір файлу не повинен перевищувати {{maxSize}} МБ.",
 	"Files": "Файли",
 	"Filter is now globally disabled": "Фільтр глобально вимкнено",
@@ -357,7 +354,6 @@
 	"Images": "Зображення",
 	"Import Chats": "Імпортувати чати",
 	"Import Config from JSON File": "Імпортувати конфігурацію з файлу JSON",
-	"Import Documents Mapping": "Імпортувати відображення документів",
 	"Import Functions": "Імпорт функцій ",
 	"Import Models": "Імпорт моделей",
 	"Import Prompts": "Імпортувати промти",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Встановіть з URL-адреси Github",
 	"Instant Auto-Send After Voice Transcription": "Миттєва автоматична відправка після транскрипції голосу",
 	"Interface": "Інтерфейс",
+	"Invalid file format.": "",
 	"Invalid Tag": "Недійсний тег",
 	"January": "Січень",
 	"join our Discord for help.": "приєднуйтеся до нашого Discord для допомоги.",
@@ -381,11 +378,11 @@
 	"Keep Alive": "Зберегти активність",
 	"Keyboard shortcuts": "Клавіатурні скорочення",
 	"Knowledge": "Знання",
-	"Knowledge created successfully.": "",
-	"Knowledge deleted successfully.": "",
-	"Knowledge reset successfully.": "",
-	"Knowledge updated successfully": "",
-	"Landing Page Mode": "",
+	"Knowledge created successfully.": "Знання успішно створено.",
+	"Knowledge deleted successfully.": "Знання успішно видалено.",
+	"Knowledge reset successfully.": "Знання успішно скинуто.",
+	"Knowledge updated successfully": "Знання успішно оновлено",
+	"Landing Page Mode": "Режим головної сторінки",
 	"Language": "Мова",
 	"large language models, locally.": "великими мовними моделями, локально.",
 	"Last Active": "Остання активність",
@@ -446,15 +443,15 @@
 	"More": "Більше",
 	"Move to Top": "Перейти до початку",
 	"Name": "Ім'я",
-	"Name Tag": "Назва тегу",
 	"Name your model": "Назвіть свою модель",
 	"New Chat": "Новий чат",
 	"New Password": "Новий пароль",
-	"No content found": "",
+	"No content found": "Контент не знайдено.",
 	"No content to speak": "Нема чого говорити",
 	"No file selected": "Файл не обрано",
-	"No HTML, CSS, or JavaScript content found.": "",
-	"No knowledge found": "",
+	"No files found.": "",
+	"No HTML, CSS, or JavaScript content found.": "HTML, CSS або JavaScript контент не знайдено.",
+	"No knowledge found": "Знання не знайдено.",
 	"No results found": "Не знайдено жодного результату",
 	"No search query generated": "Пошуковий запит не сформовано",
 	"No source available": "Джерело не доступне",
@@ -479,13 +476,13 @@
 	"On": "Увімк",
 	"Only": "Тільки",
 	"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 collections can be edited, create a new knowledge base to edit/add documents.": "Редагувати можна лише колекції, створіть нову базу знань, щоб редагувати або додавати документи.",
 	"Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ой! Зачекайте, будь ласка! Ваші файли ще готуються. Ми робимо все, щоб вони були ідеальними. Будь ласка, будьте терплячі, ми повідомимо вам, коли вони будуть готові.",
 	"Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Схоже, що URL-адреса невірна. Будь ласка, перевірте ще раз та спробуйте ще раз.",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "Упс! У попередній відповіді сталася помилка. Будь ласка, спробуйте ще раз або зверніться до адміністратора.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.",
 	"Open file": "Відкрити файл",
-	"Open in full screen": "",
+	"Open in full screen": "Відкрити на весь екран",
 	"Open new chat": "Відкрити новий чат",
 	"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})",
 	"OpenAI": "OpenAI",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Потрібен OpenAI URL/ключ.",
 	"or": "або",
 	"Other": "Інше",
+	"OUTPUT": "",
 	"Output format": "Формат відповіді",
 	"Overview": "Огляд",
 	"page": "сторінка",
@@ -516,8 +514,8 @@
 	"Plain text (.txt)": "Простий текст (.txt)",
 	"Playground": "Майданчик",
 	"Please carefully review the following warnings:": "Будь ласка, уважно ознайомтеся з наступними попередженнями:",
-	"Please fill in all fields.": "",
-	"Please select a reason": "",
+	"Please fill in all fields.": "Будь ласка, заповніть всі поля.",
+	"Please select a reason": "Будь ласка, виберіть причину",
 	"Positive attitude": "Позитивне ставлення",
 	"Previous 30 days": "Попередні 30 днів",
 	"Previous 7 days": "Попередні 7 днів",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Модель переранжування встановлено на \"{{reranking_model}}\"",
 	"Reset": "Скидання",
 	"Reset Upload Directory": "Скинути каталог завантажень",
-	"Reset Vector Storage": "Скинути векторне сховище",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Сповіщення про відповіді не можуть бути активовані, оскільки вам було відмовлено в доступі до веб-сайту. Будь ласка, відвідайте налаштування вашого браузера, щоб надати необхідний доступ.",
 	"Response splitting": "Розбиття відповіді",
@@ -563,16 +561,16 @@
 	"Save & Update": "Зберегти та оновити",
 	"Save As Copy": "Зберегти як копію",
 	"Save Tag": "Зберегти тег",
-	"Saved": "",
+	"Saved": "Збережено",
 	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Збереження журналів чату безпосередньо в сховище вашого браузера більше не підтримується. Будь ласка, завантажте та видаліть журнали чату, натиснувши кнопку нижче. Не хвилюйтеся, ви можете легко повторно імпортувати журнали чату до бекенду через",
 	"Scroll to bottom when switching between branches": "Перемотувати до кінця при перемиканні між гілками",
 	"Search": "Пошук",
 	"Search a model": "Шукати модель",
 	"Search Chats": "Пошук в чатах",
-	"Search Collection": "",
-	"Search Documents": "Пошук документів",
+	"Search Collection": "Шукати колекцію",
+	"search for tags": "",
 	"Search Functions": "Пошук функцій",
-	"Search Knowledge": "",
+	"Search Knowledge": "Шукати знання",
 	"Search Models": "Пошук моделей",
 	"Search Prompts": "Пошук промтів",
 	"Search Query Generation Prompt": "Підказка для формування пошукового промту",
@@ -592,7 +590,7 @@
 	"Seed": "Сід",
 	"Select a base model": "Обрати базову модель",
 	"Select a engine": "Оберіть рушій",
-	"Select a file to view or drag and drop a file to upload": "",
+	"Select a file to view or drag and drop a file to upload": "Виберіть файл для перегляду або перетягніть і скиньте файл для завантаження.",
 	"Select a function": "Оберіть функцію",
 	"Select a model": "Оберіть модель",
 	"Select a pipeline": "Оберіть конвеєр",
@@ -600,7 +598,7 @@
 	"Select a tool": "Оберіть інструмент",
 	"Select an Ollama instance": "Оберіть екземпляр Ollama",
 	"Select Engine": "Виберіть двигун",
-	"Select Knowledge": "",
+	"Select Knowledge": "Вибрати знання",
 	"Select model": "Обрати модель",
 	"Select only one model to call": "Оберіть лише одну модель для виклику",
 	"Selected model(s) do not support image inputs": "Вибрані модель(і) не підтримують вхідні зображення",
@@ -637,15 +635,16 @@
 	"Show your support!": "Підтримайте нас!",
 	"Showcased creativity": "Продемонстрований креатив",
 	"Sign in": "Увійти",
-	"Sign in to {{WEBUI_NAME}}": "",
+	"Sign in to {{WEBUI_NAME}}": "Увійти в {{WEBUI_NAME}}",
 	"Sign Out": "Вийти",
 	"Sign up": "Зареєструватися",
-	"Sign up to {{WEBUI_NAME}}": "",
-	"Signing in to {{WEBUI_NAME}}": "",
+	"Sign up to {{WEBUI_NAME}}": "Зареєструватися в {{WEBUI_NAME}}",
+	"Signing in to {{WEBUI_NAME}}": "Увійти в {{WEBUI_NAME}}",
 	"Source": "Джерело",
 	"Speech Playback Speed": "Швидкість відтворення мовлення",
 	"Speech recognition error: {{error}}": "Помилка розпізнавання мови: {{error}}",
 	"Speech-to-Text Engine": "Система розпізнавання мови",
+	"Stop": "",
 	"Stop Sequence": "Символ зупинки",
 	"Stream Chat Response": "Відповідь стрім-чату",
 	"STT Model": "Модель STT ",
@@ -657,7 +656,7 @@
 	"Suggested": "Запропоновано",
 	"Support": "Підтримати",
 	"Support this plugin:": "Підтримайте цей плагін:",
-	"Sync directory": "",
+	"Sync directory": "Синхронізувати каталог",
 	"System": "Система",
 	"System Prompt": "Системний промт",
 	"Tags": "Теги",
@@ -668,6 +667,7 @@
 	"Template": "Шаблон",
 	"Temporary Chat": "Тимчасовий чат",
 	"Text Completion": "Завершення тексту",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Система синтезу мови",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Дякуємо за ваш відгук!",
@@ -680,12 +680,13 @@
 	"This action cannot be undone. Do you wish to continue?": "Цю дію не можна скасувати. Ви бажаєте продовжити?",
 	"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Це забезпечує збереження ваших цінних розмов у безпечному бекенд-сховищі. Дякуємо!",
 	"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Це експериментальна функція, вона може працювати не так, як очікувалося, і може бути змінена в будь-який час.",
-	"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
+	"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Цей варіант видалить усі існуючі файли в колекції та замінить їх новими завантаженими файлами.",
 	"This will delete": "Це призведе до видалення",
-	"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
+	"This will reset the knowledge base and sync all files. Do you wish to continue?": "Це скине базу знань і синхронізує всі файли. Ви бажаєте продовжити?",
 	"Thorough explanation": "Детальне пояснення",
 	"Tika": "Tika",
 	"Tika Server URL required.": "Потрібна URL-адреса сервера Tika.",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Порада: Оновіть кілька слотів змінних послідовно, натискаючи клавішу табуляції у вікні чату після кожної заміни.",
 	"Title": "Заголовок",
 	"Title (e.g. Tell me a fun fact)": "Заголовок (напр., Розкажіть мені цікавий факт)",
@@ -695,7 +696,7 @@
 	"To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,",
 	"To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,",
 	"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.",
-	"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
+	"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Щоб прикріпити базу знань тут, спочатку додайте їх до робочого простору \"Знання\".",
 	"to chat input.": "в чаті.",
 	"To select actions here, add them to the \"Functions\" workspace first.": "Щоб вибрати дії тут, спочатку додайте їх до робочої області \"Функції\".",
 	"To select filters here, add them to the \"Functions\" workspace first.": "Щоб обрати фільтри тут, спочатку додайте їх до робочої області \"Функції\".",
@@ -703,6 +704,7 @@
 	"Today": "Сьогодні",
 	"Toggle settings": "Переключити налаштування",
 	"Toggle sidebar": "Переключити бокову панель",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "Токени для збереження при оновленні контексту (num_keep)",
 	"Tool created successfully": "Інструмент успішно створено",
 	"Tool deleted successfully": "Інструмент успішно видалено",
@@ -730,18 +732,17 @@
 	"Update and Copy Link": "Оновлення та копіювання посилання",
 	"Update for the latest features and improvements.": "Оновіть програми для нових функцій та покращень.",
 	"Update password": "Оновити пароль",
-	"Updated": "",
+	"Updated": "Завантажено",
 	"Updated at": "Оновлено на",
 	"Upload": "Завантажити",
 	"Upload a GGUF model": "Завантажити GGUF модель",
-	"Upload directory": "",
-	"Upload files": "",
+	"Upload directory": "Завантажити каталог",
+	"Upload files": "Завантажити файли",
 	"Upload Files": "Завантажити файли",
 	"Upload Pipeline": "Завантажити конвеєр",
 	"Upload Progress": "Прогрес завантаження",
 	"URL Mode": "Режим URL-адреси",
-	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Для введення промтів до веб-сторінок (URL) або вибору документів, будь ласка, використовуйте символ '#'.",
+	"Use '#' in the prompt input to load and include your knowledge.": "Використовуйте '#' у полі введення підказки, щоб завантажити та включити свої знання.",
 	"Use Gravatar": "Змінити аватар",
 	"Use Initials": "Використовувати ініціали",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",
@@ -758,7 +759,7 @@
 	"variable": "змінна",
 	"variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.",
 	"Version": "Версія",
-	"Version {{selectedVersion}} of {{totalVersions}}": "",
+	"Version {{selectedVersion}} of {{totalVersions}}": "Версія {{selectedVersion}} з {{totalVersions}}",
 	"Voice": "Голос",
 	"Warning": "Увага!",
 	"Warning:": "Увага:",

+ 15 - 14
src/lib/i18n/locales/vi-VN/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "",
 	"Add content here": "",
 	"Add custom prompt": "Thêm prompt tùy chỉnh",
-	"Add Docs": "Thêm tài liệu",
 	"Add Files": "Thêm tệp",
 	"Add Memory": "Thêm bộ nhớ",
 	"Add message": "Thêm tin nhắn",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Quản trị viên luôn có quyền truy cập vào tất cả các tool; người dùng cần các tools được chỉ định cho mỗi mô hình trong workspace.",
 	"Advanced Parameters": "Các tham số Nâng cao",
 	"Advanced Params": "Các tham số Nâng cao",
-	"all": "tất cả",
 	"All Documents": "Tất cả tài liệu",
 	"All Users": "Danh sách người sử dụng",
-	"Allow": "Cho phép",
 	"Allow Chat Deletion": "Cho phép Xóa nội dung chat",
 	"Allow Chat Editing": "Cho phép Sửa nội dung chat",
 	"Allow non-local voices": "Cho phép giọng nói không bản xứ",
@@ -98,6 +95,7 @@
 	"Cancel": "Hủy bỏ",
 	"Capabilities": "Năng lực",
 	"Change Password": "Đổi Mật khẩu",
+	"Character": "",
 	"Chat": "Trò chuyện",
 	"Chat Background Image": "Hình nền trò chuyện",
 	"Chat Bubble UI": "Bảng chat",
@@ -120,13 +118,13 @@
 	"Click here to select": "Bấm vào đây để chọn",
 	"Click here to select a csv file.": "Nhấn vào đây để chọn tệp csv",
 	"Click here to select a py file.": "Nhấn vào đây để chọn tệp py",
-	"Click here to select documents.": "Bấm vào đây để chọn tài liệu.",
 	"Click here to upload a workflow.json file.": "Bấm vào đây để upload file worklow.json",
 	"click here.": "bấm vào đây.",
 	"Click on the user role button to change a user's role.": "Bấm vào nút trong cột VAI TRÒ để thay đổi quyền của người sử dụng.",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Quyền ghi vào clipboard bị từ chối. Vui lòng kiểm tra cài đặt trên trình duyệt của bạn để được cấp quyền truy cập cần thiết.",
 	"Clone": "Nhân bản",
 	"Close": "Đóng",
+	"Code execution": "",
 	"Code formatted successfully": "Mã được định dạng thành công",
 	"Collection": "Tổng hợp mọi tài liệu",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "Sao chép khối mã cuối cùng",
 	"Copy last response": "Sao chép phản hồi cuối cùng",
 	"Copy Link": "Sao chép link",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "Sao chép vào clipboard thành công!",
 	"Create a model": "Tạo model",
 	"Create Account": "Tạo Tài khoản",
@@ -180,14 +179,12 @@
 	"Default model updated": "Mô hình mặc định đã được cập nhật",
 	"Default Prompt Suggestions": "Đề xuất prompt mặc định",
 	"Default User Role": "Vai trò mặc định",
-	"delete": "xóa",
 	"Delete": "Xóa",
 	"Delete a model": "Xóa mô hình",
 	"Delete All Chats": "Xóa mọi cuộc Chat",
 	"Delete chat": "Xóa nội dung chat",
 	"Delete Chat": "Xóa chat",
 	"Delete chat?": "Xóa chat?",
-	"Delete Doc": "Xóa tài liệu",
 	"Delete function?": "Xóa function?",
 	"Delete prompt?": "Xóa prompt?",
 	"delete this link": "Xóa link này",
@@ -215,7 +212,6 @@
 	"Documentation": "Tài liệu",
 	"Documents": "Tài liệu",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "không thực hiện bất kỳ kết nối ngoài nào, và dữ liệu của bạn vẫn được lưu trữ an toàn trên máy chủ lưu trữ cục bộ của bạn.",
-	"Don't Allow": "Không Cho phép",
 	"Don't have an account?": "Không có tài khoản?",
 	"don't install random functions from sources you don't trust.": "không cài đặt các function từ các nguồn mà bạn không tin tưởng.",
 	"don't install random tools from sources you don't trust.": "không cài đặt các tools từ các nguồn mà bạn không tin tưởng.",
@@ -224,10 +220,11 @@
 	"Download": "Tải về",
 	"Download canceled": "Đã hủy download",
 	"Download Database": "Tải xuống Cơ sở dữ liệu",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "Thả bất kỳ tệp nào ở đây để thêm vào nội dung chat",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "vd: '30s','10m'. Đơn vị thời gian hợp lệ là 's', 'm', 'h'.",
 	"Edit": "Chỉnh sửa",
-	"Edit Doc": "Thay đổi tài liệu",
 	"Edit Memory": "Sửa Memory",
 	"Edit User": "Thay đổi thông tin người sử dụng",
 	"ElevenLabs": "",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "Nhập Mật khẩu của bạn",
 	"Enter Your Role": "Nhập vai trò của bạn",
 	"Error": "Lỗi",
+	"ERROR": "",
 	"Experimental": "Thử nghiệm",
 	"Export": "Xuất khẩu",
 	"Export All Chats (All Users)": "Tải về tất cả nội dung chat (tất cả mọi người)",
 	"Export chat (.json)": "Tải chat (.json)",
 	"Export Chats": "Tải nội dung chat về máy",
 	"Export Config to JSON File": "",
-	"Export Documents Mapping": "Tải cấu trúc tài liệu về máy",
 	"Export Functions": "Tải Functions về máy",
 	"Export LiteLLM config.yaml": "",
 	"Export Models": "Tải Models về máy",
@@ -357,7 +354,6 @@
 	"Images": "Hình ảnh",
 	"Import Chats": "Nạp lại nội dung chat",
 	"Import Config from JSON File": "",
-	"Import Documents Mapping": "Nạp cấu trúc tài liệu",
 	"Import Functions": "Nạp Functions",
 	"Import Models": "Nạp model",
 	"Import Prompts": "Nạp các prompt lên hệ thống",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "Cài đặt từ Github URL",
 	"Instant Auto-Send After Voice Transcription": "Tự động gửi ngay lập tức sau khi phiên dịch giọng nói",
 	"Interface": "Giao diện",
+	"Invalid file format.": "",
 	"Invalid Tag": "Tag không hợp lệ",
 	"January": "Tháng 1",
 	"join our Discord for help.": "tham gia Discord của chúng tôi để được trợ giúp.",
@@ -446,13 +443,13 @@
 	"More": "Thêm",
 	"Move to Top": "",
 	"Name": "Tên",
-	"Name Tag": "Tên Thẻ",
 	"Name your model": "Tên model",
 	"New Chat": "Tạo chat mới",
 	"New Password": "Mật khẩu mới",
 	"No content found": "",
 	"No content to speak": "Không có nội dung để nói",
 	"No file selected": "Chưa có tệp nào được chọn",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "",
 	"No knowledge found": "",
 	"No results found": "Không tìm thấy kết quả",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "Yêu cầu URL/Key API OpenAI.",
 	"or": "hoặc",
 	"Other": "Khác",
+	"OUTPUT": "",
 	"Output format": "",
 	"Overview": "",
 	"page": "",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "Reranking model được đặt thành \"{{reranking_model}}\"",
 	"Reset": "Xóa toàn bộ",
 	"Reset Upload Directory": "Xóa toàn bộ thư mục Upload",
-	"Reset Vector Storage": "Cài đặt lại Vector Storage",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Không thể kích hoạt thông báo vì trang web không cấp quyền. Vui lòng truy cập cài đặt trình duyệt của bạn để cấp quyền cần thiết.",
 	"Response splitting": "",
@@ -570,7 +568,7 @@
 	"Search a model": "Tìm model",
 	"Search Chats": "Tìm kiếm các cuộc Chat",
 	"Search Collection": "",
-	"Search Documents": "Tìm tài liệu",
+	"search for tags": "",
 	"Search Functions": "Tìm kiếm Functions",
 	"Search Knowledge": "",
 	"Search Models": "Tìm model",
@@ -643,6 +641,7 @@
 	"Speech Playback Speed": "",
 	"Speech recognition error: {{error}}": "Lỗi nhận dạng giọng nói: {{error}}",
 	"Speech-to-Text Engine": "Công cụ Nhận dạng Giọng nói",
+	"Stop": "",
 	"Stop Sequence": "Trình tự Dừng",
 	"Stream Chat Response": "",
 	"STT Model": "",
@@ -665,6 +664,7 @@
 	"Template": "Mẫu",
 	"Temporary Chat": "Chat nháp",
 	"Text Completion": "Hoàn tất Văn bản",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "Công cụ Chuyển Văn bản thành Giọng nói",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!",
@@ -683,6 +683,7 @@
 	"Thorough explanation": "Giải thích kỹ lưỡng",
 	"Tika": "",
 	"Tika Server URL required.": "Bắt buộc phải nhập URL cho Tika Server ",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Mẹo: Cập nhật nhiều khe biến liên tiếp bằng cách nhấn phím tab trong đầu vào trò chuyện sau mỗi việc thay thế.",
 	"Title": "Tiêu đề",
 	"Title (e.g. Tell me a fun fact)": "Tiêu đề (ví dụ: Hãy kể cho tôi một sự thật thú vị về...)",
@@ -700,6 +701,7 @@
 	"Today": "Hôm nay",
 	"Toggle settings": "Bật/tắt cài đặt",
 	"Toggle sidebar": "Bật/tắt thanh bên",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "",
 	"Tool created successfully": "Tool đã được tạo thành công",
 	"Tool deleted successfully": "Tool đã bị xóa",
@@ -738,7 +740,6 @@
 	"Upload Progress": "Tiến trình tải tệp lên hệ thống",
 	"URL Mode": "Chế độ URL",
 	"Use '#' in the prompt input to load and include your knowledge.": "",
-	"Use '#' in the prompt input to load and select your documents.": "Sử dụng '#' trong đầu vào của prompt để tải về và lựa chọn tài liệu của bạn cần truy vấn.",
 	"Use Gravatar": "Sử dụng Gravatar",
 	"Use Initials": "Sử dụng tên viết tắt",
 	"use_mlock (Ollama)": "use_mlock (Ollama)",

+ 15 - 14
src/lib/i18n/locales/zh-CN/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "添加内容",
 	"Add content here": "在此添加内容",
 	"Add custom prompt": "添加自定义提示词",
-	"Add Docs": "添加文档",
 	"Add Files": "添加文件",
 	"Add Memory": "添加记忆",
 	"Add message": "添加消息",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "管理员拥有所有工具的访问权限;用户则需在工作空间中为每个模型单独分配工具。",
 	"Advanced Parameters": "高级参数",
 	"Advanced Params": "高级参数",
-	"all": "所有",
 	"All Documents": "所有文档",
 	"All Users": "所有用户",
-	"Allow": "允许",
 	"Allow Chat Deletion": "允许删除对话记录",
 	"Allow Chat Editing": "允许编辑对话记录",
 	"Allow non-local voices": "允许调用非本地音色",
@@ -98,6 +95,7 @@
 	"Cancel": "取消",
 	"Capabilities": "能力",
 	"Change Password": "更改密码",
+	"Character": "",
 	"Chat": "对话",
 	"Chat Background Image": "对话背景图片",
 	"Chat Bubble UI": "气泡样式对话",
@@ -120,13 +118,13 @@
 	"Click here to select": "点击这里选择",
 	"Click here to select a csv file.": "单击此处选择 csv 文件。",
 	"Click here to select a py file.": "单击此处选择 py 文件。",
-	"Click here to select documents.": "单击选择文档",
 	"Click here to upload a workflow.json file.": "单击此处上传 workflow.json 文件。",
 	"click here.": "点击这里。",
 	"Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组。",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "写入剪贴板时被拒绝。请检查浏览器设置,授予必要权限。",
 	"Clone": "复制",
 	"Close": "关闭",
+	"Code execution": "",
 	"Code formatted successfully": "代码格式化成功",
 	"Collection": "文件集",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "复制最后一个代码块中的代码",
 	"Copy last response": "复制最后一次回复内容",
 	"Copy Link": "复制链接",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "成功复制到剪贴板!",
 	"Create a model": "创建一个模型",
 	"Create Account": "创建账号",
@@ -180,14 +179,12 @@
 	"Default model updated": "默认模型已更新",
 	"Default Prompt Suggestions": "默认提示词建议",
 	"Default User Role": "默认用户角色",
-	"delete": "删除",
 	"Delete": "删除",
 	"Delete a model": "删除一个模型",
 	"Delete All Chats": "删除所有对话记录",
 	"Delete chat": "删除对话记录",
 	"Delete Chat": "删除对话记录",
 	"Delete chat?": "删除对话记录?",
-	"Delete Doc": "删除文档",
 	"Delete function?": "删除函数?",
 	"Delete prompt?": "删除提示词?",
 	"delete this link": "此处删除这个链接",
@@ -215,7 +212,6 @@
 	"Documentation": "帮助文档",
 	"Documents": "文档",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据会安全地存储在本地托管的服务器上。",
-	"Don't Allow": "不允许",
 	"Don't have an account?": "没有账号?",
 	"don't install random functions from sources you don't trust.": "切勿随意从不完全可信的来源安装函数。",
 	"don't install random tools from sources you don't trust.": "切勿随意从不完全可信的来源安装工具。",
@@ -224,10 +220,11 @@
 	"Download": "下载",
 	"Download canceled": "下载已取消",
 	"Download Database": "下载数据库",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "拖动文件到此处以添加到对话中",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是秒:'s',分:'m',时:'h'。",
 	"Edit": "编辑",
-	"Edit Doc": "编辑文档",
 	"Edit Memory": "编辑记忆",
 	"Edit User": "编辑用户",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "输入您的密码",
 	"Enter Your Role": "输入您的权限组",
 	"Error": "错误",
+	"ERROR": "",
 	"Experimental": "实验性",
 	"Export": "导出",
 	"Export All Chats (All Users)": "导出所有用户对话",
 	"Export chat (.json)": "JSON 文件 (.json)",
 	"Export Chats": "导出对话",
 	"Export Config to JSON File": "导出配置信息至 JSON 文件中",
-	"Export Documents Mapping": "导出文档映射",
 	"Export Functions": "导出函数",
 	"Export LiteLLM config.yaml": "导出 LteLLM config.yaml 文件",
 	"Export Models": "导出模型",
@@ -357,7 +354,6 @@
 	"Images": "图像",
 	"Import Chats": "导入对话记录",
 	"Import Config from JSON File": "导入 JSON 文件中的配置信息",
-	"Import Documents Mapping": "导入文档映射",
 	"Import Functions": "导入函数",
 	"Import Models": "导入模型",
 	"Import Prompts": "导入提示词",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "从 Github URL 安装",
 	"Instant Auto-Send After Voice Transcription": "语音转录文字后即时自动发送",
 	"Interface": "界面",
+	"Invalid file format.": "",
 	"Invalid Tag": "无效标签",
 	"January": "一月",
 	"join our Discord for help.": "加入我们的 Discord 寻求帮助。",
@@ -446,13 +443,13 @@
 	"More": "更多",
 	"Move to Top": "移动到顶部",
 	"Name": "名称",
-	"Name Tag": "标签",
 	"Name your model": "为您的模型命名",
 	"New Chat": "新对话",
 	"New Password": "新密码",
 	"No content found": "未发现内容",
 	"No content to speak": "没有内容可朗读",
 	"No file selected": "未选中文件",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "未找到 HTML、CSS 或 JavaScript 内容。",
 	"No knowledge found": "未找到知识",
 	"No results found": "未找到结果",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "需要 OpenAI URL/Key",
 	"or": "或",
 	"Other": "其他",
+	"OUTPUT": "",
 	"Output format": "输出格式",
 	"Overview": "概述",
 	"page": "页",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "重排模型设置为 \"{{reranking_model}}\"",
 	"Reset": "重置",
 	"Reset Upload Directory": "重置上传目录",
-	"Reset Vector Storage": "重置向量存储",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "自动复制回复到剪贴板",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "无法激活回复时发送通知。请检查浏览器设置,并授予必要的访问权限。",
 	"Response splitting": "拆分回复",
@@ -570,7 +568,7 @@
 	"Search a model": "搜索模型",
 	"Search Chats": "搜索对话",
 	"Search Collection": "搜索文件集",
-	"Search Documents": "搜索文档",
+	"search for tags": "",
 	"Search Functions": "搜索函数",
 	"Search Knowledge": "搜索知识",
 	"Search Models": "搜索模型",
@@ -643,6 +641,7 @@
 	"Speech Playback Speed": "语音播放速度",
 	"Speech recognition error: {{error}}": "语音识别错误:{{error}}",
 	"Speech-to-Text Engine": "语音转文本引擎",
+	"Stop": "",
 	"Stop Sequence": "停止序列 (Stop Sequence)",
 	"Stream Chat Response": "以流式返回对话响应",
 	"STT Model": "语音转文本模型",
@@ -665,6 +664,7 @@
 	"Template": "模板",
 	"Temporary Chat": "临时对话",
 	"Text Completion": "文本完成",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "文本转语音引擎",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "感谢您的反馈!",
@@ -683,6 +683,7 @@
 	"Thorough explanation": "解释较为详细",
 	"Tika": "Tika",
 	"Tika Server URL required.": "请输入 Tika 服务器地址。",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替换后,在对话输入中按 Tab 键可以连续更新多个变量。",
 	"Title": "标题",
 	"Title (e.g. Tell me a fun fact)": "标题(例如 给我讲一个有趣的事实)",
@@ -700,6 +701,7 @@
 	"Today": "今天",
 	"Toggle settings": "切换设置",
 	"Toggle sidebar": "切换侧边栏",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "在语境刷新时需保留的 Tokens",
 	"Tool created successfully": "工具创建成功",
 	"Tool deleted successfully": "工具删除成功",
@@ -738,7 +740,6 @@
 	"Upload Progress": "上传进度",
 	"URL Mode": "URL 模式",
 	"Use '#' in the prompt input to load and include your knowledge.": "在输入框中输入'#'号来加载你需要的知识库内容。",
-	"Use '#' in the prompt input to load and select your documents.": "在输入框中输入'#'号来选择你需要发送的文档。",
 	"Use Gravatar": "使用来自 Gravatar 的头像",
 	"Use Initials": "使用首个字符作为头像",
 	"use_mlock (Ollama)": "use_mlock(Ollama)",

+ 15 - 14
src/lib/i18n/locales/zh-TW/translation.json

@@ -26,7 +26,6 @@
 	"Add Content": "新增內容",
 	"Add content here": "在此新增內容",
 	"Add custom prompt": "新增自訂提示詞",
-	"Add Docs": "新增文件",
 	"Add Files": "新增檔案",
 	"Add Memory": "新增記憶",
 	"Add message": "新增訊息",
@@ -43,10 +42,8 @@
 	"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "管理員可以隨時使用所有工具;使用者則需在工作區中為每個模型分配工具。",
 	"Advanced Parameters": "進階參數",
 	"Advanced Params": "進階參數",
-	"all": "全部",
 	"All Documents": "所有文件",
 	"All Users": "所有使用者",
-	"Allow": "允許",
 	"Allow Chat Deletion": "允許刪除對話紀錄",
 	"Allow Chat Editing": "允許編輯對話",
 	"Allow non-local voices": "允許非本機語音",
@@ -98,6 +95,7 @@
 	"Cancel": "取消",
 	"Capabilities": "功能",
 	"Change Password": "修改密碼",
+	"Character": "",
 	"Chat": "對話",
 	"Chat Background Image": "對話背景圖片",
 	"Chat Bubble UI": "對話氣泡介面",
@@ -120,13 +118,13 @@
 	"Click here to select": "點選這裡選擇",
 	"Click here to select a csv file.": "點選這裡選擇 CSV 檔案。",
 	"Click here to select a py file.": "點選這裡選擇 Python 檔案。",
-	"Click here to select documents.": "點選這裡選擇文件。",
 	"Click here to upload a workflow.json file.": "點選這裡上傳 workflow.json 檔案。",
 	"click here.": "點選這裡。",
 	"Click on the user role button to change a user's role.": "點選使用者角色按鈕變更使用者的角色。",
 	"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "剪貼簿寫入權限遭拒。請檢查您的瀏覽器設定,授予必要的存取權限。",
 	"Clone": "複製",
 	"Close": "關閉",
+	"Code execution": "",
 	"Code formatted successfully": "程式碼格式化成功",
 	"Collection": "收藏",
 	"ComfyUI": "ComfyUI",
@@ -155,6 +153,7 @@
 	"Copy last code block": "複製最後一個程式碼區塊",
 	"Copy last response": "複製最後一個回應",
 	"Copy Link": "複製連結",
+	"Copy to clipboard": "",
 	"Copying to clipboard was successful!": "成功複製到剪貼簿!",
 	"Create a model": "建立模型",
 	"Create Account": "建立帳號",
@@ -180,14 +179,12 @@
 	"Default model updated": "預設模型已更新",
 	"Default Prompt Suggestions": "預設提示詞建議",
 	"Default User Role": "預設使用者角色",
-	"delete": "刪除",
 	"Delete": "刪除",
 	"Delete a model": "刪除模型",
 	"Delete All Chats": "刪除所有對話紀錄",
 	"Delete chat": "刪除對話紀錄",
 	"Delete Chat": "刪除對話紀錄",
 	"Delete chat?": "刪除對話紀錄?",
-	"Delete Doc": "刪除文件",
 	"Delete function?": "刪除函式?",
 	"Delete prompt?": "刪除提示詞?",
 	"delete this link": "刪除此連結",
@@ -215,7 +212,6 @@
 	"Documentation": "文件",
 	"Documents": "文件",
 	"does not make any external connections, and your data stays securely on your locally hosted server.": "不會建立任何外部連線,而且您的資料會安全地儲存在您本機伺服器上。",
-	"Don't Allow": "不允許",
 	"Don't have an account?": "還沒註冊帳號嗎?",
 	"don't install random functions from sources you don't trust.": "請勿從您無法信任的來源安裝隨機函式。",
 	"don't install random tools from sources you don't trust.": "請勿從您無法信任的來源安裝隨機工具。",
@@ -224,10 +220,11 @@
 	"Download": "下載",
 	"Download canceled": "已取消下載",
 	"Download Database": "下載資料庫",
+	"Drop a chat export file here to import it.": "",
 	"Drop any files here to add to the conversation": "拖拽任意檔案到此處以新增至對話",
+	"Drop Chat Export": "",
 	"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如:'30s'、'10m'。有效的時間單位為 's'、'm'、'h'。",
 	"Edit": "編輯",
-	"Edit Doc": "編輯文件",
 	"Edit Memory": "編輯記憶",
 	"Edit User": "編輯使用者",
 	"ElevenLabs": "ElevenLabs",
@@ -281,13 +278,13 @@
 	"Enter Your Password": "輸入您的密碼",
 	"Enter Your Role": "輸入您的角色",
 	"Error": "錯誤",
+	"ERROR": "",
 	"Experimental": "實驗性功能",
 	"Export": "匯出",
 	"Export All Chats (All Users)": "匯出所有對話紀錄(所有使用者)",
 	"Export chat (.json)": "匯出對話紀錄(.json)",
 	"Export Chats": "匯出對話紀錄",
 	"Export Config to JSON File": "將設定匯出為 JSON 檔案",
-	"Export Documents Mapping": "匯出文件對應",
 	"Export Functions": "匯出函式",
 	"Export LiteLLM config.yaml": "匯出 LiteLLM config.yaml",
 	"Export Models": "匯出模型",
@@ -357,7 +354,6 @@
 	"Images": "圖片",
 	"Import Chats": "匯入對話紀錄",
 	"Import Config from JSON File": "從 JSON 檔案匯入設定",
-	"Import Documents Mapping": "匯入文件對應",
 	"Import Functions": "匯入函式",
 	"Import Models": "匯入模型",
 	"Import Prompts": "匯入提示詞",
@@ -369,6 +365,7 @@
 	"Install from Github URL": "從 GitHub URL 安裝",
 	"Instant Auto-Send After Voice Transcription": "語音轉錄後立即自動傳送",
 	"Interface": "介面",
+	"Invalid file format.": "",
 	"Invalid Tag": "無效標籤",
 	"January": "1 月",
 	"join our Discord for help.": "加入我們的 Discord 以尋求協助。",
@@ -446,13 +443,13 @@
 	"More": "更多",
 	"Move to Top": "移至頂端",
 	"Name": "名稱",
-	"Name Tag": "名稱標籤",
 	"Name your model": "為您的模型命名",
 	"New Chat": "新增對話",
 	"New Password": "新密碼",
 	"No content found": "找不到內容",
 	"No content to speak": "沒有要朗讀的內容",
 	"No file selected": "未選取檔案",
+	"No files found.": "",
 	"No HTML, CSS, or JavaScript content found.": "找不到 HTML、CSS 或 JavaScript 內容。",
 	"No knowledge found": "找不到知識",
 	"No results found": "找不到任何結果",
@@ -495,6 +492,7 @@
 	"OpenAI URL/Key required.": "需要 OpenAI URL/金鑰。",
 	"or": "或",
 	"Other": "其他",
+	"OUTPUT": "",
 	"Output format": "輸出格式",
 	"Overview": "概覽",
 	"page": "頁面",
@@ -547,7 +545,7 @@
 	"Reranking model set to \"{{reranking_model}}\"": "重新排序模型已設定為 \"{{reranking_model}}\"",
 	"Reset": "重設",
 	"Reset Upload Directory": "重設上傳目錄",
-	"Reset Vector Storage": "重設向量儲存空間",
+	"Reset Vector Storage/Knowledge": "",
 	"Response AutoCopy to Clipboard": "自動將回應複製到剪貼簿",
 	"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "無法啟用回應通知,因為網站權限已遭拒。請前往瀏覽器設定以授予必要存取權限。",
 	"Response splitting": "回應分割",
@@ -570,7 +568,7 @@
 	"Search a model": "搜尋模型",
 	"Search Chats": "搜尋對話",
 	"Search Collection": "搜尋集合",
-	"Search Documents": "搜尋文件",
+	"search for tags": "",
 	"Search Functions": "搜尋函式",
 	"Search Knowledge": "搜尋知識庫",
 	"Search Models": "搜尋模型",
@@ -644,6 +642,7 @@
 	"Speech Playback Speed": "語音播放速度",
 	"Speech recognition error: {{error}}": "語音辨識錯誤:{{error}}",
 	"Speech-to-Text Engine": "語音轉文字 (STT) 引擎",
+	"Stop": "",
 	"Stop Sequence": "停止序列",
 	"Stream Chat Response": "串流對話回應",
 	"STT Model": "語音轉文字 (STT) 模型",
@@ -666,6 +665,7 @@
 	"Template": "範本",
 	"Temporary Chat": "臨時對話",
 	"Text Completion": "文字補全",
+	"Text Splitter": "",
 	"Text-to-Speech Engine": "文字轉語音引擎",
 	"Tfs Z": "Tfs Z",
 	"Thanks for your feedback!": "感謝您的回饋!",
@@ -684,6 +684,7 @@
 	"Thorough explanation": "詳細解釋",
 	"Tika": "Tika",
 	"Tika Server URL required.": "需要 Tika 伺服器 URL。",
+	"Tiktoken": "",
 	"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替換後按下對話輸入框中的 Tab 鍵,即可連續更新多個變數欄位。",
 	"Title": "標題",
 	"Title (e.g. Tell me a fun fact)": "標題(例如:告訴我一個有趣的事實)",
@@ -701,6 +702,7 @@
 	"Today": "今天",
 	"Toggle settings": "切換設定",
 	"Toggle sidebar": "切換側邊欄",
+	"Token": "",
 	"Tokens To Keep On Context Refresh (num_keep)": "上下文重新整理時要保留的 token 數 (num_keep)",
 	"Tool created successfully": "成功建立工具",
 	"Tool deleted successfully": "成功刪除工具",
@@ -739,7 +741,6 @@
 	"Upload Progress": "上傳進度",
 	"URL Mode": "URL 模式",
 	"Use '#' in the prompt input to load and include your knowledge.": "在提示詞輸入中使用 '#' 來載入並包含您的知識。",
-	"Use '#' in the prompt input to load and select your documents.": "在提示詞輸入中使用 '#' 來載入和選擇您的文件。",
 	"Use Gravatar": "使用 Gravatar",
 	"Use Initials": "使用姓名縮寫",
 	"use_mlock (Ollama)": "使用 mlock (Ollama)",

+ 2 - 2
src/routes/(app)/+layout.svelte

@@ -13,7 +13,7 @@
 	import { getKnowledgeItems } from '$lib/apis/knowledge';
 	import { getFunctions } from '$lib/apis/functions';
 	import { getModels as _getModels, getVersionUpdates } from '$lib/apis';
-	import { getAllChatTags } from '$lib/apis/chats';
+	import { getAllTags } from '$lib/apis/chats';
 	import { getPrompts } from '$lib/apis/prompts';
 	import { getTools } from '$lib/apis/tools';
 	import { getBanners } from '$lib/apis/configs';
@@ -117,7 +117,7 @@
 					banners.set(await getBanners(localStorage.token));
 				})(),
 				(async () => {
-					tags.set(await getAllChatTags(localStorage.token));
+					tags.set(await getAllTags(localStorage.token));
 				})()
 			]);
 

+ 27 - 25
src/routes/(app)/admin/+layout.svelte

@@ -30,12 +30,12 @@
 			? 'md:max-w-[calc(100%-260px)]'
 			: ''}"
 	>
-		<div class=" px-4 pt-3 mt-0.5 mb-1">
+		<div class=" px-3.5 py-2">
 			<div class=" flex items-center gap-1">
-				<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
+				<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 flex flex-none items-center">
 					<button
 						id="sidebar-toggle-button"
-						class="cursor-pointer p-1 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
+						class="cursor-pointer p-1.5 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
 						on:click={() => {
 							showSidebar.set(!$showSidebar);
 						}}
@@ -46,33 +46,35 @@
 						</div>
 					</button>
 				</div>
-				<div class="flex items-center text-xl font-semibold">{$i18n.t('Admin Panel')}</div>
-			</div>
-		</div>
+				<!-- <div class="flex items-center text-xl font-semibold">{$i18n.t('Admin Panel')}</div> -->
 
-		<div class="px-4 my-1">
-			<div
-				class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
-			>
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {['/admin', '/admin/'].includes($page.url.pathname)
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/admin">{$i18n.t('Dashboard')}</a
-				>
+				<div class=" flex w-full">
+					<div
+						class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full shadow-2xl bg-transparent/10 p-1"
+					>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {['/admin', '/admin/'].includes(
+								$page.url.pathname
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/admin">{$i18n.t('Dashboard')}</a
+						>
 
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/admin/settings')
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/admin/settings">{$i18n.t('Settings')}</a
-				>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {$page.url.pathname.includes(
+								'/admin/settings'
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/admin/settings">{$i18n.t('Settings')}</a
+						>
+					</div>
+				</div>
 			</div>
 		</div>
 
-		<hr class=" my-2 dark:border-gray-850" />
-
-		<div class=" py-1 px-5 flex-1 max-h-full overflow-y-auto">
+		<div class=" pb-1 px-5 flex-1 max-h-full overflow-y-auto">
 			<slot />
 		</div>
 	</div>

+ 62 - 55
src/routes/(app)/workspace/+layout.svelte

@@ -1,6 +1,6 @@
 <script lang="ts">
 	import { onMount, getContext } from 'svelte';
-	import { WEBUI_NAME, showSidebar, functions, user } from '$lib/stores';
+	import { WEBUI_NAME, showSidebar, functions, user, mobile } from '$lib/stores';
 	import { page } from '$app/stores';
 	import { goto } from '$app/navigation';
 
@@ -26,16 +26,16 @@
 
 {#if loaded}
 	<div
-		class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
+		class=" relative flex flex-col w-full min-h-screen max-h-screen {$showSidebar
 			? 'md:max-w-[calc(100%-260px)]'
 			: ''}"
 	>
-		<div class=" px-4 pt-3 mt-0.5 mb-1">
+		<div class="   px-3.5 my-2 bg-transparent backdrop-blur-xl">
 			<div class=" flex items-center gap-1">
-				<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
+				<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-center flex flex-none items-center">
 					<button
 						id="sidebar-toggle-button"
-						class="cursor-pointer p-1 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
+						class="cursor-pointer p-1.5 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition"
 						on:click={() => {
 							showSidebar.set(!$showSidebar);
 						}}
@@ -46,64 +46,71 @@
 						</div>
 					</button>
 				</div>
-				<div class="flex items-center text-xl font-semibold">{$i18n.t('Workspace')}</div>
-			</div>
-		</div>
 
-		<div class="px-4 my-1">
-			<div
-				class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
-			>
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/models')
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/workspace/models">{$i18n.t('Models')}</a
-				>
+				<!-- <div class="flex items-center text-xl font-semibold mr-3">{$i18n.t('Workspace')}</div> -->
+
+				<div class="">
+					<div
+						class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent/10 backdrop-blur-2xl p-1 shadow-2xl touch-auto pointer-events-auto"
+					>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {$page.url.pathname.includes(
+								'/workspace/models'
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/workspace/models">{$i18n.t('Models')}</a
+						>
 
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes(
-						'/workspace/knowledge'
-					)
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/workspace/knowledge"
-				>
-					{$i18n.t('Knowledge')}
-				</a>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {$page.url.pathname.includes(
+								'/workspace/knowledge'
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/workspace/knowledge"
+						>
+							{$i18n.t('Knowledge')}
+						</a>
 
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/prompts')
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/workspace/prompts">{$i18n.t('Prompts')}</a
-				>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {$page.url.pathname.includes(
+								'/workspace/prompts'
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/workspace/prompts">{$i18n.t('Prompts')}</a
+						>
 
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/tools')
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/workspace/tools"
-				>
-					{$i18n.t('Tools')}
-				</a>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {$page.url.pathname.includes(
+								'/workspace/tools'
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/workspace/tools"
+						>
+							{$i18n.t('Tools')}
+						</a>
 
-				<a
-					class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes(
-						'/workspace/functions'
-					)
-						? 'bg-gray-50 dark:bg-gray-850'
-						: ''} transition"
-					href="/workspace/functions"
-				>
-					{$i18n.t('Functions')}
-				</a>
+						<a
+							class="min-w-fit rounded-full p-1.5 px-3 {$page.url.pathname.includes(
+								'/workspace/functions'
+							)
+								? 'bg-gray-50 dark:bg-gray-850'
+								: ''} transition"
+							href="/workspace/functions"
+						>
+							{$i18n.t('Functions')}
+						</a>
+					</div>
+				</div>
+
+				<!-- <div class="flex items-center text-xl font-semibold">{$i18n.t('Workspace')}</div> -->
 			</div>
 		</div>
 
-		<hr class=" my-2 border-gray-100 dark:border-gray-850" />
-
-		<div class=" py-1 px-5 flex-1 max-h-full overflow-y-auto">
+		<div class=" pb-1 px-5 flex-1 max-h-full overflow-y-auto">
 			<slot />
 		</div>
 	</div>