From 4ab5050379b8a5a25eed97e704875a3443e96740 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 22 Apr 2024 09:52:34 -0500 Subject: [PATCH 01/18] chore: pl-pl rm --- src/lib/i18n/locales/pl-pl/translation.json | 372 -------------------- static/manifest.json | 0 2 files changed, 372 deletions(-) delete mode 100644 src/lib/i18n/locales/pl-pl/translation.json create mode 100644 static/manifest.json diff --git a/src/lib/i18n/locales/pl-pl/translation.json b/src/lib/i18n/locales/pl-pl/translation.json deleted file mode 100644 index 9de1d9d3c..000000000 --- a/src/lib/i18n/locales/pl-pl/translation.json +++ /dev/null @@ -1,372 +0,0 @@ -{ - "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' lub '-1' dla bez wygaśnięcia.", - "(Beta)": "(Beta)", - "(e.g. `sh webui.sh --api`)": "(np. `sh webui.sh --api`)", - "(latest)": "(najnowszy)", - "{{modelName}} is thinking...": "{{modelName}} myśli...", - "{{webUIName}} Backend Required": "Backend {{webUIName}} wymagane", - "a user": "użytkownik", - "About": "O nas", - "Account": "Konto", - "Action": "Akcja", - "Add a model": "Dodaj model", - "Add a model tag name": "Dodaj nazwę tagu modelu", - "Add a short description about what this modelfile does": "Dodaj krótki opis tego, co robi ten plik modelu", - "Add a short title for this prompt": "Dodaj krótki tytuł tego polecenia", - "Add a tag": "Dodaj tag", - "Add Docs": "Dodaj dokumenty", - "Add Files": "Dodaj pliki", - "Add message": "Dodaj wiadomość", - "add tags": "dodaj tagi", - "Adjusting these settings will apply changes universally to all users.": "Dostosowanie tych ustawień spowoduje zastosowanie zmian uniwersalnie do wszystkich użytkowników.", - "admin": "admin", - "Admin Panel": "Panel administracyjny", - "Admin Settings": "Ustawienia administratora", - "Advanced Parameters": "Zaawansowane parametry", - "all": "wszyscy", - "All Users": "Wszyscy użytkownicy", - "Allow": "Pozwól", - "Allow Chat Deletion": "Pozwól na usuwanie czatu", - "alphanumeric characters and hyphens": "znaki alfanumeryczne i myślniki", - "Already have an account?": "Masz już konto?", - "an assistant": "asystent", - "and": "i", - "API Base URL": "Podstawowy adres URL interfejsu API", - "API Key": "Klucz API", - "API RPM": "Pakiet API RPM", - "are allowed - Activate this command by typing": "są dozwolone - Aktywuj to polecenie, wpisując", - "Are you sure?": "Jesteś pewien?", - "Audio": "Dźwięk", - "Auto-playback response": "Odtwarzanie automatyczne odpowiedzi", - "Auto-send input after 3 sec.": "Wysyłanie automatyczne po 3 sek.", - "AUTOMATIC1111 Base URL": "Podstawowy adres URL AUTOMATIC1111", - "AUTOMATIC1111 Base URL is required.": "Podstawowy adres URL AUTOMATIC1111 jest wymagany.", - "available!": "dostępny!", - "Back": "Wstecz", - "Builder Mode": "Tryb budowniczego", - "Cancel": "Anuluj", - "Categories": "Kategorie", - "Change Password": "Zmień hasło", - "Chat": "Czat", - "Chat History": "Historia czatu", - "Chat History is off for this browser.": "Historia czatu jest wyłączona dla tej przeglądarki.", - "Chats": "Czaty", - "Check Again": "Sprawdź ponownie", - "Check for updates": "Sprawdź aktualizacje", - "Checking for updates...": "Sprawdzanie aktualizacji...", - "Choose a model before saving...": "Wybierz model przed zapisaniem...", - "Chunk Overlap": "Zachodzenie bloku", - "Chunk Params": "Parametry bloku", - "Chunk Size": "Rozmiar bloku", - "Click here for help.": "Kliknij tutaj, aby uzyskać pomoc.", - "Click here to check other modelfiles.": "Kliknij tutaj, aby sprawdzić inne pliki modelowe.", - "Click here to select": "Kliknij tutaj, aby wybrać", - "Click here to select documents.": "Kliknij tutaj, aby wybrać dokumenty.", - "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.", - "Close": "Zamknij", - "Collection": "Kolekcja", - "Command": "Polecenie", - "Confirm Password": "Potwierdź hasło", - "Connections": "Połączenia", - "Content": "Zawartość", - "Context Length": "Długość kontekstu", - "Conversation Mode": "Tryb rozmowy", - "Copy last code block": "Skopiuj ostatni blok kodu", - "Copy last response": "Skopiuj ostatnią odpowiedź", - "Copying to clipboard was successful!": "Kopiowanie do schowka zakończone powodzeniem!", - "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':": "Utwórz zwięzłą frazę składającą się z 3-5 słów jako nagłówek dla następującego zapytania, ściśle przestrzegając limitu od 3 do 5 słów i unikając użycia słowa 'tytuł':", - "Create a modelfile": "Utwórz plik modelu", - "Create Account": "Utwórz konto", - "Created at": "Utworzono o", - "Created by": "Utworzono przez", - "Current Model": "Bieżący model", - "Current Password": "Bieżące hasło", - "Custom": "Niestandardowy", - "Customize Ollama models for a specific purpose": "Dostosuj modele Ollama do określonego celu", - "Dark": "Ciemny", - "Database": "Baza danych", - "DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm", - "Default": "Domyślny", - "Default (Automatic1111)": "Domyślny (Automatic1111)", - "Default (Web API)": "Domyślny (Interfejs API)", - "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 a model": "Usuń model", - "Delete chat": "Usuń czat", - "Delete Chats": "Usuń czaty", - "Deleted {{deleteModelTag}}": "Usunięto {{deleteModelTag}}", - "Deleted {tagName}": "Usunięto {tagName}", - "Description": "Opis", - "Notifications": "Powiadomienia", - "Disabled": "Wyłączone", - "Discover a modelfile": "Odkryj plik modelu", - "Discover a prompt": "Odkryj prompt", - "Discover, download, and explore custom prompts": "Odkryj, pobierz i eksploruj niestandardowe prompty", - "Discover, download, and explore model presets": "Odkryj, pobierz i eksploruj ustawienia modeli", - "Display the username instead of You in the Chat": "Wyświetl nazwę użytkownika zamiast Ty w czacie", - "Document": "Dokument", - "Document Settings": "Ustawienia dokumentu", - "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?", - "Download as a File": "Pobierz jako plik", - "Download Database": "Pobierz bazę danych", - "Drop any files here to add to the conversation": "Upuść pliki tutaj, aby dodać do rozmowy", - "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "np. '30s', '10m'. Poprawne jednostki czasu to 's', 'm', 'h'.", - "Edit Doc": "Edytuj dokument", - "Edit User": "Edytuj użytkownika", - "Email": "Email", - "Embedding model: {{embedding_model}}": "Osadzony model: {{embedding_model}}", - "Enable Chat History": "Włącz historię czatu", - "Enable New Sign Ups": "Włącz nowe rejestracje", - "Enabled": "Włączone", - "Enter {{role}} message here": "Wprowadź wiadomość {{role}} tutaj", - "Enter API Key": "Wprowadź klucz API", - "Enter Chunk Overlap": "Wprowadź zakchodzenie bloku", - "Enter Chunk Size": "Wprowadź rozmiar bloku", - "Enter Image Size (e.g. 512x512)": "Wprowadź rozmiar obrazu (np. 512x512)", - "Enter LiteLLM API Base URL (litellm_params.api_base)": "Wprowadź bazowy adres URL LiteLLM API (litellm_params.api_base)", - "Enter LiteLLM API Key (litellm_params.api_key)": "Wprowadź klucz API LiteLLM (litellm_params.api_key)", - "Enter LiteLLM API RPM (litellm_params.rpm)": "Wprowadź API LiteLLM RPM(litellm_params.rpm)", - "Enter LiteLLM Model (litellm_params.model)": "Wprowadź model LiteLLM (litellm_params.model)", - "Enter Max Tokens (litellm_params.max_tokens)": "Wprowadź maksymalną liczbę tokenów (litellm_params.max_tokens)", - "Enter model tag (e.g. {{modelTag}})": "Wprowadź tag modelu (np. {{modelTag}})", - "Enter Number of Steps (e.g. 50)": "Wprowadź liczbę kroków (np. 50)", - "Enter stop sequence": "Wprowadź sekwencję zatrzymania", - "Enter Top K": "Wprowadź Top K", - "Enter URL (e.g. http://127.0.0.1:7860/)": "Wprowadź adres URL (np. http://127.0.0.1:7860/)", - "Enter Your Email": "Wprowadź swój adres email", - "Enter Your Full Name": "Wprowadź swoje imię i nazwisko", - "Enter Your Password": "Wprowadź swoje hasło", - "Experimental": "Eksperymentalne", - "Export All Chats (All Users)": "Eksportuj wszystkie czaty (wszyscy użytkownicy)", - "Export Chats": "Eksportuj czaty", - "Export Documents Mapping": "Eksportuj mapowanie dokumentów", - "Export Modelfiles": "Eksportuj pliki modeli", - "Export Prompts": "Eksportuj prompty", - "Failed to read clipboard contents": "Nie udało się odczytać zawartości schowka", - "File Mode": "Tryb pliku", - "File not found.": "Plik nie został znaleziony.", - "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Wykryto podszywanie się pod odcisk palca: Nie można używać inicjałów jako awatara. Przechodzenie do domyślnego obrazu profilowego.", - "Focus chat input": "Skoncentruj na czacie", - "Format your variables using square brackets like this:": "Formatuj swoje zmienne, używając nawiasów kwadratowych, np.", - "From (Base Model)": "Z (Model Podstawowy)", - "Full Screen Mode": "Tryb pełnoekranowy", - "General": "Ogólne", - "General Settings": "Ogólne ustawienia", - "Hello, {{name}}": "Witaj, {{name}}", - "Hide": "Ukryj", - "Hide Additional Params": "Ukryj dodatkowe parametry", - "How can I help you today?": "Jak mogę Ci dzisiaj pomóc?", - "Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)", - "Image Generation Engine": "Silnik generowania obrazu", - "Image Settings": "Ustawienia obrazu", - "Images": "Obrazy", - "Import Chats": "Importuj rozmowy", - "Import Documents Mapping": "Importuj mapowanie dokumentów", - "Import Modelfiles": "Importuj pliki modeli", - "Import Prompts": "Importuj prompty", - "Include `--api` flag when running stable-diffusion-webui": "Dołącz flagę `--api` podczas uruchamiania stable-diffusion-webui", - "Interface": "Interfejs", - "join our Discord for help.": "Dołącz do naszego Discorda po pomoc.", - "JSON": "JSON", - "JWT Expiration": "Wygaśnięcie JWT", - "JWT Token": "Token JWT", - "Keep Alive": "Zachowaj łączność", - "Keyboard shortcuts": "Skróty klawiszowe", - "Language": "Język", - "Light": "Jasny", - "Listening...": "Nasłuchiwanie...", - "LLMs can make mistakes. Verify important information.": "LLMy mogą popełniać błędy. Zweryfikuj ważne informacje.", - "Made by OpenWebUI Community": "Stworzone przez społeczność OpenWebUI", - "Make sure to enclose them with": "Upewnij się, że są one zamknięte w", - "Manage LiteLLM Models": "Zarządzaj modelami LiteLLM", - "Manage Models": "Zarządzaj modelami", - "Manage Ollama Models": "Zarządzaj modelami Ollama", - "Max Tokens": "Maksymalna liczba tokenów", - "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksymalnie 3 modele można pobierać jednocześnie. Spróbuj ponownie później.", - "Mirostat": "Mirostat", - "Mirostat Eta": "Mirostat Eta", - "Mirostat Tau": "Mirostat Tau", - "MMMM DD, YYYY": "MMMM DD, YYYY", - "Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' został pomyślnie pobrany.", - "Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' jest już w kolejce do pobrania.", - "Model {{embedding_model}} update complete!": "Aktualizacja modelu {{embedding_model}} zakończona pomyślnie!", - "Model {{embedding_model}} update failed or not required!": "Model {{embedding_model}} aktualizacja nie powiodła się lub nie jest wymagana!", - "Model {{modelId}} not found": "Model {{modelId}} nie został znaleziony", - "Model {{modelName}} already exists.": "Model {{modelName}} już istnieje.", - "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Wykryto ścieżkę systemu plików modelu. Wymagana jest krótka nazwa modelu do aktualizacji, nie można kontynuować.", - "Model Name": "Nazwa modelu", - "Model not selected": "Model nie został wybrany", - "Model Tag Name": "Nazwa tagu modelu", - "Model Whitelisting": "Whitelisting modelu", - "Model(s) Whitelisted": "Model(e) dodane do listy białej", - "Modelfile": "Plik modelu", - "Modelfile Advanced Settings": "Zaawansowane ustawienia pliku modelu", - "Modelfile Content": "Zawartość pliku modelu", - "Modelfiles": "Pliki modeli", - "Models": "Modele", - "My Documents": "Moje dokumenty", - "My Modelfiles": "Moje pliki modeli", - "My Prompts": "Moje prompty", - "Name": "Nazwa", - "Name Tag": "Etykieta nazwy", - "Name your modelfile": "Nadaj nazwę swojemu plikowi modelu", - "New Chat": "Nowy czat", - "New Password": "Nowe hasło", - "Not sure what to add?": "Nie wiesz, co dodać?", - "Not sure what to write? Switch to": "Nie wiesz, co napisać? Przełącz się na", - "Off": "Wyłączony", - "Okay, Let's Go!": "Okej, zaczynamy!", - "Ollama Base URL": "Adres bazowy URL Ollama", - "Ollama Version": "Wersja Ollama", - "On": "Włączony", - "Only": "Tylko", - "Only alphanumeric characters and hyphens are allowed in the command string.": "W poleceniu dozwolone są tylko znaki alfanumeryczne i myślniki.", - "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.": "Ups! Trzymaj się! Twoje pliki są wciąż w procesie obróbki. Gotujemy je do perfekcji. Prosimy o cierpliwość, poinformujemy Cię, gdy będą gotowe.", - "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Wygląda na to, że URL jest nieprawidłowy. Sprawdź jeszcze raz i spróbuj ponownie.", - "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Używasz nieobsługiwaniej metody (tylko interfejs front-end). Proszę obsłużyć interfejs WebUI z poziomu backendu.", - "Open": "Otwórz", - "Open AI": "Open AI", - "Open AI (Dall-E)": "Open AI (Dall-E)", - "Open new chat": "Otwórz nowy czat", - "OpenAI API": "OpenAI API", - "OpenAI API Key": "Klucz API OpenAI", - "OpenAI API Key is required.": "Klucz API OpenAI jest wymagany.", - "or": "lub", - "Parameters": "Parametry", - "Password": "Hasło", - "PDF Extract Images (OCR)": "PDF Wyodrębnij obrazy (OCR)", - "pending": "oczekujące", - "Permission denied when accessing microphone: {{error}}": "Odmowa dostępu do mikrofonu: {{error}}", - "Playground": "Plac zabaw", - "Profile": "Profil", - "Prompt Content": "Zawartość prompta", - "Prompt suggestions": "Sugestie prompta", - "Prompts": "Prompty", - "Pull a model from Ollama.com": "Pobierz model z Ollama.com", - "Pull Progress": "Postęp pobierania", - "Query Params": "Parametry zapytania", - "RAG Template": "Szablon RAG", - "Raw Format": "Format bez obróbki", - "Record voice": "Nagraj głos", - "Redirecting you to OpenWebUI Community": "Przekierowujemy Cię do społeczności OpenWebUI", - "Release Notes": "Notatki wydania", - "Repeat Last N": "Powtórz ostatnie N", - "Repeat Penalty": "Kara za powtórzenie", - "Request Mode": "Tryb żądania", - "Reset Vector Storage": "Resetuj przechowywanie wektorów", - "Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", - "Role": "Rola", - "Rosé Pine": "Rosé Pine", - "Rosé Pine Dawn": "Rosé Pine Dawn", - "Save": "Zapisz", - "Save & Create": "Zapisz i utwórz", - "Save & Submit": "Zapisz i wyślij", - "Save & Update": "Zapisz i zaktualizuj", - "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": "Bezpośrednie zapisywanie dzienników czatu w pamięci przeglądarki nie jest już obsługiwane. Prosimy o pobranie i usunięcie dzienników czatu, klikając poniższy przycisk. Nie martw się, możesz łatwo ponownie zaimportować dzienniki czatu do backendu za pomocą", - "Scan": "Skanuj", - "Scan complete!": "Skanowanie zakończone!", - "Scan for documents from {{path}}": "Skanuj dokumenty z {{path}}", - "Search": "Szukaj", - "Search Documents": "Szukaj dokumentów", - "Search Prompts": "Szukaj promptów", - "See readme.md for instructions": "Zajrzyj do readme.md po instrukcje", - "See what's new": "Zobacz co nowego", - "Seed": "Seed", - "Select a mode": "Wybierz tryb", - "Select a model": "Wybierz model", - "Select an Ollama instance": "Wybierz instancję Ollama", - "Send a Message": "Wyślij Wiadomość", - "Send message": "Wyślij wiadomość", - "Server connection verified": "Połączenie z serwerem zweryfikowane", - "Set as default": "Ustaw jako domyślne", - "Set Default Model": "Ustaw domyślny model", - "Set Image Size": "Ustaw rozmiar obrazu", - "Set Steps": "Ustaw kroki", - "Set Title Auto-Generation Model": "Ustaw model automatycznego generowania tytułów", - "Set Voice": "Ustaw głos", - "Settings": "Ustawienia", - "Settings saved successfully!": "Ustawienia zapisane pomyślnie!", - "Share to OpenWebUI Community": "Dziel się z społecznością OpenWebUI", - "short-summary": "Krótkie podsumowanie", - "Show": "Pokaż", - "Show Additional Params": "Pokaż dodatkowe parametry", - "Show shortcuts": "Pokaż skróty", - "sidebar": "Panel boczny", - "Sign in": "Zaloguj się", - "Sign Out": "Wyloguj się", - "Sign up": "Zarejestruj się", - "Speech recognition error: {{error}}": "Błąd rozpoznawania mowy: {{error}}", - "Speech-to-Text Engine": "Silnik mowy na tekst", - "SpeechRecognition API is not supported in this browser.": "API Rozpoznawania Mowy nie jest obsługiwane w tej przeglądarce.", - "Stop Sequence": "Zatrzymaj sekwencję", - "STT Settings": "Ustawienia STT", - "Submit": "Zatwierdź", - "Success": "Sukces", - "Successfully updated.": "Pomyślnie zaktualizowano.", - "Sync All": "Synchronizuj wszystko", - "System": "System", - "System Prompt": "Prompt systemowy", - "Tags": "Tagi", - "Temperature": "Temperatura", - "Template": "Szablon", - "Text Completion": "Uzupełnienie tekstu", - "Text-to-Speech Engine": "Silnik tekstu na mowę", - "Tfs Z": "Tfs Z", - "Theme": "Motyw", - "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To zapewnia, że Twoje cenne rozmowy są bezpiecznie zapisywane w bazie danych backendowej. Dziękujemy!", - "This setting does not sync across browsers or devices.": "To ustawienie nie synchronizuje się między przeglądarkami ani urządzeniami.", - "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 Auto-Generation": "Automatyczne generowanie tytułu", - "Title Generation Prompt": "Prompt generowania tytułu", - "to": "do", - "To access the available model names for downloading,": "Aby uzyskać dostęp do dostępnych nazw modeli do pobrania,", - "To access the GGUF models available for downloading,": "Aby uzyskać dostęp do dostępnych modeli GGUF do pobrania,", - "to chat input.": "do pola wprowadzania czatu.", - "Toggle settings": "Przełącz ustawienia", - "Toggle sidebar": "Przełącz panel boczny", - "Top K": "Najlepsze K", - "Top P": "Najlepsze P", - "Trouble accessing Ollama?": "Problemy z dostępem do Ollama?", - "TTS Settings": "Ustawienia TTS", - "Type Hugging Face Resolve (Download) URL": "Wprowadź adres URL do pobrania z Hugging Face", - "Uh-oh! There was an issue connecting to {{provider}}.": "O nie! Wystąpił problem z połączeniem z {{provider}}.", - "Understand that updating or changing your embedding model requires reset of the vector database and re-import of all documents. You have been warned!": "Zrozum, że aktualizacja lub zmiana modelu osadzania wymaga zresetowania bazy wektorów i ponownego zaimportowania wszystkich dokumentów. Zostałeś ostrzeżony!", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nieznany typ pliku '{{file_type}}', ale akceptowany i traktowany jako zwykły tekst", - "Update": "Aktualizacja", - "Update embedding model {{embedding_model}}": "Aktualizuj modelu osadzania {{embedding_model}}", - "Update password": "Aktualizacja hasła", - "Upload a GGUF model": "Prześlij model GGUF", - "Upload files": "Prześlij pliki", - "Upload Progress": "Postęp przesyłania", - "URL Mode": "Tryb adresu URL", - "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", - "user": "użytkownik", - "User Permissions": "Uprawnienia użytkownika", - "Users": "Użytkownicy", - "Utilize": "Wykorzystaj", - "Valid time units:": "Poprawne jednostki czasu:", - "variable": "zmienna", - "variable to have them replaced with clipboard content.": "zmienna która zostanie zastąpiona zawartością schowka.", - "Version": "Wersja", - "Web": "Sieć", - "WebUI Add-ons": "Dodatki do interfejsu WebUI", - "WebUI Settings": "Ustawienia interfejsu WebUI", - "WebUI will make requests to": "Interfejs sieciowy będzie wysyłał żądania do", - "What’s New in": "Co nowego w", - "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Kiedy historia jest wyłączona, nowe rozmowy na tej przeglądarce nie będą widoczne w historii na żadnym z twoich urządzeń.", - "Whisper (Local)": "Whisper (Lokalnie)", - "Write a prompt suggestion (e.g. Who are you?)": "Napisz sugestię do polecenia (np. Kim jesteś?)", - "Write a summary in 50 words that summarizes [topic or keyword].": "Napisz podsumowanie w 50 słowach, które podsumowuje [temat lub słowo kluczowe].", - "You": "Ty", - "You're a helpful assistant.": "Jesteś pomocnym asystentem.", - "You're now logged in.": "Jesteś teraz zalogowany." -} diff --git a/static/manifest.json b/static/manifest.json new file mode 100644 index 000000000..e69de29bb From b3da09f52c3a80967bec5f6f5c638470cc20af8d Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 22 Apr 2024 09:53:01 -0500 Subject: [PATCH 02/18] chore: pl-PL renamed --- src/lib/i18n/locales/pl-PL/translation.json | 372 ++++++++++++++++++++ 1 file changed, 372 insertions(+) create mode 100644 src/lib/i18n/locales/pl-PL/translation.json diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json new file mode 100644 index 000000000..9de1d9d3c --- /dev/null +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -0,0 +1,372 @@ +{ + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' lub '-1' dla bez wygaśnięcia.", + "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api`)": "(np. `sh webui.sh --api`)", + "(latest)": "(najnowszy)", + "{{modelName}} is thinking...": "{{modelName}} myśli...", + "{{webUIName}} Backend Required": "Backend {{webUIName}} wymagane", + "a user": "użytkownik", + "About": "O nas", + "Account": "Konto", + "Action": "Akcja", + "Add a model": "Dodaj model", + "Add a model tag name": "Dodaj nazwę tagu modelu", + "Add a short description about what this modelfile does": "Dodaj krótki opis tego, co robi ten plik modelu", + "Add a short title for this prompt": "Dodaj krótki tytuł tego polecenia", + "Add a tag": "Dodaj tag", + "Add Docs": "Dodaj dokumenty", + "Add Files": "Dodaj pliki", + "Add message": "Dodaj wiadomość", + "add tags": "dodaj tagi", + "Adjusting these settings will apply changes universally to all users.": "Dostosowanie tych ustawień spowoduje zastosowanie zmian uniwersalnie do wszystkich użytkowników.", + "admin": "admin", + "Admin Panel": "Panel administracyjny", + "Admin Settings": "Ustawienia administratora", + "Advanced Parameters": "Zaawansowane parametry", + "all": "wszyscy", + "All Users": "Wszyscy użytkownicy", + "Allow": "Pozwól", + "Allow Chat Deletion": "Pozwól na usuwanie czatu", + "alphanumeric characters and hyphens": "znaki alfanumeryczne i myślniki", + "Already have an account?": "Masz już konto?", + "an assistant": "asystent", + "and": "i", + "API Base URL": "Podstawowy adres URL interfejsu API", + "API Key": "Klucz API", + "API RPM": "Pakiet API RPM", + "are allowed - Activate this command by typing": "są dozwolone - Aktywuj to polecenie, wpisując", + "Are you sure?": "Jesteś pewien?", + "Audio": "Dźwięk", + "Auto-playback response": "Odtwarzanie automatyczne odpowiedzi", + "Auto-send input after 3 sec.": "Wysyłanie automatyczne po 3 sek.", + "AUTOMATIC1111 Base URL": "Podstawowy adres URL AUTOMATIC1111", + "AUTOMATIC1111 Base URL is required.": "Podstawowy adres URL AUTOMATIC1111 jest wymagany.", + "available!": "dostępny!", + "Back": "Wstecz", + "Builder Mode": "Tryb budowniczego", + "Cancel": "Anuluj", + "Categories": "Kategorie", + "Change Password": "Zmień hasło", + "Chat": "Czat", + "Chat History": "Historia czatu", + "Chat History is off for this browser.": "Historia czatu jest wyłączona dla tej przeglądarki.", + "Chats": "Czaty", + "Check Again": "Sprawdź ponownie", + "Check for updates": "Sprawdź aktualizacje", + "Checking for updates...": "Sprawdzanie aktualizacji...", + "Choose a model before saving...": "Wybierz model przed zapisaniem...", + "Chunk Overlap": "Zachodzenie bloku", + "Chunk Params": "Parametry bloku", + "Chunk Size": "Rozmiar bloku", + "Click here for help.": "Kliknij tutaj, aby uzyskać pomoc.", + "Click here to check other modelfiles.": "Kliknij tutaj, aby sprawdzić inne pliki modelowe.", + "Click here to select": "Kliknij tutaj, aby wybrać", + "Click here to select documents.": "Kliknij tutaj, aby wybrać dokumenty.", + "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.", + "Close": "Zamknij", + "Collection": "Kolekcja", + "Command": "Polecenie", + "Confirm Password": "Potwierdź hasło", + "Connections": "Połączenia", + "Content": "Zawartość", + "Context Length": "Długość kontekstu", + "Conversation Mode": "Tryb rozmowy", + "Copy last code block": "Skopiuj ostatni blok kodu", + "Copy last response": "Skopiuj ostatnią odpowiedź", + "Copying to clipboard was successful!": "Kopiowanie do schowka zakończone powodzeniem!", + "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':": "Utwórz zwięzłą frazę składającą się z 3-5 słów jako nagłówek dla następującego zapytania, ściśle przestrzegając limitu od 3 do 5 słów i unikając użycia słowa 'tytuł':", + "Create a modelfile": "Utwórz plik modelu", + "Create Account": "Utwórz konto", + "Created at": "Utworzono o", + "Created by": "Utworzono przez", + "Current Model": "Bieżący model", + "Current Password": "Bieżące hasło", + "Custom": "Niestandardowy", + "Customize Ollama models for a specific purpose": "Dostosuj modele Ollama do określonego celu", + "Dark": "Ciemny", + "Database": "Baza danych", + "DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm", + "Default": "Domyślny", + "Default (Automatic1111)": "Domyślny (Automatic1111)", + "Default (Web API)": "Domyślny (Interfejs API)", + "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 a model": "Usuń model", + "Delete chat": "Usuń czat", + "Delete Chats": "Usuń czaty", + "Deleted {{deleteModelTag}}": "Usunięto {{deleteModelTag}}", + "Deleted {tagName}": "Usunięto {tagName}", + "Description": "Opis", + "Notifications": "Powiadomienia", + "Disabled": "Wyłączone", + "Discover a modelfile": "Odkryj plik modelu", + "Discover a prompt": "Odkryj prompt", + "Discover, download, and explore custom prompts": "Odkryj, pobierz i eksploruj niestandardowe prompty", + "Discover, download, and explore model presets": "Odkryj, pobierz i eksploruj ustawienia modeli", + "Display the username instead of You in the Chat": "Wyświetl nazwę użytkownika zamiast Ty w czacie", + "Document": "Dokument", + "Document Settings": "Ustawienia dokumentu", + "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?", + "Download as a File": "Pobierz jako plik", + "Download Database": "Pobierz bazę danych", + "Drop any files here to add to the conversation": "Upuść pliki tutaj, aby dodać do rozmowy", + "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "np. '30s', '10m'. Poprawne jednostki czasu to 's', 'm', 'h'.", + "Edit Doc": "Edytuj dokument", + "Edit User": "Edytuj użytkownika", + "Email": "Email", + "Embedding model: {{embedding_model}}": "Osadzony model: {{embedding_model}}", + "Enable Chat History": "Włącz historię czatu", + "Enable New Sign Ups": "Włącz nowe rejestracje", + "Enabled": "Włączone", + "Enter {{role}} message here": "Wprowadź wiadomość {{role}} tutaj", + "Enter API Key": "Wprowadź klucz API", + "Enter Chunk Overlap": "Wprowadź zakchodzenie bloku", + "Enter Chunk Size": "Wprowadź rozmiar bloku", + "Enter Image Size (e.g. 512x512)": "Wprowadź rozmiar obrazu (np. 512x512)", + "Enter LiteLLM API Base URL (litellm_params.api_base)": "Wprowadź bazowy adres URL LiteLLM API (litellm_params.api_base)", + "Enter LiteLLM API Key (litellm_params.api_key)": "Wprowadź klucz API LiteLLM (litellm_params.api_key)", + "Enter LiteLLM API RPM (litellm_params.rpm)": "Wprowadź API LiteLLM RPM(litellm_params.rpm)", + "Enter LiteLLM Model (litellm_params.model)": "Wprowadź model LiteLLM (litellm_params.model)", + "Enter Max Tokens (litellm_params.max_tokens)": "Wprowadź maksymalną liczbę tokenów (litellm_params.max_tokens)", + "Enter model tag (e.g. {{modelTag}})": "Wprowadź tag modelu (np. {{modelTag}})", + "Enter Number of Steps (e.g. 50)": "Wprowadź liczbę kroków (np. 50)", + "Enter stop sequence": "Wprowadź sekwencję zatrzymania", + "Enter Top K": "Wprowadź Top K", + "Enter URL (e.g. http://127.0.0.1:7860/)": "Wprowadź adres URL (np. http://127.0.0.1:7860/)", + "Enter Your Email": "Wprowadź swój adres email", + "Enter Your Full Name": "Wprowadź swoje imię i nazwisko", + "Enter Your Password": "Wprowadź swoje hasło", + "Experimental": "Eksperymentalne", + "Export All Chats (All Users)": "Eksportuj wszystkie czaty (wszyscy użytkownicy)", + "Export Chats": "Eksportuj czaty", + "Export Documents Mapping": "Eksportuj mapowanie dokumentów", + "Export Modelfiles": "Eksportuj pliki modeli", + "Export Prompts": "Eksportuj prompty", + "Failed to read clipboard contents": "Nie udało się odczytać zawartości schowka", + "File Mode": "Tryb pliku", + "File not found.": "Plik nie został znaleziony.", + "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Wykryto podszywanie się pod odcisk palca: Nie można używać inicjałów jako awatara. Przechodzenie do domyślnego obrazu profilowego.", + "Focus chat input": "Skoncentruj na czacie", + "Format your variables using square brackets like this:": "Formatuj swoje zmienne, używając nawiasów kwadratowych, np.", + "From (Base Model)": "Z (Model Podstawowy)", + "Full Screen Mode": "Tryb pełnoekranowy", + "General": "Ogólne", + "General Settings": "Ogólne ustawienia", + "Hello, {{name}}": "Witaj, {{name}}", + "Hide": "Ukryj", + "Hide Additional Params": "Ukryj dodatkowe parametry", + "How can I help you today?": "Jak mogę Ci dzisiaj pomóc?", + "Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)", + "Image Generation Engine": "Silnik generowania obrazu", + "Image Settings": "Ustawienia obrazu", + "Images": "Obrazy", + "Import Chats": "Importuj rozmowy", + "Import Documents Mapping": "Importuj mapowanie dokumentów", + "Import Modelfiles": "Importuj pliki modeli", + "Import Prompts": "Importuj prompty", + "Include `--api` flag when running stable-diffusion-webui": "Dołącz flagę `--api` podczas uruchamiania stable-diffusion-webui", + "Interface": "Interfejs", + "join our Discord for help.": "Dołącz do naszego Discorda po pomoc.", + "JSON": "JSON", + "JWT Expiration": "Wygaśnięcie JWT", + "JWT Token": "Token JWT", + "Keep Alive": "Zachowaj łączność", + "Keyboard shortcuts": "Skróty klawiszowe", + "Language": "Język", + "Light": "Jasny", + "Listening...": "Nasłuchiwanie...", + "LLMs can make mistakes. Verify important information.": "LLMy mogą popełniać błędy. Zweryfikuj ważne informacje.", + "Made by OpenWebUI Community": "Stworzone przez społeczność OpenWebUI", + "Make sure to enclose them with": "Upewnij się, że są one zamknięte w", + "Manage LiteLLM Models": "Zarządzaj modelami LiteLLM", + "Manage Models": "Zarządzaj modelami", + "Manage Ollama Models": "Zarządzaj modelami Ollama", + "Max Tokens": "Maksymalna liczba tokenów", + "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksymalnie 3 modele można pobierać jednocześnie. Spróbuj ponownie później.", + "Mirostat": "Mirostat", + "Mirostat Eta": "Mirostat Eta", + "Mirostat Tau": "Mirostat Tau", + "MMMM DD, YYYY": "MMMM DD, YYYY", + "Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' został pomyślnie pobrany.", + "Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' jest już w kolejce do pobrania.", + "Model {{embedding_model}} update complete!": "Aktualizacja modelu {{embedding_model}} zakończona pomyślnie!", + "Model {{embedding_model}} update failed or not required!": "Model {{embedding_model}} aktualizacja nie powiodła się lub nie jest wymagana!", + "Model {{modelId}} not found": "Model {{modelId}} nie został znaleziony", + "Model {{modelName}} already exists.": "Model {{modelName}} już istnieje.", + "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Wykryto ścieżkę systemu plików modelu. Wymagana jest krótka nazwa modelu do aktualizacji, nie można kontynuować.", + "Model Name": "Nazwa modelu", + "Model not selected": "Model nie został wybrany", + "Model Tag Name": "Nazwa tagu modelu", + "Model Whitelisting": "Whitelisting modelu", + "Model(s) Whitelisted": "Model(e) dodane do listy białej", + "Modelfile": "Plik modelu", + "Modelfile Advanced Settings": "Zaawansowane ustawienia pliku modelu", + "Modelfile Content": "Zawartość pliku modelu", + "Modelfiles": "Pliki modeli", + "Models": "Modele", + "My Documents": "Moje dokumenty", + "My Modelfiles": "Moje pliki modeli", + "My Prompts": "Moje prompty", + "Name": "Nazwa", + "Name Tag": "Etykieta nazwy", + "Name your modelfile": "Nadaj nazwę swojemu plikowi modelu", + "New Chat": "Nowy czat", + "New Password": "Nowe hasło", + "Not sure what to add?": "Nie wiesz, co dodać?", + "Not sure what to write? Switch to": "Nie wiesz, co napisać? Przełącz się na", + "Off": "Wyłączony", + "Okay, Let's Go!": "Okej, zaczynamy!", + "Ollama Base URL": "Adres bazowy URL Ollama", + "Ollama Version": "Wersja Ollama", + "On": "Włączony", + "Only": "Tylko", + "Only alphanumeric characters and hyphens are allowed in the command string.": "W poleceniu dozwolone są tylko znaki alfanumeryczne i myślniki.", + "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.": "Ups! Trzymaj się! Twoje pliki są wciąż w procesie obróbki. Gotujemy je do perfekcji. Prosimy o cierpliwość, poinformujemy Cię, gdy będą gotowe.", + "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Wygląda na to, że URL jest nieprawidłowy. Sprawdź jeszcze raz i spróbuj ponownie.", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Używasz nieobsługiwaniej metody (tylko interfejs front-end). Proszę obsłużyć interfejs WebUI z poziomu backendu.", + "Open": "Otwórz", + "Open AI": "Open AI", + "Open AI (Dall-E)": "Open AI (Dall-E)", + "Open new chat": "Otwórz nowy czat", + "OpenAI API": "OpenAI API", + "OpenAI API Key": "Klucz API OpenAI", + "OpenAI API Key is required.": "Klucz API OpenAI jest wymagany.", + "or": "lub", + "Parameters": "Parametry", + "Password": "Hasło", + "PDF Extract Images (OCR)": "PDF Wyodrębnij obrazy (OCR)", + "pending": "oczekujące", + "Permission denied when accessing microphone: {{error}}": "Odmowa dostępu do mikrofonu: {{error}}", + "Playground": "Plac zabaw", + "Profile": "Profil", + "Prompt Content": "Zawartość prompta", + "Prompt suggestions": "Sugestie prompta", + "Prompts": "Prompty", + "Pull a model from Ollama.com": "Pobierz model z Ollama.com", + "Pull Progress": "Postęp pobierania", + "Query Params": "Parametry zapytania", + "RAG Template": "Szablon RAG", + "Raw Format": "Format bez obróbki", + "Record voice": "Nagraj głos", + "Redirecting you to OpenWebUI Community": "Przekierowujemy Cię do społeczności OpenWebUI", + "Release Notes": "Notatki wydania", + "Repeat Last N": "Powtórz ostatnie N", + "Repeat Penalty": "Kara za powtórzenie", + "Request Mode": "Tryb żądania", + "Reset Vector Storage": "Resetuj przechowywanie wektorów", + "Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", + "Role": "Rola", + "Rosé Pine": "Rosé Pine", + "Rosé Pine Dawn": "Rosé Pine Dawn", + "Save": "Zapisz", + "Save & Create": "Zapisz i utwórz", + "Save & Submit": "Zapisz i wyślij", + "Save & Update": "Zapisz i zaktualizuj", + "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": "Bezpośrednie zapisywanie dzienników czatu w pamięci przeglądarki nie jest już obsługiwane. Prosimy o pobranie i usunięcie dzienników czatu, klikając poniższy przycisk. Nie martw się, możesz łatwo ponownie zaimportować dzienniki czatu do backendu za pomocą", + "Scan": "Skanuj", + "Scan complete!": "Skanowanie zakończone!", + "Scan for documents from {{path}}": "Skanuj dokumenty z {{path}}", + "Search": "Szukaj", + "Search Documents": "Szukaj dokumentów", + "Search Prompts": "Szukaj promptów", + "See readme.md for instructions": "Zajrzyj do readme.md po instrukcje", + "See what's new": "Zobacz co nowego", + "Seed": "Seed", + "Select a mode": "Wybierz tryb", + "Select a model": "Wybierz model", + "Select an Ollama instance": "Wybierz instancję Ollama", + "Send a Message": "Wyślij Wiadomość", + "Send message": "Wyślij wiadomość", + "Server connection verified": "Połączenie z serwerem zweryfikowane", + "Set as default": "Ustaw jako domyślne", + "Set Default Model": "Ustaw domyślny model", + "Set Image Size": "Ustaw rozmiar obrazu", + "Set Steps": "Ustaw kroki", + "Set Title Auto-Generation Model": "Ustaw model automatycznego generowania tytułów", + "Set Voice": "Ustaw głos", + "Settings": "Ustawienia", + "Settings saved successfully!": "Ustawienia zapisane pomyślnie!", + "Share to OpenWebUI Community": "Dziel się z społecznością OpenWebUI", + "short-summary": "Krótkie podsumowanie", + "Show": "Pokaż", + "Show Additional Params": "Pokaż dodatkowe parametry", + "Show shortcuts": "Pokaż skróty", + "sidebar": "Panel boczny", + "Sign in": "Zaloguj się", + "Sign Out": "Wyloguj się", + "Sign up": "Zarejestruj się", + "Speech recognition error: {{error}}": "Błąd rozpoznawania mowy: {{error}}", + "Speech-to-Text Engine": "Silnik mowy na tekst", + "SpeechRecognition API is not supported in this browser.": "API Rozpoznawania Mowy nie jest obsługiwane w tej przeglądarce.", + "Stop Sequence": "Zatrzymaj sekwencję", + "STT Settings": "Ustawienia STT", + "Submit": "Zatwierdź", + "Success": "Sukces", + "Successfully updated.": "Pomyślnie zaktualizowano.", + "Sync All": "Synchronizuj wszystko", + "System": "System", + "System Prompt": "Prompt systemowy", + "Tags": "Tagi", + "Temperature": "Temperatura", + "Template": "Szablon", + "Text Completion": "Uzupełnienie tekstu", + "Text-to-Speech Engine": "Silnik tekstu na mowę", + "Tfs Z": "Tfs Z", + "Theme": "Motyw", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To zapewnia, że Twoje cenne rozmowy są bezpiecznie zapisywane w bazie danych backendowej. Dziękujemy!", + "This setting does not sync across browsers or devices.": "To ustawienie nie synchronizuje się między przeglądarkami ani urządzeniami.", + "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 Auto-Generation": "Automatyczne generowanie tytułu", + "Title Generation Prompt": "Prompt generowania tytułu", + "to": "do", + "To access the available model names for downloading,": "Aby uzyskać dostęp do dostępnych nazw modeli do pobrania,", + "To access the GGUF models available for downloading,": "Aby uzyskać dostęp do dostępnych modeli GGUF do pobrania,", + "to chat input.": "do pola wprowadzania czatu.", + "Toggle settings": "Przełącz ustawienia", + "Toggle sidebar": "Przełącz panel boczny", + "Top K": "Najlepsze K", + "Top P": "Najlepsze P", + "Trouble accessing Ollama?": "Problemy z dostępem do Ollama?", + "TTS Settings": "Ustawienia TTS", + "Type Hugging Face Resolve (Download) URL": "Wprowadź adres URL do pobrania z Hugging Face", + "Uh-oh! There was an issue connecting to {{provider}}.": "O nie! Wystąpił problem z połączeniem z {{provider}}.", + "Understand that updating or changing your embedding model requires reset of the vector database and re-import of all documents. You have been warned!": "Zrozum, że aktualizacja lub zmiana modelu osadzania wymaga zresetowania bazy wektorów i ponownego zaimportowania wszystkich dokumentów. Zostałeś ostrzeżony!", + "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nieznany typ pliku '{{file_type}}', ale akceptowany i traktowany jako zwykły tekst", + "Update": "Aktualizacja", + "Update embedding model {{embedding_model}}": "Aktualizuj modelu osadzania {{embedding_model}}", + "Update password": "Aktualizacja hasła", + "Upload a GGUF model": "Prześlij model GGUF", + "Upload files": "Prześlij pliki", + "Upload Progress": "Postęp przesyłania", + "URL Mode": "Tryb adresu URL", + "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", + "user": "użytkownik", + "User Permissions": "Uprawnienia użytkownika", + "Users": "Użytkownicy", + "Utilize": "Wykorzystaj", + "Valid time units:": "Poprawne jednostki czasu:", + "variable": "zmienna", + "variable to have them replaced with clipboard content.": "zmienna która zostanie zastąpiona zawartością schowka.", + "Version": "Wersja", + "Web": "Sieć", + "WebUI Add-ons": "Dodatki do interfejsu WebUI", + "WebUI Settings": "Ustawienia interfejsu WebUI", + "WebUI will make requests to": "Interfejs sieciowy będzie wysyłał żądania do", + "What’s New in": "Co nowego w", + "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Kiedy historia jest wyłączona, nowe rozmowy na tej przeglądarce nie będą widoczne w historii na żadnym z twoich urządzeń.", + "Whisper (Local)": "Whisper (Lokalnie)", + "Write a prompt suggestion (e.g. Who are you?)": "Napisz sugestię do polecenia (np. Kim jesteś?)", + "Write a summary in 50 words that summarizes [topic or keyword].": "Napisz podsumowanie w 50 słowach, które podsumowuje [temat lub słowo kluczowe].", + "You": "Ty", + "You're a helpful assistant.": "Jesteś pomocnym asystentem.", + "You're now logged in.": "Jesteś teraz zalogowany." +} From e3d253b0403cd55950a37a95a24e1dee1a96bc94 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 06:53:04 -0400 Subject: [PATCH 03/18] feat: image env var --- backend/apps/images/main.py | 8 ++++---- backend/config.py | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/backend/apps/images/main.py b/backend/apps/images/main.py index a3939d206..5f7ce388b 100644 --- a/backend/apps/images/main.py +++ b/backend/apps/images/main.py @@ -35,8 +35,8 @@ from config import ( ENABLE_IMAGE_GENERATION, AUTOMATIC1111_BASE_URL, COMFYUI_BASE_URL, - OPENAI_API_BASE_URL, - OPENAI_API_KEY, + IMAGE_OPENAI_API_BASE_URL, + IMAGE_OPENAI_API_KEY, ) @@ -58,8 +58,8 @@ app.add_middleware( app.state.ENGINE = "" app.state.ENABLED = ENABLE_IMAGE_GENERATION -app.state.OPENAI_API_BASE_URL = OPENAI_API_BASE_URL -app.state.OPENAI_API_KEY = OPENAI_API_KEY +app.state.OPENAI_API_BASE_URL = IMAGE_OPENAI_API_BASE_URL +app.state.OPENAI_API_KEY = IMAGE_OPENAI_API_KEY app.state.MODEL = "" diff --git a/backend/config.py b/backend/config.py index 199037e4f..4d05a001e 100644 --- a/backend/config.py +++ b/backend/config.py @@ -487,6 +487,10 @@ AUTOMATIC1111_BASE_URL = os.getenv("AUTOMATIC1111_BASE_URL", "") COMFYUI_BASE_URL = os.getenv("COMFYUI_BASE_URL", "") +IMAGE_OPENAI_API_BASE_URL = os.getenv("IMAGE_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL) +IMAGE_OPENAI_API_KEY = os.getenv("IMAGE_OPENAI_API_KEY", OPENAI_API_KEY) + + #################################### # Audio #################################### From aa489be53b737be69b8f0880f13484d599d730b4 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 06:58:57 -0400 Subject: [PATCH 04/18] Update config.py --- backend/config.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/config.py b/backend/config.py index 4d05a001e..489e80647 100644 --- a/backend/config.py +++ b/backend/config.py @@ -487,8 +487,10 @@ AUTOMATIC1111_BASE_URL = os.getenv("AUTOMATIC1111_BASE_URL", "") COMFYUI_BASE_URL = os.getenv("COMFYUI_BASE_URL", "") -IMAGE_OPENAI_API_BASE_URL = os.getenv("IMAGE_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL) -IMAGE_OPENAI_API_KEY = os.getenv("IMAGE_OPENAI_API_KEY", OPENAI_API_KEY) +IMAGES_OPENAI_API_BASE_URL = os.getenv( + "IMAGES_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL +) +IMAGES_OPENAI_API_KEY = os.getenv("IMAGES_OPENAI_API_KEY", OPENAI_API_KEY) #################################### From 25d09363dfc511cb25d634aa45c9f769aa243495 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 07:14:31 -0400 Subject: [PATCH 05/18] feat: editable openai url for images --- backend/apps/images/main.py | 32 +++++++++++-------- src/lib/apis/images/index.ts | 13 ++++---- .../components/chat/Settings/Images.svelte | 29 ++++++++++++----- static/manifest.json | 1 + 4 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 static/manifest.json diff --git a/backend/apps/images/main.py b/backend/apps/images/main.py index 5f7ce388b..2059ac3c0 100644 --- a/backend/apps/images/main.py +++ b/backend/apps/images/main.py @@ -35,8 +35,8 @@ from config import ( ENABLE_IMAGE_GENERATION, AUTOMATIC1111_BASE_URL, COMFYUI_BASE_URL, - IMAGE_OPENAI_API_BASE_URL, - IMAGE_OPENAI_API_KEY, + IMAGES_OPENAI_API_BASE_URL, + IMAGES_OPENAI_API_KEY, ) @@ -58,8 +58,8 @@ app.add_middleware( app.state.ENGINE = "" app.state.ENABLED = ENABLE_IMAGE_GENERATION -app.state.OPENAI_API_BASE_URL = IMAGE_OPENAI_API_BASE_URL -app.state.OPENAI_API_KEY = IMAGE_OPENAI_API_KEY +app.state.OPENAI_API_BASE_URL = IMAGES_OPENAI_API_BASE_URL +app.state.OPENAI_API_KEY = IMAGES_OPENAI_API_KEY app.state.MODEL = "" @@ -135,27 +135,33 @@ async def update_engine_url( } -class OpenAIKeyUpdateForm(BaseModel): +class OpenAIConfigUpdateForm(BaseModel): + url: str key: str -@app.get("/key") -async def get_openai_key(user=Depends(get_admin_user)): - return {"OPENAI_API_KEY": app.state.OPENAI_API_KEY} +@app.get("/openai/config") +async def get_openai_config(user=Depends(get_admin_user)): + return { + "OPENAI_API_BASE_URL": app.state.OPENAI_API_BASE_URL, + "OPENAI_API_KEY": app.state.OPENAI_API_KEY, + } -@app.post("/key/update") -async def update_openai_key( - form_data: OpenAIKeyUpdateForm, user=Depends(get_admin_user) +@app.post("/openai/config/update") +async def update_openai_config( + form_data: OpenAIConfigUpdateForm, user=Depends(get_admin_user) ): - if form_data.key == "": raise HTTPException(status_code=400, detail=ERROR_MESSAGES.API_KEY_NOT_FOUND) + app.state.OPENAI_API_BASE_URL = form_data.url app.state.OPENAI_API_KEY = form_data.key + return { - "OPENAI_API_KEY": app.state.OPENAI_API_KEY, "status": True, + "OPENAI_API_BASE_URL": app.state.OPENAI_API_BASE_URL, + "OPENAI_API_KEY": app.state.OPENAI_API_KEY, } diff --git a/src/lib/apis/images/index.ts b/src/lib/apis/images/index.ts index aadfafd14..3f624704e 100644 --- a/src/lib/apis/images/index.ts +++ b/src/lib/apis/images/index.ts @@ -72,10 +72,10 @@ export const updateImageGenerationConfig = async ( return res; }; -export const getOpenAIKey = async (token: string = '') => { +export const getOpenAIConfig = async (token: string = '') => { let error = null; - const res = await fetch(`${IMAGES_API_BASE_URL}/key`, { + const res = await fetch(`${IMAGES_API_BASE_URL}/openai/config`, { method: 'GET', headers: { Accept: 'application/json', @@ -101,13 +101,13 @@ export const getOpenAIKey = async (token: string = '') => { throw error; } - return res.OPENAI_API_KEY; + return res; }; -export const updateOpenAIKey = async (token: string = '', key: string) => { +export const updateOpenAIConfig = async (token: string = '', url: string, key: string) => { let error = null; - const res = await fetch(`${IMAGES_API_BASE_URL}/key/update`, { + const res = await fetch(`${IMAGES_API_BASE_URL}/openai/config/update`, { method: 'POST', headers: { Accept: 'application/json', @@ -115,6 +115,7 @@ export const updateOpenAIKey = async (token: string = '', key: string) => { ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify({ + url: url, key: key }) }) @@ -136,7 +137,7 @@ export const updateOpenAIKey = async (token: string = '', key: string) => { throw error; } - return res.OPENAI_API_KEY; + return res; }; export const getImageGenerationEngineUrls = async (token: string = '') => { diff --git a/src/lib/components/chat/Settings/Images.svelte b/src/lib/components/chat/Settings/Images.svelte index 7282c184a..b1a31f8b9 100644 --- a/src/lib/components/chat/Settings/Images.svelte +++ b/src/lib/components/chat/Settings/Images.svelte @@ -15,8 +15,8 @@ updateImageSize, getImageSteps, updateImageSteps, - getOpenAIKey, - updateOpenAIKey + getOpenAIConfig, + updateOpenAIConfig } from '$lib/apis/images'; import { getBackendConfig } from '$lib/apis'; const dispatch = createEventDispatcher(); @@ -33,6 +33,7 @@ let AUTOMATIC1111_BASE_URL = ''; let COMFYUI_BASE_URL = ''; + let OPENAI_API_BASE_URL = ''; let OPENAI_API_KEY = ''; let selectedModel = ''; @@ -131,7 +132,10 @@ AUTOMATIC1111_BASE_URL = URLS.AUTOMATIC1111_BASE_URL; COMFYUI_BASE_URL = URLS.COMFYUI_BASE_URL; - OPENAI_API_KEY = await getOpenAIKey(localStorage.token); + const config = await getOpenAIConfig(localStorage.token); + + OPENAI_API_KEY = config.OPENAI_API_KEY; + OPENAI_API_BASE_URL = config.OPENAI_API_BASE_URL; imageSize = await getImageSize(localStorage.token); steps = await getImageSteps(localStorage.token); @@ -149,7 +153,7 @@ loading = true; if (imageGenerationEngine === 'openai') { - await updateOpenAIKey(localStorage.token, OPENAI_API_KEY); + await updateOpenAIConfig(localStorage.token, OPENAI_API_BASE_URL, OPENAI_API_KEY); } await updateDefaultImageGenerationModel(localStorage.token, selectedModel); @@ -300,13 +304,22 @@ {:else if imageGenerationEngine === 'openai'} -
{$i18n.t('OpenAI API Key')}
-
-
+
+
{$i18n.t('OpenAI API Config')}
+ +
+ +
diff --git a/static/manifest.json b/static/manifest.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/static/manifest.json @@ -0,0 +1 @@ +{} \ No newline at end of file From b1d204fdd40b1d1f8240e8954001636ea9f17d7e Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 07:20:24 -0400 Subject: [PATCH 06/18] feat: allow custom model name --- .../components/chat/Settings/Images.svelte | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/lib/components/chat/Settings/Images.svelte b/src/lib/components/chat/Settings/Images.svelte index b1a31f8b9..19e050ca8 100644 --- a/src/lib/components/chat/Settings/Images.svelte +++ b/src/lib/components/chat/Settings/Images.svelte @@ -332,19 +332,39 @@
{$i18n.t('Set Default Model')}
- + {#if imageGenerationEngine === 'openai' && !OPENAI_API_BASE_URL.includes('https://api.openai.com')} +
+
+ + + + {#each models ?? [] as model} + + {/each} + +
+
+ {:else} + + {/if}
From 4809d363b3ceb61fbea6b802748fc95b8422f396 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 07:21:20 -0400 Subject: [PATCH 07/18] Update manifest.json --- static/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/manifest.json b/static/manifest.json index 9e26dfeeb..0967ef424 100644 --- a/static/manifest.json +++ b/static/manifest.json @@ -1 +1 @@ -{} \ No newline at end of file +{} From cc3312157b3a7be80b4b2f841e4c157bc67cabb8 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 07:36:46 -0400 Subject: [PATCH 08/18] refac: model download --- .../components/chat/Settings/Models.svelte | 248 +++++++++--------- 1 file changed, 119 insertions(+), 129 deletions(-) diff --git a/src/lib/components/chat/Settings/Models.svelte b/src/lib/components/chat/Settings/Models.svelte index 688774d78..821d0fc4c 100644 --- a/src/lib/components/chat/Settings/Models.svelte +++ b/src/lib/components/chat/Settings/Models.svelte @@ -13,7 +13,7 @@ uploadModel } from '$lib/apis/ollama'; import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; - import { WEBUI_NAME, models, user } from '$lib/stores'; + import { WEBUI_NAME, models, MODEL_DOWNLOAD_POOL, user } from '$lib/stores'; import { splitStream } from '$lib/utils'; import { onMount, getContext } from 'svelte'; import { addLiteLLMModel, deleteLiteLLMModel, getLiteLLMModelInfo } from '$lib/apis/litellm'; @@ -50,12 +50,6 @@ let showExperimentalOllama = false; let ollamaVersion = ''; const MAX_PARALLEL_DOWNLOADS = 3; - const modelDownloadQueue = queue( - (task: { modelName: string }, cb) => - pullModelHandlerProcessor({ modelName: task.modelName, callback: cb }), - MAX_PARALLEL_DOWNLOADS - ); - let modelDownloadStatus: Record = {}; let modelTransferring = false; let modelTag = ''; @@ -140,7 +134,8 @@ const pullModelHandler = async () => { const sanitizedModelTag = modelTag.trim().replace(/^ollama\s+(run|pull)\s+/, ''); - if (modelDownloadStatus[sanitizedModelTag]) { + console.log($MODEL_DOWNLOAD_POOL); + if ($MODEL_DOWNLOAD_POOL[sanitizedModelTag]) { toast.error( $i18n.t(`Model '{{modelTag}}' is already in queue for downloading.`, { modelTag: sanitizedModelTag @@ -148,40 +143,117 @@ ); return; } - if (Object.keys(modelDownloadStatus).length === 3) { + if (Object.keys($MODEL_DOWNLOAD_POOL).length === MAX_PARALLEL_DOWNLOADS) { toast.error( $i18n.t('Maximum of 3 models can be downloaded simultaneously. Please try again later.') ); return; } - modelTransferring = true; + const res = await pullModel(localStorage.token, sanitizedModelTag, '0').catch((error) => { + toast.error(error); + return null; + }); - modelDownloadQueue.push( - { modelName: sanitizedModelTag }, - async (data: { modelName: string; success: boolean; error?: Error }) => { - const { modelName } = data; - // Remove the downloaded model - delete modelDownloadStatus[modelName]; + if (res) { + const reader = res.body + .pipeThrough(new TextDecoderStream()) + .pipeThrough(splitStream('\n')) + .getReader(); - modelDownloadStatus = { ...modelDownloadStatus }; + while (true) { + try { + const { value, done } = await reader.read(); + if (done) break; - if (!data.success) { - toast.error(data.error); - } else { - toast.success( - $i18n.t(`Model '{{modelName}}' has been successfully downloaded.`, { modelName }) - ); + let lines = value.split('\n'); - const notification = new Notification($WEBUI_NAME, { - body: $i18n.t(`Model '{{modelName}}' has been successfully downloaded.`, { modelName }), - icon: `${WEBUI_BASE_URL}/static/favicon.png` - }); + for (const line of lines) { + if (line !== '') { + let data = JSON.parse(line); + console.log(data); + if (data.error) { + throw data.error; + } + if (data.detail) { + throw data.detail; + } - models.set(await getModels()); + if (data.id) { + MODEL_DOWNLOAD_POOL.set({ + ...$MODEL_DOWNLOAD_POOL, + [sanitizedModelTag]: { + ...$MODEL_DOWNLOAD_POOL[sanitizedModelTag], + requestId: data.id, + reader, + done: false + } + }); + console.log(data); + } + + if (data.status) { + if (data.digest) { + let downloadProgress = 0; + if (data.completed) { + downloadProgress = Math.round((data.completed / data.total) * 1000) / 10; + } else { + downloadProgress = 100; + } + + MODEL_DOWNLOAD_POOL.set({ + ...$MODEL_DOWNLOAD_POOL, + [sanitizedModelTag]: { + ...$MODEL_DOWNLOAD_POOL[sanitizedModelTag], + pullProgress: downloadProgress, + digest: data.digest + } + }); + } else { + toast.success(data.status); + + MODEL_DOWNLOAD_POOL.set({ + ...$MODEL_DOWNLOAD_POOL, + [sanitizedModelTag]: { + ...$MODEL_DOWNLOAD_POOL[sanitizedModelTag], + done: data.status === 'success' + } + }); + } + } + } + } + } catch (error) { + console.log(error); + if (typeof error !== 'string') { + error = error.message; + } + + toast.error(error); + // opts.callback({ success: false, error, modelName: opts.modelName }); } } - ); + + console.log($MODEL_DOWNLOAD_POOL[sanitizedModelTag]); + + if ($MODEL_DOWNLOAD_POOL[sanitizedModelTag].done) { + toast.success( + $i18n.t(`Model '{{modelName}}' has been successfully downloaded.`, { + modelName: sanitizedModelTag + }) + ); + + models.set(await getModels(localStorage.token)); + } else { + toast.error('Download canceled'); + } + + delete $MODEL_DOWNLOAD_POOL[sanitizedModelTag]; + + MODEL_DOWNLOAD_POOL.set({ + ...$MODEL_DOWNLOAD_POOL + }); + } modelTag = ''; modelTransferring = false; @@ -352,88 +424,18 @@ models.set(await getModels()); }; - const pullModelHandlerProcessor = async (opts: { modelName: string; callback: Function }) => { - const res = await pullModel(localStorage.token, opts.modelName, selectedOllamaUrlIdx).catch( - (error) => { - opts.callback({ success: false, error, modelName: opts.modelName }); - return null; - } - ); + const cancelModelPullHandler = async (model: string) => { + const { reader, requestId } = $MODEL_DOWNLOAD_POOL[model]; + if (reader) { + await reader.cancel(); - if (res) { - const reader = res.body - .pipeThrough(new TextDecoderStream()) - .pipeThrough(splitStream('\n')) - .getReader(); - - while (true) { - try { - const { value, done } = await reader.read(); - if (done) break; - - let lines = value.split('\n'); - - for (const line of lines) { - if (line !== '') { - let data = JSON.parse(line); - console.log(data); - if (data.error) { - throw data.error; - } - if (data.detail) { - throw data.detail; - } - - if (data.id) { - modelDownloadStatus[opts.modelName] = { - ...modelDownloadStatus[opts.modelName], - requestId: data.id, - reader, - done: false - }; - console.log(data); - } - - if (data.status) { - if (data.digest) { - let downloadProgress = 0; - if (data.completed) { - downloadProgress = Math.round((data.completed / data.total) * 1000) / 10; - } else { - downloadProgress = 100; - } - modelDownloadStatus[opts.modelName] = { - ...modelDownloadStatus[opts.modelName], - pullProgress: downloadProgress, - digest: data.digest - }; - } else { - toast.success(data.status); - - modelDownloadStatus[opts.modelName] = { - ...modelDownloadStatus[opts.modelName], - done: data.status === 'success' - }; - } - } - } - } - } catch (error) { - console.log(error); - if (typeof error !== 'string') { - error = error.message; - } - opts.callback({ success: false, error, modelName: opts.modelName }); - } - } - - console.log(modelDownloadStatus[opts.modelName]); - - if (modelDownloadStatus[opts.modelName].done) { - opts.callback({ success: true, modelName: opts.modelName }); - } else { - opts.callback({ success: false, error: 'Download canceled', modelName: opts.modelName }); - } + await cancelOllamaRequest(localStorage.token, requestId); + delete $MODEL_DOWNLOAD_POOL[model]; + MODEL_DOWNLOAD_POOL.set({ + ...$MODEL_DOWNLOAD_POOL + }); + await deleteModel(localStorage.token, model); + toast.success(`${model} download has been canceled`); } }; @@ -503,18 +505,6 @@ ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false); liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token); }); - - const cancelModelPullHandler = async (model: string) => { - const { reader, requestId } = modelDownloadStatus[model]; - if (reader) { - await reader.cancel(); - - await cancelOllamaRequest(localStorage.token, requestId); - delete modelDownloadStatus[model]; - await deleteModel(localStorage.token, model); - toast.success(`${model} download has been canceled`); - } - };
@@ -643,9 +633,9 @@ >
- {#if Object.keys(modelDownloadStatus).length > 0} - {#each Object.keys(modelDownloadStatus) as model} - {#if 'pullProgress' in modelDownloadStatus[model]} + {#if Object.keys($MODEL_DOWNLOAD_POOL).length > 0} + {#each Object.keys($MODEL_DOWNLOAD_POOL) as model} + {#if 'pullProgress' in $MODEL_DOWNLOAD_POOL[model]}
{model}
@@ -655,10 +645,10 @@ class="dark:bg-gray-600 bg-gray-500 text-xs font-medium text-gray-100 text-center p-0.5 leading-none rounded-full" style="width: {Math.max( 15, - modelDownloadStatus[model].pullProgress ?? 0 + $MODEL_DOWNLOAD_POOL[model].pullProgress ?? 0 )}%" > - {modelDownloadStatus[model].pullProgress ?? 0}% + {$MODEL_DOWNLOAD_POOL[model].pullProgress ?? 0}%
@@ -689,9 +679,9 @@
- {#if 'digest' in modelDownloadStatus[model]} + {#if 'digest' in $MODEL_DOWNLOAD_POOL[model]}
- {modelDownloadStatus[model].digest} + {$MODEL_DOWNLOAD_POOL[model].digest}
{/if} From 858f5ae1fe6a97f7fc9d4bbe394f5fe0f7fe6af8 Mon Sep 17 00:00:00 2001 From: Axodouble <53979495+Axodouble@users.noreply.github.com> Date: Tue, 23 Apr 2024 17:46:17 +0200 Subject: [PATCH 09/18] Fixed a single translation key for nl-NL Fixed a single translation key. --- src/lib/i18n/locales/nl-NL/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 35f33ad0d..881ef59f8 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -62,7 +62,7 @@ "Click here to check other modelfiles.": "Klik hier om andere modelfiles te controleren.", "Click here to select": "Klik hier om te selecteren", "Click here to select documents.": "Klik hier om documenten te selecteren", - "click here.": "click here.", + "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.", "Close": "Sluiten", "Collection": "Verzameling", From 0ea9e19d793c3b3aecd9532b220932f647ee0f31 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Tue, 23 Apr 2024 19:14:01 +0100 Subject: [PATCH 10/18] feat: add LITELLM_PROXY_PORT to configure internal proxy port --- backend/apps/litellm/main.py | 16 +++++++++------- backend/config.py | 8 ++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/backend/apps/litellm/main.py b/backend/apps/litellm/main.py index 52e0c7002..ad5c2afd5 100644 --- a/backend/apps/litellm/main.py +++ b/backend/apps/litellm/main.py @@ -23,7 +23,12 @@ log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["LITELLM"]) -from config import MODEL_FILTER_ENABLED, MODEL_FILTER_LIST, DATA_DIR +from config import ( + MODEL_FILTER_ENABLED, + MODEL_FILTER_LIST, + DATA_DIR, + LITELLM_PROXY_PORT, +) from litellm.utils import get_llm_provider @@ -90,9 +95,7 @@ async def run_background_process(command): async def start_litellm_background(): log.info("start_litellm_background") # Command to run in the background - command = ( - "litellm --port 14365 --telemetry False --config ./data/litellm/config.yaml" - ) + command = f"litellm --port {LITELLM_PROXY_PORT} --telemetry False --config ./data/litellm/config.yaml" await run_background_process(command) @@ -109,7 +112,6 @@ async def shutdown_litellm_background(): @app.on_event("startup") async def startup_event(): - log.info("startup_event") # TODO: Check config.yaml file and create one asyncio.create_task(start_litellm_background()) @@ -186,7 +188,7 @@ async def get_models(user=Depends(get_current_user)): while not background_process: await asyncio.sleep(0.1) - url = "http://localhost:14365/v1" + url = f"http://localhost:{LITELLM_PROXY_PORT}/v1" r = None try: r = requests.request(method="GET", url=f"{url}/models") @@ -289,7 +291,7 @@ async def delete_model_from_config( async def proxy(path: str, request: Request, user=Depends(get_verified_user)): body = await request.body() - url = "http://localhost:14365" + url = f"http://localhost:{LITELLM_PROXY_PORT}" target_url = f"{url}/{path}" diff --git a/backend/config.py b/backend/config.py index 489e80647..3f67c00d2 100644 --- a/backend/config.py +++ b/backend/config.py @@ -499,3 +499,11 @@ IMAGES_OPENAI_API_KEY = os.getenv("IMAGES_OPENAI_API_KEY", OPENAI_API_KEY) AUDIO_OPENAI_API_BASE_URL = os.getenv("AUDIO_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL) AUDIO_OPENAI_API_KEY = os.getenv("AUDIO_OPENAI_API_KEY", OPENAI_API_KEY) + +#################################### +# LiteLLM +#################################### + +LITELLM_PROXY_PORT = int(os.getenv("LITELLM_PROXY_PORT", "14365")) +if LITELLM_PROXY_PORT < 0 or LITELLM_PROXY_PORT > 65535: + raise ValueError("Invalid port number for LITELLM_PROXY_PORT") From 9e9306fd2b3e2398966c4884f4e0ede370ed5efc Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Tue, 23 Apr 2024 19:19:16 +0100 Subject: [PATCH 11/18] feat: add LITELLM_PROXY_HOST to configure address litellm listens on --- backend/apps/litellm/main.py | 3 ++- backend/config.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/apps/litellm/main.py b/backend/apps/litellm/main.py index ad5c2afd5..b1752f8c6 100644 --- a/backend/apps/litellm/main.py +++ b/backend/apps/litellm/main.py @@ -28,6 +28,7 @@ from config import ( MODEL_FILTER_LIST, DATA_DIR, LITELLM_PROXY_PORT, + LITELLM_PROXY_HOST, ) from litellm.utils import get_llm_provider @@ -95,7 +96,7 @@ async def run_background_process(command): async def start_litellm_background(): log.info("start_litellm_background") # Command to run in the background - command = f"litellm --port {LITELLM_PROXY_PORT} --telemetry False --config ./data/litellm/config.yaml" + command = f"litellm --port {LITELLM_PROXY_PORT} --host {LITELLM_PROXY_HOST} --telemetry False --config ./data/litellm/config.yaml" await run_background_process(command) diff --git a/backend/config.py b/backend/config.py index 3f67c00d2..f421c8aea 100644 --- a/backend/config.py +++ b/backend/config.py @@ -507,3 +507,4 @@ AUDIO_OPENAI_API_KEY = os.getenv("AUDIO_OPENAI_API_KEY", OPENAI_API_KEY) LITELLM_PROXY_PORT = int(os.getenv("LITELLM_PROXY_PORT", "14365")) if LITELLM_PROXY_PORT < 0 or LITELLM_PROXY_PORT > 65535: raise ValueError("Invalid port number for LITELLM_PROXY_PORT") +LITELLM_PROXY_HOST = os.getenv("LITELLM_PROXY_HOST", "127.0.0.1") From 58bead039892136ac16e601d37e0dd87a3a75bf3 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Tue, 23 Apr 2024 19:22:41 +0100 Subject: [PATCH 12/18] fix: DATA_DIR was not respected when loading litellm configs --- backend/apps/litellm/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/apps/litellm/main.py b/backend/apps/litellm/main.py index b1752f8c6..bdf70615c 100644 --- a/backend/apps/litellm/main.py +++ b/backend/apps/litellm/main.py @@ -96,7 +96,7 @@ async def run_background_process(command): async def start_litellm_background(): log.info("start_litellm_background") # Command to run in the background - command = f"litellm --port {LITELLM_PROXY_PORT} --host {LITELLM_PROXY_HOST} --telemetry False --config ./data/litellm/config.yaml" + command = f"litellm --port {LITELLM_PROXY_PORT} --host {LITELLM_PROXY_HOST} --telemetry False --config {LITELLM_CONFIG_DIR}" await run_background_process(command) From 5245d037aca3dd3e885be0bd723767cce69b087d Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Tue, 23 Apr 2024 19:25:43 +0100 Subject: [PATCH 13/18] fix: harden litellm exec command to prevent unintended commands logic was previously to split on space for arguments, but if any of the user controlled variables LITELLM_PROXY_HOST or DATA_DIR had spaces in them, this would not behave correctly. --- backend/apps/litellm/main.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/backend/apps/litellm/main.py b/backend/apps/litellm/main.py index bdf70615c..119e9107e 100644 --- a/backend/apps/litellm/main.py +++ b/backend/apps/litellm/main.py @@ -1,3 +1,5 @@ +import sys + from fastapi import FastAPI, Depends, HTTPException from fastapi.routing import APIRoute from fastapi.middleware.cors import CORSMiddleware @@ -70,7 +72,7 @@ async def run_background_process(command): log.info(f"Executing command: {command}") # Execute the command and create a subprocess process = await asyncio.create_subprocess_exec( - *command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE + *command, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) background_process = process log.info("Subprocess started successfully.") @@ -96,7 +98,17 @@ async def run_background_process(command): async def start_litellm_background(): log.info("start_litellm_background") # Command to run in the background - command = f"litellm --port {LITELLM_PROXY_PORT} --host {LITELLM_PROXY_HOST} --telemetry False --config {LITELLM_CONFIG_DIR}" + command = [ + "litellm", + "--port", + str(LITELLM_PROXY_PORT), + "--host", + LITELLM_PROXY_HOST, + "--telemetry", + "False", + "--config", + LITELLM_CONFIG_DIR, + ] await run_background_process(command) From 589de36af791c54dc0be775eff74c1084c78755f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 23 Apr 2024 15:56:09 -0400 Subject: [PATCH 14/18] fix: #1705 --- src/lib/components/chat/Settings/Audio.svelte | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/lib/components/chat/Settings/Audio.svelte b/src/lib/components/chat/Settings/Audio.svelte index 32a71dc18..71fb7957e 100644 --- a/src/lib/components/chat/Settings/Audio.svelte +++ b/src/lib/components/chat/Settings/Audio.svelte @@ -75,14 +75,16 @@ }; const updateConfigHandler = async () => { - const res = await updateAudioConfig(localStorage.token, { - url: OpenAIUrl, - key: OpenAIKey - }); + if (TTSEngine === 'openai') { + const res = await updateAudioConfig(localStorage.token, { + url: OpenAIUrl, + key: OpenAIKey + }); - if (res) { - OpenAIUrl = res.OPENAI_API_BASE_URL; - OpenAIKey = res.OPENAI_API_KEY; + if (res) { + OpenAIUrl = res.OPENAI_API_BASE_URL; + OpenAIKey = res.OPENAI_API_KEY; + } } }; From e318f921778112aedc92a60c308631ed9238b5c7 Mon Sep 17 00:00:00 2001 From: velaton <98014243+velaton618@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:12:02 +0800 Subject: [PATCH 15/18] Update translation.json Fixed some grammar mistakes --- src/lib/i18n/locales/ru-RU/translation.json | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 3b4c551a9..431d53766 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -2,39 +2,39 @@ "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' или '-1' для не истечение.", "(Beta)": "(бета)", "(e.g. `sh webui.sh --api`)": "(например: `sh webui.sh --api`)", - "(latest)": "(новый)", - "{{modelName}} is thinking...": "{{modelName}} это думает...", + "(latest)": "(последний)", + "{{modelName}} is thinking...": "{{modelName}} думает...", "{{webUIName}} Backend Required": "{{webUIName}} бэкенд требуемый", - "a user": "юзер", - "About": "Относительно", + "a user": "пользователь", + "About": "Об", "Account": "Аккаунт", "Action": "Действие", "Add a model": "Добавьте модель", - "Add a model tag name": "Добавьте тэг модели имя", - "Add a short description about what this modelfile does": "Добавьте краткое описание, что делает этот моделифайл", - "Add a short title for this prompt": "Добавьте краткое название для этого взаимодействия", + "Add a model tag name": "Добавьте имя тэга модели", + "Add a short description about what this modelfile does": "Добавьте краткое описание, что делает этот моделфайл", + "Add a short title for this prompt": "Добавьте краткий заголовок для этого ввода", "Add a tag": "Добавьте тэг", "Add Docs": "Добавьте документы", "Add Files": "Добавьте файлы", - "Add message": "Добавьте message", + "Add message": "Добавьте сообщение", "add tags": "Добавьте тэгы", - "Adjusting these settings will apply changes universally to all users.": "Регулирующий этих настроек приведет к изменениям для все юзеры.", + "Adjusting these settings will apply changes universally to all users.": "Регулирующий этих настроек приведет к изменениям для все пользователей.", "admin": "админ", "Admin Panel": "Панель админ", "Admin Settings": "Настройки админ", "Advanced Parameters": "Расширенные Параметры", "all": "всё", - "All Users": "Всё юзеры", - "Allow": "Дозволять", + "All Users": "Все пользователи", + "Allow": "Разрешить", "Allow Chat Deletion": "Дозволять удаление чат", "alphanumeric characters and hyphens": "буквенно цифровые символы и дефисы", - "Already have an account?": "у вас есть аккаунт уже?", + "Already have an account?": "у вас уже есть аккаунт?", "an assistant": "ассистент", "and": "и", "API Base URL": "Базовый адрес API", "API Key": "Ключ API", "API RPM": "API RPM", - "are allowed - Activate this command by typing": "разрешено - активируйте эту команду набором", + "are allowed - Activate this command by typing": "разрешено - активируйте эту команду вводом", "Are you sure?": "Вы уверены?", "Audio": "Аудио", "Auto-playback response": "Автоматическое воспроизведение ответа", From ed326f02c05cc2f1d1fbe70dc71f593761b19968 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 24 Apr 2024 15:23:09 -0400 Subject: [PATCH 16/18] doc: changelog --- CHANGELOG.md | 13 ++++++++++--- package-lock.json | 4 ++-- package.json | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1eaffc692..f9eb0d966 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.1.121] - 2024-04-22 +## [0.1.121] - 2024-04-24 -### Added +### Fixed -- **🛠️ Improved Embedding Model Support**: You can now use any embedding model `sentence_transformers` supports. +- **🔧 Translation Issues**: Addressed various translation discrepancies. +- **🔒 LiteLLM Security Fix**: Updated LiteLLM version to resolve a security vulnerability. +- **🖥️ HTML Tag Display**: Rectified the issue where the '
' tag wasn't displaying correctly. +- **🔗 WebSocket Connection**: Resolved the failure of WebSocket connection under HTTPS security for ComfyUI server. +- **📜 FileReader Optimization**: Implemented FileReader initialization per image in multi-file drag & drop to ensure reusability. +- **🏷️ Tag Display**: Corrected tag display inconsistencies. +- **📦 Archived Chat Styling**: Fixed styling issues in archived chat. +- **🔖 Safari Copy Button Bug**: Addressed the bug where the copy button failed to copy links in Safari. ## [0.1.120] - 2024-04-20 diff --git a/package-lock.json b/package-lock.json index a310c609d..55b35dd58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.1.120", + "version": "0.1.121", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.1.120", + "version": "0.1.121", "dependencies": { "@sveltejs/adapter-node": "^1.3.1", "async": "^3.2.5", diff --git a/package.json b/package.json index 12afea0f4..12f537c5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.1.120", + "version": "0.1.121", "private": true, "scripts": { "dev": "vite dev --host", @@ -60,4 +60,4 @@ "tippy.js": "^6.3.7", "uuid": "^9.0.1" } -} +} \ No newline at end of file From 08f7c2fd630b2bea11de39bbbab0572c45c25b9b Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 24 Apr 2024 15:24:21 -0400 Subject: [PATCH 17/18] chore: format --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 12f537c5f..777f0f07b 100644 --- a/package.json +++ b/package.json @@ -60,4 +60,4 @@ "tippy.js": "^6.3.7", "uuid": "^9.0.1" } -} \ No newline at end of file +} From 348186c405a983c701cc7397242862919b8a0442 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 24 Apr 2024 15:28:50 -0400 Subject: [PATCH 18/18] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9eb0d966..505ded309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **🔧 Translation Issues**: Addressed various translation discrepancies. - **🔒 LiteLLM Security Fix**: Updated LiteLLM version to resolve a security vulnerability. -- **🖥️ HTML Tag Display**: Rectified the issue where the '
' tag wasn't displaying correctly. +- **🖥️ HTML Tag Display**: Rectified the issue where the '< br >' tag wasn't displaying correctly. - **🔗 WebSocket Connection**: Resolved the failure of WebSocket connection under HTTPS security for ComfyUI server. - **📜 FileReader Optimization**: Implemented FileReader initialization per image in multi-file drag & drop to ensure reusability. - **🏷️ Tag Display**: Corrected tag display inconsistencies.