Commit 715a4a6c authored by Jun Siang Cheah's avatar Jun Siang Cheah
Browse files

Merge remote-tracking branch 'upstream/dev' into feat/model-config

parents fa4c2249 120f8d77
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} думає...", "{{modelName}} is thinking...": "{{modelName}} думає...",
"{{user}}'s Chats": "Чати {{user}}а", "{{user}}'s Chats": "Чати {{user}}а",
"{{webUIName}} Backend Required": "Необхідно підключення бекенду {{webUIName}}", "{{webUIName}} Backend Required": "Необхідно підключення бекенду {{webUIName}}",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "користувача", "a user": "користувача",
"About": "Про програму", "About": "Про програму",
"Account": "Обліковий запис", "Account": "Обліковий запис",
"Accurate information": "Точна інформація", "Accurate information": "Точна інформація",
"Add": "",
"Add a model": "Додати модель", "Add a model": "Додати модель",
"Add a model tag name": "Додати ім'я тегу моделі", "Add a model tag name": "Додати ім'я тегу моделі",
"Add a short description about what this modelfile does": "Додати короткий опис того, що робить цей файл моделі", "Add a short description about what this modelfile does": "Додати короткий опис того, що робить цей файл моделі",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "Додати користувацьку підказку", "Add custom prompt": "Додати користувацьку підказку",
"Add Docs": "Додати документи", "Add Docs": "Додати документи",
"Add Files": "Додати файли", "Add Files": "Додати файли",
"Add Memory": "",
"Add message": "Додати повідомлення", "Add message": "Додати повідомлення",
"Add Model": "Додати модель", "Add Model": "Додати модель",
"Add Tags": "додати теги", "Add Tags": "додати теги",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "Архівовані чати", "Archived Chats": "Архівовані чати",
"are allowed - Activate this command by typing": "дозволено - активізуйте цю команду набором", "are allowed - Activate this command by typing": "дозволено - активізуйте цю команду набором",
"Are you sure?": "Ви впевнені?", "Are you sure?": "Ви впевнені?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "Прикріпити файл", "Attach file": "Прикріпити файл",
"Attention to detail": "Увага до деталей", "Attention to detail": "Увага до деталей",
"Audio": "Аудіо", "Audio": "Аудіо",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "Неправильна відповідь", "Bad Response": "Неправильна відповідь",
"before": "до того, як", "before": "до того, як",
"Being lazy": "Не поспішати", "Being lazy": "Не поспішати",
"Beta": "",
"Builder Mode": "Режим конструктора", "Builder Mode": "Режим конструктора",
"Bypass SSL verification for Websites": "Обхід SSL-перевірки для веб-сайтів", "Bypass SSL verification for Websites": "Обхід SSL-перевірки для веб-сайтів",
"Cancel": "Скасувати", "Cancel": "Скасувати",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "Увімкнено", "Enabled": "Увімкнено",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.",
"Enter {{role}} message here": "Введіть повідомлення {{role}} тут", "Enter {{role}} message here": "Введіть повідомлення {{role}} тут",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Введіть перекриття фрагменту", "Enter Chunk Overlap": "Введіть перекриття фрагменту",
"Enter Chunk Size": "Введіть розмір фрагменту", "Enter Chunk Size": "Введіть розмір фрагменту",
"Enter Image Size (e.g. 512x512)": "Введіть розмір зображення (напр., 512x512)", "Enter Image Size (e.g. 512x512)": "Введіть розмір зображення (напр., 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "змінна", "variable": "змінна",
"variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.", "variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.",
"Version": "Версія", "Version": "Версія",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.",
"Web": "Веб", "Web": "Веб",
"Web Loader Settings": "Налаштування веб-завантажувача", "Web Loader Settings": "Налаштування веб-завантажувача",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} đang suy nghĩ...", "{{modelName}} is thinking...": "{{modelName}} đang suy nghĩ...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}} Yêu cầu Backend", "{{webUIName}} Backend Required": "{{webUIName}} Yêu cầu Backend",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "người sử dụng", "a user": "người sử dụng",
"About": "Giới thiệu", "About": "Giới thiệu",
"Account": "Tài khoản", "Account": "Tài khoản",
"Accurate information": "Thông tin chính xác", "Accurate information": "Thông tin chính xác",
"Add": "",
"Add a model": "Thêm mô hình", "Add a model": "Thêm mô hình",
"Add a model tag name": "Thêm tên thẻ mô hình (tag)", "Add a model tag name": "Thêm tên thẻ mô hình (tag)",
"Add a short description about what this modelfile does": "Thêm mô tả ngắn về việc tệp mô tả mô hình (modelfile) này làm gì", "Add a short description about what this modelfile does": "Thêm mô tả ngắn về việc tệp mô tả mô hình (modelfile) này làm gì",
...@@ -19,17 +20,18 @@ ...@@ -19,17 +20,18 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "Thêm tài liệu", "Add Docs": "Thêm tài liệu",
"Add Files": "Thêm tệp", "Add Files": "Thêm tệp",
"Add Memory": "",
"Add message": "Thêm tin nhắn", "Add message": "Thêm tin nhắn",
"Add Model": "", "Add Model": "Thêm model",
"Add Tags": "thêm thẻ", "Add Tags": "thêm thẻ",
"Add User": "", "Add User": "Thêm người dùng",
"Adjusting these settings will apply changes universally to all users.": "Các thay đổi cài đặt này sẽ áp dụng cho tất cả người sử dụng.", "Adjusting these settings will apply changes universally to all users.": "Các thay đổi cài đặt này sẽ áp dụng cho tất cả người sử dụng.",
"admin": "quản trị viên", "admin": "quản trị viên",
"Admin Panel": "Trang Quản trị", "Admin Panel": "Trang Quản trị",
"Admin Settings": "Cài đặt hệ thống", "Admin Settings": "Cài đặt hệ thống",
"Advanced Parameters": "Các tham số Nâng cao", "Advanced Parameters": "Các tham số Nâng cao",
"all": "tất cả", "all": "tất cả",
"All Documents": "", "All Documents": "Tất cả tài liệu",
"All selected models do not support image input, removed images": "", "All selected models do not support image input, removed images": "",
"All Users": "Danh sách người sử dụng", "All Users": "Danh sách người sử dụng",
"Allow": "Cho phép", "Allow": "Cho phép",
...@@ -38,31 +40,31 @@ ...@@ -38,31 +40,31 @@
"Already have an account?": "Bạn đã có tài khoản?", "Already have an account?": "Bạn đã có tài khoản?",
"an assistant": "trợ lý", "an assistant": "trợ lý",
"and": "và", "and": "và",
"and create a new shared link.": "", "and create a new shared link.": "và tạo một link chia sẻ mới",
"API Base URL": "Đường dẫn tới API (API Base URL)", "API Base URL": "Đường dẫn tới API (API Base URL)",
"API Key": "API Key", "API Key": "API Key",
"API Key created.": "", "API Key created.": "",
"API keys": "", "API keys": "",
"API RPM": "API RPM", "API RPM": "API RPM",
"April": "", "April": "Tháng 4",
"Archive": "", "Archive": "Lưu trữ",
"Archived Chats": "bản ghi trò chuyện", "Archived Chats": "bản ghi trò chuyện",
"are allowed - Activate this command by typing": "được phép - Kích hoạt lệnh này bằng cách gõ", "are allowed - Activate this command by typing": "được phép - Kích hoạt lệnh này bằng cách gõ",
"Are you sure?": "Bạn có chắc chắn không?", "Are you sure?": "Bạn có chắc chắn không?",
"Attach file": "", "As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "Đính kèm file",
"Attention to detail": "Có sự chú ý đến chi tiết của vấn đề", "Attention to detail": "Có sự chú ý đến chi tiết của vấn đề",
"Audio": "Âm thanh", "Audio": "Âm thanh",
"August": "", "August": "Tháng 8",
"Auto-playback response": "Tự động phát lại phản hồi (Auto-playback)", "Auto-playback response": "Tự động phát lại phản hồi (Auto-playback)",
"Auto-send input after 3 sec.": "Tự động gửi đầu vào sau 3 giây.", "Auto-send input after 3 sec.": "Tự động gửi đầu vào sau 3 giây.",
"AUTOMATIC1111 Base URL": "Đường dẫn kết nối tới AUTOMATIC1111 (Base URL)", "AUTOMATIC1111 Base URL": "Đường dẫn kết nối tới AUTOMATIC1111 (Base URL)",
"AUTOMATIC1111 Base URL is required.": "Base URL của AUTOMATIC1111 là bắt buộc.", "AUTOMATIC1111 Base URL is required.": "Base URL của AUTOMATIC1111 là bắt buộc.",
"available!": "có sẵn!", "available!": "có sẵn!",
"Back": "Quay lại", "Back": "Quay lại",
"Bad Response": "", "Bad Response": "Trả lời KHÔNG tốt",
"before": "", "before": "trước",
"Being lazy": "Lười biếng", "Being lazy": "Lười biếng",
"Beta": "",
"Builder Mode": "Chế độ Builder", "Builder Mode": "Chế độ Builder",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "Hủy bỏ", "Cancel": "Hủy bỏ",
...@@ -79,14 +81,14 @@ ...@@ -79,14 +81,14 @@
"Checking for updates...": "Đang kiểm tra cập nhật...", "Checking for updates...": "Đang kiểm tra cập nhật...",
"Choose a model before saving...": "Chọn mô hình trước khi lưu...", "Choose a model before saving...": "Chọn mô hình trước khi lưu...",
"Chunk Overlap": "Chồng lấn (overlap)", "Chunk Overlap": "Chồng lấn (overlap)",
"Chunk Params": "Cài đặt số lượng ký tự cho khối ký tự (chunk)", "Chunk Params": "Tham số khối (chunk)",
"Chunk Size": "Kích thước khối (size)", "Chunk Size": "Kích thước khối (size)",
"Citation": "Trích dẫn", "Citation": "Trích dẫn",
"Click here for help.": "Bấm vào đây để được trợ giúp.", "Click here for help.": "Bấm vào đây để được trợ giúp.",
"Click here to": "", "Click here to": "Nhấn vào đây để",
"Click here to check other modelfiles.": "Bấm vào đây để kiểm tra các tệp mô tả mô hình (modelfiles) khác.", "Click here to check other modelfiles.": "Bấm vào đây để kiểm tra các tệp mô tả mô hình (modelfiles) khác.",
"Click here to select": "Bấm vào đây để chọn", "Click here to select": "Bấm vào đây để chọn",
"Click here to select a csv file.": "", "Click here to select a csv file.": "Nhấn vào đây để chọn tệp csv",
"Click here to select documents.": "Bấm vào đây để chọn tài liệu.", "Click here to select documents.": "Bấm vào đây để chọn tài liệu.",
"click here.": "bấm vào đây.", "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.", "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.",
...@@ -100,21 +102,21 @@ ...@@ -100,21 +102,21 @@
"Connections": "Kết nối", "Connections": "Kết nối",
"Content": "Nội dung", "Content": "Nội dung",
"Context Length": "Độ dài ngữ cảnh (Context Length)", "Context Length": "Độ dài ngữ cảnh (Context Length)",
"Continue Response": "", "Continue Response": "Tiếp tục trả lời",
"Conversation Mode": "Chế độ hội thoại", "Conversation Mode": "Chế độ hội thoại",
"Copied shared chat URL to clipboard!": "", "Copied shared chat URL to clipboard!": "",
"Copy": "", "Copy": "Sao chép",
"Copy last code block": "Sao chép khối mã cuối cùng", "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 last response": "Sao chép phản hồi cuối cùng",
"Copy Link": "", "Copy Link": "Sao chép link",
"Copying to clipboard was successful!": "Sao chép vào clipboard thành công!", "Copying to clipboard was successful!": "Sao chép vào clipboard thành công!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Tạo một cụm từ súc tích, 3-5 từ làm tiêu đề cho truy vấn sau, tuân thủ nghiêm ngặt giới hạn 3-5 từ và tránh sử dụng từ 'tiêu đề':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Tạo một cụm từ súc tích, 3-5 từ làm tiêu đề cho truy vấn sau, tuân thủ nghiêm ngặt giới hạn 3-5 từ và tránh sử dụng từ 'tiêu đề':",
"Create a modelfile": "Tạo tệp mô tả cho mô hình", "Create a modelfile": "Tạo tệp mô tả cho mô hình",
"Create Account": "Tạo Tài khoản", "Create Account": "Tạo Tài khoản",
"Create new key": "", "Create new key": "Tạo key mới",
"Create new secret key": "", "Create new secret key": "Tạo key bí mật mới",
"Created at": "Được tạo vào lúc", "Created at": "Được tạo vào lúc",
"Created At": "", "Created At": "Tạo lúc",
"Current Model": "Mô hình hiện tại", "Current Model": "Mô hình hiện tại",
"Current Models": "", "Current Models": "",
"Current Password": "Mật khẩu hiện tại", "Current Password": "Mật khẩu hiện tại",
...@@ -123,7 +125,7 @@ ...@@ -123,7 +125,7 @@
"Dark": "Tối", "Dark": "Tối",
"Dashboard": "", "Dashboard": "",
"Database": "Cơ sở dữ liệu", "Database": "Cơ sở dữ liệu",
"December": "", "December": "Tháng 12",
"Default": "Mặc định", "Default": "Mặc định",
"Default (Automatic1111)": "Mặc định (Automatic1111)", "Default (Automatic1111)": "Mặc định (Automatic1111)",
"Default (SentenceTransformers)": "", "Default (SentenceTransformers)": "",
...@@ -132,15 +134,15 @@ ...@@ -132,15 +134,15 @@
"Default Prompt Suggestions": "Đề xuất prompt mặc định", "Default Prompt Suggestions": "Đề xuất prompt mặc định",
"Default User Role": "Vai trò mặc định", "Default User Role": "Vai trò mặc định",
"delete": "xóa", "delete": "xóa",
"Delete": "", "Delete": "Xóa",
"Delete a model": "Xóa mô hình", "Delete a model": "Xóa mô hình",
"Delete chat": "Xóa nội dung chat", "Delete chat": "Xóa nội dung chat",
"Delete Chat": "", "Delete Chat": "Xóa chat",
"Delete Chats": "Xóa nội dung chat", "Delete Chats": "Xóa nội dung chat",
"delete this link": "", "delete this link": "Xóa link này",
"Delete User": "", "Delete User": "Xóa người dùng",
"Deleted {{deleteModelTag}}": "Đã xóa {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Đã xóa {{deleteModelTag}}",
"Deleted {{tagName}}": "", "Deleted {{tagName}}": "Xóa {{tagName}}",
"Description": "Mô tả", "Description": "Mô tả",
"Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ", "Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ",
"Disabled": "Đã vô hiệu hóa", "Disabled": "Đã vô hiệu hóa",
...@@ -156,12 +158,12 @@ ...@@ -156,12 +158,12 @@
"Don't Allow": "Không Cho phép", "Don't Allow": "Không Cho phép",
"Don't have an account?": "Không có tài khoản?", "Don't have an account?": "Không có tài khoản?",
"Don't like the style": "Không thích phong cách trả lời", "Don't like the style": "Không thích phong cách trả lời",
"Download": "", "Download": "Tải về",
"Download canceled": "", "Download canceled": "Đã hủy download",
"Download Database": "Tải xuống Cơ sở dữ liệu", "Download Database": "Tải xuống Cơ sở dữ liệu",
"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 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",
"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'.", "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": "", "Edit": "Chỉnh sửa",
"Edit Doc": "Thay đổi tài liệu", "Edit Doc": "Thay đổi tài liệu",
"Edit User": "Thay đổi thông tin người sử dụng", "Edit User": "Thay đổi thông tin người sử dụng",
"Email": "Email", "Email": "Email",
...@@ -171,8 +173,9 @@ ...@@ -171,8 +173,9 @@
"Enable Chat History": "Bật Lịch sử chat", "Enable Chat History": "Bật Lịch sử chat",
"Enable New Sign Ups": "Cho phép đăng ký mới", "Enable New Sign Ups": "Cho phép đăng ký mới",
"Enabled": "Đã bật", "Enabled": "Đã bật",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.",
"Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây", "Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)", "Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)",
"Enter Chunk Size": "Nhập Kích thước Chunk", "Enter Chunk Size": "Nhập Kích thước Chunk",
"Enter Image Size (e.g. 512x512)": "Nhập Kích thước ảnh (vd: 512x512)", "Enter Image Size (e.g. 512x512)": "Nhập Kích thước ảnh (vd: 512x512)",
...@@ -185,7 +188,7 @@ ...@@ -185,7 +188,7 @@
"Enter Model Display Name": "", "Enter Model Display Name": "",
"Enter model tag (e.g. {{modelTag}})": "Nhập thẻ mô hình (vd: {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Nhập thẻ mô hình (vd: {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Nhập số Steps (vd: 50)", "Enter Number of Steps (e.g. 50)": "Nhập số Steps (vd: 50)",
"Enter Score": "", "Enter Score": "Nhập Score",
"Enter stop sequence": "Nhập stop sequence", "Enter stop sequence": "Nhập stop sequence",
"Enter Top K": "Nhập Top K", "Enter Top K": "Nhập Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Nhập URL (vd: http://127.0.0.1:7860/)", "Enter URL (e.g. http://127.0.0.1:7860/)": "Nhập URL (vd: http://127.0.0.1:7860/)",
...@@ -193,16 +196,16 @@ ...@@ -193,16 +196,16 @@
"Enter Your Email": "Nhập Email của bạn", "Enter Your Email": "Nhập Email của bạn",
"Enter Your Full Name": "Nhập Họ và Tên của bạn", "Enter Your Full Name": "Nhập Họ và Tên của bạn",
"Enter Your Password": "Nhập Mật khẩu của bạn", "Enter Your Password": "Nhập Mật khẩu của bạn",
"Enter Your Role": "", "Enter Your Role": "Nhập vai trò của bạn",
"Experimental": "Thử nghiệm", "Experimental": "Thử nghiệm",
"Export All Chats (All Users)": "Tải về tất cả nội dung chat (tất cả mọi người)", "Export All Chats (All Users)": "Tải về tất cả nội dung chat (tất cả mọi người)",
"Export Chats": "Tải nội dung chat về máy", "Export Chats": "Tải nội dung chat về máy",
"Export Documents Mapping": "Tải cấu trúc tài liệu về máy", "Export Documents Mapping": "Tải cấu trúc tài liệu về máy",
"Export Modelfiles": "Tải tệp mô tả về máy", "Export Modelfiles": "Tải tệp mô tả về máy",
"Export Prompts": "Tải các prompt về máy", "Export Prompts": "Tải các prompt về máy",
"Failed to create API Key.": "", "Failed to create API Key.": "Lỗi khởi tạo API Key",
"Failed to read clipboard contents": "Không thể đọc nội dung clipboard", "Failed to read clipboard contents": "Không thể đọc nội dung clipboard",
"February": "", "February": "Tháng 2",
"Feel free to add specific details": "Mô tả chi tiết về chất lượng của câu hỏi và phương án trả lời", "Feel free to add specific details": "Mô tả chi tiết về chất lượng của câu hỏi và phương án trả lời",
"File Mode": "Chế độ Tệp văn bản", "File Mode": "Chế độ Tệp văn bản",
"File not found.": "Không tìm thấy tệp.", "File not found.": "Không tìm thấy tệp.",
...@@ -215,12 +218,12 @@ ...@@ -215,12 +218,12 @@
"Full Screen Mode": "Chế độ Toàn màn hình", "Full Screen Mode": "Chế độ Toàn màn hình",
"General": "Cài đặt chung", "General": "Cài đặt chung",
"General Settings": "Cấu hình chung", "General Settings": "Cấu hình chung",
"Generation Info": "", "Generation Info": "Thông tin chung",
"Good Response": "", "Good Response": "Trả lời tốt",
"h:mm a": "", "h:mm a": "",
"has no conversations.": "", "has no conversations.": "không có hội thoại",
"Hello, {{name}}": "Xin chào, {{name}}", "Hello, {{name}}": "Xin chào, {{name}}",
"Help": "", "Help": "Trợ giúp",
"Hide": "Ẩn", "Hide": "Ẩn",
"Hide Additional Params": "Ẩn Các tham số bổ sung", "Hide Additional Params": "Ẩn Các tham số bổ sung",
"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?", "How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
...@@ -234,21 +237,21 @@ ...@@ -234,21 +237,21 @@
"Import Modelfiles": "Nạp tệp mô tả", "Import Modelfiles": "Nạp tệp mô tả",
"Import Prompts": "Nạp các prompt lên hệ thống", "Import Prompts": "Nạp các prompt lên hệ thống",
"Include `--api` flag when running stable-diffusion-webui": "Bao gồm flag `--api` khi chạy stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Bao gồm flag `--api` khi chạy stable-diffusion-webui",
"Input commands": "", "Input commands": "Nhập các câu lệnh",
"Interface": "Giao diện", "Interface": "Giao diện",
"Invalid Tag": "", "Invalid Tag": "Tag không hợp lệ",
"Is Model Vision Capable": "", "Is Model Vision Capable": "",
"January": "", "January": "Tháng 1",
"join our Discord for help.": "tham gia Discord của chúng tôi để được trợ giúp.", "join our Discord for help.": "tham gia Discord của chúng tôi để được trợ giúp.",
"JSON": "JSON", "JSON": "JSON",
"July": "", "July": "Tháng 7",
"June": "", "June": "Tháng 6",
"JWT Expiration": "JWT Hết hạn", "JWT Expiration": "JWT Hết hạn",
"JWT Token": "Token JWT", "JWT Token": "Token JWT",
"Keep Alive": "Giữ kết nối", "Keep Alive": "Giữ kết nối",
"Keyboard shortcuts": "Phím tắt", "Keyboard shortcuts": "Phím tắt",
"Language": "Ngôn ngữ", "Language": "Ngôn ngữ",
"Last Active": "", "Last Active": "Truy cập gần nhất",
"Light": "Sáng", "Light": "Sáng",
"Listening...": "Đang nghe...", "Listening...": "Đang nghe...",
"LLMs can make mistakes. Verify important information.": "Hệ thống có thể tạo ra nội dung không chính xác hoặc sai. Hãy kiểm chứng kỹ lưỡng thông tin trước khi tiếp nhận và sử dụng.", "LLMs can make mistakes. Verify important information.": "Hệ thống có thể tạo ra nội dung không chính xác hoặc sai. Hãy kiểm chứng kỹ lưỡng thông tin trước khi tiếp nhận và sử dụng.",
...@@ -259,13 +262,13 @@ ...@@ -259,13 +262,13 @@
"Manage Model Information": "", "Manage Model Information": "",
"Manage Models": "Quản lý mô hình", "Manage Models": "Quản lý mô hình",
"Manage Ollama Models": "Quản lý mô hình với Ollama", "Manage Ollama Models": "Quản lý mô hình với Ollama",
"March": "", "March": "Tháng 3",
"Max Tokens": "Max Tokens", "Max Tokens": "Max Tokens",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Tối đa 3 mô hình có thể được tải xuống cùng lúc. Vui lòng thử lại sau.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Tối đa 3 mô hình có thể được tải xuống cùng lúc. Vui lòng thử lại sau.",
"May": "", "May": "Tháng 5",
"Memory": "", "Memory": "",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Minimum Score": "", "Minimum Score": "Score tối thiểu",
"Mirostat": "Mirostat", "Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta", "Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
...@@ -291,22 +294,22 @@ ...@@ -291,22 +294,22 @@
"Modelfile Content": "Nội dung Tệp Mô hình", "Modelfile Content": "Nội dung Tệp Mô hình",
"Modelfiles": "Tệp Mô hình", "Modelfiles": "Tệp Mô hình",
"Models": "Mô hình", "Models": "Mô hình",
"More": "", "More": "Thêm",
"Name": "Tên", "Name": "Tên",
"Name Tag": "Tên Thẻ", "Name Tag": "Tên Thẻ",
"Name your modelfile": "Đặt tên cho tệp mô hình của bạn", "Name your modelfile": "Đặt tên cho tệp mô hình của bạn",
"New Chat": "Tạo cuộc trò chuyện mới", "New Chat": "Tạo cuộc trò chuyện mới",
"New Password": "Mật khẩu mới", "New Password": "Mật khẩu mới",
"No": "", "No": "",
"No results found": "", "No results found": "Không tìm thấy kết quả",
"No source available": "Không có nguồn", "No source available": "Không có nguồn",
"Not factually correct": "Không chính xác so với thực tế", "Not factually correct": "Không chính xác so với thực tế",
"Not sure what to add?": "Không chắc phải thêm gì?", "Not sure what to add?": "Không chắc phải thêm gì?",
"Not sure what to write? Switch to": "Không chắc phải viết gì? Chuyển sang", "Not sure what to write? Switch to": "Không chắc phải viết gì? Chuyển sang",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Lưu ý: Nếu bạn đặt điểm (Score) tối thiểu thì tìm kiếm sẽ chỉ trả về những tài liệu có điểm lớn hơn hoặc bằng điểm tối thiểu.",
"Notifications": "Thông báo trên máy tính (Notification)", "Notifications": "Thông báo trên máy tính (Notification)",
"November": "", "November": "Tháng 11",
"October": "", "October": "Tháng 10",
"Off": "Tắt", "Off": "Tắt",
"Okay, Let's Go!": "Được rồi, Bắt đầu thôi!", "Okay, Let's Go!": "Được rồi, Bắt đầu thôi!",
"OLED Dark": "", "OLED Dark": "",
...@@ -330,22 +333,22 @@ ...@@ -330,22 +333,22 @@
"OpenAI URL/Key required.": "", "OpenAI URL/Key required.": "",
"or": "hoặc", "or": "hoặc",
"Other": "Khác", "Other": "Khác",
"Overview": "", "Overview": "Tổng quan",
"Parameters": "Tham số", "Parameters": "Tham số",
"Password": "Mật khẩu", "Password": "Mật khẩu",
"PDF document (.pdf)": "", "PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "Trích xuất ảnh từ PDF (OCR)", "PDF Extract Images (OCR)": "Trích xuất ảnh từ PDF (OCR)",
"pending": "đang chờ phê duyệt", "pending": "đang chờ phê duyệt",
"Permission denied when accessing microphone: {{error}}": "Quyền truy cập micrô bị từ chối: {{error}}", "Permission denied when accessing microphone: {{error}}": "Quyền truy cập micrô bị từ chối: {{error}}",
"Personalization": "", "Personalization": "Cá nhân hóa",
"Plain text (.txt)": "", "Plain text (.txt)": "",
"Playground": "Thử nghiệm (Playground)", "Playground": "Thử nghiệm (Playground)",
"Positive attitude": "", "Positive attitude": "Thái độ tích cực",
"Previous 30 days": "", "Previous 30 days": "30 ngày trước",
"Previous 7 days": "", "Previous 7 days": "7 ngày trước",
"Profile Image": "", "Profile Image": "Ảnh đại diện",
"Prompt": "", "Prompt": "",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (ví dụ: Hãy kể cho tôi một sự thật thú vị về Đế chế La Mã)",
"Prompt Content": "Nội dung prompt", "Prompt Content": "Nội dung prompt",
"Prompt suggestions": "Gợi ý prompt", "Prompt suggestions": "Gợi ý prompt",
"Prompts": "Prompt", "Prompts": "Prompt",
...@@ -355,15 +358,15 @@ ...@@ -355,15 +358,15 @@
"Query Params": "Tham số Truy vấn", "Query Params": "Tham số Truy vấn",
"RAG Template": "Mẫu prompt cho RAG", "RAG Template": "Mẫu prompt cho RAG",
"Raw Format": "Raw Format", "Raw Format": "Raw Format",
"Read Aloud": "", "Read Aloud": "Đọc ra loa",
"Record voice": "Ghi âm", "Record voice": "Ghi âm",
"Redirecting you to OpenWebUI Community": "Đang chuyển hướng bạn đến Cộng đồng OpenWebUI", "Redirecting you to OpenWebUI Community": "Đang chuyển hướng bạn đến Cộng đồng OpenWebUI",
"Refused when it shouldn't have": "Từ chối trả lời mà nhẽ không nên làm vậy", "Refused when it shouldn't have": "Từ chối trả lời mà nhẽ không nên làm vậy",
"Regenerate": "", "Regenerate": "Tạo sinh lại câu trả lời",
"Release Notes": "Mô tả những cập nhật mới", "Release Notes": "Mô tả những cập nhật mới",
"Remove": "", "Remove": "Xóa",
"Remove Model": "", "Remove Model": "Xóa model",
"Rename": "", "Rename": "Đổi tên",
"Repeat Last N": "Repeat Last N", "Repeat Last N": "Repeat Last N",
"Repeat Penalty": "Repeat Penalty", "Repeat Penalty": "Repeat Penalty",
"Request Mode": "Request Mode", "Request Mode": "Request Mode",
...@@ -384,7 +387,7 @@ ...@@ -384,7 +387,7 @@
"Scan complete!": "Quét hoàn tất!", "Scan complete!": "Quét hoàn tất!",
"Scan for documents from {{path}}": "Quét tài liệu từ đường dẫn: {{path}}", "Scan for documents from {{path}}": "Quét tài liệu từ đường dẫn: {{path}}",
"Search": "Tìm kiếm", "Search": "Tìm kiếm",
"Search a model": "", "Search a model": "Tìm model",
"Search Documents": "Tìm tài liệu", "Search Documents": "Tìm tài liệu",
"Search Prompts": "Tìm prompt", "Search Prompts": "Tìm prompt",
"See readme.md for instructions": "Xem readme.md để biết hướng dẫn", "See readme.md for instructions": "Xem readme.md để biết hướng dẫn",
...@@ -393,12 +396,12 @@ ...@@ -393,12 +396,12 @@
"Select a mode": "Chọn một chế độ", "Select a mode": "Chọn một chế độ",
"Select a model": "Chọn mô hình", "Select a model": "Chọn mô hình",
"Select an Ollama instance": "Chọn một thực thể Ollama", "Select an Ollama instance": "Chọn một thực thể Ollama",
"Select model": "", "Select model": "Chọn model",
"Selected models do not support image inputs": "", "Selected models do not support image inputs": "",
"Send": "", "Send": "Gửi",
"Send a Message": "Gửi yêu cầu", "Send a Message": "Gửi yêu cầu",
"Send message": "Gửi yêu cầu", "Send message": "Gửi yêu cầu",
"September": "", "September": "Tháng 9",
"Server connection verified": "Kết nối máy chủ đã được xác minh", "Server connection verified": "Kết nối máy chủ đã được xác minh",
"Set as default": "Đặt làm mặc định", "Set as default": "Đặt làm mặc định",
"Set Default Model": "Đặt Mô hình Mặc định", "Set Default Model": "Đặt Mô hình Mặc định",
...@@ -411,8 +414,8 @@ ...@@ -411,8 +414,8 @@
"Set Voice": "Đặt Giọng nói", "Set Voice": "Đặt Giọng nói",
"Settings": "Cài đặt", "Settings": "Cài đặt",
"Settings saved successfully!": "Cài đặt đã được lưu thành công!", "Settings saved successfully!": "Cài đặt đã được lưu thành công!",
"Share": "", "Share": "Chia sẻ",
"Share Chat": "", "Share Chat": "Chia sẻ Chat",
"Share to OpenWebUI Community": "Chia sẻ đến Cộng đồng OpenWebUI", "Share to OpenWebUI Community": "Chia sẻ đến Cộng đồng OpenWebUI",
"short-summary": "tóm tắt ngắn", "short-summary": "tóm tắt ngắn",
"Show": "Hiển thị", "Show": "Hiển thị",
...@@ -434,7 +437,7 @@ ...@@ -434,7 +437,7 @@
"Subtitle (e.g. about the Roman Empire)": "", "Subtitle (e.g. about the Roman Empire)": "",
"Success": "Thành công", "Success": "Thành công",
"Successfully updated.": "Đã cập nhật thành công.", "Successfully updated.": "Đã cập nhật thành công.",
"Suggested": "", "Suggested": "Gợi ý một số mẫu prompt",
"Sync All": "Đồng bộ hóa Tất cả", "Sync All": "Đồng bộ hóa Tất cả",
"System": "Hệ thống", "System": "Hệ thống",
"System Prompt": "Prompt Hệ thống (System Prompt)", "System Prompt": "Prompt Hệ thống (System Prompt)",
...@@ -446,22 +449,22 @@ ...@@ -446,22 +449,22 @@
"Text-to-Speech Engine": "Công cụ Chuyển Văn bản thành Giọng nói", "Text-to-Speech Engine": "Công cụ Chuyển Văn bản thành Giọng nói",
"Tfs Z": "Tfs Z", "Tfs Z": "Tfs Z",
"Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!", "Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Điểm (score) phải có giá trị từ 0,0 (0%) đến 1,0 (100%).",
"Theme": "Chủ đề", "Theme": "Chủ đề",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Điều này đảm bảo rằng các nội dung chat có giá trị của bạn được lưu an toàn vào cơ sở dữ liệu backend của bạn. Cảm ơn bạn!", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Điều này đảm bảo rằng các nội dung chat có giá trị của bạn được lưu an toàn vào cơ sở dữ liệu backend của bạn. Cảm ơn bạn!",
"This setting does not sync across browsers or devices.": "Cài đặt này không đồng bộ hóa trên các trình duyệt hoặc thiết bị.", "This setting does not sync across browsers or devices.": "Cài đặt này không đồng bộ hóa trên các trình duyệt hoặc thiết bị.",
"Thorough explanation": "Giải thích kỹ lưỡng", "Thorough explanation": "Giải thích kỹ lưỡng",
"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ế.", "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": "Tiêu đề",
"Title (e.g. Tell me a fun fact)": "", "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ề...)",
"Title Auto-Generation": "Tự động Tạo Tiêu đề", "Title Auto-Generation": "Tự động Tạo Tiêu đề",
"Title cannot be an empty string.": "", "Title cannot be an empty string.": "Tiêu đề không được phép bỏ trống",
"Title Generation Prompt": "Prompt tạo tiêu đề", "Title Generation Prompt": "Prompt tạo tiêu đề",
"to": "đến", "to": " - ",
"To access the available model names for downloading,": "Để truy cập các tên mô hình có sẵn để tải xuống,", "To access the available model names for downloading,": "Để truy cập các tên mô hình có sẵn để tải xuống,",
"To access the GGUF models available for downloading,": "Để truy cập các mô hình GGUF có sẵn để tải xuống,", "To access the GGUF models available for downloading,": "Để truy cập các mô hình GGUF có sẵn để tải xuống,",
"to chat input.": "đến đầu vào trò chuyện.", "to chat input.": "đến đầu vào trò chuyện.",
"Today": "", "Today": "Hôm nay",
"Toggle settings": "Bật/tắt cài đặt", "Toggle settings": "Bật/tắt cài đặt",
"Toggle sidebar": "Bật/tắt thanh bên", "Toggle sidebar": "Bật/tắt thanh bên",
"Top K": "Top K", "Top K": "Top K",
...@@ -471,7 +474,7 @@ ...@@ -471,7 +474,7 @@
"Type Hugging Face Resolve (Download) URL": "Nhập URL Hugging Face Resolve (Tải xuống)", "Type Hugging Face Resolve (Download) URL": "Nhập URL Hugging Face Resolve (Tải xuống)",
"Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Loại Tệp Không xác định '{{file_type}}', nhưng đang chấp nhận và xử lý như văn bản thô", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Loại Tệp Không xác định '{{file_type}}', nhưng đang chấp nhận và xử lý như văn bản thô",
"Update and Copy Link": "", "Update and Copy Link": "Cập nhật và sao chép link",
"Update password": "Cập nhật mật khẩu", "Update password": "Cập nhật mật khẩu",
"Upload a GGUF model": "Tải lên mô hình GGUF", "Upload a GGUF model": "Tải lên mô hình GGUF",
"Upload files": "Tải tệp lên hệ thống", "Upload files": "Tải tệp lên hệ thống",
...@@ -479,7 +482,7 @@ ...@@ -479,7 +482,7 @@
"URL Mode": "Chế độ URL", "URL Mode": "Chế độ URL",
"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 '#' 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 Gravatar": "Sử dụng Gravatar",
"Use Initials": "", "Use Initials": "Sử dụng tên viết tắt",
"user": "Người sử dụng", "user": "Người sử dụng",
"User Permissions": "Phân quyền sử dụng", "User Permissions": "Phân quyền sử dụng",
"Users": "người sử dụng", "Users": "người sử dụng",
...@@ -488,9 +491,10 @@ ...@@ -488,9 +491,10 @@
"variable": "biến", "variable": "biến",
"variable to have them replaced with clipboard content.": "biến để có chúng được thay thế bằng nội dung clipboard.", "variable to have them replaced with clipboard content.": "biến để có chúng được thay thế bằng nội dung clipboard.",
"Version": "Version", "Version": "Version",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Cảnh báo: Nếu cập nhật hoặc thay đổi embedding model, bạn sẽ cần cập nhật lại tất cả tài liệu.",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "", "Web Loader Settings": "Cài đặt Web Loader",
"Web Params": "", "Web Params": "",
"Webhook URL": "", "Webhook URL": "",
"WebUI Add-ons": "Tiện ích WebUI", "WebUI Add-ons": "Tiện ích WebUI",
...@@ -503,12 +507,12 @@ ...@@ -503,12 +507,12 @@
"Write a prompt suggestion (e.g. Who are you?)": "Hãy viết một prompt (vd: Bạn là ai?)", "Write a prompt suggestion (e.g. Who are you?)": "Hãy viết một prompt (vd: Bạn là ai?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Viết một tóm tắt trong vòng 50 từ cho [chủ đề hoặc từ khóa].", "Write a summary in 50 words that summarizes [topic or keyword].": "Viết một tóm tắt trong vòng 50 từ cho [chủ đề hoặc từ khóa].",
"Yes": "", "Yes": "",
"Yesterday": "", "Yesterday": "Hôm qua",
"You": "", "You": "Bạn",
"You have no archived conversations.": "", "You have no archived conversations.": "Bạn chưa lưu trữ một nội dung chat nào",
"You have shared this chat": "", "You have shared this chat": "Bạn vừa chia sẻ chat này",
"You're a helpful assistant.": "Bạn là một trợ lý hữu ích.", "You're a helpful assistant.": "Bạn là một trợ lý hữu ích.",
"You're now logged in.": "Bạn đã đăng nhập.", "You're now logged in.": "Bạn đã đăng nhập.",
"Youtube": "", "Youtube": "",
"Youtube Loader Settings": "" "Youtube Loader Settings": "Cài đặt Youtube Loader"
} }
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} 正在思考...", "{{modelName}} is thinking...": "{{modelName}} 正在思考...",
"{{user}}'s Chats": "{{user}} 的聊天记录", "{{user}}'s Chats": "{{user}} 的聊天记录",
"{{webUIName}} Backend Required": "需要 {{webUIName}} 后端", "{{webUIName}} Backend Required": "需要 {{webUIName}} 后端",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "用户", "a user": "用户",
"About": "关于", "About": "关于",
"Account": "账户", "Account": "账户",
"Accurate information": "准确信息", "Accurate information": "准确信息",
"Add": "",
"Add a model": "添加模型", "Add a model": "添加模型",
"Add a model tag name": "添加模型标签名称", "Add a model tag name": "添加模型标签名称",
"Add a short description about what this modelfile does": "为这个模型文件添加一段简短的描述", "Add a short description about what this modelfile does": "为这个模型文件添加一段简短的描述",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "添加自定义提示词", "Add custom prompt": "添加自定义提示词",
"Add Docs": "添加文档", "Add Docs": "添加文档",
"Add Files": "添加文件", "Add Files": "添加文件",
"Add Memory": "",
"Add message": "添加消息", "Add message": "添加消息",
"Add Model": "添加模型", "Add Model": "添加模型",
"Add Tags": "添加标签", "Add Tags": "添加标签",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "聊天记录存档", "Archived Chats": "聊天记录存档",
"are allowed - Activate this command by typing": "允许 - 通过输入来激活这个命令", "are allowed - Activate this command by typing": "允许 - 通过输入来激活这个命令",
"Are you sure?": "你确定吗?", "Are you sure?": "你确定吗?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "附件", "Attach file": "附件",
"Attention to detail": "注重细节", "Attention to detail": "注重细节",
"Audio": "音频", "Audio": "音频",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "不良响应", "Bad Response": "不良响应",
"before": "之前", "before": "之前",
"Being lazy": "懒惰", "Being lazy": "懒惰",
"Beta": "",
"Builder Mode": "构建模式", "Builder Mode": "构建模式",
"Bypass SSL verification for Websites": "绕过网站的 SSL 验证", "Bypass SSL verification for Websites": "绕过网站的 SSL 验证",
"Cancel": "取消", "Cancel": "取消",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "启用", "Enabled": "启用",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮件、密码、角色。", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮件、密码、角色。",
"Enter {{role}} message here": "在此处输入 {{role}} 信息", "Enter {{role}} message here": "在此处输入 {{role}} 信息",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)", "Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)",
"Enter Chunk Size": "输入块大小 (Chunk Size)", "Enter Chunk Size": "输入块大小 (Chunk Size)",
"Enter Image Size (e.g. 512x512)": "输入图片大小 (例如 512x512)", "Enter Image Size (e.g. 512x512)": "输入图片大小 (例如 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "变量", "variable": "变量",
"variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。", "variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。",
"Version": "版本", "Version": "版本",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告: 如果更新或更改 embedding 模型,则需要重新导入所有文档。", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告: 如果更新或更改 embedding 模型,则需要重新导入所有文档。",
"Web": "网页", "Web": "网页",
"Web Loader Settings": "Web 加载器设置", "Web Loader Settings": "Web 加载器设置",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} 正在思考...", "{{modelName}} is thinking...": "{{modelName}} 正在思考...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "需要 {{webUIName}} 後台", "{{webUIName}} Backend Required": "需要 {{webUIName}} 後台",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "使用者", "a user": "使用者",
"About": "關於", "About": "關於",
"Account": "帳號", "Account": "帳號",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "新增模型", "Add a model": "新增模型",
"Add a model tag name": "新增模型標籤", "Add a model tag name": "新增模型標籤",
"Add a short description about what this modelfile does": "為這個 Modelfile 添加一段簡短的描述", "Add a short description about what this modelfile does": "為這個 Modelfile 添加一段簡短的描述",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "新增文件", "Add Docs": "新增文件",
"Add Files": "新增檔案", "Add Files": "新增檔案",
"Add Memory": "",
"Add message": "新增訊息", "Add message": "新增訊息",
"Add Model": "", "Add Model": "",
"Add Tags": "新增標籤", "Add Tags": "新增標籤",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "聊天記錄存檔", "Archived Chats": "聊天記錄存檔",
"are allowed - Activate this command by typing": "是允許的 - 透過輸入", "are allowed - Activate this command by typing": "是允許的 - 透過輸入",
"Are you sure?": "你確定嗎?", "Are you sure?": "你確定嗎?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "音訊", "Audio": "音訊",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "建構模式", "Builder Mode": "建構模式",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "取消", "Cancel": "取消",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "已啟用", "Enabled": "已啟用",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "在這裡輸入 {{role}} 訊息", "Enter {{role}} message here": "在這裡輸入 {{role}} 訊息",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "輸入 Chunk Overlap", "Enter Chunk Overlap": "輸入 Chunk Overlap",
"Enter Chunk Size": "輸入 Chunk 大小", "Enter Chunk Size": "輸入 Chunk 大小",
"Enter Image Size (e.g. 512x512)": "輸入圖片大小(例如 512x512)", "Enter Image Size (e.g. 512x512)": "輸入圖片大小(例如 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "變數", "variable": "變數",
"variable to have them replaced with clipboard content.": "變數將替換為剪貼簿內容。", "variable to have them replaced with clipboard content.": "變數將替換為剪貼簿內容。",
"Version": "版本", "Version": "版本",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "網頁", "Web": "網頁",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -59,7 +59,11 @@ self.onmessage = async (event) => { ...@@ -59,7 +59,11 @@ self.onmessage = async (event) => {
// make sure loading is done // make sure loading is done
await loadPyodideAndPackages(self.packages); await loadPyodideAndPackages(self.packages);
self.result = await self.pyodide.runPythonAsync(code); try {
self.result = await self.pyodide.runPythonAsync(code);
} catch (error) {
self.stderr = error.toString();
}
self.postMessage({ id, result: self.result, stdout: self.stdout, stderr: self.stderr }); self.postMessage({ id, result: self.result, stdout: self.stdout, stderr: self.stderr });
}; };
......
...@@ -203,6 +203,7 @@ ...@@ -203,6 +203,7 @@
user: _user ?? undefined, user: _user ?? undefined,
content: userPrompt, content: userPrompt,
files: files.length > 0 ? files : undefined, files: files.length > 0 ? files : undefined,
models: selectedModels.filter((m, mIdx) => selectedModels.indexOf(m) === mIdx),
timestamp: Math.floor(Date.now() / 1000) // Unix epoch timestamp: Math.floor(Date.now() / 1000) // Unix epoch
}; };
...@@ -251,63 +252,66 @@ ...@@ -251,63 +252,66 @@
} }
}; };
const sendPrompt = async (prompt, parentId) => { const sendPrompt = async (prompt, parentId, modelId = null) => {
const _chatId = JSON.parse(JSON.stringify($chatId)); const _chatId = JSON.parse(JSON.stringify($chatId));
await Promise.all( await Promise.all(
(atSelectedModel !== undefined ? [atSelectedModel.id] : selectedModels).map( (modelId
async (modelId) => { ? [modelId]
console.log('modelId', modelId); : atSelectedModel !== undefined
const model = $models.filter((m) => m.id === modelId).at(0); ? [atSelectedModel.id]
: selectedModels
if (model) { ).map(async (modelId) => {
// If there are image files, check if model is vision capable console.log('modelId', modelId);
const hasImages = messages.some((message) => const model = $models.filter((m) => m.id === modelId).at(0);
message.files?.some((file) => file.type === 'image')
if (model) {
// If there are image files, check if model is vision capable
const hasImages = messages.some((message) =>
message.files?.some((file) => file.type === 'image')
);
if (hasImages && !(model.custom_info?.params.vision_capable ?? true)) {
toast.error(
$i18n.t('Model {{modelName}} is not vision capable', {
modelName: model.custom_info?.name ?? model.name ?? model.id
})
); );
if (hasImages && !(model.custom_info?.params.vision_capable ?? true)) { }
toast.error(
$i18n.t('Model {{modelName}} is not vision capable', {
modelName: model.custom_info?.name ?? model.name ?? model.id
})
);
}
// Create response message // Create response message
let responseMessageId = uuidv4(); let responseMessageId = uuidv4();
let responseMessage = { let responseMessage = {
parentId: parentId, parentId: parentId,
id: responseMessageId, id: responseMessageId,
childrenIds: [], childrenIds: [],
role: 'assistant', role: 'assistant',
content: '', content: '',
model: model.id, model: model.id,
modelName: model.custom_info?.name ?? model.name ?? model.id, modelName: model.custom_info?.name ?? model.name ?? model.id,
timestamp: Math.floor(Date.now() / 1000) // Unix epoch timestamp: Math.floor(Date.now() / 1000) // Unix epoch
}; };
// Add message to history and Set currentId to messageId // Add message to history and Set currentId to messageId
history.messages[responseMessageId] = responseMessage; history.messages[responseMessageId] = responseMessage;
history.currentId = responseMessageId; history.currentId = responseMessageId;
// Append messageId to childrenIds of parent message // Append messageId to childrenIds of parent message
if (parentId !== null) { if (parentId !== null) {
history.messages[parentId].childrenIds = [ history.messages[parentId].childrenIds = [
...history.messages[parentId].childrenIds, ...history.messages[parentId].childrenIds,
responseMessageId responseMessageId
]; ];
} }
if (model?.external) { if (model?.external) {
await sendPromptOpenAI(model, prompt, responseMessageId, _chatId); await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
} else if (model) { } else if (model) {
await sendPromptOllama(model, prompt, responseMessageId, _chatId); await sendPromptOllama(model, prompt, responseMessageId, _chatId);
}
} else {
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
} }
} else {
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
} }
) })
); );
await chats.set(await getChatList(localStorage.token)); await chats.set(await getChatList(localStorage.token));
...@@ -773,16 +777,18 @@ ...@@ -773,16 +777,18 @@
console.log('stopResponse'); console.log('stopResponse');
}; };
const regenerateResponse = async () => { const regenerateResponse = async (message) => {
console.log('regenerateResponse'); console.log('regenerateResponse');
if (messages.length != 0 && messages.at(-1).done == true) {
messages.splice(messages.length - 1, 1);
messages = messages;
let userMessage = messages.at(-1); if (messages.length != 0) {
let userMessage = history.messages[message.parentId];
let userPrompt = userMessage.content; let userPrompt = userMessage.content;
await sendPrompt(userPrompt, userMessage.id); if ((userMessage?.models ?? [...selectedModels]).length == 1) {
await sendPrompt(userPrompt, userMessage.id);
} else {
await sendPrompt(userPrompt, userMessage.id, message.model);
}
} }
}; };
......
...@@ -211,7 +211,8 @@ ...@@ -211,7 +211,8 @@
user: _user ?? undefined, user: _user ?? undefined,
content: userPrompt, content: userPrompt,
files: files.length > 0 ? files : undefined, files: files.length > 0 ? files : undefined,
timestamp: Math.floor(Date.now() / 1000) // Unix epoch timestamp: Math.floor(Date.now() / 1000), // Unix epoch
models: selectedModels
}; };
// Add message to history and Set currentId to messageId // Add message to history and Set currentId to messageId
...@@ -256,62 +257,67 @@ ...@@ -256,62 +257,67 @@
await sendPrompt(userPrompt, userMessageId); await sendPrompt(userPrompt, userMessageId);
} }
}; };
const sendPrompt = async (prompt, parentId) => {
const sendPrompt = async (prompt, parentId, modelId = null) => {
const _chatId = JSON.parse(JSON.stringify($chatId)); const _chatId = JSON.parse(JSON.stringify($chatId));
await Promise.all( await Promise.all(
(atSelectedModel !== undefined ? [atSelectedModel.id] : selectedModels).map( (modelId
async (modelId) => { ? [modelId]
const model = $models.filter((m) => m.id === modelId).at(0); : atSelectedModel !== undefined
? [atSelectedModel.id]
if (model) { : selectedModels
// If there are image files, check if model is vision capable ).map(async (modelId) => {
const hasImages = messages.some((message) => console.log('modelId', modelId);
message.files?.some((file) => file.type === 'image') const model = $models.filter((m) => m.id === modelId).at(0);
if (model) {
// If there are image files, check if model is vision capable
const hasImages = messages.some((message) =>
message.files?.some((file) => file.type === 'image')
);
if (hasImages && !(model.custom_info?.params.vision_capable ?? true)) {
toast.error(
$i18n.t('Model {{modelName}} is not vision capable', {
modelName: model.custom_info?.name ?? model.name ?? model.id
})
); );
if (hasImages && !(model.custom_info?.params.vision_capable ?? true)) { }
toast.error(
$i18n.t('Model {{modelName}} is not vision capable', {
modelName: model.custom_info?.name ?? model.name ?? model.id
})
);
}
// Create response message // Create response message
let responseMessageId = uuidv4(); let responseMessageId = uuidv4();
let responseMessage = { let responseMessage = {
parentId: parentId, parentId: parentId,
id: responseMessageId, id: responseMessageId,
childrenIds: [], childrenIds: [],
role: 'assistant', role: 'assistant',
content: '', content: '',
model: model.id, model: model.id,
modelName: model.custom_info?.name ?? model.name ?? model.id, modelName: model.custom_info?.name ?? model.name ?? model.id,
timestamp: Math.floor(Date.now() / 1000) // Unix epoch timestamp: Math.floor(Date.now() / 1000) // Unix epoch
}; };
// Add message to history and Set currentId to messageId // Add message to history and Set currentId to messageId
history.messages[responseMessageId] = responseMessage; history.messages[responseMessageId] = responseMessage;
history.currentId = responseMessageId; history.currentId = responseMessageId;
// Append messageId to childrenIds of parent message // Append messageId to childrenIds of parent message
if (parentId !== null) { if (parentId !== null) {
history.messages[parentId].childrenIds = [ history.messages[parentId].childrenIds = [
...history.messages[parentId].childrenIds, ...history.messages[parentId].childrenIds,
responseMessageId responseMessageId
]; ];
} }
if (model?.external) { if (model?.external) {
await sendPromptOpenAI(model, prompt, responseMessageId, _chatId); await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
} else if (model) { } else if (model) {
await sendPromptOllama(model, prompt, responseMessageId, _chatId); await sendPromptOllama(model, prompt, responseMessageId, _chatId);
}
} else {
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
} }
} else {
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
} }
) })
); );
await chats.set(await getChatList(localStorage.token)); await chats.set(await getChatList(localStorage.token));
...@@ -775,16 +781,18 @@ ...@@ -775,16 +781,18 @@
console.log('stopResponse'); console.log('stopResponse');
}; };
const regenerateResponse = async () => { const regenerateResponse = async (message) => {
console.log('regenerateResponse'); console.log('regenerateResponse');
if (messages.length != 0 && messages.at(-1).done == true) {
messages.splice(messages.length - 1, 1);
messages = messages;
let userMessage = messages.at(-1); if (messages.length != 0) {
let userMessage = history.messages[message.parentId];
let userPrompt = userMessage.content; let userPrompt = userMessage.content;
await sendPrompt(userPrompt, userMessage.id); if ((userMessage?.models ?? [...selectedModels]).length == 1) {
await sendPrompt(userPrompt, userMessage.id);
} else {
await sendPrompt(userPrompt, userMessage.id, message.model);
}
} }
}; };
......
...@@ -339,7 +339,7 @@ SYSTEM """${system}"""`.replace(/^\s*\n/gm, ''); ...@@ -339,7 +339,7 @@ SYSTEM """${system}"""`.replace(/^\s*\n/gm, '');
if ( if (
inputFiles && inputFiles &&
inputFiles.length > 0 && inputFiles.length > 0 &&
['image/gif', 'image/jpeg', 'image/png'].includes(inputFiles[0]['type']) ['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(inputFiles[0]['type'])
) { ) {
reader.readAsDataURL(inputFiles[0]); reader.readAsDataURL(inputFiles[0]);
} else { } else {
......
...@@ -238,7 +238,7 @@ ...@@ -238,7 +238,7 @@
if ( if (
inputFiles && inputFiles &&
inputFiles.length > 0 && inputFiles.length > 0 &&
['image/gif', 'image/jpeg', 'image/png'].includes(inputFiles[0]['type']) ['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(inputFiles[0]['type'])
) { ) {
reader.readAsDataURL(inputFiles[0]); reader.readAsDataURL(inputFiles[0]);
} else { } else {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment