commit
438e5d966f
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.22] - 2025-08-11
|
||||
|
||||
### Added
|
||||
|
||||
- 🔗 **OpenAI API '/v1' Endpoint Compatibility**: Enhanced API compatibility by supporting requests to paths like '/v1/models', '/v1/embeddings', and '/v1/chat/completions'. This allows Open WebUI to integrate more seamlessly with tools that expect OpenAI's '/v1' API structure.
|
||||
- 🪄 **Toggle for Guided Response Regeneration Menu**: Introduced a new setting in 'Interface' settings, providing the ability to enable or disable the expanded guided response regeneration menu. This offers users more control over their chat workflow and interface preferences.
|
||||
- ✨ **General UI/UX Enhancements**: Implemented various user interface and experience improvements, including more rounded corners for cards in the Knowledge, Prompts, and Tools sections, and minor layout adjustments within the chat Navbar for improved visual consistency.
|
||||
- 🌐 **Localization & Internationalization Improvements**: Introduced support for the Kabyle (Taqbaylit) language, refined and expanded translations for Chinese, expanding the platform's linguistic coverage.
|
||||
|
||||
### Fixed
|
||||
|
||||
- 🐞 **OpenAI Error Message Propagation**: Resolved an issue where specific OpenAI API errors (e.g., 'Organization Not Verified') were obscured by generic 'JSONResponse' iterable errors. The system now correctly propagates detailed and actionable error messages from OpenAI to the user.
|
||||
- 🌲 **Pinecone Insert Issue**: Fixed a bug that prevented proper insertion of items into Pinecone vector databases.
|
||||
- 📦 **S3 Vector Issue**: Resolved a bug where s3vector functionality failed due to incorrect import paths.
|
||||
- 🏠 **Landing Page Option Setting Not Working**: Fixed an issue where the landing page option in settings was not functioning as intended.
|
||||
|
||||
## [0.6.21] - 2025-08-10
|
||||
|
||||
### Added
|
||||
|
|
|
@ -871,7 +871,7 @@ CACHE_DIR.mkdir(parents=True, exist_ok=True)
|
|||
ENABLE_DIRECT_CONNECTIONS = PersistentConfig(
|
||||
"ENABLE_DIRECT_CONNECTIONS",
|
||||
"direct.enable",
|
||||
os.environ.get("ENABLE_DIRECT_CONNECTIONS", "True").lower() == "true",
|
||||
os.environ.get("ENABLE_DIRECT_CONNECTIONS", "False").lower() == "true",
|
||||
)
|
||||
|
||||
####################################
|
||||
|
|
|
@ -1261,6 +1261,7 @@ if audit_level != AuditLevel.NONE:
|
|||
|
||||
|
||||
@app.get("/api/models")
|
||||
@app.get("/api/v1/models") # Experimental: Compatibility with OpenAI API
|
||||
async def get_models(
|
||||
request: Request, refresh: bool = False, user=Depends(get_verified_user)
|
||||
):
|
||||
|
@ -1341,6 +1342,7 @@ async def get_base_models(request: Request, user=Depends(get_admin_user)):
|
|||
|
||||
|
||||
@app.post("/api/embeddings")
|
||||
@app.post("/api/v1/embeddings") # Experimental: Compatibility with OpenAI API
|
||||
async def embeddings(
|
||||
request: Request, form_data: dict, user=Depends(get_verified_user)
|
||||
):
|
||||
|
@ -1367,6 +1369,7 @@ async def embeddings(
|
|||
|
||||
|
||||
@app.post("/api/chat/completions")
|
||||
@app.post("/api/v1/chat/completions") # Experimental: Compatibility with OpenAI API
|
||||
async def chat_completion(
|
||||
request: Request,
|
||||
form_data: dict,
|
||||
|
|
|
@ -32,6 +32,8 @@ from open_webui.config import (
|
|||
PINECONE_CLOUD,
|
||||
)
|
||||
from open_webui.env import SRC_LOG_LEVELS
|
||||
from open_webui.retrieval.vector.utils import stringify_metadata
|
||||
|
||||
|
||||
NO_LIMIT = 10000 # Reasonable limit to avoid overwhelming the system
|
||||
BATCH_SIZE = 100 # Recommended batch size for Pinecone operations
|
||||
|
@ -183,7 +185,7 @@ class PineconeClient(VectorDBBase):
|
|||
point = {
|
||||
"id": item["id"],
|
||||
"values": item["vector"],
|
||||
"metadata": metadata,
|
||||
"metadata": stringify_metadata(metadata),
|
||||
}
|
||||
points.append(point)
|
||||
return points
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from backend.open_webui.retrieval.vector.utils import stringify_metadata
|
||||
from open_webui.retrieval.vector.utils import stringify_metadata
|
||||
from open_webui.retrieval.vector.main import (
|
||||
VectorDBBase,
|
||||
VectorItem,
|
||||
|
|
|
@ -19,7 +19,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|||
|
||||
|
||||
from fastapi import Request, HTTPException
|
||||
from starlette.responses import Response, StreamingResponse
|
||||
from starlette.responses import Response, StreamingResponse, JSONResponse
|
||||
|
||||
|
||||
from open_webui.models.chats import Chats
|
||||
|
@ -1254,91 +1254,111 @@ async def process_chat_response(
|
|||
# Non-streaming response
|
||||
if not isinstance(response, StreamingResponse):
|
||||
if event_emitter:
|
||||
if "error" in response:
|
||||
error = response["error"].get("detail", response["error"])
|
||||
Chats.upsert_message_to_chat_by_id_and_message_id(
|
||||
metadata["chat_id"],
|
||||
metadata["message_id"],
|
||||
{
|
||||
"error": {"content": error},
|
||||
},
|
||||
)
|
||||
if isinstance(response, dict) or isinstance(response, JSONResponse):
|
||||
|
||||
if "selected_model_id" in response:
|
||||
Chats.upsert_message_to_chat_by_id_and_message_id(
|
||||
metadata["chat_id"],
|
||||
metadata["message_id"],
|
||||
{
|
||||
"selectedModelId": response["selected_model_id"],
|
||||
},
|
||||
)
|
||||
if isinstance(response, JSONResponse) and isinstance(
|
||||
response.body, bytes
|
||||
):
|
||||
try:
|
||||
response_data = json.loads(response.body.decode("utf-8"))
|
||||
except json.JSONDecodeError:
|
||||
response_data = {"error": {"detail": "Invalid JSON response"}}
|
||||
else:
|
||||
response_data = response
|
||||
|
||||
choices = response.get("choices", [])
|
||||
if choices and choices[0].get("message", {}).get("content"):
|
||||
content = response["choices"][0]["message"]["content"]
|
||||
|
||||
if content:
|
||||
|
||||
await event_emitter(
|
||||
{
|
||||
"type": "chat:completion",
|
||||
"data": response,
|
||||
}
|
||||
)
|
||||
|
||||
title = Chats.get_chat_title_by_id(metadata["chat_id"])
|
||||
|
||||
await event_emitter(
|
||||
{
|
||||
"type": "chat:completion",
|
||||
"data": {
|
||||
"done": True,
|
||||
"content": content,
|
||||
"title": title,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
# Save message in the database
|
||||
if "error" in response_data:
|
||||
error = response_data["error"].get("detail", response_data["error"])
|
||||
Chats.upsert_message_to_chat_by_id_and_message_id(
|
||||
metadata["chat_id"],
|
||||
metadata["message_id"],
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": content,
|
||||
"error": {"content": error},
|
||||
},
|
||||
)
|
||||
|
||||
# Send a webhook notification if the user is not active
|
||||
if not get_active_status_by_user_id(user.id):
|
||||
webhook_url = Users.get_user_webhook_url_by_id(user.id)
|
||||
if webhook_url:
|
||||
post_webhook(
|
||||
request.app.state.WEBUI_NAME,
|
||||
webhook_url,
|
||||
f"{title} - {request.app.state.config.WEBUI_URL}/c/{metadata['chat_id']}\n\n{content}",
|
||||
{
|
||||
"action": "chat",
|
||||
"message": content,
|
||||
if "selected_model_id" in response_data:
|
||||
Chats.upsert_message_to_chat_by_id_and_message_id(
|
||||
metadata["chat_id"],
|
||||
metadata["message_id"],
|
||||
{
|
||||
"selectedModelId": response_data["selected_model_id"],
|
||||
},
|
||||
)
|
||||
|
||||
choices = response_data.get("choices", [])
|
||||
if choices and choices[0].get("message", {}).get("content"):
|
||||
content = response_data["choices"][0]["message"]["content"]
|
||||
|
||||
if content:
|
||||
await event_emitter(
|
||||
{
|
||||
"type": "chat:completion",
|
||||
"data": response_data,
|
||||
}
|
||||
)
|
||||
|
||||
title = Chats.get_chat_title_by_id(metadata["chat_id"])
|
||||
|
||||
await event_emitter(
|
||||
{
|
||||
"type": "chat:completion",
|
||||
"data": {
|
||||
"done": True,
|
||||
"content": content,
|
||||
"title": title,
|
||||
"url": f"{request.app.state.config.WEBUI_URL}/c/{metadata['chat_id']}",
|
||||
},
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
await background_tasks_handler()
|
||||
# Save message in the database
|
||||
Chats.upsert_message_to_chat_by_id_and_message_id(
|
||||
metadata["chat_id"],
|
||||
metadata["message_id"],
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": content,
|
||||
},
|
||||
)
|
||||
|
||||
if events and isinstance(events, list) and isinstance(response, dict):
|
||||
extra_response = {}
|
||||
for event in events:
|
||||
if isinstance(event, dict):
|
||||
extra_response.update(event)
|
||||
else:
|
||||
extra_response[event] = True
|
||||
# Send a webhook notification if the user is not active
|
||||
if not get_active_status_by_user_id(user.id):
|
||||
webhook_url = Users.get_user_webhook_url_by_id(user.id)
|
||||
if webhook_url:
|
||||
post_webhook(
|
||||
request.app.state.WEBUI_NAME,
|
||||
webhook_url,
|
||||
f"{title} - {request.app.state.config.WEBUI_URL}/c/{metadata['chat_id']}\n\n{content}",
|
||||
{
|
||||
"action": "chat",
|
||||
"message": content,
|
||||
"title": title,
|
||||
"url": f"{request.app.state.config.WEBUI_URL}/c/{metadata['chat_id']}",
|
||||
},
|
||||
)
|
||||
|
||||
response = {
|
||||
**extra_response,
|
||||
**response,
|
||||
}
|
||||
await background_tasks_handler()
|
||||
|
||||
if events and isinstance(events, list):
|
||||
extra_response = {}
|
||||
for event in events:
|
||||
if isinstance(event, dict):
|
||||
extra_response.update(event)
|
||||
else:
|
||||
extra_response[event] = True
|
||||
|
||||
response_data = {
|
||||
**extra_response,
|
||||
**response_data,
|
||||
}
|
||||
|
||||
if isinstance(response, dict):
|
||||
response = response_data
|
||||
if isinstance(response, JSONResponse):
|
||||
response = JSONResponse(
|
||||
content=response_data,
|
||||
headers=response.headers,
|
||||
status_code=response.status_code,
|
||||
)
|
||||
|
||||
return response
|
||||
else:
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "open-webui",
|
||||
"version": "0.6.21",
|
||||
"version": "0.6.22",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "open-webui",
|
||||
"version": "0.6.21",
|
||||
"version": "0.6.22",
|
||||
"dependencies": {
|
||||
"@azure/msal-browser": "^4.5.0",
|
||||
"@codemirror/lang-javascript": "^6.2.2",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "open-webui",
|
||||
"version": "0.6.21",
|
||||
"version": "0.6.22",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run pyodide:fetch && vite dev --host",
|
||||
|
|
|
@ -379,7 +379,7 @@ export const generateOpenAIChatCompletion = async (
|
|||
return res.json();
|
||||
})
|
||||
.catch((err) => {
|
||||
error = `${err?.detail ?? err}`;
|
||||
error = err?.detail ?? err;
|
||||
return null;
|
||||
});
|
||||
|
||||
|
|
|
@ -1783,11 +1783,24 @@
|
|||
},
|
||||
`${WEBUI_BASE_URL}/api`
|
||||
).catch(async (error) => {
|
||||
toast.error(`${error}`);
|
||||
console.log(error);
|
||||
|
||||
let errorMessage = error;
|
||||
if (error?.error?.message) {
|
||||
errorMessage = error.error.message;
|
||||
} else if (error?.message) {
|
||||
errorMessage = error.message;
|
||||
}
|
||||
|
||||
if (typeof errorMessage === 'object') {
|
||||
errorMessage = $i18n.t(`Uh-oh! There was an issue with the response.`);
|
||||
}
|
||||
|
||||
toast.error(`${errorMessage}`);
|
||||
responseMessage.error = {
|
||||
content: error
|
||||
};
|
||||
|
||||
responseMessage.done = true;
|
||||
|
||||
history.messages[responseMessageId] = responseMessage;
|
||||
|
|
|
@ -10,6 +10,20 @@
|
|||
</div>
|
||||
|
||||
<div class=" self-center text-sm">
|
||||
{typeof content === 'string' ? content : JSON.stringify(content)}
|
||||
{#if typeof content === 'string'}
|
||||
{content}
|
||||
{:else if typeof content === 'object' && content !== null}
|
||||
{#if content?.error && content?.error?.message}
|
||||
{content.error.message}
|
||||
{:else if content?.detail}
|
||||
{content.detail}
|
||||
{:else if content?.message}
|
||||
{content.message}
|
||||
{:else}
|
||||
{JSON.stringify(content)}
|
||||
{/if}
|
||||
{:else}
|
||||
{JSON.stringify(content)}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1349,51 +1349,95 @@
|
|||
</Tooltip>
|
||||
{/if}
|
||||
|
||||
<button
|
||||
type="button"
|
||||
class="hidden regenerate-response-button"
|
||||
on:click={() => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message);
|
||||
{#if $settings?.regenerateMenu ?? true}
|
||||
<button
|
||||
type="button"
|
||||
class="hidden regenerate-response-button"
|
||||
on:click={() => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message);
|
||||
|
||||
(model?.actions ?? []).forEach((action) => {
|
||||
dispatch('action', {
|
||||
id: action.id,
|
||||
event: {
|
||||
id: 'regenerate-response',
|
||||
data: {
|
||||
messageId: message.id
|
||||
(model?.actions ?? []).forEach((action) => {
|
||||
dispatch('action', {
|
||||
id: action.id,
|
||||
event: {
|
||||
id: 'regenerate-response',
|
||||
data: {
|
||||
messageId: message.id
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}}
|
||||
/>
|
||||
}}
|
||||
/>
|
||||
|
||||
<RegenerateMenu
|
||||
onRegenerate={(prompt = null) => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message, prompt);
|
||||
<RegenerateMenu
|
||||
onRegenerate={(prompt = null) => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message, prompt);
|
||||
|
||||
(model?.actions ?? []).forEach((action) => {
|
||||
dispatch('action', {
|
||||
id: action.id,
|
||||
event: {
|
||||
id: 'regenerate-response',
|
||||
data: {
|
||||
messageId: message.id
|
||||
(model?.actions ?? []).forEach((action) => {
|
||||
dispatch('action', {
|
||||
id: action.id,
|
||||
event: {
|
||||
id: 'regenerate-response',
|
||||
data: {
|
||||
messageId: message.id
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}}
|
||||
>
|
||||
}}
|
||||
>
|
||||
<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
|
||||
<div
|
||||
aria-label={$i18n.t('Regenerate')}
|
||||
class="{isLastMessage
|
||||
? 'visible'
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2.3"
|
||||
aria-hidden="true"
|
||||
stroke="currentColor"
|
||||
class="w-4 h-4"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
</Tooltip>
|
||||
</RegenerateMenu>
|
||||
{:else}
|
||||
<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
|
||||
<div
|
||||
<button
|
||||
type="button"
|
||||
aria-label={$i18n.t('Regenerate')}
|
||||
class="{isLastMessage
|
||||
? 'visible'
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
|
||||
on:click={() => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message);
|
||||
|
||||
(model?.actions ?? []).forEach((action) => {
|
||||
dispatch('action', {
|
||||
id: action.id,
|
||||
event: {
|
||||
id: 'regenerate-response',
|
||||
data: {
|
||||
messageId: message.id
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}}
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
|
@ -1410,9 +1454,9 @@
|
|||
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
</button>
|
||||
</Tooltip>
|
||||
</RegenerateMenu>
|
||||
{/if}
|
||||
|
||||
{#if siblings.length > 1}
|
||||
<Tooltip content={$i18n.t('Delete')} placement="bottom">
|
||||
|
|
|
@ -67,16 +67,11 @@
|
|||
|
||||
<div class=" flex max-w-full w-full mx-auto px-1.5 md:px-2 pt-0.5 bg-transparent">
|
||||
<div class="flex items-center w-full max-w-full">
|
||||
{#if $mobile}
|
||||
{#if $mobile && !$showSidebar}
|
||||
<div
|
||||
class="{$showSidebar
|
||||
? 'md:hidden'
|
||||
: ''} mr-1.5 mt-1 self-start flex flex-none items-center text-gray-600 dark:text-gray-400"
|
||||
class="-translate-x-0.5 mr-1 mt-1 self-start flex flex-none items-center text-gray-600 dark:text-gray-400"
|
||||
>
|
||||
<Tooltip
|
||||
content={$showSidebar ? $i18n.t('Close Sidebar') : $i18n.t('Open Sidebar')}
|
||||
interactive={true}
|
||||
>
|
||||
<Tooltip content={$showSidebar ? $i18n.t('Close Sidebar') : $i18n.t('Open Sidebar')}>
|
||||
<button
|
||||
class=" cursor-pointer flex rounded-lg hover:bg-gray-100 dark:hover:bg-gray-850 transition"
|
||||
on:click={() => {
|
||||
|
|
|
@ -52,6 +52,8 @@
|
|||
let keepFollowUpPrompts = false;
|
||||
let insertFollowUpPrompt = false;
|
||||
|
||||
let regenerateMenu = true;
|
||||
|
||||
let landingPageMode = '';
|
||||
let chatBubble = true;
|
||||
let chatDirection: 'LTR' | 'RTL' | 'auto' = 'auto';
|
||||
|
@ -200,6 +202,8 @@
|
|||
keepFollowUpPrompts = $settings?.keepFollowUpPrompts ?? false;
|
||||
insertFollowUpPrompt = $settings?.insertFollowUpPrompt ?? false;
|
||||
|
||||
regenerateMenu = $settings?.regenerateMenu ?? true;
|
||||
|
||||
largeTextAsFile = $settings?.largeTextAsFile ?? false;
|
||||
copyFormatted = $settings?.copyFormatted ?? false;
|
||||
|
||||
|
@ -485,7 +489,7 @@
|
|||
type="button"
|
||||
>
|
||||
<span class="ml-2 self-center" id="notification-sound-state"
|
||||
>{notificationSound === true ? $i18n.t('On') : $i18n.t('Off')}</span
|
||||
>{landingPageMode === '' ? $i18n.t('Default') : $i18n.t('Chat')}</span
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -709,6 +713,25 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div id="regenerate-menu-label" class=" self-center text-xs">
|
||||
{$i18n.t('Regenerate Menu')}
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-2 p-1">
|
||||
<Switch
|
||||
ariaLabelledbyId="regenerate-menu-label"
|
||||
tooltip={true}
|
||||
bind:state={regenerateMenu}
|
||||
on:change={() => {
|
||||
saveSettings({ regenerateMenu });
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div id="always-collapse-label" class=" self-center text-xs">
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
...(theme !== '' ? { theme } : { theme: 'dark' }),
|
||||
arrow: false,
|
||||
offset: offset,
|
||||
interactive: interactive,
|
||||
...(interactive ? { interactive: true } : {}),
|
||||
...tippyOptions
|
||||
});
|
||||
}
|
||||
|
|
|
@ -332,9 +332,13 @@
|
|||
disabled={generating}
|
||||
on:keydown={chatTitleInputKeydownHandler}
|
||||
on:blur={async (e) => {
|
||||
// check if target is generate button
|
||||
if (ignoreBlur) {
|
||||
ignoreBlur = false;
|
||||
|
||||
if (e.relatedTarget?.id === 'generate-title-button') {
|
||||
generateTitleHandler();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -440,13 +444,6 @@
|
|||
on:mouseenter={() => {
|
||||
ignoreBlur = true;
|
||||
}}
|
||||
on:click={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
e.stopPropagation();
|
||||
|
||||
generateTitleHandler();
|
||||
}}
|
||||
>
|
||||
<Sparkles strokeWidth="2" />
|
||||
</button>
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
<div class="mb-5 grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-2">
|
||||
{#each filteredItems as item}
|
||||
<button
|
||||
class=" flex space-x-4 cursor-pointer text-left w-full px-4 py-3 border border-gray-50 dark:border-gray-850 hover:bg-black/5 dark:hover:bg-white/5 transition rounded-xl"
|
||||
class=" flex space-x-4 cursor-pointer text-left w-full px-4 py-3 border border-gray-50 dark:border-gray-850 hover:bg-black/5 dark:hover:bg-white/5 transition rounded-2xl"
|
||||
on:click={() => {
|
||||
if (item?.meta?.document) {
|
||||
toast.error(
|
||||
|
|
|
@ -173,7 +173,7 @@
|
|||
<div class="mb-5 gap-2 grid lg:grid-cols-2 xl:grid-cols-3">
|
||||
{#each filteredItems as prompt}
|
||||
<div
|
||||
class=" flex space-x-4 cursor-pointer w-full px-4 py-3 border border-gray-50 dark:border-gray-850 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl transition"
|
||||
class=" flex space-x-4 cursor-pointer w-full px-4 py-3 border border-gray-50 dark:border-gray-850 dark:hover:bg-white/5 hover:bg-black/5 rounded-2xl transition"
|
||||
>
|
||||
<div class=" flex flex-1 space-x-4 cursor-pointer w-full">
|
||||
<a href={`/workspace/prompts/edit?command=${encodeURIComponent(prompt.command)}`}>
|
||||
|
|
|
@ -259,7 +259,7 @@
|
|||
<div class="mb-5 gap-2 grid lg:grid-cols-2 xl:grid-cols-3">
|
||||
{#each filteredItems as tool}
|
||||
<div
|
||||
class=" flex space-x-4 cursor-pointer w-full px-4 py-3 border border-gray-50 dark:border-gray-850 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl transition"
|
||||
class=" flex space-x-4 cursor-pointer w-full px-4 py-3 border border-gray-50 dark:border-gray-850 dark:hover:bg-white/5 hover:bg-black/5 rounded-2xl transition"
|
||||
>
|
||||
<a
|
||||
class=" flex flex-1 space-x-3.5 cursor-pointer w-full"
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "رفض عندما لا ينبغي أن يكون",
|
||||
"Regenerate": "تجديد",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "ملاحظات الإصدار",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "مراجع من",
|
||||
"Refused when it shouldn't have": "رفض عندما لا ينبغي أن يكون",
|
||||
"Regenerate": "تجديد",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "ملاحظات الإصدار",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Препратки от",
|
||||
"Refused when it shouldn't have": "Отказано, когато не трябва да бъде",
|
||||
"Regenerate": "Регенериране",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Реиндексирай",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Бележки по изданието",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "যদি উপযুক্ত নয়, তবে রেজিগেনেট করা হচ্ছে",
|
||||
"Regenerate": "রেজিগেনেট করুন",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "রিলিজ নোটসমূহ",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "ནས་ལུང་འདྲེན།",
|
||||
"Refused when it shouldn't have": "མི་དགོས་དུས་ཁས་མ་བླངས།",
|
||||
"Regenerate": "བསྐྱར་བཟོ།",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "འགྲེམས་སྤེལ་མཆན་བུ།",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referències de",
|
||||
"Refused when it shouldn't have": "Refusat quan no hauria d'haver estat",
|
||||
"Regenerate": "Regenerar",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Reindexar",
|
||||
"Reindex Knowledge Base Vectors": "Reindexar els vector base del Coneixement",
|
||||
"Release Notes": "Notes de la versió",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "",
|
||||
"Regenerate": "",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Release Notes",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Reference z",
|
||||
"Refused when it shouldn't have": "Odmítnuto, když nemělo být.",
|
||||
"Regenerate": "Regenerovat",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Záznamy o vydání",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referencer fra",
|
||||
"Refused when it shouldn't have": "Afvist, når den ikke burde have været det",
|
||||
"Regenerate": "Regenerer",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Genindekser",
|
||||
"Reindex Knowledge Base Vectors": "Genindekser vidensbase vektorer",
|
||||
"Release Notes": "Udgivelsesnoter",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referenzen aus",
|
||||
"Refused when it shouldn't have": "Abgelehnt, obwohl es nicht hätte abgelehnt werden sollen",
|
||||
"Regenerate": "Neu generieren",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Neu indexieren",
|
||||
"Reindex Knowledge Base Vectors": "Vektoren der Wissensdatenbank neu indizieren",
|
||||
"Release Notes": "Veröffentlichungshinweise",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "",
|
||||
"Regenerate": "",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Release Borks",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Αναφορές από",
|
||||
"Refused when it shouldn't have": "Αρνήθηκε όταν δεν έπρεπε",
|
||||
"Regenerate": "Αναγεννήστε",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Σημειώσεις Έκδοσης",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "",
|
||||
"Regenerate": "",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "",
|
||||
"Regenerate": "",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referencias desde",
|
||||
"Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho",
|
||||
"Regenerate": "Regenerar",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Reindexar",
|
||||
"Reindex Knowledge Base Vectors": "Reindexar Base Vectorial de Conocimiento",
|
||||
"Release Notes": "Notas de la Versión",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Viited allikast",
|
||||
"Refused when it shouldn't have": "Keeldus, kui ei oleks pidanud",
|
||||
"Regenerate": "Regenereeri",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Väljalaskemärkmed",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Erreferentziak hemendik",
|
||||
"Refused when it shouldn't have": "Ukatu duenean ukatu behar ez zuenean",
|
||||
"Regenerate": "Bersortu",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Bertsio oharrak",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "مراجع از",
|
||||
"Refused when it shouldn't have": "رد شده زمانی که باید نباشد",
|
||||
"Regenerate": "تولید مجدد",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "فهرست\u200cبندی مجدد",
|
||||
"Reindex Knowledge Base Vectors": "فهرست\u200cبندی مجدد بردارهای پایگاه دانش",
|
||||
"Release Notes": "یادداشت\u200cهای انتشار",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Viitteet lähteistä",
|
||||
"Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt",
|
||||
"Regenerate": "Uudelleentuota",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Indeksoi uudelleen",
|
||||
"Reindex Knowledge Base Vectors": "Indeksoi tietämyksen vektorit uudelleen",
|
||||
"Release Notes": "Julkaisutiedot",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Références de",
|
||||
"Refused when it shouldn't have": "Refusé alors qu'il n'aurait pas dû l'être",
|
||||
"Regenerate": "Regénérer",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Réindexer",
|
||||
"Reindex Knowledge Base Vectors": "Réindexer les vecteurs de la base de connaissance",
|
||||
"Release Notes": "Notes de mise à jour",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Références de",
|
||||
"Refused when it shouldn't have": "Refusé alors qu'il n'aurait pas dû l'être",
|
||||
"Regenerate": "Regénérer",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Réindexer",
|
||||
"Reindex Knowledge Base Vectors": "Réindexer les vecteurs de la base de connaissance",
|
||||
"Release Notes": "Notes de mise à jour",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referencias de",
|
||||
"Refused when it shouldn't have": "Rechazado cuando no debería",
|
||||
"Regenerate": "Regenerar",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Notas da versión",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "נדחה כאשר לא היה צריך",
|
||||
"Regenerate": "הפק מחדש",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "הערות שחרור",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "जब ऐसा नहीं होना चाहिए था तो मना कर दिया",
|
||||
"Regenerate": "पुनः जेनरेट",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "रिलीज नोट्स",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "Odbijen kada nije trebao biti",
|
||||
"Regenerate": "Regeneriraj",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Bilješke o izdanju",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Hivatkozások innen",
|
||||
"Refused when it shouldn't have": "Elutasítva, amikor nem kellett volna",
|
||||
"Regenerate": "Újragenerálás",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Kiadási jegyzetek",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "Menolak ketika seharusnya tidak",
|
||||
"Regenerate": "Regenerasi",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Catatan Rilis",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Tagairtí ó",
|
||||
"Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó",
|
||||
"Regenerate": "Athghiniúint",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Ath-innéacs",
|
||||
"Reindex Knowledge Base Vectors": "Veicteoirí Bonn Eolais a ath-innéacsú",
|
||||
"Release Notes": "Nótaí Scaoilte",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Riferimenti da",
|
||||
"Refused when it shouldn't have": "Rifiutato quando non avrebbe dovuto",
|
||||
"Regenerate": "Rigenera",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Reindicizza",
|
||||
"Reindex Knowledge Base Vectors": "Reindicizza i Vettori della Base di Conoscenza",
|
||||
"Release Notes": "Note di Rilascio",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "参照元",
|
||||
"Refused when it shouldn't have": "拒否すべきでないのに拒否した",
|
||||
"Regenerate": "再生成",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "再インデックス",
|
||||
"Reindex Knowledge Base Vectors": "ナレッジベースベクターを再インデックス",
|
||||
"Release Notes": "リリースノート",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "უარა, როგორც უნდა იყოს",
|
||||
"Regenerate": "თავიდან გენერაცია",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "გამოცემის შენიშვნები",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "출처",
|
||||
"Refused when it shouldn't have": "허용되지 않았지만 허용되어야 합니다.",
|
||||
"Regenerate": "재생성",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "재색인",
|
||||
"Reindex Knowledge Base Vectors": "전체 지식 베이스 재색인",
|
||||
"Release Notes": "릴리스 노트",
|
||||
|
|
|
@ -115,6 +115,10 @@
|
|||
"code": "ja-JP",
|
||||
"title": "Japanese (日本語)"
|
||||
},
|
||||
{
|
||||
"code": "kab-DZ",
|
||||
"title": "Kabyle (Taqbaylit)"
|
||||
},
|
||||
{
|
||||
"code": "ko-KR",
|
||||
"title": "Korean (한국어)"
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "Atmesta kai neturėtų būti atmesta",
|
||||
"Regenerate": "Generuoti iš naujo",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Naujovės",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "Menolak dimana ia tidak sepatutnya",
|
||||
"Regenerate": "Jana semula",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Nota Keluaran",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Henviser fra",
|
||||
"Refused when it shouldn't have": "Avvist når det ikke burde ha blitt det",
|
||||
"Regenerate": "Generer på nytt",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Utgivelsesnotater",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referenties van",
|
||||
"Refused when it shouldn't have": "Geweigerd terwijl het niet had moeten",
|
||||
"Regenerate": "Regenereren",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Release-opmerkingen",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "ਜਦੋਂ ਇਹ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਸੀ ਤਾਂ ਇਨਕਾਰ ਕੀਤਾ",
|
||||
"Regenerate": "ਮੁੜ ਬਣਾਓ",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "ਰਿਲੀਜ਼ ਨੋਟਸ",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Odniesienia do",
|
||||
"Refused when it shouldn't have": "Odmówił, gdy nie powinien",
|
||||
"Regenerate": "Wygeneruj ponownie",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Notatki do wydania",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referências de",
|
||||
"Refused when it shouldn't have": "Recusado quando não deveria",
|
||||
"Regenerate": "Gerar novamente",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Notas de Lançamento",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "Recusado quando não deveria",
|
||||
"Regenerate": "Regenerar",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Notas de Lançamento",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referințe din",
|
||||
"Refused when it shouldn't have": "Refuzat când nu ar fi trebuit",
|
||||
"Regenerate": "Regenerare",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Note de Lansare",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Отсылки к",
|
||||
"Refused when it shouldn't have": "Отказано в доступе, когда это не должно было произойти",
|
||||
"Regenerate": "Перегенерировать",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Переиндексировать",
|
||||
"Reindex Knowledge Base Vectors": "Переиндексировать векторы базы знаний",
|
||||
"Release Notes": "Примечания к выпуску",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referencie z",
|
||||
"Refused when it shouldn't have": "Odmietnuté, keď nemalo byť.",
|
||||
"Regenerate": "Regenerovať",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Záznamy o vydaní",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Референце од",
|
||||
"Refused when it shouldn't have": "Одбијено када није требало",
|
||||
"Regenerate": "Поново створи",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Напомене о издању",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referenser från",
|
||||
"Refused when it shouldn't have": "Avvisades när det inte borde ha gjort det",
|
||||
"Regenerate": "Regenerera",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Indexera om",
|
||||
"Reindex Knowledge Base Vectors": "Indexera om kunskapsbasvektorer",
|
||||
"Release Notes": "Versionsinformation",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "ปฏิเสธเมื่อไม่ควรทำ",
|
||||
"Regenerate": "สร้างใหม่",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "บันทึกรุ่น",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "",
|
||||
"Refused when it shouldn't have": "",
|
||||
"Regenerate": "",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Referanslar arasından",
|
||||
"Refused when it shouldn't have": "Reddedilmemesi gerekirken reddedildi",
|
||||
"Regenerate": "Tekrar Oluştur",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Sürüm Notları",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "نەقىل مەنبەسى:",
|
||||
"Refused when it shouldn't have": "رەت قىلماسلىق كېرەك ئىدى",
|
||||
"Regenerate": "قايتا ھاسىل قىلىش",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "قايتا ئىندېكسلاش",
|
||||
"Reindex Knowledge Base Vectors": "بىلىم ئاساسى ۋېكتورىنى قايتا ئىندېكسلاش",
|
||||
"Release Notes": "نەشر خاتىرىسى",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Посилання з",
|
||||
"Refused when it shouldn't have": "Відмовив, коли не мав би",
|
||||
"Regenerate": "Регенерувати",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Нотатки до випуску",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "سے حوالہ جات",
|
||||
"Refused when it shouldn't have": "جب انکار نہیں ہونا چاہیے تھا، انکار کر دیا",
|
||||
"Regenerate": "دوبارہ تخلیق کریں",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "ریلیز نوٹس",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Маълумотномалар",
|
||||
"Refused when it shouldn't have": "Бўлмаслиги керак бўлганда рад этилди",
|
||||
"Regenerate": "Қайта тиклаш",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Қайта индекс",
|
||||
"Reindex Knowledge Base Vectors": "Реиндех билимлар базаси векторлари",
|
||||
"Release Notes": "Чиқариш эслатмалари",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Ma'lumotnomalar",
|
||||
"Refused when it shouldn't have": "Bo'lmasligi kerak bo'lganda rad etildi",
|
||||
"Regenerate": "Qayta tiklash",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "Qayta indeks",
|
||||
"Reindex Knowledge Base Vectors": "Reindex bilimlar bazasi vektorlari",
|
||||
"Release Notes": "Chiqarish eslatmalari",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "Tham khảo từ",
|
||||
"Refused when it shouldn't have": "Từ chối trả lời mà nhẽ không nên làm vậy",
|
||||
"Regenerate": "Tạo sinh lại câu trả lời",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "",
|
||||
"Reindex Knowledge Base Vectors": "",
|
||||
"Release Notes": "Mô tả những cập nhật mới",
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
"Add content here": "在此添加内容",
|
||||
"Add Custom Parameter": "增加自定义参数",
|
||||
"Add custom prompt": "添加自定义提示词",
|
||||
"Add Details": "",
|
||||
"Add Details": "丰富细节",
|
||||
"Add Files": "添加文件",
|
||||
"Add Group": "添加权限组",
|
||||
"Add Memory": "添加记忆",
|
||||
|
@ -54,8 +54,8 @@
|
|||
"Add text content": "添加文本内容",
|
||||
"Add User": "添加用户",
|
||||
"Add User Group": "添加权限组",
|
||||
"Additional Config": "",
|
||||
"Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "",
|
||||
"Additional Config": "额外配置项",
|
||||
"Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Datalab Marker 的额外配置项,可以填写一个包含键值对的JSON字符串。例如:{\"key\": \"value\"}。支持的键包括:disable_links、keep_pageheader_in_output、keep_pagefooter_in_output、filter_blank_pages、drop_repeated_text、layout_coverage_threshold、merge_threshold、height_tolerance、gap_threshold、image_threshold、min_line_length、level_count 和 default_level。",
|
||||
"Adjusting these settings will apply changes universally to all users.": "调整这些设置将会对所有用户生效",
|
||||
"admin": "管理员",
|
||||
"Admin": "管理员",
|
||||
|
@ -74,10 +74,10 @@
|
|||
"Allow Chat Deletion": "允许删除对话记录",
|
||||
"Allow Chat Edit": "允许编辑对话记录",
|
||||
"Allow Chat Export": "允许导出对话",
|
||||
"Allow Chat Params": "",
|
||||
"Allow Chat Params": "允许设置模型高级参数",
|
||||
"Allow Chat Share": "允许分享对话",
|
||||
"Allow Chat System Prompt": "允许使用对话系统提示词",
|
||||
"Allow Chat Valves": "",
|
||||
"Allow Chat Valves": "允许设置 Valves 变量",
|
||||
"Allow File Upload": "允许上传文件",
|
||||
"Allow Multiple Models in Chat": "允许同时与多个模型对话",
|
||||
"Allow non-local voices": "允许调用非本地音色",
|
||||
|
@ -97,7 +97,7 @@
|
|||
"Always Play Notification Sound": "始终播放通知声音",
|
||||
"Amazing": "很棒",
|
||||
"an assistant": "一个助手",
|
||||
"Analytics": "",
|
||||
"Analytics": "分析",
|
||||
"Analyzed": "已分析",
|
||||
"Analyzing...": "正在分析...",
|
||||
"and": "和",
|
||||
|
@ -106,7 +106,7 @@
|
|||
"Android": "Android",
|
||||
"API": "API",
|
||||
"API Base URL": "API 请求 URL",
|
||||
"API Base URL for Datalab Marker service. Defaults to: https://www.datalab.to/api/v1/marker": "",
|
||||
"API Base URL for Datalab Marker service. Defaults to: https://www.datalab.to/api/v1/marker": "Datalab Marker API 服务的请求 URL。默认为:https://www.datalab.to/api/v1/marker",
|
||||
"API details for using a vision-language model in the picture description. This parameter is mutually exclusive with picture_description_local.": "在图片描述中使用视觉语言模型的 API 详情。此参数不可与 picture_description_local 同时使用。",
|
||||
"API Key": "API 密钥",
|
||||
"API Key created.": "API 密钥已创建。",
|
||||
|
@ -165,16 +165,16 @@
|
|||
"Beta": "Beta",
|
||||
"Bing Search V7 Endpoint": "Bing 搜索 V7 端点",
|
||||
"Bing Search V7 Subscription Key": "Bing 搜索 V7 订阅密钥",
|
||||
"BM25 Weight": "",
|
||||
"BM25 Weight": "BM25 混合搜索权重",
|
||||
"Bocha Search API Key": "Bocha Search API 密钥",
|
||||
"Bold": "粗体",
|
||||
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "为受限响应提升或惩罚特定标记。偏置值将被限制在 -100 到 100(包括两端)之间。(默认:无)",
|
||||
"Both Docling OCR Engine and Language(s) must be provided or both left empty.": "必需提供 Docling OCR Engine 和语言,或者都留空。",
|
||||
"Brave Search API Key": "Brave Search API 密钥",
|
||||
"Bullet List": "无序列表",
|
||||
"Button ID": "",
|
||||
"Button Label": "",
|
||||
"Button Prompt": "",
|
||||
"Button ID": "按钮 ID",
|
||||
"Button Label": "按钮标题",
|
||||
"Button Prompt": "点击按钮后执行的提示词",
|
||||
"By {{name}}": "由 {{name}} 提供",
|
||||
"Bypass Embedding and Retrieval": "绕过嵌入和检索",
|
||||
"Bypass Web Loader": "绕过网页加载器",
|
||||
|
@ -199,7 +199,7 @@
|
|||
"Chat Bubble UI": "对话气泡样式",
|
||||
"Chat Controls": "对话高级设置",
|
||||
"Chat direction": "对话样式方向",
|
||||
"Chat ID": "",
|
||||
"Chat ID": "对话 ID",
|
||||
"Chat Overview": "对话概述",
|
||||
"Chat Permissions": "对话权限",
|
||||
"Chat Tags Auto-Generation": "自动生成对话标签",
|
||||
|
@ -233,11 +233,11 @@
|
|||
"Clone Chat": "克隆对话",
|
||||
"Clone of {{TITLE}}": "{{TITLE}} 的副本",
|
||||
"Close": "关闭",
|
||||
"Close Banner": "",
|
||||
"Close Banner": "关闭横幅",
|
||||
"Close Configure Connection Modal": "关闭外部连接配置弹窗",
|
||||
"Close modal": "关闭弹窗",
|
||||
"Close settings modal": "关闭设置弹窗",
|
||||
"Close Sidebar": "",
|
||||
"Close Sidebar": "收起侧边栏",
|
||||
"Code Block": "代码块",
|
||||
"Code execution": "代码执行",
|
||||
"Code Execution": "代码执行",
|
||||
|
@ -259,14 +259,14 @@
|
|||
"Command": "命令",
|
||||
"Comment": "注释",
|
||||
"Completions": "续写",
|
||||
"Compress Images in Channels": "",
|
||||
"Compress Images in Channels": "压缩频道中的图片",
|
||||
"Concurrent Requests": "并发请求",
|
||||
"Configure": "配置",
|
||||
"Confirm": "确认",
|
||||
"Confirm Password": "确认密码",
|
||||
"Confirm your action": "确认要继续吗?",
|
||||
"Confirm your new password": "确认新密码",
|
||||
"Confirm Your Password": "",
|
||||
"Confirm Your Password": "确认您的密码",
|
||||
"Connect to your own OpenAI compatible API endpoints.": "连接到您自有的 OpenAI 兼容 API 的接口端点",
|
||||
"Connect to your own OpenAPI compatible external tool servers.": "连接到您自有的 OpenAPI 兼容外部工具服务器",
|
||||
"Connection failed": "连接失败",
|
||||
|
@ -306,7 +306,7 @@
|
|||
"Create Account": "创建账号",
|
||||
"Create Admin Account": "创建管理员账号",
|
||||
"Create Channel": "创建频道",
|
||||
"Create Folder": "创建文件夹",
|
||||
"Create Folder": "创建分组",
|
||||
"Create Group": "创建权限组",
|
||||
"Create Knowledge": "创建知识",
|
||||
"Create new key": "创建新密钥",
|
||||
|
@ -334,7 +334,7 @@
|
|||
"Default": "默认",
|
||||
"Default (Open AI)": "默认 (OpenAI)",
|
||||
"Default (SentenceTransformers)": "默认 (SentenceTransformers)",
|
||||
"Default action buttons will be used.": "",
|
||||
"Default action buttons will be used.": "默认的快捷操作按钮将会被使用。",
|
||||
"Default description enabled": "默认描述已启用",
|
||||
"Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "默认模式通过在执行前调用一次工具,能够兼容更广泛的模型。原生模式利用模型内置的工具调用能力,但需要模型本身具备该功能的原生支持。",
|
||||
"Default Model": "默认模型",
|
||||
|
@ -354,7 +354,7 @@
|
|||
"Delete chat": "删除对话记录",
|
||||
"Delete Chat": "删除对话记录",
|
||||
"Delete chat?": "要删除此对话记录吗?",
|
||||
"Delete folder?": "要删除此文件夹吗?",
|
||||
"Delete folder?": "要删除此分组吗?",
|
||||
"Delete function?": "要删除此函数吗?",
|
||||
"Delete Message": "删除消息",
|
||||
"Delete message?": "要删除此消息吗?",
|
||||
|
@ -393,7 +393,7 @@
|
|||
"Discover, download, and explore model presets": "发现、下载并探索更多模型预设",
|
||||
"Display": "显示",
|
||||
"Display Emoji in Call": "在通话中显示 Emoji 表情符号",
|
||||
"Display Multi-model Responses in Tabs": "",
|
||||
"Display Multi-model Responses in Tabs": "在标签页中展示多模型的响应",
|
||||
"Display the username instead of You in the Chat": "在对话中显示用户名而不是 “你”",
|
||||
"Displays citations in the response": "在回复中显示引用",
|
||||
"Dive into knowledge": "深入知识的海洋",
|
||||
|
@ -440,7 +440,7 @@
|
|||
"Edit Channel": "编辑频道",
|
||||
"Edit Connection": "编辑连接",
|
||||
"Edit Default Permissions": "编辑默认权限",
|
||||
"Edit Folder": "编辑文件夹",
|
||||
"Edit Folder": "编辑分组",
|
||||
"Edit Memory": "编辑记忆",
|
||||
"Edit User": "编辑用户",
|
||||
"Edit User Group": "编辑用户组",
|
||||
|
@ -488,7 +488,7 @@
|
|||
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "输入以逗号分隔的 “token:bias_value” 对(例如:5432:100, 413:-100)",
|
||||
"Enter Config in JSON format": "输入 JSON 格式的配置",
|
||||
"Enter content for the pending user info overlay. Leave empty for default.": "输入用户待激活界面的内容。留空使用默认",
|
||||
"Enter Datalab Marker API Base URL": "",
|
||||
"Enter Datalab Marker API Base URL": "输入 Datalab Marker API 请求 URL",
|
||||
"Enter Datalab Marker API Key": "输入 Datalab Marker API 密钥",
|
||||
"Enter description": "输入简介描述",
|
||||
"Enter Docling OCR Engine": "输入 Docling OCR Engine",
|
||||
|
@ -506,13 +506,13 @@
|
|||
"Enter External Web Search URL": "输入外部联网搜索 URL",
|
||||
"Enter Firecrawl API Base URL": "输入 Firecrawl API URL",
|
||||
"Enter Firecrawl API Key": "输入 Firecrawl API 密钥",
|
||||
"Enter folder name": "输入文件夹名称",
|
||||
"Enter folder name": "输入分组名称",
|
||||
"Enter Github Raw URL": "输入 Github Raw URL",
|
||||
"Enter Google PSE API Key": "输入 Google PSE API 密钥",
|
||||
"Enter Google PSE Engine Id": "输入 Google PSE 引擎 ID",
|
||||
"Enter Image Size (e.g. 512x512)": "输入图像分辨率(例如:512x512)",
|
||||
"Enter Jina API Key": "输入 Jina API 密钥",
|
||||
"Enter JSON config (e.g., {\"disable_links\": true})": "",
|
||||
"Enter JSON config (e.g., {\"disable_links\": true})": "输入 JSON 配置(例如:{\"disable_links\": true})",
|
||||
"Enter Jupyter Password": "输入 Jupyter 密码",
|
||||
"Enter Jupyter Token": "输入 Jupyter 令牌",
|
||||
"Enter Jupyter URL": "输入 Jupyter URL",
|
||||
|
@ -613,7 +613,7 @@
|
|||
"Export Prompts": "导出提示词",
|
||||
"Export to CSV": "导出到 CSV",
|
||||
"Export Tools": "导出工具",
|
||||
"Export Users": "",
|
||||
"Export Users": "导出所有用户信息",
|
||||
"External": "外部",
|
||||
"External Document Loader URL required.": "需要外部文档加载器 URL",
|
||||
"External Task Model": "外部任务模型",
|
||||
|
@ -662,13 +662,13 @@
|
|||
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹伪造:无法使用姓名缩写作为头像。默认使用默认个人形象。",
|
||||
"Firecrawl API Base URL": "Firecrawl API URL",
|
||||
"Firecrawl API Key": "Firecrawl API 密钥",
|
||||
"Floating Quick Actions": "",
|
||||
"Floating Quick Actions": "快捷操作浮窗",
|
||||
"Focus chat input": "激活对话输入框",
|
||||
"Folder deleted successfully": "文件夹删除成功",
|
||||
"Folder Name": "文件夹名称",
|
||||
"Folder name cannot be empty.": "文件夹名称不能为空",
|
||||
"Folder name updated successfully": "文件夹名称更新成功",
|
||||
"Folder updated successfully": "文件夹更新成功",
|
||||
"Folder deleted successfully": "分组删除成功",
|
||||
"Folder Name": "分组名称",
|
||||
"Folder name cannot be empty.": "分组名称不能为空",
|
||||
"Folder name updated successfully": "分组名称更新成功",
|
||||
"Folder updated successfully": "分组更新成功",
|
||||
"Follow up": "追问",
|
||||
"Follow Up Generation": "追问生成",
|
||||
"Follow Up Generation Prompt": "追问生成提示词",
|
||||
|
@ -678,8 +678,8 @@
|
|||
"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 Lines": "",
|
||||
"Format the lines in the output. Defaults to False. If set to True, the lines will be formatted to detect inline math and styles.": "",
|
||||
"Format Lines": "行内容格式化",
|
||||
"Format the lines in the output. Defaults to False. If set to True, the lines will be formatted to detect inline math and styles.": "对输出中的文本行进行格式处理。默认为 False。设置为 True 时,将会格式化这些文本行,以检测并识别行内数学公式和样式。",
|
||||
"Format your variables using brackets like this:": "使用括号格式化您的变量,如下所示:",
|
||||
"Forwards system user session credentials to authenticate": "转发系统用户 session 凭证以进行身份验证",
|
||||
"Full Context Mode": "完整上下文模式",
|
||||
|
@ -776,7 +776,7 @@
|
|||
"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "影响算法对生成文本反馈的响应速度。较低的学习率将导致调整更慢,而较高的学习率将使算法反应更灵敏。",
|
||||
"Info": "信息",
|
||||
"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "注入整个内容作为上下文进行综合处理,适用于复杂查询",
|
||||
"Input": "",
|
||||
"Input": "输入",
|
||||
"Input commands": "输入命令",
|
||||
"Input Variables": "插入变量",
|
||||
"Insert": "插入",
|
||||
|
@ -789,7 +789,7 @@
|
|||
"Invalid file content": "文件内容无效",
|
||||
"Invalid file format.": "文件格式无效",
|
||||
"Invalid JSON file": "JSON 文件无效",
|
||||
"Invalid JSON format in Additional Config": "",
|
||||
"Invalid JSON format in Additional Config": "额外配置项中的 JSON 格式无效",
|
||||
"Invalid Tag": "无效标签",
|
||||
"is typing...": "输入中...",
|
||||
"Italic": "斜体",
|
||||
|
@ -829,7 +829,7 @@
|
|||
"LDAP": "LDAP",
|
||||
"LDAP server updated": "LDAP 服务器已更新",
|
||||
"Leaderboard": "排行榜",
|
||||
"Learn More": "",
|
||||
"Learn More": "了解更多",
|
||||
"Learn more about OpenAPI tool servers.": "进一步了解 OpenAPI 工具服务器",
|
||||
"Leave empty for no compression": "留空则不压缩",
|
||||
"Leave empty for unlimited": "留空则无限制",
|
||||
|
@ -839,7 +839,7 @@
|
|||
"Leave empty to include all models or select specific models": "留空表示包含所有模型或请选择模型",
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "留空以使用默认提示词,或输入自定义提示词",
|
||||
"Leave model field empty to use the default model.": "将模型字段留空以使用默认模型",
|
||||
"lexical": "",
|
||||
"lexical": "关键词",
|
||||
"License": "授权",
|
||||
"Lift List": "上移列表",
|
||||
"Light": "浅色",
|
||||
|
@ -905,10 +905,10 @@
|
|||
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。",
|
||||
"Model Filtering": "模型白名单",
|
||||
"Model ID": "模型 ID",
|
||||
"Model ID is required.": "",
|
||||
"Model ID is required.": "模型 ID 是必填项。",
|
||||
"Model IDs": "模型 ID",
|
||||
"Model Name": "模型名称",
|
||||
"Model Name is required.": "",
|
||||
"Model Name is required.": "模型名称是必填项。",
|
||||
"Model not selected": "未选择模型",
|
||||
"Model Params": "模型参数",
|
||||
"Model Permissions": "模型权限",
|
||||
|
@ -923,14 +923,14 @@
|
|||
"Mojeek Search API Key": "Mojeek Search API 密钥",
|
||||
"more": "更多",
|
||||
"More": "更多",
|
||||
"More Concise": "",
|
||||
"More Options": "",
|
||||
"More Concise": "精炼表达",
|
||||
"More Options": "更多选项",
|
||||
"Name": "名称",
|
||||
"Name your knowledge base": "为您的知识库命名",
|
||||
"Native": "原生",
|
||||
"New Button": "",
|
||||
"New Button": "新建按钮",
|
||||
"New Chat": "新对话",
|
||||
"New Folder": "新文件夹",
|
||||
"New Folder": "新分组",
|
||||
"New Function": "新函数",
|
||||
"New Note": "新笔记",
|
||||
"New Password": "新密码",
|
||||
|
@ -996,10 +996,10 @@
|
|||
"Open file": "打开文件",
|
||||
"Open in full screen": "全屏打开",
|
||||
"Open modal to configure connection": "打开外部连接配置弹窗",
|
||||
"Open Modal To Manage Floating Quick Actions": "",
|
||||
"Open Modal To Manage Floating Quick Actions": "管理快捷操作浮窗",
|
||||
"Open new chat": "打开新对话",
|
||||
"Open Sidebar": "",
|
||||
"Open User Profile Menu": "",
|
||||
"Open Sidebar": "展开侧边栏",
|
||||
"Open User Profile Menu": "打开个人资料菜单",
|
||||
"Open WebUI can use tools provided by any OpenAPI server.": "Open WebUI 可使用任何 OpenAPI 服务器提供的工具。",
|
||||
"Open WebUI uses faster-whisper internally.": "Open WebUI 使用内置 faster-whisper",
|
||||
"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Open WebUI 使用 SpeechT5 和 CMU Arctic speaker embedding。",
|
||||
|
@ -1024,7 +1024,7 @@
|
|||
"Paginate": "分页",
|
||||
"Parameters": "参数",
|
||||
"Password": "密码",
|
||||
"Passwords do not match.": "",
|
||||
"Passwords do not match.": "两次输入的密码不一致。",
|
||||
"Paste Large Text as File": "粘贴大文本为文件",
|
||||
"PDF document (.pdf)": "PDF 文档 (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF 图像处理(使用 OCR)",
|
||||
|
@ -1066,7 +1066,7 @@
|
|||
"Please select a model first.": "请先选择一个模型",
|
||||
"Please select a model.": "请选择一个模型。",
|
||||
"Please select a reason": "请选择原因",
|
||||
"Please wait until all files are uploaded.": "",
|
||||
"Please wait until all files are uploaded.": "请等待所有文件上传完毕。",
|
||||
"Port": "端口",
|
||||
"Positive attitude": "积极的态度",
|
||||
"Prefix ID": "Prefix ID",
|
||||
|
@ -1092,7 +1092,7 @@
|
|||
"Pull \"{{searchValue}}\" from Ollama.com": "从 Ollama.com 拉取 \"{{searchValue}}\"",
|
||||
"Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型",
|
||||
"Query Generation Prompt": "查询生成提示词",
|
||||
"Quick Actions": "",
|
||||
"Quick Actions": "快捷操作",
|
||||
"RAG Template": "RAG 提示词模板",
|
||||
"Rating": "评价",
|
||||
"Re-rank models by topic similarity": "根据主题相似性对模型重新排序",
|
||||
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "来自",
|
||||
"Refused when it shouldn't have": "操作被意外拒绝",
|
||||
"Regenerate": "重新生成",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "重建索引",
|
||||
"Reindex Knowledge Base Vectors": "重建知识库向量索引",
|
||||
"Release Notes": "更新日志",
|
||||
|
@ -1161,13 +1162,13 @@
|
|||
"Search Chats": "搜索对话",
|
||||
"Search Collection": "搜索内容",
|
||||
"Search Filters": "搜索过滤器",
|
||||
"search for archived chats": "",
|
||||
"search for folders": "",
|
||||
"search for pinned chats": "",
|
||||
"search for shared chats": "",
|
||||
"search for archived chats": "搜索已归档的聊天",
|
||||
"search for folders": "搜索分组",
|
||||
"search for pinned chats": "搜索已置顶的聊天",
|
||||
"search for shared chats": "搜索已共享的聊天",
|
||||
"search for tags": "搜索标签",
|
||||
"Search Functions": "搜索函数",
|
||||
"Search In Models": "",
|
||||
"Search In Models": "搜索模型",
|
||||
"Search Knowledge": "搜索知识",
|
||||
"Search Models": "搜索模型",
|
||||
"Search Notes": "搜索笔记",
|
||||
|
@ -1201,7 +1202,7 @@
|
|||
"Select Knowledge": "选择知识",
|
||||
"Select only one model to call": "请仅选择一个模型来语音通话",
|
||||
"Selected model(s) do not support image inputs": "已选择的模型不支持发送图像",
|
||||
"semantic": "",
|
||||
"semantic": "语义",
|
||||
"Semantic distance to query": "语义距离查询",
|
||||
"Send": "发送",
|
||||
"Send a Message": "输入消息",
|
||||
|
@ -1245,7 +1246,7 @@
|
|||
"Show \"What's New\" modal on login": "在登录时显示 “更新内容” 弹窗",
|
||||
"Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息",
|
||||
"Show All": "显示全部",
|
||||
"Show Formatting Toolbar": "",
|
||||
"Show Formatting Toolbar": "显示文本格式工具栏",
|
||||
"Show image preview": "显示图像预览",
|
||||
"Show Less": "收起",
|
||||
"Show Model": "显示模型",
|
||||
|
@ -1258,7 +1259,7 @@
|
|||
"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 False.": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to False.": "借助大语言模型(LLM)提升表格、表单、行内数学公式及版面检测的准确性,但会增加响应时间。默认值:False。",
|
||||
"Signing in to {{WEBUI_NAME}}": "正在登录 {{WEBUI_NAME}}",
|
||||
"Sink List": "下移列表",
|
||||
"sk-1234": "sk-1234",
|
||||
|
@ -1275,7 +1276,7 @@
|
|||
"Stop Generating": "停止生成",
|
||||
"Stop Sequence": "停止序列 (Stop Sequence)",
|
||||
"Stream Chat Response": "流式对话响应 (Stream Chat Response)",
|
||||
"Stream Delta Chunk Size": "",
|
||||
"Stream Delta Chunk Size": "流式增量输出分块大小",
|
||||
"Strikethrough": "删除线",
|
||||
"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 识别” 则此设置无效。默认为关闭",
|
||||
|
@ -1285,7 +1286,7 @@
|
|||
"Subtitle (e.g. about the Roman Empire)": "副标题(例如:关于罗马帝国的副标题)",
|
||||
"Success": "成功",
|
||||
"Successfully updated.": "成功更新",
|
||||
"Suggest a change": "",
|
||||
"Suggest a change": "提出修改建议",
|
||||
"Suggested": "建议",
|
||||
"Support": "支持",
|
||||
"Support this plugin:": "支持此插件",
|
||||
|
@ -1327,9 +1328,9 @@
|
|||
"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'.": "文本输出格式。可选 '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 stream delta chunk size for the model. Increasing the chunk size will make the model respond with larger pieces of text at once.": "",
|
||||
"The stream delta chunk size for the model. Increasing the chunk size will make the model respond with larger pieces of text at once.": "模型在流式输出时每次发送的增量文本块大小。数值越大,模型每次返回的文字会更多。",
|
||||
"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "模型的温度。增加温度将使模型的回答更有创意。",
|
||||
"The Weight of BM25 Hybrid Search. 0 more lexical, 1 more semantic. Default 0.5": "",
|
||||
"The Weight of BM25 Hybrid Search. 0 more lexical, 1 more semantic. Default 0.5": "BM25 混合检索权重(输入靠近 0 的数字会更倾向于关键词搜索,反之输入靠近 1 的数字会更倾向于全语义搜索,默认为 0.5)",
|
||||
"The width in pixels to compress images to. Leave empty for no compression.": "图片压缩宽度(像素)。留空则不压缩。",
|
||||
"Theme": "主题",
|
||||
"Thinking...": "正在思考...",
|
||||
|
@ -1354,7 +1355,7 @@
|
|||
"Thorough explanation": "解释较为详细",
|
||||
"Thought for {{DURATION}}": "思考用时 {{DURATION}}",
|
||||
"Thought for {{DURATION}} seconds": "思考用时 {{DURATION}} 秒",
|
||||
"Thought for less than a second": "",
|
||||
"Thought for less than a second": "思考用时小于 1 秒",
|
||||
"Tika": "Tika",
|
||||
"Tika Server URL required.": "请输入 Tika 服务器 URL",
|
||||
"Tiktoken": "Tiktoken",
|
||||
|
@ -1403,7 +1404,7 @@
|
|||
"Transformers": "Transformers",
|
||||
"Trouble accessing Ollama?": "访问 Ollama 时遇到问题?",
|
||||
"Trust Proxy Environment": "信任代理环境",
|
||||
"Try Again": "",
|
||||
"Try Again": "重新生成",
|
||||
"TTS Model": "文本转语音模型",
|
||||
"TTS Settings": "文本转语音设置",
|
||||
"TTS Voice": "文本转语音音色",
|
||||
|
@ -1450,7 +1451,7 @@
|
|||
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "使用由 http_proxy 和 https_proxy 环境变量指定的代理获取页面内容",
|
||||
"user": "用户",
|
||||
"User": "用户",
|
||||
"User Groups": "",
|
||||
"User Groups": "用户组",
|
||||
"User location successfully retrieved.": "成功检索到用户位置",
|
||||
"User menu": "用户菜单",
|
||||
"User Webhooks": "用户 Webhook",
|
||||
|
|
|
@ -1108,6 +1108,7 @@
|
|||
"References from": "引用來源",
|
||||
"Refused when it shouldn't have": "不應拒絕時拒絕了",
|
||||
"Regenerate": "重新產生回應",
|
||||
"Regenerate Menu": "",
|
||||
"Reindex": "重新索引",
|
||||
"Reindex Knowledge Base Vectors": "重新索引知識庫向量",
|
||||
"Release Notes": "版本資訊",
|
||||
|
|
Loading…
Reference in New Issue