Browse Source

Merge pull request #2140 from cheahjs/feat/model-config

feat: configurable model name, description and vision capability
Timothy Jaeryang Baek 11 tháng trước cách đây
mục cha
commit
f34fd3fbe1
56 tập tin đã thay đổi với 1314 bổ sung127 xóa
  1. 19 2
      backend/apps/litellm/main.py
  2. 11 1
      backend/apps/ollama/main.py
  3. 12 2
      backend/apps/openai/main.py
  4. 12 0
      backend/apps/web/internal/db.py
  5. 55 0
      backend/apps/web/internal/migrations/009_add_models.py
  6. 136 0
      backend/apps/web/models/models.py
  7. 31 2
      backend/main.py
  8. 74 0
      src/lib/apis/index.ts
  9. 2 1
      src/lib/apis/litellm/index.ts
  10. 6 1
      src/lib/apis/openai/index.ts
  11. 1 1
      src/lib/components/admin/Settings/Users.svelte
  12. 81 63
      src/lib/components/chat/Chat.svelte
  13. 92 9
      src/lib/components/chat/MessageInput.svelte
  14. 5 3
      src/lib/components/chat/MessageInput/Models.svelte
  15. 1 1
      src/lib/components/chat/Messages/ResponseMessage.svelte
  16. 1 1
      src/lib/components/chat/ModelSelector.svelte
  17. 39 6
      src/lib/components/chat/ModelSelector/Selector.svelte
  18. 5 2
      src/lib/components/chat/Settings/Interface.svelte
  19. 251 20
      src/lib/components/chat/Settings/Models.svelte
  20. 2 1
      src/lib/components/common/Tooltip.svelte
  21. 4 1
      src/lib/components/documents/Settings/General.svelte
  22. 1 1
      src/lib/components/workspace/Playground.svelte
  23. 14 0
      src/lib/i18n/locales/ar-BH/translation.json
  24. 14 0
      src/lib/i18n/locales/bg-BG/translation.json
  25. 14 0
      src/lib/i18n/locales/bn-BD/translation.json
  26. 14 0
      src/lib/i18n/locales/ca-ES/translation.json
  27. 14 0
      src/lib/i18n/locales/de-DE/translation.json
  28. 14 0
      src/lib/i18n/locales/dg-DG/translation.json
  29. 14 0
      src/lib/i18n/locales/en-GB/translation.json
  30. 14 0
      src/lib/i18n/locales/en-US/translation.json
  31. 14 0
      src/lib/i18n/locales/es-ES/translation.json
  32. 14 0
      src/lib/i18n/locales/fa-IR/translation.json
  33. 14 0
      src/lib/i18n/locales/fi-FI/translation.json
  34. 14 0
      src/lib/i18n/locales/fr-CA/translation.json
  35. 14 0
      src/lib/i18n/locales/fr-FR/translation.json
  36. 14 0
      src/lib/i18n/locales/he-IL/translation.json
  37. 14 0
      src/lib/i18n/locales/hi-IN/translation.json
  38. 14 0
      src/lib/i18n/locales/hr-HR/translation.json
  39. 14 0
      src/lib/i18n/locales/it-IT/translation.json
  40. 14 0
      src/lib/i18n/locales/ja-JP/translation.json
  41. 14 0
      src/lib/i18n/locales/ka-GE/translation.json
  42. 14 0
      src/lib/i18n/locales/ko-KR/translation.json
  43. 14 0
      src/lib/i18n/locales/nl-NL/translation.json
  44. 14 0
      src/lib/i18n/locales/pa-IN/translation.json
  45. 14 0
      src/lib/i18n/locales/pl-PL/translation.json
  46. 14 0
      src/lib/i18n/locales/pt-BR/translation.json
  47. 14 0
      src/lib/i18n/locales/pt-PT/translation.json
  48. 14 0
      src/lib/i18n/locales/ru-RU/translation.json
  49. 14 0
      src/lib/i18n/locales/sr-RS/translation.json
  50. 14 0
      src/lib/i18n/locales/sv-SE/translation.json
  51. 14 0
      src/lib/i18n/locales/tr-TR/translation.json
  52. 14 0
      src/lib/i18n/locales/uk-UA/translation.json
  53. 14 0
      src/lib/i18n/locales/vi-VN/translation.json
  54. 14 0
      src/lib/i18n/locales/zh-CN/translation.json
  55. 14 0
      src/lib/i18n/locales/zh-TW/translation.json
  56. 11 9
      src/lib/stores/index.ts

+ 19 - 2
backend/apps/litellm/main.py

@@ -18,8 +18,9 @@ import requests
 from pydantic import BaseModel, ConfigDict
 from typing import Optional, List
 
+from apps.web.models.models import Models
 from utils.utils import get_verified_user, get_current_user, get_admin_user
-from config import SRC_LOG_LEVELS, ENV
+from config import SRC_LOG_LEVELS
 from constants import MESSAGES
 
 import os
@@ -77,7 +78,7 @@ with open(LITELLM_CONFIG_DIR, "r") as file:
 
 app.state.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER.value
 app.state.MODEL_FILTER_LIST = MODEL_FILTER_LIST.value
-
+app.state.MODEL_CONFIG = Models.get_all_models()
 
 app.state.ENABLE = ENABLE_LITELLM
 app.state.CONFIG = litellm_config
@@ -241,6 +242,8 @@ async def get_models(user=Depends(get_current_user)):
                         )
                     )
 
+            for model in data["data"]:
+                add_custom_info_to_model(model)
             return data
         except Exception as e:
 
@@ -261,6 +264,14 @@ async def get_models(user=Depends(get_current_user)):
                         "object": "model",
                         "created": int(time.time()),
                         "owned_by": "openai",
+                        "custom_info": next(
+                            (
+                                item
+                                for item in app.state.MODEL_CONFIG
+                                if item.id == model["model_name"]
+                            ),
+                            None,
+                        ),
                     }
                     for model in app.state.CONFIG["model_list"]
                 ],
@@ -273,6 +284,12 @@ async def get_models(user=Depends(get_current_user)):
         }
 
 
+def add_custom_info_to_model(model: dict):
+    model["custom_info"] = next(
+        (item for item in app.state.MODEL_CONFIG if item.id == model["id"]), None
+    )
+
+
 @app.get("/model/info")
 async def get_model_list(user=Depends(get_admin_user)):
     return {"data": app.state.CONFIG["model_list"]}

+ 11 - 1
backend/apps/ollama/main.py

@@ -29,7 +29,7 @@ import time
 from urllib.parse import urlparse
 from typing import Optional, List, Union
 
