mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
Merge pull request #14486 from open-webui/dev
Some checks failed
Release / release (push) Has been cancelled
Deploy to HuggingFace Spaces / check-secret (push) Has been cancelled
Create and publish Docker images with specific build args / build-main-image (linux/amd64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-main-image (linux/arm64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-cuda-image (linux/amd64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-cuda-image (linux/arm64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-ollama-image (linux/amd64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-ollama-image (linux/arm64) (push) Has been cancelled
Python CI / Format Backend (3.11.x) (push) Has been cancelled
Python CI / Format Backend (3.12.x) (push) Has been cancelled
Frontend Build / Format & Build Frontend (push) Has been cancelled
Frontend Build / Frontend Unit Tests (push) Has been cancelled
Release to PyPI / release (push) Has been cancelled
Deploy to HuggingFace Spaces / deploy (push) Has been cancelled
Create and publish Docker images with specific build args / merge-main-images (push) Has been cancelled
Create and publish Docker images with specific build args / merge-cuda-images (push) Has been cancelled
Create and publish Docker images with specific build args / merge-ollama-images (push) Has been cancelled
Some checks failed
Release / release (push) Has been cancelled
Deploy to HuggingFace Spaces / check-secret (push) Has been cancelled
Create and publish Docker images with specific build args / build-main-image (linux/amd64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-main-image (linux/arm64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-cuda-image (linux/amd64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-cuda-image (linux/arm64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-ollama-image (linux/amd64) (push) Has been cancelled
Create and publish Docker images with specific build args / build-ollama-image (linux/arm64) (push) Has been cancelled
Python CI / Format Backend (3.11.x) (push) Has been cancelled
Python CI / Format Backend (3.12.x) (push) Has been cancelled
Frontend Build / Format & Build Frontend (push) Has been cancelled
Frontend Build / Frontend Unit Tests (push) Has been cancelled
Release to PyPI / release (push) Has been cancelled
Deploy to HuggingFace Spaces / deploy (push) Has been cancelled
Create and publish Docker images with specific build args / merge-main-images (push) Has been cancelled
Create and publish Docker images with specific build args / merge-cuda-images (push) Has been cancelled
Create and publish Docker images with specific build args / merge-ollama-images (push) Has been cancelled
0.6.13
This commit is contained in:
commit
53764fe648
16
CHANGELOG.md
16
CHANGELOG.md
@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.6.13] - 2025-05-30
|
||||
|
||||
### Added
|
||||
|
||||
- 🟦 **Azure OpenAI Embedding Support**: You can now select Azure OpenAI endpoints for text embeddings, unlocking seamless integration with enterprise-scale Azure AI for powerful RAG and knowledge workflows—no more workarounds, connect and scale effortlessly.
|
||||
- 🧩 **Smarter Custom Parameter Handling**: Instantly enjoy more flexible model setup—any JSON pasted into custom parameter fields is now parsed automatically, so you can define rich, nested parameters without tedious manual adjustment. This streamlines advanced configuration for all models and accelerates experimentation.
|
||||
- ⚙️ **General Backend Refactoring**: Significant backend improvements deliver a cleaner codebase for better maintainability, faster performance, and even greater platform reliability—making all your workflows run more smoothly.
|
||||
- 🌏 **Localization Upgrades**: Experience highly improved user interface translations and clarity in Simplified, Traditional Chinese, Korean, and Finnish, offering a more natural, accurate, and accessible experience for global users.
|
||||
|
||||
### Fixed
|
||||
|
||||
- 🛡️ **Robust Message Handling on Chat Load**: Fixed an issue where chat pages could fail to load if a referenced message was missing or undefined; now, chats always load smoothly and missing IDs no longer disrupt your workflow.
|
||||
- 📝 **Correct Prompt Access Control**: Ensured that the prompt access controls register properly, restoring reliable permissioning and safeguarding your prompt workflows.
|
||||
- 🛠 **Open WebUI-Specific Params No Longer Sent to Models**: Fixed a bug that sent internal WebUI parameters to APIs, ensuring only intended model options are transmitted—restoring predictable, error-free model operation.
|
||||
- 🧠 **Refined Memory Error Handling**: Enhanced stability during memory-related operations, so even uncommon memory errors are gracefully managed without disrupting your session—resulting in a more reliable, worry-free experience.
|
||||
|
||||
## [0.6.12] - 2025-05-29
|
||||
|
||||
### Added
|
||||
|
@ -83,7 +83,7 @@ Want to learn more about Open WebUI's features? Check out our [Open WebUI docume
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
Wrap • The intelligent terminal for developers
|
||||
<a href="https://warp.dev/open-webui">Warp</a> • The intelligent terminal for developers
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -2184,6 +2184,22 @@ RAG_OPENAI_API_KEY = PersistentConfig(
|
||||
os.getenv("RAG_OPENAI_API_KEY", OPENAI_API_KEY),
|
||||
)
|
||||
|
||||
RAG_AZURE_OPENAI_BASE_URL = PersistentConfig(
|
||||
"RAG_AZURE_OPENAI_BASE_URL",
|
||||
"rag.azure_openai.base_url",
|
||||
os.getenv("RAG_AZURE_OPENAI_BASE_URL", ""),
|
||||
)
|
||||
RAG_AZURE_OPENAI_API_KEY = PersistentConfig(
|
||||
"RAG_AZURE_OPENAI_API_KEY",
|
||||
"rag.azure_openai.api_key",
|
||||
os.getenv("RAG_AZURE_OPENAI_API_KEY", ""),
|
||||
)
|
||||
RAG_AZURE_OPENAI_API_VERSION = PersistentConfig(
|
||||
"RAG_AZURE_OPENAI_API_VERSION",
|
||||
"rag.azure_openai.api_version",
|
||||
os.getenv("RAG_AZURE_OPENAI_API_VERSION", ""),
|
||||
)
|
||||
|
||||
RAG_OLLAMA_BASE_URL = PersistentConfig(
|
||||
"RAG_OLLAMA_BASE_URL",
|
||||
"rag.ollama.url",
|
||||
|
@ -253,8 +253,13 @@ async def generate_function_chat_completion(
|
||||
form_data["model"] = model_info.base_model_id
|
||||
|
||||
params = model_info.params.model_dump()
|
||||
form_data = apply_model_params_to_body_openai(params, form_data)
|
||||
form_data = apply_model_system_prompt_to_body(params, form_data, metadata, user)
|
||||
|
||||
if params:
|
||||
system = params.pop("system", None)
|
||||
form_data = apply_model_params_to_body_openai(params, form_data)
|
||||
form_data = apply_model_system_prompt_to_body(
|
||||
system, form_data, metadata, user
|
||||
)
|
||||
|
||||
pipe_id = get_pipe_id(form_data)
|
||||
function_module = get_function_module_by_id(request, pipe_id)
|
||||
|
@ -207,6 +207,9 @@ from open_webui.config import (
|
||||
RAG_FILE_MAX_SIZE,
|
||||
RAG_OPENAI_API_BASE_URL,
|
||||
RAG_OPENAI_API_KEY,
|
||||
RAG_AZURE_OPENAI_BASE_URL,
|
||||
RAG_AZURE_OPENAI_API_KEY,
|
||||
RAG_AZURE_OPENAI_API_VERSION,
|
||||
RAG_OLLAMA_BASE_URL,
|
||||
RAG_OLLAMA_API_KEY,
|
||||
CHUNK_OVERLAP,
|
||||
@ -717,6 +720,10 @@ app.state.config.RAG_TEMPLATE = RAG_TEMPLATE
|
||||
app.state.config.RAG_OPENAI_API_BASE_URL = RAG_OPENAI_API_BASE_URL
|
||||
app.state.config.RAG_OPENAI_API_KEY = RAG_OPENAI_API_KEY
|
||||
|
||||
app.state.config.RAG_AZURE_OPENAI_BASE_URL = RAG_AZURE_OPENAI_BASE_URL
|
||||
app.state.config.RAG_AZURE_OPENAI_API_KEY = RAG_AZURE_OPENAI_API_KEY
|
||||
app.state.config.RAG_AZURE_OPENAI_API_VERSION = RAG_AZURE_OPENAI_API_VERSION
|
||||
|
||||
app.state.config.RAG_OLLAMA_BASE_URL = RAG_OLLAMA_BASE_URL
|
||||
app.state.config.RAG_OLLAMA_API_KEY = RAG_OLLAMA_API_KEY
|
||||
|
||||
@ -811,14 +818,27 @@ app.state.EMBEDDING_FUNCTION = get_embedding_function(
|
||||
(
|
||||
app.state.config.RAG_OPENAI_API_BASE_URL
|
||||
if app.state.config.RAG_EMBEDDING_ENGINE == "openai"
|
||||
else app.state.config.RAG_OLLAMA_BASE_URL
|
||||
else (
|
||||
app.state.config.RAG_OLLAMA_BASE_URL
|
||||
if app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
|
||||
else app.state.config.RAG_AZURE_OPENAI_BASE_URL
|
||||
)
|
||||
),
|
||||
(
|
||||
app.state.config.RAG_OPENAI_API_KEY
|
||||
if app.state.config.RAG_EMBEDDING_ENGINE == "openai"
|
||||
else app.state.config.RAG_OLLAMA_API_KEY
|
||||
else (
|
||||
app.state.config.RAG_OLLAMA_API_KEY
|
||||
if app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
|
||||
else app.state.config.RAG_AZURE_OPENAI_API_KEY
|
||||
)
|
||||
),
|
||||
app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
||||
azure_api_version=(
|
||||
app.state.config.RAG_AZURE_OPENAI_API_VERSION
|
||||
if app.state.config.RAG_EMBEDDING_ENGINE == "azure_openai"
|
||||
else None
|
||||
),
|
||||
)
|
||||
|
||||
########################################
|
||||
|
@ -5,6 +5,7 @@ from typing import Optional, Union
|
||||
import requests
|
||||
import hashlib
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
import time
|
||||
|
||||
from huggingface_hub import snapshot_download
|
||||
from langchain.retrievers import ContextualCompressionRetriever, EnsembleRetriever
|
||||
@ -400,12 +401,13 @@ def get_embedding_function(
|
||||
url,
|
||||
key,
|
||||
embedding_batch_size,
|
||||
azure_api_version=None,
|
||||
):
|
||||
if embedding_engine == "":
|
||||
return lambda query, prefix=None, user=None: embedding_function.encode(
|
||||
query, **({"prompt": prefix} if prefix else {})
|
||||
).tolist()
|
||||
elif embedding_engine in ["ollama", "openai"]:
|
||||
elif embedding_engine in ["ollama", "openai", "azure_openai"]:
|
||||
func = lambda query, prefix=None, user=None: generate_embeddings(
|
||||
engine=embedding_engine,
|
||||
model=embedding_model,
|
||||
@ -414,6 +416,7 @@ def get_embedding_function(
|
||||
url=url,
|
||||
key=key,
|
||||
user=user,
|
||||
azure_api_version=azure_api_version,
|
||||
)
|
||||
|
||||
def generate_multiple(query, prefix, user, func):
|
||||
@ -697,6 +700,60 @@ def generate_openai_batch_embeddings(
|
||||
return None
|
||||
|
||||
|
||||
def generate_azure_openai_batch_embeddings(
|
||||
model: str,
|
||||
texts: list[str],
|
||||
url: str,
|
||||
key: str = "",
|
||||
version: str = "",
|
||||
prefix: str = None,
|
||||
user: UserModel = None,
|
||||
) -> Optional[list[list[float]]]:
|
||||
try:
|
||||
log.debug(
|
||||
f"generate_azure_openai_batch_embeddings:deployment {model} batch size: {len(texts)}"
|
||||
)
|
||||
json_data = {"input": texts}
|
||||
if isinstance(RAG_EMBEDDING_PREFIX_FIELD_NAME, str) and isinstance(prefix, str):
|
||||
json_data[RAG_EMBEDDING_PREFIX_FIELD_NAME] = prefix
|
||||
|
||||
url = f"{url}/openai/deployments/{model}/embeddings?api-version={version}"
|
||||
|
||||
for _ in range(5):
|
||||
r = requests.post(
|
||||
url,
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
"api-key": key,
|
||||
**(
|
||||
{
|
||||
"X-OpenWebUI-User-Name": user.name,
|
||||
"X-OpenWebUI-User-Id": user.id,
|
||||
"X-OpenWebUI-User-Email": user.email,
|
||||
"X-OpenWebUI-User-Role": user.role,
|
||||
}
|
||||
if ENABLE_FORWARD_USER_INFO_HEADERS and user
|
||||
else {}
|
||||
),
|
||||
},
|
||||
json=json_data,
|
||||
)
|
||||
if r.status_code == 429:
|
||||
retry = float(r.headers.get("Retry-After", "1"))
|
||||
time.sleep(retry)
|
||||
continue
|
||||
r.raise_for_status()
|
||||
data = r.json()
|
||||
if "data" in data:
|
||||
return [elem["embedding"] for elem in data["data"]]
|
||||
else:
|
||||
raise Exception("Something went wrong :/")
|
||||
return None
|
||||
except Exception as e:
|
||||
log.exception(f"Error generating azure openai batch embeddings: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def generate_ollama_batch_embeddings(
|
||||
model: str,
|
||||
texts: list[str],
|
||||
@ -761,38 +818,33 @@ def generate_embeddings(
|
||||
text = f"{prefix}{text}"
|
||||
|
||||
if engine == "ollama":
|
||||
if isinstance(text, list):
|
||||
embeddings = generate_ollama_batch_embeddings(
|
||||
**{
|
||||
"model": model,
|
||||
"texts": text,
|
||||
"url": url,
|
||||
"key": key,
|
||||
"prefix": prefix,
|
||||
"user": user,
|
||||
}
|
||||
)
|
||||
else:
|
||||
embeddings = generate_ollama_batch_embeddings(
|
||||
**{
|
||||
"model": model,
|
||||
"texts": [text],
|
||||
"url": url,
|
||||
"key": key,
|
||||
"prefix": prefix,
|
||||
"user": user,
|
||||
}
|
||||
)
|
||||
embeddings = generate_ollama_batch_embeddings(
|
||||
**{
|
||||
"model": model,
|
||||
"texts": text if isinstance(text, list) else [text],
|
||||
"url": url,
|
||||
"key": key,
|
||||
"prefix": prefix,
|
||||
"user": user,
|
||||
}
|
||||
)
|
||||
return embeddings[0] if isinstance(text, str) else embeddings
|
||||
elif engine == "openai":
|
||||
if isinstance(text, list):
|
||||
embeddings = generate_openai_batch_embeddings(
|
||||
model, text, url, key, prefix, user
|
||||
)
|
||||
else:
|
||||
embeddings = generate_openai_batch_embeddings(
|
||||
model, [text], url, key, prefix, user
|
||||
)
|
||||
embeddings = generate_openai_batch_embeddings(
|
||||
model, text if isinstance(text, list) else [text], url, key, prefix, user
|
||||
)
|
||||
return embeddings[0] if isinstance(text, str) else embeddings
|
||||
elif engine == "azure_openai":
|
||||
azure_api_version = kwargs.get("azure_api_version", "")
|
||||
embeddings = generate_azure_openai_batch_embeddings(
|
||||
model,
|
||||
text if isinstance(text, list) else [text],
|
||||
url,
|
||||
key,
|
||||
azure_api_version,
|
||||
prefix,
|
||||
user,
|
||||
)
|
||||
return embeddings[0] if isinstance(text, str) else embeddings
|
||||
|
||||
|
||||
|
@ -96,12 +96,9 @@ def is_audio_conversion_required(file_path):
|
||||
# File is AAC/mp4a audio, recommend mp3 conversion
|
||||
return True
|
||||
|
||||
# If the codec name or file extension is in the supported formats
|
||||
if (
|
||||
codec_name in SUPPORTED_FORMATS
|
||||
or os.path.splitext(file_path)[1][1:].lower() in SUPPORTED_FORMATS
|
||||
):
|
||||
return False # Already supported
|
||||
# If the codec name is in the supported formats
|
||||
if codec_name in SUPPORTED_FORMATS:
|
||||
return False
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
|
@ -1283,13 +1283,14 @@ async def generate_chat_completion(
|
||||
params = model_info.params.model_dump()
|
||||
|
||||
if params:
|
||||
if payload.get("options") is None:
|
||||
payload["options"] = {}
|
||||
system = params.pop("system", None)
|
||||
|
||||
# Unlike OpenAI, Ollama does not support params directly in the body
|
||||
payload["options"] = apply_model_params_to_body_ollama(
|
||||
params, payload["options"]
|
||||
params, (payload.get("options", {}) or {})
|
||||
)
|
||||
payload = apply_model_system_prompt_to_body(params, payload, metadata, user)
|
||||
|
||||
payload = apply_model_system_prompt_to_body(system, payload, metadata, user)
|
||||
|
||||
# Check if user has access to the model
|
||||
if not bypass_filter and user.role == "user":
|
||||
@ -1471,8 +1472,10 @@ async def generate_openai_chat_completion(
|
||||
params = model_info.params.model_dump()
|
||||
|
||||
if params:
|
||||
system = params.pop("system", None)
|
||||
|
||||
payload = apply_model_params_to_body_openai(params, payload)
|
||||
payload = apply_model_system_prompt_to_body(params, payload, metadata, user)
|
||||
payload = apply_model_system_prompt_to_body(system, payload, metadata, user)
|
||||
|
||||
# Check if user has access to the model
|
||||
if user.role == "user":
|
||||
|
@ -715,8 +715,12 @@ async def generate_chat_completion(
|
||||
model_id = model_info.base_model_id
|
||||
|
||||
params = model_info.params.model_dump()
|
||||
payload = apply_model_params_to_body_openai(params, payload)
|
||||
payload = apply_model_system_prompt_to_body(params, payload, metadata, user)
|
||||
|
||||
if params:
|
||||
system = params.pop("system", None)
|
||||
|
||||
payload = apply_model_params_to_body_openai(params, payload)
|
||||
payload = apply_model_system_prompt_to_body(system, payload, metadata, user)
|
||||
|
||||
# Check if user has access to the model
|
||||
if not bypass_filter and user.role == "user":
|
||||
|
@ -239,6 +239,11 @@ async def get_embedding_config(request: Request, user=Depends(get_admin_user)):
|
||||
"url": request.app.state.config.RAG_OLLAMA_BASE_URL,
|
||||
"key": request.app.state.config.RAG_OLLAMA_API_KEY,
|
||||
},
|
||||
"azure_openai_config": {
|
||||
"url": request.app.state.config.RAG_AZURE_OPENAI_BASE_URL,
|
||||
"key": request.app.state.config.RAG_AZURE_OPENAI_API_KEY,
|
||||
"version": request.app.state.config.RAG_AZURE_OPENAI_API_VERSION,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@ -252,9 +257,16 @@ class OllamaConfigForm(BaseModel):
|
||||
key: str
|
||||
|
||||
|
||||
class AzureOpenAIConfigForm(BaseModel):
|
||||
url: str
|
||||
key: str
|
||||
version: str
|
||||
|
||||
|
||||
class EmbeddingModelUpdateForm(BaseModel):
|
||||
openai_config: Optional[OpenAIConfigForm] = None
|
||||
ollama_config: Optional[OllamaConfigForm] = None
|
||||
azure_openai_config: Optional[AzureOpenAIConfigForm] = None
|
||||
embedding_engine: str
|
||||
embedding_model: str
|
||||
embedding_batch_size: Optional[int] = 1
|
||||
@ -271,7 +283,11 @@ async def update_embedding_config(
|
||||
request.app.state.config.RAG_EMBEDDING_ENGINE = form_data.embedding_engine
|
||||
request.app.state.config.RAG_EMBEDDING_MODEL = form_data.embedding_model
|
||||
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE in ["ollama", "openai"]:
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE in [
|
||||
"ollama",
|
||||
"openai",
|
||||
"azure_openai",
|
||||
]:
|
||||
if form_data.openai_config is not None:
|
||||
request.app.state.config.RAG_OPENAI_API_BASE_URL = (
|
||||
form_data.openai_config.url
|
||||
@ -288,6 +304,17 @@ async def update_embedding_config(
|
||||
form_data.ollama_config.key
|
||||
)
|
||||
|
||||
if form_data.azure_openai_config is not None:
|
||||
request.app.state.config.RAG_AZURE_OPENAI_BASE_URL = (
|
||||
form_data.azure_openai_config.url
|
||||
)
|
||||
request.app.state.config.RAG_AZURE_OPENAI_API_KEY = (
|
||||
form_data.azure_openai_config.key
|
||||
)
|
||||
request.app.state.config.RAG_AZURE_OPENAI_API_VERSION = (
|
||||
form_data.azure_openai_config.version
|
||||
)
|
||||
|
||||
request.app.state.config.RAG_EMBEDDING_BATCH_SIZE = (
|
||||
form_data.embedding_batch_size
|
||||
)
|
||||
@ -304,14 +331,27 @@ async def update_embedding_config(
|
||||
(
|
||||
request.app.state.config.RAG_OPENAI_API_BASE_URL
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "openai"
|
||||
else request.app.state.config.RAG_OLLAMA_BASE_URL
|
||||
else (
|
||||
request.app.state.config.RAG_OLLAMA_BASE_URL
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
|
||||
else request.app.state.config.RAG_AZURE_OPENAI_BASE_URL
|
||||
)
|
||||
),
|
||||
(
|
||||
request.app.state.config.RAG_OPENAI_API_KEY
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "openai"
|
||||
else request.app.state.config.RAG_OLLAMA_API_KEY
|
||||
else (
|
||||
request.app.state.config.RAG_OLLAMA_API_KEY
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
|
||||
else request.app.state.config.RAG_AZURE_OPENAI_API_KEY
|
||||
)
|
||||
),
|
||||
request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
||||
azure_api_version=(
|
||||
request.app.state.config.RAG_AZURE_OPENAI_API_VERSION
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "azure_openai"
|
||||
else None
|
||||
),
|
||||
)
|
||||
|
||||
return {
|
||||
@ -327,6 +367,11 @@ async def update_embedding_config(
|
||||
"url": request.app.state.config.RAG_OLLAMA_BASE_URL,
|
||||
"key": request.app.state.config.RAG_OLLAMA_API_KEY,
|
||||
},
|
||||
"azure_openai_config": {
|
||||
"url": request.app.state.config.RAG_AZURE_OPENAI_BASE_URL,
|
||||
"key": request.app.state.config.RAG_AZURE_OPENAI_API_KEY,
|
||||
"version": request.app.state.config.RAG_AZURE_OPENAI_API_VERSION,
|
||||
},
|
||||
}
|
||||
except Exception as e:
|
||||
log.exception(f"Problem updating embedding model: {e}")
|
||||
@ -1129,14 +1174,27 @@ def save_docs_to_vector_db(
|
||||
(
|
||||
request.app.state.config.RAG_OPENAI_API_BASE_URL
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "openai"
|
||||
else request.app.state.config.RAG_OLLAMA_BASE_URL
|
||||
else (
|
||||
request.app.state.config.RAG_OLLAMA_BASE_URL
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
|
||||
else request.app.state.config.RAG_AZURE_OPENAI_BASE_URL
|
||||
)
|
||||
),
|
||||
(
|
||||
request.app.state.config.RAG_OPENAI_API_KEY
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "openai"
|
||||
else request.app.state.config.RAG_OLLAMA_API_KEY
|
||||
else (
|
||||
request.app.state.config.RAG_OLLAMA_API_KEY
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
|
||||
else request.app.state.config.RAG_AZURE_OPENAI_API_KEY
|
||||
)
|
||||
),
|
||||
request.app.state.config.RAG_EMBEDDING_BATCH_SIZE,
|
||||
azure_api_version=(
|
||||
request.app.state.config.RAG_AZURE_OPENAI_API_VERSION
|
||||
if request.app.state.config.RAG_EMBEDDING_ENGINE == "azure_openai"
|
||||
else None
|
||||
),
|
||||
)
|
||||
|
||||
embeddings = embedding_function(
|
||||
|
@ -299,13 +299,20 @@ async def chat_completion_tools_handler(
|
||||
async def chat_memory_handler(
|
||||
request: Request, form_data: dict, extra_params: dict, user
|
||||
):
|
||||
results = await query_memory(
|
||||
request,
|
||||
QueryMemoryForm(
|
||||
**{"content": get_last_user_message(form_data["messages"]), "k": 3}
|
||||
),
|
||||
user,
|
||||
)
|
||||
try:
|
||||
results = await query_memory(
|
||||
request,
|
||||
QueryMemoryForm(
|
||||
**{
|
||||
"content": get_last_user_message(form_data["messages"]) or "",
|
||||
"k": 3,
|
||||
}
|
||||
),
|
||||
user,
|
||||
)
|
||||
except Exception as e:
|
||||
log.debug(e)
|
||||
results = None
|
||||
|
||||
user_context = ""
|
||||
if results and hasattr(results, "documents"):
|
||||
@ -660,7 +667,27 @@ def apply_params_to_form_data(form_data, model):
|
||||
params = form_data.pop("params", {})
|
||||
custom_params = params.pop("custom_params", {})
|
||||
|
||||
open_webui_params = {
|
||||
"stream_response": bool,
|
||||
"function_calling": str,
|
||||
"system": str,
|
||||
}
|
||||
|
||||
for key in list(params.keys()):
|
||||
if key in open_webui_params:
|
||||
del params[key]
|
||||
|
||||
if custom_params:
|
||||
# Attempt to parse custom_params if they are strings
|
||||
for key, value in custom_params.items():
|
||||
if isinstance(value, str):
|
||||
try:
|
||||
# Attempt to parse the string as JSON
|
||||
custom_params[key] = json.loads(value)
|
||||
except json.JSONDecodeError:
|
||||
# If it fails, keep the original string
|
||||
pass
|
||||
|
||||
# If custom_params are provided, merge them into params
|
||||
params = deep_update(params, custom_params)
|
||||
|
||||
|
@ -10,9 +10,8 @@ import json
|
||||
|
||||
# inplace function: form_data is modified
|
||||
def apply_model_system_prompt_to_body(
|
||||
params: dict, form_data: dict, metadata: Optional[dict] = None, user=None
|
||||
system: Optional[str], form_data: dict, metadata: Optional[dict] = None, user=None
|
||||
) -> dict:
|
||||
system = params.get("system", None)
|
||||
if not system:
|
||||
return form_data
|
||||
|
||||
@ -58,10 +57,45 @@ def apply_model_params_to_body(
|
||||
return form_data
|
||||
|
||||
|
||||
def remove_open_webui_params(params: dict) -> dict:
|
||||
"""
|
||||
Removes OpenWebUI specific parameters from the provided dictionary.
|
||||
|
||||
Args:
|
||||
params (dict): The dictionary containing parameters.
|
||||
|
||||
Returns:
|
||||
dict: The modified dictionary with OpenWebUI parameters removed.
|
||||
"""
|
||||
open_webui_params = {
|
||||
"stream_response": bool,
|
||||
"function_calling": str,
|
||||
"system": str,
|
||||
}
|
||||
|
||||
for key in list(params.keys()):
|
||||
if key in open_webui_params:
|
||||
del params[key]
|
||||
|
||||
return params
|
||||
|
||||
|
||||
# inplace function: form_data is modified
|
||||
def apply_model_params_to_body_openai(params: dict, form_data: dict) -> dict:
|
||||
params = remove_open_webui_params(params)
|
||||
|
||||
custom_params = params.pop("custom_params", {})
|
||||
if custom_params:
|
||||
# Attempt to parse custom_params if they are strings
|
||||
for key, value in custom_params.items():
|
||||
if isinstance(value, str):
|
||||
try:
|
||||
# Attempt to parse the string as JSON
|
||||
custom_params[key] = json.loads(value)
|
||||
except json.JSONDecodeError:
|
||||
# If it fails, keep the original string
|
||||
pass
|
||||
|
||||
# If there are custom parameters, we need to apply them first
|
||||
params = deep_update(params, custom_params)
|
||||
|
||||
@ -82,8 +116,20 @@ def apply_model_params_to_body_openai(params: dict, form_data: dict) -> dict:
|
||||
|
||||
|
||||
def apply_model_params_to_body_ollama(params: dict, form_data: dict) -> dict:
|
||||
params = remove_open_webui_params(params)
|
||||
|
||||
custom_params = params.pop("custom_params", {})
|
||||
if custom_params:
|
||||
# Attempt to parse custom_params if they are strings
|
||||
for key, value in custom_params.items():
|
||||
if isinstance(value, str):
|
||||
try:
|
||||
# Attempt to parse the string as JSON
|
||||
custom_params[key] = json.loads(value)
|
||||
except json.JSONDecodeError:
|
||||
# If it fails, keep the original string
|
||||
pass
|
||||
|
||||
# If there are custom parameters, we need to apply them first
|
||||
params = deep_update(params, custom_params)
|
||||
|
||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "open-webui",
|
||||
"version": "0.6.12",
|
||||
"version": "0.6.13",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "open-webui",
|
||||
"version": "0.6.12",
|
||||
"version": "0.6.13",
|
||||
"dependencies": {
|
||||
"@azure/msal-browser": "^4.5.0",
|
||||
"@codemirror/lang-javascript": "^6.2.2",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "open-webui",
|
||||
"version": "0.6.12",
|
||||
"version": "0.6.13",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run pyodide:fetch && vite dev --host",
|
||||
|
@ -184,8 +184,15 @@ type OpenAIConfigForm = {
|
||||
url: string;
|
||||
};
|
||||
|
||||
type AzureOpenAIConfigForm = {
|
||||
key: string;
|
||||
url: string;
|
||||
version: string;
|
||||
};
|
||||
|
||||
type EmbeddingModelUpdateForm = {
|
||||
openai_config?: OpenAIConfigForm;
|
||||
azure_openai_config?: AzureOpenAIConfigForm;
|
||||
embedding_engine: string;
|
||||
embedding_model: string;
|
||||
embedding_batch_size?: number;
|
||||
|
@ -46,6 +46,10 @@
|
||||
let OpenAIUrl = '';
|
||||
let OpenAIKey = '';
|
||||
|
||||
let AzureOpenAIUrl = '';
|
||||
let AzureOpenAIKey = '';
|
||||
let AzureOpenAIVersion = '';
|
||||
|
||||
let OllamaUrl = '';
|
||||
let OllamaKey = '';
|
||||
|
||||
@ -86,7 +90,14 @@
|
||||
return;
|
||||
}
|
||||
|
||||
if ((embeddingEngine === 'openai' && OpenAIKey === '') || OpenAIUrl === '') {
|
||||
if (embeddingEngine === 'openai' && (OpenAIKey === '' || OpenAIUrl === '')) {
|
||||
toast.error($i18n.t('OpenAI URL/Key required.'));
|
||||
return;
|
||||
}
|
||||
if (
|
||||
embeddingEngine === 'azure_openai' &&
|
||||
(AzureOpenAIKey === '' || AzureOpenAIUrl === '' || AzureOpenAIVersion === '')
|
||||
) {
|
||||
toast.error($i18n.t('OpenAI URL/Key required.'));
|
||||
return;
|
||||
}
|
||||
@ -105,6 +116,11 @@
|
||||
openai_config: {
|
||||
key: OpenAIKey,
|
||||
url: OpenAIUrl
|
||||
},
|
||||
azure_openai_config: {
|
||||
key: AzureOpenAIKey,
|
||||
url: AzureOpenAIUrl,
|
||||
version: AzureOpenAIVersion
|
||||
}
|
||||
}).catch(async (error) => {
|
||||
toast.error(`${error}`);
|
||||
@ -205,6 +221,10 @@
|
||||
|
||||
OllamaKey = embeddingConfig.ollama_config.key;
|
||||
OllamaUrl = embeddingConfig.ollama_config.url;
|
||||
|
||||
AzureOpenAIKey = embeddingConfig.azure_openai_config.key;
|
||||
AzureOpenAIUrl = embeddingConfig.azure_openai_config.url;
|
||||
AzureOpenAIVersion = embeddingConfig.azure_openai_config.version;
|
||||
}
|
||||
};
|
||||
onMount(async () => {
|
||||
@ -607,6 +627,8 @@
|
||||
embeddingModel = '';
|
||||
} else if (e.target.value === 'openai') {
|
||||
embeddingModel = 'text-embedding-3-small';
|
||||
} else if (e.target.value === 'azure_openai') {
|
||||
embeddingModel = 'text-embedding-3-small';
|
||||
} else if (e.target.value === '') {
|
||||
embeddingModel = 'sentence-transformers/all-MiniLM-L6-v2';
|
||||
}
|
||||
@ -615,6 +637,7 @@
|
||||
<option value="">{$i18n.t('Default (SentenceTransformers)')}</option>
|
||||
<option value="ollama">{$i18n.t('Ollama')}</option>
|
||||
<option value="openai">{$i18n.t('OpenAI')}</option>
|
||||
<option value="azure_openai">Azure OpenAI</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -645,6 +668,26 @@
|
||||
required={false}
|
||||
/>
|
||||
</div>
|
||||
{:else if embeddingEngine === 'azure_openai'}
|
||||
<div class="my-0.5 flex flex-col gap-2 pr-2 w-full">
|
||||
<div class="flex gap-2">
|
||||
<input
|
||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||
placeholder={$i18n.t('API Base URL')}
|
||||
bind:value={AzureOpenAIUrl}
|
||||
required
|
||||
/>
|
||||
<SensitiveInput placeholder={$i18n.t('API Key')} bind:value={AzureOpenAIKey} />
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<input
|
||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||
placeholder="Version"
|
||||
bind:value={AzureOpenAIVersion}
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
@ -741,7 +784,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{#if embeddingEngine === 'ollama' || embeddingEngine === 'openai'}
|
||||
{#if embeddingEngine === 'ollama' || embeddingEngine === 'openai' || embeddingEngine === 'azure_openai'}
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
{$i18n.t('Embedding Batch Size')}
|
||||
|
@ -72,7 +72,7 @@
|
||||
command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command;
|
||||
content = prompt.content;
|
||||
|
||||
accessControl = prompt?.access_control ?? {};
|
||||
accessControl = prompt?.access_control === undefined ? {} : prompt?.access_control;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
@ -35,7 +35,7 @@
|
||||
"Add Connection": "Lisää yhteys",
|
||||
"Add Content": "Lisää sisältöä",
|
||||
"Add content here": "Lisää sisältöä tähän",
|
||||
"Add Custom Parameter": "",
|
||||
"Add Custom Parameter": "Lisää mukautettu parametri",
|
||||
"Add custom prompt": "Lisää mukautettu kehote",
|
||||
"Add Files": "Lisää tiedostoja",
|
||||
"Add Group": "Lisää ryhmä",
|
||||
@ -126,7 +126,7 @@
|
||||
"Authentication": "Todennus",
|
||||
"Auto": "Automaattinen",
|
||||
"Auto-Copy Response to Clipboard": "Kopioi vastaus automaattisesti leikepöydälle",
|
||||
"Auto-playback response": "Soita vastaus automaattisesti",
|
||||
"Auto-playback response": "Toista vastaus automaattisesti",
|
||||
"Autocomplete Generation": "Automaattisen täydennyksen luonti",
|
||||
"Autocomplete Generation Input Max Length": "Automaattisen täydennyksen syötteen enimmäispituus",
|
||||
"Automatic1111": "Automatic1111",
|
||||
@ -253,7 +253,7 @@
|
||||
"Controls": "Ohjaimet",
|
||||
"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "Kontrolloi yhtenäisyyden ja monimuotoisuuden tasapainoa tuloksessa. Pienempi arvo tuottaa kohdennetumman ja johdonmukaisemman tekstin.",
|
||||
"Copied": "Kopioitu",
|
||||
"Copied link to clipboard": "",
|
||||
"Copied link to clipboard": "Linkki kopioitu leikepöydälle",
|
||||
"Copied shared chat URL to clipboard!": "Jaettu keskustelulinkki kopioitu leikepöydälle!",
|
||||
"Copied to clipboard": "Kopioitu leikepöydälle",
|
||||
"Copy": "Kopioi",
|
||||
@ -284,13 +284,13 @@
|
||||
"Current Model": "Nykyinen malli",
|
||||
"Current Password": "Nykyinen salasana",
|
||||
"Custom": "Mukautettu",
|
||||
"Custom Parameter Name": "",
|
||||
"Custom Parameter Value": "",
|
||||
"Custom Parameter Name": "Mukautetun parametrin nimi",
|
||||
"Custom Parameter Value": "Mukautetun parametrin arvo",
|
||||
"Danger Zone": "Vaara-alue",
|
||||
"Dark": "Tumma",
|
||||
"Database": "Tietokanta",
|
||||
"Datalab Marker API": "",
|
||||
"Datalab Marker API Key required.": "",
|
||||
"Datalab Marker API": "Datalab Marker API",
|
||||
"Datalab Marker API Key required.": "Datalab Marker API-avain vaaditaan.",
|
||||
"December": "joulukuu",
|
||||
"Default": "Oletus",
|
||||
"Default (Open AI)": "Oletus (Open AI)",
|
||||
@ -330,15 +330,15 @@
|
||||
"Describe your knowledge base and objectives": "Kuvaa tietokantasi ja tavoitteesi",
|
||||
"Description": "Kuvaus",
|
||||
"Detect Artifacts Automatically": "Tunnista artefaktit automaattisesti",
|
||||
"Dictate": "",
|
||||
"Dictate": "Sanele",
|
||||
"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
|
||||
"Direct": "Suora",
|
||||
"Direct Connections": "Suorat yhteydet",
|
||||
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Suorat yhteydet mahdollistavat käyttäjien yhdistää omia OpenAI-yhteensopivia API-päätepisteitä.",
|
||||
"Direct Connections settings updated": "Suorien yhteyksien asetukset päivitetty",
|
||||
"Direct Tool Servers": "Suorat työkalu palvelimet",
|
||||
"Disable Image Extraction": "",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "",
|
||||
"Disable Image Extraction": "Poista kuvien poiminta käytöstä",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "Poista kuvien poiminta käytöstä PDF tiedostoista. Jos LLM on käytössä, kuvat tekstitetään automaattisesti. Oletuksena ei käytössä.",
|
||||
"Disabled": "Ei käytössä",
|
||||
"Discover a function": "Löydä toiminto",
|
||||
"Discover a model": "Tutustu malliin",
|
||||
@ -383,7 +383,7 @@
|
||||
"e.g. \"json\" or a JSON schema": "esim. \"json\" tai JSON kaava",
|
||||
"e.g. 60": "esim. 60",
|
||||
"e.g. A filter to remove profanity from text": "esim. suodatin, joka poistaa kirosanoja tekstistä",
|
||||
"e.g. en": "",
|
||||
"e.g. en": "esim. en",
|
||||
"e.g. My Filter": "esim. Oma suodatin",
|
||||
"e.g. My Tools": "esim. Omat työkalut",
|
||||
"e.g. my_filter": "esim. oma_suodatin",
|
||||
@ -393,7 +393,7 @@
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "esim. 3, 4, 5 (jätä tyhjäksi, jos haluat oletusarvon)",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "esim. en-US,ja-JP (Tyhjäksi jättämällä, automaattinen tunnistus)",
|
||||
"e.g., westus (leave blank for eastus)": "esim. westus (jätä tyhjäksi eastusta varten)",
|
||||
"e.g.) en,fr,de": "",
|
||||
"e.g.) en,fr,de": "esim.) en,fr,de",
|
||||
"Edit": "Muokkaa",
|
||||
"Edit Arena Model": "Muokkaa Arena-mallia",
|
||||
"Edit Channel": "Muokkaa kanavaa",
|
||||
@ -435,7 +435,7 @@
|
||||
"Enter Application DN Password": "Kirjoita sovelluksen DN-salasana",
|
||||
"Enter Bing Search V7 Endpoint": "Kirjoita Bing Search V7 -päätepisteen osoite",
|
||||
"Enter Bing Search V7 Subscription Key": "Kirjoita Bing Search V7 -tilauskäyttäjäavain",
|
||||
"Enter BM25 Weight": "",
|
||||
"Enter BM25 Weight": "Kirjoita BM25 painoarvo",
|
||||
"Enter Bocha Search API Key": "Kirjoita Bocha Search API -avain",
|
||||
"Enter Brave Search API Key": "Kirjoita Brave Search API -avain",
|
||||
"Enter certificate path": "Kirjoita varmennepolku",
|
||||
@ -444,7 +444,7 @@
|
||||
"Enter Chunk Size": "Syötä osien koko",
|
||||
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Syötä pilkulla erottaen \"token:bias_value\" parit (esim. 5432:100, 413:-100)",
|
||||
"Enter content for the pending user info overlay. Leave empty for default.": "Kirjoita odottavien käyttäjien infon tekstisisältö. Käytä oletusta jättämällä tyhjäksi.",
|
||||
"Enter Datalab Marker API Key": "",
|
||||
"Enter Datalab Marker API Key": "Kirjoita Datalab Marker API-avain",
|
||||
"Enter description": "Kirjoita kuvaus",
|
||||
"Enter Docling OCR Engine": "Kirjoita Docling OCR moottori",
|
||||
"Enter Docling OCR Language(s)": "Kirjoita Docling OCR kieli(ä)",
|
||||
@ -476,7 +476,7 @@
|
||||
"Enter Model ID": "Kirjoita mallitunnus",
|
||||
"Enter model tag (e.g. {{modelTag}})": "Kirjoita mallitagi (esim. {{modelTag}})",
|
||||
"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
|
||||
"Enter name": "",
|
||||
"Enter name": "Kirjoita nimi",
|
||||
"Enter New Password": "Kirjoita uusi salasana",
|
||||
"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
|
||||
"Enter Perplexity API Key": "Aseta Perplexity API-avain",
|
||||
@ -507,8 +507,8 @@
|
||||
"Enter Tavily API Key": "Kirjoita Tavily API -avain",
|
||||
"Enter Tavily Extract Depth": "Kirjoita Tavily pominta syvyys",
|
||||
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Kirjoita julkinen WebUI verkko-osoitteesi. Verkko-osoitetta käytetään osoitteiden luontiin ilmoituksissa.",
|
||||
"Enter the URL of the function to import": "",
|
||||
"Enter the URL to import": "",
|
||||
"Enter the URL of the function to import": "Kirjoita tuotavan toiminnon verkko-osoite",
|
||||
"Enter the URL to import": "Kirjoita tuotavan verkko-osoite",
|
||||
"Enter Tika Server URL": "Kirjoita Tika Server URL",
|
||||
"Enter timeout in seconds": "Aseta aikakatkaisu sekunneissa",
|
||||
"Enter to Send": "Enter lähettääksesi",
|
||||
@ -561,7 +561,7 @@
|
||||
"Export Functions": "Vie toiminnot",
|
||||
"Export Models": "Vie malleja",
|
||||
"Export Presets": "Vie esiasetukset",
|
||||
"Export Prompt Suggestions": "",
|
||||
"Export Prompt Suggestions": "Vie kehote ehdotukset",
|
||||
"Export Prompts": "Vie kehotteet",
|
||||
"Export to CSV": "Vie CSV-tiedostoon",
|
||||
"Export Tools": "Vie työkalut",
|
||||
@ -574,7 +574,7 @@
|
||||
"External Web Search URL": "Ulkoinen Web Search verkko-osoite",
|
||||
"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
|
||||
"Failed to copy link": "",
|
||||
"Failed to copy link": "Linkin kopioinmti epäonnistui",
|
||||
"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
|
||||
"Failed to delete note": "Muistiinpanon poistaminen epäonnistui",
|
||||
"Failed to fetch models": "Mallien hakeminen epäonnistui",
|
||||
@ -612,8 +612,8 @@
|
||||
"Folder name cannot be empty.": "Kansion nimi ei voi olla tyhjä.",
|
||||
"Folder name updated successfully": "Kansion nimi päivitetty onnistuneesti",
|
||||
"Followed instructions perfectly": "Noudatti ohjeita täydellisesti",
|
||||
"Force OCR": "",
|
||||
"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "",
|
||||
"Force OCR": "Pakota OCR",
|
||||
"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "Pakota OCR:n käyttö kaikilla PDF-sivuilla. Tämä voi johtaa huonompiin tuloksiin jos PDF:n tekstisisältö on laadukasta. Oletusarvo, ei käytöstä.",
|
||||
"Forge new paths": "Luo uusia polkuja",
|
||||
"Form": "Lomake",
|
||||
"Format your variables using brackets like this:": "Muotoile muuttujasi hakasulkeilla tällä tavalla:",
|
||||
@ -625,7 +625,7 @@
|
||||
"Function deleted successfully": "Toiminto poistettu onnistuneesti",
|
||||
"Function Description": "Toiminnon kuvaus",
|
||||
"Function ID": "Toiminnon tunnus",
|
||||
"Function imported successfully": "",
|
||||
"Function imported successfully": "Toiminnon tuonti onnistui",
|
||||
"Function is now globally disabled": "Toiminto on nyt poistettu käytöstä globaalisti",
|
||||
"Function is now globally enabled": "Toiminto on nyt otettu käyttöön globaalisti",
|
||||
"Function Name": "Toiminnon nimi",
|
||||
@ -669,7 +669,7 @@
|
||||
"Host": "Palvelin",
|
||||
"How can I help you today?": "Miten voin auttaa sinua tänään?",
|
||||
"How would you rate this response?": "Kuinka arvioisit tätä vastausta?",
|
||||
"HTML": "",
|
||||
"HTML": "HTML",
|
||||
"Hybrid Search": "Hybridihaku",
|
||||
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Vahvistan, että olen lukenut ja ymmärrän toimintani seuraukset. Olen tietoinen mielivaltaisen koodin suorittamiseen liittyvistä riskeistä ja olen varmistanut lähteen luotettavuuden.",
|
||||
"ID": "Tunnus",
|
||||
@ -686,15 +686,15 @@
|
||||
"Image Prompt Generation Prompt": "Kuvan generoinnin kehote",
|
||||
"Image Settings": "Kuva-asetukset",
|
||||
"Images": "Kuvat",
|
||||
"Import": "",
|
||||
"Import": "Tuo",
|
||||
"Import Chats": "Tuo keskustelut",
|
||||
"Import Config from JSON File": "Tuo asetukset JSON-tiedostosta",
|
||||
"Import From Link": "",
|
||||
"Import From Link": "Tuo verkko-osoitteesta",
|
||||
"Import Functions": "Tuo toiminnot",
|
||||
"Import Models": "Tuo malleja",
|
||||
"Import Notes": "Tuo muistiinpanoja",
|
||||
"Import Presets": "Tuo esiasetuksia",
|
||||
"Import Prompt Suggestions": "",
|
||||
"Import Prompt Suggestions": "Tuo kehote ehdotukset",
|
||||
"Import Prompts": "Tuo kehotteet",
|
||||
"Import Tools": "Tuo työkalut",
|
||||
"Include": "Sisällytä",
|
||||
@ -710,7 +710,7 @@
|
||||
"Interface": "Käyttöliittymä",
|
||||
"Invalid file content": "Virheellinen tiedostosisältö",
|
||||
"Invalid file format.": "Virheellinen tiedostomuoto.",
|
||||
"Invalid JSON file": "",
|
||||
"Invalid JSON file": "Virheellinen JSON tiedosto",
|
||||
"Invalid JSON schema": "Virheellinen JSON kaava",
|
||||
"Invalid Tag": "Virheellinen tagi",
|
||||
"is typing...": "Kirjoittaa...",
|
||||
@ -742,7 +742,7 @@
|
||||
"Landing Page Mode": "Etusivun tila",
|
||||
"Language": "Kieli",
|
||||
"Language Locales": "Kielialueet",
|
||||
"Languages": "",
|
||||
"Languages": "Kielet",
|
||||
"Last Active": "Viimeksi aktiivinen",
|
||||
"Last Modified": "Viimeksi muokattu",
|
||||
"Last reply": "Viimeksi vastattu",
|
||||
@ -750,7 +750,7 @@
|
||||
"LDAP server updated": "LDAP-palvelin päivitetty",
|
||||
"Leaderboard": "Tulosluettelo",
|
||||
"Learn more about OpenAPI tool servers.": "Lue lisää OpenAPI työkalu palvelimista.",
|
||||
"Leave empty for unlimited": "Rajaton tyhjäksi jättämällä",
|
||||
"Leave empty for unlimited": "Rajaton tyhjänä",
|
||||
"Leave empty to include all models from \"{{url}}\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}\" päätepisteen mallit",
|
||||
"Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/api/tags\" päätepisteen mallit",
|
||||
"Leave empty to include all models from \"{{url}}/models\" endpoint": "Jätä tyhjäksi sisällyttääksesi \"{{url}}/models\" päätepisteen mallit",
|
||||
@ -781,7 +781,7 @@
|
||||
"Manage Pipelines": "Hallitse putkia",
|
||||
"Manage Tool Servers": "Hallitse työkalu palvelimia",
|
||||
"March": "maaliskuu",
|
||||
"Markdown": "",
|
||||
"Markdown": "Markdown",
|
||||
"Max Speakers": "Puhujien enimmäismäärä",
|
||||
"Max Upload Count": "Latausten enimmäismäärä",
|
||||
"Max Upload Size": "Latausten enimmäiskoko",
|
||||
@ -841,13 +841,13 @@
|
||||
"Native": "Natiivi",
|
||||
"New Chat": "Uusi keskustelu",
|
||||
"New Folder": "Uusi kansio",
|
||||
"New Function": "",
|
||||
"New Function": "Uusi toiminto",
|
||||
"New Note": "Uusi muistiinpano",
|
||||
"New Password": "Uusi salasana",
|
||||
"New Tool": "",
|
||||
"New Tool": "Uusi työkalu",
|
||||
"new-channel": "uusi-kanava",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No chats found for this user.": "Käyttäjän keskusteluja ei löytynyt.",
|
||||
"No chats found.": "Keskusteluja ei löytynyt",
|
||||
"No content": "Ei sisältöä",
|
||||
"No content found": "Sisältöä ei löytynyt",
|
||||
"No content found in file.": "Sisältöä ei löytynyt tiedostosta.",
|
||||
@ -912,17 +912,17 @@
|
||||
"OpenAI API Key is required.": "OpenAI API -avain vaaditaan.",
|
||||
"OpenAI API settings updated": "OpenAI API -asetukset päivitetty",
|
||||
"OpenAI URL/Key required.": "OpenAI URL/avain vaaditaan.",
|
||||
"openapi.json URL or Path": "",
|
||||
"openapi.json URL or Path": "openapi.json verkko-osoite tai polku",
|
||||
"or": "tai",
|
||||
"Organize your users": "Järjestä käyttäjäsi",
|
||||
"Other": "Muu",
|
||||
"OUTPUT": "TULOSTE",
|
||||
"Output format": "Tulosteen muoto",
|
||||
"Output Format": "",
|
||||
"Output Format": "Tulosteen muoto",
|
||||
"Overview": "Yleiskatsaus",
|
||||
"page": "sivu",
|
||||
"Paginate": "",
|
||||
"Parameters": "",
|
||||
"Paginate": "Sivutus",
|
||||
"Parameters": "Parametrit",
|
||||
"Password": "Salasana",
|
||||
"Paste Large Text as File": "Liitä suuri teksti tiedostona",
|
||||
"PDF document (.pdf)": "PDF-asiakirja (.pdf)",
|
||||
@ -1128,11 +1128,11 @@
|
||||
"Sign Out": "Kirjaudu ulos",
|
||||
"Sign up": "Rekisteröidy",
|
||||
"Sign up to {{WEBUI_NAME}}": "Rekisteröidy palveluun {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "Parantaa merkittävästi tarkkuutta käyttämällä LLM:ää taulukoiden, lomakkeiden, matematiikan ja asettelun havaitsemisen parantamiseen. Lisää viivettä. Oletusarvo on käytössä.",
|
||||
"Signing in to {{WEBUI_NAME}}": "Kirjaudutaan sisään palveluun {{WEBUI_NAME}}",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
"Skip Cache": "Ohita välimuisti",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "Ohita välimuisti ja suorita päätelmä uudelleen. Oletusarvo ei käytössä.",
|
||||
"Sougou Search API sID": "Sougou Search API sID",
|
||||
"Sougou Search API SK": "Sougou Search API SK",
|
||||
"Source": "Lähde",
|
||||
@ -1142,8 +1142,8 @@
|
||||
"Stop": "Pysäytä",
|
||||
"Stop Sequence": "Lopetussekvenssi",
|
||||
"Stream Chat Response": "Streamaa keskusteluvastaus",
|
||||
"Strip Existing OCR": "",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "",
|
||||
"Strip Existing OCR": "Poista olemassa oleva OCR",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "Poista olemassa oleva OCR-teksti PDF-tiedostosta ja suorita OCR uudelleen. Ohitetaan, jos pakota OCR -asetus on käytössä. Oletusarvo ei käytössä.",
|
||||
"STT Model": "Puheentunnistusmalli",
|
||||
"STT Settings": "Puheentunnistuksen asetukset",
|
||||
"Stylized PDF Export": "Muotoiltun PDF-vienti",
|
||||
@ -1178,13 +1178,13 @@
|
||||
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "Eräkoko määrittää, kuinka monta tekstipyyntöä käsitellään kerralla. Suurempi eräkoko voi parantaa mallin suorituskykyä ja nopeutta, mutta se vaatii myös enemmän muistia.",
|
||||
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Tämän lisäosan takana olevat kehittäjät ovat intohimoisia vapaaehtoisyhteisöstä. Jos koet tämän lisäosan hyödylliseksi, harkitse sen kehittämisen tukemista.",
|
||||
"The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "Arviointitulosluettelo perustuu Elo-luokitusjärjestelmään ja päivittyy reaaliajassa.",
|
||||
"The language of the input audio. Supplying the input language in ISO-639-1 (e.g. en) format will improve accuracy and latency. Leave blank to automatically detect the language.": "",
|
||||
"The language of the input audio. Supplying the input language in ISO-639-1 (e.g. en) format will improve accuracy and latency. Leave blank to automatically detect the language.": "Syöteäänen kieli. Syöttökielen antaminen ISO-639-1-muodossa (esim. en) parantaa tarkkuutta ja viivettä. Jätä tyhjäksi, jos haluat kielen automaattisen tunnistuksen.",
|
||||
"The LDAP attribute that maps to the mail that users use to sign in.": "LDAP-määrite, joka yhdistää käyttäjien kirjautumiseen käyttämään sähköpostiin.",
|
||||
"The LDAP attribute that maps to the username that users use to sign in.": "LDAP-määrite, joka vastaa käyttäjien kirjautumiskäyttäjänimeä.",
|
||||
"The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "Tulosluettelo on tällä hetkellä beta-vaiheessa, ja voimme säätää pisteytyksen laskentaa hienostaessamme algoritmia.",
|
||||
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "Enimmäistiedostokoko megatavuissa. Jos tiedoston koko ylittää tämän rajan, tiedostoa ei ladata.",
|
||||
"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "Suurin sallittu tiedostojen määrä käytettäväksi kerralla chatissa. Jos tiedostojen määrä ylittää tämän rajan, niitä ei ladata.",
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "",
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "Tekstin tulostusmuoto. Voi olla 'json', 'markdown' tai 'html'. Oletusarvo on 'markdown'.",
|
||||
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Pisteytyksen tulee olla arvo välillä 0,0 (0 %) ja 1,0 (100 %).",
|
||||
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "Mallin lämpötila. Lisäämällä lämpötilaa mallin vastaukset ovat luovempia.",
|
||||
"Theme": "Teema",
|
||||
@ -1292,7 +1292,7 @@
|
||||
"Use Gravatar": "Käytä Gravataria",
|
||||
"Use groups to group your users and assign permissions.": "Käytä ryhmiä jäsentääksesi käyttäjiä ja antaaksesi käyttöoikeuksia.",
|
||||
"Use Initials": "Käytä alkukirjaimia",
|
||||
"Use LLM": "",
|
||||
"Use LLM": "Käytä LLM:ää",
|
||||
"Use no proxy to fetch page contents.": "Älä käytä välityspalvelinta sivun tietoja haettaessa.",
|
||||
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Käytä http_proxy- ja https_proxy-ympäristömuuttujien määrittämää välityspalvelinta sivun sisällön hakemiseen.",
|
||||
"user": "käyttäjä",
|
||||
@ -1319,7 +1319,7 @@
|
||||
"Vision": "Visio",
|
||||
"Voice": "Ääni",
|
||||
"Voice Input": "Äänitulolaitteen käyttö",
|
||||
"Voice mode": "",
|
||||
"Voice mode": "Puhetila",
|
||||
"Warning": "Varoitus",
|
||||
"Warning:": "Varoitus:",
|
||||
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Varoitus: Tämän käyttöönotto sallii käyttäjien ladata mielivaltaista koodia palvelimelle.",
|
||||
@ -1338,13 +1338,13 @@
|
||||
"WebUI will make requests to \"{{url}}\"": "WebUI lähettää pyyntöjä osoitteeseen \"{{url}}\"",
|
||||
"WebUI will make requests to \"{{url}}/api/chat\"": "WebUI lähettää pyyntöjä osoitteeseen \"{{url}}/api/chat\"",
|
||||
"WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI lähettää pyyntöjä osoitteeseen \"{{url}}/chat/completions\"",
|
||||
"Weight of BM25 Retrieval": "",
|
||||
"Weight of BM25 Retrieval": "BM25-haun painoarvo",
|
||||
"What are you trying to achieve?": "Mitä yrität saavuttaa?",
|
||||
"What are you working on?": "Mitä olet työskentelemässä?",
|
||||
"What’s New in": "Mitä uutta",
|
||||
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Kun käytössä, malli vastaa jokaiseen chatviestiin reaaliajassa, tuottaen vastauksen heti kun käyttäjä lähettää viestin. Tämä tila on hyödyllinen reaaliaikaisissa chat-sovelluksissa, mutta voi vaikuttaa suorituskykyyn hitaammilla laitteistoilla.",
|
||||
"wherever you are": "missä tahansa oletkin",
|
||||
"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "",
|
||||
"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "Sivutetaanko tuloste. Jokainen sivu erotetaan toisistaan \u200b\u200bvaakasuoralla viivalla ja sivunumerolla. Oletusarvo ei käytössä.",
|
||||
"Whisper (Local)": "Whisper (paikallinen)",
|
||||
"Why?": "Miksi?",
|
||||
"Widescreen Mode": "Laajakuvatila",
|
||||
|
@ -363,7 +363,7 @@
|
||||
"Document": "문서",
|
||||
"Document Intelligence": "",
|
||||
"Document Intelligence endpoint and key required.": "Document Intelligence 엔드포인트 및 키가 필요합니다.",
|
||||
"Documentation": "문서 조사",
|
||||
"Documentation": "문서",
|
||||
"Documents": "문서",
|
||||
"does not make any external connections, and your data stays securely on your locally hosted server.": "외부와 어떠한 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.",
|
||||
"Domain Filter List": "도메인 필터 목록",
|
||||
|
@ -28,14 +28,14 @@
|
||||
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "通过输入 \"/{{COMMAND}}\" 激活此命令",
|
||||
"Active Users": "当前在线用户",
|
||||
"Add": "添加",
|
||||
"Add a model ID": "添加一个模型ID",
|
||||
"Add a model ID": "添加一个模型 ID",
|
||||
"Add a short description about what this model does": "添加有关该模型能力的简短描述",
|
||||
"Add a tag": "添加标签",
|
||||
"Add Arena Model": "添加竞技场模型",
|
||||
"Add Connection": "添加一个连接",
|
||||
"Add Content": "添加内容",
|
||||
"Add content here": "在此添加内容",
|
||||
"Add Custom Parameter": "",
|
||||
"Add Custom Parameter": "增加自定义参数",
|
||||
"Add custom prompt": "添加自定义提示词",
|
||||
"Add Files": "添加文件",
|
||||
"Add Group": "添加权限组",
|
||||
@ -58,21 +58,21 @@
|
||||
"All": "全部",
|
||||
"All Documents": "所有文档",
|
||||
"All models deleted successfully": "所有模型删除成功",
|
||||
"Allow Call": "允许通话",
|
||||
"Allow Call": "允许语音通话",
|
||||
"Allow Chat Controls": "允许使用对话高级设置",
|
||||
"Allow Chat Delete": "允许删除对话记录",
|
||||
"Allow Chat Deletion": "允许删除对话记录",
|
||||
"Allow Chat Edit": "允许编辑对话记录",
|
||||
"Allow Chat Export": "允许导出聊天",
|
||||
"Allow Chat Share": "允许共享聊天",
|
||||
"Allow Chat Export": "允许导出对话",
|
||||
"Allow Chat Share": "允许分享对话",
|
||||
"Allow File Upload": "允许上传文件",
|
||||
"Allow Multiple Models in Chat": "允许同时与多个模型聊天",
|
||||
"Allow Multiple Models in Chat": "允许同时与多个模型对话",
|
||||
"Allow non-local voices": "允许调用非本地音色",
|
||||
"Allow Speech to Text": "允许语音转文本",
|
||||
"Allow Temporary Chat": "允许临时对话",
|
||||
"Allow Text to Speech": "允许文本转语音",
|
||||
"Allow User Location": "允许获取您的位置",
|
||||
"Allow Voice Interruption in Call": "允许通话中的打断语音",
|
||||
"Allow Voice Interruption in Call": "允许在语音通话中打断",
|
||||
"Allowed Endpoints": "允许的 API 端点",
|
||||
"Allowed File Extensions": "允许的文件扩展名",
|
||||
"Allowed file extensions for upload. Separate multiple extensions with commas. Leave empty for all file types.": "允许上传的文件扩展名。多个扩展名用逗号分隔。留空以允许所有文件类型。",
|
||||
@ -126,7 +126,7 @@
|
||||
"Authentication": "身份验证",
|
||||
"Auto": "自动",
|
||||
"Auto-Copy Response to Clipboard": "自动复制回复到剪贴板",
|
||||
"Auto-playback response": "自动念出回复内容",
|
||||
"Auto-playback response": "自动朗读回复内容",
|
||||
"Autocomplete Generation": "输入框内容自动补全",
|
||||
"Autocomplete Generation Input Max Length": "输入框内容自动补全输入最大长度",
|
||||
"Automatic1111": "Automatic1111",
|
||||
@ -156,8 +156,8 @@
|
||||
"Bypass Embedding and Retrieval": "绕过嵌入和检索",
|
||||
"Bypass Web Loader": "绕过网页加载器",
|
||||
"Calendar": "日历",
|
||||
"Call": "呼叫",
|
||||
"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持呼叫功能",
|
||||
"Call": "语音通话",
|
||||
"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持语音通话功能",
|
||||
"Camera": "摄像头",
|
||||
"Cancel": "取消",
|
||||
"Capabilities": "能力",
|
||||
@ -172,7 +172,7 @@
|
||||
"Chart new frontiers": "开拓新领域",
|
||||
"Chat": "对话",
|
||||
"Chat Background Image": "对话背景图片",
|
||||
"Chat Bubble UI": "气泡样式对话",
|
||||
"Chat Bubble UI": "对话气泡样式",
|
||||
"Chat Controls": "对话高级设置",
|
||||
"Chat direction": "对话样式方向",
|
||||
"Chat Overview": "对话概述",
|
||||
@ -192,20 +192,20 @@
|
||||
"Clear Memory": "清除记忆",
|
||||
"click here": "点击此处",
|
||||
"Click here for filter guides.": "点击此处查看 filter 指南",
|
||||
"Click here for help.": "点击这里获取帮助",
|
||||
"Click here for help.": "点击此处获取帮助",
|
||||
"Click here to": "点击",
|
||||
"Click here to download user import template file.": "点击此处下载用户导入所需的模板文件",
|
||||
"Click here to learn more about faster-whisper and see the available models.": "点击此处了解更多关于faster-whisper的信息,并查看可用的模型",
|
||||
"Click here to see available models.": "单击此处查看可用模型",
|
||||
"Click here to select": "点击这里选择",
|
||||
"Click here to see available models.": "点击此处查看可用模型",
|
||||
"Click here to select": "点击此处选择",
|
||||
"Click here to select a csv file.": "点击此处选择 csv 文件",
|
||||
"Click here to select a py file.": "点击此处选择 py 文件",
|
||||
"Click here to upload a workflow.json file.": "点击此处上传 workflow.json 文件",
|
||||
"click here.": "点击这里",
|
||||
"click here.": "点击此处",
|
||||
"Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组",
|
||||
"Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "写入剪贴板时被拒绝。请检查浏览器设置,授予必要权限。",
|
||||
"Clone": "复制",
|
||||
"Clone Chat": "克隆聊天",
|
||||
"Clone Chat": "克隆对话",
|
||||
"Clone of {{TITLE}}": "{{TITLE}} 的副本",
|
||||
"Close": "关闭",
|
||||
"Code execution": "代码执行",
|
||||
@ -275,7 +275,7 @@
|
||||
"Create new key": "创建新密钥",
|
||||
"Create new secret key": "创建新安全密钥",
|
||||
"Create Note": "创建笔记",
|
||||
"Create your first note by clicking on the plus button below.": "单击下面的加号按钮创建您的第一个笔记",
|
||||
"Create your first note by clicking on the plus button below.": "点击下面的加号按钮创建您的第一个笔记",
|
||||
"Created at": "创建于",
|
||||
"Created At": "创建于",
|
||||
"Created by": "作者",
|
||||
@ -284,13 +284,13 @@
|
||||
"Current Model": "当前模型",
|
||||
"Current Password": "当前密码",
|
||||
"Custom": "自定义",
|
||||
"Custom Parameter Name": "",
|
||||
"Custom Parameter Value": "",
|
||||
"Custom Parameter Name": "自定义参数名称",
|
||||
"Custom Parameter Value": "自定义参数值",
|
||||
"Danger Zone": "危险区域",
|
||||
"Dark": "暗色",
|
||||
"Database": "数据库",
|
||||
"Datalab Marker API": "",
|
||||
"Datalab Marker API Key required.": "",
|
||||
"Datalab Marker API": "Datalab Marker API",
|
||||
"Datalab Marker API Key required.": "需要 Datalab Marker API 密钥",
|
||||
"December": "十二月",
|
||||
"Default": "默认",
|
||||
"Default (Open AI)": "默认 (OpenAI)",
|
||||
@ -337,8 +337,8 @@
|
||||
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "直接连接允许用户连接自有的 OpenAI 兼容的 API 端点",
|
||||
"Direct Connections settings updated": "直接连接设置已更新",
|
||||
"Direct Tool Servers": "直接连接工具服务器",
|
||||
"Disable Image Extraction": "",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "",
|
||||
"Disable Image Extraction": "禁用图像提取",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "禁用从 PDF 中提取图像。若开启 '使用大语言模型(LLM)' 功能,图像将自动添加描述。默认为关闭",
|
||||
"Disabled": "禁用",
|
||||
"Discover a function": "发现更多函数",
|
||||
"Discover a model": "发现更多模型",
|
||||
@ -368,8 +368,8 @@
|
||||
"does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据会安全地存储在本地托管的服务器上。",
|
||||
"Domain Filter List": "域名过滤列表",
|
||||
"Don't have an account?": "没有账号?",
|
||||
"don't install random functions from sources you don't trust.": "切勿随意从不完全可信的来源安装函数",
|
||||
"don't install random tools from sources you don't trust.": "切勿随意从不完全可信的来源安装工具",
|
||||
"don't install random functions from sources you don't trust.": "切勿从未经验证或不可信的来源安装函数",
|
||||
"don't install random tools from sources you don't trust.": "切勿从未经验证或不可信的来源安装工具",
|
||||
"Don't like the style": "不喜欢这个文风",
|
||||
"Done": "完成",
|
||||
"Download": "下载",
|
||||
@ -393,7 +393,7 @@
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "例如:3,4,5(留空使用默认值)",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "例如:en-US,ja-JP(留空则自动检测)",
|
||||
"e.g., westus (leave blank for eastus)": "例如:westus(留空则默认为eastus)",
|
||||
"e.g.) en,fr,de": "",
|
||||
"e.g.) en,fr,de": "例如:en,fr,de",
|
||||
"Edit": "编辑",
|
||||
"Edit Arena Model": "编辑竞技场模型",
|
||||
"Edit Channel": "编辑频道",
|
||||
@ -412,7 +412,7 @@
|
||||
"Embedding Model Engine": "语义向量模型引擎",
|
||||
"Embedding model set to \"{{embedding_model}}\"": "语义向量模型设置为 \"{{embedding_model}}\"",
|
||||
"Enable API Key": "启用 API 密钥",
|
||||
"Enable autocomplete generation for chat messages": "启用聊天消息的输入框内容自动补全",
|
||||
"Enable autocomplete generation for chat messages": "启用对话消息的输入框内容自动补全",
|
||||
"Enable Code Execution": "启用代码执行",
|
||||
"Enable Code Interpreter": "启用代码解释器",
|
||||
"Enable Community Sharing": "启用分享至社区",
|
||||
@ -423,7 +423,7 @@
|
||||
"Enable New Sign Ups": "允许新用户注册",
|
||||
"Enabled": "启用",
|
||||
"Endpoint URL": "端点 URL",
|
||||
"Enforce Temporary Chat": "强制临时聊天",
|
||||
"Enforce Temporary Chat": "强制临时对话",
|
||||
"Enhance": "润色",
|
||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。",
|
||||
"Enter {{role}} message here": "在此处输入 {{role}} 的对话内容",
|
||||
@ -444,7 +444,7 @@
|
||||
"Enter Chunk Size": "输入块大小 (Chunk Size)",
|
||||
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "输入以逗号分隔的“token:bias_value”对(例如:5432:100, 413:-100)",
|
||||
"Enter content for the pending user info overlay. Leave empty for default.": "输入用户待激活界面的内容。留空使用默认",
|
||||
"Enter Datalab Marker API Key": "",
|
||||
"Enter Datalab Marker API Key": "输入 Datalab Marker API 密钥",
|
||||
"Enter description": "输入简介描述",
|
||||
"Enter Docling OCR Engine": "输入 Docling OCR Engine",
|
||||
"Enter Docling OCR Language(s)": "输入 Docling OCR 语言",
|
||||
@ -508,7 +508,7 @@
|
||||
"Enter Tavily Extract Depth": "输入 Tavily 提取深度",
|
||||
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "输入 WebUI 的公共 URL。此 URL 将用于在通知中生成链接",
|
||||
"Enter the URL of the function to import": "输入要导入函数的 URL",
|
||||
"Enter the URL to import": "",
|
||||
"Enter the URL to import": "输入要导入的 URL",
|
||||
"Enter Tika Server URL": "输入 Tika 服务器地址",
|
||||
"Enter timeout in seconds": "输入以秒为单位的超时时间",
|
||||
"Enter to Send": "Enter 键发送",
|
||||
@ -544,7 +544,7 @@
|
||||
"Example: mail": "例如:mail",
|
||||
"Example: ou=users,dc=foo,dc=example": "例如:ou=users,dc=foo,dc=example",
|
||||
"Example: sAMAccountName or uid or userPrincipalName": "例如:sAMAccountName 或 uid 或 userPrincipalName",
|
||||
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "已达到最大授权人数,请联系支持人员提升授权人数。",
|
||||
"Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "已达到最大授权人数,请联系支持人员提升授权人数",
|
||||
"Exclude": "排除",
|
||||
"Execute code for analysis": "执行代码进行分析",
|
||||
"Executing **{{NAME}}**...": "正在执行 **{{NAME}}**...",
|
||||
@ -612,8 +612,8 @@
|
||||
"Folder name cannot be empty.": "分组名称不能为空",
|
||||
"Folder name updated successfully": "分组名称更新成功。",
|
||||
"Followed instructions perfectly": "完全按照指示执行",
|
||||
"Force OCR": "",
|
||||
"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "",
|
||||
"Force OCR": "强制 OCR 识别",
|
||||
"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "强制对 PDF 所有页面执行 OCR 识别。若 PDF 中已包含优质文本内容可能降低识别准确率。默认为关闭",
|
||||
"Forge new paths": "开拓新道路",
|
||||
"Form": "手动创建",
|
||||
"Format your variables using brackets like this:": "使用括号格式化你的变量,如下所示:",
|
||||
@ -624,8 +624,8 @@
|
||||
"Function created successfully": "函数创建成功",
|
||||
"Function deleted successfully": "函数删除成功",
|
||||
"Function Description": "函数描述",
|
||||
"Function ID": "函数ID",
|
||||
"Function imported successfully": "",
|
||||
"Function ID": "函数 ID",
|
||||
"Function imported successfully": "函数导入成功",
|
||||
"Function is now globally disabled": "函数全局已禁用",
|
||||
"Function is now globally enabled": "函数全局已启用",
|
||||
"Function Name": "函数名称",
|
||||
@ -657,7 +657,7 @@
|
||||
"Group updated successfully": "权限组更新成功",
|
||||
"Groups": "权限组",
|
||||
"Haptic Feedback": "震动反馈",
|
||||
"Hello, {{name}}": "您好,{{name}}",
|
||||
"Hello, {{name}}": "你好,{{name}}",
|
||||
"Help": "帮助",
|
||||
"Help us create the best community leaderboard by sharing your feedback history!": "分享您的反馈历史记录,共建最佳模型社区排行榜!",
|
||||
"Hex Color": "十六进制颜色代码",
|
||||
@ -669,7 +669,7 @@
|
||||
"Host": "主机",
|
||||
"How can I help you today?": "有什么我能帮您的吗?",
|
||||
"How would you rate this response?": "您如何评价这个回答?",
|
||||
"HTML": "",
|
||||
"HTML": "HTML",
|
||||
"Hybrid Search": "混合搜索",
|
||||
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "我已阅读并理解我的行为所带来的影响,明白执行任意代码所涉及的风险。且我已验证代码来源可信度。",
|
||||
"ID": "ID",
|
||||
@ -742,7 +742,7 @@
|
||||
"Landing Page Mode": "默认主页样式",
|
||||
"Language": "语言",
|
||||
"Language Locales": "语言环境",
|
||||
"Languages": "",
|
||||
"Languages": "语言",
|
||||
"Last Active": "最后在线时间",
|
||||
"Last Modified": "最后修改时间",
|
||||
"Last reply": "最后回复",
|
||||
@ -769,19 +769,19 @@
|
||||
"Location access not allowed": "不允许访问位置信息",
|
||||
"Lost": "落败",
|
||||
"LTR": "从左至右",
|
||||
"Made by Open WebUI Community": "由 OpenWebUI 社区制作",
|
||||
"Made by Open WebUI Community": "由 Open WebUI 社区制作",
|
||||
"Make sure to enclose them with": "确保将它们包含在内",
|
||||
"Make sure to export a workflow.json file as API format from ComfyUI.": "确保从 ComfyUI 导出 API 格式的 workflow.json 文件。",
|
||||
"Manage": "管理",
|
||||
"Manage Direct Connections": "管理直接连接",
|
||||
"Manage Models": "管理模型",
|
||||
"Manage Ollama": "管理 Ollama",
|
||||
"Manage Ollama API Connections": "管理Ollama API连接",
|
||||
"Manage OpenAI API Connections": "管理OpenAI API连接",
|
||||
"Manage Ollama API Connections": "管理 Ollama API 连接",
|
||||
"Manage OpenAI API Connections": "管理 OpenAI API 连接",
|
||||
"Manage Pipelines": "管理 Pipeline",
|
||||
"Manage Tool Servers": "管理工具服务器",
|
||||
"March": "三月",
|
||||
"Markdown": "",
|
||||
"Markdown": "Markdown",
|
||||
"Max Speakers": "最大扬声器数量",
|
||||
"Max Upload Count": "最大上传数量",
|
||||
"Max Upload Size": "最大上传大小",
|
||||
@ -814,7 +814,7 @@
|
||||
"Model accepts image inputs": "模型支持图像输入",
|
||||
"Model can execute code and perform calculations": "模型可执行代码并进行计算",
|
||||
"Model can generate images based on text prompts": "模型可根据文本提示生成图像",
|
||||
"Model can search the web for information": "模型可在网络上搜索信息",
|
||||
"Model can search the web for information": "模型可进行联网搜索",
|
||||
"Model created successfully!": "模型创建成功!",
|
||||
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。",
|
||||
"Model Filtering": "模型白名单",
|
||||
@ -831,7 +831,7 @@
|
||||
"Models": "模型",
|
||||
"Models Access": "访问模型列表",
|
||||
"Models configuration saved successfully": "模型配置保存成功",
|
||||
"Models Public Sharing": "模型公开分享",
|
||||
"Models Public Sharing": "模型公开共享",
|
||||
"Mojeek Search API Key": "Mojeek Search API 密钥",
|
||||
"more": "更多",
|
||||
"More": "更多",
|
||||
@ -844,7 +844,7 @@
|
||||
"New Function": "新函数",
|
||||
"New Note": "新笔记",
|
||||
"New Password": "新密码",
|
||||
"New Tool": "",
|
||||
"New Tool": "新工具",
|
||||
"new-channel": "新频道",
|
||||
"No chats found for this user.": "未找到此用户的对话记录",
|
||||
"No chats found.": "未找到对话记录",
|
||||
@ -868,7 +868,7 @@
|
||||
"No search query generated": "未生成搜索查询",
|
||||
"No source available": "没有可用来源",
|
||||
"No users were found.": "未找到用户",
|
||||
"No valves to update": "没有需要更新的值",
|
||||
"No valves to update": "没有需要更新的阀门",
|
||||
"None": "无",
|
||||
"Not factually correct": "事实并非如此",
|
||||
"Not helpful": "无帮助",
|
||||
@ -918,10 +918,10 @@
|
||||
"Other": "其他",
|
||||
"OUTPUT": "输出",
|
||||
"Output format": "输出格式",
|
||||
"Output Format": "",
|
||||
"Output Format": "输出格式",
|
||||
"Overview": "概述",
|
||||
"page": "页",
|
||||
"Paginate": "",
|
||||
"Paginate": "分页",
|
||||
"Parameters": "参数",
|
||||
"Password": "密码",
|
||||
"Paste Large Text as File": "粘贴大文本为文件",
|
||||
@ -943,7 +943,7 @@
|
||||
"Pipeline downloaded successfully": "Pipeline 下载成功",
|
||||
"Pipelines": "Pipeline",
|
||||
"Pipelines Not Detected": "未检测到 Pipeline",
|
||||
"Pipelines Valves": "Pipeline 值",
|
||||
"Pipelines Valves": "Pipeline 阀门",
|
||||
"Plain text (.md)": "纯文本文档(.md)",
|
||||
"Plain text (.txt)": "纯文本文档 (.txt)",
|
||||
"Playground": "AI 对话游乐场",
|
||||
@ -976,7 +976,7 @@
|
||||
"Prompt updated successfully": "提示词更新成功",
|
||||
"Prompts": "提示词",
|
||||
"Prompts Access": "访问提示词",
|
||||
"Prompts Public Sharing": "提示词公开分享",
|
||||
"Prompts Public Sharing": "提示词公开共享",
|
||||
"Public": "公共",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "从 Ollama.com 拉取 \"{{searchValue}}\"",
|
||||
"Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型",
|
||||
@ -989,7 +989,7 @@
|
||||
"Reasoning Effort": "推理努力 (Reasoning Effort)",
|
||||
"Record": "录制",
|
||||
"Record voice": "录音",
|
||||
"Redirecting you to Open WebUI Community": "正在将您重定向到 OpenWebUI 社区",
|
||||
"Redirecting you to Open WebUI Community": "正在将您重定向到 Open WebUI 社区",
|
||||
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "降低生成无意义内容的概率。较高的值(如100)将产生更多样化的回答,而较低的值(如10)则更加保守。",
|
||||
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "使用\"User\" (用户) 来指代自己(例如:“User 正在学习西班牙语”)",
|
||||
"References from": "来自",
|
||||
@ -1034,7 +1034,7 @@
|
||||
"Save As Copy": "另存为副本",
|
||||
"Save Tag": "保存标签",
|
||||
"Saved": "已保存",
|
||||
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "我们不再支持将聊天记录直接保存到浏览器的存储空间。请点击下面的按钮下载并删除您的聊天记录。别担心,您可以轻松地将聊天记录重新导入到后台。",
|
||||
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "我们不再支持将对话记录直接保存到浏览器的存储空间。请点击下面的按钮下载并删除您的对话记录。别担心,您可以轻松地将对话记录重新导入到后台。",
|
||||
"Scroll On Branch Change": "切换对话分支时滚动",
|
||||
"Search": "搜索",
|
||||
"Search a model": "搜索模型",
|
||||
@ -1073,7 +1073,7 @@
|
||||
"Select an Ollama instance": "选择一个 Ollama 实例。",
|
||||
"Select Engine": "选择引擎",
|
||||
"Select Knowledge": "选择知识",
|
||||
"Select only one model to call": "请仅选择一个模型来呼叫",
|
||||
"Select only one model to call": "请仅选择一个模型来语音通话",
|
||||
"Selected model(s) do not support image inputs": "已选择的模型不支持发送图像",
|
||||
"Semantic distance to query": "语义距离查询",
|
||||
"Send": "发送",
|
||||
@ -1111,7 +1111,7 @@
|
||||
"Settings saved successfully!": "设置已成功保存!",
|
||||
"Share": "分享",
|
||||
"Share Chat": "分享对话",
|
||||
"Share to Open WebUI Community": "分享到 OpenWebUI 社区",
|
||||
"Share to Open WebUI Community": "分享到 Open WebUI 社区",
|
||||
"Sharing Permissions": "共享权限",
|
||||
"Show": "显示",
|
||||
"Show \"What's New\" modal on login": "在登录时显示“更新内容”弹窗",
|
||||
@ -1128,11 +1128,11 @@
|
||||
"Sign Out": "登出",
|
||||
"Sign up": "注册",
|
||||
"Sign up to {{WEBUI_NAME}}": "注册 {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "通过使用大语言模型(LLM)增强表格、表单、行内公式和版面检测的处理能力,可显著提高准确性。但会增加延迟。默认为开启",
|
||||
"Signing in to {{WEBUI_NAME}}": "正在登录 {{WEBUI_NAME}}",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
"Skip Cache": "跳过缓存",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "跳过缓存并重新执行推理。默认为关闭",
|
||||
"Sougou Search API sID": "搜狗搜索 API Secret ID",
|
||||
"Sougou Search API SK": "搜狗搜索 API Secret 密钥",
|
||||
"Source": "来源",
|
||||
@ -1142,8 +1142,8 @@
|
||||
"Stop": "停止",
|
||||
"Stop Sequence": "停止序列 (Stop Sequence)",
|
||||
"Stream Chat Response": "流式对话响应 (Stream Chat Response)",
|
||||
"Strip Existing OCR": "",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "",
|
||||
"Strip Existing OCR": "清除现有 OCR 文本",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "清除 PDF 中现有的 OCR 文本并重新执行 OCR 识别。若开启 '强制 OCR 识别' 则此设置无效。默认为关闭",
|
||||
"STT Model": "语音转文本模型",
|
||||
"STT Settings": "语音转文本设置",
|
||||
"Stylized PDF Export": "风格化 PDF 导出",
|
||||
@ -1176,7 +1176,7 @@
|
||||
"The Application Account DN you bind with for search": "您所绑定用于搜索的 Application Account DN",
|
||||
"The base to search for users": "搜索用户的 Base",
|
||||
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "批处理大小决定了一次可以处理多少个文本请求。更高的批处理大小可以提高模型的性能和速度,但也需要更多内存。",
|
||||
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "本插件的背后开发者是社区中热情的志愿者。如果此插件有帮助到您,烦请考虑一下为它的开发做出贡献。",
|
||||
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "本插件的开发者是社区中充满热情的志愿者。如果此插件有帮助到您,请考虑为开发贡献一份力量。",
|
||||
"The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "排行榜基于 Elo 评级系统并实时更新。",
|
||||
"The language of the input audio. Supplying the input language in ISO-639-1 (e.g. en) format will improve accuracy and latency. Leave blank to automatically detect the language.": "输入音频的语言。以 ISO-639-1 格式(例如:en)指定输入语言可提高准确性和响应速度。留空则自动检测语言。",
|
||||
"The LDAP attribute that maps to the mail that users use to sign in.": "映射到用户登录时使用的邮箱的 LDAP 属性。",
|
||||
@ -1184,16 +1184,16 @@
|
||||
"The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "排行榜目前处于 Beta 测试阶段,我们可能会在完善算法后调整评分计算方法。",
|
||||
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "最大文件大小 (MB)。如果文件大小超过此限制,则无法上传该文件。",
|
||||
"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "在单次对话中可以使用的最大文件数。如果文件数超过此限制,则文件不会上传。",
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "",
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "文本输出格式。可选 'json', 'markdown' 或 'html'。默认为 'markdown'。",
|
||||
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分值应介于 0.0 (0%) 和 1.0 (100%) 之间。",
|
||||
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "模型的温度。增加温度将使模型的回答更有创意。",
|
||||
"Theme": "主题",
|
||||
"Thinking...": "正在思考...",
|
||||
"This action cannot be undone. Do you wish to continue?": "此操作无法撤销。你确认要继续吗?",
|
||||
"This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "此频道创建于{{createdAt}},这里是{{channelName}}频道的开始",
|
||||
"This chat won’t appear in history and your messages will not be saved.": "此聊天不会出现在历史记录中,且您的消息不会被保存。",
|
||||
"This chat won’t appear in history and your messages will not be saved.": "此对话不会出现在历史记录中,且您的消息不会被保存",
|
||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "这将确保您的宝贵对话被安全地保存到后台数据库中。感谢!",
|
||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "这是一个实验功能,可能不会如预期那样工作,而且可能随时发生变化。",
|
||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "这是一个实验性功能,可能不会如预期那样工作,而且可能随时发生变化。",
|
||||
"This model is not publicly available. Please select another model.": "此模型未公开。请选择其他模型",
|
||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "此选项控制刷新上下文时保留多少 Token。例如,如果设置为 2,则将保留对话上下文的最后 2 个 Token。保留上下文有助于保持对话的连续性,但可能会降低响应新主题的能力。",
|
||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "此项用于设置模型在其响应中可以生成的最大 Token 数。增加此限制可让模型提供更长的答案,但也可能增加生成无用或不相关内容的可能性。",
|
||||
@ -1223,7 +1223,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "要在这里附加知识库,请先将其添加到工作空间中的“知识库”",
|
||||
"To learn more about available endpoints, visit our documentation.": "要了解有关可用端点的更多信息,请访问我们的文档",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "为了保护您的隐私,只有评分、模型ID、标签和元数据会从您的反馈中分享——您的聊天记录将保持私密,不会被包含在内。",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "为了保护您的隐私,只有评分、模型ID、标签和元数据会从您的反馈中分享——您的对话记录将保持私密,不会被包含在内。",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "要在这里选择自动化,请先将其添加到工作空间中的“函数”",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "要在这里选择过滤器,请先将其添加到工作空间中的“函数”",
|
||||
"To select toolkits here, add them to the \"Tools\" workspace first.": "要在这里选择工具包,请先将其添加到工作空间中的“工具”",
|
||||
@ -1244,10 +1244,10 @@
|
||||
"Tool updated successfully": "工具更新成功",
|
||||
"Tools": "工具",
|
||||
"Tools Access": "访问工具",
|
||||
"Tools are a function calling system with arbitrary code execution": "工具是一个具有任意代码执行能力的函数调用系统",
|
||||
"Tools are a function calling system with arbitrary code execution": "工具是一个支持任意代码执行的函数调用系统",
|
||||
"Tools Function Calling Prompt": "工具函数调用提示词",
|
||||
"Tools have a function calling system that allows arbitrary code execution.": "注意:工具有权执行任意代码",
|
||||
"Tools Public Sharing": "工具公开分享",
|
||||
"Tools Public Sharing": "工具公开共享",
|
||||
"Top K": "Top K",
|
||||
"Top K Reranker": "Top K Reranker",
|
||||
"Transformers": "Transformers",
|
||||
@ -1276,7 +1276,7 @@
|
||||
"Updated": "已更新",
|
||||
"Updated at": "更新于",
|
||||
"Updated At": "更新于",
|
||||
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "升级到授权计划以获得增强功能,包括自定义主题与品牌以及专属支持。",
|
||||
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "升级到授权计划以获得增强功能,包括自定义主题与品牌以及专属支持",
|
||||
"Upload": "上传",
|
||||
"Upload a GGUF model": "上传一个 GGUF 模型",
|
||||
"Upload Audio": "上传音频",
|
||||
@ -1292,7 +1292,7 @@
|
||||
"Use Gravatar": "使用来自 Gravatar 的头像",
|
||||
"Use groups to group your users and assign permissions.": "使用权限组来组织用户并分配权限",
|
||||
"Use Initials": "使用首个字符作为头像",
|
||||
"Use LLM": "",
|
||||
"Use LLM": "使用大语言模型(LLM)",
|
||||
"Use no proxy to fetch page contents.": "不使用代理获取页面内容",
|
||||
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "使用由 http_proxy 和 https_proxy 环境变量指定的代理获取页面内容",
|
||||
"user": "用户",
|
||||
@ -1301,12 +1301,12 @@
|
||||
"User Webhooks": "用户 Webhook",
|
||||
"Username": "用户名",
|
||||
"Users": "用户",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "竞技场模型默认使用所有模型。单击加号按钮添加自定义模型",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "竞技场模型默认使用所有模型。点击加号按钮添加自定义模型",
|
||||
"Utilize": "利用",
|
||||
"Valid time units:": "有效时间单位:",
|
||||
"Valves": "值",
|
||||
"Valves updated": "已更新值",
|
||||
"Valves updated successfully": "值更新成功",
|
||||
"Valves": "阀门",
|
||||
"Valves updated": "阀门已更新",
|
||||
"Valves updated successfully": "阀门更新成功",
|
||||
"variable": "变量",
|
||||
"variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换",
|
||||
"Verify Connection": "验证连接",
|
||||
@ -1330,7 +1330,7 @@
|
||||
"Web Loader Engine": "网页加载引擎",
|
||||
"Web Search": "联网搜索",
|
||||
"Web Search Engine": "联网搜索引擎",
|
||||
"Web Search in Chat": "聊天中的联网搜索",
|
||||
"Web Search in Chat": "对话中的联网搜索",
|
||||
"Web Search Query Generation": "联网搜索关键词生成",
|
||||
"Webhook URL": "Webhook URL",
|
||||
"WebUI Settings": "WebUI 设置",
|
||||
@ -1342,9 +1342,9 @@
|
||||
"What are you trying to achieve?": "你想要达到什么目标?",
|
||||
"What are you working on?": "你在忙于什么?",
|
||||
"What’s New in": "最近更新内容于",
|
||||
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "启用后,模型将实时回复每条聊天信息,在用户发送信息后立即生成回复。这种模式对即时聊天应用非常有用,但可能会影响较慢硬件的性能。",
|
||||
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "启用后,模型将实时回复每条对话信息,在用户发送信息后立即生成回复。这种模式对即时对话应用非常有用,但可能会影响较慢硬件的性能。",
|
||||
"wherever you are": "无论你在哪里",
|
||||
"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "",
|
||||
"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "是否对输出内容进行分页。每页之间将用水平分隔线和页码隔开。默认为关闭",
|
||||
"Whisper (Local)": "Whisper (本地)",
|
||||
"Why?": "为什么?",
|
||||
"Widescreen Mode": "宽屏模式",
|
||||
@ -1355,7 +1355,7 @@
|
||||
"Write": "读写",
|
||||
"Write a prompt suggestion (e.g. Who are you?)": "写一个提示词建议(例如:你是谁?)",
|
||||
"Write a summary in 50 words that summarizes [topic or keyword].": "用 50 个字写一个总结 [主题或关键词]",
|
||||
"Write something...": "单击以键入内容...",
|
||||
"Write something...": "写点什么...",
|
||||
"Yacy Instance URL": "Yacy Instance URL",
|
||||
"Yacy Password": "Yacy 密码",
|
||||
"Yacy Username": "Yacy 用户名",
|
||||
|
@ -35,7 +35,7 @@
|
||||
"Add Connection": "新增連線",
|
||||
"Add Content": "新增內容",
|
||||
"Add content here": "在此新增內容",
|
||||
"Add Custom Parameter": "",
|
||||
"Add Custom Parameter": "新增自訂參數",
|
||||
"Add custom prompt": "新增自訂提示詞",
|
||||
"Add Files": "新增檔案",
|
||||
"Add Group": "新增群組",
|
||||
@ -284,13 +284,13 @@
|
||||
"Current Model": "目前模型",
|
||||
"Current Password": "目前密碼",
|
||||
"Custom": "自訂",
|
||||
"Custom Parameter Name": "",
|
||||
"Custom Parameter Value": "",
|
||||
"Custom Parameter Name": "自訂參數名稱",
|
||||
"Custom Parameter Value": "自訂參數值",
|
||||
"Danger Zone": "危險區域",
|
||||
"Dark": "深色",
|
||||
"Database": "資料庫",
|
||||
"Datalab Marker API": "",
|
||||
"Datalab Marker API Key required.": "",
|
||||
"Datalab Marker API": "Datalab Marker API",
|
||||
"Datalab Marker API Key required.": "需要 Datalab Marker API 金鑰。",
|
||||
"December": "12 月",
|
||||
"Default": "預設",
|
||||
"Default (Open AI)": "預設 (OpenAI)",
|
||||
@ -337,8 +337,8 @@
|
||||
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "直接連線允許使用者連接到自己的 OpenAI 相容 API 端點。",
|
||||
"Direct Connections settings updated": "直接連線設定已更新。",
|
||||
"Direct Tool Servers": "直連工具伺服器",
|
||||
"Disable Image Extraction": "",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "",
|
||||
"Disable Image Extraction": "停用圖片擷取",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "停用從 PDF 擷取圖片。若啟用「使用 LLM」,圖片將自動添加說明。預設為 False。",
|
||||
"Disabled": "已停用",
|
||||
"Discover a function": "發掘函式",
|
||||
"Discover a model": "發掘模型",
|
||||
@ -363,7 +363,7 @@
|
||||
"Document": "文件",
|
||||
"Document Intelligence": "Document Intelligence",
|
||||
"Document Intelligence endpoint and key required.": "需要提供 Document Intelligence 端點及金鑰",
|
||||
"Documentation": "文件",
|
||||
"Documentation": "幫助文件",
|
||||
"Documents": "文件",
|
||||
"does not make any external connections, and your data stays securely on your locally hosted server.": "不會建立任何外部連線,而且您的資料會安全地儲存在您本機伺服器上。",
|
||||
"Domain Filter List": "網域篩選列表",
|
||||
@ -393,7 +393,7 @@
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "例如:3、4、5(留空使用預設值)",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "例如:en-US, ja-JP(留空以自動偵測)",
|
||||
"e.g., westus (leave blank for eastus)": "例如:westus(留空則使用 eastus)",
|
||||
"e.g.) en,fr,de": "",
|
||||
"e.g.) en,fr,de": "例如:en, fr, de",
|
||||
"Edit": "編輯",
|
||||
"Edit Arena Model": "編輯競技場模型",
|
||||
"Edit Channel": "編輯頻道",
|
||||
@ -444,7 +444,7 @@
|
||||
"Enter Chunk Size": "輸入區塊大小",
|
||||
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "輸入逗號分隔的 \"token:bias_value\" 配對 (範例:5432:100, 413:-100)",
|
||||
"Enter content for the pending user info overlay. Leave empty for default.": "為待處理的使用者訊息覆蓋層輸入內容。留空以使用預設值。",
|
||||
"Enter Datalab Marker API Key": "",
|
||||
"Enter Datalab Marker API Key": "輸入 Datalab Marker API 金鑰",
|
||||
"Enter description": "輸入描述",
|
||||
"Enter Docling OCR Engine": "輸入 Docling OCR 引擎",
|
||||
"Enter Docling OCR Language(s)": "輸入 Docling OCR 語言",
|
||||
@ -508,7 +508,7 @@
|
||||
"Enter Tavily Extract Depth": "輸入 Tavily 提取深度",
|
||||
"Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "請輸入您 WebUI 的公開 URL。此 URL 將用於在通知中產生連結。",
|
||||
"Enter the URL of the function to import": "請輸入要匯入函式的 URL",
|
||||
"Enter the URL to import": "",
|
||||
"Enter the URL to import": "輸入欲匯入的 URL",
|
||||
"Enter Tika Server URL": "輸入 Tika 伺服器 URL",
|
||||
"Enter timeout in seconds": "請以秒為單位輸入超時時間",
|
||||
"Enter to Send": "使用 Enter 傳送",
|
||||
@ -612,8 +612,8 @@
|
||||
"Folder name cannot be empty.": "資料夾名稱不能為空。",
|
||||
"Folder name updated successfully": "資料夾名稱更新成功",
|
||||
"Followed instructions perfectly": "完全遵循指示",
|
||||
"Force OCR": "",
|
||||
"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "",
|
||||
"Force OCR": "強制執行 OCR",
|
||||
"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "強制對 PDF 所有頁面執行 OCR。若原始 PDF 文字品質良好,此功能可能降低準確度。預設為 False。",
|
||||
"Forge new paths": "開創新路徑",
|
||||
"Form": "表單",
|
||||
"Format your variables using brackets like this:": "使用方括號格式化您的變數,如下所示:",
|
||||
@ -625,7 +625,7 @@
|
||||
"Function deleted successfully": "成功刪除函式",
|
||||
"Function Description": "函式描述",
|
||||
"Function ID": "函式 ID",
|
||||
"Function imported successfully": "",
|
||||
"Function imported successfully": "功能已成功匯入",
|
||||
"Function is now globally disabled": "現在已在全域停用函式",
|
||||
"Function is now globally enabled": "現在已在全域啟用函式",
|
||||
"Function Name": "函式名稱",
|
||||
@ -669,7 +669,7 @@
|
||||
"Host": "主機",
|
||||
"How can I help you today?": "今天我能為您做些什麼?",
|
||||
"How would you rate this response?": "您如何評價此回應?",
|
||||
"HTML": "",
|
||||
"HTML": "HTML",
|
||||
"Hybrid Search": "混合搜尋",
|
||||
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "我確認已閱讀並理解我的操作所帶來的影響。我了解執行任意程式碼的相關風險,並已驗證來源的可信度。",
|
||||
"ID": "ID",
|
||||
@ -742,7 +742,7 @@
|
||||
"Landing Page Mode": "首頁模式",
|
||||
"Language": "語言",
|
||||
"Language Locales": "語言區域設定",
|
||||
"Languages": "",
|
||||
"Languages": "語言",
|
||||
"Last Active": "最近活動時間",
|
||||
"Last Modified": "上次修改時間",
|
||||
"Last reply": "上次回覆",
|
||||
@ -781,7 +781,7 @@
|
||||
"Manage Pipelines": "管理管線",
|
||||
"Manage Tool Servers": "管理工具伺服器",
|
||||
"March": "3 月",
|
||||
"Markdown": "",
|
||||
"Markdown": "Markdown",
|
||||
"Max Speakers": "最大發言者數",
|
||||
"Max Upload Count": "最大上傳數量",
|
||||
"Max Upload Size": "最大上傳大小",
|
||||
@ -844,7 +844,7 @@
|
||||
"New Function": "新增功能",
|
||||
"New Note": "新增筆記",
|
||||
"New Password": "新密碼",
|
||||
"New Tool": "",
|
||||
"New Tool": "新增工具",
|
||||
"new-channel": "new-channel",
|
||||
"No chats found for this user.": "未找到此使用者的對話記錄。",
|
||||
"No chats found.": "未找到對話記錄。",
|
||||
@ -918,10 +918,10 @@
|
||||
"Other": "其他",
|
||||
"OUTPUT": "輸出",
|
||||
"Output format": "輸出格式",
|
||||
"Output Format": "",
|
||||
"Output Format": "輸出格式",
|
||||
"Overview": "概覽",
|
||||
"page": "頁面",
|
||||
"Paginate": "",
|
||||
"Paginate": "啟用分頁",
|
||||
"Parameters": "參數",
|
||||
"Password": "密碼",
|
||||
"Paste Large Text as File": "將大型文字以檔案貼上",
|
||||
@ -998,7 +998,7 @@
|
||||
"Reindex": "重新索引",
|
||||
"Reindex Knowledge Base Vectors": "重新索引知識庫向量",
|
||||
"Release Notes": "釋出説明",
|
||||
"Releases": "發行版",
|
||||
"Releases": "釋出說明",
|
||||
"Relevance": "相關性",
|
||||
"Relevance Threshold": "相關性閾值",
|
||||
"Remove": "移除",
|
||||
@ -1128,11 +1128,11 @@
|
||||
"Sign Out": "登出",
|
||||
"Sign up": "註冊",
|
||||
"Sign up to {{WEBUI_NAME}}": "註冊 {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "透過 LLM 顯著提升表格、表單、行內數學公式與版面偵測的準確度,但會增加延遲時間。預設為 True。",
|
||||
"Signing in to {{WEBUI_NAME}}": "正在登入 {{WEBUI_NAME}}",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
"Skip Cache": "略過快取",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "略過快取並重新執行推理。預設為 False。",
|
||||
"Sougou Search API sID": "搜狗搜尋 API sID",
|
||||
"Sougou Search API SK": "搜狗搜尋 API SK",
|
||||
"Source": "來源",
|
||||
@ -1142,8 +1142,8 @@
|
||||
"Stop": "停止",
|
||||
"Stop Sequence": "停止序列",
|
||||
"Stream Chat Response": "串流式對話回應",
|
||||
"Strip Existing OCR": "",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "",
|
||||
"Strip Existing OCR": "移除現有 OCR 文字",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "移除 PDF 中現有的 OCR 文字並重新執行 OCR。若啟用「強制執行 OCR」則忽略此選項。預設為 False。",
|
||||
"STT Model": "語音轉文字 (STT) 模型",
|
||||
"STT Settings": "語音轉文字 (STT) 設定",
|
||||
"Stylized PDF Export": "風格化 PDF 匯出",
|
||||
@ -1184,7 +1184,7 @@
|
||||
"The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "排行榜目前處於測試階段,我們可能會在改進演算法時調整評分計算方式。",
|
||||
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "檔案大小上限(MB)。如果檔案大小超過此限制,檔案將不會被上傳。",
|
||||
"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "對話中一次可使用的最大檔案數量。如果檔案數量超過此限制,檔案將不會被上傳。",
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "",
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "文字輸出格式,可選擇「json」、「markdown」或「html」。預設為「markdown」。",
|
||||
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分數應該是介於 0.0(0%)和 1.0(100%)之間的值。",
|
||||
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "模型的溫度。提高溫度會使模型更具創造性地回答。",
|
||||
"Theme": "主題",
|
||||
@ -1292,7 +1292,7 @@
|
||||
"Use Gravatar": "使用 Gravatar",
|
||||
"Use groups to group your users and assign permissions.": "使用群組來組織您的使用者並分配權限。",
|
||||
"Use Initials": "使用姓名縮寫",
|
||||
"Use LLM": "",
|
||||
"Use LLM": "使用 LLM",
|
||||
"Use no proxy to fetch page contents.": "不使用代理擷取頁面內容。",
|
||||
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "使用 http_proxy 和 https_proxy 環境變數指定的代理擷取頁面內容。",
|
||||
"user": "使用者",
|
||||
@ -1344,7 +1344,7 @@
|
||||
"What’s New in": "新功能",
|
||||
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "啟用時,模型將即時回應每個對話訊息,在使用者傳送訊息後立即生成回應。此模式適用於即時對話應用程式,但在較慢的硬體上可能會影響效能。",
|
||||
"wherever you are": "無論您在何處",
|
||||
"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "",
|
||||
"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "是否啟用輸出分頁功能,每頁會以水平線與頁碼分隔。預設為 False。",
|
||||
"Whisper (Local)": "Whisper(本機)",
|
||||
"Why?": "為什麼?",
|
||||
"Widescreen Mode": "寬螢幕模式",
|
||||
|
@ -842,7 +842,7 @@ export const removeAllDetails = (content) => {
|
||||
export const processDetails = (content) => {
|
||||
content = removeDetails(content, ['reasoning', 'code_interpreter']);
|
||||
|
||||
// This regex matches <details> tags with type="tool_calls" and captures their attributes to convert them to <tool_calls> tags
|
||||
// This regex matches <details> tags with type="tool_calls" and captures their attributes to convert them to a string
|
||||
const detailsRegex = /<details\s+type="tool_calls"([^>]*)>([\s\S]*?)<\/details>/gis;
|
||||
const matches = content.match(detailsRegex);
|
||||
if (matches) {
|
||||
@ -854,10 +854,7 @@ export const processDetails = (content) => {
|
||||
attributes[attributeMatch[1]] = attributeMatch[2];
|
||||
}
|
||||
|
||||
content = content.replace(
|
||||
match,
|
||||
`<tool_calls name="${attributes.name}" result="${attributes.result}"/>`
|
||||
);
|
||||
content = content.replace(match, `"${attributes.result}"`);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1225,6 +1222,9 @@ export const createMessagesList = (history, messageId) => {
|
||||
}
|
||||
|
||||
const message = history.messages[messageId];
|
||||
if (message === undefined) {
|
||||
return [];
|
||||
}
|
||||
if (message?.parentId) {
|
||||
return [...createMessagesList(history, message.parentId), message];
|
||||
} else {
|
||||
|
@ -42,7 +42,7 @@
|
||||
title: _prompt.title,
|
||||
command: _prompt.command,
|
||||
content: _prompt.content,
|
||||
access_control: _prompt?.access_control ?? null
|
||||
access_control: _prompt?.access_control === undefined ? {} : _prompt?.access_control
|
||||
};
|
||||
} else {
|
||||
goto('/workspace/prompts');
|
||||
|
Loading…
Reference in New Issue
Block a user