Browse Source

Merge branch 'dev' into feature/translation-fixes-croatian

Timothy Jaeryang Baek 11 months ago
parent
commit
1c2c244041
48 changed files with 903 additions and 238 deletions
  1. 3 3
      .github/workflows/build-release.yml
  2. 1 1
      .github/workflows/format-backend.yaml
  3. 1 1
      .github/workflows/format-build-frontend.yaml
  4. 1 1
      .github/workflows/integration-test.yml
  5. 34 7
      backend/apps/ollama/main.py
  6. 7 0
      backend/config.py
  7. 19 19
      backend/requirements.txt
  8. 18 18
      pyproject.toml
  9. 42 31
      requirements-dev.lock
  10. 42 31
      requirements.lock
  11. 67 0
      src/lib/apis/ollama/index.ts
  12. 108 85
      src/lib/components/chat/Settings/Connections.svelte
  13. 1 1
      src/lib/i18n/locales/ar-BH/translation.json
  14. 1 1
      src/lib/i18n/locales/bg-BG/translation.json
  15. 1 1
      src/lib/i18n/locales/bn-BD/translation.json
  16. 1 1
      src/lib/i18n/locales/ca-ES/translation.json
  17. 503 0
      src/lib/i18n/locales/ceb-PH/translation.json
  18. 1 1
      src/lib/i18n/locales/de-DE/translation.json
  19. 1 1
      src/lib/i18n/locales/dg-DG/translation.json
  20. 1 1
      src/lib/i18n/locales/en-GB/translation.json
  21. 1 1
      src/lib/i18n/locales/en-US/translation.json
  22. 1 1
      src/lib/i18n/locales/es-ES/translation.json
  23. 1 1
      src/lib/i18n/locales/fa-IR/translation.json
  24. 1 1
      src/lib/i18n/locales/fi-FI/translation.json
  25. 1 1
      src/lib/i18n/locales/fr-CA/translation.json
  26. 1 1
      src/lib/i18n/locales/fr-FR/translation.json
  27. 1 1
      src/lib/i18n/locales/he-IL/translation.json
  28. 1 1
      src/lib/i18n/locales/hi-IN/translation.json
  29. 1 1
      src/lib/i18n/locales/hr-HR/translation.json
  30. 1 1
      src/lib/i18n/locales/it-IT/translation.json
  31. 1 1
      src/lib/i18n/locales/ja-JP/translation.json
  32. 1 1
      src/lib/i18n/locales/ka-GE/translation.json
  33. 1 1
      src/lib/i18n/locales/ko-KR/translation.json
  34. 4 0
      src/lib/i18n/locales/languages.json
  35. 1 1
      src/lib/i18n/locales/nl-NL/translation.json
  36. 1 1
      src/lib/i18n/locales/pa-IN/translation.json
  37. 1 1
      src/lib/i18n/locales/pl-PL/translation.json
  38. 1 1
      src/lib/i18n/locales/pt-BR/translation.json
  39. 1 1
      src/lib/i18n/locales/pt-PT/translation.json
  40. 1 1
      src/lib/i18n/locales/ru-RU/translation.json
  41. 1 1
      src/lib/i18n/locales/sr-RS/translation.json
  42. 1 1
      src/lib/i18n/locales/sv-SE/translation.json
  43. 1 1
      src/lib/i18n/locales/tr-TR/translation.json
  44. 1 1
      src/lib/i18n/locales/uk-UA/translation.json
  45. 1 1
      src/lib/i18n/locales/vi-VN/translation.json
  46. 1 1
      src/lib/i18n/locales/zh-CN/translation.json
  47. 1 1
      src/lib/i18n/locales/zh-TW/translation.json
  48. 20 8
      src/routes/(app)/+layout.svelte

+ 3 - 3
.github/workflows/build-release.yml

@@ -11,7 +11,7 @@ jobs:
 
 
     steps:
     steps:
     - name: Checkout repository
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v4
 
 
     - name: Check for changes in package.json
     - name: Check for changes in package.json
       run: |
       run: |
@@ -36,7 +36,7 @@ jobs:
         echo "::set-output name=content::$CHANGELOG_ESCAPED"
         echo "::set-output name=content::$CHANGELOG_ESCAPED"
 
 
     - name: Create GitHub release
     - name: Create GitHub release
-      uses: actions/github-script@v5
+      uses: actions/github-script@v7
       with:
       with:
         github-token: ${{ secrets.GITHUB_TOKEN }}
         github-token: ${{ secrets.GITHUB_TOKEN }}
         script: |
         script: |
@@ -51,7 +51,7 @@ jobs:
           console.log(`Created release ${release.data.html_url}`)
           console.log(`Created release ${release.data.html_url}`)
 
 
     - name: Upload package to GitHub release
     - name: Upload package to GitHub release
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: package
         name: package
         path: .
         path: .

+ 1 - 1
.github/workflows/format-backend.yaml

@@ -23,7 +23,7 @@ jobs:
       - uses: actions/checkout@v4
       - uses: actions/checkout@v4
 
 
       - name: Set up Python
       - name: Set up Python
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v4
         with:
         with:
           python-version: ${{ matrix.python-version }}
           python-version: ${{ matrix.python-version }}
 
 

+ 1 - 1
.github/workflows/format-build-frontend.yaml

@@ -19,7 +19,7 @@ jobs:
         uses: actions/checkout@v4
         uses: actions/checkout@v4
 
 
       - name: Setup Node.js
       - name: Setup Node.js
-        uses: actions/setup-node@v3
+        uses: actions/setup-node@v4
         with:
         with:
           node-version: '20' # Or specify any other version you want to use
           node-version: '20' # Or specify any other version you want to use
 
 

+ 1 - 1
.github/workflows/integration-test.yml

@@ -99,7 +99,7 @@ jobs:
         uses: actions/checkout@v4
         uses: actions/checkout@v4
 
 
       - name: Set up Python
       - name: Set up Python
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v5
         with:
         with:
           python-version: ${{ matrix.python-version }}
           python-version: ${{ matrix.python-version }}
 
 

+ 34 - 7
backend/apps/ollama/main.py