-
+from apps.web.models.models import Models
 from apps.web.models.users import Users
 from constants import ERROR_MESSAGES
 from utils.utils import (
@@ -67,6 +67,7 @@ app.state.config = AppConfig()
 
 app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
 app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
+app.state.MODEL_CONFIG = Models.get_all_models()
 
 
 app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API
@@ -191,12 +192,21 @@ async def get_all_models():
 
     else:
         models = {"models": []}
+        
+    for model in models["models"]:
+        add_custom_info_to_model(model)
 
     app.state.MODELS = {model["model"]: model for model in models["models"]}
 
     return models
 
 
+def add_custom_info_to_model(model: dict):
+    model["custom_info"] = next(
+        (item for item in app.state.MODEL_CONFIG if item.id == model["model"]), None
+    )
+
+
 @app.get("/api/tags")
 @app.get("/api/tags/{url_idx}")
 async def get_ollama_tags(

+ 12 - 2
backend/apps/openai/main.py

@@ -10,7 +10,7 @@ import logging
 
 from pydantic import BaseModel
 
-
+from apps.web.models.models import Models
 from apps.web.models.users import Users
 from constants import ERROR_MESSAGES
 from utils.utils import (
@@ -52,6 +52,7 @@ app.state.config = AppConfig()
 
 app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
 app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
+app.state.MODEL_CONFIG = Models.get_all_models()
 
 
 app.state.config.ENABLE_OPENAI_API = ENABLE_OPENAI_API
@@ -249,10 +250,19 @@ async def get_all_models():
             )
         }
 
+        for model in models["data"]:
+            add_custom_info_to_model(model)
+
         log.info(f"models: {models}")
         app.state.MODELS = {model["id"]: model for model in models["data"]}
 
-        return models
+    return models
+
+
+def add_custom_info_to_model(model: dict):
+    model["custom_info"] = next(
+        (item for item in app.state.MODEL_CONFIG if item.id == model["id"]), None
+    )
 
 
 @app.get("/models")

+ 12 - 0
backend/apps/web/internal/db.py

@@ -1,3 +1,5 @@
+import json
+
 from peewee import *
 from peewee_migrate import Router
 from playhouse.db_url import connect
@@ -8,6 +10,16 @@ import logging
 log = logging.getLogger(__name__)
 log.setLevel(SRC_LOG_LEVELS["DB"])
 
+
+class JSONField(TextField):
+    def db_value(self, value):
+        return json.dumps(value)
+
+    def python_value(self, value):
+        if value is not None:
+            return json.loads(value)
+
+
 # Check if the file exists
 if os.path.exists(f"{DATA_DIR}/ollama.db"):
     # Rename the file

+ 55 - 0
backend/apps/web/internal/migrations/009_add_models.py

@@ -0,0 +1,55 @@
+"""Peewee migrations -- 009_add_models.py.
+
+Some examples (model - class or model name)::
+
+    > Model = migrator.orm['table_name']            # Return model in current state by name
+    > Model = migrator.ModelClass                   # Return model in current state by name
+
+    > migrator.sql(sql)                             # Run custom SQL
+    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
+    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
+    > migrator.remove_model(model, cascade=True)    # Remove a model
+    > migrator.add_fields(model, **fields)          # Add fields to a model
+    > migrator.change_fields(model, **fields)       # Change fields
+    > migrator.remove_fields(model, *field_names, cascade=True)
+    > migrator.rename_field(model, old_field_name, new_field_name)
+    > migrator.rename_table(model, new_table_name)
+    > migrator.add_index(model, *col_names, unique=False)
+    > migrator.add_not_null(model, *field_names)
+    > migrator.add_default(model, field_name, default)
+    > migrator.add_constraint(model, name, sql)
+    > migrator.drop_index(model, *col_names)
+    > migrator.drop_not_null(model, *field_names)
+    > migrator.drop_constraints(model, *constraints)
+
+"""
+
+from contextlib import suppress
+
+import peewee as pw
+from peewee_migrate import Migrator
+
+
+with suppress(ImportError):
+    import playhouse.postgres_ext as pw_pext
+
+
+def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
+    """Write your migrations here."""
+
+    @migrator.create_model
+    class Model(pw.Model):
+        id = pw.TextField(unique=True)
+        meta = pw.TextField()
+        base_model_id = pw.TextField(null=True)
+        name = pw.TextField()
+        params = pw.TextField()
+
+        class Meta:
+            table_name = "model"
+
+
+def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
+    """Write your rollback migrations here."""
+
+    migrator.remove_model("model")

+ 136 - 0
backend/apps/web/models/models.py

@@ -0,0 +1,136 @@
+import json
+import logging
+from typing import Optional
+
+import peewee as pw
+from playhouse.shortcuts import model_to_dict
+from pydantic import BaseModel
+
+from apps.web.internal.db import DB, JSONField
+
+from config import SRC_LOG_LEVELS
+
+log = logging.getLogger(__name__)
+log.setLevel(SRC_LOG_LEVELS["MODELS"])
+
+
+####################
+# Models DB Schema
+####################
+
+
+# ModelParams is a model for the data stored in the params field of the Model table
+# It isn't currently used in the backend, but it's here as a reference
+class ModelParams(BaseModel):
+    pass
+
+
+# ModelMeta is a model for the data stored in the meta field of the Model table
+# It isn't currently used in the backend, but it's here as a reference
+class ModelMeta(BaseModel):
+    description: str
+    """
+        User-facing description of the model.
+    """
+
+    vision_capable: bool
+    """
+        A flag indicating if the model is capable of vision and thus image inputs
+    """
+
+
+class Model(pw.Model):
+    id = pw.TextField(unique=True)
+    """
+        The model's id as used in the API. If set to an existing model, it will override the model.
+    """
+
+    meta = JSONField()
+    """
+        Holds a JSON encoded blob of metadata, see `ModelMeta`.
+    """
+
+    base_model_id = pw.TextField(null=True)
+    """
+        An optional pointer to the actual model that should be used when proxying requests.
+        Currently unused - but will be used to support Modelfile like behaviour in the future
+    """
+
+    name = pw.TextField()
+    """
+        The human-readable display name of the model.
+    """
+
+    params = JSONField()
+    """
+        Holds a JSON encoded blob of parameters, see `ModelParams`.
+    """
+
+    class Meta:
+        database = DB
+
+
+class ModelModel(BaseModel):
+    id: str
+    meta: ModelMeta
+    base_model_id: Optional[str] = None
+    name: str
+    params: ModelParams
+
+
+####################
+# Forms
+####################
+
+
+class ModelsTable:
+
+    def __init__(
+        self,
+        db: pw.SqliteDatabase | pw.PostgresqlDatabase,
+    ):
+        self.db = db
+        self.db.create_tables([Model])
+
+    def get_all_models(self) -> list[ModelModel]:
+        return [ModelModel(**model_to_dict(model)) for model in Model.select()]
+
+    def update_all_models(self, models: list[ModelModel]) -> bool:
+        try:
+            with self.db.atomic():
+                # Fetch current models from the database
+                current_models = self.get_all_models()
+                current_model_dict = {model.id: model for model in current_models}
+
+                # Create a set of model IDs from the current models and the new models
+                current_model_keys = set(current_model_dict.keys())
+                new_model_keys = set(model.id for model in models)
+
+                # Determine which models need to be created, updated, or deleted
+                models_to_create = [
+                    model for model in models if model.id not in current_model_keys
+                ]
+                models_to_update = [
+                    model for model in models if model.id in current_model_keys
+                ]
+                models_to_delete = current_model_keys - new_model_keys
+
+                # Perform the necessary database operations
+                for model in models_to_create:
+                    Model.create(**model.model_dump())
+
+                for model in models_to_update:
+                    Model.update(**model.model_dump()).where(
+                        Model.id == model.id
+                    ).execute()
+
+                for model_id, model_source in models_to_delete:
+                    Model.delete().where(Model.id == model_id).execute()
+
+            return True
+        except Exception as e:
+            log.exception(e)
+            return False
+
+
+Models = ModelsTable(DB)

+ 31 - 2
backend/main.py

@@ -36,9 +36,9 @@ from apps.web.main import app as webui_app
 
 import asyncio
 from pydantic import BaseModel
-from typing import List
-
+from typing import List, Optional
 
+from apps.web.models.models import Models, ModelModel
 from utils.utils import get_admin_user
 from apps.rag.utils import rag_messages
 
@@ -113,6 +113,8 @@ app.state.config = AppConfig()
 app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
 app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
 
+app.state.MODEL_CONFIG = Models.get_all_models()
+
 app.state.config.WEBHOOK_URL = WEBHOOK_URL
 
 origins = ["*"]
@@ -318,6 +320,33 @@ async def update_model_filter_config(
     }
 
 
+class SetModelConfigForm(BaseModel):
+    models: List[ModelModel]
+
+
+@app.post("/api/config/models")
+async def update_model_config(
+    form_data: SetModelConfigForm, user=Depends(get_admin_user)
+):
+    if not Models.update_all_models(form_data.models):
+        raise HTTPException(
+            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
+            detail=ERROR_MESSAGES.DEFAULT("Failed to update model config"),
+        )
+
+    ollama_app.state.MODEL_CONFIG = form_data.models
+    openai_app.state.MODEL_CONFIG = form_data.models
+    litellm_app.state.MODEL_CONFIG = form_data.models
+    app.state.MODEL_CONFIG = form_data.models
+
+    return {"models": app.state.MODEL_CONFIG}
+
+
+@app.get("/api/config/models")
+async def get_model_config(user=Depends(get_admin_user)):
+    return {"models": app.state.MODEL_CONFIG}
+
+
 @app.get("/api/webhook")
 async def get_webhook_url(user=Depends(get_admin_user)):
     return {

+ 74 - 0
src/lib/apis/index.ts

@@ -196,3 +196,77 @@ export const updateWebhookUrl = async (token: string, url: string) => {
 
 	return res.url;
 };
+
+export const getModelConfig = async (token: string): Promise<GlobalModelConfig> => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_BASE_URL}/api/config/models`, {
+		method: 'GET',
+		headers: {
+			'Content-Type': 'application/json',
+			Authorization: `Bearer ${token}`
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			console.log(err);
+			error = err;
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res.models;
+};
+
+export interface ModelConfig {
+	id: string;
+	name: string;
+	meta: ModelMeta;
+	base_model_id?: string;
+	params: ModelParams;
+}
+
+export interface ModelMeta {
+	description?: string;
+	vision_capable?: boolean;
+}
+
+export interface ModelParams {}
+
+export type GlobalModelConfig = ModelConfig[];
+
+export const updateModelConfig = async (token: string, config: GlobalModelConfig) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_BASE_URL}/api/config/models`, {
+		method: 'POST',
+		headers: {
+			'Content-Type': 'application/json',
+			Authorization: `Bearer ${token}`
+		},
+		body: JSON.stringify({
+			models: config
+		})
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.catch((err) => {
+			console.log(err);
+			error = err;
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};

+ 2 - 1
src/lib/apis/litellm/index.ts

@@ -33,7 +33,8 @@ export const getLiteLLMModels = async (token: string = '') => {
 					id: model.id,
 					name: model.name ?? model.id,
 					external: true,
-					source: 'LiteLLM'
+					source: 'LiteLLM',
+					custom_info: model.custom_info
 				}))
 				.sort((a, b) => {
 					return a.name.localeCompare(b.name);

+ 6 - 1
src/lib/apis/openai/index.ts

@@ -230,7 +230,12 @@ export const getOpenAIModels = async (token: string = '') => {
 
 	return models
 		? models
-				.map((model) => ({ id: model.id, name: model.name ?? model.id, external: true }))
+				.map((model) => ({
+					id: model.id,
+					name: model.name ?? model.id,
+					external: true,
+					custom_info: model.custom_info
+				}))
 				.sort((a, b) => {
 					return a.name.localeCompare(b.name);
 				})

+ 1 - 1
src/lib/components/admin/Settings/Users.svelte

@@ -125,7 +125,7 @@
 												<option value="" disabled selected>{$i18n.t('Select a model')}</option>
 												{#each $models.filter((model) => model.id) as model}
 													<option value={model.id} class="bg-gray-100 dark:bg-gray-700"
-														>{model.name}</option
+														>{model.custom_info?.name ?? model.name}</option
 													>
 												{/each}
 											</select>

+ 81 - 63
src/lib/components/chat/Chat.svelte

@@ -10,6 +10,7 @@
 		chatId,
 		chats,
 		config,
+		type Model,
 		modelfiles,
 		models,
 		settings,
@@ -60,7 +61,7 @@
 	let showModelSelector = true;
 
 	let selectedModels = [''];
-	let atSelectedModel = '';
+	let atSelectedModel: Model | undefined;
 
 	let selectedModelfile = null;
 	$: selectedModelfile =
@@ -328,75 +329,91 @@
 		const _chatId = JSON.parse(JSON.stringify($chatId));
 
 		await Promise.all(
-			(modelId ? [modelId] : atSelectedModel !== '' ? [atSelectedModel.id] : selectedModels).map(
-				async (modelId) => {
-					console.log('modelId', modelId);
-					const model = $models.filter((m) => m.id === modelId).at(0);
-
-					if (model) {
-						// Create response message
-						let responseMessageId = uuidv4();
-						let responseMessage = {
-							parentId: parentId,
-							id: responseMessageId,
-							childrenIds: [],
-							role: 'assistant',
-							content: '',
-							model: model.id,
-							userContext: null,
-							timestamp: Math.floor(Date.now() / 1000) // Unix epoch
-						};
-
-						// Add message to history and Set currentId to messageId
-						history.messages[responseMessageId] = responseMessage;
-						history.currentId = responseMessageId;
-
-						// Append messageId to childrenIds of parent message
-						if (parentId !== null) {
-							history.messages[parentId].childrenIds = [
-								...history.messages[parentId].childrenIds,
-								responseMessageId
-							];
-						}
-
-						await tick();
+			(modelId
+				? [modelId]
+				: atSelectedModel !== undefined
+				? [atSelectedModel.id]
+				: selectedModels
+			).map(async (modelId) => {
+				console.log('modelId', modelId);
+				const model = $models.filter((m) => m.id === modelId).at(0);
+
+				if (model) {
+					// If there are image files, check if model is vision capable
+					const hasImages = messages.some((message) =>
+						message.files?.some((file) => file.type === 'image')
+					);
+					if (hasImages && !(model.custom_info?.meta.vision_capable ?? true)) {
+						toast.error(
+							$i18n.t('Model {{modelName}} is not vision capable', {
+								modelName: model.custom_info?.name ?? model.name ?? model.id
+							})
+						);
+					}
 
-						let userContext = null;
-						if ($settings?.memory ?? false) {
-							if (userContext === null) {
-								const res = await queryMemory(localStorage.token, prompt).catch((error) => {
-									toast.error(error);
-									return null;
-								});
-
-								if (res) {
-									if (res.documents[0].length > 0) {
-										userContext = res.documents.reduce((acc, doc, index) => {
-											const createdAtTimestamp = res.metadatas[index][0].created_at;
-											const createdAtDate = new Date(createdAtTimestamp * 1000)
-												.toISOString()
-												.split('T')[0];
-											acc.push(`${index + 1}. [${createdAtDate}]. ${doc[0]}`);
-											return acc;
-										}, []);
-									}
+					// Create response message
+					let responseMessageId = uuidv4();
+					let responseMessage = {
+						parentId: parentId,
+						id: responseMessageId,
+						childrenIds: [],
+						role: 'assistant',
+						content: '',
+						model: model.id,
+						modelName: model.custom_info?.name ?? model.name ?? model.id,
+						userContext: null,
+						timestamp: Math.floor(Date.now() / 1000) // Unix epoch
+					};
+
+					// Add message to history and Set currentId to messageId
+					history.messages[responseMessageId] = responseMessage;
+					history.currentId = responseMessageId;
+
+					// Append messageId to childrenIds of parent message
+					if (parentId !== null) {
+						history.messages[parentId].childrenIds = [
+							...history.messages[parentId].childrenIds,
+							responseMessageId
+						];
+					}
 
-									console.log(userContext);
+					await tick();
+
+					let userContext = null;
+					if ($settings?.memory ?? false) {
+						if (userContext === null) {
+							const res = await queryMemory(localStorage.token, prompt).catch((error) => {
+								toast.error(error);
+								return null;
+							});
+
+							if (res) {
+								if (res.documents[0].length > 0) {
+									userContext = res.documents.reduce((acc, doc, index) => {
+										const createdAtTimestamp = res.metadatas[index][0].created_at;
+										const createdAtDate = new Date(createdAtTimestamp * 1000)
+											.toISOString()
+											.split('T')[0];
+										acc.push(`${index + 1}. [${createdAtDate}]. ${doc[0]}`);
+										return acc;
+									}, []);
 								}
+
+								console.log(userContext);
 							}
 						}
-						responseMessage.userContext = userContext;
+					}
+					responseMessage.userContext = userContext;
 
-						if (model?.external) {
-							await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
-						} else if (model) {
-							await sendPromptOllama(model, prompt, responseMessageId, _chatId);
-						}
-					} else {
-						toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
+					if (model?.external) {
+						await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
+					} else if (model) {
+						await sendPromptOllama(model, prompt, responseMessageId, _chatId);
 					}
+				} else {
+					toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
 				}
-			)
+			})
 		);
 
 		await chats.set(await getChatList(localStorage.token));
@@ -855,7 +872,7 @@
 		responseMessage.error = true;
 		responseMessage.content =
 			$i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, {
-				provider: model.name ?? model.id
+				provider: model.custom_info?.name ?? model.name ?? model.id
 			}) +
 			'\n' +
 			errorMessage;
@@ -1049,6 +1066,7 @@
 		bind:prompt
 		bind:autoScroll
 		bind:selectedModel={atSelectedModel}
+		{selectedModels}
 		{messages}
 		{submitPrompt}
 		{stopResponse}

+ 92 - 9
src/lib/components/chat/MessageInput.svelte

@@ -1,7 +1,7 @@
 <script lang="ts">
 	import { toast } from 'svelte-sonner';
 	import { onMount, tick, getContext } from 'svelte';
-	import { mobile, modelfiles, settings, showSidebar } from '$lib/stores';
+	import { type Model, mobile, modelfiles, settings, showSidebar, models } from '$lib/stores';
 	import { blobToFile, calculateSHA256, findWordIndices } from '$lib/utils';
 
 	import {
@@ -27,7 +27,8 @@
 	export let stopResponse: Function;
 
 	export let autoScroll = true;
-	export let selectedModel = '';
+	export let selectedAtModel: Model | undefined;
+	export let selectedModels: [''];
 
 	let chatTextAreaElement: HTMLTextAreaElement;
 	let filesInputElement;
@@ -52,6 +53,8 @@
 
 	let speechRecognition;
 
+	let visionCapableState = 'all';
+
 	$: if (prompt) {
 		if (chatTextAreaElement) {
 			chatTextAreaElement.style.height = '';
@@ -59,6 +62,20 @@
 		}
 	}
 
+	$: {
+		if (selectedAtModel || selectedModels) {
+			visionCapableState = checkModelsAreVisionCapable();
+			if (visionCapableState === 'none') {
+				// Remove all image files
+				const fileCount = files.length;
+				files = files.filter((file) => file.type != 'image');
+				if (files.length < fileCount) {
+					toast.warning($i18n.t('All selected models do not support image input, removed images'));
+				}
+			}
+		}
+	}
+
 	let mediaRecorder;
 	let audioChunks = [];
 	let isRecording = false;
@@ -326,6 +343,35 @@
 		}
 	};
 
+	const checkModelsAreVisionCapable = () => {
+		let modelsToCheck = [];
+		if (selectedAtModel !== undefined) {
+			modelsToCheck = [selectedAtModel.id];
+		} else {
+			modelsToCheck = selectedModels;
+		}
+		if (modelsToCheck.length == 0 || modelsToCheck[0] == '') {
+			return 'all';
+		}
+		let visionCapableCount = 0;
+		for (const modelName of modelsToCheck) {
+			const model = $models.find((m) => m.id === modelName);
+			if (!model) {
+				continue;
+			}
+			if (model.custom_info?.meta.vision_capable ?? true) {
+				visionCapableCount++;
+			}
+		}
+		if (visionCapableCount == modelsToCheck.length) {
+			return 'all';
+		} else if (visionCapableCount == 0) {
+			return 'none';
+		} else {
+			return 'some';
+		}
+	};
+
 	onMount(() => {
 		window.setTimeout(() => chatTextAreaElement?.focus(), 0);
 
@@ -358,6 +404,10 @@
 					inputFiles.forEach((file) => {
 						console.log(file, file.name.split('.').at(-1));
 						if (['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])) {
+							if (visionCapableState == 'none') {
+								toast.error($i18n.t('Selected models do not support image inputs'));
+								return;
+							}
 							let reader = new FileReader();
 							reader.onload = (event) => {
 								files = [
@@ -494,12 +544,12 @@
 						bind:chatInputPlaceholder
 						{messages}
 						on:select={(e) => {
-							selectedModel = e.detail;
+							selectedAtModel = e.detail;
 							chatTextAreaElement?.focus();
 						}}
 					/>
 
-					{#if selectedModel !== ''}
+					{#if selectedAtModel !== undefined}
 						<div
 							class="px-3 py-2.5 text-left w-full flex justify-between items-center absolute bottom-0 left-0 right-0 bg-gradient-to-t from-50% from-white dark:from-gray-900"
 						>
@@ -508,21 +558,23 @@
 									crossorigin="anonymous"
 									alt="model profile"
 									class="size-5 max-w-[28px] object-cover rounded-full"
-									src={$modelfiles.find((modelfile) => modelfile.tagName === selectedModel.id)
+									src={$modelfiles.find((modelfile) => modelfile.tagName === selectedAtModel.id)
 										?.imageUrl ??
 										($i18n.language === 'dg-DG'
 											? `/doge.png`
 											: `${WEBUI_BASE_URL}/static/favicon.png`)}
 								/>
 								<div>
-									Talking to <span class=" font-medium">{selectedModel.name} </span>
+									Talking to <span class=" font-medium"
+										>{selectedAtModel.custom_info?.name ?? selectedAtModel.name}
+									</span>
 								</div>
 							</div>
 							<div>
 								<button
 									class="flex items-center"
 									on:click={() => {
-										selectedModel = '';
+										selectedAtModel = undefined;
 									}}
 								>
 									<XMark />
@@ -550,6 +602,12 @@
 									if (
 										['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])
 									) {
+										if (visionCapableState === 'none') {
+											toast.error($i18n.t('Selected models do not support image inputs'));
+											inputFiles = null;
+											filesInputElement.value = '';
+											return;
+										}
 										let reader = new FileReader();
 										reader.onload = (event) => {
 											files = [
@@ -597,7 +655,32 @@
 								{#each files as file, fileIdx}
 									<div class=" relative group">
 										{#if file.type === 'image'}
-											<img src={file.url} alt="input" class=" h-16 w-16 rounded-xl object-cover" />
+											<div class="relative">
+												<img
+													src={file.url}
+													alt="input"
+													class=" h-16 w-16 rounded-xl object-cover"
+												/>
+												{#if visionCapableState === 'some'}
+													<Tooltip
+														className=" absolute top-0 left-0"
+														content={$i18n.t('A selected model does not support image input')}
+													>
+														<svg
+															xmlns="http://www.w3.org/2000/svg"
+															viewBox="0 0 24 24"
+															fill="currentColor"
+															class="w-6 h-6 fill-yellow-300"
+														>
+															<path
+																fill-rule="evenodd"
+																d="M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"
+																clip-rule="evenodd"
+															/>
+														</svg>
+													</Tooltip>
+												{/if}
+											</div>
 										{:else if file.type === 'doc'}
 											<div
 												class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none"
@@ -883,7 +966,7 @@
 
 									if (e.key === 'Escape') {
 										console.log('Escape');
-										selectedModel = '';
+										selectedAtModel = undefined;
 									}
 								}}
 								rows="1"

+ 5 - 3
src/lib/components/chat/MessageInput/Models.svelte

@@ -21,8 +21,10 @@
 	let filteredModels = [];
 
 	$: filteredModels = $models
-		.filter((p) => p.name.includes(prompt.split(' ')?.at(0)?.substring(1) ?? ''))
-		.sort((a, b) => a.name.localeCompare(b.name));
+		.filter((p) =>
+			(p.custom_info?.name ?? p.name).includes(prompt.split(' ')?.at(0)?.substring(1) ?? '')
+		)
+		.sort((a, b) => (a.custom_info?.name ?? a.name).localeCompare(b.custom_info?.name ?? b.name));
 
 	$: if (prompt) {
 		selectedIdx = 0;
@@ -156,7 +158,7 @@
 								on:focus={() => {}}
 							>
 								<div class=" font-medium text-black line-clamp-1">
-									{model.name}
+									{model.custom_info?.name ?? model.name}
 								</div>
 
 								<!-- <div class=" text-xs text-gray-600 line-clamp-1">

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

@@ -347,7 +347,7 @@
 				{#if message.model in modelfiles}
 					{modelfiles[message.model]?.title}
 				{:else}
-					{message.model ? ` ${message.model}` : ''}
+					{message.modelName ? ` ${message.modelName}` : message.model ? ` ${message.model}` : ''}
 				{/if}
 
 				{#if message.timestamp}

+ 1 - 1
src/lib/components/chat/ModelSelector.svelte

@@ -49,7 +49,7 @@
 							.filter((model) => model.name !== 'hr')
 							.map((model) => ({
 								value: model.id,
-								label: model.name,
+								label: model.custom_info?.name ?? model.name,
 								info: model
 							}))}
 						bind:value={selectedModel}

+ 39 - 6
src/lib/components/chat/ModelSelector/Selector.svelte

@@ -12,7 +12,12 @@
 
 	import { user, MODEL_DOWNLOAD_POOL, models, mobile } from '$lib/stores';
 	import { toast } from 'svelte-sonner';
-	import { capitalizeFirstLetter, getModels, splitStream } from '$lib/utils';
+	import {
+		capitalizeFirstLetter,
+		getModels,
+		sanitizeResponseContent,
+		splitStream
+	} from '$lib/utils';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 
 	const i18n = getContext('i18n');
@@ -23,7 +28,12 @@
 	export let searchEnabled = true;
 	export let searchPlaceholder = $i18n.t('Search a model');
 
-	export let items = [{ value: 'mango', label: 'Mango' }];
+	export let items: {
+		label: string;
+		value: string;
+		// eslint-disable-next-line @typescript-eslint/no-explicit-any
+		[key: string]: any;
+	} = [];
 
 	export let className = 'w-[30rem]';
 
@@ -250,8 +260,8 @@
 							<!-- {JSON.stringify(item.info)} -->
 
 							{#if item.info.external}
-								<Tooltip content={item.info?.source ?? 'External'}>
-									<div class=" mr-2">
+								<Tooltip content={`${item.info?.source ?? 'External'}`}>
+									<div class="">
 										<svg
 											xmlns="http://www.w3.org/2000/svg"
 											viewBox="0 0 16 16"
@@ -279,7 +289,7 @@
 											: ''
 									}${item.info.size ? `(${(item.info.size / 1024 ** 3).toFixed(1)}GB)` : ''}`}
 								>
-									<div class=" mr-2">
+									<div class="">
 										<svg
 											xmlns="http://www.w3.org/2000/svg"
 											fill="none"
@@ -297,8 +307,31 @@
 									</div>
 								</Tooltip>
 							{/if}
+							{#if item.info?.custom_info?.meta.description}
+								<Tooltip
+									content={`${sanitizeResponseContent(
+										item.info.custom_info?.meta.description
+									).replaceAll('\n', '<br>')}`}
+								>
+									<div class="">
+										<svg
+											xmlns="http://www.w3.org/2000/svg"
+											fill="none"
+											viewBox="0 0 24 24"
+											stroke-width="1.5"
+											stroke="currentColor"
+											class="w-4 h-4"
+										>
+											<path
+												stroke-linecap="round"
+												stroke-linejoin="round"
+												d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z"
+											/>
+										</svg>
+									</div>
+								</Tooltip>
+							{/if}
 						</div>
-
 						{#if value === item.value}
 							<div class="ml-auto">
 								<Check />

+ 5 - 2
src/lib/components/chat/Settings/Interface.svelte

@@ -298,7 +298,10 @@
 						{#each $models as model}
 							{#if model.size != null}
 								<option value={model.name} class="bg-gray-100 dark:bg-gray-700">
-									{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}
+									{(model.custom_info?.name ?? model.name) +
+										' (' +
+										(model.size / 1024 ** 3).toFixed(1) +
+										' GB)'}
 								</option>
 							{/if}
 						{/each}
@@ -316,7 +319,7 @@
 						{#each $models as model}
 							{#if model.name !== 'hr'}
 								<option value={model.name} class="bg-gray-100 dark:bg-gray-700">
-									{model.name}
+									{model.custom_info?.name ?? model.name}
 								</option>
 							{/if}
 						{/each}

+ 251 - 20
src/lib/components/chat/Settings/Models.svelte

@@ -13,10 +13,11 @@
 		uploadModel
 	} from '$lib/apis/ollama';
 	import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
-	import { WEBUI_NAME, models, MODEL_DOWNLOAD_POOL, user } from '$lib/stores';
+	import { WEBUI_NAME, models, MODEL_DOWNLOAD_POOL, user, config } from '$lib/stores';
 	import { splitStream } from '$lib/utils';
 	import { onMount, getContext } from 'svelte';
 	import { addLiteLLMModel, deleteLiteLLMModel, getLiteLLMModelInfo } from '$lib/apis/litellm';
+	import { getModelConfig, type GlobalModelConfig, updateModelConfig } from '$lib/apis';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 
 	const i18n = getContext('i18n');
@@ -67,6 +68,23 @@
 
 	let deleteModelTag = '';
 
+	// Model configuration
+	let modelConfig: GlobalModelConfig;
+	let showModelInfo = false;
+	let selectedModelId = '';
+	let modelName = '';
+	let modelDescription = '';
+	let modelIsVisionCapable = false;
+
+	const onModelInfoIdChange = () => {
+		const model = $models.find((m) => m.id === selectedModelId);
+		if (model) {
+			modelName = model.custom_info?.name ?? model.name;
+			modelDescription = model.custom_info?.meta.description ?? '';
+			modelIsVisionCapable = model.custom_info?.meta.vision_capable ?? false;
+		}
+	};
+
 	const updateModelsHandler = async () => {
 		for (const model of $models.filter(
 			(m) =>
@@ -492,18 +510,79 @@
 		models.set(await getModels());
 	};
 
-	onMount(async () => {
-		OLLAMA_URLS = await getOllamaUrls(localStorage.token).catch((error) => {
-			toast.error(error);
-			return [];
+	const addModelInfoHandler = async () => {
+		if (!selectedModelId) {
+			return;
+		}
+		let model = $models.find((m) => m.id === selectedModelId);
+		if (!model) {
+			return;
+		}
+		// Remove any existing config
+		modelConfig = modelConfig.filter(
+			(m) => !(m.id === selectedModelId)
+		);
+		// Add new config
+		modelConfig.push({
+			id: selectedModelId,
+			name: modelName,
+			params: {},
+			meta: {
+				description: modelDescription,
+				vision_capable: modelIsVisionCapable
+			}
 		});
+		await updateModelConfig(localStorage.token, modelConfig);
+		toast.success(
+			$i18n.t('Model info for {{modelName}} added successfully', { modelName: selectedModelId })
+		);
+		models.set(await getModels());
+	};
 
-		if (OLLAMA_URLS.length > 0) {
-			selectedOllamaUrlIdx = 0;
+	const deleteModelInfoHandler = async () => {
+		if (!selectedModelId) {
+			return;
+		}
+		let model = $models.find((m) => m.id === selectedModelId);
+		if (!model) {
+			return;
 		}
+		modelConfig = modelConfig.filter(
+			(m) => !(m.id === selectedModelId)
+		);
+		await updateModelConfig(localStorage.token, modelConfig);
+		toast.success(
+			$i18n.t('Model info for {{modelName}} deleted successfully', { modelName: selectedModelId })
+		);
+		models.set(await getModels());
+	};
 
-		ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false);
-		liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token);
+	const toggleIsVisionCapable = () => {
+		modelIsVisionCapable = !modelIsVisionCapable;
+	};
+
+	onMount(async () => {
+		await Promise.all([
+			(async () => {
+				OLLAMA_URLS = await getOllamaUrls(localStorage.token).catch((error) => {
+					toast.error(error);
+					return [];
+				});
+
+				if (OLLAMA_URLS.length > 0) {
+					selectedOllamaUrlIdx = 0;
+				}
+			})(),
+			(async () => {
+				liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token);
+			})(),
+			(async () => {
+				modelConfig = await getModelConfig(localStorage.token);
+			})(),
+			(async () => {
+				ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false);
+			})()
+		]);
 	});
 </script>
 
@@ -587,24 +666,28 @@
 											viewBox="0 0 24 24"
 											fill="currentColor"
 											xmlns="http://www.w3.org/2000/svg"
-											><style>
+										>
+											<style>
 												.spinner_ajPY {
 													transform-origin: center;
 													animation: spinner_AtaB 0.75s infinite linear;
 												}
+
 												@keyframes spinner_AtaB {
 													100% {
 														transform: rotate(360deg);
 													}
 												}
-											</style><path
+											</style>
+											<path
 												d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 												opacity=".25"
-											/><path
+											/>
+											<path
 												d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 												class="spinner_ajPY"
-											/></svg
-										>
+											/>
+										</svg>
 									</div>
 								{:else}
 									<svg
@@ -705,7 +788,10 @@
 									{/if}
 									{#each $models.filter((m) => m.size != null && (selectedOllamaUrlIdx === null ? true : (m?.urls ?? []).includes(selectedOllamaUrlIdx))) as model}
 										<option value={model.name} class="bg-gray-100 dark:bg-gray-700"
-											>{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}</option
+											>{(model.custom_info?.name ?? model.name) +
+												' (' +
+												(model.size / 1024 ** 3).toFixed(1) +
+												' GB)'}</option
 										>
 									{/each}
 								</select>
@@ -833,24 +919,28 @@
 													viewBox="0 0 24 24"
 													fill="currentColor"
 													xmlns="http://www.w3.org/2000/svg"
-													><style>
+												>
+													<style>
 														.spinner_ajPY {
 															transform-origin: center;
 															animation: spinner_AtaB 0.75s infinite linear;
 														}
+
 														@keyframes spinner_AtaB {
 															100% {
 																transform: rotate(360deg);
 															}
 														}
-													</style><path
+													</style>
+													<path
 														d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 														opacity=".25"
-													/><path
+													/>
+													<path
 														d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 														class="spinner_ajPY"
-													/></svg
-												>
+													/>
+												</svg>
 											</div>
 										{:else}
 											<svg
@@ -932,6 +1022,7 @@
 			<hr class=" dark:border-gray-700 my-2" />
 		{/if}
 
+		<!--TODO: Hide LiteLLM options when ENABLE_LITELLM=false-->
 		<div class=" space-y-3">
 			<div class="mt-2 space-y-3 pr-1.5">
 				<div>
@@ -1126,6 +1217,146 @@
 					{/if}
 				</div>
 			</div>
+			<hr class=" dark:border-gray-700 my-2" />
+		</div>
+
+		<div class=" space-y-3">
+			<div class="mt-2 space-y-3 pr-1.5">
+				<div>
+					<div class="mb-2">
+						<div class="flex justify-between items-center text-xs">
+							<div class=" text-sm font-medium">{$i18n.t('Manage Model Information')}</div>
+							<button
+								class=" text-xs font-medium text-gray-500"
+								type="button"
+								on:click={() => {
+									showModelInfo = !showModelInfo;
+								}}>{showModelInfo ? $i18n.t('Hide') : $i18n.t('Show')}</button
+							>
+						</div>
+					</div>
+
+					{#if showModelInfo}
+						<div>
+							<div class="flex justify-between items-center text-xs">
+								<div class=" text-sm font-medium">{$i18n.t('Current Models')}</div>
+							</div>
+
+							<div class="flex gap-2">
+								<div class="flex-1 pb-1">
+									<select
+										class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+										bind:value={selectedModelId}
+										on:change={onModelInfoIdChange}
+									>
+										{#if !selectedModelId}
+											<option value="" disabled selected>{$i18n.t('Select a model')}</option>
+										{/if}
+										{#each $models as model}
+											<option value={model.id} class="bg-gray-100 dark:bg-gray-700"
+												>{'details' in model
+													? 'Ollama'
+													: model.source === 'LiteLLM'
+													? 'LiteLLM'
+													: 'OpenAI'}: {model.name}{`${
+													model.custom_info?.name ? ' - ' + model.custom_info?.name : ''
+												}`}</option
+											>
+										{/each}
+									</select>
+								</div>
+								<button
+									class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
+									on:click={() => {
+										deleteModelInfoHandler();
+									}}
+								>
+									<svg
+										xmlns="http://www.w3.org/2000/svg"
+										viewBox="0 0 16 16"
+										fill="currentColor"
+										class="w-4 h-4"
+									>
+										<path
+											fill-rule="evenodd"
+											d="M5 3.25V4H2.75a.75.75 0 0 0 0 1.5h.3l.815 8.15A1.5 1.5 0 0 0 5.357 15h5.285a1.5 1.5 0 0 0 1.493-1.35l.815-8.15h.3a.75.75 0 0 0 0-1.5H11v-.75A2.25 2.25 0 0 0 8.75 1h-1.5A2.25 2.25 0 0 0 5 3.25Zm2.25-.75a.75.75 0 0 0-.75.75V4h3v-.75a.75.75 0 0 0-.75-.75h-1.5ZM6.05 6a.75.75 0 0 1 .787.713l.275 5.5a.75.75 0 0 1-1.498.075l-.275-5.5A.75.75 0 0 1 6.05 6Zm3.9 0a.75.75 0 0 1 .712.787l-.275 5.5a.75.75 0 0 1-1.498-.075l.275-5.5a.75.75 0 0 1 .786-.711Z"
+											clip-rule="evenodd"
+										/>
+									</svg>
+								</button>
+							</div>
+
+							{#if selectedModelId}
+								<div>
+									<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Model Display Name')}</div>
+									<div class="flex w-full mb-1.5">
+										<div class="flex-1 mr-2">
+											<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 Model Display Name')}
+												bind:value={modelName}
+												autocomplete="off"
+											/>
+										</div>
+
+										<button
+											class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
+											on:click={() => {
+												addModelInfoHandler();
+											}}
+										>
+											<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>
+									</div>
+								</div>
+
+								<div>
+									<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Model Description')}</div>
+
+									<div class="flex w-full">
+										<div class="flex-1">
+											<textarea
+												class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg -mb-1"
+												rows="2"
+												bind:value={modelDescription}
+											/>
+										</div>
+									</div>
+								</div>
+
+								<div class="py-0.5 flex w-full justify-between">
+									<div class=" self-center text-sm font-medium">
+										{$i18n.t('Is Model Vision Capable')}
+									</div>
+
+									<button
+										class="p-1 px-3sm flex rounded transition"
+										on:click={() => {
+											toggleIsVisionCapable();
+										}}
+										type="button"
+									>
+										{#if modelIsVisionCapable === true}
+											<span class="ml-2 self-center">{$i18n.t('Yes')}</span>
+										{:else}
+											<span class="ml-2 self-center">{$i18n.t('No')}</span>
+										{/if}
+									</button>
+								</div>
+							{/if}
+						</div>
+					{/if}
+				</div>
+			</div>
 		</div>
 	</div>
 </div>

+ 2 - 1
src/lib/components/common/Tooltip.svelte

@@ -5,6 +5,7 @@
 	export let placement = 'top';
 	export let content = `I'm a tooltip!`;
 	export let touch = true;
+	export let className = 'flex';
 
 	let tooltipElement;
 	let tooltipInstance;
@@ -29,6 +30,6 @@
 	});
 </script>
 
-<div bind:this={tooltipElement} aria-label={content} class="flex">
+<div bind:this={tooltipElement} aria-label={content} class={className}>
 	<slot />
 </div>

+ 4 - 1
src/lib/components/documents/Settings/General.svelte

@@ -323,7 +323,10 @@
 							{/if}
 							{#each $models.filter((m) => m.id && !m.external) as model}
 								<option value={model.name} class="bg-gray-100 dark:bg-gray-700"
-									>{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}</option
+									>{(model.custom_info?.name ?? model.name) +
+										' (' +
+										(model.size / 1024 ** 3).toFixed(1) +
+										' GB)'}</option
 								>
 							{/each}
 						</select>

+ 1 - 1
src/lib/components/workspace/Playground.svelte

@@ -325,7 +325,7 @@
 										.filter((model) => model.name !== 'hr')
 										.map((model) => ({
 											value: model.id,
-											label: model.name,
+											label: model.custom_info?.name ?? model.name,
 											info: model
 										}))}
 									bind:value={selectedModelId}

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} ...يفكر",
 	"{{user}}'s Chats": "دردشات {{user}}",
 	"{{webUIName}} Backend Required": "{{webUIName}} مطلوب",
+	"A selected model does not support image input": "",
 	"a user": "مستخدم",
 	"About": "عن",
 	"Account": "الحساب",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "التعليمات المتقدمة",
 	"all": "الكل",
 	"All Documents": "جميع الملفات",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "جميع المستخدمين",
 	"Allow": "يسمح",
 	"Allow Chat Deletion": "يستطيع حذف المحادثات",
@@ -115,6 +117,7 @@
 	"Created at": "أنشئت في",
 	"Created At": "أنشئت من",
 	"Current Model": "الموديل المختار",
+	"Current Models": "",
 	"Current Password": "كلمة السر الحالية",
 	"Custom": "مخصص",
 	"Customize Ollama models for a specific purpose": "تخصيص الموديل Ollama لغرض محدد",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "أدخل LiteLLM API RPM (litllm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "أدخل LiteLLM الموديل (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "أدخل أكثر Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق",
 	"Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات",
 	"Enter Score": "أدخل النتيجة",
@@ -235,6 +239,7 @@
 	"Input commands": "إدخال الأوامر",
 	"Interface": "واجهه المستخدم",
 	"Invalid Tag": "تاق غير صالحة",
+	"Is Model Vision Capable": "",
 	"January": "يناير",
 	"join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ",
 	"Make sure to enclose them with": "تأكد من إرفاقها",
 	"Manage LiteLLM Models": "LiteLLM إدارة نماذج ",
+	"Manage Model Information": "",
 	"Manage Models": "إدارة النماذج",
 	"Manage Ollama Models": "Ollama إدارة موديلات ",
 	"March": "مارس",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل",
 	"Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.",
 	"Model {{modelName}} already exists.": "موجود {{modelName}} موديل بالفعل",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "أسم الموديل",
 	"Model not selected": "لم تختار موديل",
 	"Model Tag Name": "أسم التاق للموديل",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "قم بتسمية ملف النموذج الخاص بك",
 	"New Chat": "دردشة جديدة",
 	"New Password": "كلمة المرور الجديدة",
+	"No": "",
 	"No results found": "لا توجد نتايج",
 	"No source available": "لا يوجد مصدر متاح",
 	"Not factually correct": "ليس صحيحا من حيث الواقع",
@@ -385,6 +397,7 @@
 	"Select a model": "أختار الموديل",
 	"Select an Ollama instance": "أختار سيرفر ",
 	"Select model": " أختار موديل",
+	"Selected models do not support image inputs": "",
 	"Send": "تم",
 	"Send a Message": "يُرجى إدخال طلبك هنا",
 	"Send message": "يُرجى إدخال طلبك هنا.",
@@ -492,6 +505,7 @@
 	"Workspace": "مساحة العمل",
 	"Write a prompt suggestion (e.g. Who are you?)": "اكتب اقتراحًا سريعًا (على سبيل المثال، من أنت؟)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]",
+	"Yes": "",
 	"Yesterday": "أمس",
 	"You": "انت",
 	"You have no archived conversations.": "لا تملك محادثات محفوظه",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} мисли ...",
 	"{{user}}'s Chats": "{{user}}'s чатове",
 	"{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд",
+	"A selected model does not support image input": "",
 	"a user": "потребител",
 	"About": "Относно",
 	"Account": "Акаунт",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Разширени Параметри",
 	"all": "всички",
 	"All Documents": "Всички Документи",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Всички Потребители",
 	"Allow": "Позволи",
 	"Allow Chat Deletion": "Позволи Изтриване на Чат",
@@ -115,6 +117,7 @@
 	"Created at": "Създадено на",
 	"Created At": "Създадено на",
 	"Current Model": "Текущ модел",
+	"Current Models": "",
 	"Current Password": "Текуща Парола",
 	"Custom": "Персонализиран",
 	"Customize Ollama models for a specific purpose": "Персонализиране на Ollama моделите за конкретна цел",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Въведете LiteLLM API RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Въведете LiteLLM Model (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Въведете Max Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Въведете таг на модел (напр. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)",
 	"Enter Score": "Въведете оценка",
@@ -235,6 +239,7 @@
 	"Input commands": "Въведете команди",
 	"Interface": "Интерфейс",
 	"Invalid Tag": "Невалиден тег",
+	"Is Model Vision Capable": "",
 	"January": "Януари",
 	"join our Discord for help.": "свържете се с нашия Discord за помощ.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Направено от OpenWebUI общността",
 	"Make sure to enclose them with": "Уверете се, че са заключени с",
 	"Manage LiteLLM Models": "Управление на LiteLLM Моделите",
+	"Manage Model Information": "",
 	"Manage Models": "Управление на Моделите",
 	"Manage Ollama Models": "Управление на Ollama Моделите",
 	"March": "Март",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.",
 	"Model {{modelId}} not found": "Моделът {{modelId}} не е намерен",
 	"Model {{modelName}} already exists.": "Моделът {{modelName}} вече съществува.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Име на модел",
 	"Model not selected": "Не е избран модел",
 	"Model Tag Name": "Име на таг на модел",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Име на модфайла",
 	"New Chat": "Нов чат",
 	"New Password": "Нова парола",
+	"No": "",
 	"No results found": "Няма намерени резултати",
 	"No source available": "Няма наличен източник",
 	"Not factually correct": "Не е фактологически правилно",
@@ -385,6 +397,7 @@
 	"Select a model": "Изберете модел",
 	"Select an Ollama instance": "Изберете Ollama инстанция",
 	"Select model": "Изберете модел",
+	"Selected models do not support image inputs": "",
 	"Send": "Изпрати",
 	"Send a Message": "Изпращане на Съобщение",
 	"Send message": "Изпращане на съобщение",
@@ -492,6 +505,7 @@
 	"Workspace": "Работно пространство",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напиши предложение за промпт (напр. Кой сте вие?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].",
+	"Yes": "",
 	"Yesterday": "вчера",
 	"You": "вие",
 	"You have no archived conversations.": "Нямате архивирани разговори.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} চিন্তা করছে...",
 	"{{user}}'s Chats": "{{user}}র চ্যাটস",
 	"{{webUIName}} Backend Required": "{{webUIName}} ব্যাকএন্ড আবশ্যক",
+	"A selected model does not support image input": "",
 	"a user": "একজন ব্যাবহারকারী",
 	"About": "সম্পর্কে",
 	"Account": "একাউন্ট",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "এডভান্সড প্যারামিটার্স",
 	"all": "সব",
 	"All Documents": "সব ডকুমেন্ট",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "সব ইউজার",
 	"Allow": "অনুমোদন",
 	"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
@@ -115,6 +117,7 @@
 	"Created at": "নির্মানকাল",
 	"Created At": "নির্মানকাল",
 	"Current Model": "বর্তমান মডেল",
+	"Current Models": "",
 	"Current Password": "বর্তমান পাসওয়ার্ড",
 	"Custom": "কাস্টম",
 	"Customize Ollama models for a specific purpose": "নির্দিষ্ট উদ্দেশ্যে Ollama মডেল পরিবর্তন করুন",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM এপিআই RPM দিন (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM মডেল দিন (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "সর্বোচ্চ টোকেন সংখ্যা দিন (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "মডেল ট্যাগ লিখুন (e.g. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "ধাপের সংখ্যা দিন (যেমন: 50)",
 	"Enter Score": "স্কোর দিন",
@@ -235,6 +239,7 @@
 	"Input commands": "ইনপুট কমান্ডস",
 	"Interface": "ইন্টারফেস",
 	"Invalid Tag": "অবৈধ ট্যাগ",
+	"Is Model Vision Capable": "",
 	"January": "জানুয়ারী",
 	"join our Discord for help.": "সাহায্যের জন্য আমাদের Discord-এ যুক্ত হোন",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত",
 	"Make sure to enclose them with": "এটা দিয়ে বন্ধনী দিতে ভুলবেন না",
 	"Manage LiteLLM Models": "LiteLLM মডেল ব্যবস্থাপনা করুন",
+	"Manage Model Information": "",
 	"Manage Models": "মডেলসমূহ ব্যবস্থাপনা করুন",
 	"Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন",
 	"March": "মার্চ",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।",
 	"Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি",
 	"Model {{modelName}} already exists.": "{{modelName}} মডেল আগে থেকেই আছে",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "মডেল ফাইলসিস্টেম পাথ পাওয়া গেছে। আপডেটের জন্য মডেলের শর্টনেম আবশ্যক, এগিয়ে যাওয়া যাচ্ছে না।",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "মডেলের নাম",
 	"Model not selected": "মডেল নির্বাচন করা হয়নি",
 	"Model Tag Name": "মডেলের ট্যাগ নাম",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "আপনার মডেলফাইলের নাম দিন",
 	"New Chat": "নতুন চ্যাট",
 	"New Password": "নতুন পাসওয়ার্ড",
+	"No": "",
 	"No results found": "কোন ফলাফল পাওয়া যায়নি",
 	"No source available": "কোন উৎস পাওয়া যায়নি",
 	"Not factually correct": "তথ্যগত দিক থেকে সঠিক নয়",
@@ -385,6 +397,7 @@
 	"Select a model": "একটি মডেল নির্বাচন করুন",
 	"Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন",
 	"Select model": "মডেল নির্বাচন করুন",
+	"Selected models do not support image inputs": "",
 	"Send": "পাঠান",
 	"Send a Message": "একটি মেসেজ পাঠান",
 	"Send message": "মেসেজ পাঠান",
@@ -492,6 +505,7 @@
 	"Workspace": "ওয়ার্কস্পেস",
 	"Write a prompt suggestion (e.g. Who are you?)": "একটি প্রম্পট সাজেশন লিখুন (যেমন Who are you?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "৫০ শব্দের মধ্যে [topic or keyword] এর একটি সারসংক্ষেপ লিখুন।",
+	"Yes": "",
 	"Yesterday": "আগামী",
 	"You": "আপনি",
 	"You have no archived conversations.": "আপনার কোনও আর্কাইভ করা কথোপকথন নেই।",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} està pensant...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}",
+	"A selected model does not support image input": "",
 	"a user": "un usuari",
 	"About": "Sobre",
 	"Account": "Compte",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Paràmetres Avançats",
 	"all": "tots",
 	"All Documents": "Tots els Documents",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Tots els Usuaris",
 	"Allow": "Permet",
 	"Allow Chat Deletion": "Permet la Supressió del Xat",
@@ -115,6 +117,7 @@
 	"Created at": "Creat el",
 	"Created At": "Creat el",
 	"Current Model": "Model Actual",
+	"Current Models": "",
 	"Current Password": "Contrasenya Actual",
 	"Custom": "Personalitzat",
 	"Customize Ollama models for a specific purpose": "Personalitza els models Ollama per a un propòsit específic",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Introdueix RPM de LiteLLM API (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Introdueix el Model de LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Introdueix el Màxim de Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Introdueix l'etiqueta del model (p. ex. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Introdueix el Nombre de Passos (p. ex. 50)",
 	"Enter Score": "Introdueix el Puntuació",
@@ -235,6 +239,7 @@
 	"Input commands": "Entra ordres",
 	"Interface": "Interfície",
 	"Invalid Tag": "Etiqueta Inválida",
+	"Is Model Vision Capable": "",
 	"January": "Gener",
 	"join our Discord for help.": "uneix-te al nostre Discord per ajuda.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Creat per la Comunitat OpenWebUI",
 	"Make sure to enclose them with": "Assegura't d'envoltar-los amb",
 	"Manage LiteLLM Models": "Gestiona Models LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Gestiona Models",
 	"Manage Ollama Models": "Gestiona Models Ollama",
 	"March": "Març",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.",
 	"Model {{modelId}} not found": "Model {{modelId}} no trobat",
 	"Model {{modelName}} already exists.": "El model {{modelName}} ja existeix.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per a actualitzar, no es pot continuar.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nom del Model",
 	"Model not selected": "Model no seleccionat",
 	"Model Tag Name": "Nom de l'Etiqueta del Model",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nomena el teu fitxer de model",
 	"New Chat": "Xat Nou",
 	"New Password": "Nova Contrasenya",
+	"No": "",
 	"No results found": "No s'han trobat resultats",
 	"No source available": "Sense font disponible",
 	"Not factually correct": "No està clarament correcte",
@@ -385,6 +397,7 @@
 	"Select a model": "Selecciona un model",
 	"Select an Ollama instance": "Selecciona una instància d'Ollama",
 	"Select model": "Selecciona un model",
+	"Selected models do not support image inputs": "",
 	"Send": "Envia",
 	"Send a Message": "Envia un Missatge",
 	"Send message": "Envia missatge",
@@ -492,6 +505,7 @@
 	"Workspace": "Treball",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escriu una suggerència de prompt (p. ex. Qui ets tu?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escriu un resum en 50 paraules que resumeixi [tema o paraula clau].",
+	"Yes": "",
 	"Yesterday": "Ayer",
 	"You": "Tu",
 	"You have no archived conversations.": "No tens converses arxivades.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} denkt nach...",
 	"{{user}}'s Chats": "{{user}}s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich",
+	"A selected model does not support image input": "",
 	"a user": "ein Benutzer",
 	"About": "Über",
 	"Account": "Account",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Erweiterte Parameter",
 	"all": "Alle",
 	"All Documents": "Alle Dokumente",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Alle Benutzer",
 	"Allow": "Erlauben",
 	"Allow Chat Deletion": "Chat Löschung erlauben",
@@ -115,6 +117,7 @@
 	"Created at": "Erstellt am",
 	"Created At": "Erstellt am",
 	"Current Model": "Aktuelles Modell",
+	"Current Models": "",
 	"Current Password": "Aktuelles Passwort",
 	"Custom": "Benutzerdefiniert",
 	"Customize Ollama models for a specific purpose": "Ollama-Modelle für einen bestimmten Zweck anpassen",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Gib die LiteLLM API RPM ein (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Gib das LiteLLM Model ein (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Gib die maximalen Token ein (litellm_params.max_tokens) an",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Gib den Model-Tag ein",
 	"Enter Number of Steps (e.g. 50)": "Gib die Anzahl an Schritten ein (z.B. 50)",
 	"Enter Score": "Score eingeben",
@@ -235,6 +239,7 @@
 	"Input commands": "Eingabebefehle",
 	"Interface": "Benutzeroberfläche",
 	"Invalid Tag": "Ungültiger Tag",
+	"Is Model Vision Capable": "",
 	"January": "Januar",
 	"join our Discord for help.": "Trete unserem Discord bei, um Hilfe zu erhalten.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Von der OpenWebUI-Community",
 	"Make sure to enclose them with": "Formatiere deine Variablen mit:",
 	"Manage LiteLLM Models": "LiteLLM-Modelle verwalten",
+	"Manage Model Information": "",
 	"Manage Models": "Modelle verwalten",
 	"Manage Ollama Models": "Ollama-Modelle verwalten",
 	"March": "März",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Modell '{{modelTag}}' befindet sich bereits in der Warteschlange zum Herunterladen.",
 	"Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden",
 	"Model {{modelName}} already exists.": "Modell {{modelName}} existiert bereits.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modell-Dateisystempfad erkannt. Modellkurzname ist für das Update erforderlich, Fortsetzung nicht möglich.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Modellname",
 	"Model not selected": "Modell nicht ausgewählt",
 	"Model Tag Name": "Modell-Tag-Name",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Benenne dein modelfile",
 	"New Chat": "Neuer Chat",
 	"New Password": "Neues Passwort",
+	"No": "",
 	"No results found": "Keine Ergebnisse gefunden",
 	"No source available": "Keine Quelle verfügbar.",
 	"Not factually correct": "Nicht sachlich korrekt.",
@@ -385,6 +397,7 @@
 	"Select a model": "Ein Modell auswählen",
 	"Select an Ollama instance": "Eine Ollama Instanz auswählen",
 	"Select model": "Modell auswählen",
+	"Selected models do not support image inputs": "",
 	"Send": "Senden",
 	"Send a Message": "Eine Nachricht senden",
 	"Send message": "Nachricht senden",
@@ -492,6 +505,7 @@
 	"Workspace": "Arbeitsbereich",
 	"Write a prompt suggestion (e.g. Who are you?)": "Gebe einen Prompt-Vorschlag ein (z.B. Wer bist du?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Schreibe eine kurze Zusammenfassung in 50 Wörtern, die [Thema oder Schlüsselwort] zusammenfasst.",
+	"Yes": "",
 	"Yesterday": "Gestern",
 	"You": "Du",
 	"You have no archived conversations.": "Du hast keine archivierten Unterhaltungen.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} is thinkin'...",
 	"{{user}}'s Chats": "",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend Much Required",
+	"A selected model does not support image input": "",
 	"a user": "such user",
 	"About": "Much About",
 	"Account": "Account",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Advanced Parameters",
 	"all": "all",
 	"All Documents": "",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "All Users",
 	"Allow": "Allow",
 	"Allow Chat Deletion": "Allow Delete Chats",
@@ -115,6 +117,7 @@
 	"Created at": "Created at",
 	"Created At": "",
 	"Current Model": "Current Model",
+	"Current Models": "",
 	"Current Password": "Current Password",
 	"Custom": "Custom",
 	"Customize Ollama models for a specific purpose": "Customize Ollama models for purpose",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Enter RPM of LiteLLM API (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Enter Model of LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Enter Maximum Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Enter model doge tag (e.g. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Enter Number of Steps (e.g. 50)",
 	"Enter Score": "",
@@ -235,6 +239,7 @@
 	"Input commands": "Input commands",
 	"Interface": "Interface",
 	"Invalid Tag": "",
+	"Is Model Vision Capable": "",
 	"January": "",
 	"join our Discord for help.": "join our Discord for help.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Made by OpenWebUI Community",
 	"Make sure to enclose them with": "Make sure to enclose them with",
 	"Manage LiteLLM Models": "Manage LiteLLM Models",
+	"Manage Model Information": "",
 	"Manage Models": "Manage Wowdels",
 	"Manage Ollama Models": "Manage Ollama Wowdels",
 	"March": "",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' is already in queue for downloading.",
 	"Model {{modelId}} not found": "Model {{modelId}} not found",
 	"Model {{modelName}} already exists.": "Model {{modelName}} already exists.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model filesystem bark detected. Model shortname is required for update, cannot continue.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Wowdel Name",
 	"Model not selected": "Model not selected",
 	"Model Tag Name": "Wowdel Tag Name",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Name your modelfile",
 	"New Chat": "New Bark",
 	"New Password": "New Barkword",
+	"No": "",
 	"No results found": "",
 	"No source available": "No source available",
 	"Not factually correct": "",
@@ -385,6 +397,7 @@
 	"Select a model": "Select a model much choice",
 	"Select an Ollama instance": "Select an Ollama instance very choose",
 	"Select model": "Select model much choice",
+	"Selected models do not support image inputs": "",
 	"Send": "",
 	"Send a Message": "Send a Message much message",
 	"Send message": "Send message very send",
@@ -492,6 +505,7 @@
 	"Workspace": "",
 	"Write a prompt suggestion (e.g. Who are you?)": "Write a prompt suggestion (e.g. Who are you?) much suggest",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Write a summary in 50 words that summarizes [topic or keyword]. Much summarize.",
+	"Yes": "",
 	"Yesterday": "",
 	"You": "",
 	"You have no archived conversations.": "",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "",
 	"{{user}}'s Chats": "",
 	"{{webUIName}} Backend Required": "",
+	"A selected model does not support image input": "",
 	"a user": "",
 	"About": "",
 	"Account": "",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "",
 	"all": "",
 	"All Documents": "",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "",
 	"Allow": "",
 	"Allow Chat Deletion": "",
@@ -115,6 +117,7 @@
 	"Created at": "",
 	"Created At": "",
 	"Current Model": "",
+	"Current Models": "",
 	"Current Password": "",
 	"Custom": "",
 	"Customize Ollama models for a specific purpose": "",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "",
 	"Enter LiteLLM Model (litellm_params.model)": "",
 	"Enter Max Tokens (litellm_params.max_tokens)": "",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "",
 	"Enter Number of Steps (e.g. 50)": "",
 	"Enter Score": "",
@@ -235,6 +239,7 @@
 	"Input commands": "",
 	"Interface": "",
 	"Invalid Tag": "",
+	"Is Model Vision Capable": "",
 	"January": "",
 	"join our Discord for help.": "",
 	"JSON": "",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "",
 	"Make sure to enclose them with": "",
 	"Manage LiteLLM Models": "",
+	"Manage Model Information": "",
 	"Manage Models": "",
 	"Manage Ollama Models": "",
 	"March": "",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "",
 	"Model {{modelId}} not found": "",
 	"Model {{modelName}} already exists.": "",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "",
 	"Model not selected": "",
 	"Model Tag Name": "",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "",
 	"New Chat": "",
 	"New Password": "",
+	"No": "",
 	"No results found": "",
 	"No source available": "",
 	"Not factually correct": "",
@@ -385,6 +397,7 @@
 	"Select a model": "",
 	"Select an Ollama instance": "",
 	"Select model": "",
+	"Selected models do not support image inputs": "",
 	"Send": "",
 	"Send a Message": "",
 	"Send message": "",
@@ -492,6 +505,7 @@
 	"Workspace": "",
 	"Write a prompt suggestion (e.g. Who are you?)": "",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "",
+	"Yes": "",
 	"Yesterday": "",
 	"You": "",
 	"You have no archived conversations.": "",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "",
 	"{{user}}'s Chats": "",
 	"{{webUIName}} Backend Required": "",
+	"A selected model does not support image input": "",
 	"a user": "",
 	"About": "",
 	"Account": "",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "",
 	"all": "",
 	"All Documents": "",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "",
 	"Allow": "",
 	"Allow Chat Deletion": "",
@@ -115,6 +117,7 @@
 	"Created at": "",
 	"Created At": "",
 	"Current Model": "",
+	"Current Models": "",
 	"Current Password": "",
 	"Custom": "",
 	"Customize Ollama models for a specific purpose": "",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "",
 	"Enter LiteLLM Model (litellm_params.model)": "",
 	"Enter Max Tokens (litellm_params.max_tokens)": "",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "",
 	"Enter Number of Steps (e.g. 50)": "",
 	"Enter Score": "",
@@ -235,6 +239,7 @@
 	"Input commands": "",
 	"Interface": "",
 	"Invalid Tag": "",
+	"Is Model Vision Capable": "",
 	"January": "",
 	"join our Discord for help.": "",
 	"JSON": "",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "",
 	"Make sure to enclose them with": "",
 	"Manage LiteLLM Models": "",
+	"Manage Model Information": "",
 	"Manage Models": "",
 	"Manage Ollama Models": "",
 	"March": "",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "",
 	"Model {{modelId}} not found": "",
 	"Model {{modelName}} already exists.": "",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "",
 	"Model not selected": "",
 	"Model Tag Name": "",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "",
 	"New Chat": "",
 	"New Password": "",
+	"No": "",
 	"No results found": "",
 	"No source available": "",
 	"Not factually correct": "",
@@ -385,6 +397,7 @@
 	"Select a model": "",
 	"Select an Ollama instance": "",
 	"Select model": "",
+	"Selected models do not support image inputs": "",
 	"Send": "",
 	"Send a Message": "",
 	"Send message": "",
@@ -492,6 +505,7 @@
 	"Workspace": "",
 	"Write a prompt suggestion (e.g. Who are you?)": "",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "",
+	"Yes": "",
 	"Yesterday": "",
 	"You": "",
 	"You have no archived conversations.": "",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} está pensando...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido",
+	"A selected model does not support image input": "",
 	"a user": "un usuario",
 	"About": "Sobre nosotros",
 	"Account": "Cuenta",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Parámetros Avanzados",
 	"all": "todo",
 	"All Documents": "Todos los Documentos",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Todos los Usuarios",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Borrar Chats",
@@ -115,6 +117,7 @@
 	"Created at": "Creado en",
 	"Created At": "Creado en",
 	"Current Model": "Modelo Actual",
+	"Current Models": "",
 	"Current Password": "Contraseña Actual",
 	"Custom": "Personalizado",
 	"Customize Ollama models for a specific purpose": "Personaliza los modelos de Ollama para un propósito específico",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Ingrese el RPM de la API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Ingrese el modelo LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Ingrese tokens máximos (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Ingrese la etiqueta del modelo (p.ej. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Ingrese el número de pasos (p.ej., 50)",
 	"Enter Score": "Ingrese la puntuación",
@@ -235,6 +239,7 @@
 	"Input commands": "Ingresar comandos",
 	"Interface": "Interfaz",
 	"Invalid Tag": "Etiqueta Inválida",
+	"Is Model Vision Capable": "",
 	"January": "Enero",
 	"join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Hecho por la comunidad de OpenWebUI",
 	"Make sure to enclose them with": "Asegúrese de adjuntarlos con",
 	"Manage LiteLLM Models": "Administrar Modelos LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Administrar Modelos",
 	"Manage Ollama Models": "Administrar Modelos Ollama",
 	"March": "Marzo",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.",
 	"Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado",
 	"Model {{modelName}} already exists.": "El modelo {{modelName}} ya existe.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Se detectó la ruta del sistema de archivos del modelo. Se requiere el nombre corto del modelo para la actualización, no se puede continuar.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nombre del modelo",
 	"Model not selected": "Modelo no seleccionado",
 	"Model Tag Name": "Nombre de la etiqueta del modelo",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nombra tu modelfile",
 	"New Chat": "Nuevo Chat",
 	"New Password": "Nueva Contraseña",
+	"No": "",
 	"No results found": "No se han encontrado resultados",
 	"No source available": "No hay fuente disponible",
 	"Not factually correct": "No es correcto en todos los aspectos",
@@ -385,6 +397,7 @@
 	"Select a model": "Selecciona un modelo",
 	"Select an Ollama instance": "Seleccione una instancia de Ollama",
 	"Select model": "Selecciona un modelo",
+	"Selected models do not support image inputs": "",
 	"Send": "Enviar",
 	"Send a Message": "Enviar un Mensaje",
 	"Send message": "Enviar Mensaje",
@@ -492,6 +505,7 @@
 	"Workspace": "Espacio de trabajo",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escribe una sugerencia para un prompt (por ejemplo, ¿quién eres?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escribe un resumen en 50 palabras que resuma [tema o palabra clave].",
+	"Yes": "",
 	"Yesterday": "Ayer",
 	"You": "Usted",
 	"You have no archived conversations.": "No tiene conversaciones archivadas.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} در حال فکر کردن است...",
 	"{{user}}'s Chats": "{{user}} چت ها",
 	"{{webUIName}} Backend Required": "بکند {{webUIName}} نیاز است.",
+	"A selected model does not support image input": "",
 	"a user": "یک کاربر",
 	"About": "درباره",
 	"Account": "حساب کاربری",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "پارامترهای پیشرفته",
 	"all": "همه",
 	"All Documents": "تمام سند ها",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "همه کاربران",
 	"Allow": "اجازه دادن",
 	"Allow Chat Deletion": "اجازه حذف گپ",
@@ -115,6 +117,7 @@
 	"Created at": "ایجاد شده در",
 	"Created At": "ایجاد شده در",
 	"Current Model": "مدل فعلی",
+	"Current Models": "",
 	"Current Password": "رمز عبور فعلی",
 	"Custom": "دلخواه",
 	"Customize Ollama models for a specific purpose": "مدل های اولاما را برای یک هدف خاص سفارشی کنید",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "RPM API مربوط به LiteLLM را وارد کنید (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "مدل مربوط به LiteLLM را وارد کنید (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "حداکثر تعداد توکن را وارد کنید (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "تگ مدل را وارد کنید (مثلا {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "تعداد گام ها را وارد کنید (مثال: 50)",
 	"Enter Score": "امتیاز را وارد کنید",
@@ -235,6 +239,7 @@
 	"Input commands": "ورودی دستورات",
 	"Interface": "رابط",
 	"Invalid Tag": "تگ نامعتبر",
+	"Is Model Vision Capable": "",
 	"January": "ژانویه",
 	"join our Discord for help.": "برای کمک به دیسکورد ما بپیوندید.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "ساخته شده توسط OpenWebUI Community",
 	"Make sure to enclose them with": "مطمئن شوید که آنها را با این محصور کنید:",
 	"Manage LiteLLM Models": "Manage LiteLLM Models",
+	"Manage Model Information": "",
 	"Manage Models": "مدیریت مدل\u200cها",
 	"Manage Ollama Models": "مدیریت مدل\u200cهای اولاما",
 	"March": "مارچ",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "مدل '{{modelTag}}' در حال حاضر در صف برای دانلود است.",
 	"Model {{modelId}} not found": "مدل {{modelId}} یافت نشد",
 	"Model {{modelName}} already exists.": "مدل {{modelName}} در حال حاضر وجود دارد.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "مسیر فایل سیستم مدل یافت شد. برای بروزرسانی نیاز است نام کوتاه مدل وجود داشته باشد.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "نام مدل",
 	"Model not selected": "مدل انتخاب نشده",
 	"Model Tag Name": "نام تگ مدل",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "فایل مدل را نام\u200cگذاری کنید",
 	"New Chat": "گپ جدید",
 	"New Password": "رمز عبور جدید",
+	"No": "",
 	"No results found": "نتیجه\u200cای یافت نشد",
 	"No source available": "منبعی در دسترس نیست",
 	"Not factually correct": "اشتباهی فکری نیست",
@@ -385,6 +397,7 @@
 	"Select a model": "انتخاب یک مدل",
 	"Select an Ollama instance": "انتخاب یک نمونه از اولاما",
 	"Select model": "انتخاب یک مدل",
+	"Selected models do not support image inputs": "",
 	"Send": "ارسال",
 	"Send a Message": "ارسال یک پیام",
 	"Send message": "ارسال پیام",
@@ -492,6 +505,7 @@
 	"Workspace": "محیط کار",
 	"Write a prompt suggestion (e.g. Who are you?)": "یک پیشنهاد پرامپت بنویسید (مثلاً شما کی هستید؟)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "خلاصه ای در 50 کلمه بنویسید که [موضوع یا کلمه کلیدی] را خلاصه کند.",
+	"Yes": "",
 	"Yesterday": "دیروز",
 	"You": "شما",
 	"You have no archived conversations.": "شما هیچ گفتگوی ذخیره شده ندارید.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} miettii...",
 	"{{user}}'s Chats": "{{user}}:n keskustelut",
 	"{{webUIName}} Backend Required": "{{webUIName}} backend vaaditaan",
+	"A selected model does not support image input": "",
 	"a user": "käyttäjä",
 	"About": "Tietoja",
 	"Account": "Tili",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Edistyneet parametrit",
 	"all": "kaikki",
 	"All Documents": "Kaikki asiakirjat",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Kaikki käyttäjät",
 	"Allow": "Salli",
 	"Allow Chat Deletion": "Salli keskustelujen poisto",
@@ -115,6 +117,7 @@
 	"Created at": "Luotu",
 	"Created At": "Luotu",
 	"Current Model": "Nykyinen malli",
+	"Current Models": "",
 	"Current Password": "Nykyinen salasana",
 	"Custom": "Mukautettu",
 	"Customize Ollama models for a specific purpose": "Mukauta Ollama-malleja tiettyyn tarkoitukseen",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Syötä LiteLLM-APIn RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Syötä LiteLLM-malli (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Syötä maksimitokenit (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Syötä mallitagi (esim. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Syötä askelien määrä (esim. 50)",
 	"Enter Score": "Syötä pisteet",
@@ -235,6 +239,7 @@
 	"Input commands": "Syötä komennot",
 	"Interface": "Käyttöliittymä",
 	"Invalid Tag": "Virheellinen tagi",
+	"Is Model Vision Capable": "",
 	"January": "tammikuu",
 	"join our Discord for help.": "liity Discordiimme saadaksesi apua.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Tehnyt OpenWebUI-yhteisö",
 	"Make sure to enclose them with": "Varmista, että suljet ne",
 	"Manage LiteLLM Models": "Hallitse LiteLLM-malleja",
+	"Manage Model Information": "",
 	"Manage Models": "Hallitse malleja",
 	"Manage Ollama Models": "Hallitse Ollama-malleja",
 	"March": "maaliskuu",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Malli '{{modelTag}}' on jo jonossa ladattavaksi.",
 	"Model {{modelId}} not found": "Mallia {{modelId}} ei löytynyt",
 	"Model {{modelName}} already exists.": "Malli {{modelName}} on jo olemassa.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Mallin tiedostojärjestelmäpolku havaittu. Mallin lyhytnimi vaaditaan päivitykseen, ei voi jatkaa.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Mallin nimi",
 	"Model not selected": "Mallia ei valittu",
 	"Model Tag Name": "Mallitagin nimi",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nimeä mallitiedostosi",
 	"New Chat": "Uusi keskustelu",
 	"New Password": "Uusi salasana",
+	"No": "",
 	"No results found": "Ei tuloksia",
 	"No source available": "Ei lähdettä saatavilla",
 	"Not factually correct": "Ei faktisesti oikein",
@@ -385,6 +397,7 @@
 	"Select a model": "Valitse malli",
 	"Select an Ollama instance": "Valitse Ollama-instanssi",
 	"Select model": "Valitse malli",
+	"Selected models do not support image inputs": "",
 	"Send": "Lähetä",
 	"Send a Message": "Lähetä viesti",
 	"Send message": "Lähetä viesti",
@@ -492,6 +505,7 @@
 	"Workspace": "Työtilat",
 	"Write a prompt suggestion (e.g. Who are you?)": "Kirjoita ehdotettu kehote (esim. Kuka olet?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Kirjoita 50 sanan yhteenveto, joka tiivistää [aihe tai avainsana].",
+	"Yes": "",
 	"Yesterday": "Eilen",
 	"You": "Sinä",
 	"You have no archived conversations.": "Sinulla ei ole arkistoituja keskusteluja.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} réfléchit...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
+	"A selected model does not support image input": "",
 	"a user": "un utilisateur",
 	"About": "À propos",
 	"Account": "Compte",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Paramètres avancés",
 	"all": "tous",
 	"All Documents": "Tous les documents",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Tous les utilisateurs",
 	"Allow": "Autoriser",
 	"Allow Chat Deletion": "Autoriser la suppression des discussions",
@@ -115,6 +117,7 @@
 	"Created at": "Créé le",
 	"Created At": "Créé le",
 	"Current Model": "Modèle actuel",
+	"Current Models": "",
 	"Current Password": "Mot de passe actuel",
 	"Custom": "Personnalisé",
 	"Customize Ollama models for a specific purpose": "Personnaliser les modèles Ollama pour un objectif spécifique",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Entrez le RPM de l'API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Entrez le modèle LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Entrez le nombre max de tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (p. ex. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)",
 	"Enter Score": "Entrez le score",
@@ -235,6 +239,7 @@
 	"Input commands": "Entrez des commandes d'entrée",
 	"Interface": "Interface",
 	"Invalid Tag": "Tag invalide",
+	"Is Model Vision Capable": "",
 	"January": "Janvier",
 	"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI",
 	"Make sure to enclose them with": "Assurez-vous de les entourer avec",
 	"Manage LiteLLM Models": "Gérer les modèles LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Gérer les modèles",
 	"Manage Ollama Models": "Gérer les modèles Ollama",
 	"March": "Mars",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.",
 	"Model {{modelId}} not found": "Modèle {{modelId}} non trouvé",
 	"Model {{modelName}} already exists.": "Le modèle {{modelName}} existe déjà.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Le chemin du système de fichiers du modèle a été détecté. Le nom court du modèle est nécessaire pour la mise à jour, impossible de continuer.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nom du modèle",
 	"Model not selected": "Modèle non sélectionné",
 	"Model Tag Name": "Nom de tag du modèle",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nommez votre fichier de modèle",
 	"New Chat": "Nouvelle discussion",
 	"New Password": "Nouveau mot de passe",
+	"No": "",
 	"No results found": "Aucun résultat trouvé",
 	"No source available": "Aucune source disponible",
 	"Not factually correct": "Non, pas exactement correct",
@@ -385,6 +397,7 @@
 	"Select a model": "Sélectionnez un modèle",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
 	"Select model": "Sélectionnez un modèle",
+	"Selected models do not support image inputs": "",
 	"Send": "Envoyer",
 	"Send a Message": "Envoyer un message",
 	"Send message": "Envoyer un message",
@@ -492,6 +505,7 @@
 	"Workspace": "Espace de travail",
 	"Write a prompt suggestion (e.g. Who are you?)": "Rédigez une suggestion de prompt (p. ex. Qui êtes-vous ?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Rédigez un résumé en 50 mots qui résume [sujet ou mot-clé].",
+	"Yes": "",
 	"Yesterday": "hier",
 	"You": "Vous",
 	"You have no archived conversations.": "Vous n'avez aucune conversation archivée.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} réfléchit...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
+	"A selected model does not support image input": "",
 	"a user": "un utilisateur",
 	"About": "À propos",
 	"Account": "Compte",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Paramètres avancés",
 	"all": "tous",
 	"All Documents": "Tous les documents",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Tous les utilisateurs",
 	"Allow": "Autoriser",
 	"Allow Chat Deletion": "Autoriser la suppression du chat",
@@ -115,6 +117,7 @@
 	"Created at": "Créé le",
 	"Created At": "Créé le",
 	"Current Model": "Modèle actuel",
+	"Current Models": "",
 	"Current Password": "Mot de passe actuel",
 	"Custom": "Personnalisé",
 	"Customize Ollama models for a specific purpose": "Personnaliser les modèles Ollama pour un objectif spécifique",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Entrez le RPM de l'API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Entrez le modèle LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Entrez le nombre max de tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (p. ex. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)",
 	"Enter Score": "Entrez le score",
@@ -235,6 +239,7 @@
 	"Input commands": "Entrez les commandes d'entrée",
 	"Interface": "Interface",
 	"Invalid Tag": "Tag invalide",
+	"Is Model Vision Capable": "",
 	"January": "Janvier",
 	"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI",
 	"Make sure to enclose them with": "Assurez-vous de les entourer avec",
 	"Manage LiteLLM Models": "Gérer les modèles LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Gérer les modèles",
 	"Manage Ollama Models": "Gérer les modèles Ollama",
 	"March": "Mars",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.",
 	"Model {{modelId}} not found": "Modèle {{modelId}} non trouvé",
 	"Model {{modelName}} already exists.": "Le modèle {{modelName}} existe déjà.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Le chemin du système de fichiers du modèle a été détecté. Le nom court du modèle est nécessaire pour la mise à jour, impossible de continuer.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nom du modèle",
 	"Model not selected": "Modèle non sélectionné",
 	"Model Tag Name": "Nom de tag du modèle",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nommez votre fichier de modèle",
 	"New Chat": "Nouveau chat",
 	"New Password": "Nouveau mot de passe",
+	"No": "",
 	"No results found": "Aucun résultat trouvé",
 	"No source available": "Aucune source disponible",
 	"Not factually correct": "Non, pas exactement correct",
@@ -385,6 +397,7 @@
 	"Select a model": "Sélectionner un modèle",
 	"Select an Ollama instance": "Sélectionner une instance Ollama",
 	"Select model": "Sélectionner un modèle",
+	"Selected models do not support image inputs": "",
 	"Send": "Envoyer",
 	"Send a Message": "Envoyer un message",
 	"Send message": "Envoyer un message",
@@ -492,6 +505,7 @@
 	"Workspace": "Espace de travail",
 	"Write a prompt suggestion (e.g. Who are you?)": "Écrivez un prompt (e.x. Qui est-tu ?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Ecrivez un résumé en 50 mots [sujet ou mot-clé]",
+	"Yes": "",
 	"Yesterday": "hier",
 	"You": "Vous",
 	"You have no archived conversations.": "Vous n'avez aucune conversation archivée.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} חושב...",
 	"{{user}}'s Chats": "צ'אטים של {{user}}",
 	"{{webUIName}} Backend Required": "נדרש Backend של {{webUIName}}",
+	"A selected model does not support image input": "",
 	"a user": "משתמש",
 	"About": "אודות",
 	"Account": "חשבון",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "פרמטרים מתקדמים",
 	"all": "הכל",
 	"All Documents": "כל המסמכים",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "כל המשתמשים",
 	"Allow": "אפשר",
 	"Allow Chat Deletion": "אפשר מחיקת צ'אט",
@@ -115,6 +117,7 @@
 	"Created at": "נוצר ב",
 	"Created At": "נוצר ב",
 	"Current Model": "המודל הנוכחי",
+	"Current Models": "",
 	"Current Password": "הסיסמה הנוכחית",
 	"Custom": "מותאם אישית",
 	"Customize Ollama models for a specific purpose": "התאמה אישית של מודלים של Ollama למטרה מסוימת",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "הזן RPM של API של LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "הזן מודל LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "הזן מספר מקסימלי של טוקנים (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "הזן תג מודל (למשל {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "הזן מספר שלבים (למשל 50)",
 	"Enter Score": "הזן ציון",
@@ -235,6 +239,7 @@
 	"Input commands": "פקודות קלט",
 	"Interface": "ממשק",
 	"Invalid Tag": "תג לא חוקי",
+	"Is Model Vision Capable": "",
 	"January": "ינואר",
 	"join our Discord for help.": "הצטרף ל-Discord שלנו לעזרה.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "נוצר על ידי קהילת OpenWebUI",
 	"Make sure to enclose them with": "ודא להקיף אותם עם",
 	"Manage LiteLLM Models": "נהל מודלים של LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "נהל מודלים",
 	"Manage Ollama Models": "נהל מודלים של Ollama",
 	"March": "מרץ",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "המודל '{{modelTag}}' כבר בתור להורדה.",
 	"Model {{modelId}} not found": "המודל {{modelId}} לא נמצא",
 	"Model {{modelName}} already exists.": "המודל {{modelName}} כבר קיים.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "נתיב מערכת הקבצים של המודל זוהה. נדרש שם קצר של המודל לעדכון, לא ניתן להמשיך.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "שם המודל",
 	"Model not selected": "לא נבחר מודל",
 	"Model Tag Name": "שם תג המודל",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "תן שם לקובץ המודל שלך",
 	"New Chat": "צ'אט חדש",
 	"New Password": "סיסמה חדשה",
+	"No": "",
 	"No results found": "לא נמצאו תוצאות",
 	"No source available": "אין מקור זמין",
 	"Not factually correct": "לא נכון מבחינה עובדתית",
@@ -385,6 +397,7 @@
 	"Select a model": "בחר מודל",
 	"Select an Ollama instance": "בחר מופע של Ollama",
 	"Select model": "בחר מודל",
+	"Selected models do not support image inputs": "",
 	"Send": "שלח",
 	"Send a Message": "שלח הודעה",
 	"Send message": "שלח הודעה",
@@ -492,6 +505,7 @@
 	"Workspace": "סביבה",
 	"Write a prompt suggestion (e.g. Who are you?)": "כתוב הצעה מהירה (למשל, מי אתה?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "כתוב סיכום ב-50 מילים שמסכם [נושא או מילת מפתח].",
+	"Yes": "",
 	"Yesterday": "אתמול",
 	"You": "אתה",
 	"You have no archived conversations.": "אין לך שיחות בארכיון.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} सोच रहा है...",
 	"{{user}}'s Chats": "{{user}} की चैट",
 	"{{webUIName}} Backend Required": "{{webUIName}} बैकएंड आवश्यक",
+	"A selected model does not support image input": "",
 	"a user": "एक उपयोगकर्ता",
 	"About": "हमारे बारे में",
 	"Account": "खाता",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "उन्नत पैरामीटर",
 	"all": "सभी",
 	"All Documents": "सभी डॉक्यूमेंट्स",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "सभी उपयोगकर्ता",
 	"Allow": "अनुमति दें",
 	"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
@@ -115,6 +117,7 @@
 	"Created at": "किस समय बनाया गया",
 	"Created At": "किस समय बनाया गया",
 	"Current Model": "वर्तमान मॉडल",
+	"Current Models": "",
 	"Current Password": "वर्तमान पासवर्ड",
 	"Custom": "कस्टम संस्करण",
 	"Customize Ollama models for a specific purpose": "किसी विशिष्ट उद्देश्य के लिए ओलामा मॉडल को अनुकूलित करें",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM दर्ज करें (litellm_params.rpm) ",
 	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM Model दर्ज करें (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Max Tokens दर्ज करें (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Model tag दर्ज करें (उदा. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "चरणों की संख्या दर्ज करें (उदा. 50)",
 	"Enter Score": "स्कोर दर्ज करें",
@@ -235,6 +239,7 @@
 	"Input commands": "इनपुट क命",
 	"Interface": "इंटरफेस",
 	"Invalid Tag": "अवैध टैग",
+	"Is Model Vision Capable": "",
 	"January": "जनवरी",
 	"join our Discord for help.": "मदद के लिए हमारे डिस्कोर्ड में शामिल हों।",
 	"JSON": "ज्ञान प्रकार",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "OpenWebUI समुदाय द्वारा निर्मित",
 	"Make sure to enclose them with": "उन्हें संलग्न करना सुनिश्चित करें",
 	"Manage LiteLLM Models": "LiteLLM मॉडल प्रबंधित करें",
+	"Manage Model Information": "",
 	"Manage Models": "मॉडल प्रबंधित करें",
 	"Manage Ollama Models": "Ollama मॉडल प्रबंधित करें",
 	"March": "मार्च",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "मॉडल '{{modelTag}}' पहले से ही डाउनलोड करने के लिए कतार में है।",
 	"Model {{modelId}} not found": "मॉडल {{modelId}} नहीं मिला",
 	"Model {{modelName}} already exists.": "मॉडल {{modelName}} पहले से मौजूद है।",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "मॉडल फ़ाइल सिस्टम पथ का पता चला. अद्यतन के लिए मॉडल संक्षिप्त नाम आवश्यक है, जारी नहीं रखा जा सकता।",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "मॉडल नाम",
 	"Model not selected": "मॉडल चयनित नहीं है",
 	"Model Tag Name": "मॉडल टैग नाम",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "अपनी मॉडलफ़ाइल को नाम दें",
 	"New Chat": "नई चैट",
 	"New Password": "नया पासवर्ड",
+	"No": "",
 	"No results found": "कोई परिणाम नहीं मिला",
 	"No source available": "कोई स्रोत उपलब्ध नहीं है",
 	"Not factually correct": "तथ्यात्मक रूप से सही नहीं है",
@@ -385,6 +397,7 @@
 	"Select a model": "एक मॉडल चुनें",
 	"Select an Ollama instance": "एक Ollama Instance चुनें",
 	"Select model": "मॉडल चुनें",
+	"Selected models do not support image inputs": "",
 	"Send": "भेज",
 	"Send a Message": "एक संदेश भेजो",
 	"Send message": "मेसेज भेजें",
@@ -492,6 +505,7 @@
 	"Workspace": "वर्कस्पेस",
 	"Write a prompt suggestion (e.g. Who are you?)": "एक त्वरित सुझाव लिखें (जैसे कि आप कौन हैं?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "50 शब्दों में एक सारांश लिखें जो [विषय या कीवर्ड] का सारांश प्रस्तुत करता हो।",
+	"Yes": "",
 	"Yesterday": "कल",
 	"You": "आप",
 	"You have no archived conversations.": "आपको कोई अंकित चैट नहीं है।",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} razmišlja...",
 	"{{user}}'s Chats": "Razgovori korisnika {{user}}",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend je potreban",
+	"A selected model does not support image input": "",
 	"a user": "korisnik",
 	"About": "O aplikaciji",
 	"Account": "Račun",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Napredni parametri",
 	"all": "sve",
 	"All Documents": "Svi dokumenti",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Svi korisnici",
 	"Allow": "Dopusti",
 	"Allow Chat Deletion": "Dopusti brisanje razgovora",
@@ -115,6 +117,7 @@
 	"Created at": "Stvoreno",
 	"Created At": "Stvoreno",
 	"Current Model": "Trenutni model",
+	"Current Models": "",
 	"Current Password": "Trenutna lozinka",
 	"Custom": "Prilagođeno",
 	"Customize Ollama models for a specific purpose": "Prilagodite Ollama modele za specifičnu svrhu",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Unesite LiteLLM API RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Unesite LiteLLM model (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Unesite maksimalan broj tokena (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Unesite oznaku modela (npr. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Unesite broj koraka (npr. 50)",
 	"Enter Score": "Unesite ocjenu",
@@ -235,6 +239,7 @@
 	"Input commands": "Unos naredbi",
 	"Interface": "Sučelje",
 	"Invalid Tag": "Nevažeća oznaka",
+	"Is Model Vision Capable": "",
 	"January": "Siječanj",
 	"join our Discord for help.": "pridružite se našem Discordu za pomoć.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Izradio OpenWebUI Community",
 	"Make sure to enclose them with": "Provjerite da ih zatvorite s",
 	"Manage LiteLLM Models": "Upravljajte LiteLLM modelima",
+	"Manage Model Information": "",
 	"Manage Models": "Upravljanje modelima",
 	"Manage Ollama Models": "Upravljanje Ollama modelima",
 	"March": "Ožujak",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' je već u redu za preuzimanje.",
 	"Model {{modelId}} not found": "Model {{modelId}} nije pronađen",
 	"Model {{modelName}} already exists.": "Model {{modelName}} već postoji.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkriven put datotečnog sustava modela. Kratko ime modela je potrebno za ažuriranje, nije moguće nastaviti.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Naziv modela",
 	"Model not selected": "Model nije odabran",
 	"Model Tag Name": "Naziv oznake modela",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nazovite svoju datoteku modela",
 	"New Chat": "Novi razgovor",
 	"New Password": "Nova lozinka",
+	"No": "",
 	"No results found": "Nema rezultata",
 	"No source available": "Nema dostupnog izvora",
 	"Not factually correct": "Nije činjenično točno",
@@ -385,6 +397,7 @@
 	"Select a model": "Odaberite model",
 	"Select an Ollama instance": "Odaberite Ollama instancu",
 	"Select model": "Odaberite model",
+	"Selected models do not support image inputs": "",
 	"Send": "Pošalji",
 	"Send a Message": "Pošaljite poruku",
 	"Send message": "Pošalji poruku",
@@ -492,6 +505,7 @@
 	"Workspace": "Radna ploča",
 	"Write a prompt suggestion (e.g. Who are you?)": "Napišite prijedlog prompta (npr. Tko si ti?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Napišite sažetak u 50 riječi koji sažima [temu ili ključnu riječ].",
+	"Yes": "",
 	"Yesterday": "Jučer",
 	"You": "Vi",
 	"You have no archived conversations.": "Nemate arhiviranih razgovora.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} sta pensando...",
 	"{{user}}'s Chats": "{{user}} Chat",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend richiesto",
+	"A selected model does not support image input": "",
 	"a user": "un utente",
 	"About": "Informazioni",
 	"Account": "Account",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Parametri avanzati",
 	"all": "tutti",
 	"All Documents": "Tutti i documenti",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Tutti gli utenti",
 	"Allow": "Consenti",
 	"Allow Chat Deletion": "Consenti l'eliminazione della chat",
@@ -115,6 +117,7 @@
 	"Created at": "Creato il",
 	"Created At": "Creato il",
 	"Current Model": "Modello corrente",
+	"Current Models": "",
 	"Current Password": "Password corrente",
 	"Custom": "Personalizzato",
 	"Customize Ollama models for a specific purpose": "Personalizza i modelli Ollama per uno scopo specifico",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Inserisci LiteLLM API RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Inserisci il modello LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Inserisci Max Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Inserisci il tag del modello (ad esempio {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Inserisci il numero di passaggi (ad esempio 50)",
 	"Enter Score": "Inserisci il punteggio",
@@ -235,6 +239,7 @@
 	"Input commands": "Comandi di input",
 	"Interface": "Interfaccia",
 	"Invalid Tag": "Tag non valido",
+	"Is Model Vision Capable": "",
 	"January": "Gennaio",
 	"join our Discord for help.": "unisciti al nostro Discord per ricevere aiuto.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Realizzato dalla comunità OpenWebUI",
 	"Make sure to enclose them with": "Assicurati di racchiuderli con",
 	"Manage LiteLLM Models": "Gestisci modelli LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Gestisci modelli",
 	"Manage Ollama Models": "Gestisci modelli Ollama",
 	"March": "Marzo",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Il modello '{{modelTag}}' è già in coda per il download.",
 	"Model {{modelId}} not found": "Modello {{modelId}} non trovato",
 	"Model {{modelName}} already exists.": "Il modello {{modelName}} esiste già.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Percorso del filesystem del modello rilevato. Il nome breve del modello è richiesto per l'aggiornamento, impossibile continuare.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nome modello",
 	"Model not selected": "Modello non selezionato",
 	"Model Tag Name": "Nome tag del modello",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Assegna un nome al tuo file modello",
 	"New Chat": "Nuova chat",
 	"New Password": "Nuova password",
+	"No": "",
 	"No results found": "Nessun risultato trovato",
 	"No source available": "Nessuna fonte disponibile",
 	"Not factually correct": "Non corretto dal punto di vista fattuale",
@@ -385,6 +397,7 @@
 	"Select a model": "Seleziona un modello",
 	"Select an Ollama instance": "Seleziona un'istanza Ollama",
 	"Select model": "Seleziona modello",
+	"Selected models do not support image inputs": "",
 	"Send": "Invia",
 	"Send a Message": "Invia un messaggio",
 	"Send message": "Invia messaggio",
@@ -492,6 +505,7 @@
 	"Workspace": "Area di lavoro",
 	"Write a prompt suggestion (e.g. Who are you?)": "Scrivi un suggerimento per il prompt (ad esempio Chi sei?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Scrivi un riassunto in 50 parole che riassume [argomento o parola chiave].",
+	"Yes": "",
 	"Yesterday": "Ieri",
 	"You": "Tu",
 	"You have no archived conversations.": "Non hai conversazioni archiviate.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} は思考中です...",
 	"{{user}}'s Chats": "{{user}} のチャット",
 	"{{webUIName}} Backend Required": "{{webUIName}} バックエンドが必要です",
+	"A selected model does not support image input": "",
 	"a user": "ユーザー",
 	"About": "概要",
 	"Account": "アカウント",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "詳細パラメーター",
 	"all": "すべて",
 	"All Documents": "全てのドキュメント",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "すべてのユーザー",
 	"Allow": "許可",
 	"Allow Chat Deletion": "チャットの削除を許可",
@@ -115,6 +117,7 @@
 	"Created at": "作成日時",
 	"Created At": "作成日時",
 	"Current Model": "現在のモデル",
+	"Current Models": "",
 	"Current Password": "現在のパスワード",
 	"Custom": "カスタム",
 	"Customize Ollama models for a specific purpose": "特定の目的に合わせて Ollama モデルをカスタマイズ",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM を入力してください (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM モデルを入力してください (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "最大トークン数を入力してください (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "モデルタグを入力してください (例: {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "ステップ数を入力してください (例: 50)",
 	"Enter Score": "スコアを入力してください",
@@ -235,6 +239,7 @@
 	"Input commands": "入力コマンド",
 	"Interface": "インターフェース",
 	"Invalid Tag": "無効なタグ",
+	"Is Model Vision Capable": "",
 	"January": "1月",
 	"join our Discord for help.": "ヘルプについては、Discord に参加してください。",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "OpenWebUI コミュニティによって作成",
 	"Make sure to enclose them with": "必ず次で囲んでください",
 	"Manage LiteLLM Models": "LiteLLM モデルを管理",
+	"Manage Model Information": "",
 	"Manage Models": "モデルを管理",
 	"Manage Ollama Models": "Ollama モデルを管理",
 	"March": "3月",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "モデル '{{modelTag}}' はすでにダウンロード待ち行列に入っています。",
 	"Model {{modelId}} not found": "モデル {{modelId}} が見つかりません",
 	"Model {{modelName}} already exists.": "モデル {{modelName}} はすでに存在します。",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "モデルファイルシステムパスが検出されました。モデルの短縮名が必要です。更新できません。",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "モデル名",
 	"Model not selected": "モデルが選択されていません",
 	"Model Tag Name": "モデルタグ名",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "モデルファイルに名前を付ける",
 	"New Chat": "新しいチャット",
 	"New Password": "新しいパスワード",
+	"No": "",
 	"No results found": "結果が見つかりません",
 	"No source available": "使用可能なソースがありません",
 	"Not factually correct": "実事上正しくない",
@@ -385,6 +397,7 @@
 	"Select a model": "モデルを選択",
 	"Select an Ollama instance": "Ollama インスタンスを選択",
 	"Select model": "モデルを選択",
+	"Selected models do not support image inputs": "",
 	"Send": "送信",
 	"Send a Message": "メッセージを送信",
 	"Send message": "メッセージを送信",
@@ -492,6 +505,7 @@
 	"Workspace": "ワークスペース",
 	"Write a prompt suggestion (e.g. Who are you?)": "プロンプトの提案を書いてください (例: あなたは誰ですか?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[トピックまたはキーワード] を要約する 50 語の概要を書いてください。",
+	"Yes": "",
 	"Yesterday": "昨日",
 	"You": "あなた",
 	"You have no archived conversations.": "これまでにアーカイブされた会話はありません。",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} ფიქრობს...",
 	"{{user}}'s Chats": "{{user}}-ის ჩათები",
 	"{{webUIName}} Backend Required": "{{webUIName}} საჭიროა ბექენდი",
+	"A selected model does not support image input": "",
 	"a user": "მომხმარებელი",
 	"About": "შესახებ",
 	"Account": "ანგარიში",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "დამატებითი პარამეტრები",
 	"all": "ყველა",
 	"All Documents": "ყველა დოკუმენტი",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "ყველა მომხმარებელი",
 	"Allow": "ნების დართვა",
 	"Allow Chat Deletion": "მიმოწერის წაშლის დაშვება",
@@ -115,6 +117,7 @@
 	"Created at": "შექმნილია",
 	"Created At": "შექმნილია",
 	"Current Model": "მიმდინარე მოდელი",
+	"Current Models": "",
 	"Current Password": "მიმდინარე პაროლი",
 	"Custom": "საკუთარი",
 	"Customize Ollama models for a specific purpose": "Ollama მოდელების დამუშავება სპეციფიური დანიშნულებისთვის",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "შეიყვანეთ LiteLLM API RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "შეიყვანეთ LiteLLM მოდელი (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "შეიყვანეთ მაქსიმალური ტოკენები (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "შეიყვანეთ მოდელის ტეგი (მაგ. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "შეიყვანეთ ნაბიჯების რაოდენობა (მაგ. 50)",
 	"Enter Score": "შეიყვანეთ ქულა",
@@ -235,6 +239,7 @@
 	"Input commands": "შეყვანით ბრძანებებს",
 	"Interface": "ინტერფეისი",
 	"Invalid Tag": "არასწორი ტეგი",
+	"Is Model Vision Capable": "",
 	"January": "იანვარი",
 	"join our Discord for help.": "შეუერთდით ჩვენს Discord-ს დახმარებისთვის",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "დამზადებულია OpenWebUI საზოგადოების მიერ",
 	"Make sure to enclose them with": "დარწმუნდით, რომ დაურთეთ ისინი",
 	"Manage LiteLLM Models": "LiteLLM მოდელების მართვა",
+	"Manage Model Information": "",
 	"Manage Models": "მოდელების მართვა",
 	"Manage Ollama Models": "Ollama მოდელების მართვა",
 	"March": "მარტივი",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "მოდელი „{{modelTag}}“ უკვე ჩამოტვირთვის რიგშია.",
 	"Model {{modelId}} not found": "მოდელი {{modelId}} ვერ მოიძებნა",
 	"Model {{modelName}} already exists.": "მოდელი {{modelName}} უკვე არსებობს.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "აღმოჩენილია მოდელის ფაილური სისტემის გზა. განახლებისთვის საჭიროა მოდელის მოკლე სახელი, გაგრძელება შეუძლებელია.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "მოდელის სახელი",
 	"Model not selected": "მოდელი არ არის არჩეული",
 	"Model Tag Name": "მოდელის ტეგის სახელი",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "თქვენი მოდელური ფაილის სახელი",
 	"New Chat": "ახალი მიმოწერა",
 	"New Password": "ახალი პაროლი",
+	"No": "",
 	"No results found": "ჩვენ ვერ პოულობით ნაპოვნი ჩაწერები",
 	"No source available": "წყარო არ არის ხელმისაწვდომი",
 	"Not factually correct": "არ ვეთანხმები პირდაპირ ვერც ვეთანხმები",
@@ -385,6 +397,7 @@
 	"Select a model": "მოდელის არჩევა",
 	"Select an Ollama instance": "Ollama ინსტანსის არჩევა",
 	"Select model": "მოდელის არჩევა",
+	"Selected models do not support image inputs": "",
 	"Send": "გაგზავნა",
 	"Send a Message": "შეტყობინების გაგზავნა",
 	"Send message": "შეტყობინების გაგზავნა",
@@ -492,6 +505,7 @@
 	"Workspace": "ვულერი",
 	"Write a prompt suggestion (e.g. Who are you?)": "დაწერეთ მოკლე წინადადება (მაგ. ვინ ხარ?",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "დაწერეთ რეზიუმე 50 სიტყვით, რომელიც აჯამებს [თემას ან საკვანძო სიტყვას].",
+	"Yes": "",
 	"Yesterday": "აღდგენა",
 	"You": "ჩემი",
 	"You have no archived conversations.": "არ ხართ არქივირებული განხილვები.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} 이(가) 생각중입니다....",
 	"{{user}}'s Chats": "{{user}}의 채팅",
 	"{{webUIName}} Backend Required": "{{webUIName}} 백엔드가 필요합니다.",
+	"A selected model does not support image input": "",
 	"a user": "사용자",
 	"About": "소개",
 	"Account": "계정",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "고급 매개변수",
 	"all": "모두",
 	"All Documents": "모든 문서",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "모든 사용자",
 	"Allow": "허용",
 	"Allow Chat Deletion": "채팅 삭제 허용",
@@ -115,6 +117,7 @@
 	"Created at": "생성일",
 	"Created At": "생성일",
 	"Current Model": "현재 모델",
+	"Current Models": "",
 	"Current Password": "현재 비밀번호",
 	"Custom": "사용자 정의",
 	"Customize Ollama models for a specific purpose": "특정 목적으로 Ollama 모델 사용자 정의",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM 입력(litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM 모델 입력(litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "최대 토큰 수 입력(litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "모델 태그 입력(예: {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "단계 수 입력(예: 50)",
 	"Enter Score": "점수 입력",
@@ -235,6 +239,7 @@
 	"Input commands": "입력 명령",
 	"Interface": "인터페이스",
 	"Invalid Tag": "잘못된 태그",
+	"Is Model Vision Capable": "",
 	"January": "1월",
 	"join our Discord for help.": "도움말을 보려면 Discord에 가입하세요.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "OpenWebUI 커뮤니티에서 제작",
 	"Make sure to enclose them with": "다음으로 묶는 것을 잊지 마세요:",
 	"Manage LiteLLM Models": "LiteLLM 모델 관리",
+	"Manage Model Information": "",
 	"Manage Models": "모델 관리",
 	"Manage Ollama Models": "Ollama 모델 관리",
 	"March": "3월",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "모델 '{{modelTag}}'이(가) 이미 다운로드 대기열에 있습니다.",
 	"Model {{modelId}} not found": "모델 {{modelId}}를 찾을 수 없습니다.",
 	"Model {{modelName}} already exists.": "모델 {{modelName}}이(가) 이미 존재합니다.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "모델 파일 시스템 경로가 감지되었습니다. 업데이트하려면 모델 단축 이름이 필요하며 계속할 수 없습니다.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "모델 이름",
 	"Model not selected": "모델이 선택되지 않았습니다.",
 	"Model Tag Name": "모델 태그 이름",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "모델파일 이름 지정",
 	"New Chat": "새 채팅",
 	"New Password": "새 비밀번호",
+	"No": "",
 	"No results found": "결과 없음",
 	"No source available": "사용 가능한 소스 없음",
 	"Not factually correct": "사실상 맞지 않음",
@@ -385,6 +397,7 @@
 	"Select a model": "모델 선택",
 	"Select an Ollama instance": "Ollama 인스턴스 선택",
 	"Select model": "모델 선택",
+	"Selected models do not support image inputs": "",
 	"Send": "보내기",
 	"Send a Message": "메시지 보내기",
 	"Send message": "메시지 보내기",
@@ -492,6 +505,7 @@
 	"Workspace": "워크스페이스",
 	"Write a prompt suggestion (e.g. Who are you?)": "프롬프트 제안 작성 (예: 당신은 누구인가요?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[주제 또는 키워드]에 대한 50단어 요약문 작성.",
+	"Yes": "",
 	"Yesterday": "어제",
 	"You": "당신",
 	"You have no archived conversations.": "채팅을 아카이브한 적이 없습니다.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} is aan het denken...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend Verlpicht",
+	"A selected model does not support image input": "",
 	"a user": "een gebruiker",
 	"About": "Over",
 	"Account": "Account",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Geavanceerde Parameters",
 	"all": "alle",
 	"All Documents": "Alle Documenten",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Alle Gebruikers",
 	"Allow": "Toestaan",
 	"Allow Chat Deletion": "Sta Chat Verwijdering toe",
@@ -115,6 +117,7 @@
 	"Created at": "Gemaakt op",
 	"Created At": "Gemaakt op",
 	"Current Model": "Huidig Model",
+	"Current Models": "",
 	"Current Password": "Huidig Wachtwoord",
 	"Custom": "Aangepast",
 	"Customize Ollama models for a specific purpose": "Pas Ollama modellen aan voor een specifiek doel",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Voeg LiteLLM API RPM toe (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Voeg LiteLLM Model toe (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Voeg maximum aantal tokens toe (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Voeg model tag toe (Bijv. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Voeg aantal stappen toe (Bijv. 50)",
 	"Enter Score": "Voeg score toe",
@@ -235,6 +239,7 @@
 	"Input commands": "Voer commando's in",
 	"Interface": "Interface",
 	"Invalid Tag": "Ongeldige Tag",
+	"Is Model Vision Capable": "",
 	"January": "Januari",
 	"join our Discord for help.": "join onze Discord voor hulp.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Gemaakt door OpenWebUI Community",
 	"Make sure to enclose them with": "Zorg ervoor dat je ze omringt met",
 	"Manage LiteLLM Models": "Beheer LiteLLM Modellen",
+	"Manage Model Information": "",
 	"Manage Models": "Beheer Modellen",
 	"Manage Ollama Models": "Beheer Ollama Modellen",
 	"March": "Maart",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' staat al in de wachtrij voor downloaden.",
 	"Model {{modelId}} not found": "Model {{modelId}} niet gevonden",
 	"Model {{modelName}} already exists.": "Model {{modelName}} bestaat al.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model filesystem path gedetecteerd. Model shortname is vereist voor update, kan niet doorgaan.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Model Naam",
 	"Model not selected": "Model niet geselecteerd",
 	"Model Tag Name": "Model Tag Naam",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Benoem je modelfile",
 	"New Chat": "Nieuwe Chat",
 	"New Password": "Nieuw Wachtwoord",
+	"No": "",
 	"No results found": "Geen resultaten gevonden",
 	"No source available": "Geen bron beschikbaar",
 	"Not factually correct": "Feitelijk niet juist",
@@ -385,6 +397,7 @@
 	"Select a model": "Selecteer een model",
 	"Select an Ollama instance": "Selecteer een Ollama instantie",
 	"Select model": "Selecteer een model",
+	"Selected models do not support image inputs": "",
 	"Send": "Verzenden",
 	"Send a Message": "Stuur een Bericht",
 	"Send message": "Stuur bericht",
@@ -492,6 +505,7 @@
 	"Workspace": "Werkruimte",
 	"Write a prompt suggestion (e.g. Who are you?)": "Schrijf een prompt suggestie (bijv. Wie ben je?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Schrijf een samenvatting in 50 woorden die [onderwerp of trefwoord] samenvat.",
+	"Yes": "",
 	"Yesterday": "gisteren",
 	"You": "U",
 	"You have no archived conversations.": "U heeft geen gearchiveerde gesprekken.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} ਸੋਚ ਰਿਹਾ ਹੈ...",
 	"{{user}}'s Chats": "{{user}} ਦੀਆਂ ਗੱਲਾਂ",
 	"{{webUIName}} Backend Required": "{{webUIName}} ਬੈਕਐਂਡ ਲੋੜੀਂਦਾ ਹੈ",
+	"A selected model does not support image input": "",
 	"a user": "ਇੱਕ ਉਪਭੋਗਤਾ",
 	"About": "ਬਾਰੇ",
 	"Account": "ਖਾਤਾ",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "ਉੱਚ ਸਤਰ ਦੇ ਪੈਰਾਮੀਟਰ",
 	"all": "ਸਾਰੇ",
 	"All Documents": "ਸਾਰੇ ਡਾਕੂਮੈਂਟ",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "ਸਾਰੇ ਉਪਭੋਗਤਾ",
 	"Allow": "ਅਨੁਮਤੀ",
 	"Allow Chat Deletion": "ਗੱਲਬਾਤ ਮਿਟਾਉਣ ਦੀ ਆਗਿਆ ਦਿਓ",
@@ -115,6 +117,7 @@
 	"Created at": "ਤੇ ਬਣਾਇਆ ਗਿਆ",
 	"Created At": "ਤੇ ਬਣਾਇਆ ਗਿਆ",
 	"Current Model": "ਮੌਜੂਦਾ ਮਾਡਲ",
+	"Current Models": "",
 	"Current Password": "ਮੌਜੂਦਾ ਪਾਸਵਰਡ",
 	"Custom": "ਕਸਟਮ",
 	"Customize Ollama models for a specific purpose": "ਇੱਕ ਖਾਸ ਉਦੇਸ਼ ਲਈ ਓਲਾਮਾ ਮਾਡਲਾਂ ਨੂੰ ਕਸਟਮਾਈਜ਼ ਕਰੋ",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM (litellm_params.rpm) ਦਰਜ ਕਰੋ",
 	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM ਮਾਡਲ (litellm_params.model) ਦਰਜ ਕਰੋ",
 	"Enter Max Tokens (litellm_params.max_tokens)": "ਅਧਿਕਤਮ ਟੋਕਨ ਦਰਜ ਕਰੋ (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "ਮਾਡਲ ਟੈਗ ਦਰਜ ਕਰੋ (ਉਦਾਹਰਣ ਲਈ {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "ਕਦਮਾਂ ਦੀ ਗਿਣਤੀ ਦਰਜ ਕਰੋ (ਉਦਾਹਰਣ ਲਈ 50)",
 	"Enter Score": "ਸਕੋਰ ਦਰਜ ਕਰੋ",
@@ -235,6 +239,7 @@
 	"Input commands": "ਇਨਪੁਟ ਕਮਾਂਡਾਂ",
 	"Interface": "ਇੰਟਰਫੇਸ",
 	"Invalid Tag": "ਗਲਤ ਟੈਗ",
+	"Is Model Vision Capable": "",
 	"January": "ਜਨਵਰੀ",
 	"join our Discord for help.": "ਮਦਦ ਲਈ ਸਾਡੇ ਡਿਸਕੋਰਡ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ।",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "ਓਪਨਵੈਬਯੂਆਈ ਕਮਿਊਨਿਟੀ ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ",
 	"Make sure to enclose them with": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਉਨ੍ਹਾਂ ਨੂੰ ਘੇਰੋ",
 	"Manage LiteLLM Models": "LiteLLM ਮਾਡਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ",
+	"Manage Model Information": "",
 	"Manage Models": "ਮਾਡਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ",
 	"Manage Ollama Models": "ਓਲਾਮਾ ਮਾਡਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ",
 	"March": "ਮਾਰਚ",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "ਮਾਡਲ '{{modelTag}}' ਪਹਿਲਾਂ ਹੀ ਡਾਊਨਲੋਡ ਲਈ ਕਤਾਰ ਵਿੱਚ ਹੈ।",
 	"Model {{modelId}} not found": "ਮਾਡਲ {{modelId}} ਨਹੀਂ ਮਿਲਿਆ",
 	"Model {{modelName}} already exists.": "ਮਾਡਲ {{modelName}} ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "ਮਾਡਲ ਫਾਈਲਸਿਸਟਮ ਪੱਥ ਪਾਇਆ ਗਿਆ। ਅੱਪਡੇਟ ਲਈ ਮਾਡਲ ਸ਼ੌਰਟਨੇਮ ਦੀ ਲੋੜ ਹੈ, ਜਾਰੀ ਨਹੀਂ ਰੱਖ ਸਕਦੇ।",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "ਮਾਡਲ ਨਾਮ",
 	"Model not selected": "ਮਾਡਲ ਚੁਣਿਆ ਨਹੀਂ ਗਿਆ",
 	"Model Tag Name": "ਮਾਡਲ ਟੈਗ ਨਾਮ",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "ਆਪਣੀ ਮਾਡਲਫਾਈਲ ਦਾ ਨਾਮ ਰੱਖੋ",
 	"New Chat": "ਨਵੀਂ ਗੱਲਬਾਤ",
 	"New Password": "ਨਵਾਂ ਪਾਸਵਰਡ",
+	"No": "",
 	"No results found": "ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ",
 	"No source available": "ਕੋਈ ਸਰੋਤ ਉਪਲਬਧ ਨਹੀਂ",
 	"Not factually correct": "ਤੱਥਕ ਰੂਪ ਵਿੱਚ ਸਹੀ ਨਹੀਂ",
@@ -385,6 +397,7 @@
 	"Select a model": "ਇੱਕ ਮਾਡਲ ਚੁਣੋ",
 	"Select an Ollama instance": "ਇੱਕ ਓਲਾਮਾ ਇੰਸਟੈਂਸ ਚੁਣੋ",
 	"Select model": "ਮਾਡਲ ਚੁਣੋ",
+	"Selected models do not support image inputs": "",
 	"Send": "ਭੇਜੋ",
 	"Send a Message": "ਇੱਕ ਸੁਨੇਹਾ ਭੇਜੋ",
 	"Send message": "ਸੁਨੇਹਾ ਭੇਜੋ",
@@ -492,6 +505,7 @@
 	"Workspace": "ਕਾਰਜਸਥਲ",
 	"Write a prompt suggestion (e.g. Who are you?)": "ਇੱਕ ਪ੍ਰੰਪਟ ਸੁਝਾਅ ਲਿਖੋ (ਉਦਾਹਰਣ ਲਈ ਤੁਸੀਂ ਕੌਣ ਹੋ?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "50 ਸ਼ਬਦਾਂ ਵਿੱਚ ਇੱਕ ਸੰਖੇਪ ਲਿਖੋ ਜੋ [ਵਿਸ਼ਾ ਜਾਂ ਕੁੰਜੀ ਸ਼ਬਦ] ਨੂੰ ਸੰਖੇਪ ਕਰਦਾ ਹੈ।",
+	"Yes": "",
 	"Yesterday": "ਕੱਲ੍ਹ",
 	"You": "ਤੁਸੀਂ",
 	"You have no archived conversations.": "ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਆਰਕਾਈਵ ਕੀਤੀਆਂ ਗੱਲਾਂ ਨਹੀਂ ਹਨ।",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} myśli...",
 	"{{user}}'s Chats": "{{user}} - czaty",
 	"{{webUIName}} Backend Required": "Backend {{webUIName}} wymagane",
+	"A selected model does not support image input": "",
 	"a user": "użytkownik",
 	"About": "O nas",
 	"Account": "Konto",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Zaawansowane parametry",
 	"all": "wszyscy",
 	"All Documents": "Wszystkie dokumenty",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Wszyscy użytkownicy",
 	"Allow": "Pozwól",
 	"Allow Chat Deletion": "Pozwól na usuwanie czatu",
@@ -115,6 +117,7 @@
 	"Created at": "Utworzono o",
 	"Created At": "Utworzono o",
 	"Current Model": "Bieżący model",
+	"Current Models": "",
 	"Current Password": "Bieżące hasło",
 	"Custom": "Niestandardowy",
 	"Customize Ollama models for a specific purpose": "Dostosuj modele Ollama do określonego celu",
@@ -181,6 +184,7 @@
 	"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 Display Name": "",
 	"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 Score": "Wprowadź wynik",
@@ -235,6 +239,7 @@
 	"Input commands": "Wprowadź komendy",
 	"Interface": "Interfejs",
 	"Invalid Tag": "Nieprawidłowy tag",
+	"Is Model Vision Capable": "",
 	"January": "Styczeń",
 	"join our Discord for help.": "Dołącz do naszego Discorda po pomoc.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"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 Model Information": "",
 	"Manage Models": "Zarządzaj modelami",
 	"Manage Ollama Models": "Zarządzaj modelami Ollama",
 	"March": "Marzec",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' jest już w kolejce do pobrania.",
 	"Model {{modelId}} not found": "Model {{modelId}} nie został znaleziony",
 	"Model {{modelName}} already exists.": "Model {{modelName}} już istnieje.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"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 info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nazwa modelu",
 	"Model not selected": "Model nie został wybrany",
 	"Model Tag Name": "Nazwa tagu modelu",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nadaj nazwę swojemu plikowi modelu",
 	"New Chat": "Nowy czat",
 	"New Password": "Nowe hasło",
+	"No": "",
 	"No results found": "Nie znaleziono rezultatów",
 	"No source available": "Źródło nie dostępne",
 	"Not factually correct": "Nie zgodne z faktami",
@@ -385,6 +397,7 @@
 	"Select a model": "Wybierz model",
 	"Select an Ollama instance": "Wybierz instancję Ollama",
 	"Select model": "Wybierz model",
+	"Selected models do not support image inputs": "",
 	"Send": "Wyślij",
 	"Send a Message": "Wyślij Wiadomość",
 	"Send message": "Wyślij wiadomość",
@@ -492,6 +505,7 @@
 	"Workspace": "Obszar roboczy",
 	"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].",
+	"Yes": "",
 	"Yesterday": "Wczoraj",
 	"You": "Ty",
 	"You have no archived conversations.": "Nie masz zarchiwizowanych rozmów.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} está pensando...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend Necessário",
+	"A selected model does not support image input": "",
 	"a user": "um usuário",
 	"About": "Sobre",
 	"Account": "Conta",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Parâmetros Avançados",
 	"all": "todos",
 	"All Documents": "Todos os Documentos",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Todos os Usuários",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
@@ -115,6 +117,7 @@
 	"Created at": "Criado em",
 	"Created At": "Criado em",
 	"Current Model": "Modelo Atual",
+	"Current Models": "",
 	"Current Password": "Senha Atual",
 	"Custom": "Personalizado",
 	"Customize Ollama models for a specific purpose": "Personalize os modelos Ollama para um propósito específico",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Digite o RPM da API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Digite o Modelo LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Digite o Máximo de Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Digite a tag do modelo (por exemplo, {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Digite o Número de Etapas (por exemplo, 50)",
 	"Enter Score": "Digite a Pontuação",
@@ -235,6 +239,7 @@
 	"Input commands": "Comandos de entrada",
 	"Interface": "Interface",
 	"Invalid Tag": "Etiqueta Inválida",
+	"Is Model Vision Capable": "",
 	"January": "Janeiro",
 	"join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Make sure to enclose them with": "Certifique-se de colocá-los entre",
 	"Manage LiteLLM Models": "Gerenciar Modelos LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Gerenciar Modelos",
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
 	"March": "Março",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
 	"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
 	"Model {{modelName}} already exists.": "O modelo {{modelName}} já existe.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkrivena putanja datoteke modela. Skraćeno ime modela je potrebno za ažuriranje, ne može se nastaviti.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nome do Modelo",
 	"Model not selected": "Modelo não selecionado",
 	"Model Tag Name": "Nome da Tag do Modelo",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nomeie seu arquivo de modelo",
 	"New Chat": "Novo Bate-papo",
 	"New Password": "Nova Senha",
+	"No": "",
 	"No results found": "Nenhum resultado encontrado",
 	"No source available": "Nenhuma fonte disponível",
 	"Not factually correct": "Não é correto em termos factuais",
@@ -385,6 +397,7 @@
 	"Select a model": "Selecione um modelo",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
 	"Select model": "Selecione um modelo",
+	"Selected models do not support image inputs": "",
 	"Send": "Enviar",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send message": "Enviar mensagem",
@@ -492,6 +505,7 @@
 	"Workspace": "Espaço de trabalho",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
+	"Yes": "",
 	"Yesterday": "Ontem",
 	"You": "Você",
 	"You have no archived conversations.": "Você não tem conversas arquivadas.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} está pensando...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend Necessário",
+	"A selected model does not support image input": "",
 	"a user": "um usuário",
 	"About": "Sobre",
 	"Account": "Conta",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Parâmetros Avançados",
 	"all": "todos",
 	"All Documents": "Todos os Documentos",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Todos os Usuários",
 	"Allow": "Permitir",
 	"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
@@ -115,6 +117,7 @@
 	"Created at": "Criado em",
 	"Created At": "Criado em",
 	"Current Model": "Modelo Atual",
+	"Current Models": "",
 	"Current Password": "Senha Atual",
 	"Custom": "Personalizado",
 	"Customize Ollama models for a specific purpose": "Personalize os modelos Ollama para um propósito específico",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Digite o RPM da API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Digite o Modelo LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Digite o Máximo de Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Digite a tag do modelo (por exemplo, {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Digite o Número de Etapas (por exemplo, 50)",
 	"Enter Score": "Digite a Pontuação",
@@ -235,6 +239,7 @@
 	"Input commands": "Comandos de entrada",
 	"Interface": "Interface",
 	"Invalid Tag": "Etiqueta Inválida",
+	"Is Model Vision Capable": "",
 	"January": "Janeiro",
 	"join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Make sure to enclose them with": "Certifique-se de colocá-los entre",
 	"Manage LiteLLM Models": "Gerenciar Modelos LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Gerenciar Modelos",
 	"Manage Ollama Models": "Gerenciar Modelos Ollama",
 	"March": "Março",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
 	"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
 	"Model {{modelName}} already exists.": "O modelo {{modelName}} já existe.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Caminho do sistema de arquivos do modelo detectado. É necessário o nome curto do modelo para atualização, não é possível continuar.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Nome do Modelo",
 	"Model not selected": "Modelo não selecionado",
 	"Model Tag Name": "Nome da Tag do Modelo",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Nomeie seu arquivo de modelo",
 	"New Chat": "Novo Bate-papo",
 	"New Password": "Nova Senha",
+	"No": "",
 	"No results found": "Nenhum resultado encontrado",
 	"No source available": "Nenhuma fonte disponível",
 	"Not factually correct": "Não é correto em termos factuais",
@@ -385,6 +397,7 @@
 	"Select a model": "Selecione um modelo",
 	"Select an Ollama instance": "Selecione uma instância Ollama",
 	"Select model": "Selecione um modelo",
+	"Selected models do not support image inputs": "",
 	"Send": "Enviar",
 	"Send a Message": "Enviar uma Mensagem",
 	"Send message": "Enviar mensagem",
@@ -492,6 +505,7 @@
 	"Workspace": "Espaço de Trabalho",
 	"Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].",
+	"Yes": "",
 	"Yesterday": "Ontem",
 	"You": "Você",
 	"You have no archived conversations.": "Você não tem bate-papos arquivados.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} думает...",
 	"{{user}}'s Chats": "{{user}} чаты",
 	"{{webUIName}} Backend Required": "{{webUIName}} бэкенд требуемый",
+	"A selected model does not support image input": "",
 	"a user": "пользователь",
 	"About": "Об",
 	"Account": "Аккаунт",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Расширенные Параметры",
 	"all": "всё",
 	"All Documents": "Все документы",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Все пользователи",
 	"Allow": "Разрешить",
 	"Allow Chat Deletion": "Дозволять удаление чат",
@@ -115,6 +117,7 @@
 	"Created at": "Создано в",
 	"Created At": "Создано в",
 	"Current Model": "Текущая модель",
+	"Current Models": "",
 	"Current Password": "Текущий пароль",
 	"Custom": "Пользовательский",
 	"Customize Ollama models for a specific purpose": "Настроить модели Ollama для конкретной цели",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Введите RPM API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Введите модель LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Введите максимальное количество токенов (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Введите тег модели (например, {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Введите количество шагов (например, 50)",
 	"Enter Score": "Введите оценку",
@@ -235,6 +239,7 @@
 	"Input commands": "Введите команды",
 	"Interface": "Интерфейс",
 	"Invalid Tag": "Недопустимый тег",
+	"Is Model Vision Capable": "",
 	"January": "Январь",
 	"join our Discord for help.": "присоединяйтесь к нашему Discord для помощи.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Сделано сообществом OpenWebUI",
 	"Make sure to enclose them with": "Убедитесь, что они заключены в",
 	"Manage LiteLLM Models": "Управление моделями LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Управление моделями",
 	"Manage Ollama Models": "Управление моделями Ollama",
 	"March": "Март",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Модель '{{modelTag}}' уже находится в очереди на загрузку.",
 	"Model {{modelId}} not found": "Модель {{modelId}} не найдена",
 	"Model {{modelName}} already exists.": "Модель {{modelName}} уже существует.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Модель файловой системы обнаружена. Требуется имя тега модели для обновления, не удается продолжить.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Имя модели",
 	"Model not selected": "Модель не выбрана",
 	"Model Tag Name": "Имя тега модели",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Назовите свой файл модели",
 	"New Chat": "Новый чат",
 	"New Password": "Новый пароль",
+	"No": "",
 	"No results found": "Результатов не найдено",
 	"No source available": "Нет доступных источников",
 	"Not factually correct": "Не фактически правильно",
@@ -385,6 +397,7 @@
 	"Select a model": "Выберите модель",
 	"Select an Ollama instance": "Выберите экземпляр Ollama",
 	"Select model": "Выберите модель",
+	"Selected models do not support image inputs": "",
 	"Send": "Отправить",
 	"Send a Message": "Отправить сообщение",
 	"Send message": "Отправить сообщение",
@@ -492,6 +505,7 @@
 	"Workspace": "Рабочая область",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишите предложение промпта (например, Кто вы?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишите резюме в 50 словах, которое кратко описывает [тему или ключевое слово].",
+	"Yes": "",
 	"Yesterday": "Вчера",
 	"You": "Вы",
 	"You have no archived conversations.": "У вас нет архивированных бесед.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} размишља...",
 	"{{user}}'s Chats": "Ћаскања корисника {{user}}",
 	"{{webUIName}} Backend Required": "Захтева се {{webUIName}} позадинац",
+	"A selected model does not support image input": "",
 	"a user": "корисник",
 	"About": "О нама",
 	"Account": "Налог",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Напредни параметри",
 	"all": "сви",
 	"All Documents": "Сви документи",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Сви корисници",
 	"Allow": "Дозволи",
 	"Allow Chat Deletion": "Дозволи брисање ћаскања",
@@ -115,6 +117,7 @@
 	"Created at": "Направљено у",
 	"Created At": "Направљено у",
 	"Current Model": "Тренутни модел",
+	"Current Models": "",
 	"Current Password": "Тренутна лозинка",
 	"Custom": "Прилагођено",
 	"Customize Ollama models for a specific purpose": "Прилагоди Ollama моделе за специфичну намену",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Унесите LiteLLM API RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Унесите LiteLLM модел (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Унесите највећи број жетона (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Унесите ознаку модела (нпр. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Унесите број корака (нпр. 50)",
 	"Enter Score": "Унесите резултат",
@@ -235,6 +239,7 @@
 	"Input commands": "Унеси наредбе",
 	"Interface": "Изглед",
 	"Invalid Tag": "Неисправна ознака",
+	"Is Model Vision Capable": "",
 	"January": "Јануар",
 	"join our Discord for help.": "придружите се нашем Дискорду за помоћ.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Израдила OpenWebUI заједница",
 	"Make sure to enclose them with": "Уверите се да их затворите са",
 	"Manage LiteLLM Models": "Управљај LiteLLM моделима",
+	"Manage Model Information": "",
 	"Manage Models": "Управљај моделима",
 	"Manage Ollama Models": "Управљај Ollama моделима",
 	"March": "Март",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Модел „{{modelTag}}“ је већ у реду за преузимање.",
 	"Model {{modelId}} not found": "Модел {{modelId}} није пронађен",
 	"Model {{modelName}} already exists.": "Модел {{modelName}} већ постоји.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Откривена путања система датотека модела. За ажурирање је потребан кратак назив модела, не може се наставити.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Назив модела",
 	"Model not selected": "Модел није изабран",
 	"Model Tag Name": "Назив ознаке модела",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Назовите вашу модел-датотеку",
 	"New Chat": "Ново ћаскање",
 	"New Password": "Нова лозинка",
+	"No": "",
 	"No results found": "Нема резултата",
 	"No source available": "Нема доступног извора",
 	"Not factually correct": "Није чињенично тачно",
@@ -385,6 +397,7 @@
 	"Select a model": "Изабери модел",
 	"Select an Ollama instance": "Изабери Ollama инстанцу",
 	"Select model": "Изабери модел",
+	"Selected models do not support image inputs": "",
 	"Send": "Пошаљи",
 	"Send a Message": "Пошаљи поруку",
 	"Send message": "Пошаљи поруку",
@@ -492,6 +505,7 @@
 	"Workspace": "Радни простор",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишите предлог упита (нпр. „ко си ти?“)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишите сажетак у 50 речи који резимира [тему или кључну реч].",
+	"Yes": "",
 	"Yesterday": "Јуче",
 	"You": "Ти",
 	"You have no archived conversations.": "Немате архивиране разговоре.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} tänker...",
 	"{{user}}'s Chats": "{{user}}s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Backend krävs",
+	"A selected model does not support image input": "",
 	"a user": "en användare",
 	"About": "Om",
 	"Account": "Konto",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Avancerade parametrar",
 	"all": "alla",
 	"All Documents": "Alla dokument",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Alla användare",
 	"Allow": "Tillåt",
 	"Allow Chat Deletion": "Tillåt chattborttagning",
@@ -115,6 +117,7 @@
 	"Created at": "Skapad",
 	"Created At": "Skapad",
 	"Current Model": "Aktuell modell",
+	"Current Models": "",
 	"Current Password": "Nuvarande lösenord",
 	"Custom": "Anpassad",
 	"Customize Ollama models for a specific purpose": "Anpassa Ollama-modeller för ett specifikt ändamål",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Ange LiteLLM API RPM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Ange LiteLLM-modell (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Ange max antal tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Ange modelltagg (t.ex. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Ange antal steg (t.ex. 50)",
 	"Enter Score": "Ange poäng",
@@ -235,6 +239,7 @@
 	"Input commands": "Indatakommandon",
 	"Interface": "Gränssnitt",
 	"Invalid Tag": "Ogiltig tagg",
+	"Is Model Vision Capable": "",
 	"January": "januar",
 	"join our Discord for help.": "gå med i vår Discord för hjälp.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Skapad av OpenWebUI Community",
 	"Make sure to enclose them with": "Se till att bifoga dem med",
 	"Manage LiteLLM Models": "Hantera LiteLLM-modeller",
+	"Manage Model Information": "",
 	"Manage Models": "Hantera modeller",
 	"Manage Ollama Models": "Hantera Ollama-modeller",
 	"March": "mars",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Modellen '{{modelTag}}' är redan i kö för nedladdning.",
 	"Model {{modelId}} not found": "Modell {{modelId}} hittades inte",
 	"Model {{modelName}} already exists.": "Modellen {{modelName}} finns redan.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modellens filsystemväg upptäckt. Modellens kortnamn krävs för uppdatering, kan inte fortsätta.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Modellnamn",
 	"Model not selected": "Modell inte vald",
 	"Model Tag Name": "Modelltaggnamn",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Namnge din modelfil",
 	"New Chat": "Ny chatt",
 	"New Password": "Nytt lösenord",
+	"No": "",
 	"No results found": "Inga resultat hittades",
 	"No source available": "Ingen tilgjengelig kilde",
 	"Not factually correct": "Inte faktiskt korrekt",
@@ -385,6 +397,7 @@
 	"Select a model": "Välj en modell",
 	"Select an Ollama instance": "Välj en Ollama-instans",
 	"Select model": "Välj en modell",
+	"Selected models do not support image inputs": "",
 	"Send": "Skicka",
 	"Send a Message": "Skicka ett meddelande",
 	"Send message": "Skicka meddelande",
@@ -492,6 +505,7 @@
 	"Workspace": "arbetsyta",
 	"Write a prompt suggestion (e.g. Who are you?)": "Skriv ett förslag (t.ex. Vem är du?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Skriv en sammanfattning på 50 ord som sammanfattar [ämne eller nyckelord].",
+	"Yes": "",
 	"Yesterday": "Igenom",
 	"You": "du",
 	"You have no archived conversations.": "Du har inga arkiverade konversationer.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} düşünüyor...",
 	"{{user}}'s Chats": "{{user}} Sohbetleri",
 	"{{webUIName}} Backend Required": "{{webUIName}} Arkayüz Gerekli",
+	"A selected model does not support image input": "",
 	"a user": "bir kullanıcı",
 	"About": "Hakkında",
 	"Account": "Hesap",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Gelişmiş Parametreler",
 	"all": "tümü",
 	"All Documents": "Tüm Belgeler",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Tüm Kullanıcılar",
 	"Allow": "İzin ver",
 	"Allow Chat Deletion": "Sohbet Silmeye İzin Ver",
@@ -115,6 +117,7 @@
 	"Created at": "Oluşturulma tarihi",
 	"Created At": "Şu Tarihte Oluşturuldu:",
 	"Current Model": "Mevcut Model",
+	"Current Models": "",
 	"Current Password": "Mevcut Parola",
 	"Custom": "Özel",
 	"Customize Ollama models for a specific purpose": "Ollama modellerini belirli bir amaç için özelleştirin",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM'ini Girin (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "LiteLLM Modelini Girin (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Maksimum Token Sayısını Girin (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Model etiketini girin (örn. {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Adım Sayısını Girin (örn. 50)",
 	"Enter Score": "Skoru Girin",
@@ -235,6 +239,7 @@
 	"Input commands": "Giriş komutları",
 	"Interface": "Arayüz",
 	"Invalid Tag": "Geçersiz etiket",
+	"Is Model Vision Capable": "",
 	"January": "Ocak",
 	"join our Discord for help.": "yardım için Discord'umuza katılın.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "OpenWebUI Topluluğu tarafından yapılmıştır",
 	"Make sure to enclose them with": "Değişkenlerinizi şu şekilde biçimlendirin:",
 	"Manage LiteLLM Models": "LiteLLM Modellerini Yönet",
+	"Manage Model Information": "",
 	"Manage Models": "Modelleri Yönet",
 	"Manage Ollama Models": "Ollama Modellerini Yönet",
 	"March": "Mart",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' zaten indirme sırasında.",
 	"Model {{modelId}} not found": "{{modelId}} bulunamadı",
 	"Model {{modelName}} already exists.": "{{modelName}} zaten mevcut.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model dosya sistemi yolu algılandı. Güncelleme için model kısa adı gerekli, devam edilemiyor.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Model Adı",
 	"Model not selected": "Model seçilmedi",
 	"Model Tag Name": "Model Etiket Adı",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Model dosyanıza ad verin",
 	"New Chat": "Yeni Sohbet",
 	"New Password": "Yeni Parola",
+	"No": "",
 	"No results found": "Sonuç bulunamadı",
 	"No source available": "Kaynak mevcut değil",
 	"Not factually correct": "Gerçeklere göre doğru değil",
@@ -385,6 +397,7 @@
 	"Select a model": "Bir model seç",
 	"Select an Ollama instance": "Bir Ollama örneği seçin",
 	"Select model": "Model seç",
+	"Selected models do not support image inputs": "",
 	"Send": "Gönder",
 	"Send a Message": "Bir Mesaj Gönder",
 	"Send message": "Mesaj gönder",
@@ -492,6 +505,7 @@
 	"Workspace": "Çalışma Alanı",
 	"Write a prompt suggestion (e.g. Who are you?)": "Bir prompt önerisi yazın (örn. Sen kimsin?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "[Konuyu veya anahtar kelimeyi] özetleyen 50 kelimelik bir özet yazın.",
+	"Yes": "",
 	"Yesterday": "Dün",
 	"You": "Sen",
 	"You have no archived conversations.": "Arşivlenmiş sohbetleriniz yok.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} думає...",
 	"{{user}}'s Chats": "Чати {{user}}а",
 	"{{webUIName}} Backend Required": "Необхідно підключення бекенду {{webUIName}}",
+	"A selected model does not support image input": "",
 	"a user": "користувача",
 	"About": "Про програму",
 	"Account": "Обліковий запис",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Розширені параметри",
 	"all": "всі",
 	"All Documents": "Усі документи",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Всі користувачі",
 	"Allow": "Дозволити",
 	"Allow Chat Deletion": "Дозволити видалення чату",
@@ -115,6 +117,7 @@
 	"Created at": "Створено у",
 	"Created At": "Створено у",
 	"Current Model": "Поточна модель",
+	"Current Models": "",
 	"Current Password": "Поточний пароль",
 	"Custom": "Налаштувати",
 	"Customize Ollama models for a specific purpose": "Налаштувати моделі Ollama для конкретної мети",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Введіть RPM API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Введіть модель LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Введіть максимальну кількість токенів (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Введіть тег моделі (напр., {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Введіть кількість кроків (напр., 50)",
 	"Enter Score": "Введіть бал",
@@ -235,6 +239,7 @@
 	"Input commands": "Команди вводу",
 	"Interface": "Інтерфейс",
 	"Invalid Tag": "Недійсний тег",
+	"Is Model Vision Capable": "",
 	"January": "Січень",
 	"join our Discord for help.": "приєднуйтеся до нашого Discord для допомоги.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Зроблено спільнотою OpenWebUI",
 	"Make sure to enclose them with": "Переконайтеся, що вони закриті",
 	"Manage LiteLLM Models": "Керування моделями LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Керування моделями",
 	"Manage Ollama Models": "Керування моделями Ollama",
 	"March": "Березень",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Модель '{{modelTag}}' вже знаходиться в черзі на завантаження.",
 	"Model {{modelId}} not found": "Модель {{modelId}} не знайдено",
 	"Model {{modelName}} already exists.": "Модель {{modelName}} вже існує.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Назва моделі",
 	"Model not selected": "Модель не вибрана",
 	"Model Tag Name": "Ім'я тегу моделі",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Назвіть свій файл моделі",
 	"New Chat": "Новий чат",
 	"New Password": "Новий пароль",
+	"No": "",
 	"No results found": "Не знайдено жодного результату",
 	"No source available": "Джерело не доступне",
 	"Not factually correct": "Не відповідає дійсності",
@@ -385,6 +397,7 @@
 	"Select a model": "Виберіть модель",
 	"Select an Ollama instance": "Виберіть екземпляр Ollama",
 	"Select model": "Вибрати модель",
+	"Selected models do not support image inputs": "",
 	"Send": "Надіслати",
 	"Send a Message": "Надіслати повідомлення",
 	"Send message": "Надіслати повідомлення",
@@ -492,6 +505,7 @@
 	"Workspace": "Робочий простір",
 	"Write a prompt suggestion (e.g. Who are you?)": "Напишіть промт (напр., Хто ти?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Напишіть стислий зміст у 50 слів, який узагальнює [тема або ключове слово].",
+	"Yes": "",
 	"Yesterday": "Вчора",
 	"You": "Ви",
 	"You have no archived conversations.": "У вас немає архівованих розмов.",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} đang suy nghĩ...",
 	"{{user}}'s Chats": "{{user}}'s Chats",
 	"{{webUIName}} Backend Required": "{{webUIName}} Yêu cầu Backend",
+	"A selected model does not support image input": "",
 	"a user": "người sử dụng",
 	"About": "Giới thiệu",
 	"Account": "Tài khoản",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "Các tham số Nâng cao",
 	"all": "tất cả",
 	"All Documents": "Tất cả tài liệu",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "Danh sách người sử dụng",
 	"Allow": "Cho phép",
 	"Allow Chat Deletion": "Cho phép Xóa nội dung chat",
@@ -115,6 +117,7 @@
 	"Created at": "Được tạo vào lúc",
 	"Created At": "Tạo lúc",
 	"Current Model": "Mô hình hiện tại",
+	"Current Models": "",
 	"Current Password": "Mật khẩu hiện tại",
 	"Custom": "Tùy chỉnh",
 	"Customize Ollama models for a specific purpose": "Tùy chỉnh các mô hình dựa trên Ollama cho một mục đích cụ thể",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "Nhập RPM API LiteLLM (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "Nhập Mô hình LiteLLM (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "Nhập Số Token Tối đa (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "Nhập thẻ mô hình (vd: {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "Nhập số Steps (vd: 50)",
 	"Enter Score": "Nhập Score",
@@ -235,6 +239,7 @@
 	"Input commands": "Nhập các câu lệnh",
 	"Interface": "Giao diện",
 	"Invalid Tag": "Tag không hợp lệ",
+	"Is Model Vision Capable": "",
 	"January": "Tháng 1",
 	"join our Discord for help.": "tham gia Discord của chúng tôi để được trợ giúp.",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "Được tạo bởi Cộng đồng OpenWebUI",
 	"Make sure to enclose them with": "Hãy chắc chắn bao quanh chúng bằng",
 	"Manage LiteLLM Models": "Quản lý mô hình với LiteLLM",
+	"Manage Model Information": "",
 	"Manage Models": "Quản lý mô hình",
 	"Manage Ollama Models": "Quản lý mô hình với Ollama",
 	"March": "Tháng 3",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "Mô hình '{{modelTag}}' đã có trong hàng đợi để tải xuống.",
 	"Model {{modelId}} not found": "Không tìm thấy Mô hình {{modelId}}",
 	"Model {{modelName}} already exists.": "Mô hình {{modelName}} đã tồn tại.",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Đường dẫn hệ thống tệp mô hình được phát hiện. Tên viết tắt mô hình là bắt buộc để cập nhật, không thể tiếp tục.",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "Tên Mô hình",
 	"Model not selected": "Chưa chọn Mô hình",
 	"Model Tag Name": "Tên thẻ Mô hình",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "Đặt tên cho tệp mô hình của bạn",
 	"New Chat": "Tạo cuộc trò chuyện mới",
 	"New Password": "Mật khẩu mới",
+	"No": "",
 	"No results found": "Không tìm thấy kết quả",
 	"No source available": "Không có nguồn",
 	"Not factually correct": "Không chính xác so với thực tế",
@@ -385,6 +397,7 @@
 	"Select a model": "Chọn mô hình",
 	"Select an Ollama instance": "Chọn một thực thể Ollama",
 	"Select model": "Chọn model",
+	"Selected models do not support image inputs": "",
 	"Send": "Gửi",
 	"Send a Message": "Gửi yêu cầu",
 	"Send message": "Gửi yêu cầu",
@@ -492,6 +505,7 @@
 	"Workspace": "Workspace",
 	"Write a prompt suggestion (e.g. Who are you?)": "Hãy viết một prompt (vd: Bạn là ai?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "Viết một tóm tắt trong vòng 50 từ cho [chủ đề hoặc từ khóa].",
+	"Yes": "",
 	"Yesterday": "Hôm qua",
 	"You": "Bạn",
 	"You have no archived conversations.": "Bạn chưa lưu trữ một nội dung chat nào",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} 正在思考...",
 	"{{user}}'s Chats": "{{user}} 的聊天记录",
 	"{{webUIName}} Backend Required": "需要 {{webUIName}} 后端",
+	"A selected model does not support image input": "",
 	"a user": "用户",
 	"About": "关于",
 	"Account": "账户",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "高级参数",
 	"all": "所有",
 	"All Documents": "所有文档",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "所有用户",
 	"Allow": "允许",
 	"Allow Chat Deletion": "允许删除聊天记录",
@@ -115,6 +117,7 @@
 	"Created at": "创建于",
 	"Created At": "创建于",
 	"Current Model": "当前模型",
+	"Current Models": "",
 	"Current Password": "当前密码",
 	"Custom": "自定义",
 	"Customize Ollama models for a specific purpose": "定制特定用途的 Ollama 模型",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "输入 LiteLLM API 速率限制 (litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "输入 LiteLLM 模型 (litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "输入模型的 Max Tokens (litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "输入模型标签 (例如{{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "输入步数 (例如 50)",
 	"Enter Score": "输入分",
@@ -235,6 +239,7 @@
 	"Input commands": "输入命令",
 	"Interface": "界面",
 	"Invalid Tag": "无效标签",
+	"Is Model Vision Capable": "",
 	"January": "一月",
 	"join our Discord for help.": "加入我们的 Discord 寻求帮助。",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "由 OpenWebUI 社区制作",
 	"Make sure to enclose them with": "确保将它们包含在内",
 	"Manage LiteLLM Models": "管理 LiteLLM 模型",
+	"Manage Model Information": "",
 	"Manage Models": "管理模型",
 	"Manage Ollama Models": "管理 Ollama 模型",
 	"March": "三月",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "模型'{{modelTag}}'已在下载队列中。",
 	"Model {{modelId}} not found": "未找到模型{{modelId}}",
 	"Model {{modelName}} already exists.": "模型{{modelName}}已存在。",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径。模型简名是更新所必需的,无法继续。",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "模型名称",
 	"Model not selected": "未选择模型",
 	"Model Tag Name": "模型标签名称",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "命名你的模型文件",
 	"New Chat": "新聊天",
 	"New Password": "新密码",
+	"No": "",
 	"No results found": "未找到结果",
 	"No source available": "没有可用来源",
 	"Not factually correct": "与事实不符",
@@ -385,6 +397,7 @@
 	"Select a model": "选择一个模型",
 	"Select an Ollama instance": "选择一个 Ollama 实例",
 	"Select model": "选择模型",
+	"Selected models do not support image inputs": "",
 	"Send": "发送",
 	"Send a Message": "发送消息",
 	"Send message": "发送消息",
@@ -492,6 +505,7 @@
 	"Workspace": "工作空间",
 	"Write a prompt suggestion (e.g. Who are you?)": "写一个提示建议(例如:你是谁?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "用 50 个字写一个总结 [主题或关键词]。",
+	"Yes": "",
 	"Yesterday": "昨天",
 	"You": "你",
 	"You have no archived conversations.": "你没有存档的对话。",

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

@@ -6,6 +6,7 @@
 	"{{modelName}} is thinking...": "{{modelName}} 正在思考...",
 	"{{user}}'s Chats": "{{user}} 的聊天",
 	"{{webUIName}} Backend Required": "需要 {{webUIName}} 後台",
+	"A selected model does not support image input": "",
 	"a user": "使用者",
 	"About": "關於",
 	"Account": "帳號",
@@ -31,6 +32,7 @@
 	"Advanced Parameters": "進階參數",
 	"all": "所有",
 	"All Documents": "所有文件",
+	"All selected models do not support image input, removed images": "",
 	"All Users": "所有使用者",
 	"Allow": "允許",
 	"Allow Chat Deletion": "允許刪除聊天紀錄",
@@ -115,6 +117,7 @@
 	"Created at": "建立於",
 	"Created At": "建立於",
 	"Current Model": "目前模型",
+	"Current Models": "",
 	"Current Password": "目前密碼",
 	"Custom": "自訂",
 	"Customize Ollama models for a specific purpose": "定制特定用途的 Ollama 模型",
@@ -181,6 +184,7 @@
 	"Enter LiteLLM API RPM (litellm_params.rpm)": "輸入 LiteLLM API RPM(litellm_params.rpm)",
 	"Enter LiteLLM Model (litellm_params.model)": "輸入 LiteLLM 模型(litellm_params.model)",
 	"Enter Max Tokens (litellm_params.max_tokens)": "輸入最大 Token 數(litellm_params.max_tokens)",
+	"Enter Model Display Name": "",
 	"Enter model tag (e.g. {{modelTag}})": "輸入模型標籤(例如 {{modelTag}})",
 	"Enter Number of Steps (e.g. 50)": "輸入步數(例如 50)",
 	"Enter Score": "輸入分數",
@@ -235,6 +239,7 @@
 	"Input commands": "輸入命令",
 	"Interface": "介面",
 	"Invalid Tag": "無效標籤",
+	"Is Model Vision Capable": "",
 	"January": "1月",
 	"join our Discord for help.": "加入我們的 Discord 尋找幫助。",
 	"JSON": "JSON",
@@ -253,6 +258,7 @@
 	"Made by OpenWebUI Community": "由 OpenWebUI 社區製作",
 	"Make sure to enclose them with": "請確保變數有被以下符號框住:",
 	"Manage LiteLLM Models": "管理 LiteLLM 模型",
+	"Manage Model Information": "",
 	"Manage Models": "管理模組",
 	"Manage Ollama Models": "管理 Ollama 模型",
 	"March": "3月",
@@ -272,7 +278,12 @@
 	"Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' 模型已經在下載佇列中。",
 	"Model {{modelId}} not found": "找不到 {{modelId}} 模型",
 	"Model {{modelName}} already exists.": "模型 {{modelName}} 已存在。",
+	"Model {{modelName}} is not vision capable": "",
+	"Model Description": "",
+	"Model Display Name": "",
 	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "模型文件系統路徑已檢測。需要更新模型短名,無法繼續。",
+	"Model info for {{modelName}} added successfully": "",
+	"Model info for {{modelName}} deleted successfully": "",
 	"Model Name": "模型名稱",
 	"Model not selected": "未選擇模型",
 	"Model Tag Name": "模型標籤",
@@ -289,6 +300,7 @@
 	"Name your modelfile": "命名你的 Modelfile",
 	"New Chat": "新增聊天",
 	"New Password": "新密碼",
+	"No": "",
 	"No results found": "沒有找到結果",
 	"No source available": "沒有可用的來源",
 	"Not factually correct": "與真實資訊不相符",
@@ -385,6 +397,7 @@
 	"Select a model": "選擇一個模型",
 	"Select an Ollama instance": "選擇 Ollama 實例",
 	"Select model": "選擇模型",
+	"Selected models do not support image inputs": "",
 	"Send": "傳送",
 	"Send a Message": "傳送訊息",
 	"Send message": "傳送訊息",
@@ -492,6 +505,7 @@
 	"Workspace": "工作區",
 	"Write a prompt suggestion (e.g. Who are you?)": "寫一個提示詞建議(例如:你是誰?)",
 	"Write a summary in 50 words that summarizes [topic or keyword].": "寫一個 50 字的摘要來概括 [主題或關鍵詞]。",
+	"Yes": "",
 	"Yesterday": "昨天",
 	"You": "你",
 	"You have no archived conversations.": "你沒有任何已封存的對話",

+ 11 - 9
src/lib/stores/index.ts

@@ -1,5 +1,6 @@
 import { APP_NAME } from '$lib/constants';
 import { type Writable, writable } from 'svelte/store';
+import type { GlobalModelConfig, ModelConfig } from '$lib/apis';
 
 // Backend
 export const WEBUI_NAME = writable(APP_NAME);
@@ -42,27 +43,27 @@ export const showSettings = writable(false);
 export const showArchivedChats = writable(false);
 export const showChangelog = writable(false);
 
-type Model = OpenAIModel | OllamaModel;
+export type Model = OpenAIModel | OllamaModel;
 
-type OpenAIModel = {
+type BaseModel = {
 	id: string;
 	name: string;
-	external: boolean;
-	source?: string;
+	custom_info?: ModelConfig;
 };
 
-type OllamaModel = {
-	id: string;
-	name: string;
+export interface OpenAIModel extends BaseModel {
+	external: boolean;
+	source?: string;
+}
 
-	// Ollama specific fields
+export interface OllamaModel extends BaseModel {
 	details: OllamaModelDetails;
 	size: number;
 	description: string;
 	model: string;
 	modified_at: string;
 	digest: string;
-};
+}
 
 type OllamaModelDetails = {
 	parent_model: string;
@@ -133,6 +134,7 @@ type Config = {
 	default_models?: string[];
 	default_prompt_suggestions?: PromptSuggestion[];
 	trusted_header_auth?: boolean;
+	model_config?: GlobalModelConfig;
 };
 
 type PromptSuggestion = {