@@ -43,6 +43,7 @@ from utils.utils import (
 from config import (
 from config import (
     SRC_LOG_LEVELS,
     SRC_LOG_LEVELS,
     OLLAMA_BASE_URLS,
     OLLAMA_BASE_URLS,
+    ENABLE_OLLAMA_API,
     ENABLE_MODEL_FILTER,
     ENABLE_MODEL_FILTER,
     MODEL_FILTER_LIST,
     MODEL_FILTER_LIST,
     UPLOAD_DIR,
     UPLOAD_DIR,
@@ -67,6 +68,8 @@ app.state.config = AppConfig()
 app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
 app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
 app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
 app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
 
 
+
+app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API
 app.state.config.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS
 app.state.config.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS
 app.state.MODELS = {}
 app.state.MODELS = {}
 
 
@@ -96,6 +99,21 @@ async def get_status():
     return {"status": True}
     return {"status": True}
 
 
 
 
+@app.get("/config")
+async def get_config(user=Depends(get_admin_user)):
+    return {"ENABLE_OLLAMA_API": app.state.config.ENABLE_OLLAMA_API}
+
+
+class OllamaConfigForm(BaseModel):
+    enable_ollama_api: Optional[bool] = None
+
+
+@app.post("/config/update")
+async def update_config(form_data: OllamaConfigForm, user=Depends(get_admin_user)):
+    app.state.config.ENABLE_OLLAMA_API = form_data.enable_ollama_api
+    return {"ENABLE_OLLAMA_API": app.state.config.ENABLE_OLLAMA_API}
+
+
 @app.get("/urls")
 @app.get("/urls")
 async def get_ollama_api_urls(user=Depends(get_admin_user)):
 async def get_ollama_api_urls(user=Depends(get_admin_user)):
     return {"OLLAMA_BASE_URLS": app.state.config.OLLAMA_BASE_URLS}
     return {"OLLAMA_BASE_URLS": app.state.config.OLLAMA_BASE_URLS}
@@ -156,14 +174,23 @@ def merge_models_lists(model_lists):
 
 
 async def get_all_models():
 async def get_all_models():
     log.info("get_all_models()")
     log.info("get_all_models()")
-    tasks = [fetch_url(f"{url}/api/tags") for url in app.state.config.OLLAMA_BASE_URLS]
-    responses = await asyncio.gather(*tasks)
 
 
-    models = {
-        "models": merge_models_lists(
-            map(lambda response: response["models"] if response else None, responses)
-        )
-    }
+    if app.state.config.ENABLE_OLLAMA_API:
+        tasks = [
+            fetch_url(f"{url}/api/tags") for url in app.state.config.OLLAMA_BASE_URLS
+        ]
+        responses = await asyncio.gather(*tasks)
+
+        models = {
+            "models": merge_models_lists(
+                map(
+                    lambda response: response["models"] if response else None, responses
+                )
+            )
+        }
+
+    else:
+        models = {"models": []}
 
 
     app.state.MODELS = {model["model"]: model for model in models["models"]}
     app.state.MODELS = {model["model"]: model for model in models["models"]}
 
 

+ 7 - 0
backend/config.py

@@ -384,6 +384,13 @@ if not os.path.exists(LITELLM_CONFIG_PATH):
 # OLLAMA_BASE_URL
 # OLLAMA_BASE_URL
 ####################################
 ####################################
 
 
+
+ENABLE_OLLAMA_API = PersistentConfig(
+    "ENABLE_OLLAMA_API",
+    "ollama.enable",
+    os.environ.get("ENABLE_OLLAMA_API", "True").lower() == "true",
+)
+
 OLLAMA_API_BASE_URL = os.environ.get(
 OLLAMA_API_BASE_URL = os.environ.get(
     "OLLAMA_API_BASE_URL", "http://localhost:11434/api"
     "OLLAMA_API_BASE_URL", "http://localhost:11434/api"
 )
 )

+ 19 - 19
backend/requirements.txt

@@ -1,42 +1,42 @@
-fastapi==0.109.2
+fastapi==0.111.0
 uvicorn[standard]==0.22.0
 uvicorn[standard]==0.22.0
 pydantic==2.7.1
 pydantic==2.7.1
 python-multipart==0.0.9
 python-multipart==0.0.9
 
 
 Flask==3.0.3
 Flask==3.0.3
-Flask-Cors==4.0.0
+Flask-Cors==4.0.1
 
 
 python-socketio==5.11.2
 python-socketio==5.11.2
 python-jose==3.3.0
 python-jose==3.3.0
 passlib[bcrypt]==1.7.4
 passlib[bcrypt]==1.7.4
 
 
-requests==2.31.0
+requests==2.32.2
 aiohttp==3.9.5
 aiohttp==3.9.5
-peewee==3.17.3
+peewee==3.17.5
 peewee-migrate==1.12.2
 peewee-migrate==1.12.2
 psycopg2-binary==2.9.9
 psycopg2-binary==2.9.9
-PyMySQL==1.1.0
-bcrypt==4.1.2
+PyMySQL==1.1.1
+bcrypt==4.1.3
 
 
-litellm[proxy]==1.35.28
+litellm[proxy]==1.37.20
 
 
-boto3==1.34.95
+boto3==1.34.110
 
 
 argon2-cffi==23.1.0
 argon2-cffi==23.1.0
 APScheduler==3.10.4
 APScheduler==3.10.4
-google-generativeai==0.5.2
+google-generativeai==0.5.4
 
 
-langchain==0.1.16
-langchain-community==0.0.34
-langchain-chroma==0.1.0
+langchain==0.2.0
+langchain-community==0.2.0
+langchain-chroma==0.1.1
 
 
 fake-useragent==1.5.1
 fake-useragent==1.5.1
-chromadb==0.4.24
+chromadb==0.5.0
 sentence-transformers==2.7.0
 sentence-transformers==2.7.0
 pypdf==4.2.0
 pypdf==4.2.0
 docx2txt==0.8
 docx2txt==0.8
 python-pptx==0.6.23
 python-pptx==0.6.23
-unstructured==0.11.8
+unstructured==0.14.0
 Markdown==3.6
 Markdown==3.6
 pypandoc==1.13
 pypandoc==1.13
 pandas==2.2.2
 pandas==2.2.2
@@ -46,16 +46,16 @@ xlrd==2.0.1
 validators==0.28.1
 validators==0.28.1
 
 
 opencv-python-headless==4.9.0.80
 opencv-python-headless==4.9.0.80
-rapidocr-onnxruntime==1.2.3
+rapidocr-onnxruntime==1.3.22
 
 
-fpdf2==2.7.8
+fpdf2==2.7.9
 rank-bm25==0.2.2
 rank-bm25==0.2.2
 
 
-faster-whisper==1.0.1
+faster-whisper==1.0.2
 
 
 PyJWT[crypto]==2.8.0
 PyJWT[crypto]==2.8.0
 
 
 black==24.4.2
 black==24.4.2
-langfuse==2.27.3
+langfuse==2.33.0
 youtube-transcript-api==0.6.2
 youtube-transcript-api==0.6.2
-pytube
+pytube==15.0.0

+ 18 - 18
pyproject.toml

@@ -6,44 +6,44 @@ authors = [
 ]
 ]
 license = { file = "LICENSE" }
 license = { file = "LICENSE" }
 dependencies = [
 dependencies = [
-    "fastapi==0.109.2",
+    "fastapi==0.111.0",
     "uvicorn[standard]==0.22.0",
     "uvicorn[standard]==0.22.0",
     "pydantic==2.7.1",
     "pydantic==2.7.1",
     "python-multipart==0.0.9",
     "python-multipart==0.0.9",
 
 
     "Flask==3.0.3",
     "Flask==3.0.3",
-    "Flask-Cors==4.0.0",
+    "Flask-Cors==4.0.1",
 
 
     "python-socketio==5.11.2",
     "python-socketio==5.11.2",
     "python-jose==3.3.0",
     "python-jose==3.3.0",
     "passlib[bcrypt]==1.7.4",
     "passlib[bcrypt]==1.7.4",
 
 
-    "requests==2.31.0",
+    "requests==2.32.2",
     "aiohttp==3.9.5",
     "aiohttp==3.9.5",
-    "peewee==3.17.3",
+    "peewee==3.17.5",
     "peewee-migrate==1.12.2",
     "peewee-migrate==1.12.2",
     "psycopg2-binary==2.9.9",
     "psycopg2-binary==2.9.9",
     "PyMySQL==1.1.0",
     "PyMySQL==1.1.0",
-    "bcrypt==4.1.2",
+    "bcrypt==4.1.3",
 
 
-    "litellm[proxy]==1.35.28",
+    "litellm[proxy]==1.37.20",
 
 
-    "boto3==1.34.95",
+    "boto3==1.34.110",
 
 
     "argon2-cffi==23.1.0",
     "argon2-cffi==23.1.0",
     "APScheduler==3.10.4",
     "APScheduler==3.10.4",
-    "google-generativeai==0.5.2",
+    "google-generativeai==0.5.4",
 
 
-    "langchain==0.1.16",
-    "langchain-community==0.0.34",
-    "langchain-chroma==0.1.0",
+    "langchain==0.2.0",
+    "langchain-community==0.2.0",
+    "langchain-chroma==0.1.1",
 
 
     "fake-useragent==1.5.1",
     "fake-useragent==1.5.1",
-    "chromadb==0.4.24",
+    "chromadb==0.5.0",
     "sentence-transformers==2.7.0",
     "sentence-transformers==2.7.0",
     "pypdf==4.2.0",
     "pypdf==4.2.0",
     "docx2txt==0.8",
     "docx2txt==0.8",
-    "unstructured==0.11.8",
+    "unstructured==0.14.0",
     "Markdown==3.6",
     "Markdown==3.6",
     "pypandoc==1.13",
     "pypandoc==1.13",
     "pandas==2.2.2",
     "pandas==2.2.2",
@@ -53,19 +53,19 @@ dependencies = [
     "validators==0.28.1",
     "validators==0.28.1",
 
 
     "opencv-python-headless==4.9.0.80",
     "opencv-python-headless==4.9.0.80",
-    "rapidocr-onnxruntime==1.2.3",
+    "rapidocr-onnxruntime==1.3.22",
 
 
-    "fpdf2==2.7.8",
+    "fpdf2==2.7.9",
     "rank-bm25==0.2.2",
     "rank-bm25==0.2.2",
 
 
-    "faster-whisper==1.0.1",
+    "faster-whisper==1.0.2",
 
 
     "PyJWT[crypto]==2.8.0",
     "PyJWT[crypto]==2.8.0",
 
 
     "black==24.4.2",
     "black==24.4.2",
-    "langfuse==2.27.3",
+    "langfuse==2.33.0",
     "youtube-transcript-api==0.6.2",
     "youtube-transcript-api==0.6.2",
-    "pytube",
+    "pytube==15.0.0",
 ]
 ]
 readme = "README.md"
 readme = "README.md"
 requires-python = ">= 3.11, < 3.12.0a1"
 requires-python = ">= 3.11, < 3.12.0a1"

+ 42 - 31
requirements-dev.lock

@@ -41,7 +41,7 @@ backoff==2.2.1
     # via litellm
     # via litellm
     # via posthog
     # via posthog
     # via unstructured
     # via unstructured
-bcrypt==4.1.2
+bcrypt==4.1.3
     # via chromadb
     # via chromadb
     # via open-webui
     # via open-webui
     # via passlib
     # via passlib
@@ -53,9 +53,9 @@ black==24.4.2
     # via open-webui
     # via open-webui
 blinker==1.8.2
 blinker==1.8.2
     # via flask
     # via flask
-boto3==1.34.95
+boto3==1.34.110
     # via open-webui
     # via open-webui
-botocore==1.34.103
+botocore==1.34.110
     # via boto3
     # via boto3
     # via s3transfer
     # via s3transfer
 build==1.2.1
 build==1.2.1
@@ -66,7 +66,6 @@ certifi==2024.2.2
     # via httpcore
     # via httpcore
     # via httpx
     # via httpx
     # via kubernetes
     # via kubernetes
-    # via pulsar-client
     # via requests
     # via requests
     # via unstructured-client
     # via unstructured-client
 cffi==1.16.0
 cffi==1.16.0
@@ -79,7 +78,7 @@ charset-normalizer==3.3.2
     # via unstructured-client
     # via unstructured-client
 chroma-hnswlib==0.7.3
 chroma-hnswlib==0.7.3
     # via chromadb
     # via chromadb
-chromadb==0.4.24
+chromadb==0.5.0
     # via langchain-chroma
     # via langchain-chroma
     # via open-webui
     # via open-webui
 click==8.1.7
 click==8.1.7
@@ -119,6 +118,7 @@ docx2txt==0.8
 ecdsa==0.19.0
 ecdsa==0.19.0
     # via python-jose
     # via python-jose
 email-validator==2.1.1
 email-validator==2.1.1
+    # via fastapi
     # via pydantic
     # via pydantic
 emoji==2.11.1
 emoji==2.11.1
     # via unstructured
     # via unstructured
@@ -126,15 +126,17 @@ et-xmlfile==1.1.0
     # via openpyxl
     # via openpyxl
 fake-useragent==1.5.1
 fake-useragent==1.5.1
     # via open-webui
     # via open-webui
-fastapi==0.109.2
+fastapi==0.111.0
     # via chromadb
     # via chromadb
     # via fastapi-sso
     # via fastapi-sso
     # via langchain-chroma
     # via langchain-chroma
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
+fastapi-cli==0.0.4
+    # via fastapi
 fastapi-sso==0.10.0
 fastapi-sso==0.10.0
     # via litellm
     # via litellm
-faster-whisper==1.0.1
+faster-whisper==1.0.2
     # via open-webui
     # via open-webui
 filelock==3.14.0
 filelock==3.14.0
     # via huggingface-hub
     # via huggingface-hub
@@ -145,13 +147,13 @@ filetype==1.2.0
 flask==3.0.3
 flask==3.0.3
     # via flask-cors
     # via flask-cors
     # via open-webui
     # via open-webui
-flask-cors==4.0.0
+flask-cors==4.0.1
     # via open-webui
     # via open-webui
 flatbuffers==24.3.25
 flatbuffers==24.3.25
     # via onnxruntime
     # via onnxruntime
 fonttools==4.51.0
 fonttools==4.51.0
     # via fpdf2
     # via fpdf2
-fpdf2==2.7.8
+fpdf2==2.7.9
     # via open-webui
     # via open-webui
 frozenlist==1.4.1
 frozenlist==1.4.1
     # via aiohttp
     # via aiohttp
@@ -159,7 +161,7 @@ frozenlist==1.4.1
 fsspec==2024.3.1
 fsspec==2024.3.1
     # via huggingface-hub
     # via huggingface-hub
     # via torch
     # via torch
-google-ai-generativelanguage==0.6.2
+google-ai-generativelanguage==0.6.4
     # via google-generativeai
     # via google-generativeai
 google-api-core==2.19.0
 google-api-core==2.19.0
     # via google-ai-generativelanguage
     # via google-ai-generativelanguage
@@ -176,7 +178,7 @@ google-auth==2.29.0
     # via kubernetes
     # via kubernetes
 google-auth-httplib2==0.2.0
 google-auth-httplib2==0.2.0
     # via google-api-python-client
     # via google-api-python-client
-google-generativeai==0.5.2
+google-generativeai==0.5.4
     # via open-webui
     # via open-webui
 googleapis-common-protos==1.63.0
 googleapis-common-protos==1.63.0
     # via google-api-core
     # via google-api-core
@@ -189,7 +191,7 @@ grpcio==1.63.0
     # via opentelemetry-exporter-otlp-proto-grpc
     # via opentelemetry-exporter-otlp-proto-grpc
 grpcio-status==1.62.2
 grpcio-status==1.62.2
     # via google-api-core
     # via google-api-core
-gunicorn==21.2.0
+gunicorn==22.0.0
     # via litellm
     # via litellm
 h11==0.14.0
 h11==0.14.0
     # via httpcore
     # via httpcore
@@ -203,6 +205,7 @@ httplib2==0.22.0
 httptools==0.6.1
 httptools==0.6.1
     # via uvicorn
     # via uvicorn
 httpx==0.27.0
 httpx==0.27.0
+    # via fastapi
     # via fastapi-sso
     # via fastapi-sso
     # via langfuse
     # via langfuse
     # via openai
     # via openai
@@ -229,6 +232,7 @@ importlib-resources==6.4.0
 itsdangerous==2.2.0
 itsdangerous==2.2.0
     # via flask
     # via flask
 jinja2==3.1.4
 jinja2==3.1.4
+    # via fastapi
     # via flask
     # via flask
     # via litellm
     # via litellm
     # via torch
     # via torch
@@ -239,7 +243,6 @@ joblib==1.4.2
     # via nltk
     # via nltk
     # via scikit-learn
     # via scikit-learn
 jsonpatch==1.33
 jsonpatch==1.33
-    # via langchain
     # via langchain-core
     # via langchain-core
 jsonpath-python==1.0.6
 jsonpath-python==1.0.6
     # via unstructured-client
     # via unstructured-client
@@ -247,29 +250,30 @@ jsonpointer==2.4
     # via jsonpatch
     # via jsonpatch
 kubernetes==29.0.0
 kubernetes==29.0.0
     # via chromadb
     # via chromadb
-langchain==0.1.16
+langchain==0.2.0
+    # via langchain-community
     # via open-webui
     # via open-webui
-langchain-chroma==0.1.0
+langchain-chroma==0.1.1
     # via open-webui
     # via open-webui
-langchain-community==0.0.34
-    # via langchain
+langchain-community==0.2.0
     # via open-webui
     # via open-webui
-langchain-core==0.1.52
+langchain-core==0.2.1
     # via langchain
     # via langchain
     # via langchain-chroma
     # via langchain-chroma
     # via langchain-community
     # via langchain-community
     # via langchain-text-splitters
     # via langchain-text-splitters
-langchain-text-splitters==0.0.1
+langchain-text-splitters==0.2.0
     # via langchain
     # via langchain
 langdetect==1.0.9
 langdetect==1.0.9
     # via unstructured
     # via unstructured
-langfuse==2.27.3
+langfuse==2.33.0
     # via open-webui
     # via open-webui
 langsmith==0.1.57
 langsmith==0.1.57
     # via langchain
     # via langchain
     # via langchain-community
     # via langchain-community
     # via langchain-core
     # via langchain-core
-litellm==1.35.28
+litellm==1.37.20
+    # via litellm
     # via open-webui
     # via open-webui
 lxml==5.2.2
 lxml==5.2.2
     # via unstructured
     # via unstructured
@@ -372,6 +376,7 @@ ordered-set==4.1.0
     # via deepdiff
     # via deepdiff
 orjson==3.10.3
 orjson==3.10.3
     # via chromadb
     # via chromadb
+    # via fastapi
     # via langsmith
     # via langsmith
     # via litellm
     # via litellm
 overrides==7.7.0
 overrides==7.7.0
@@ -391,9 +396,10 @@ pandas==2.2.2
     # via open-webui
     # via open-webui
 passlib==1.7.4
 passlib==1.7.4
     # via open-webui
     # via open-webui
+    # via passlib
 pathspec==0.12.1
 pathspec==0.12.1
     # via black
     # via black
-peewee==3.17.3
+peewee==3.17.5
     # via open-webui
     # via open-webui
     # via peewee-migrate
     # via peewee-migrate
 peewee-migrate==1.12.2
 peewee-migrate==1.12.2
@@ -420,8 +426,6 @@ protobuf==4.25.3
     # via proto-plus
     # via proto-plus
 psycopg2-binary==2.9.9
 psycopg2-binary==2.9.9
     # via open-webui
     # via open-webui
-pulsar-client==3.5.0
-    # via chromadb
 pyasn1==0.6.0
 pyasn1==0.6.0
     # via pyasn1-modules
     # via pyasn1-modules
     # via python-jose
     # via python-jose
@@ -450,6 +454,7 @@ pygments==2.18.0
 pyjwt==2.8.0
 pyjwt==2.8.0
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
+    # via pyjwt
 pymysql==1.1.0
 pymysql==1.1.0
     # via open-webui
     # via open-webui
 pypandoc==1.13
 pypandoc==1.13
@@ -481,6 +486,7 @@ python-jose==3.3.0
 python-magic==0.4.27
 python-magic==0.4.27
     # via unstructured
     # via unstructured
 python-multipart==0.0.9
 python-multipart==0.0.9
+    # via fastapi
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
 python-socketio==5.11.2
 python-socketio==5.11.2
@@ -508,7 +514,7 @@ rank-bm25==0.2.2
     # via open-webui
     # via open-webui
 rapidfuzz==3.9.0
 rapidfuzz==3.9.0
     # via unstructured
     # via unstructured
-rapidocr-onnxruntime==1.2.3
+rapidocr-onnxruntime==1.3.22
     # via open-webui
     # via open-webui
 redis==5.0.4
 redis==5.0.4
     # via rq
     # via rq
@@ -516,7 +522,7 @@ regex==2024.5.10
     # via nltk
     # via nltk
     # via tiktoken
     # via tiktoken
     # via transformers
     # via transformers
-requests==2.31.0
+requests==2.32.2
     # via chromadb
     # via chromadb
     # via google-api-core
     # via google-api-core
     # via huggingface-hub
     # via huggingface-hub
@@ -553,9 +559,6 @@ scipy==1.13.0
     # via sentence-transformers
     # via sentence-transformers
 sentence-transformers==2.7.0
 sentence-transformers==2.7.0
     # via open-webui
     # via open-webui
-setuptools==69.5.1
-    # via ctranslate2
-    # via opentelemetry-instrumentation
 shapely==2.0.4
 shapely==2.0.4
     # via rapidocr-onnxruntime
     # via rapidocr-onnxruntime
 shellingham==1.5.4
 shellingham==1.5.4
@@ -580,7 +583,7 @@ soupsieve==2.5
 sqlalchemy==2.0.30
 sqlalchemy==2.0.30
     # via langchain
     # via langchain
     # via langchain-community
     # via langchain-community
-starlette==0.36.3
+starlette==0.37.2
     # via fastapi
     # via fastapi
 sympy==1.12
 sympy==1.12
     # via onnxruntime
     # via onnxruntime
@@ -615,6 +618,7 @@ transformers==4.39.3
     # via sentence-transformers
     # via sentence-transformers
 typer==0.12.3
 typer==0.12.3
     # via chromadb
     # via chromadb
+    # via fastapi-cli
 typing-extensions==4.11.0
 typing-extensions==4.11.0
     # via chromadb
     # via chromadb
     # via fastapi
     # via fastapi
@@ -637,7 +641,9 @@ tzdata==2024.1
     # via pandas
     # via pandas
 tzlocal==5.2
 tzlocal==5.2
     # via apscheduler
     # via apscheduler
-unstructured==0.11.8
+ujson==5.10.0
+    # via fastapi
+unstructured==0.14.0
     # via open-webui
     # via open-webui
 unstructured-client==0.22.0
 unstructured-client==0.22.0
     # via unstructured
     # via unstructured
@@ -650,8 +656,10 @@ urllib3==2.2.1
     # via unstructured-client
     # via unstructured-client
 uvicorn==0.22.0
 uvicorn==0.22.0
     # via chromadb
     # via chromadb
+    # via fastapi
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
+    # via uvicorn
 uvloop==0.19.0
 uvloop==0.19.0
     # via uvicorn
     # via uvicorn
 validators==0.28.1
 validators==0.28.1
@@ -679,3 +687,6 @@ youtube-transcript-api==0.6.2
     # via open-webui
     # via open-webui
 zipp==3.18.1
 zipp==3.18.1
     # via importlib-metadata
     # via importlib-metadata
+setuptools==69.5.1
+    # via ctranslate2
+    # via opentelemetry-instrumentation

+ 42 - 31
requirements.lock

@@ -41,7 +41,7 @@ backoff==2.2.1
     # via litellm
     # via litellm
     # via posthog
     # via posthog
     # via unstructured
     # via unstructured
-bcrypt==4.1.2
+bcrypt==4.1.3
     # via chromadb
     # via chromadb
     # via open-webui
     # via open-webui
     # via passlib
     # via passlib
@@ -53,9 +53,9 @@ black==24.4.2
     # via open-webui
     # via open-webui
 blinker==1.8.2
 blinker==1.8.2
     # via flask
     # via flask
-boto3==1.34.95
+boto3==1.34.110
     # via open-webui
     # via open-webui
-botocore==1.34.103
+botocore==1.34.110
     # via boto3
     # via boto3
     # via s3transfer
     # via s3transfer
 build==1.2.1
 build==1.2.1
@@ -66,7 +66,6 @@ certifi==2024.2.2
     # via httpcore
     # via httpcore
     # via httpx
     # via httpx
     # via kubernetes
     # via kubernetes
-    # via pulsar-client
     # via requests
     # via requests
     # via unstructured-client
     # via unstructured-client
 cffi==1.16.0
 cffi==1.16.0
@@ -79,7 +78,7 @@ charset-normalizer==3.3.2
     # via unstructured-client
     # via unstructured-client
 chroma-hnswlib==0.7.3
 chroma-hnswlib==0.7.3
     # via chromadb
     # via chromadb
-chromadb==0.4.24
+chromadb==0.5.0
     # via langchain-chroma
     # via langchain-chroma
     # via open-webui
     # via open-webui
 click==8.1.7
 click==8.1.7
@@ -119,6 +118,7 @@ docx2txt==0.8
 ecdsa==0.19.0
 ecdsa==0.19.0
     # via python-jose
     # via python-jose
 email-validator==2.1.1
 email-validator==2.1.1
+    # via fastapi
     # via pydantic
     # via pydantic
 emoji==2.11.1
 emoji==2.11.1
     # via unstructured
     # via unstructured
@@ -126,15 +126,17 @@ et-xmlfile==1.1.0
     # via openpyxl
     # via openpyxl
 fake-useragent==1.5.1
 fake-useragent==1.5.1
     # via open-webui
     # via open-webui
-fastapi==0.109.2
+fastapi==0.111.0
     # via chromadb
     # via chromadb
     # via fastapi-sso
     # via fastapi-sso
     # via langchain-chroma
     # via langchain-chroma
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
+fastapi-cli==0.0.4
+    # via fastapi
 fastapi-sso==0.10.0
 fastapi-sso==0.10.0
     # via litellm
     # via litellm
-faster-whisper==1.0.1
+faster-whisper==1.0.2
     # via open-webui
     # via open-webui
 filelock==3.14.0
 filelock==3.14.0
     # via huggingface-hub
     # via huggingface-hub
@@ -145,13 +147,13 @@ filetype==1.2.0
 flask==3.0.3
 flask==3.0.3
     # via flask-cors
     # via flask-cors
     # via open-webui
     # via open-webui
-flask-cors==4.0.0
+flask-cors==4.0.1
     # via open-webui
     # via open-webui
 flatbuffers==24.3.25
 flatbuffers==24.3.25
     # via onnxruntime
     # via onnxruntime
 fonttools==4.51.0
 fonttools==4.51.0
     # via fpdf2
     # via fpdf2
-fpdf2==2.7.8
+fpdf2==2.7.9
     # via open-webui
     # via open-webui
 frozenlist==1.4.1
 frozenlist==1.4.1
     # via aiohttp
     # via aiohttp
@@ -159,7 +161,7 @@ frozenlist==1.4.1
 fsspec==2024.3.1
 fsspec==2024.3.1
     # via huggingface-hub
     # via huggingface-hub
     # via torch
     # via torch
-google-ai-generativelanguage==0.6.2
+google-ai-generativelanguage==0.6.4
     # via google-generativeai
     # via google-generativeai
 google-api-core==2.19.0
 google-api-core==2.19.0
     # via google-ai-generativelanguage
     # via google-ai-generativelanguage
@@ -176,7 +178,7 @@ google-auth==2.29.0
     # via kubernetes
     # via kubernetes
 google-auth-httplib2==0.2.0
 google-auth-httplib2==0.2.0
     # via google-api-python-client
     # via google-api-python-client
-google-generativeai==0.5.2
+google-generativeai==0.5.4
     # via open-webui
     # via open-webui
 googleapis-common-protos==1.63.0
 googleapis-common-protos==1.63.0
     # via google-api-core
     # via google-api-core
@@ -189,7 +191,7 @@ grpcio==1.63.0
     # via opentelemetry-exporter-otlp-proto-grpc
     # via opentelemetry-exporter-otlp-proto-grpc
 grpcio-status==1.62.2
 grpcio-status==1.62.2
     # via google-api-core
     # via google-api-core
-gunicorn==21.2.0
+gunicorn==22.0.0
     # via litellm
     # via litellm
 h11==0.14.0
 h11==0.14.0
     # via httpcore
     # via httpcore
@@ -203,6 +205,7 @@ httplib2==0.22.0
 httptools==0.6.1
 httptools==0.6.1
     # via uvicorn
     # via uvicorn
 httpx==0.27.0
 httpx==0.27.0
+    # via fastapi
     # via fastapi-sso
     # via fastapi-sso
     # via langfuse
     # via langfuse
     # via openai
     # via openai
@@ -229,6 +232,7 @@ importlib-resources==6.4.0
 itsdangerous==2.2.0
 itsdangerous==2.2.0
     # via flask
     # via flask
 jinja2==3.1.4
 jinja2==3.1.4
+    # via fastapi
     # via flask
     # via flask
     # via litellm
     # via litellm
     # via torch
     # via torch
@@ -239,7 +243,6 @@ joblib==1.4.2
     # via nltk
     # via nltk
     # via scikit-learn
     # via scikit-learn
 jsonpatch==1.33
 jsonpatch==1.33
-    # via langchain
     # via langchain-core
     # via langchain-core
 jsonpath-python==1.0.6
 jsonpath-python==1.0.6
     # via unstructured-client
     # via unstructured-client
@@ -247,29 +250,30 @@ jsonpointer==2.4
     # via jsonpatch
     # via jsonpatch
 kubernetes==29.0.0
 kubernetes==29.0.0
     # via chromadb
     # via chromadb
-langchain==0.1.16
+langchain==0.2.0
+    # via langchain-community
     # via open-webui
     # via open-webui
-langchain-chroma==0.1.0
+langchain-chroma==0.1.1
     # via open-webui
     # via open-webui
-langchain-community==0.0.34
-    # via langchain
+langchain-community==0.2.0
     # via open-webui
     # via open-webui
-langchain-core==0.1.52
+langchain-core==0.2.1
     # via langchain
     # via langchain
     # via langchain-chroma
     # via langchain-chroma
     # via langchain-community
     # via langchain-community
     # via langchain-text-splitters
     # via langchain-text-splitters
-langchain-text-splitters==0.0.1
+langchain-text-splitters==0.2.0
     # via langchain
     # via langchain
 langdetect==1.0.9
 langdetect==1.0.9
     # via unstructured
     # via unstructured
-langfuse==2.27.3
+langfuse==2.33.0
     # via open-webui
     # via open-webui
 langsmith==0.1.57
 langsmith==0.1.57
     # via langchain
     # via langchain
     # via langchain-community
     # via langchain-community
     # via langchain-core
     # via langchain-core
-litellm==1.35.28
+litellm==1.37.20
+    # via litellm
     # via open-webui
     # via open-webui
 lxml==5.2.2
 lxml==5.2.2
     # via unstructured
     # via unstructured
@@ -372,6 +376,7 @@ ordered-set==4.1.0
     # via deepdiff
     # via deepdiff
 orjson==3.10.3
 orjson==3.10.3
     # via chromadb
     # via chromadb
+    # via fastapi
     # via langsmith
     # via langsmith
     # via litellm
     # via litellm
 overrides==7.7.0
 overrides==7.7.0
@@ -391,9 +396,10 @@ pandas==2.2.2
     # via open-webui
     # via open-webui
 passlib==1.7.4
 passlib==1.7.4
     # via open-webui
     # via open-webui
+    # via passlib
 pathspec==0.12.1
 pathspec==0.12.1
     # via black
     # via black
-peewee==3.17.3
+peewee==3.17.5
     # via open-webui
     # via open-webui
     # via peewee-migrate
     # via peewee-migrate
 peewee-migrate==1.12.2
 peewee-migrate==1.12.2
@@ -420,8 +426,6 @@ protobuf==4.25.3
     # via proto-plus
     # via proto-plus
 psycopg2-binary==2.9.9
 psycopg2-binary==2.9.9
     # via open-webui
     # via open-webui
-pulsar-client==3.5.0
-    # via chromadb
 pyasn1==0.6.0
 pyasn1==0.6.0
     # via pyasn1-modules
     # via pyasn1-modules
     # via python-jose
     # via python-jose
@@ -450,6 +454,7 @@ pygments==2.18.0
 pyjwt==2.8.0
 pyjwt==2.8.0
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
+    # via pyjwt
 pymysql==1.1.0
 pymysql==1.1.0
     # via open-webui
     # via open-webui
 pypandoc==1.13
 pypandoc==1.13
@@ -481,6 +486,7 @@ python-jose==3.3.0
 python-magic==0.4.27
 python-magic==0.4.27
     # via unstructured
     # via unstructured
 python-multipart==0.0.9
 python-multipart==0.0.9
+    # via fastapi
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
 python-socketio==5.11.2
 python-socketio==5.11.2
@@ -508,7 +514,7 @@ rank-bm25==0.2.2
     # via open-webui
     # via open-webui
 rapidfuzz==3.9.0
 rapidfuzz==3.9.0
     # via unstructured
     # via unstructured
-rapidocr-onnxruntime==1.2.3
+rapidocr-onnxruntime==1.3.22
     # via open-webui
     # via open-webui
 redis==5.0.4
 redis==5.0.4
     # via rq
     # via rq
@@ -516,7 +522,7 @@ regex==2024.5.10
     # via nltk
     # via nltk
     # via tiktoken
     # via tiktoken
     # via transformers
     # via transformers
-requests==2.31.0
+requests==2.32.2
     # via chromadb
     # via chromadb
     # via google-api-core
     # via google-api-core
     # via huggingface-hub
     # via huggingface-hub
@@ -553,9 +559,6 @@ scipy==1.13.0
     # via sentence-transformers
     # via sentence-transformers
 sentence-transformers==2.7.0
 sentence-transformers==2.7.0
     # via open-webui
     # via open-webui
-setuptools==69.5.1
-    # via ctranslate2
-    # via opentelemetry-instrumentation
 shapely==2.0.4
 shapely==2.0.4
     # via rapidocr-onnxruntime
     # via rapidocr-onnxruntime
 shellingham==1.5.4
 shellingham==1.5.4
@@ -580,7 +583,7 @@ soupsieve==2.5
 sqlalchemy==2.0.30
 sqlalchemy==2.0.30
     # via langchain
     # via langchain
     # via langchain-community
     # via langchain-community
-starlette==0.36.3
+starlette==0.37.2
     # via fastapi
     # via fastapi
 sympy==1.12
 sympy==1.12
     # via onnxruntime
     # via onnxruntime
@@ -615,6 +618,7 @@ transformers==4.39.3
     # via sentence-transformers
     # via sentence-transformers
 typer==0.12.3
 typer==0.12.3
     # via chromadb
     # via chromadb
+    # via fastapi-cli
 typing-extensions==4.11.0
 typing-extensions==4.11.0
     # via chromadb
     # via chromadb
     # via fastapi
     # via fastapi
@@ -637,7 +641,9 @@ tzdata==2024.1
     # via pandas
     # via pandas
 tzlocal==5.2
 tzlocal==5.2
     # via apscheduler
     # via apscheduler
-unstructured==0.11.8
+ujson==5.10.0
+    # via fastapi
+unstructured==0.14.0
     # via open-webui
     # via open-webui
 unstructured-client==0.22.0
 unstructured-client==0.22.0
     # via unstructured
     # via unstructured
@@ -650,8 +656,10 @@ urllib3==2.2.1
     # via unstructured-client
     # via unstructured-client
 uvicorn==0.22.0
 uvicorn==0.22.0
     # via chromadb
     # via chromadb
+    # via fastapi
     # via litellm
     # via litellm
     # via open-webui
     # via open-webui
+    # via uvicorn
 uvloop==0.19.0
 uvloop==0.19.0
     # via uvicorn
     # via uvicorn
 validators==0.28.1
 validators==0.28.1
@@ -679,3 +687,6 @@ youtube-transcript-api==0.6.2
     # via open-webui
     # via open-webui
 zipp==3.18.1
 zipp==3.18.1
     # via importlib-metadata
     # via importlib-metadata
+setuptools==69.5.1
+    # via ctranslate2
+    # via opentelemetry-instrumentation

+ 67 - 0
src/lib/apis/ollama/index.ts

@@ -1,6 +1,73 @@
 import { OLLAMA_API_BASE_URL } from '$lib/constants';
 import { OLLAMA_API_BASE_URL } from '$lib/constants';
 import { promptTemplate } from '$lib/utils';
 import { promptTemplate } from '$lib/utils';
 
 
+export const getOllamaConfig = async (token: string = '') => {
+	let error = null;
+
+	const res = await fetch(`${OLLAMA_API_BASE_URL}/config`, {
+		method: 'GET',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			...(token && { authorization: `Bearer ${token}` })
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			console.log(err);
+			if ('detail' in err) {
+				error = err.detail;
+			} else {
+				error = 'Server connection failed';
+			}
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
+export const updateOllamaConfig = async (token: string = '', enable_ollama_api: boolean) => {
+	let error = null;
+
+	const res = await fetch(`${OLLAMA_API_BASE_URL}/config/update`, {
+		method: 'POST',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			...(token && { authorization: `Bearer ${token}` })
+		},
+		body: JSON.stringify({
+			enable_ollama_api: enable_ollama_api
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			console.log(err);
+			if ('detail' in err) {
+				error = err.detail;
+			} else {
+				error = 'Server connection failed';
+			}
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};
+
 export const getOllamaUrls = async (token: string = '') => {
 export const getOllamaUrls = async (token: string = '') => {
 	let error = null;
 	let error = null;
 
 

+ 108 - 85
src/lib/components/chat/Settings/Connections.svelte

@@ -3,7 +3,13 @@
 	import { createEventDispatcher, onMount, getContext } from 'svelte';
 	import { createEventDispatcher, onMount, getContext } from 'svelte';
 	const dispatch = createEventDispatcher();
 	const dispatch = createEventDispatcher();
 
 
-	import { getOllamaUrls, getOllamaVersion, updateOllamaUrls } from '$lib/apis/ollama';
+	import {
+		getOllamaConfig,
+		getOllamaUrls,
+		getOllamaVersion,
+		updateOllamaConfig,
+		updateOllamaUrls
+	} from '$lib/apis/ollama';
 	import {
 	import {
 		getOpenAIConfig,
 		getOpenAIConfig,
 		getOpenAIKeys,
 		getOpenAIKeys,
@@ -26,6 +32,7 @@
 	let OPENAI_API_BASE_URLS = [''];
 	let OPENAI_API_BASE_URLS = [''];
 
 
 	let ENABLE_OPENAI_API = false;
 	let ENABLE_OPENAI_API = false;
+	let ENABLE_OLLAMA_API = false;
 
 
 	const updateOpenAIHandler = async () => {
 	const updateOpenAIHandler = async () => {
 		OPENAI_API_BASE_URLS = await updateOpenAIUrls(localStorage.token, OPENAI_API_BASE_URLS);
 		OPENAI_API_BASE_URLS = await updateOpenAIUrls(localStorage.token, OPENAI_API_BASE_URLS);
@@ -50,10 +57,13 @@
 
 
 	onMount(async () => {
 	onMount(async () => {
 		if ($user.role === 'admin') {
 		if ($user.role === 'admin') {
-			OLLAMA_BASE_URLS = await getOllamaUrls(localStorage.token);
+			const ollamaConfig = await getOllamaConfig(localStorage.token);
+			const openaiConfig = await getOpenAIConfig(localStorage.token);
 
 
-			const config = await getOpenAIConfig(localStorage.token);
-			ENABLE_OPENAI_API = config.ENABLE_OPENAI_API;
+			ENABLE_OPENAI_API = openaiConfig.ENABLE_OPENAI_API;
+			ENABLE_OLLAMA_API = ollamaConfig.ENABLE_OLLAMA_API;
+
+			OLLAMA_BASE_URLS = await getOllamaUrls(localStorage.token);
 
 
 			OPENAI_API_BASE_URLS = await getOpenAIUrls(localStorage.token);
 			OPENAI_API_BASE_URLS = await getOpenAIUrls(localStorage.token);
 			OPENAI_API_KEYS = await getOpenAIKeys(localStorage.token);
 			OPENAI_API_KEYS = await getOpenAIKeys(localStorage.token);
@@ -161,95 +171,108 @@
 
 
 		<hr class=" dark:border-gray-700" />
 		<hr class=" dark:border-gray-700" />
 
 
-		<div>
-			<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Ollama Base URL')}</div>
-			<div class="flex w-full gap-1.5">
-				<div class="flex-1 flex flex-col gap-2">
-					{#each OLLAMA_BASE_URLS as url, idx}
-						<div class="flex gap-1.5">
-							<input
-								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-								placeholder={$i18n.t('Enter URL (e.g. http://localhost:11434)')}
-								bind:value={url}
-							/>
+		<div class="pr-1.5 space-y-2">
+			<div class="flex justify-between items-center text-sm">
+				<div class="  font-medium">{$i18n.t('Ollama API')}</div>
+
+				<div class="mt-1">
+					<Switch
+						bind:state={ENABLE_OLLAMA_API}
+						on:change={async () => {
+							updateOllamaConfig(localStorage.token, ENABLE_OLLAMA_API);
+						}}
+					/>
+				</div>
+			</div>
+			{#if ENABLE_OLLAMA_API}
+				<div class="flex w-full gap-1.5">
+					<div class="flex-1 flex flex-col gap-2">
+						{#each OLLAMA_BASE_URLS as url, idx}
+							<div class="flex gap-1.5">
+								<input
+									class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+									placeholder={$i18n.t('Enter URL (e.g. http://localhost:11434)')}
+									bind:value={url}
+								/>
 
 
-							<div class="self-center flex items-center">
-								{#if idx === 0}
-									<button
-										class="px-1"
-										on:click={() => {
-											OLLAMA_BASE_URLS = [...OLLAMA_BASE_URLS, ''];
-										}}
-										type="button"
-									>
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											viewBox="0 0 16 16"
-											fill="currentColor"
-											class="w-4 h-4"
+								<div class="self-center flex items-center">
+									{#if idx === 0}
+										<button
+											class="px-1"
+											on:click={() => {
+												OLLAMA_BASE_URLS = [...OLLAMA_BASE_URLS, ''];
+											}}
+											type="button"
 										>
 										>
-											<path
-												d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z"
-											/>
-										</svg>
-									</button>
-								{:else}
-									<button
-										class="px-1"
-										on:click={() => {
-											OLLAMA_BASE_URLS = OLLAMA_BASE_URLS.filter((url, urlIdx) => idx !== urlIdx);
-										}}
-										type="button"
-									>
-										<svg
-											xmlns="http://www.w3.org/2000/svg"
-											viewBox="0 0 16 16"
-											fill="currentColor"
-											class="w-4 h-4"
+											<svg
+												xmlns="http://www.w3.org/2000/svg"
+												viewBox="0 0 16 16"
+												fill="currentColor"
+												class="w-4 h-4"
+											>
+												<path
+													d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z"
+												/>
+											</svg>
+										</button>
+									{:else}
+										<button
+											class="px-1"
+											on:click={() => {
+												OLLAMA_BASE_URLS = OLLAMA_BASE_URLS.filter((url, urlIdx) => idx !== urlIdx);
+											}}
+											type="button"
 										>
 										>
-											<path d="M3.75 7.25a.75.75 0 0 0 0 1.5h8.5a.75.75 0 0 0 0-1.5h-8.5Z" />
-										</svg>
-									</button>
-								{/if}
+											<svg
+												xmlns="http://www.w3.org/2000/svg"
+												viewBox="0 0 16 16"
+												fill="currentColor"
+												class="w-4 h-4"
+											>
+												<path d="M3.75 7.25a.75.75 0 0 0 0 1.5h8.5a.75.75 0 0 0 0-1.5h-8.5Z" />
+											</svg>
+										</button>
+									{/if}
+								</div>
 							</div>
 							</div>
-						</div>
-					{/each}
-				</div>
+						{/each}
+					</div>
 
 
-				<div class="">
-					<button
-						class="p-2.5 bg-gray-200 hover:bg-gray-300 dark:bg-gray-850 dark:hover:bg-gray-800 rounded-lg transition"
-						on:click={() => {
-							updateOllamaUrlsHandler();
-						}}
-						type="button"
-					>
-						<svg
-							xmlns="http://www.w3.org/2000/svg"
-							viewBox="0 0 20 20"
-							fill="currentColor"
-							class="w-4 h-4"
+					<div class="flex">
+						<button
+							class="self-center p-2 bg-gray-200 hover:bg-gray-300 dark:bg-gray-900 dark:hover:bg-gray-850 rounded-lg transition"
+							on:click={() => {
+								updateOllamaUrlsHandler();
+							}}
+							type="button"
 						>
 						>
-							<path
-								fill-rule="evenodd"
-								d="M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z"
-								clip-rule="evenodd"
-							/>
-						</svg>
-					</button>
+							<svg
+								xmlns="http://www.w3.org/2000/svg"
+								viewBox="0 0 20 20"
+								fill="currentColor"
+								class="w-4 h-4"
+							>
+								<path
+									fill-rule="evenodd"
+									d="M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z"
+									clip-rule="evenodd"
+								/>
+							</svg>
+						</button>
+					</div>
 				</div>
 				</div>
-			</div>
 
 
-			<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
-				{$i18n.t('Trouble accessing Ollama?')}
-				<a
-					class=" text-gray-300 font-medium underline"
-					href="https://github.com/open-webui/open-webui#troubleshooting"
-					target="_blank"
-				>
-					{$i18n.t('Click here for help.')}
-				</a>
-			</div>
+				<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
+					{$i18n.t('Trouble accessing Ollama?')}
+					<a
+						class=" text-gray-300 font-medium underline"
+						href="https://github.com/open-webui/open-webui#troubleshooting"
+						target="_blank"
+					>
+						{$i18n.t('Click here for help.')}
+					</a>
+				</div>
+			{/if}
 		</div>
 		</div>
 	</div>
 	</div>
 
 

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "حسنا دعنا نذهب!",
 	"Okay, Let's Go!": "حسنا دعنا نذهب!",
 	"OLED Dark": "OLED داكن",
 	"OLED Dark": "OLED داكن",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama الرابط الافتراضي",
+	"Ollama API": "",
 	"Ollama Version": "Ollama الاصدار",
 	"Ollama Version": "Ollama الاصدار",
 	"On": "تشغيل",
 	"On": "تشغيل",
 	"Only": "فقط",
 	"Only": "فقط",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "ОК, Нека започваме!",
 	"Okay, Let's Go!": "ОК, Нека започваме!",
 	"OLED Dark": "OLED тъмно",
 	"OLED Dark": "OLED тъмно",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama Базов URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama Версия",
 	"Ollama Version": "Ollama Версия",
 	"On": "Вкл.",
 	"On": "Вкл.",
 	"Only": "Само",
 	"Only": "Само",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "ঠিক আছে, চলুন যাই!",
 	"Okay, Let's Go!": "ঠিক আছে, চলুন যাই!",
 	"OLED Dark": "OLED ডার্ক",
 	"OLED Dark": "OLED ডার্ক",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama বেজ ইউআরএল",
+	"Ollama API": "",
 	"Ollama Version": "Ollama ভার্সন",
 	"Ollama Version": "Ollama ভার্সন",
 	"On": "চালু",
 	"On": "চালু",
 	"Only": "শুধুমাত্র",
 	"Only": "শুধুমাত্র",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "D'acord, Anem!",
 	"Okay, Let's Go!": "D'acord, Anem!",
 	"OLED Dark": "OLED Fosc",
 	"OLED Dark": "OLED Fosc",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL Base d'Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Versió d'Ollama",
 	"Ollama Version": "Versió d'Ollama",
 	"On": "Activat",
 	"On": "Activat",
 	"Only": "Només",
 	"Only": "Només",

+ 503 - 0
src/lib/i18n/locales/ceb-PH/translation.json

@@ -0,0 +1,503 @@
+{
+  "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' para walay expiration.",
+  "(Beta)": "(Beta)",
+  "(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)",
+  "(latest)": "",
+  "{{modelName}} is thinking...": "{{modelName}} hunahunaa...",
+  "{{user}}'s Chats": "",
+  "{{webUIName}} Backend Required": "Backend {{webUIName}} gikinahanglan",
+  "a user": "usa ka user",
+  "About": "Mahitungod sa",
+  "Account": "Account",
+  "Accurate information": "",
+  "Add": "",
+  "Add a model": "Pagdugang ug template",
+  "Add a model tag name": "Pagdugang usa ka ngalan sa tag alang sa template",
+  "Add a short description about what this modelfile does": "Pagdugang usa ka mubo nga paghulagway kung unsa ang gibuhat sa kini nga template file",
+  "Add a short title for this prompt": "Pagdugang og usa ka mubo nga titulo alang niini nga prompt",
+  "Add a tag": "Pagdugang og tag",
+  "Add custom prompt": "Pagdugang og custom prompt",
+  "Add Docs": "Pagdugang og mga dokumento",
+  "Add Files": "Idugang ang mga file",
+  "Add Memory": "",
+  "Add message": "Pagdugang og mensahe",
+  "Add Model": "",
+  "Add Tags": "idugang ang mga tag",
+  "Add User": "",
+  "Adjusting these settings will apply changes universally to all users.": "Ang pag-adjust niini nga mga setting magamit ang mga pagbag-o sa tanan nga tiggamit.",
+  "admin": "Administrator",
+  "Admin Panel": "Admin Panel",
+  "Admin Settings": "Mga setting sa administratibo",
+  "Advanced Parameters": "advanced settings",
+  "all": "tanan",
+  "All Documents": "",
+  "All Users": "Ang tanan nga mga tiggamit",
+  "Allow": "Sa pagtugot",
+  "Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
+  "alphanumeric characters and hyphens": "alphanumeric nga mga karakter ug hyphen",
+  "Already have an account?": "Naa na kay account ?",
+  "an assistant": "usa ka katabang",
+  "and": "Ug",
+  "and create a new shared link.": "",
+  "API Base URL": "API Base URL",
+  "API Key": "yawe sa API",
+  "API Key created.": "",
+  "API keys": "",
+  "API RPM": "RPM API",
+  "April": "",
+  "Archive": "",
+  "Archived Chats": "pagrekord sa chat",
+  "are allowed - Activate this command by typing": "gitugotan - I-enable kini nga sugo pinaagi sa pag-type",
+  "Are you sure?": "Sigurado ka ?",
+  "Attach file": "Ilakip ang usa ka file",
+  "Attention to detail": "Pagtagad sa mga detalye",
+  "Audio": "Audio",
+  "August": "",
+  "Auto-playback response": "Autoplay nga tubag",
+  "Auto-send input after 3 sec.": "Awtomatikong ipadala ang entry pagkahuman sa 3 segundos.",
+  "AUTOMATIC1111 Base URL": "Base URL AUTOMATIC1111",
+  "AUTOMATIC1111 Base URL is required.": "Ang AUTOMATIC1111 base URL gikinahanglan.",
+  "available!": "magamit!",
+  "Back": "Balik",
+  "Bad Response": "",
+  "before": "",
+  "Being lazy": "",
+  "Builder Mode": "Mode sa Magtutukod",
+  "Bypass SSL verification for Websites": "",
+  "Cancel": "Pagkanselar",
+  "Categories": "Mga kategoriya",
+  "Change Password": "Usba ang password",
+  "Chat": "Panaghisgot",
+  "Chat Bubble UI": "",
+  "Chat direction": "",
+  "Chat History": "Kasaysayan sa chat",
+  "Chat History is off for this browser.": "Ang kasaysayan sa chat gi-disable alang niini nga browser.",
+  "Chats": "Mga panaghisgot",
+  "Check Again": "Susiha pag-usab",
+  "Check for updates": "Susiha ang mga update",
+  "Checking for updates...": "Pagsusi alang sa mga update...",
+  "Choose a model before saving...": "Pagpili og template sa dili pa i-save...",
+  "Chunk Overlap": "Block overlap",
+  "Chunk Params": "Mga Setting sa Block",
+  "Chunk Size": "Gidak-on sa block",
+  "Citation": "Mga kinutlo",
+  "Click here for help.": "I-klik dinhi alang sa tabang.",
+  "Click here to": "",
+  "Click here to check other modelfiles.": "Pag-klik dinhi aron susihon ang ubang mga file sa template.",
+  "Click here to select": "I-klik dinhi aron makapili",
+  "Click here to select a csv file.": "",
+  "Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.",
+  "click here.": "I-klik dinhi.",
+  "Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.",
+  "Close": "Suod nga",
+  "Collection": "Koleksyon",
+  "ComfyUI": "",
+  "ComfyUI Base URL": "",
+  "ComfyUI Base URL is required.": "",
+  "Command": "Pag-order",
+  "Confirm Password": "Kumpirma ang password",
+  "Connections": "Mga koneksyon",
+  "Content": "Kontento",
+  "Context Length": "Ang gitas-on sa konteksto",
+  "Continue Response": "",
+  "Conversation Mode": "Talk mode",
+  "Copied shared chat URL to clipboard!": "",
+  "Copy": "",
+  "Copy last code block": "Kopyaha ang katapusang bloke sa code",
+  "Copy last response": "Kopyaha ang kataposang tubag",
+  "Copy Link": "",
+  "Copying to clipboard was successful!": "Ang pagkopya sa clipboard malampuson!",
+  "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':": "Paghimo og mugbo nga 3-5 ka pulong nga sentence isip usa ka ulohan alang sa mosunod nga pangutana, hugot nga pagsunod sa 3-5 ka pulong nga limitasyon ug paglikay sa paggamit sa pulong nga 'titulo':",
+  "Create a modelfile": "Paghimo ug template file",
+  "Create Account": "Paghimo og account",
+  "Create new key": "",
+  "Create new secret key": "",
+  "Created at": "Gihimo ang",
+  "Created At": "",
+  "Current Model": "Kasamtangang modelo",
+  "Current Password": "Kasamtangang Password",
+  "Custom": "Custom",
+  "Customize Ollama models for a specific purpose": "Ipasibo ang mga template sa Ollama alang sa usa ka piho nga katuyoan",
+  "Dark": "Ngitngit",
+  "Dashboard": "",
+  "Database": "Database",
+  "December": "",
+  "Default": "Pinaagi sa default",
+  "Default (Automatic1111)": "Default (Awtomatiko1111)",
+  "Default (SentenceTransformers)": "",
+  "Default (Web API)": "Default (Web API)",
+  "Default model updated": "Gi-update nga default template",
+  "Default Prompt Suggestions": "Default nga prompt nga mga sugyot",
+  "Default User Role": "Default nga Papel sa Gumagamit",
+  "delete": "DELETE",
+  "Delete": "",
+  "Delete a model": "Pagtangtang sa usa ka template",
+  "Delete chat": "Pagtangtang sa panaghisgot",
+  "Delete Chat": "",
+  "Delete Chats": "Pagtangtang sa mga chat",
+  "delete this link": "",
+  "Delete User": "",
+  "Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas",
+  "Deleted {{tagName}}": "",
+  "Description": "Deskripsyon",
+  "Didn't fully follow instructions": "",
+  "Disabled": "Nabaldado",
+  "Discover a modelfile": "Pagdiskobre ug template file",
+  "Discover a prompt": "Pagkaplag usa ka prompt",
+  "Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat",
+  "Discover, download, and explore model presets": "Pagdiskobre, pag-download, ug pagsuhid sa mga preset sa template",
+  "Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan",
+  "Document": "Dokumento",
+  "Document Settings": "Mga Setting sa Dokumento",
+  "Documents": "Mga dokumento",
+  "does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.",
+  "Don't Allow": "Dili tugotan",
+  "Don't have an account?": "Wala kay account ?",
+  "Don't like the style": "",
+  "Download": "",
+  "Download canceled": "",
+  "Download Database": "I-download ang database",
+  "Drop any files here to add to the conversation": "Ihulog ang bisan unsang file dinhi aron idugang kini sa panag-istoryahanay",
+  "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ",
+  "Edit": "",
+  "Edit Doc": "I-edit ang dokumento",
+  "Edit User": "I-edit ang tiggamit",
+  "Email": "E-mail",
+  "Embedding Model": "",
+  "Embedding Model Engine": "",
+  "Embedding model set to \"{{embedding_model}}\"": "",
+  "Enable Chat History": "I-enable ang kasaysayan sa chat",
+  "Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
+  "Enabled": "Gipaandar",
+  "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
+  "Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi",
+  "Enter a detail about yourself for your LLMs to recall": "",
+  "Enter Chunk Overlap": "Pagsulod sa block overlap",
+  "Enter Chunk Size": "Isulod ang block size",
+  "Enter Image Size (e.g. 512x512)": "Pagsulod sa gidak-on sa hulagway (pananglitan 512x512)",
+  "Enter language codes": "",
+  "Enter LiteLLM API Base URL (litellm_params.api_base)": "Pagsulod sa LiteLLM API base URL (litelm_params.api_base)",
+  "Enter LiteLLM API Key (litellm_params.api_key)": "Isulod ang LiteLLM API key (litelm_params.api_key)",
+  "Enter LiteLLM API RPM (litellm_params.rpm)": "Isulod ang LiteLLM API RPM (litelm_params.rpm)",
+  "Enter LiteLLM Model (litellm_params.model)": "Pagsulod sa LiteLLM nga modelo (litelm_params.model)",
+  "Enter Max Tokens (litellm_params.max_tokens)": "Pagsulod sa max nga gidaghanon sa mga token (litelm_params.max_tokens)",
+  "Enter model tag (e.g. {{modelTag}})": "Pagsulod sa template tag (e.g. {{modelTag}})",
+  "Enter Number of Steps (e.g. 50)": "Pagsulod sa gidaghanon sa mga lakang (e.g. 50)",
+  "Enter Score": "",
+  "Enter stop sequence": "Pagsulod sa katapusan nga han-ay",
+  "Enter Top K": "Pagsulod sa Top K",
+  "Enter URL (e.g. http://127.0.0.1:7860/)": "Pagsulod sa URL (e.g. http://127.0.0.1:7860/)",
+  "Enter URL (e.g. http://localhost:11434)": "",
+  "Enter Your Email": "Pagsulod sa imong e-mail address",
+  "Enter Your Full Name": "Ibutang ang imong tibuok nga ngalan",
+  "Enter Your Password": "Ibutang ang imong password",
+  "Enter Your Role": "",
+  "Experimental": "Eksperimento",
+  "Export All Chats (All Users)": "I-export ang tanan nga mga chat (Tanan nga tiggamit)",
+  "Export Chats": "I-export ang mga chat",
+  "Export Documents Mapping": "I-export ang pagmapa sa dokumento",
+  "Export Modelfiles": "I-export ang mga file sa modelo",
+  "Export Prompts": "Export prompts",
+  "Failed to create API Key.": "",
+  "Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
+  "February": "",
+  "Feel free to add specific details": "",
+  "File Mode": "File mode",
+  "File not found.": "Wala makit-an ang file.",
+  "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "",
+  "Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag",
+  "Focus chat input": "Pag-focus sa entry sa diskusyon",
+  "Followed instructions perfectly": "",
+  "Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:",
+  "From (Base Model)": "Gikan sa (Basic nga modelo)",
+  "Full Screen Mode": "Full screen mode",
+  "General": "Heneral",
+  "General Settings": "kinatibuk-ang mga setting",
+  "Generation Info": "",
+  "Good Response": "",
+  "h:mm a": "",
+  "has no conversations.": "",
+  "Hello, {{name}}": "Maayong buntag, {{name}}",
+  "Help": "",
+  "Hide": "Tagoa",
+  "Hide Additional Params": "Tagoa ang dugang nga mga setting",
+  "How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
+  "Hybrid Search": "",
+  "Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)",
+  "Image Generation Engine": "Makina sa paghimo og imahe",
+  "Image Settings": "Mga Setting sa Imahen",
+  "Images": "Mga hulagway",
+  "Import Chats": "Import nga mga chat",
+  "Import Documents Mapping": "Import nga pagmapa sa dokumento",
+  "Import Modelfiles": "Import nga mga file sa modelo",
+  "Import Prompts": "Import prompt",
+  "Include `--api` flag when running stable-diffusion-webui": "Iapil ang `--api` nga bandila kung nagdagan nga stable-diffusion-webui",
+  "Input commands": "Pagsulod sa input commands",
+  "Interface": "Interface",
+  "Invalid Tag": "",
+  "January": "",
+  "join our Discord for help.": "Apil sa among Discord alang sa tabang.",
+  "JSON": "JSON",
+  "July": "",
+  "June": "",
+  "JWT Expiration": "Pag-expire sa JWT",
+  "JWT Token": "JWT token",
+  "Keep Alive": "Padayon nga aktibo",
+  "Keyboard shortcuts": "Mga shortcut sa keyboard",
+  "Language": "Pinulongan",
+  "Last Active": "",
+  "Light": "Kahayag",
+  "Listening...": "Paminaw...",
+  "LLMs can make mistakes. Verify important information.": "Ang mga LLM mahimong masayop. ",
+  "LTR": "",
+  "Made by OpenWebUI Community": "Gihimo sa komunidad sa OpenWebUI",
+  "Make sure to enclose them with": "Siguruha nga palibutan sila",
+  "Manage LiteLLM Models": "Pagdumala sa mga modelo sa LiteLLM",
+  "Manage Models": "Pagdumala sa mga templates",
+  "Manage Ollama Models": "Pagdumala sa mga modelo sa Ollama",
+  "March": "",
+  "Max Tokens": "Maximum nga mga token",
+  "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Ang labing taas nga 3 nga mga disenyo mahimong ma-download nga dungan. ",
+  "May": "",
+  "Memories accessible by LLMs will be shown here.": "",
+  "Memory": "",
+  "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": "",
+  "Mirostat": "Mirostat",
+  "Mirostat Eta": "Mirostat Eta",
+  "Mirostat Tau": "Mirostat Tau",
+  "MMMM DD, YYYY": "MMMM DD, YYYY",
+  "MMMM DD, YYYY HH:mm": "",
+  "Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.",
+  "Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.",
+  "Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an",
+  "Model {{modelName}} already exists.": "Ang modelo {{modelName}} Anaa na.",
+  "Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
+  "Model Name": "Ngalan sa Modelo",
+  "Model not selected": "Wala gipili ang modelo",
+  "Model Tag Name": "Ngalan sa tag sa modelo",
+  "Model Whitelisting": "Whitelist sa modelo",
+  "Model(s) Whitelisted": "Gi-whitelist nga (mga) modelo",
+  "Modelfile": "File sa template",
+  "Modelfile Advanced Settings": "Advanced nga template file setting",
+  "Modelfile Content": "Mga sulod sa template file",
+  "Modelfiles": "Mga file sa modelo",
+  "Models": "Mga modelo",
+  "More": "",
+  "Name": "Ngalan",
+  "Name Tag": "Tag sa ngalan",
+  "Name your modelfile": "Ngalan ang imong template file",
+  "New Chat": "Bag-ong diskusyon",
+  "New Password": "Bag-ong Password",
+  "No results found": "",
+  "No source available": "Walay tinubdan nga anaa",
+  "Not factually correct": "",
+  "Not sure what to add?": "Dili sigurado kung unsa ang idugang?",
+  "Not sure what to write? Switch to": "Dili sigurado kung unsa ang isulat? ",
+  "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
+  "Notifications": "Mga pahibalo sa desktop",
+  "November": "",
+  "October": "",
+  "Off": "Napuo",
+  "Okay, Let's Go!": "Okay, lakaw na!",
+  "OLED Dark": "",
+  "Ollama": "",
+  "Ollama Base URL": "Ollama Base URL",
+  "Ollama Version": "Ollama nga bersyon",
+  "On": "Gipaandar",
+  "Only": "Lamang",
+  "Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.",
+  "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! ",
+  "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! ",
+  "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ",
+  "Open": "Bukas",
+  "Open AI": "Buksan ang AI",
+  "Open AI (Dall-E)": "Buksan ang AI (Dall-E)",
+  "Open new chat": "Ablihi ang bag-ong diskusyon",
+  "OpenAI": "",
+  "OpenAI API": "OpenAI API",
+  "OpenAI API Config": "",
+  "OpenAI API Key is required.": "Ang yawe sa OpenAI API gikinahanglan.",
+  "OpenAI URL/Key required.": "",
+  "or": "O",
+  "Other": "",
+  "Overview": "",
+  "Parameters": "Mga setting",
+  "Password": "Password",
+  "PDF document (.pdf)": "",
+  "PDF Extract Images (OCR)": "PDF Image Extraction (OCR)",
+  "pending": "gipugngan",
+  "Permission denied when accessing microphone: {{error}}": "Gidili ang pagtugot sa dihang nag-access sa mikropono: {{error}}",
+  "Personalization": "",
+  "Plain text (.txt)": "",
+  "Playground": "Dulaanan",
+  "Positive attitude": "",
+  "Previous 30 days": "",
+  "Previous 7 days": "",
+  "Profile Image": "",
+  "Prompt": "",
+  "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
+  "Prompt Content": "Ang sulod sa prompt",
+  "Prompt suggestions": "Maabtik nga mga Sugyot",
+  "Prompts": "Mga aghat",
+  "Pull \"{{searchValue}}\" from Ollama.com": "",
+  "Pull a model from Ollama.com": "Pagkuha ug template gikan sa Ollama.com",
+  "Pull Progress": "Pag-uswag sa pag-download",
+  "Query Params": "Mga parameter sa pangutana",
+  "RAG Template": "RAG nga modelo",
+  "Raw Format": "Hilaw nga pormat",
+  "Read Aloud": "",
+  "Record voice": "Irekord ang tingog",
+  "Redirecting you to OpenWebUI Community": "Gi-redirect ka sa komunidad sa OpenWebUI",
+  "Refused when it shouldn't have": "",
+  "Regenerate": "",
+  "Release Notes": "Release Notes",
+  "Remove": "",
+  "Remove Model": "",
+  "Rename": "",
+  "Repeat Last N": "Balika ang katapusang N",
+  "Repeat Penalty": "Balika ang silot",
+  "Request Mode": "Query mode",
+  "Reranking Model": "",
+  "Reranking model disabled": "",
+  "Reranking model set to \"{{reranking_model}}\"": "",
+  "Reset Vector Storage": "I-reset ang pagtipig sa vector",
+  "Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard",
+  "Role": "Papel",
+  "Rosé Pine": "Rosé Pine",
+  "Rosé Pine Dawn": "Aube Pine Rosé",
+  "RTL": "",
+  "Save": "Tipigi",
+  "Save & Create": "I-save ug Paghimo",
+  "Save & Update": "I-save ug I-update",
+  "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": "Ang pag-save sa mga chat log direkta sa imong browser storage dili na suportado. ",
+  "Scan": "Aron ma-scan",
+  "Scan complete!": "Nakompleto ang pag-scan!",
+  "Scan for documents from {{path}}": "I-scan ang mga dokumento gikan sa {{path}}",
+  "Search": "Pagpanukiduki",
+  "Search a model": "",
+  "Search Documents": "Pangitaa ang mga dokumento",
+  "Search Prompts": "Pangitaa ang mga prompt",
+  "See readme.md for instructions": "Tan-awa ang readme.md alang sa mga panudlo",
+  "See what's new": "Tan-awa unsay bag-o",
+  "Seed": "Binhi",
+  "Select a mode": "Pagpili og mode",
+  "Select a model": "Pagpili og modelo",
+  "Select an Ollama instance": "Pagpili usa ka pananglitan sa Ollama",
+  "Select model": "Pagpili og modelo",
+  "Send": "",
+  "Send a Message": "Magpadala ug mensahe",
+  "Send message": "Magpadala ug mensahe",
+  "September": "",
+  "Server connection verified": "Gipamatud-an nga koneksyon sa server",
+  "Set as default": "Define pinaagi sa default",
+  "Set Default Model": "Ibutang ang default template",
+  "Set embedding model (e.g. {{model}})": "",
+  "Set Image Size": "Ibutang ang gidak-on sa hulagway",
+  "Set Model": "I-configure ang template",
+  "Set reranking model (e.g. {{model}})": "",
+  "Set Steps": "Ipasabot ang mga lakang",
+  "Set Title Auto-Generation Model": "Itakda ang awtomatik nga template sa paghimo sa titulo",
+  "Set Voice": "Ibutang ang tingog",
+  "Settings": "Mga setting",
+  "Settings saved successfully!": "Malampuson nga na-save ang mga setting!",
+  "Share": "",
+  "Share Chat": "",
+  "Share to OpenWebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI",
+  "short-summary": "mubo nga summary",
+  "Show": "Pagpakita",
+  "Show Additional Params": "Ipakita ang dugang nga mga setting",
+  "Show shortcuts": "Ipakita ang mga shortcut",
+  "Showcased creativity": "",
+  "sidebar": "lateral bar",
+  "Sign in": "Para maka log in",
+  "Sign Out": "Pag-sign out",
+  "Sign up": "Pagrehistro",
+  "Signing in": "",
+  "Source": "Tinubdan",
+  "Speech recognition error: {{error}}": "Sayop sa pag-ila sa tingog: {{error}}",
+  "Speech-to-Text Engine": "Engine sa pag-ila sa tingog",
+  "SpeechRecognition API is not supported in this browser.": "Ang SpeechRecognition API wala gisuportahan niini nga browser.",
+  "Stop Sequence": "Pagkasunod-sunod sa pagsira",
+  "STT Settings": "Mga setting sa STT",
+  "Submit": "Isumite",
+  "Subtitle (e.g. about the Roman Empire)": "",
+  "Success": "Kalampusan",
+  "Successfully updated.": "Malampuson nga na-update.",
+  "Suggested": "",
+  "Sync All": "I-synchronize ang tanan",
+  "System": "Sistema",
+  "System Prompt": "Madasig nga Sistema",
+  "Tags": "Mga tag",
+  "Tell us more:": "",
+  "Temperature": "Temperatura",
+  "Template": "Modelo",
+  "Text Completion": "Pagkompleto sa teksto",
+  "Text-to-Speech Engine": "Text-to-speech nga makina",
+  "Tfs Z": "Tfs Z",
+  "Thanks for your feedback!": "",
+  "The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
+  "Theme": "Tema",
+  "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Kini nagsiguro nga ang imong bililhon nga mga panag-istoryahanay luwas nga natipig sa imong backend database. ",
+  "This setting does not sync across browsers or devices.": "Kini nga setting wala mag-sync tali sa mga browser o device.",
+  "Thorough explanation": "",
+  "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sugyot: Pag-update sa daghang variable nga lokasyon nga sunud-sunod pinaagi sa pagpindot sa tab key sa chat entry pagkahuman sa matag puli.",
+  "Title": "Titulo",
+  "Title (e.g. Tell me a fun fact)": "",
+  "Title Auto-Generation": "Awtomatikong paghimo sa titulo",
+  "Title cannot be an empty string.": "",
+  "Title Generation Prompt": "Madasig nga henerasyon sa titulo",
+  "to": "adunay",
+  "To access the available model names for downloading,": "Aron ma-access ang mga ngalan sa modelo nga ma-download,",
+  "To access the GGUF models available for downloading,": "Aron ma-access ang mga modelo sa GGUF nga magamit alang sa pag-download,",
+  "to chat input.": "sa entrada sa iring.",
+  "Today": "",
+  "Toggle settings": "I-toggle ang mga setting",
+  "Toggle sidebar": "I-toggle ang sidebar",
+  "Top K": "Top K",
+  "Top P": "Ibabaw nga P",
+  "Trouble accessing Ollama?": "Adunay mga problema sa pag-access sa Ollama?",
+  "TTS Settings": "Mga Setting sa TTS",
+  "Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face",
+  "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh!  {{provider}}.",
+  "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto",
+  "Update and Copy Link": "",
+  "Update password": "I-update ang password",
+  "Upload a GGUF model": "Pag-upload ug modelo sa GGUF",
+  "Upload files": "Pag-upload og mga file",
+  "Upload Progress": "Pag-uswag sa Pag-upload",
+  "URL Mode": "URL mode",
+  "Use '#' in the prompt input to load and select your documents.": "Gamita ang '#' sa dali nga pagsulod aron makarga ug mapili ang imong mga dokumento.",
+  "Use Gravatar": "Paggamit sa Gravatar",
+  "Use Initials": "",
+  "user": "tiggamit",
+  "User Permissions": "Mga permiso sa tiggamit",
+  "Users": "Mga tiggamit",
+  "Utilize": "Sa paggamit",
+  "Valid time units:": "Balido nga mga yunit sa oras:",
+  "variable": "variable",
+  "variable to have them replaced with clipboard content.": "variable aron pulihan kini sa mga sulud sa clipboard.",
+  "Version": "Bersyon",
+  "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
+  "Web": "Web",
+  "Web Loader Settings": "",
+  "Web Params": "",
+  "Webhook URL": "",
+  "WebUI Add-ons": "Mga add-on sa WebUI",
+  "WebUI Settings": "Mga Setting sa WebUI",
+  "WebUI will make requests to": "Ang WebUI maghimo mga hangyo sa",
+  "What’s New in": "Unsay bag-o sa",
+  "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Kung ang kasaysayan gipalong, ang mga bag-ong chat sa kini nga browser dili makita sa imong kasaysayan sa bisan unsang mga aparato.",
+  "Whisper (Local)": "Whisper (Lokal)",
+  "Workspace": "",
+  "Write a prompt suggestion (e.g. Who are you?)": "Pagsulat og gisugyot nga prompt (eg. Kinsa ka?)",
+  "Write a summary in 50 words that summarizes [topic or keyword].": "Pagsulat og 50 ka pulong nga summary nga nagsumaryo [topic o keyword].",
+  "Yesterday": "",
+  "You": "",
+  "You have no archived conversations.": "",
+  "You have shared this chat": "",
+  "You're a helpful assistant.": "Usa ka ka mapuslanon nga katabang",
+  "You're now logged in.": "Konektado ka na karon.",
+  "Youtube": "",
+  "Youtube Loader Settings": ""
+}

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Okay, los geht's!",
 	"Okay, Let's Go!": "Okay, los geht's!",
 	"OLED Dark": "OLED Dunkel",
 	"OLED Dark": "OLED Dunkel",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama Basis URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama-Version",
 	"Ollama Version": "Ollama-Version",
 	"On": "Ein",
 	"On": "Ein",
 	"Only": "Nur",
 	"Only": "Nur",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Okay, Let's Go!",
 	"Okay, Let's Go!": "Okay, Let's Go!",
 	"OLED Dark": "OLED Dark",
 	"OLED Dark": "OLED Dark",
 	"Ollama": "",
 	"Ollama": "",
-	"Ollama Base URL": "Ollama Base Bark",
+	"Ollama API": "",
 	"Ollama Version": "Ollama Version",
 	"Ollama Version": "Ollama Version",
 	"On": "On",
 	"On": "On",
 	"Only": "Only",
 	"Only": "Only",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "",
 	"Okay, Let's Go!": "",
 	"OLED Dark": "",
 	"OLED Dark": "",
 	"Ollama": "",
 	"Ollama": "",
-	"Ollama Base URL": "",
+	"Ollama API": "",
 	"Ollama Version": "",
 	"Ollama Version": "",
 	"On": "",
 	"On": "",
 	"Only": "",
 	"Only": "",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "",
 	"Okay, Let's Go!": "",
 	"OLED Dark": "",
 	"OLED Dark": "",
 	"Ollama": "",
 	"Ollama": "",
-	"Ollama Base URL": "",
+	"Ollama API": "",
 	"Ollama Version": "",
 	"Ollama Version": "",
 	"On": "",
 	"On": "",
 	"Only": "",
 	"Only": "",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Bien, ¡Vamos!",
 	"Okay, Let's Go!": "Bien, ¡Vamos!",
 	"OLED Dark": "OLED oscuro",
 	"OLED Dark": "OLED oscuro",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL base de Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Versión de Ollama",
 	"Ollama Version": "Versión de Ollama",
 	"On": "Activado",
 	"On": "Activado",
 	"Only": "Solamente",
 	"Only": "Solamente",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "باشه، بزن بریم!",
 	"Okay, Let's Go!": "باشه، بزن بریم!",
 	"OLED Dark": "OLED تیره",
 	"OLED Dark": "OLED تیره",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL پایه اولاما",
+	"Ollama API": "",
 	"Ollama Version": "نسخه اولاما",
 	"Ollama Version": "نسخه اولاما",
 	"On": "روشن",
 	"On": "روشن",
 	"Only": "فقط",
 	"Only": "فقط",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Eikun menoksi!",
 	"Okay, Let's Go!": "Eikun menoksi!",
 	"OLED Dark": "OLED-tumma",
 	"OLED Dark": "OLED-tumma",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama-perus-URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama-versio",
 	"Ollama Version": "Ollama-versio",
 	"On": "Päällä",
 	"On": "Päällä",
 	"Only": "Vain",
 	"Only": "Vain",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Okay, Allons-y !",
 	"Okay, Let's Go!": "Okay, Allons-y !",
 	"OLED Dark": "OLED Sombre",
 	"OLED Dark": "OLED Sombre",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL de Base Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Version Ollama",
 	"Ollama Version": "Version Ollama",
 	"On": "Activé",
 	"On": "Activé",
 	"Only": "Seulement",
 	"Only": "Seulement",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "D'accord, allons-y !",
 	"Okay, Let's Go!": "D'accord, allons-y !",
 	"OLED Dark": "OLED Sombre",
 	"OLED Dark": "OLED Sombre",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL de Base Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Version Ollama",
 	"Ollama Version": "Version Ollama",
 	"On": "Activé",
 	"On": "Activé",
 	"Only": "Seulement",
 	"Only": "Seulement",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "בסדר, בואו נתחיל!",
 	"Okay, Let's Go!": "בסדר, בואו נתחיל!",
 	"OLED Dark": "OLED כהה",
 	"OLED Dark": "OLED כהה",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "כתובת URL בסיסית של Ollama",
+	"Ollama API": "",
 	"Ollama Version": "גרסת Ollama",
 	"Ollama Version": "גרסת Ollama",
 	"On": "פועל",
 	"On": "פועל",
 	"Only": "רק",
 	"Only": "רק",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "ठीक है, चलिए चलते हैं!",
 	"Okay, Let's Go!": "ठीक है, चलिए चलते हैं!",
 	"OLED Dark": "OLEDescuro",
 	"OLED Dark": "OLEDescuro",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama Version",
 	"Ollama Version": "Ollama Version",
 	"On": "चालू",
 	"On": "चालू",
 	"Only": "केवल",
 	"Only": "केवल",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "U redu, idemo!",
 	"Okay, Let's Go!": "U redu, idemo!",
 	"OLED Dark": "OLED Tamno",
 	"OLED Dark": "OLED Tamno",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Osnovni URL Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Ollama verzija",
 	"Ollama Version": "Ollama verzija",
 	"On": "Uključeno",
 	"On": "Uključeno",
 	"Only": "Samo",
 	"Only": "Samo",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Ok, andiamo!",
 	"Okay, Let's Go!": "Ok, andiamo!",
 	"OLED Dark": "OLED scuro",
 	"OLED Dark": "OLED scuro",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL base Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Versione Ollama",
 	"Ollama Version": "Versione Ollama",
 	"On": "Attivato",
 	"On": "Attivato",
 	"Only": "Solo",
 	"Only": "Solo",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "OK、始めましょう!",
 	"Okay, Let's Go!": "OK、始めましょう!",
 	"OLED Dark": "OLED ダーク",
 	"OLED Dark": "OLED ダーク",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama ベース URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama バージョン",
 	"Ollama Version": "Ollama バージョン",
 	"On": "オン",
 	"On": "オン",
 	"Only": "のみ",
 	"Only": "のみ",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "კარგი, წავედით!",
 	"Okay, Let's Go!": "კარგი, წავედით!",
 	"OLED Dark": "OLED მუქი",
 	"OLED Dark": "OLED მუქი",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama ბაზისური მისამართი",
+	"Ollama API": "",
 	"Ollama Version": "Ollama ვერსია",
 	"Ollama Version": "Ollama ვერსია",
 	"On": "ჩართვა",
 	"On": "ჩართვა",
 	"Only": "მხოლოდ",
 	"Only": "მხოლოდ",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "그렇습니다, 시작합시다!",
 	"Okay, Let's Go!": "그렇습니다, 시작합시다!",
 	"OLED Dark": "OLED 어두운",
 	"OLED Dark": "OLED 어두운",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama 기본 URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama 버전",
 	"Ollama Version": "Ollama 버전",
 	"On": "켜기",
 	"On": "켜기",
 	"Only": "오직",
 	"Only": "오직",

+ 4 - 0
src/lib/i18n/locales/languages.json

@@ -23,6 +23,10 @@
 		"code": "ca-ES",
 		"code": "ca-ES",
 		"title": "Catalan (català)"
 		"title": "Catalan (català)"
 	},
 	},
+	{
+		"code": "ceb-PH",
+		"title": "Cebuano (Filipino)"
+	},
 	{
 	{
 		"code": "de-DE",
 		"code": "de-DE",
 		"title": "German (Deutsch)"
 		"title": "German (Deutsch)"

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Okay, Laten we gaan!",
 	"Okay, Let's Go!": "Okay, Laten we gaan!",
 	"OLED Dark": "OLED Donker",
 	"OLED Dark": "OLED Donker",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama Basis URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama Versie",
 	"Ollama Version": "Ollama Versie",
 	"On": "Aan",
 	"On": "Aan",
 	"Only": "Alleen",
 	"Only": "Alleen",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "ਠੀਕ ਹੈ, ਚੱਲੋ ਚੱਲੀਏ!",
 	"Okay, Let's Go!": "ਠੀਕ ਹੈ, ਚੱਲੋ ਚੱਲੀਏ!",
 	"OLED Dark": "OLED ਗੂੜ੍ਹਾ",
 	"OLED Dark": "OLED ਗੂੜ੍ਹਾ",
 	"Ollama": "ਓਲਾਮਾ",
 	"Ollama": "ਓਲਾਮਾ",
-	"Ollama Base URL": "ਓਲਾਮਾ ਬੇਸ URL",
+	"Ollama API": "",
 	"Ollama Version": "ਓਲਾਮਾ ਵਰਜਨ",
 	"Ollama Version": "ਓਲਾਮਾ ਵਰਜਨ",
 	"On": "ਚਾਲੂ",
 	"On": "ਚਾਲੂ",
 	"Only": "ਸਿਰਫ਼",
 	"Only": "ਸਿਰਫ਼",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Okej, zaczynamy!",
 	"Okay, Let's Go!": "Okej, zaczynamy!",
 	"OLED Dark": "Ciemny OLED",
 	"OLED Dark": "Ciemny OLED",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Adres bazowy URL Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Wersja Ollama",
 	"Ollama Version": "Wersja Ollama",
 	"On": "Włączony",
 	"On": "Włączony",
 	"Only": "Tylko",
 	"Only": "Tylko",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"OLED Dark": "OLED Escuro",
 	"OLED Dark": "OLED Escuro",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL Base do Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Versão do Ollama",
 	"Ollama Version": "Versão do Ollama",
 	"On": "Ligado",
 	"On": "Ligado",
 	"Only": "Somente",
 	"Only": "Somente",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"Okay, Let's Go!": "Ok, Vamos Lá!",
 	"OLED Dark": "OLED Escuro",
 	"OLED Dark": "OLED Escuro",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL Base do Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Versão do Ollama",
 	"Ollama Version": "Versão do Ollama",
 	"On": "Ligado",
 	"On": "Ligado",
 	"Only": "Somente",
 	"Only": "Somente",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Давайте начнём!",
 	"Okay, Let's Go!": "Давайте начнём!",
 	"OLED Dark": "OLED темная",
 	"OLED Dark": "OLED темная",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Базовый адрес URL Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Версия Ollama",
 	"Ollama Version": "Версия Ollama",
 	"On": "Включено.",
 	"On": "Включено.",
 	"Only": "Только",
 	"Only": "Только",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "У реду, хајде да кренемо!",
 	"Okay, Let's Go!": "У реду, хајде да кренемо!",
 	"OLED Dark": "OLED тамна",
 	"OLED Dark": "OLED тамна",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Основна адреса Ollama-е",
+	"Ollama API": "",
 	"Ollama Version": "Издање Ollama-е",
 	"Ollama Version": "Издање Ollama-е",
 	"On": "Укључено",
 	"On": "Укључено",
 	"Only": "Само",
 	"Only": "Само",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Okej, nu kör vi!",
 	"Okay, Let's Go!": "Okej, nu kör vi!",
 	"OLED Dark": "OLED mörkt",
 	"OLED Dark": "OLED mörkt",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama bas-URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama-version",
 	"Ollama Version": "Ollama-version",
 	"On": "På",
 	"On": "På",
 	"Only": "Endast",
 	"Only": "Endast",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Tamam, Hadi Başlayalım!",
 	"Okay, Let's Go!": "Tamam, Hadi Başlayalım!",
 	"OLED Dark": "OLED Koyu",
 	"OLED Dark": "OLED Koyu",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama Temel URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama Sürümü",
 	"Ollama Version": "Ollama Sürümü",
 	"On": "Açık",
 	"On": "Açık",
 	"Only": "Yalnızca",
 	"Only": "Yalnızca",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "Гаразд, давайте почнемо!",
 	"Okay, Let's Go!": "Гаразд, давайте почнемо!",
 	"OLED Dark": "Темний OLED",
 	"OLED Dark": "Темний OLED",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "URL-адреса Ollama",
+	"Ollama API": "",
 	"Ollama Version": "Версія Ollama",
 	"Ollama Version": "Версія Ollama",
 	"On": "Увімк",
 	"On": "Увімк",
 	"Only": "Тільки",
 	"Only": "Тільки",

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

@@ -302,7 +302,7 @@
 	"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",
 	"OLED Dark": "OLED Dark",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Đường dẫn tới API của Ollama (Ollama Base URL)",
+	"Ollama API": "",
 	"Ollama Version": "Phiên bản Ollama",
 	"Ollama Version": "Phiên bản Ollama",
 	"On": "Bật",
 	"On": "Bật",
 	"Only": "Only",
 	"Only": "Only",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "好的,我们开始吧!",
 	"Okay, Let's Go!": "好的,我们开始吧!",
 	"OLED Dark": "暗黑色",
 	"OLED Dark": "暗黑色",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama 基础 URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama 版本",
 	"Ollama Version": "Ollama 版本",
 	"On": "开",
 	"On": "开",
 	"Only": "仅",
 	"Only": "仅",

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

@@ -302,7 +302,7 @@
 	"Okay, Let's Go!": "好的,啟動吧!",
 	"Okay, Let's Go!": "好的,啟動吧!",
 	"OLED Dark": "`",
 	"OLED Dark": "`",
 	"Ollama": "Ollama",
 	"Ollama": "Ollama",
-	"Ollama Base URL": "Ollama 基本 URL",
+	"Ollama API": "",
 	"Ollama Version": "Ollama 版本",
 	"Ollama Version": "Ollama 版本",
 	"On": "開啟",
 	"On": "開啟",
 	"Only": "僅有",
 	"Only": "僅有",

+ 20 - 8
src/routes/(app)/+layout.svelte

@@ -87,17 +87,29 @@
 				// IndexedDB Not Found
 				// IndexedDB Not Found
 			}
 			}
 
 
-			await models.set(await getModels());
-			await settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
-
-			await modelfiles.set(await getModelfiles(localStorage.token));
-			await prompts.set(await getPrompts(localStorage.token));
-			await documents.set(await getDocs(localStorage.token));
-			await tags.set(await getAllChatTags(localStorage.token));
+			settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
+
+			await Promise.all([
+				(async () => {
+					models.set(await getModels());
+				})(),
+				(async () => {
+					modelfiles.set(await getModelfiles(localStorage.token));
+				})(),
+				(async () => {
+					prompts.set(await getPrompts(localStorage.token));
+				})(),
+				(async () => {
+					documents.set(await getDocs(localStorage.token));
+				})(),
+				(async () => {
+					tags.set(await getAllChatTags(localStorage.token));
+				})()
+			]);
 
 
 			modelfiles.subscribe(async () => {
 			modelfiles.subscribe(async () => {
 				// should fetch models
 				// should fetch models
-				await models.set(await getModels());
+				models.set(await getModels());
 			});
 			});
 
 
 			document.addEventListener('keydown', function (event) {
 			document.addEventListener('keydown', function (event) {